From bd4b0e61623a71564dbf04e365e2a13905692315 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Sat, 30 Mar 2024 09:40:20 -0700 Subject: [PATCH] Add documentation for 1.5.5. --- .../Guacamole.ArrayBufferReader.html | 451 + .../Guacamole.ArrayBufferWriter.html | 755 + .../Guacamole.AudioContextFactory.html | 333 + .../Guacamole.AudioPlayer.html | 734 + .../Guacamole.AudioRecorder.html | 830 ++ .../Guacamole.BlobReader.html | 699 + .../Guacamole.BlobWriter.html | 1077 ++ .../Guacamole.ChainedTunnel.html | 1685 +++ .../guacamole-common-js/Guacamole.Client.html | 6395 +++++++++ .../Guacamole.DataURIReader.html | 454 + .../Guacamole.Display.VisibleLayer.html | 6655 +++++++++ .../Guacamole.Display.html | 9461 +++++++++++++ .../Guacamole.Event.DOMEvent.html | 1045 ++ .../Guacamole.Event.Target.html | 1202 ++ .../guacamole-common-js/Guacamole.Event.html | 643 + .../Guacamole.HTTPTunnel.html | 1767 +++ .../Guacamole.InputSink.html | 380 + .../Guacamole.InputStream.html | 713 + .../Guacamole.IntegerPool.html | 500 + .../Guacamole.JSONReader.html | 678 + .../Guacamole.Keyboard.ModifierState.html | 698 + .../Guacamole.Keyboard.html | 1696 +++ .../Guacamole.Layer.Pixel.html | 586 + .../guacamole-common-js/Guacamole.Layer.html | 5849 ++++++++ .../Guacamole.Mouse.Event.Target.html | 2881 ++++ .../Guacamole.Mouse.Event.html | 1025 ++ .../Guacamole.Mouse.State.html | 1222 ++ .../Guacamole.Mouse.Touchpad.html | 3072 +++++ .../Guacamole.Mouse.Touchscreen.html | 3136 +++++ .../guacamole-common-js/Guacamole.Mouse.html | 3516 +++++ .../guacamole-common-js/Guacamole.Object.html | 1120 ++ .../Guacamole.OnScreenKeyboard.Key.html | 648 + .../Guacamole.OnScreenKeyboard.Layout.html | 679 + .../Guacamole.OnScreenKeyboard.html | 985 ++ .../Guacamole.OutputStream.html | 690 + .../guacamole-common-js/Guacamole.Parser.html | 964 ++ .../Guacamole.Position.html | 803 ++ .../Guacamole.RawAudioFormat.html | 615 + .../Guacamole.RawAudioPlayer.html | 636 + .../Guacamole.RawAudioRecorder.html | 737 + .../Guacamole.SessionRecording.html | 2323 ++++ .../Guacamole.StaticHTTPTunnel.html | 1842 +++ .../guacamole-common-js/Guacamole.Status.html | 599 + .../Guacamole.StringReader.html | 527 + .../Guacamole.StringWriter.html | 592 + .../Guacamole.Touch.Event.html | 973 ++ .../Guacamole.Touch.State.html | 1010 ++ .../guacamole-common-js/Guacamole.Touch.html | 1690 +++ .../guacamole-common-js/Guacamole.Tunnel.html | 1708 +++ .../Guacamole.UTF8Parser.html | 173 + .../Guacamole.VideoPlayer.html | 756 + .../Guacamole.WebSocketTunnel.html | 1669 +++ doc/1.5.5/guacamole-common-js/Guacamole.html | 334 + .../fonts/OpenSans-Bold-webfont.eot | Bin 0 -> 19544 bytes .../fonts/OpenSans-Bold-webfont.svg | 1830 +++ .../fonts/OpenSans-Bold-webfont.woff | Bin 0 -> 22432 bytes .../fonts/OpenSans-BoldItalic-webfont.eot | Bin 0 -> 20133 bytes .../fonts/OpenSans-BoldItalic-webfont.svg | 1830 +++ .../fonts/OpenSans-BoldItalic-webfont.woff | Bin 0 -> 23048 bytes .../fonts/OpenSans-Italic-webfont.eot | Bin 0 -> 20265 bytes .../fonts/OpenSans-Italic-webfont.svg | 1830 +++ .../fonts/OpenSans-Italic-webfont.woff | Bin 0 -> 23188 bytes .../fonts/OpenSans-Light-webfont.eot | Bin 0 -> 19514 bytes .../fonts/OpenSans-Light-webfont.svg | 1831 +++ .../fonts/OpenSans-Light-webfont.woff | Bin 0 -> 22248 bytes .../fonts/OpenSans-LightItalic-webfont.eot | Bin 0 -> 20535 bytes .../fonts/OpenSans-LightItalic-webfont.svg | 1835 +++ .../fonts/OpenSans-LightItalic-webfont.woff | Bin 0 -> 23400 bytes .../fonts/OpenSans-Regular-webfont.eot | Bin 0 -> 19836 bytes .../fonts/OpenSans-Regular-webfont.svg | 1831 +++ .../fonts/OpenSans-Regular-webfont.woff | Bin 0 -> 22660 bytes doc/1.5.5/guacamole-common-js/index.html | 65 + ...n_webapp_modules_ArrayBufferReader.js.html | 127 + ...n_webapp_modules_ArrayBufferWriter.js.html | 179 + ...webapp_modules_AudioContextFactory.js.html | 130 + .../main_webapp_modules_AudioPlayer.js.html | 557 + .../main_webapp_modules_AudioRecorder.js.html | 655 + .../main_webapp_modules_BlobReader.js.html | 189 + .../main_webapp_modules_BlobWriter.js.html | 296 + .../main_webapp_modules_Client.js.html | 2079 +++ .../main_webapp_modules_DataURIReader.js.html | 139 + .../main_webapp_modules_Display.js.html | 1908 +++ .../main_webapp_modules_Event.js.html | 377 + .../main_webapp_modules_InputSink.js.html | 180 + .../main_webapp_modules_InputStream.js.html | 130 + .../main_webapp_modules_IntegerPool.js.html | 130 + .../main_webapp_modules_JSONReader.js.html | 165 + .../main_webapp_modules_Keyboard.js.html | 1561 +++ .../main_webapp_modules_Layer.js.html | 1203 ++ .../main_webapp_modules_Mouse.js.html | 1316 ++ .../main_webapp_modules_Namespace.js.html | 77 + .../main_webapp_modules_Object.js.html | 261 + ...in_webapp_modules_OnScreenKeyboard.js.html | 998 ++ .../main_webapp_modules_OutputStream.js.html | 126 + .../main_webapp_modules_Parser.js.html | 399 + .../main_webapp_modules_Position.js.html | 169 + ...main_webapp_modules_RawAudioFormat.js.html | 197 + ...in_webapp_modules_SessionRecording.js.html | 1177 ++ .../main_webapp_modules_Status.js.html | 373 + .../main_webapp_modules_StringReader.js.html | 139 + .../main_webapp_modules_StringWriter.js.html | 255 + .../main_webapp_modules_Touch.js.html | 331 + .../main_webapp_modules_Tunnel.js.html | 1428 ++ .../main_webapp_modules_UTF8Parser.js.html | 176 + .../main_webapp_modules_Version.js.html | 81 + .../main_webapp_modules_VideoPlayer.js.html | 159 + .../guacamole-common-js/scripts/linenumber.js | 25 + .../scripts/prettify/Apache-License-2.0.txt | 202 + .../scripts/prettify/lang-css.js | 2 + .../scripts/prettify/prettify.js | 28 + .../styles/jsdoc-default.css | 358 + .../styles/prettify-jsdoc.css | 111 + .../styles/prettify-tomorrow.css | 132 + .../test_javascript_EventSpec.js.html | 192 + .../guacamole-common/allclasses-index.html | 508 + doc/1.5.5/guacamole-common/allclasses.html | 79 + .../guacamole-common/allpackages-index.html | 202 + .../guacamole-common/constant-values.html | 218 + .../guacamole-common/deprecated-list.html | 186 + doc/1.5.5/guacamole-common/element-list | 6 + doc/1.5.5/guacamole-common/help-doc.html | 282 + doc/1.5.5/guacamole-common/index-all.html | 1667 +++ doc/1.5.5/guacamole-common/index.html | 198 + .../guacamole-common/jquery-ui.overrides.css | 35 + .../jquery/external/jquery/jquery.js | 10872 +++++++++++++++ .../jquery/jquery-3.6.1.min.js | 2 + .../guacamole-common/jquery/jquery-ui.min.css | 6 + .../guacamole-common/jquery/jquery-ui.min.js | 6 + .../jquery/jszip-utils/dist/jszip-utils-ie.js | 56 + .../jszip-utils/dist/jszip-utils-ie.min.js | 10 + .../jquery/jszip-utils/dist/jszip-utils.js | 118 + .../jszip-utils/dist/jszip-utils.min.js | 10 + .../jquery/jszip/dist/jszip.js | 11370 ++++++++++++++++ .../jquery/jszip/dist/jszip.min.js | 13 + .../legal/ADDITIONAL_LICENSE_INFO | 37 + .../guacamole-common/legal/ASSEMBLY_EXCEPTION | 27 + doc/1.5.5/guacamole-common/legal/LICENSE | 347 + doc/1.5.5/guacamole-common/legal/jquery.md | 72 + doc/1.5.5/guacamole-common/legal/jqueryUI.md | 49 + doc/1.5.5/guacamole-common/legal/jszip.md | 653 + doc/1.5.5/guacamole-common/legal/pako.md | 45 + .../guacamole-common/member-search-index.js | 1 + .../guacamole-common/member-search-index.zip | Bin 0 -> 2926 bytes .../GuacamoleClientBadTypeException.html | 416 + .../guacamole/GuacamoleClientException.html | 416 + .../GuacamoleClientOverrunException.html | 418 + .../GuacamoleClientTimeoutException.html | 415 + .../GuacamoleClientTooManyException.html | 417 + .../GuacamoleConnectionClosedException.html | 418 + .../apache/guacamole/GuacamoleException.html | 448 + .../GuacamoleResourceClosedException.html | 416 + .../GuacamoleResourceConflictException.html | 417 + .../GuacamoleResourceNotFoundException.html | 418 + .../guacamole/GuacamoleSecurityException.html | 420 + .../GuacamoleServerBusyException.html | 416 + .../guacamole/GuacamoleServerException.html | 416 + .../GuacamoleSessionClosedException.html | 416 + .../GuacamoleSessionConflictException.html | 416 + .../GuacamoleSessionTimeoutException.html | 416 + .../GuacamoleUnauthorizedException.html | 422 + .../GuacamoleUnsupportedException.html | 416 + .../guacamole/GuacamoleUpstreamException.html | 417 + .../GuacamoleUpstreamNotFoundException.html | 416 + .../GuacamoleUpstreamTimeoutException.html | 418 + ...GuacamoleUpstreamUnavailableException.html | 420 + .../GuacamoleClientBadTypeException.html | 150 + .../class-use/GuacamoleClientException.html | 266 + .../GuacamoleClientOverrunException.html | 150 + .../GuacamoleClientTimeoutException.html | 150 + .../GuacamoleClientTooManyException.html | 150 + .../GuacamoleConnectionClosedException.html | 150 + .../class-use/GuacamoleException.html | 789 ++ .../GuacamoleResourceClosedException.html | 150 + .../GuacamoleResourceConflictException.html | 150 + .../GuacamoleResourceNotFoundException.html | 150 + .../class-use/GuacamoleSecurityException.html | 202 + .../GuacamoleServerBusyException.html | 150 + .../class-use/GuacamoleServerException.html | 217 + .../GuacamoleSessionClosedException.html | 150 + .../GuacamoleSessionConflictException.html | 150 + .../GuacamoleSessionTimeoutException.html | 150 + .../GuacamoleUnauthorizedException.html | 150 + .../GuacamoleUnsupportedException.html | 150 + .../class-use/GuacamoleUpstreamException.html | 280 + .../GuacamoleUpstreamNotFoundException.html | 150 + .../GuacamoleUpstreamTimeoutException.html | 150 + ...GuacamoleUpstreamUnavailableException.html | 150 + .../apache/guacamole/io/GuacamoleReader.html | 333 + .../apache/guacamole/io/GuacamoleWriter.html | 333 + .../guacamole/io/ReaderGuacamoleReader.html | 408 + .../guacamole/io/WriterGuacamoleWriter.html | 408 + .../io/class-use/GuacamoleReader.html | 336 + .../io/class-use/GuacamoleWriter.html | 331 + .../io/class-use/ReaderGuacamoleReader.html | 150 + .../io/class-use/WriterGuacamoleWriter.html | 150 + .../apache/guacamole/io/package-summary.html | 208 + .../org/apache/guacamole/io/package-tree.html | 173 + .../org/apache/guacamole/io/package-use.html | 264 + .../net/AbstractGuacamoleTunnel.html | 540 + .../net/DelegatingGuacamoleSocket.html | 480 + .../net/DelegatingGuacamoleTunnel.html | 585 + .../apache/guacamole/net/GuacamoleSocket.html | 371 + .../apache/guacamole/net/GuacamoleTunnel.html | 523 + .../guacamole/net/InetGuacamoleSocket.html | 437 + .../guacamole/net/SSLGuacamoleSocket.html | 437 + .../guacamole/net/SimpleGuacamoleTunnel.html | 384 + .../class-use/AbstractGuacamoleTunnel.html | 199 + .../class-use/DelegatingGuacamoleSocket.html | 216 + .../class-use/DelegatingGuacamoleTunnel.html | 150 + .../net/class-use/GuacamoleSocket.html | 378 + .../net/class-use/GuacamoleTunnel.html | 343 + .../net/class-use/InetGuacamoleSocket.html | 150 + .../net/class-use/SSLGuacamoleSocket.html | 150 + .../net/class-use/SimpleGuacamoleTunnel.html | 150 + .../apache/guacamole/net/package-summary.html | 235 + .../apache/guacamole/net/package-tree.html | 180 + .../org/apache/guacamole/net/package-use.html | 287 + .../org/apache/guacamole/package-summary.html | 326 + .../org/apache/guacamole/package-tree.html | 209 + .../org/apache/guacamole/package-use.html | 357 + .../protocol/ConfiguredGuacamoleSocket.html | 482 + .../protocol/FailoverGuacamoleSocket.html | 412 + .../protocol/FilteredGuacamoleReader.html | 413 + .../protocol/FilteredGuacamoleSocket.html | 394 + .../protocol/FilteredGuacamoleWriter.html | 414 + .../protocol/GuacamoleClientInformation.html | 589 + .../protocol/GuacamoleConfiguration.html | 578 + .../guacamole/protocol/GuacamoleFilter.html | 275 + .../protocol/GuacamoleInstruction.html | 408 + .../guacamole/protocol/GuacamoleParser.html | 516 + .../protocol/GuacamoleProtocolCapability.html | 501 + .../protocol/GuacamoleProtocolVersion.html | 616 + .../guacamole/protocol/GuacamoleStatus.html | 842 ++ .../class-use/ConfiguredGuacamoleSocket.html | 150 + .../class-use/FailoverGuacamoleSocket.html | 150 + .../class-use/FilteredGuacamoleReader.html | 150 + .../class-use/FilteredGuacamoleSocket.html | 150 + .../class-use/FilteredGuacamoleWriter.html | 150 + .../class-use/GuacamoleClientInformation.html | 200 + .../class-use/GuacamoleConfiguration.html | 235 + .../protocol/class-use/GuacamoleFilter.html | 216 + .../class-use/GuacamoleInstruction.html | 293 + .../protocol/class-use/GuacamoleParser.html | 150 + .../GuacamoleProtocolCapability.html | 206 + .../class-use/GuacamoleProtocolVersion.html | 285 + .../protocol/class-use/GuacamoleStatus.html | 351 + .../guacamole/protocol/package-summary.html | 280 + .../guacamole/protocol/package-tree.html | 199 + .../guacamole/protocol/package-use.html | 284 + .../servlet/GuacamoleHTTPTunnelServlet.html | 745 + .../class-use/GuacamoleHTTPTunnelServlet.html | 150 + .../guacamole/servlet/package-summary.html | 177 + .../guacamole/servlet/package-tree.html | 173 + .../apache/guacamole/servlet/package-use.html | 150 + .../GuacamoleWebSocketTunnelEndpoint.html | 397 + .../GuacamoleWebSocketTunnelEndpoint.html | 150 + .../guacamole/websocket/package-summary.html | 171 + .../guacamole/websocket/package-tree.html | 169 + .../guacamole/websocket/package-use.html | 150 + .../guacamole-common/overview-summary.html | 23 + doc/1.5.5/guacamole-common/overview-tree.html | 277 + .../guacamole-common/package-search-index.js | 1 + .../guacamole-common/package-search-index.zip | Bin 0 -> 270 bytes .../guacamole-common/resources/glass.png | Bin 0 -> 499 bytes doc/1.5.5/guacamole-common/resources/x.png | Bin 0 -> 394 bytes doc/1.5.5/guacamole-common/script.js | 149 + doc/1.5.5/guacamole-common/search.js | 326 + .../guacamole-common/serialized-form.html | 351 + doc/1.5.5/guacamole-common/stylesheet.css | 910 ++ .../guacamole-common/type-search-index.js | 1 + .../guacamole-common/type-search-index.zip | Bin 0 -> 654 bytes doc/1.5.5/guacamole-ext/allclasses-index.html | 1301 ++ doc/1.5.5/guacamole-ext/allclasses.html | 195 + .../guacamole-ext/allpackages-index.html | 241 + doc/1.5.5/guacamole-ext/constant-values.html | 434 + doc/1.5.5/guacamole-ext/deprecated-list.html | 360 + doc/1.5.5/guacamole-ext/element-list | 13 + doc/1.5.5/guacamole-ext/help-doc.html | 282 + doc/1.5.5/guacamole-ext/index-all.html | 4693 +++++++ doc/1.5.5/guacamole-ext/index.html | 237 + .../guacamole-ext/jquery-ui.overrides.css | 35 + .../jquery/external/jquery/jquery.js | 10872 +++++++++++++++ .../guacamole-ext/jquery/jquery-3.6.1.min.js | 2 + .../guacamole-ext/jquery/jquery-ui.min.css | 6 + .../guacamole-ext/jquery/jquery-ui.min.js | 6 + .../jquery/jszip-utils/dist/jszip-utils-ie.js | 56 + .../jszip-utils/dist/jszip-utils-ie.min.js | 10 + .../jquery/jszip-utils/dist/jszip-utils.js | 118 + .../jszip-utils/dist/jszip-utils.min.js | 10 + .../guacamole-ext/jquery/jszip/dist/jszip.js | 11370 ++++++++++++++++ .../jquery/jszip/dist/jszip.min.js | 13 + .../legal/ADDITIONAL_LICENSE_INFO | 37 + .../guacamole-ext/legal/ASSEMBLY_EXCEPTION | 27 + doc/1.5.5/guacamole-ext/legal/LICENSE | 347 + doc/1.5.5/guacamole-ext/legal/jquery.md | 72 + doc/1.5.5/guacamole-ext/legal/jqueryUI.md | 49 + doc/1.5.5/guacamole-ext/legal/jszip.md | 653 + doc/1.5.5/guacamole-ext/legal/pako.md | 45 + .../guacamole-ext/member-search-index.js | 1 + .../guacamole-ext/member-search-index.zip | Bin 0 -> 8522 bytes .../environment/DelegatingEnvironment.html | 591 + .../guacamole/environment/Environment.html | 565 + .../environment/LocalEnvironment.html | 621 + .../class-use/DelegatingEnvironment.html | 150 + .../environment/class-use/Environment.html | 222 + .../class-use/LocalEnvironment.html | 197 + .../environment/package-summary.html | 197 + .../guacamole/environment/package-tree.html | 172 + .../guacamole/environment/package-use.html | 196 + .../apache/guacamole/form/BooleanField.html | 316 + .../org/apache/guacamole/form/DateField.html | 436 + .../org/apache/guacamole/form/EmailField.html | 307 + .../org/apache/guacamole/form/EnumField.html | 311 + .../org/apache/guacamole/form/Field.Type.html | 641 + .../org/apache/guacamole/form/Field.html | 509 + .../apache/guacamole/form/FieldOption.html | 405 + .../org/apache/guacamole/form/Form.html | 411 + .../apache/guacamole/form/LanguageField.html | 361 + .../apache/guacamole/form/MultilineField.html | 307 + .../apache/guacamole/form/NumericField.html | 384 + .../apache/guacamole/form/PasswordField.html | 308 + .../apache/guacamole/form/RedirectField.html | 394 + .../form/TerminalColorSchemeField.html | 309 + .../org/apache/guacamole/form/TextField.html | 382 + .../org/apache/guacamole/form/TimeField.html | 436 + .../apache/guacamole/form/TimeZoneField.html | 359 + .../apache/guacamole/form/UsernameField.html | 308 + .../form/class-use/BooleanField.html | 150 + .../guacamole/form/class-use/DateField.html | 150 + .../guacamole/form/class-use/EmailField.html | 150 + .../guacamole/form/class-use/EnumField.html | 150 + .../guacamole/form/class-use/Field.Type.html | 150 + .../guacamole/form/class-use/Field.html | 464 + .../guacamole/form/class-use/FieldOption.html | 150 + .../apache/guacamole/form/class-use/Form.html | 377 + .../form/class-use/LanguageField.html | 150 + .../form/class-use/MultilineField.html | 150 + .../form/class-use/NumericField.html | 150 + .../form/class-use/PasswordField.html | 150 + .../form/class-use/RedirectField.html | 150 + .../class-use/TerminalColorSchemeField.html | 150 + .../guacamole/form/class-use/TextField.html | 150 + .../guacamole/form/class-use/TimeField.html | 150 + .../form/class-use/TimeZoneField.html | 150 + .../form/class-use/UsernameField.html | 150 + .../guacamole/form/package-summary.html | 282 + .../apache/guacamole/form/package-tree.html | 185 + .../apache/guacamole/form/package-use.html | 264 + .../guacamole/language/Translatable.html | 270 + ...atableGuacamoleClientBadTypeException.html | 489 + .../TranslatableGuacamoleClientException.html | 484 + ...atableGuacamoleClientOverrunException.html | 489 + ...atableGuacamoleClientTimeoutException.html | 489 + ...atableGuacamoleClientTooManyException.html | 489 + ...bleGuacamoleConnectionClosedException.html | 489 + ...slatableGuacamoleCredentialsException.html | 522 + ...amoleInsufficientCredentialsException.html | 527 + ...eGuacamoleInvalidCredentialsException.html | 527 + ...tableGuacamoleResourceClosedException.html | 489 + ...bleGuacamoleResourceConflictException.html | 489 + ...bleGuacamoleResourceNotFoundException.html | 489 + ...ranslatableGuacamoleSecurityException.html | 489 + ...nslatableGuacamoleServerBusyException.html | 489 + .../TranslatableGuacamoleServerException.html | 484 + ...atableGuacamoleSessionClosedException.html | 489 + ...ableGuacamoleSessionConflictException.html | 489 + ...tableGuacamoleSessionTimeoutException.html | 489 + ...latableGuacamoleUnauthorizedException.html | 494 + ...slatableGuacamoleUnsupportedException.html | 489 + ...ranslatableGuacamoleUpstreamException.html | 484 + ...bleGuacamoleUpstreamNotFoundException.html | 489 + ...ableGuacamoleUpstreamTimeoutException.html | 489 + ...GuacamoleUpstreamUnavailableException.html | 489 + .../language/TranslatableMessage.html | 382 + .../language/class-use/Translatable.html | 436 + ...atableGuacamoleClientBadTypeException.html | 150 + .../TranslatableGuacamoleClientException.html | 150 + ...atableGuacamoleClientOverrunException.html | 150 + ...atableGuacamoleClientTimeoutException.html | 150 + ...atableGuacamoleClientTooManyException.html | 150 + ...bleGuacamoleConnectionClosedException.html | 150 + ...slatableGuacamoleCredentialsException.html | 150 + ...amoleInsufficientCredentialsException.html | 150 + ...eGuacamoleInvalidCredentialsException.html | 150 + ...tableGuacamoleResourceClosedException.html | 150 + ...bleGuacamoleResourceConflictException.html | 150 + ...bleGuacamoleResourceNotFoundException.html | 150 + ...ranslatableGuacamoleSecurityException.html | 150 + ...nslatableGuacamoleServerBusyException.html | 150 + .../TranslatableGuacamoleServerException.html | 150 + ...atableGuacamoleSessionClosedException.html | 150 + ...ableGuacamoleSessionConflictException.html | 150 + ...tableGuacamoleSessionTimeoutException.html | 150 + ...latableGuacamoleUnauthorizedException.html | 150 + ...slatableGuacamoleUnsupportedException.html | 150 + ...ranslatableGuacamoleUpstreamException.html | 150 + ...bleGuacamoleUpstreamNotFoundException.html | 150 + ...ableGuacamoleUpstreamTimeoutException.html | 150 + ...GuacamoleUpstreamUnavailableException.html | 150 + .../class-use/TranslatableMessage.html | 850 ++ .../guacamole/language/package-summary.html | 394 + .../guacamole/language/package-tree.html | 303 + .../guacamole/language/package-use.html | 261 + .../net/auth/AbstractActiveConnection.html | 644 + .../net/auth/AbstractActivityLog.html | 409 + .../net/auth/AbstractAuthenticatedUser.html | 404 + .../auth/AbstractAuthenticationProvider.html | 692 + .../net/auth/AbstractConnection.html | 538 + .../net/auth/AbstractConnectionGroup.html | 518 + .../net/auth/AbstractIdentifiable.html | 393 + .../net/auth/AbstractSharingProfile.html | 568 + .../guacamole/net/auth/AbstractUser.html | 785 ++ .../net/auth/AbstractUserContext.html | 953 ++ .../guacamole/net/auth/AbstractUserGroup.html | 717 + .../guacamole/net/auth/ActiveConnection.html | 633 + .../guacamole/net/auth/ActivityLog.Type.html | 450 + .../guacamole/net/auth/ActivityLog.html | 421 + .../guacamole/net/auth/ActivityRecord.html | 472 + .../ActivityRecordSet.SortableProperty.html | 378 + .../guacamole/net/auth/ActivityRecordSet.html | 437 + .../apache/guacamole/net/auth/Attributes.html | 291 + .../guacamole/net/auth/AuthenticatedUser.html | 403 + .../net/auth/AuthenticationProvider.html | 578 + .../guacamole/net/auth/Connectable.html | 356 + .../apache/guacamole/net/auth/Connection.html | 551 + .../net/auth/ConnectionGroup.Type.html | 398 + .../guacamole/net/auth/ConnectionGroup.html | 488 + .../guacamole/net/auth/ConnectionRecord.html | 389 + .../net/auth/ConnectionRecordSet.html | 246 + .../guacamole/net/auth/Credentials.html | 603 + .../net/auth/DecoratingActivityRecordSet.html | 614 + .../net/auth/DecoratingDirectory.html | 549 + .../net/auth/DelegatingActivityRecord.html | 582 + .../net/auth/DelegatingActivityRecordSet.html | 531 + .../net/auth/DelegatingConnection.html | 840 ++ .../net/auth/DelegatingConnectionGroup.html | 778 ++ .../net/auth/DelegatingConnectionRecord.html | 472 + .../net/auth/DelegatingDirectory.html | 533 + .../net/auth/DelegatingSharingProfile.html | 611 + .../guacamole/net/auth/DelegatingUser.html | 877 ++ .../net/auth/DelegatingUserContext.html | 920 ++ .../net/auth/DelegatingUserGroup.html | 744 + .../apache/guacamole/net/auth/Directory.html | 426 + .../guacamole/net/auth/FileActivityLog.html | 417 + ...leProxyConfiguration.EncryptionMethod.html | 391 + .../net/auth/GuacamoleProxyConfiguration.html | 434 + .../guacamole/net/auth/Identifiable.html | 293 + .../guacamole/net/auth/Permissions.html | 434 + .../net/auth/ReadableAttributes.html | 272 + .../guacamole/net/auth/RelatedObjectSet.html | 377 + .../apache/guacamole/net/auth/Shareable.html | 291 + .../guacamole/net/auth/SharingProfile.html | 418 + .../net/auth/TokenInjectingConnection.html | 455 + .../auth/TokenInjectingConnectionGroup.html | 473 + .../net/auth/TokenInjectingUserContext.html | 562 + .../guacamole/net/auth/User.Attribute.html | 376 + .../org/apache/guacamole/net/auth/User.html | 503 + .../guacamole/net/auth/UserContext.html | 768 ++ .../apache/guacamole/net/auth/UserGroup.html | 365 + .../class-use/AbstractActiveConnection.html | 150 + .../auth/class-use/AbstractActivityLog.html | 199 + .../class-use/AbstractAuthenticatedUser.html | 150 + .../AbstractAuthenticationProvider.html | 201 + .../auth/class-use/AbstractConnection.html | 201 + .../class-use/AbstractConnectionGroup.html | 202 + .../auth/class-use/AbstractIdentifiable.html | 295 + .../class-use/AbstractSharingProfile.html | 150 + .../net/auth/class-use/AbstractUser.html | 200 + .../auth/class-use/AbstractUserContext.html | 201 + .../net/auth/class-use/AbstractUserGroup.html | 201 + .../net/auth/class-use/ActiveConnection.html | 233 + .../net/auth/class-use/ActivityLog.Type.html | 245 + .../net/auth/class-use/ActivityLog.html | 230 + .../net/auth/class-use/ActivityRecord.html | 387 + .../ActivityRecordSet.SortableProperty.html | 277 + .../net/auth/class-use/ActivityRecordSet.html | 490 + .../net/auth/class-use/Attributes.html | 393 + .../net/auth/class-use/AuthenticatedUser.html | 517 + .../class-use/AuthenticationProvider.html | 315 + .../net/auth/class-use/Connectable.html | 324 + .../net/auth/class-use/Connection.html | 439 + .../auth/class-use/ConnectionGroup.Type.html | 251 + .../net/auth/class-use/ConnectionGroup.html | 449 + .../net/auth/class-use/ConnectionRecord.html | 332 + .../auth/class-use/ConnectionRecordSet.html | 235 + .../net/auth/class-use/Credentials.html | 468 + .../DecoratingActivityRecordSet.html | 150 + .../auth/class-use/DecoratingDirectory.html | 150 + .../class-use/DelegatingActivityRecord.html | 200 + .../DelegatingActivityRecordSet.html | 200 + .../auth/class-use/DelegatingConnection.html | 201 + .../class-use/DelegatingConnectionGroup.html | 201 + .../class-use/DelegatingConnectionRecord.html | 150 + .../auth/class-use/DelegatingDirectory.html | 200 + .../class-use/DelegatingSharingProfile.html | 150 + .../net/auth/class-use/DelegatingUser.html | 150 + .../auth/class-use/DelegatingUserContext.html | 201 + .../auth/class-use/DelegatingUserGroup.html | 150 + .../net/auth/class-use/Directory.html | 471 + .../net/auth/class-use/FileActivityLog.html | 150 + ...leProxyConfiguration.EncryptionMethod.html | 232 + .../GuacamoleProxyConfiguration.html | 207 + .../net/auth/class-use/Identifiable.html | 501 + .../net/auth/class-use/Permissions.html | 317 + .../auth/class-use/ReadableAttributes.html | 433 + .../net/auth/class-use/RelatedObjectSet.html | 322 + .../net/auth/class-use/Shareable.html | 218 + .../net/auth/class-use/SharingProfile.html | 275 + .../class-use/TokenInjectingConnection.html | 150 + .../TokenInjectingConnectionGroup.html | 150 + .../class-use/TokenInjectingUserContext.html | 150 + .../net/auth/class-use/User.Attribute.html | 150 + .../guacamole/net/auth/class-use/User.html | 351 + .../net/auth/class-use/UserContext.html | 502 + .../net/auth/class-use/UserGroup.html | 307 + .../net/auth/credentials/CredentialsInfo.html | 434 + .../GuacamoleCredentialsException.html | 446 + ...amoleInsufficientCredentialsException.html | 415 + .../GuacamoleInvalidCredentialsException.html | 413 + .../net/auth/credentials/UserCredentials.html | 622 + .../class-use/CredentialsInfo.html | 471 + .../GuacamoleCredentialsException.html | 253 + ...amoleInsufficientCredentialsException.html | 198 + .../GuacamoleInvalidCredentialsException.html | 198 + .../class-use/UserCredentials.html | 200 + .../net/auth/credentials/package-summary.html | 208 + .../net/auth/credentials/package-tree.html | 199 + .../net/auth/credentials/package-use.html | 264 + .../guacamole/net/auth/package-summary.html | 577 + .../guacamole/net/auth/package-tree.html | 297 + .../guacamole/net/auth/package-use.html | 713 + .../permission/ObjectPermission.Type.html | 424 + .../net/auth/permission/ObjectPermission.html | 423 + .../auth/permission/ObjectPermissionSet.html | 519 + .../net/auth/permission/Permission.html | 270 + .../net/auth/permission/PermissionSet.html | 332 + .../permission/SystemPermission.Type.html | 460 + .../net/auth/permission/SystemPermission.html | 395 + .../auth/permission/SystemPermissionSet.html | 462 + .../class-use/ObjectPermission.Type.html | 343 + .../class-use/ObjectPermission.html | 290 + .../class-use/ObjectPermissionSet.html | 471 + .../auth/permission/class-use/Permission.html | 225 + .../permission/class-use/PermissionSet.html | 248 + .../class-use/SystemPermission.Type.html | 299 + .../class-use/SystemPermission.html | 290 + .../class-use/SystemPermissionSet.html | 288 + .../net/auth/permission/package-summary.html | 244 + .../net/auth/permission/package-tree.html | 193 + .../net/auth/permission/package-use.html | 335 + .../auth/simple/SimpleActivityRecordSet.html | 495 + .../simple/SimpleAuthenticationProvider.html | 447 + .../net/auth/simple/SimpleConnection.html | 720 + .../simple/SimpleConnectionDirectory.html | 380 + .../auth/simple/SimpleConnectionGroup.html | 570 + .../SimpleConnectionGroupDirectory.html | 382 + .../simple/SimpleConnectionRecordSet.html | 480 + .../net/auth/simple/SimpleDirectory.html | 652 + .../simple/SimpleObjectPermissionSet.html | 659 + .../auth/simple/SimpleRelatedObjectSet.html | 463 + .../simple/SimpleSystemPermissionSet.html | 548 + .../guacamole/net/auth/simple/SimpleUser.html | 567 + .../net/auth/simple/SimpleUserContext.html | 548 + .../net/auth/simple/SimpleUserDirectory.html | 303 + .../net/auth/simple/SimpleUserGroup.html | 331 + .../class-use/SimpleActivityRecordSet.html | 150 + .../SimpleAuthenticationProvider.html | 150 + .../simple/class-use/SimpleConnection.html | 150 + .../class-use/SimpleConnectionDirectory.html | 150 + .../class-use/SimpleConnectionGroup.html | 150 + .../SimpleConnectionGroupDirectory.html | 150 + .../class-use/SimpleConnectionRecordSet.html | 150 + .../simple/class-use/SimpleDirectory.html | 220 + .../class-use/SimpleObjectPermissionSet.html | 150 + .../class-use/SimpleRelatedObjectSet.html | 150 + .../class-use/SimpleSystemPermissionSet.html | 150 + .../net/auth/simple/class-use/SimpleUser.html | 150 + .../simple/class-use/SimpleUserContext.html | 150 + .../simple/class-use/SimpleUserDirectory.html | 150 + .../simple/class-use/SimpleUserGroup.html | 150 + .../net/auth/simple/package-summary.html | 272 + .../net/auth/simple/package-tree.html | 210 + .../net/auth/simple/package-use.html | 192 + .../net/event/AuthenticationFailureEvent.html | 336 + .../net/event/AuthenticationSuccessEvent.html | 371 + .../guacamole/net/event/CredentialEvent.html | 266 + .../guacamole/net/event/TunnelCloseEvent.html | 402 + .../net/event/TunnelConnectEvent.html | 402 + .../guacamole/net/event/TunnelEvent.html | 265 + .../apache/guacamole/net/event/UserEvent.html | 268 + .../class-use/AuthenticationFailureEvent.html | 201 + .../class-use/AuthenticationSuccessEvent.html | 201 + .../net/event/class-use/CredentialEvent.html | 222 + .../net/event/class-use/TunnelCloseEvent.html | 200 + .../event/class-use/TunnelConnectEvent.html | 200 + .../net/event/class-use/TunnelEvent.html | 206 + .../net/event/class-use/UserEvent.html | 214 + .../AuthenticationFailureListener.html | 277 + .../AuthenticationSuccessListener.html | 281 + .../net/event/listener/Listener.html | 274 + .../event/listener/TunnelCloseListener.html | 278 + .../event/listener/TunnelConnectListener.html | 279 + .../AuthenticationFailureListener.html | 150 + .../AuthenticationSuccessListener.html | 150 + .../event/listener/class-use/Listener.html | 150 + .../class-use/TunnelCloseListener.html | 150 + .../class-use/TunnelConnectListener.html | 150 + .../net/event/listener/package-summary.html | 204 + .../net/event/listener/package-tree.html | 165 + .../net/event/listener/package-use.html | 150 + .../guacamole/net/event/package-summary.html | 233 + .../guacamole/net/event/package-tree.html | 176 + .../guacamole/net/event/package-use.html | 250 + .../properties/BooleanGuacamoleProperty.html | 340 + .../properties/ByteArrayProperty.html | 341 + .../EnumGuacamoleProperty.PropertyValue.html | 256 + .../properties/EnumGuacamoleProperty.html | 445 + .../properties/FileGuacamoleProperties.html | 301 + .../properties/FileGuacamoleProperty.html | 339 + .../properties/GuacamoleProperties.html | 274 + .../properties/GuacamoleProperty.html | 301 + .../properties/IntegerGuacamoleProperty.html | 339 + .../properties/LongGuacamoleProperty.html | 339 + .../PropertiesGuacamoleProperties.html | 349 + .../properties/StringGuacamoleProperty.html | 339 + .../properties/StringListProperty.html | 344 + .../properties/TimeZoneGuacamoleProperty.html | 384 + .../properties/URIGuacamoleProperty.html | 339 + .../class-use/BooleanGuacamoleProperty.html | 196 + .../class-use/ByteArrayProperty.html | 150 + .../EnumGuacamoleProperty.PropertyValue.html | 150 + .../class-use/EnumGuacamoleProperty.html | 150 + .../class-use/FileGuacamoleProperties.html | 150 + .../class-use/FileGuacamoleProperty.html | 150 + .../class-use/GuacamoleProperties.html | 247 + .../class-use/GuacamoleProperty.html | 340 + .../class-use/IntegerGuacamoleProperty.html | 196 + .../class-use/LongGuacamoleProperty.html | 150 + .../PropertiesGuacamoleProperties.html | 200 + .../class-use/StringGuacamoleProperty.html | 197 + .../class-use/StringListProperty.html | 150 + .../class-use/TimeZoneGuacamoleProperty.html | 150 + .../class-use/URIGuacamoleProperty.html | 150 + .../guacamole/properties/package-summary.html | 286 + .../guacamole/properties/package-tree.html | 192 + .../guacamole/properties/package-use.html | 252 + .../guacamole/protocols/ProtocolInfo.html | 525 + .../protocols/class-use/ProtocolInfo.html | 234 + .../guacamole/protocols/package-summary.html | 171 + .../guacamole/protocols/package-tree.html | 165 + .../guacamole/protocols/package-use.html | 188 + .../GuacamoleTokenUndefinedException.html | 434 + .../guacamole/token/StandardTokens.html | 527 + .../apache/guacamole/token/TokenFilter.html | 560 + .../org/apache/guacamole/token/TokenName.html | 318 + .../GuacamoleTokenUndefinedException.html | 205 + .../token/class-use/StandardTokens.html | 150 + .../token/class-use/TokenFilter.html | 219 + .../guacamole/token/class-use/TokenName.html | 150 + .../guacamole/token/package-summary.html | 202 + .../apache/guacamole/token/package-tree.html | 184 + .../apache/guacamole/token/package-use.html | 195 + .../apache/guacamole/xml/DocumentHandler.html | 409 + .../org/apache/guacamole/xml/TagHandler.html | 324 + .../xml/class-use/DocumentHandler.html | 150 + .../guacamole/xml/class-use/TagHandler.html | 216 + .../apache/guacamole/xml/package-summary.html | 196 + .../apache/guacamole/xml/package-tree.html | 175 + .../org/apache/guacamole/xml/package-use.html | 191 + doc/1.5.5/guacamole-ext/overview-summary.html | 23 + doc/1.5.5/guacamole-ext/overview-tree.html | 565 + .../guacamole-ext/package-search-index.js | 1 + .../guacamole-ext/package-search-index.zip | Bin 0 -> 330 bytes doc/1.5.5/guacamole-ext/resources/glass.png | Bin 0 -> 499 bytes doc/1.5.5/guacamole-ext/resources/x.png | Bin 0 -> 394 bytes doc/1.5.5/guacamole-ext/script.js | 149 + doc/1.5.5/guacamole-ext/search.js | 326 + doc/1.5.5/guacamole-ext/serialized-form.html | 696 + doc/1.5.5/guacamole-ext/stylesheet.css | 910 ++ doc/1.5.5/guacamole-ext/type-search-index.js | 1 + doc/1.5.5/guacamole-ext/type-search-index.zip | Bin 0 -> 1434 bytes doc/1.5.5/gug/.buildinfo | 4 + .../client-connection-menu-multiple.png | Bin 0 -> 46277 bytes .../gug/_images/client-connection-menu.png | Bin 0 -> 46052 bytes doc/1.5.5/gug/_images/client-panel.png | Bin 0 -> 105808 bytes .../gug/_images/client-tiled-multi-focus.png | Bin 0 -> 773112 bytes doc/1.5.5/gug/_images/client-tiled.png | Bin 0 -> 642121 bytes doc/1.5.5/gug/_images/duo-add-guacamole.png | Bin 0 -> 7156 bytes doc/1.5.5/gug/_images/duo-auth-factor-1.png | Bin 0 -> 12418 bytes doc/1.5.5/gug/_images/duo-auth-factor-2.png | Bin 0 -> 28876 bytes doc/1.5.5/gug/_images/duo-copy-details.png | Bin 0 -> 19979 bytes .../gug/_images/duo-rename-guacamole.png | Bin 0 -> 13016 bytes doc/1.5.5/gug/_images/edit-connection.png | Bin 0 -> 119196 bytes .../gug/_images/edit-group-memberships.png | Bin 0 -> 31653 bytes doc/1.5.5/gug/_images/edit-group.png | Bin 0 -> 29614 bytes .../gug/_images/edit-sharing-profile.png | Bin 0 -> 22420 bytes doc/1.5.5/gug/_images/edit-user-group.png | Bin 0 -> 129269 bytes .../gug/_images/edit-user-membership.png | Bin 0 -> 8415 bytes doc/1.5.5/gug/_images/edit-user.png | Bin 0 -> 72176 bytes doc/1.5.5/gug/_images/file-browser.png | Bin 0 -> 97706 bytes doc/1.5.5/gug/_images/file-transfers.png | Bin 0 -> 9586 bytes doc/1.5.5/gug/_images/guac-arch.png | Bin 0 -> 51821 bytes .../gug/_images/guac-menu-disconnect.png | Bin 0 -> 19486 bytes .../gug/_images/guac-menu-share-link.png | Bin 0 -> 19965 bytes doc/1.5.5/gug/_images/guac-menu-share.png | Bin 0 -> 8726 bytes .../_images/guacamole-client-interface.png | Bin 0 -> 393258 bytes .../gug/_images/guacamole-drive-download.png | Bin 0 -> 19149 bytes doc/1.5.5/gug/_images/guacamole-drive.png | Bin 0 -> 27334 bytes .../gug/_images/guacamole-home-screen.png | Bin 0 -> 77377 bytes .../gug/_images/guacamole-preferences.png | Bin 0 -> 161522 bytes .../_images/guacamole-settings-sections.png | Bin 0 -> 11928 bytes .../_images/history-table-with-recordings.png | Bin 0 -> 49106 bytes doc/1.5.5/gug/_images/manage-connections.png | Bin 0 -> 87829 bytes doc/1.5.5/gug/_images/manage-groups.png | Bin 0 -> 33629 bytes doc/1.5.5/gug/_images/manage-sessions.png | Bin 0 -> 61738 bytes doc/1.5.5/gug/_images/manage-users.png | Bin 0 -> 33353 bytes .../gug/_images/recording-player-in-use.png | Bin 0 -> 1040397 bytes ...-connection-config-option1-recommended.png | Bin 0 -> 17344 bytes ...ding-storage-connection-config-option2.png | Bin 0 -> 18020 bytes .../gug/_images/session-filter-example-1.png | Bin 0 -> 3038 bytes .../gug/_images/session-filter-example-2.png | Bin 0 -> 2055 bytes doc/1.5.5/gug/_images/totp-auth-factor-1.png | Bin 0 -> 12418 bytes doc/1.5.5/gug/_images/totp-auth-factor-2.png | Bin 0 -> 14088 bytes doc/1.5.5/gug/_images/totp-enroll-detail.png | Bin 0 -> 42801 bytes doc/1.5.5/gug/_images/totp-enroll.png | Bin 0 -> 33722 bytes doc/1.5.5/gug/_images/totp-user-config.png | Bin 0 -> 12970 bytes doc/1.5.5/gug/_images/touchpad.png | Bin 0 -> 16504 bytes doc/1.5.5/gug/_images/touchscreen.png | Bin 0 -> 9681 bytes .../vault-ksm-001a-create-shared-folder.png | Bin 0 -> 49042 bytes .../vault-ksm-001b-create-shared-folder.png | Bin 0 -> 24038 bytes .../gug/_images/vault-ksm-002-select-ksm.png | Bin 0 -> 42209 bytes .../vault-ksm-003a-create-application.png | Bin 0 -> 5347 bytes .../vault-ksm-003b-create-application.png | Bin 0 -> 27443 bytes .../_images/vault-ksm-004-generate-token.png | Bin 0 -> 29203 bytes .../gug/_sources/adhoc-connections.md.txt | 139 + doc/1.5.5/gug/_sources/administration.md.txt | 321 + doc/1.5.5/gug/_sources/cas-auth.md.txt | 154 + .../gug/_sources/configuring-guacamole.md.txt | 2857 ++++ doc/1.5.5/gug/_sources/custom-auth.md.txt | 495 + .../gug/_sources/custom-protocols.md.txt | 828 ++ doc/1.5.5/gug/_sources/duo-auth.md.txt | 188 + doc/1.5.5/gug/_sources/event-listeners.md.txt | 371 + .../_sources/guacamole-architecture.md.txt | 142 + .../gug/_sources/guacamole-common-js.md.txt | 379 + .../gug/_sources/guacamole-common.md.txt | 137 + .../gug/_sources/guacamole-docker.md.txt | 1032 ++ doc/1.5.5/gug/_sources/guacamole-ext.md.txt | 699 + .../gug/_sources/guacamole-protocol.md.txt | 414 + doc/1.5.5/gug/_sources/header-auth.md.txt | 78 + doc/1.5.5/gug/_sources/index.md.txt | 81 + .../gug/_sources/installing-guacamole.md.txt | 770 ++ doc/1.5.5/gug/_sources/introduction.md.txt | 161 + doc/1.5.5/gug/_sources/jdbc-auth.md.txt | 1879 +++ doc/1.5.5/gug/_sources/json-auth.md.txt | 319 + doc/1.5.5/gug/_sources/ldap-auth.md.txt | 671 + doc/1.5.5/gug/_sources/libguac.md.txt | 411 + doc/1.5.5/gug/_sources/openid-auth.md.txt | 184 + .../gug/_sources/protocol-reference.rst.txt | 1253 ++ doc/1.5.5/gug/_sources/radius-auth.md.txt | 250 + .../gug/_sources/recording-playback.md.txt | 247 + doc/1.5.5/gug/_sources/reverse-proxy.md.txt | 427 + doc/1.5.5/gug/_sources/saml-auth.md.txt | 144 + doc/1.5.5/gug/_sources/totp-auth.md.txt | 186 + doc/1.5.5/gug/_sources/troubleshooting.md.txt | 542 + doc/1.5.5/gug/_sources/using-guacamole.md.txt | 509 + doc/1.5.5/gug/_sources/vault.md.txt | 373 + .../writing-you-own-guacamole-app.md.txt | 585 + .../_sphinx_javascript_frameworks_compat.js | 123 + doc/1.5.5/gug/_static/basic.css | 925 ++ doc/1.5.5/gug/_static/css/badge_only.css | 1 + .../_static/css/fonts/Roboto-Slab-Bold.woff | Bin 0 -> 87624 bytes .../_static/css/fonts/Roboto-Slab-Bold.woff2 | Bin 0 -> 67312 bytes .../css/fonts/Roboto-Slab-Regular.woff | Bin 0 -> 86288 bytes .../css/fonts/Roboto-Slab-Regular.woff2 | Bin 0 -> 66444 bytes .../_static/css/fonts/fontawesome-webfont.eot | Bin 0 -> 165742 bytes .../_static/css/fonts/fontawesome-webfont.svg | 2671 ++++ .../_static/css/fonts/fontawesome-webfont.ttf | Bin 0 -> 165548 bytes .../css/fonts/fontawesome-webfont.woff | Bin 0 -> 98024 bytes .../css/fonts/fontawesome-webfont.woff2 | Bin 0 -> 77160 bytes .../_static/css/fonts/lato-bold-italic.woff | Bin 0 -> 323344 bytes .../_static/css/fonts/lato-bold-italic.woff2 | Bin 0 -> 193308 bytes .../gug/_static/css/fonts/lato-bold.woff | Bin 0 -> 309728 bytes .../gug/_static/css/fonts/lato-bold.woff2 | Bin 0 -> 184912 bytes .../_static/css/fonts/lato-normal-italic.woff | Bin 0 -> 328412 bytes .../css/fonts/lato-normal-italic.woff2 | Bin 0 -> 195704 bytes .../gug/_static/css/fonts/lato-normal.woff | Bin 0 -> 309192 bytes .../gug/_static/css/fonts/lato-normal.woff2 | Bin 0 -> 182708 bytes doc/1.5.5/gug/_static/css/theme.css | 4 + doc/1.5.5/gug/_static/doctools.js | 156 + .../gug/_static/documentation_options.js | 13 + doc/1.5.5/gug/_static/file.png | Bin 0 -> 286 bytes doc/1.5.5/gug/_static/gug.css | 66 + doc/1.5.5/gug/_static/jquery.js | 2 + doc/1.5.5/gug/_static/js/badge_only.js | 1 + .../gug/_static/js/html5shiv-printshiv.min.js | 4 + doc/1.5.5/gug/_static/js/html5shiv.min.js | 4 + doc/1.5.5/gug/_static/js/theme.js | 1 + doc/1.5.5/gug/_static/language_data.js | 199 + doc/1.5.5/gug/_static/minus.png | Bin 0 -> 90 bytes doc/1.5.5/gug/_static/plus.png | Bin 0 -> 90 bytes doc/1.5.5/gug/_static/pygments.css | 75 + doc/1.5.5/gug/_static/searchtools.js | 574 + doc/1.5.5/gug/_static/sphinx_highlight.js | 154 + doc/1.5.5/gug/_static/tabs.css | 110 + doc/1.5.5/gug/_static/tabs.js | 30 + doc/1.5.5/gug/adhoc-connections.html | 281 + doc/1.5.5/gug/administration.html | 434 + doc/1.5.5/gug/cas-auth.html | 335 + doc/1.5.5/gug/configuring-guacamole.html | 2749 ++++ doc/1.5.5/gug/custom-auth.html | 606 + doc/1.5.5/gug/custom-protocols.html | 919 ++ doc/1.5.5/gug/duo-auth.html | 322 + doc/1.5.5/gug/event-listeners.html | 492 + doc/1.5.5/gug/genindex.html | 155 + doc/1.5.5/gug/guacamole-architecture.html | 275 + doc/1.5.5/gug/guacamole-common-js.html | 493 + doc/1.5.5/gug/guacamole-common.html | 280 + doc/1.5.5/gug/guacamole-docker.html | 1072 ++ doc/1.5.5/gug/guacamole-ext.html | 767 ++ doc/1.5.5/gug/guacamole-protocol.html | 509 + doc/1.5.5/gug/header-auth.html | 229 + doc/1.5.5/gug/index.html | 223 + doc/1.5.5/gug/installing-guacamole.html | 900 ++ doc/1.5.5/gug/introduction.html | 289 + doc/1.5.5/gug/jdbc-auth.html | 1865 +++ doc/1.5.5/gug/json-auth.html | 460 + doc/1.5.5/gug/ldap-auth.html | 762 ++ doc/1.5.5/gug/libguac.html | 515 + doc/1.5.5/gug/objects.inv | Bin 0 -> 5844 bytes doc/1.5.5/gug/openid-auth.html | 361 + doc/1.5.5/gug/protocol-reference.html | 1330 ++ doc/1.5.5/gug/radius-auth.html | 380 + doc/1.5.5/gug/recording-playback.html | 379 + doc/1.5.5/gug/reverse-proxy.html | 535 + doc/1.5.5/gug/saml-auth.html | 329 + doc/1.5.5/gug/search.html | 170 + doc/1.5.5/gug/searchindex.js | 1 + doc/1.5.5/gug/totp-auth.html | 318 + doc/1.5.5/gug/troubleshooting.html | 755 + doc/1.5.5/gug/using-guacamole.html | 592 + doc/1.5.5/gug/vault.html | 488 + .../gug/writing-you-own-guacamole-app.html | 700 + doc/1.5.5/libguac-terminal/annotated.html | 88 + doc/1.5.5/libguac-terminal/bc_s.png | Bin 0 -> 676 bytes doc/1.5.5/libguac-terminal/bc_sd.png | Bin 0 -> 635 bytes doc/1.5.5/libguac-terminal/classes.html | 89 + doc/1.5.5/libguac-terminal/clipboard.js | 61 + doc/1.5.5/libguac-terminal/closed.png | Bin 0 -> 132 bytes doc/1.5.5/libguac-terminal/cookie.js | 58 + doc/1.5.5/libguac-terminal/deprecated.html | 88 + .../dir_145042b6f7f292100d5d9150e80a046e.html | 94 + doc/1.5.5/libguac-terminal/doc.svg | 12 + doc/1.5.5/libguac-terminal/docd.svg | 12 + doc/1.5.5/libguac-terminal/doxygen.css | 2225 +++ doc/1.5.5/libguac-terminal/doxygen.svg | 28 + doc/1.5.5/libguac-terminal/doxygen_crawl.html | 43 + doc/1.5.5/libguac-terminal/dynsections.js | 194 + doc/1.5.5/libguac-terminal/files.html | 89 + doc/1.5.5/libguac-terminal/folderclosed.svg | 11 + doc/1.5.5/libguac-terminal/folderclosedd.svg | 11 + doc/1.5.5/libguac-terminal/folderopen.svg | 17 + doc/1.5.5/libguac-terminal/folderopend.svg | 12 + doc/1.5.5/libguac-terminal/functions.html | 91 + .../libguac-terminal/functions_vars.html | 91 + doc/1.5.5/libguac-terminal/globals.html | 140 + doc/1.5.5/libguac-terminal/globals_defs.html | 96 + doc/1.5.5/libguac-terminal/globals_enum.html | 83 + doc/1.5.5/libguac-terminal/globals_eval.html | 85 + doc/1.5.5/libguac-terminal/globals_func.html | 119 + doc/1.5.5/libguac-terminal/globals_type.html | 85 + doc/1.5.5/libguac-terminal/index.html | 84 + doc/1.5.5/libguac-terminal/jquery.js | 34 + doc/1.5.5/libguac-terminal/menu.js | 134 + doc/1.5.5/libguac-terminal/menudata.js | 44 + doc/1.5.5/libguac-terminal/minus.svg | 8 + doc/1.5.5/libguac-terminal/minusd.svg | 8 + doc/1.5.5/libguac-terminal/nav_f.png | Bin 0 -> 153 bytes doc/1.5.5/libguac-terminal/nav_fd.png | Bin 0 -> 169 bytes doc/1.5.5/libguac-terminal/nav_g.png | Bin 0 -> 95 bytes doc/1.5.5/libguac-terminal/nav_h.png | Bin 0 -> 98 bytes doc/1.5.5/libguac-terminal/nav_hd.png | Bin 0 -> 114 bytes doc/1.5.5/libguac-terminal/open.png | Bin 0 -> 123 bytes doc/1.5.5/libguac-terminal/pages.html | 88 + doc/1.5.5/libguac-terminal/plus.svg | 9 + doc/1.5.5/libguac-terminal/plusd.svg | 9 + doc/1.5.5/libguac-terminal/search/all_0.js | 4 + doc/1.5.5/libguac-terminal/search/all_1.js | 4 + doc/1.5.5/libguac-terminal/search/all_2.js | 6 + doc/1.5.5/libguac-terminal/search/all_3.js | 5 + doc/1.5.5/libguac-terminal/search/all_4.js | 60 + doc/1.5.5/libguac-terminal/search/all_5.js | 4 + doc/1.5.5/libguac-terminal/search/all_6.js | 4 + doc/1.5.5/libguac-terminal/search/all_7.js | 4 + doc/1.5.5/libguac-terminal/search/all_8.js | 4 + doc/1.5.5/libguac-terminal/search/all_9.js | 4 + .../libguac-terminal/search/classes_0.js | 4 + doc/1.5.5/libguac-terminal/search/close.svg | 18 + .../libguac-terminal/search/defines_0.js | 17 + doc/1.5.5/libguac-terminal/search/enums_0.js | 4 + .../libguac-terminal/search/enumvalues_0.js | 6 + doc/1.5.5/libguac-terminal/search/files_0.js | 4 + .../libguac-terminal/search/functions_0.js | 38 + doc/1.5.5/libguac-terminal/search/mag.svg | 24 + doc/1.5.5/libguac-terminal/search/mag_d.svg | 24 + doc/1.5.5/libguac-terminal/search/mag_sel.svg | 31 + .../libguac-terminal/search/mag_seld.svg | 31 + doc/1.5.5/libguac-terminal/search/pages_0.js | 4 + doc/1.5.5/libguac-terminal/search/pages_1.js | 4 + doc/1.5.5/libguac-terminal/search/search.css | 291 + doc/1.5.5/libguac-terminal/search/search.js | 694 + .../libguac-terminal/search/searchdata.js | 42 + .../libguac-terminal/search/typedefs_0.js | 6 + .../libguac-terminal/search/variables_0.js | 4 + .../libguac-terminal/search/variables_1.js | 4 + .../libguac-terminal/search/variables_2.js | 5 + .../libguac-terminal/search/variables_3.js | 5 + .../libguac-terminal/search/variables_4.js | 4 + .../libguac-terminal/search/variables_5.js | 4 + .../libguac-terminal/search/variables_6.js | 4 + doc/1.5.5/libguac-terminal/splitbar.png | Bin 0 -> 314 bytes doc/1.5.5/libguac-terminal/splitbard.png | Bin 0 -> 282 bytes .../structguac__terminal__options.html | 201 + doc/1.5.5/libguac-terminal/sync_off.png | Bin 0 -> 853 bytes doc/1.5.5/libguac-terminal/sync_on.png | Bin 0 -> 845 bytes doc/1.5.5/libguac-terminal/tab_a.png | Bin 0 -> 142 bytes doc/1.5.5/libguac-terminal/tab_ad.png | Bin 0 -> 135 bytes doc/1.5.5/libguac-terminal/tab_b.png | Bin 0 -> 169 bytes doc/1.5.5/libguac-terminal/tab_bd.png | Bin 0 -> 173 bytes doc/1.5.5/libguac-terminal/tab_h.png | Bin 0 -> 177 bytes doc/1.5.5/libguac-terminal/tab_hd.png | Bin 0 -> 180 bytes doc/1.5.5/libguac-terminal/tab_s.png | Bin 0 -> 184 bytes doc/1.5.5/libguac-terminal/tab_sd.png | Bin 0 -> 188 bytes doc/1.5.5/libguac-terminal/tabs.css | 1 + doc/1.5.5/libguac-terminal/terminal_8h.html | 1588 +++ .../libguac-terminal/terminal_8h_source.html | 327 + doc/1.5.5/libguac/annotated.html | 102 + doc/1.5.5/libguac/argv-constants_8h.html | 141 + .../libguac/argv-constants_8h_source.html | 128 + doc/1.5.5/libguac/argv-fntypes_8h.html | 131 + doc/1.5.5/libguac/argv-fntypes_8h_source.html | 124 + doc/1.5.5/libguac/argv_8h.html | 275 + doc/1.5.5/libguac/argv_8h_source.html | 143 + doc/1.5.5/libguac/audio-fntypes_8h.html | 230 + .../libguac/audio-fntypes_8h_source.html | 140 + doc/1.5.5/libguac/audio-types_8h.html | 94 + doc/1.5.5/libguac/audio-types_8h_source.html | 122 + doc/1.5.5/libguac/audio_8h.html | 347 + doc/1.5.5/libguac/audio_8h_source.html | 207 + doc/1.5.5/libguac/bc_s.png | Bin 0 -> 676 bytes doc/1.5.5/libguac/bc_sd.png | Bin 0 -> 635 bytes doc/1.5.5/libguac/classes.html | 110 + doc/1.5.5/libguac/client-constants_8h.html | 185 + .../libguac/client-constants_8h_source.html | 134 + doc/1.5.5/libguac/client-fntypes_8h.html | 209 + .../libguac/client-fntypes_8h_source.html | 148 + doc/1.5.5/libguac/client-types_8h.html | 170 + doc/1.5.5/libguac/client-types_8h_source.html | 154 + doc/1.5.5/libguac/client_8h.html | 1372 ++ doc/1.5.5/libguac/client_8h_source.html | 349 + doc/1.5.5/libguac/clipboard.js | 61 + doc/1.5.5/libguac/closed.png | Bin 0 -> 132 bytes doc/1.5.5/libguac/cookie.js | 58 + doc/1.5.5/libguac/deprecated.html | 92 + .../dir_6bb9fad85c98b48a11165f494b9f53ce.html | 236 + doc/1.5.5/libguac/doc.svg | 12 + doc/1.5.5/libguac/docd.svg | 12 + doc/1.5.5/libguac/doxygen.css | 2225 +++ doc/1.5.5/libguac/doxygen.svg | 28 + doc/1.5.5/libguac/doxygen_crawl.html | 212 + doc/1.5.5/libguac/dynsections.js | 194 + doc/1.5.5/libguac/error-types_8h.html | 206 + doc/1.5.5/libguac/error-types_8h_source.html | 198 + doc/1.5.5/libguac/error_8h.html | 193 + doc/1.5.5/libguac/error_8h_source.html | 141 + doc/1.5.5/libguac/files.html | 137 + doc/1.5.5/libguac/fips_8h_source.html | 117 + doc/1.5.5/libguac/folderclosed.svg | 11 + doc/1.5.5/libguac/folderclosedd.svg | 11 + doc/1.5.5/libguac/folderopen.svg | 17 + doc/1.5.5/libguac/folderopend.svg | 12 + doc/1.5.5/libguac/functions.html | 239 + doc/1.5.5/libguac/functions_vars.html | 239 + doc/1.5.5/libguac/globals.html | 101 + doc/1.5.5/libguac/globals_c.html | 123 + doc/1.5.5/libguac/globals_defs.html | 146 + doc/1.5.5/libguac/globals_e.html | 86 + doc/1.5.5/libguac/globals_enum.html | 94 + doc/1.5.5/libguac/globals_eval.html | 150 + doc/1.5.5/libguac/globals_func.html | 292 + doc/1.5.5/libguac/globals_g.html | 191 + doc/1.5.5/libguac/globals_h.html | 85 + doc/1.5.5/libguac/globals_l.html | 86 + doc/1.5.5/libguac/globals_m.html | 97 + doc/1.5.5/libguac/globals_p.html | 158 + doc/1.5.5/libguac/globals_r.html | 89 + doc/1.5.5/libguac/globals_s.html | 120 + doc/1.5.5/libguac/globals_t.html | 88 + doc/1.5.5/libguac/globals_type.html | 136 + doc/1.5.5/libguac/globals_u.html | 129 + doc/1.5.5/libguac/globals_vars.html | 84 + doc/1.5.5/libguac/globals_w.html | 85 + doc/1.5.5/libguac/hash_8h.html | 165 + doc/1.5.5/libguac/hash_8h_source.html | 124 + doc/1.5.5/libguac/index.html | 84 + doc/1.5.5/libguac/jquery.js | 34 + doc/1.5.5/libguac/layer-types_8h.html | 94 + doc/1.5.5/libguac/layer-types_8h_source.html | 119 + doc/1.5.5/libguac/layer_8h.html | 103 + doc/1.5.5/libguac/layer_8h_source.html | 129 + doc/1.5.5/libguac/mem_8h.html | 569 + doc/1.5.5/libguac/mem_8h_source.html | 209 + doc/1.5.5/libguac/menu.js | 134 + doc/1.5.5/libguac/menudata.js | 116 + doc/1.5.5/libguac/minus.svg | 8 + doc/1.5.5/libguac/minusd.svg | 8 + doc/1.5.5/libguac/nav_f.png | Bin 0 -> 153 bytes doc/1.5.5/libguac/nav_fd.png | Bin 0 -> 169 bytes doc/1.5.5/libguac/nav_g.png | Bin 0 -> 95 bytes doc/1.5.5/libguac/nav_h.png | Bin 0 -> 98 bytes doc/1.5.5/libguac/nav_hd.png | Bin 0 -> 114 bytes doc/1.5.5/libguac/object-types_8h.html | 94 + doc/1.5.5/libguac/object-types_8h_source.html | 119 + doc/1.5.5/libguac/object_8h.html | 103 + doc/1.5.5/libguac/object_8h_source.html | 142 + doc/1.5.5/libguac/open.png | Bin 0 -> 123 bytes doc/1.5.5/libguac/pages.html | 88 + doc/1.5.5/libguac/parser-constants_8h.html | 112 + .../libguac/parser-constants_8h_source.html | 122 + doc/1.5.5/libguac/parser-types_8h.html | 134 + doc/1.5.5/libguac/parser-types_8h_source.html | 138 + doc/1.5.5/libguac/parser_8h.html | 360 + doc/1.5.5/libguac/parser_8h_source.html | 178 + doc/1.5.5/libguac/plugin-constants_8h.html | 143 + .../libguac/plugin-constants_8h_source.html | 133 + doc/1.5.5/libguac/plugin_8h.html | 94 + doc/1.5.5/libguac/plugin_8h_source.html | 118 + doc/1.5.5/libguac/plus.svg | 9 + doc/1.5.5/libguac/plusd.svg | 9 + doc/1.5.5/libguac/pool-types_8h.html | 94 + doc/1.5.5/libguac/pool-types_8h_source.html | 122 + doc/1.5.5/libguac/pool_8h.html | 232 + doc/1.5.5/libguac/pool_8h_source.html | 166 + doc/1.5.5/libguac/protocol-constants_8h.html | 164 + .../libguac/protocol-constants_8h_source.html | 122 + doc/1.5.5/libguac/protocol-types_8h.html | 360 + .../libguac/protocol-types_8h_source.html | 332 + doc/1.5.5/libguac/protocol_8h.html | 2956 ++++ doc/1.5.5/libguac/protocol_8h_source.html | 392 + doc/1.5.5/libguac/recording_8h.html | 403 + doc/1.5.5/libguac/recording_8h_source.html | 171 + doc/1.5.5/libguac/rwlock_8h_source.html | 141 + doc/1.5.5/libguac/search/all_0.js | 17 + doc/1.5.5/libguac/search/all_1.js | 6 + doc/1.5.5/libguac/search/all_10.js | 6 + doc/1.5.5/libguac/search/all_11.js | 20 + doc/1.5.5/libguac/search/all_12.js | 7 + doc/1.5.5/libguac/search/all_13.js | 10 + doc/1.5.5/libguac/search/all_14.js | 10 + doc/1.5.5/libguac/search/all_15.js | 6 + doc/1.5.5/libguac/search/all_2.js | 13 + doc/1.5.5/libguac/search/all_3.js | 5 + doc/1.5.5/libguac/search/all_4.js | 7 + doc/1.5.5/libguac/search/all_5.js | 7 + doc/1.5.5/libguac/search/all_6.js | 360 + doc/1.5.5/libguac/search/all_7.js | 4 + doc/1.5.5/libguac/search/all_8.js | 10 + doc/1.5.5/libguac/search/all_9.js | 5 + doc/1.5.5/libguac/search/all_a.js | 5 + doc/1.5.5/libguac/search/all_b.js | 14 + doc/1.5.5/libguac/search/all_c.js | 7 + doc/1.5.5/libguac/search/all_d.js | 4 + doc/1.5.5/libguac/search/all_e.js | 10 + doc/1.5.5/libguac/search/all_f.js | 18 + doc/1.5.5/libguac/search/classes_0.js | 18 + doc/1.5.5/libguac/search/close.svg | 18 + doc/1.5.5/libguac/search/defines_0.js | 57 + doc/1.5.5/libguac/search/enums_0.js | 15 + doc/1.5.5/libguac/search/enumvalues_0.js | 69 + doc/1.5.5/libguac/search/files_0.js | 9 + doc/1.5.5/libguac/search/files_1.js | 7 + doc/1.5.5/libguac/search/files_2.js | 5 + doc/1.5.5/libguac/search/files_3.js | 4 + doc/1.5.5/libguac/search/files_4.js | 5 + doc/1.5.5/libguac/search/files_5.js | 4 + doc/1.5.5/libguac/search/files_6.js | 5 + doc/1.5.5/libguac/search/files_7.js | 13 + doc/1.5.5/libguac/search/files_8.js | 4 + doc/1.5.5/libguac/search/files_9.js | 12 + doc/1.5.5/libguac/search/files_a.js | 5 + doc/1.5.5/libguac/search/files_b.js | 8 + doc/1.5.5/libguac/search/files_c.js | 5 + doc/1.5.5/libguac/search/functions_0.js | 174 + doc/1.5.5/libguac/search/functions_1.js | 8 + doc/1.5.5/libguac/search/mag.svg | 24 + doc/1.5.5/libguac/search/mag_d.svg | 24 + doc/1.5.5/libguac/search/mag_sel.svg | 31 + doc/1.5.5/libguac/search/mag_seld.svg | 31 + doc/1.5.5/libguac/search/pages_0.js | 4 + doc/1.5.5/libguac/search/pages_1.js | 4 + doc/1.5.5/libguac/search/search.css | 291 + doc/1.5.5/libguac/search/search.js | 694 + doc/1.5.5/libguac/search/searchdata.js | 42 + doc/1.5.5/libguac/search/typedefs_0.js | 39 + doc/1.5.5/libguac/search/variables_0.js | 11 + doc/1.5.5/libguac/search/variables_1.js | 6 + doc/1.5.5/libguac/search/variables_10.js | 11 + doc/1.5.5/libguac/search/variables_11.js | 5 + doc/1.5.5/libguac/search/variables_12.js | 5 + doc/1.5.5/libguac/search/variables_13.js | 5 + doc/1.5.5/libguac/search/variables_14.js | 4 + doc/1.5.5/libguac/search/variables_2.js | 9 + doc/1.5.5/libguac/search/variables_3.js | 4 + doc/1.5.5/libguac/search/variables_4.js | 5 + doc/1.5.5/libguac/search/variables_5.js | 7 + doc/1.5.5/libguac/search/variables_6.js | 6 + doc/1.5.5/libguac/search/variables_7.js | 10 + doc/1.5.5/libguac/search/variables_8.js | 5 + doc/1.5.5/libguac/search/variables_9.js | 5 + doc/1.5.5/libguac/search/variables_a.js | 11 + doc/1.5.5/libguac/search/variables_b.js | 6 + doc/1.5.5/libguac/search/variables_c.js | 4 + doc/1.5.5/libguac/search/variables_d.js | 8 + doc/1.5.5/libguac/search/variables_e.js | 8 + doc/1.5.5/libguac/search/variables_f.js | 5 + doc/1.5.5/libguac/socket-constants_8h.html | 108 + .../libguac/socket-constants_8h_source.html | 120 + doc/1.5.5/libguac/socket-fntypes_8h.html | 291 + .../libguac/socket-fntypes_8h_source.html | 145 + doc/1.5.5/libguac/socket-ssl_8h.html | 144 + doc/1.5.5/libguac/socket-ssl_8h_source.html | 145 + doc/1.5.5/libguac/socket-types_8h.html | 129 + doc/1.5.5/libguac/socket-types_8h_source.html | 132 + doc/1.5.5/libguac/socket-wsa_8h.html | 132 + doc/1.5.5/libguac/socket-wsa_8h_source.html | 125 + doc/1.5.5/libguac/socket_8h.html | 707 + doc/1.5.5/libguac/socket_8h_source.html | 240 + doc/1.5.5/libguac/splitbar.png | Bin 0 -> 314 bytes doc/1.5.5/libguac/splitbard.png | Bin 0 -> 282 bytes doc/1.5.5/libguac/stream-types_8h.html | 94 + doc/1.5.5/libguac/stream-types_8h_source.html | 119 + doc/1.5.5/libguac/stream_8h.html | 103 + doc/1.5.5/libguac/stream_8h_source.html | 146 + doc/1.5.5/libguac/string_8h.html | 317 + doc/1.5.5/libguac/string_8h_source.html | 136 + .../libguac/structguac__audio__encoder.html | 121 + .../libguac/structguac__audio__stream.html | 159 + doc/1.5.5/libguac/structguac__client.html | 396 + doc/1.5.5/libguac/structguac__layer.html | 103 + doc/1.5.5/libguac/structguac__object.html | 170 + doc/1.5.5/libguac/structguac__parser.html | 113 + doc/1.5.5/libguac/structguac__pool.html | 106 + doc/1.5.5/libguac/structguac__pool__int.html | 101 + doc/1.5.5/libguac/structguac__recording.html | 184 + doc/1.5.5/libguac/structguac__rwlock.html | 109 + doc/1.5.5/libguac/structguac__socket.html | 138 + .../structguac__socket__ssl__data.html | 115 + doc/1.5.5/libguac/structguac__stream.html | 201 + doc/1.5.5/libguac/structguac__user.html | 668 + doc/1.5.5/libguac/structguac__user__info.html | 262 + doc/1.5.5/libguac/sync_off.png | Bin 0 -> 853 bytes doc/1.5.5/libguac/sync_on.png | Bin 0 -> 845 bytes doc/1.5.5/libguac/tab_a.png | Bin 0 -> 142 bytes doc/1.5.5/libguac/tab_ad.png | Bin 0 -> 135 bytes doc/1.5.5/libguac/tab_b.png | Bin 0 -> 169 bytes doc/1.5.5/libguac/tab_bd.png | Bin 0 -> 173 bytes doc/1.5.5/libguac/tab_h.png | Bin 0 -> 177 bytes doc/1.5.5/libguac/tab_hd.png | Bin 0 -> 180 bytes doc/1.5.5/libguac/tab_s.png | Bin 0 -> 184 bytes doc/1.5.5/libguac/tab_sd.png | Bin 0 -> 188 bytes doc/1.5.5/libguac/tabs.css | 1 + doc/1.5.5/libguac/timestamp-types_8h.html | 104 + .../libguac/timestamp-types_8h_source.html | 121 + doc/1.5.5/libguac/timestamp_8h.html | 153 + doc/1.5.5/libguac/timestamp_8h_source.html | 126 + doc/1.5.5/libguac/unicode_8h.html | 241 + doc/1.5.5/libguac/unicode_8h_source.html | 130 + doc/1.5.5/libguac/user-constants_8h.html | 145 + .../libguac/user-constants_8h_source.html | 130 + doc/1.5.5/libguac/user-fntypes_8h.html | 641 + doc/1.5.5/libguac/user-fntypes_8h_source.html | 198 + doc/1.5.5/libguac/user-types_8h.html | 94 + doc/1.5.5/libguac/user-types_8h_source.html | 122 + doc/1.5.5/libguac/user_8h.html | 1091 ++ doc/1.5.5/libguac/user_8h_source.html | 384 + doc/1.5.5/libguac/wol-constants_8h.html | 145 + .../libguac/wol-constants_8h_source.html | 122 + doc/1.5.5/libguac/wol_8h.html | 142 + doc/1.5.5/libguac/wol_8h_source.html | 123 + 1188 files changed, 417615 insertions(+) create mode 100644 doc/1.5.5/guacamole-common-js/Guacamole.ArrayBufferReader.html create mode 100644 doc/1.5.5/guacamole-common-js/Guacamole.ArrayBufferWriter.html create mode 100644 doc/1.5.5/guacamole-common-js/Guacamole.AudioContextFactory.html create mode 100644 doc/1.5.5/guacamole-common-js/Guacamole.AudioPlayer.html create mode 100644 doc/1.5.5/guacamole-common-js/Guacamole.AudioRecorder.html create mode 100644 doc/1.5.5/guacamole-common-js/Guacamole.BlobReader.html create mode 100644 doc/1.5.5/guacamole-common-js/Guacamole.BlobWriter.html create mode 100644 doc/1.5.5/guacamole-common-js/Guacamole.ChainedTunnel.html create mode 100644 doc/1.5.5/guacamole-common-js/Guacamole.Client.html create mode 100644 doc/1.5.5/guacamole-common-js/Guacamole.DataURIReader.html create mode 100644 doc/1.5.5/guacamole-common-js/Guacamole.Display.VisibleLayer.html create mode 100644 doc/1.5.5/guacamole-common-js/Guacamole.Display.html create mode 100644 doc/1.5.5/guacamole-common-js/Guacamole.Event.DOMEvent.html create mode 100644 doc/1.5.5/guacamole-common-js/Guacamole.Event.Target.html create mode 100644 doc/1.5.5/guacamole-common-js/Guacamole.Event.html create mode 100644 doc/1.5.5/guacamole-common-js/Guacamole.HTTPTunnel.html create mode 100644 doc/1.5.5/guacamole-common-js/Guacamole.InputSink.html create mode 100644 doc/1.5.5/guacamole-common-js/Guacamole.InputStream.html create mode 100644 doc/1.5.5/guacamole-common-js/Guacamole.IntegerPool.html create mode 100644 doc/1.5.5/guacamole-common-js/Guacamole.JSONReader.html create mode 100644 doc/1.5.5/guacamole-common-js/Guacamole.Keyboard.ModifierState.html create mode 100644 doc/1.5.5/guacamole-common-js/Guacamole.Keyboard.html create mode 100644 doc/1.5.5/guacamole-common-js/Guacamole.Layer.Pixel.html create mode 100644 doc/1.5.5/guacamole-common-js/Guacamole.Layer.html create mode 100644 doc/1.5.5/guacamole-common-js/Guacamole.Mouse.Event.Target.html create mode 100644 doc/1.5.5/guacamole-common-js/Guacamole.Mouse.Event.html create mode 100644 doc/1.5.5/guacamole-common-js/Guacamole.Mouse.State.html create mode 100644 doc/1.5.5/guacamole-common-js/Guacamole.Mouse.Touchpad.html create mode 100644 doc/1.5.5/guacamole-common-js/Guacamole.Mouse.Touchscreen.html create mode 100644 doc/1.5.5/guacamole-common-js/Guacamole.Mouse.html create mode 100644 doc/1.5.5/guacamole-common-js/Guacamole.Object.html create mode 100644 doc/1.5.5/guacamole-common-js/Guacamole.OnScreenKeyboard.Key.html create mode 100644 doc/1.5.5/guacamole-common-js/Guacamole.OnScreenKeyboard.Layout.html create mode 100644 doc/1.5.5/guacamole-common-js/Guacamole.OnScreenKeyboard.html create mode 100644 doc/1.5.5/guacamole-common-js/Guacamole.OutputStream.html create mode 100644 doc/1.5.5/guacamole-common-js/Guacamole.Parser.html create mode 100644 doc/1.5.5/guacamole-common-js/Guacamole.Position.html create mode 100644 doc/1.5.5/guacamole-common-js/Guacamole.RawAudioFormat.html create mode 100644 doc/1.5.5/guacamole-common-js/Guacamole.RawAudioPlayer.html create mode 100644 doc/1.5.5/guacamole-common-js/Guacamole.RawAudioRecorder.html create mode 100644 doc/1.5.5/guacamole-common-js/Guacamole.SessionRecording.html create mode 100644 doc/1.5.5/guacamole-common-js/Guacamole.StaticHTTPTunnel.html create mode 100644 doc/1.5.5/guacamole-common-js/Guacamole.Status.html create mode 100644 doc/1.5.5/guacamole-common-js/Guacamole.StringReader.html create mode 100644 doc/1.5.5/guacamole-common-js/Guacamole.StringWriter.html create mode 100644 doc/1.5.5/guacamole-common-js/Guacamole.Touch.Event.html create mode 100644 doc/1.5.5/guacamole-common-js/Guacamole.Touch.State.html create mode 100644 doc/1.5.5/guacamole-common-js/Guacamole.Touch.html create mode 100644 doc/1.5.5/guacamole-common-js/Guacamole.Tunnel.html create mode 100644 doc/1.5.5/guacamole-common-js/Guacamole.UTF8Parser.html create mode 100644 doc/1.5.5/guacamole-common-js/Guacamole.VideoPlayer.html create mode 100644 doc/1.5.5/guacamole-common-js/Guacamole.WebSocketTunnel.html create mode 100644 doc/1.5.5/guacamole-common-js/Guacamole.html create mode 100644 doc/1.5.5/guacamole-common-js/fonts/OpenSans-Bold-webfont.eot create mode 100644 doc/1.5.5/guacamole-common-js/fonts/OpenSans-Bold-webfont.svg create mode 100644 doc/1.5.5/guacamole-common-js/fonts/OpenSans-Bold-webfont.woff create mode 100644 doc/1.5.5/guacamole-common-js/fonts/OpenSans-BoldItalic-webfont.eot create mode 100644 doc/1.5.5/guacamole-common-js/fonts/OpenSans-BoldItalic-webfont.svg create mode 100644 doc/1.5.5/guacamole-common-js/fonts/OpenSans-BoldItalic-webfont.woff create mode 100644 doc/1.5.5/guacamole-common-js/fonts/OpenSans-Italic-webfont.eot create mode 100644 doc/1.5.5/guacamole-common-js/fonts/OpenSans-Italic-webfont.svg create mode 100644 doc/1.5.5/guacamole-common-js/fonts/OpenSans-Italic-webfont.woff create mode 100644 doc/1.5.5/guacamole-common-js/fonts/OpenSans-Light-webfont.eot create mode 100644 doc/1.5.5/guacamole-common-js/fonts/OpenSans-Light-webfont.svg create mode 100644 doc/1.5.5/guacamole-common-js/fonts/OpenSans-Light-webfont.woff create mode 100644 doc/1.5.5/guacamole-common-js/fonts/OpenSans-LightItalic-webfont.eot create mode 100644 doc/1.5.5/guacamole-common-js/fonts/OpenSans-LightItalic-webfont.svg create mode 100644 doc/1.5.5/guacamole-common-js/fonts/OpenSans-LightItalic-webfont.woff create mode 100644 doc/1.5.5/guacamole-common-js/fonts/OpenSans-Regular-webfont.eot create mode 100644 doc/1.5.5/guacamole-common-js/fonts/OpenSans-Regular-webfont.svg create mode 100644 doc/1.5.5/guacamole-common-js/fonts/OpenSans-Regular-webfont.woff create mode 100644 doc/1.5.5/guacamole-common-js/index.html create mode 100644 doc/1.5.5/guacamole-common-js/main_webapp_modules_ArrayBufferReader.js.html create mode 100644 doc/1.5.5/guacamole-common-js/main_webapp_modules_ArrayBufferWriter.js.html create mode 100644 doc/1.5.5/guacamole-common-js/main_webapp_modules_AudioContextFactory.js.html create mode 100644 doc/1.5.5/guacamole-common-js/main_webapp_modules_AudioPlayer.js.html create mode 100644 doc/1.5.5/guacamole-common-js/main_webapp_modules_AudioRecorder.js.html create mode 100644 doc/1.5.5/guacamole-common-js/main_webapp_modules_BlobReader.js.html create mode 100644 doc/1.5.5/guacamole-common-js/main_webapp_modules_BlobWriter.js.html create mode 100644 doc/1.5.5/guacamole-common-js/main_webapp_modules_Client.js.html create mode 100644 doc/1.5.5/guacamole-common-js/main_webapp_modules_DataURIReader.js.html create mode 100644 doc/1.5.5/guacamole-common-js/main_webapp_modules_Display.js.html create mode 100644 doc/1.5.5/guacamole-common-js/main_webapp_modules_Event.js.html create mode 100644 doc/1.5.5/guacamole-common-js/main_webapp_modules_InputSink.js.html create mode 100644 doc/1.5.5/guacamole-common-js/main_webapp_modules_InputStream.js.html create mode 100644 doc/1.5.5/guacamole-common-js/main_webapp_modules_IntegerPool.js.html create mode 100644 doc/1.5.5/guacamole-common-js/main_webapp_modules_JSONReader.js.html create mode 100644 doc/1.5.5/guacamole-common-js/main_webapp_modules_Keyboard.js.html create mode 100644 doc/1.5.5/guacamole-common-js/main_webapp_modules_Layer.js.html create mode 100644 doc/1.5.5/guacamole-common-js/main_webapp_modules_Mouse.js.html create mode 100644 doc/1.5.5/guacamole-common-js/main_webapp_modules_Namespace.js.html create mode 100644 doc/1.5.5/guacamole-common-js/main_webapp_modules_Object.js.html create mode 100644 doc/1.5.5/guacamole-common-js/main_webapp_modules_OnScreenKeyboard.js.html create mode 100644 doc/1.5.5/guacamole-common-js/main_webapp_modules_OutputStream.js.html create mode 100644 doc/1.5.5/guacamole-common-js/main_webapp_modules_Parser.js.html create mode 100644 doc/1.5.5/guacamole-common-js/main_webapp_modules_Position.js.html create mode 100644 doc/1.5.5/guacamole-common-js/main_webapp_modules_RawAudioFormat.js.html create mode 100644 doc/1.5.5/guacamole-common-js/main_webapp_modules_SessionRecording.js.html create mode 100644 doc/1.5.5/guacamole-common-js/main_webapp_modules_Status.js.html create mode 100644 doc/1.5.5/guacamole-common-js/main_webapp_modules_StringReader.js.html create mode 100644 doc/1.5.5/guacamole-common-js/main_webapp_modules_StringWriter.js.html create mode 100644 doc/1.5.5/guacamole-common-js/main_webapp_modules_Touch.js.html create mode 100644 doc/1.5.5/guacamole-common-js/main_webapp_modules_Tunnel.js.html create mode 100644 doc/1.5.5/guacamole-common-js/main_webapp_modules_UTF8Parser.js.html create mode 100644 doc/1.5.5/guacamole-common-js/main_webapp_modules_Version.js.html create mode 100644 doc/1.5.5/guacamole-common-js/main_webapp_modules_VideoPlayer.js.html create mode 100644 doc/1.5.5/guacamole-common-js/scripts/linenumber.js create mode 100644 doc/1.5.5/guacamole-common-js/scripts/prettify/Apache-License-2.0.txt create mode 100644 doc/1.5.5/guacamole-common-js/scripts/prettify/lang-css.js create mode 100644 doc/1.5.5/guacamole-common-js/scripts/prettify/prettify.js create mode 100644 doc/1.5.5/guacamole-common-js/styles/jsdoc-default.css create mode 100644 doc/1.5.5/guacamole-common-js/styles/prettify-jsdoc.css create mode 100644 doc/1.5.5/guacamole-common-js/styles/prettify-tomorrow.css create mode 100644 doc/1.5.5/guacamole-common-js/test_javascript_EventSpec.js.html create mode 100644 doc/1.5.5/guacamole-common/allclasses-index.html create mode 100644 doc/1.5.5/guacamole-common/allclasses.html create mode 100644 doc/1.5.5/guacamole-common/allpackages-index.html create mode 100644 doc/1.5.5/guacamole-common/constant-values.html create mode 100644 doc/1.5.5/guacamole-common/deprecated-list.html create mode 100644 doc/1.5.5/guacamole-common/element-list create mode 100644 doc/1.5.5/guacamole-common/help-doc.html create mode 100644 doc/1.5.5/guacamole-common/index-all.html create mode 100644 doc/1.5.5/guacamole-common/index.html create mode 100644 doc/1.5.5/guacamole-common/jquery-ui.overrides.css create mode 100644 doc/1.5.5/guacamole-common/jquery/external/jquery/jquery.js create mode 100644 doc/1.5.5/guacamole-common/jquery/jquery-3.6.1.min.js create mode 100644 doc/1.5.5/guacamole-common/jquery/jquery-ui.min.css create mode 100644 doc/1.5.5/guacamole-common/jquery/jquery-ui.min.js create mode 100644 doc/1.5.5/guacamole-common/jquery/jszip-utils/dist/jszip-utils-ie.js create mode 100644 doc/1.5.5/guacamole-common/jquery/jszip-utils/dist/jszip-utils-ie.min.js create mode 100644 doc/1.5.5/guacamole-common/jquery/jszip-utils/dist/jszip-utils.js create mode 100644 doc/1.5.5/guacamole-common/jquery/jszip-utils/dist/jszip-utils.min.js create mode 100644 doc/1.5.5/guacamole-common/jquery/jszip/dist/jszip.js create mode 100644 doc/1.5.5/guacamole-common/jquery/jszip/dist/jszip.min.js create mode 100644 doc/1.5.5/guacamole-common/legal/ADDITIONAL_LICENSE_INFO create mode 100644 doc/1.5.5/guacamole-common/legal/ASSEMBLY_EXCEPTION create mode 100644 doc/1.5.5/guacamole-common/legal/LICENSE create mode 100644 doc/1.5.5/guacamole-common/legal/jquery.md create mode 100644 doc/1.5.5/guacamole-common/legal/jqueryUI.md create mode 100644 doc/1.5.5/guacamole-common/legal/jszip.md create mode 100644 doc/1.5.5/guacamole-common/legal/pako.md create mode 100644 doc/1.5.5/guacamole-common/member-search-index.js create mode 100644 doc/1.5.5/guacamole-common/member-search-index.zip create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleClientBadTypeException.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleClientException.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleClientOverrunException.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleClientTimeoutException.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleClientTooManyException.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleConnectionClosedException.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleException.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleResourceClosedException.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleResourceConflictException.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleResourceNotFoundException.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleSecurityException.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleServerBusyException.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleServerException.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleSessionClosedException.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleSessionConflictException.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleSessionTimeoutException.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleUnauthorizedException.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleUnsupportedException.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleUpstreamException.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleUpstreamNotFoundException.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleUpstreamTimeoutException.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleUpstreamUnavailableException.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleClientBadTypeException.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleClientException.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleClientOverrunException.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleClientTimeoutException.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleClientTooManyException.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleConnectionClosedException.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleException.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleResourceClosedException.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleResourceConflictException.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleResourceNotFoundException.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleSecurityException.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleServerBusyException.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleServerException.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleSessionClosedException.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleSessionConflictException.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleSessionTimeoutException.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleUnauthorizedException.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleUnsupportedException.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleUpstreamException.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleUpstreamNotFoundException.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleUpstreamTimeoutException.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleUpstreamUnavailableException.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/io/GuacamoleReader.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/io/GuacamoleWriter.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/io/ReaderGuacamoleReader.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/io/WriterGuacamoleWriter.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/io/class-use/GuacamoleReader.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/io/class-use/GuacamoleWriter.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/io/class-use/ReaderGuacamoleReader.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/io/class-use/WriterGuacamoleWriter.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/io/package-summary.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/io/package-tree.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/io/package-use.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/net/AbstractGuacamoleTunnel.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/net/DelegatingGuacamoleSocket.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/net/DelegatingGuacamoleTunnel.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/net/GuacamoleSocket.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/net/GuacamoleTunnel.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/net/InetGuacamoleSocket.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/net/SSLGuacamoleSocket.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/net/SimpleGuacamoleTunnel.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/net/class-use/AbstractGuacamoleTunnel.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/net/class-use/DelegatingGuacamoleSocket.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/net/class-use/DelegatingGuacamoleTunnel.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/net/class-use/GuacamoleSocket.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/net/class-use/GuacamoleTunnel.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/net/class-use/InetGuacamoleSocket.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/net/class-use/SSLGuacamoleSocket.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/net/class-use/SimpleGuacamoleTunnel.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/net/package-summary.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/net/package-tree.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/net/package-use.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/package-summary.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/package-tree.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/package-use.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/ConfiguredGuacamoleSocket.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/FailoverGuacamoleSocket.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/FilteredGuacamoleReader.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/FilteredGuacamoleSocket.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/FilteredGuacamoleWriter.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/GuacamoleClientInformation.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/GuacamoleConfiguration.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/GuacamoleFilter.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/GuacamoleInstruction.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/GuacamoleParser.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/GuacamoleProtocolCapability.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/GuacamoleProtocolVersion.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/GuacamoleStatus.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/class-use/ConfiguredGuacamoleSocket.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/class-use/FailoverGuacamoleSocket.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/class-use/FilteredGuacamoleReader.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/class-use/FilteredGuacamoleSocket.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/class-use/FilteredGuacamoleWriter.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/class-use/GuacamoleClientInformation.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/class-use/GuacamoleConfiguration.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/class-use/GuacamoleFilter.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/class-use/GuacamoleInstruction.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/class-use/GuacamoleParser.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/class-use/GuacamoleProtocolCapability.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/class-use/GuacamoleProtocolVersion.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/class-use/GuacamoleStatus.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/package-summary.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/package-tree.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/package-use.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/servlet/GuacamoleHTTPTunnelServlet.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/servlet/class-use/GuacamoleHTTPTunnelServlet.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/servlet/package-summary.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/servlet/package-tree.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/servlet/package-use.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/websocket/GuacamoleWebSocketTunnelEndpoint.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/websocket/class-use/GuacamoleWebSocketTunnelEndpoint.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/websocket/package-summary.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/websocket/package-tree.html create mode 100644 doc/1.5.5/guacamole-common/org/apache/guacamole/websocket/package-use.html create mode 100644 doc/1.5.5/guacamole-common/overview-summary.html create mode 100644 doc/1.5.5/guacamole-common/overview-tree.html create mode 100644 doc/1.5.5/guacamole-common/package-search-index.js create mode 100644 doc/1.5.5/guacamole-common/package-search-index.zip create mode 100644 doc/1.5.5/guacamole-common/resources/glass.png create mode 100644 doc/1.5.5/guacamole-common/resources/x.png create mode 100644 doc/1.5.5/guacamole-common/script.js create mode 100644 doc/1.5.5/guacamole-common/search.js create mode 100644 doc/1.5.5/guacamole-common/serialized-form.html create mode 100644 doc/1.5.5/guacamole-common/stylesheet.css create mode 100644 doc/1.5.5/guacamole-common/type-search-index.js create mode 100644 doc/1.5.5/guacamole-common/type-search-index.zip create mode 100644 doc/1.5.5/guacamole-ext/allclasses-index.html create mode 100644 doc/1.5.5/guacamole-ext/allclasses.html create mode 100644 doc/1.5.5/guacamole-ext/allpackages-index.html create mode 100644 doc/1.5.5/guacamole-ext/constant-values.html create mode 100644 doc/1.5.5/guacamole-ext/deprecated-list.html create mode 100644 doc/1.5.5/guacamole-ext/element-list create mode 100644 doc/1.5.5/guacamole-ext/help-doc.html create mode 100644 doc/1.5.5/guacamole-ext/index-all.html create mode 100644 doc/1.5.5/guacamole-ext/index.html create mode 100644 doc/1.5.5/guacamole-ext/jquery-ui.overrides.css create mode 100644 doc/1.5.5/guacamole-ext/jquery/external/jquery/jquery.js create mode 100644 doc/1.5.5/guacamole-ext/jquery/jquery-3.6.1.min.js create mode 100644 doc/1.5.5/guacamole-ext/jquery/jquery-ui.min.css create mode 100644 doc/1.5.5/guacamole-ext/jquery/jquery-ui.min.js create mode 100644 doc/1.5.5/guacamole-ext/jquery/jszip-utils/dist/jszip-utils-ie.js create mode 100644 doc/1.5.5/guacamole-ext/jquery/jszip-utils/dist/jszip-utils-ie.min.js create mode 100644 doc/1.5.5/guacamole-ext/jquery/jszip-utils/dist/jszip-utils.js create mode 100644 doc/1.5.5/guacamole-ext/jquery/jszip-utils/dist/jszip-utils.min.js create mode 100644 doc/1.5.5/guacamole-ext/jquery/jszip/dist/jszip.js create mode 100644 doc/1.5.5/guacamole-ext/jquery/jszip/dist/jszip.min.js create mode 100644 doc/1.5.5/guacamole-ext/legal/ADDITIONAL_LICENSE_INFO create mode 100644 doc/1.5.5/guacamole-ext/legal/ASSEMBLY_EXCEPTION create mode 100644 doc/1.5.5/guacamole-ext/legal/LICENSE create mode 100644 doc/1.5.5/guacamole-ext/legal/jquery.md create mode 100644 doc/1.5.5/guacamole-ext/legal/jqueryUI.md create mode 100644 doc/1.5.5/guacamole-ext/legal/jszip.md create mode 100644 doc/1.5.5/guacamole-ext/legal/pako.md create mode 100644 doc/1.5.5/guacamole-ext/member-search-index.js create mode 100644 doc/1.5.5/guacamole-ext/member-search-index.zip create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/environment/DelegatingEnvironment.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/environment/Environment.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/environment/LocalEnvironment.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/environment/class-use/DelegatingEnvironment.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/environment/class-use/Environment.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/environment/class-use/LocalEnvironment.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/environment/package-summary.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/environment/package-tree.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/environment/package-use.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/form/BooleanField.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/form/DateField.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/form/EmailField.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/form/EnumField.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/form/Field.Type.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/form/Field.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/form/FieldOption.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/form/Form.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/form/LanguageField.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/form/MultilineField.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/form/NumericField.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/form/PasswordField.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/form/RedirectField.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/form/TerminalColorSchemeField.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/form/TextField.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/form/TimeField.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/form/TimeZoneField.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/form/UsernameField.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/BooleanField.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/DateField.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/EmailField.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/EnumField.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/Field.Type.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/Field.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/FieldOption.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/Form.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/LanguageField.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/MultilineField.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/NumericField.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/PasswordField.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/RedirectField.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/TerminalColorSchemeField.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/TextField.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/TimeField.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/TimeZoneField.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/UsernameField.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/form/package-summary.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/form/package-tree.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/form/package-use.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/language/Translatable.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleClientBadTypeException.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleClientException.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleClientOverrunException.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleClientTimeoutException.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleClientTooManyException.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleConnectionClosedException.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleCredentialsException.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleInsufficientCredentialsException.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleInvalidCredentialsException.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleResourceClosedException.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleResourceConflictException.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleResourceNotFoundException.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleSecurityException.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleServerBusyException.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleServerException.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleSessionClosedException.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleSessionConflictException.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleSessionTimeoutException.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleUnauthorizedException.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleUnsupportedException.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleUpstreamException.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleUpstreamNotFoundException.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleUpstreamTimeoutException.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleUpstreamUnavailableException.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableMessage.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/Translatable.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleClientBadTypeException.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleClientException.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleClientOverrunException.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleClientTimeoutException.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleClientTooManyException.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleConnectionClosedException.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleCredentialsException.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleInsufficientCredentialsException.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleInvalidCredentialsException.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleResourceClosedException.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleResourceConflictException.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleResourceNotFoundException.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleSecurityException.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleServerBusyException.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleServerException.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleSessionClosedException.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleSessionConflictException.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleSessionTimeoutException.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleUnauthorizedException.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleUnsupportedException.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleUpstreamException.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleUpstreamNotFoundException.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleUpstreamTimeoutException.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleUpstreamUnavailableException.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableMessage.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/language/package-summary.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/language/package-tree.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/language/package-use.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/AbstractActiveConnection.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/AbstractActivityLog.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/AbstractAuthenticatedUser.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/AbstractAuthenticationProvider.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/AbstractConnection.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/AbstractConnectionGroup.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/AbstractIdentifiable.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/AbstractSharingProfile.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/AbstractUser.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/AbstractUserContext.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/AbstractUserGroup.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/ActiveConnection.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/ActivityLog.Type.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/ActivityLog.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/ActivityRecord.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/ActivityRecordSet.SortableProperty.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/ActivityRecordSet.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/Attributes.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/AuthenticatedUser.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/AuthenticationProvider.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/Connectable.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/Connection.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/ConnectionGroup.Type.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/ConnectionGroup.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/ConnectionRecord.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/ConnectionRecordSet.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/Credentials.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/DecoratingActivityRecordSet.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/DecoratingDirectory.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/DelegatingActivityRecord.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/DelegatingActivityRecordSet.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/DelegatingConnection.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/DelegatingConnectionGroup.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/DelegatingConnectionRecord.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/DelegatingDirectory.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/DelegatingSharingProfile.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/DelegatingUser.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/DelegatingUserContext.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/DelegatingUserGroup.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/Directory.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/FileActivityLog.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/GuacamoleProxyConfiguration.EncryptionMethod.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/GuacamoleProxyConfiguration.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/Identifiable.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/Permissions.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/ReadableAttributes.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/RelatedObjectSet.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/Shareable.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/SharingProfile.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/TokenInjectingConnection.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/TokenInjectingConnectionGroup.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/TokenInjectingUserContext.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/User.Attribute.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/User.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/UserContext.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/UserGroup.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/AbstractActiveConnection.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/AbstractActivityLog.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/AbstractAuthenticatedUser.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/AbstractAuthenticationProvider.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/AbstractConnection.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/AbstractConnectionGroup.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/AbstractIdentifiable.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/AbstractSharingProfile.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/AbstractUser.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/AbstractUserContext.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/AbstractUserGroup.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/ActiveConnection.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/ActivityLog.Type.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/ActivityLog.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/ActivityRecord.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/ActivityRecordSet.SortableProperty.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/ActivityRecordSet.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/Attributes.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/AuthenticatedUser.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/AuthenticationProvider.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/Connectable.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/Connection.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/ConnectionGroup.Type.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/ConnectionGroup.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/ConnectionRecord.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/ConnectionRecordSet.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/Credentials.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/DecoratingActivityRecordSet.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/DecoratingDirectory.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/DelegatingActivityRecord.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/DelegatingActivityRecordSet.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/DelegatingConnection.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/DelegatingConnectionGroup.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/DelegatingConnectionRecord.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/DelegatingDirectory.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/DelegatingSharingProfile.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/DelegatingUser.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/DelegatingUserContext.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/DelegatingUserGroup.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/Directory.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/FileActivityLog.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/GuacamoleProxyConfiguration.EncryptionMethod.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/GuacamoleProxyConfiguration.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/Identifiable.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/Permissions.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/ReadableAttributes.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/RelatedObjectSet.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/Shareable.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/SharingProfile.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/TokenInjectingConnection.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/TokenInjectingConnectionGroup.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/TokenInjectingUserContext.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/User.Attribute.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/User.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/UserContext.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/UserGroup.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/credentials/CredentialsInfo.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/credentials/GuacamoleCredentialsException.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/credentials/GuacamoleInsufficientCredentialsException.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/credentials/GuacamoleInvalidCredentialsException.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/credentials/UserCredentials.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/credentials/class-use/CredentialsInfo.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/credentials/class-use/GuacamoleCredentialsException.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/credentials/class-use/GuacamoleInsufficientCredentialsException.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/credentials/class-use/GuacamoleInvalidCredentialsException.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/credentials/class-use/UserCredentials.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/credentials/package-summary.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/credentials/package-tree.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/credentials/package-use.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/package-summary.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/package-tree.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/package-use.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/ObjectPermission.Type.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/ObjectPermission.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/ObjectPermissionSet.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/Permission.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/PermissionSet.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/SystemPermission.Type.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/SystemPermission.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/SystemPermissionSet.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/class-use/ObjectPermission.Type.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/class-use/ObjectPermission.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/class-use/ObjectPermissionSet.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/class-use/Permission.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/class-use/PermissionSet.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/class-use/SystemPermission.Type.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/class-use/SystemPermission.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/class-use/SystemPermissionSet.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/package-summary.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/package-tree.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/package-use.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/SimpleActivityRecordSet.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/SimpleAuthenticationProvider.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/SimpleConnection.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/SimpleConnectionDirectory.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/SimpleConnectionGroup.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/SimpleConnectionGroupDirectory.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/SimpleConnectionRecordSet.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/SimpleDirectory.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/SimpleObjectPermissionSet.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/SimpleRelatedObjectSet.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/SimpleSystemPermissionSet.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/SimpleUser.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/SimpleUserContext.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/SimpleUserDirectory.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/SimpleUserGroup.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/class-use/SimpleActivityRecordSet.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/class-use/SimpleAuthenticationProvider.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/class-use/SimpleConnection.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/class-use/SimpleConnectionDirectory.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/class-use/SimpleConnectionGroup.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/class-use/SimpleConnectionGroupDirectory.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/class-use/SimpleConnectionRecordSet.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/class-use/SimpleDirectory.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/class-use/SimpleObjectPermissionSet.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/class-use/SimpleRelatedObjectSet.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/class-use/SimpleSystemPermissionSet.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/class-use/SimpleUser.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/class-use/SimpleUserContext.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/class-use/SimpleUserDirectory.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/class-use/SimpleUserGroup.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/package-summary.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/package-tree.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/package-use.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/AuthenticationFailureEvent.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/AuthenticationSuccessEvent.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/CredentialEvent.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/TunnelCloseEvent.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/TunnelConnectEvent.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/TunnelEvent.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/UserEvent.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/class-use/AuthenticationFailureEvent.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/class-use/AuthenticationSuccessEvent.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/class-use/CredentialEvent.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/class-use/TunnelCloseEvent.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/class-use/TunnelConnectEvent.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/class-use/TunnelEvent.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/class-use/UserEvent.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/listener/AuthenticationFailureListener.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/listener/AuthenticationSuccessListener.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/listener/Listener.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/listener/TunnelCloseListener.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/listener/TunnelConnectListener.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/listener/class-use/AuthenticationFailureListener.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/listener/class-use/AuthenticationSuccessListener.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/listener/class-use/Listener.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/listener/class-use/TunnelCloseListener.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/listener/class-use/TunnelConnectListener.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/listener/package-summary.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/listener/package-tree.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/listener/package-use.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/package-summary.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/package-tree.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/package-use.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/BooleanGuacamoleProperty.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/ByteArrayProperty.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/EnumGuacamoleProperty.PropertyValue.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/EnumGuacamoleProperty.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/FileGuacamoleProperties.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/FileGuacamoleProperty.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/GuacamoleProperties.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/GuacamoleProperty.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/IntegerGuacamoleProperty.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/LongGuacamoleProperty.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/PropertiesGuacamoleProperties.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/StringGuacamoleProperty.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/StringListProperty.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/TimeZoneGuacamoleProperty.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/URIGuacamoleProperty.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/class-use/BooleanGuacamoleProperty.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/class-use/ByteArrayProperty.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/class-use/EnumGuacamoleProperty.PropertyValue.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/class-use/EnumGuacamoleProperty.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/class-use/FileGuacamoleProperties.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/class-use/FileGuacamoleProperty.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/class-use/GuacamoleProperties.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/class-use/GuacamoleProperty.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/class-use/IntegerGuacamoleProperty.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/class-use/LongGuacamoleProperty.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/class-use/PropertiesGuacamoleProperties.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/class-use/StringGuacamoleProperty.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/class-use/StringListProperty.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/class-use/TimeZoneGuacamoleProperty.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/class-use/URIGuacamoleProperty.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/package-summary.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/package-tree.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/package-use.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/protocols/ProtocolInfo.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/protocols/class-use/ProtocolInfo.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/protocols/package-summary.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/protocols/package-tree.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/protocols/package-use.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/token/GuacamoleTokenUndefinedException.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/token/StandardTokens.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/token/TokenFilter.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/token/TokenName.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/token/class-use/GuacamoleTokenUndefinedException.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/token/class-use/StandardTokens.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/token/class-use/TokenFilter.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/token/class-use/TokenName.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/token/package-summary.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/token/package-tree.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/token/package-use.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/xml/DocumentHandler.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/xml/TagHandler.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/xml/class-use/DocumentHandler.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/xml/class-use/TagHandler.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/xml/package-summary.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/xml/package-tree.html create mode 100644 doc/1.5.5/guacamole-ext/org/apache/guacamole/xml/package-use.html create mode 100644 doc/1.5.5/guacamole-ext/overview-summary.html create mode 100644 doc/1.5.5/guacamole-ext/overview-tree.html create mode 100644 doc/1.5.5/guacamole-ext/package-search-index.js create mode 100644 doc/1.5.5/guacamole-ext/package-search-index.zip create mode 100644 doc/1.5.5/guacamole-ext/resources/glass.png create mode 100644 doc/1.5.5/guacamole-ext/resources/x.png create mode 100644 doc/1.5.5/guacamole-ext/script.js create mode 100644 doc/1.5.5/guacamole-ext/search.js create mode 100644 doc/1.5.5/guacamole-ext/serialized-form.html create mode 100644 doc/1.5.5/guacamole-ext/stylesheet.css create mode 100644 doc/1.5.5/guacamole-ext/type-search-index.js create mode 100644 doc/1.5.5/guacamole-ext/type-search-index.zip create mode 100644 doc/1.5.5/gug/.buildinfo create mode 100644 doc/1.5.5/gug/_images/client-connection-menu-multiple.png create mode 100644 doc/1.5.5/gug/_images/client-connection-menu.png create mode 100644 doc/1.5.5/gug/_images/client-panel.png create mode 100644 doc/1.5.5/gug/_images/client-tiled-multi-focus.png create mode 100644 doc/1.5.5/gug/_images/client-tiled.png create mode 100644 doc/1.5.5/gug/_images/duo-add-guacamole.png create mode 100644 doc/1.5.5/gug/_images/duo-auth-factor-1.png create mode 100644 doc/1.5.5/gug/_images/duo-auth-factor-2.png create mode 100644 doc/1.5.5/gug/_images/duo-copy-details.png create mode 100644 doc/1.5.5/gug/_images/duo-rename-guacamole.png create mode 100644 doc/1.5.5/gug/_images/edit-connection.png create mode 100644 doc/1.5.5/gug/_images/edit-group-memberships.png create mode 100644 doc/1.5.5/gug/_images/edit-group.png create mode 100644 doc/1.5.5/gug/_images/edit-sharing-profile.png create mode 100644 doc/1.5.5/gug/_images/edit-user-group.png create mode 100644 doc/1.5.5/gug/_images/edit-user-membership.png create mode 100644 doc/1.5.5/gug/_images/edit-user.png create mode 100644 doc/1.5.5/gug/_images/file-browser.png create mode 100644 doc/1.5.5/gug/_images/file-transfers.png create mode 100644 doc/1.5.5/gug/_images/guac-arch.png create mode 100644 doc/1.5.5/gug/_images/guac-menu-disconnect.png create mode 100644 doc/1.5.5/gug/_images/guac-menu-share-link.png create mode 100644 doc/1.5.5/gug/_images/guac-menu-share.png create mode 100644 doc/1.5.5/gug/_images/guacamole-client-interface.png create mode 100644 doc/1.5.5/gug/_images/guacamole-drive-download.png create mode 100644 doc/1.5.5/gug/_images/guacamole-drive.png create mode 100644 doc/1.5.5/gug/_images/guacamole-home-screen.png create mode 100644 doc/1.5.5/gug/_images/guacamole-preferences.png create mode 100644 doc/1.5.5/gug/_images/guacamole-settings-sections.png create mode 100644 doc/1.5.5/gug/_images/history-table-with-recordings.png create mode 100644 doc/1.5.5/gug/_images/manage-connections.png create mode 100644 doc/1.5.5/gug/_images/manage-groups.png create mode 100644 doc/1.5.5/gug/_images/manage-sessions.png create mode 100644 doc/1.5.5/gug/_images/manage-users.png create mode 100644 doc/1.5.5/gug/_images/recording-player-in-use.png create mode 100644 doc/1.5.5/gug/_images/recording-storage-connection-config-option1-recommended.png create mode 100644 doc/1.5.5/gug/_images/recording-storage-connection-config-option2.png create mode 100644 doc/1.5.5/gug/_images/session-filter-example-1.png create mode 100644 doc/1.5.5/gug/_images/session-filter-example-2.png create mode 100644 doc/1.5.5/gug/_images/totp-auth-factor-1.png create mode 100644 doc/1.5.5/gug/_images/totp-auth-factor-2.png create mode 100644 doc/1.5.5/gug/_images/totp-enroll-detail.png create mode 100644 doc/1.5.5/gug/_images/totp-enroll.png create mode 100644 doc/1.5.5/gug/_images/totp-user-config.png create mode 100644 doc/1.5.5/gug/_images/touchpad.png create mode 100644 doc/1.5.5/gug/_images/touchscreen.png create mode 100644 doc/1.5.5/gug/_images/vault-ksm-001a-create-shared-folder.png create mode 100644 doc/1.5.5/gug/_images/vault-ksm-001b-create-shared-folder.png create mode 100644 doc/1.5.5/gug/_images/vault-ksm-002-select-ksm.png create mode 100644 doc/1.5.5/gug/_images/vault-ksm-003a-create-application.png create mode 100644 doc/1.5.5/gug/_images/vault-ksm-003b-create-application.png create mode 100644 doc/1.5.5/gug/_images/vault-ksm-004-generate-token.png create mode 100644 doc/1.5.5/gug/_sources/adhoc-connections.md.txt create mode 100644 doc/1.5.5/gug/_sources/administration.md.txt create mode 100644 doc/1.5.5/gug/_sources/cas-auth.md.txt create mode 100644 doc/1.5.5/gug/_sources/configuring-guacamole.md.txt create mode 100644 doc/1.5.5/gug/_sources/custom-auth.md.txt create mode 100644 doc/1.5.5/gug/_sources/custom-protocols.md.txt create mode 100644 doc/1.5.5/gug/_sources/duo-auth.md.txt create mode 100644 doc/1.5.5/gug/_sources/event-listeners.md.txt create mode 100644 doc/1.5.5/gug/_sources/guacamole-architecture.md.txt create mode 100644 doc/1.5.5/gug/_sources/guacamole-common-js.md.txt create mode 100644 doc/1.5.5/gug/_sources/guacamole-common.md.txt create mode 100644 doc/1.5.5/gug/_sources/guacamole-docker.md.txt create mode 100644 doc/1.5.5/gug/_sources/guacamole-ext.md.txt create mode 100644 doc/1.5.5/gug/_sources/guacamole-protocol.md.txt create mode 100644 doc/1.5.5/gug/_sources/header-auth.md.txt create mode 100644 doc/1.5.5/gug/_sources/index.md.txt create mode 100644 doc/1.5.5/gug/_sources/installing-guacamole.md.txt create mode 100644 doc/1.5.5/gug/_sources/introduction.md.txt create mode 100644 doc/1.5.5/gug/_sources/jdbc-auth.md.txt create mode 100644 doc/1.5.5/gug/_sources/json-auth.md.txt create mode 100644 doc/1.5.5/gug/_sources/ldap-auth.md.txt create mode 100644 doc/1.5.5/gug/_sources/libguac.md.txt create mode 100644 doc/1.5.5/gug/_sources/openid-auth.md.txt create mode 100644 doc/1.5.5/gug/_sources/protocol-reference.rst.txt create mode 100644 doc/1.5.5/gug/_sources/radius-auth.md.txt create mode 100644 doc/1.5.5/gug/_sources/recording-playback.md.txt create mode 100644 doc/1.5.5/gug/_sources/reverse-proxy.md.txt create mode 100644 doc/1.5.5/gug/_sources/saml-auth.md.txt create mode 100644 doc/1.5.5/gug/_sources/totp-auth.md.txt create mode 100644 doc/1.5.5/gug/_sources/troubleshooting.md.txt create mode 100644 doc/1.5.5/gug/_sources/using-guacamole.md.txt create mode 100644 doc/1.5.5/gug/_sources/vault.md.txt create mode 100644 doc/1.5.5/gug/_sources/writing-you-own-guacamole-app.md.txt create mode 100644 doc/1.5.5/gug/_static/_sphinx_javascript_frameworks_compat.js create mode 100644 doc/1.5.5/gug/_static/basic.css create mode 100644 doc/1.5.5/gug/_static/css/badge_only.css create mode 100644 doc/1.5.5/gug/_static/css/fonts/Roboto-Slab-Bold.woff create mode 100644 doc/1.5.5/gug/_static/css/fonts/Roboto-Slab-Bold.woff2 create mode 100644 doc/1.5.5/gug/_static/css/fonts/Roboto-Slab-Regular.woff create mode 100644 doc/1.5.5/gug/_static/css/fonts/Roboto-Slab-Regular.woff2 create mode 100644 doc/1.5.5/gug/_static/css/fonts/fontawesome-webfont.eot create mode 100644 doc/1.5.5/gug/_static/css/fonts/fontawesome-webfont.svg create mode 100644 doc/1.5.5/gug/_static/css/fonts/fontawesome-webfont.ttf create mode 100644 doc/1.5.5/gug/_static/css/fonts/fontawesome-webfont.woff create mode 100644 doc/1.5.5/gug/_static/css/fonts/fontawesome-webfont.woff2 create mode 100644 doc/1.5.5/gug/_static/css/fonts/lato-bold-italic.woff create mode 100644 doc/1.5.5/gug/_static/css/fonts/lato-bold-italic.woff2 create mode 100644 doc/1.5.5/gug/_static/css/fonts/lato-bold.woff create mode 100644 doc/1.5.5/gug/_static/css/fonts/lato-bold.woff2 create mode 100644 doc/1.5.5/gug/_static/css/fonts/lato-normal-italic.woff create mode 100644 doc/1.5.5/gug/_static/css/fonts/lato-normal-italic.woff2 create mode 100644 doc/1.5.5/gug/_static/css/fonts/lato-normal.woff create mode 100644 doc/1.5.5/gug/_static/css/fonts/lato-normal.woff2 create mode 100644 doc/1.5.5/gug/_static/css/theme.css create mode 100644 doc/1.5.5/gug/_static/doctools.js create mode 100644 doc/1.5.5/gug/_static/documentation_options.js create mode 100644 doc/1.5.5/gug/_static/file.png create mode 100644 doc/1.5.5/gug/_static/gug.css create mode 100644 doc/1.5.5/gug/_static/jquery.js create mode 100644 doc/1.5.5/gug/_static/js/badge_only.js create mode 100644 doc/1.5.5/gug/_static/js/html5shiv-printshiv.min.js create mode 100644 doc/1.5.5/gug/_static/js/html5shiv.min.js create mode 100644 doc/1.5.5/gug/_static/js/theme.js create mode 100644 doc/1.5.5/gug/_static/language_data.js create mode 100644 doc/1.5.5/gug/_static/minus.png create mode 100644 doc/1.5.5/gug/_static/plus.png create mode 100644 doc/1.5.5/gug/_static/pygments.css create mode 100644 doc/1.5.5/gug/_static/searchtools.js create mode 100644 doc/1.5.5/gug/_static/sphinx_highlight.js create mode 100644 doc/1.5.5/gug/_static/tabs.css create mode 100644 doc/1.5.5/gug/_static/tabs.js create mode 100644 doc/1.5.5/gug/adhoc-connections.html create mode 100644 doc/1.5.5/gug/administration.html create mode 100644 doc/1.5.5/gug/cas-auth.html create mode 100644 doc/1.5.5/gug/configuring-guacamole.html create mode 100644 doc/1.5.5/gug/custom-auth.html create mode 100644 doc/1.5.5/gug/custom-protocols.html create mode 100644 doc/1.5.5/gug/duo-auth.html create mode 100644 doc/1.5.5/gug/event-listeners.html create mode 100644 doc/1.5.5/gug/genindex.html create mode 100644 doc/1.5.5/gug/guacamole-architecture.html create mode 100644 doc/1.5.5/gug/guacamole-common-js.html create mode 100644 doc/1.5.5/gug/guacamole-common.html create mode 100644 doc/1.5.5/gug/guacamole-docker.html create mode 100644 doc/1.5.5/gug/guacamole-ext.html create mode 100644 doc/1.5.5/gug/guacamole-protocol.html create mode 100644 doc/1.5.5/gug/header-auth.html create mode 100644 doc/1.5.5/gug/index.html create mode 100644 doc/1.5.5/gug/installing-guacamole.html create mode 100644 doc/1.5.5/gug/introduction.html create mode 100644 doc/1.5.5/gug/jdbc-auth.html create mode 100644 doc/1.5.5/gug/json-auth.html create mode 100644 doc/1.5.5/gug/ldap-auth.html create mode 100644 doc/1.5.5/gug/libguac.html create mode 100644 doc/1.5.5/gug/objects.inv create mode 100644 doc/1.5.5/gug/openid-auth.html create mode 100644 doc/1.5.5/gug/protocol-reference.html create mode 100644 doc/1.5.5/gug/radius-auth.html create mode 100644 doc/1.5.5/gug/recording-playback.html create mode 100644 doc/1.5.5/gug/reverse-proxy.html create mode 100644 doc/1.5.5/gug/saml-auth.html create mode 100644 doc/1.5.5/gug/search.html create mode 100644 doc/1.5.5/gug/searchindex.js create mode 100644 doc/1.5.5/gug/totp-auth.html create mode 100644 doc/1.5.5/gug/troubleshooting.html create mode 100644 doc/1.5.5/gug/using-guacamole.html create mode 100644 doc/1.5.5/gug/vault.html create mode 100644 doc/1.5.5/gug/writing-you-own-guacamole-app.html create mode 100644 doc/1.5.5/libguac-terminal/annotated.html create mode 100644 doc/1.5.5/libguac-terminal/bc_s.png create mode 100644 doc/1.5.5/libguac-terminal/bc_sd.png create mode 100644 doc/1.5.5/libguac-terminal/classes.html create mode 100644 doc/1.5.5/libguac-terminal/clipboard.js create mode 100644 doc/1.5.5/libguac-terminal/closed.png create mode 100644 doc/1.5.5/libguac-terminal/cookie.js create mode 100644 doc/1.5.5/libguac-terminal/deprecated.html create mode 100644 doc/1.5.5/libguac-terminal/dir_145042b6f7f292100d5d9150e80a046e.html create mode 100644 doc/1.5.5/libguac-terminal/doc.svg create mode 100644 doc/1.5.5/libguac-terminal/docd.svg create mode 100644 doc/1.5.5/libguac-terminal/doxygen.css create mode 100644 doc/1.5.5/libguac-terminal/doxygen.svg create mode 100644 doc/1.5.5/libguac-terminal/doxygen_crawl.html create mode 100644 doc/1.5.5/libguac-terminal/dynsections.js create mode 100644 doc/1.5.5/libguac-terminal/files.html create mode 100644 doc/1.5.5/libguac-terminal/folderclosed.svg create mode 100644 doc/1.5.5/libguac-terminal/folderclosedd.svg create mode 100644 doc/1.5.5/libguac-terminal/folderopen.svg create mode 100644 doc/1.5.5/libguac-terminal/folderopend.svg create mode 100644 doc/1.5.5/libguac-terminal/functions.html create mode 100644 doc/1.5.5/libguac-terminal/functions_vars.html create mode 100644 doc/1.5.5/libguac-terminal/globals.html create mode 100644 doc/1.5.5/libguac-terminal/globals_defs.html create mode 100644 doc/1.5.5/libguac-terminal/globals_enum.html create mode 100644 doc/1.5.5/libguac-terminal/globals_eval.html create mode 100644 doc/1.5.5/libguac-terminal/globals_func.html create mode 100644 doc/1.5.5/libguac-terminal/globals_type.html create mode 100644 doc/1.5.5/libguac-terminal/index.html create mode 100644 doc/1.5.5/libguac-terminal/jquery.js create mode 100644 doc/1.5.5/libguac-terminal/menu.js create mode 100644 doc/1.5.5/libguac-terminal/menudata.js create mode 100644 doc/1.5.5/libguac-terminal/minus.svg create mode 100644 doc/1.5.5/libguac-terminal/minusd.svg create mode 100644 doc/1.5.5/libguac-terminal/nav_f.png create mode 100644 doc/1.5.5/libguac-terminal/nav_fd.png create mode 100644 doc/1.5.5/libguac-terminal/nav_g.png create mode 100644 doc/1.5.5/libguac-terminal/nav_h.png create mode 100644 doc/1.5.5/libguac-terminal/nav_hd.png create mode 100644 doc/1.5.5/libguac-terminal/open.png create mode 100644 doc/1.5.5/libguac-terminal/pages.html create mode 100644 doc/1.5.5/libguac-terminal/plus.svg create mode 100644 doc/1.5.5/libguac-terminal/plusd.svg create mode 100644 doc/1.5.5/libguac-terminal/search/all_0.js create mode 100644 doc/1.5.5/libguac-terminal/search/all_1.js create mode 100644 doc/1.5.5/libguac-terminal/search/all_2.js create mode 100644 doc/1.5.5/libguac-terminal/search/all_3.js create mode 100644 doc/1.5.5/libguac-terminal/search/all_4.js create mode 100644 doc/1.5.5/libguac-terminal/search/all_5.js create mode 100644 doc/1.5.5/libguac-terminal/search/all_6.js create mode 100644 doc/1.5.5/libguac-terminal/search/all_7.js create mode 100644 doc/1.5.5/libguac-terminal/search/all_8.js create mode 100644 doc/1.5.5/libguac-terminal/search/all_9.js create mode 100644 doc/1.5.5/libguac-terminal/search/classes_0.js create mode 100644 doc/1.5.5/libguac-terminal/search/close.svg create mode 100644 doc/1.5.5/libguac-terminal/search/defines_0.js create mode 100644 doc/1.5.5/libguac-terminal/search/enums_0.js create mode 100644 doc/1.5.5/libguac-terminal/search/enumvalues_0.js create mode 100644 doc/1.5.5/libguac-terminal/search/files_0.js create mode 100644 doc/1.5.5/libguac-terminal/search/functions_0.js create mode 100644 doc/1.5.5/libguac-terminal/search/mag.svg create mode 100644 doc/1.5.5/libguac-terminal/search/mag_d.svg create mode 100644 doc/1.5.5/libguac-terminal/search/mag_sel.svg create mode 100644 doc/1.5.5/libguac-terminal/search/mag_seld.svg create mode 100644 doc/1.5.5/libguac-terminal/search/pages_0.js create mode 100644 doc/1.5.5/libguac-terminal/search/pages_1.js create mode 100644 doc/1.5.5/libguac-terminal/search/search.css create mode 100644 doc/1.5.5/libguac-terminal/search/search.js create mode 100644 doc/1.5.5/libguac-terminal/search/searchdata.js create mode 100644 doc/1.5.5/libguac-terminal/search/typedefs_0.js create mode 100644 doc/1.5.5/libguac-terminal/search/variables_0.js create mode 100644 doc/1.5.5/libguac-terminal/search/variables_1.js create mode 100644 doc/1.5.5/libguac-terminal/search/variables_2.js create mode 100644 doc/1.5.5/libguac-terminal/search/variables_3.js create mode 100644 doc/1.5.5/libguac-terminal/search/variables_4.js create mode 100644 doc/1.5.5/libguac-terminal/search/variables_5.js create mode 100644 doc/1.5.5/libguac-terminal/search/variables_6.js create mode 100644 doc/1.5.5/libguac-terminal/splitbar.png create mode 100644 doc/1.5.5/libguac-terminal/splitbard.png create mode 100644 doc/1.5.5/libguac-terminal/structguac__terminal__options.html create mode 100644 doc/1.5.5/libguac-terminal/sync_off.png create mode 100644 doc/1.5.5/libguac-terminal/sync_on.png create mode 100644 doc/1.5.5/libguac-terminal/tab_a.png create mode 100644 doc/1.5.5/libguac-terminal/tab_ad.png create mode 100644 doc/1.5.5/libguac-terminal/tab_b.png create mode 100644 doc/1.5.5/libguac-terminal/tab_bd.png create mode 100644 doc/1.5.5/libguac-terminal/tab_h.png create mode 100644 doc/1.5.5/libguac-terminal/tab_hd.png create mode 100644 doc/1.5.5/libguac-terminal/tab_s.png create mode 100644 doc/1.5.5/libguac-terminal/tab_sd.png create mode 100644 doc/1.5.5/libguac-terminal/tabs.css create mode 100644 doc/1.5.5/libguac-terminal/terminal_8h.html create mode 100644 doc/1.5.5/libguac-terminal/terminal_8h_source.html create mode 100644 doc/1.5.5/libguac/annotated.html create mode 100644 doc/1.5.5/libguac/argv-constants_8h.html create mode 100644 doc/1.5.5/libguac/argv-constants_8h_source.html create mode 100644 doc/1.5.5/libguac/argv-fntypes_8h.html create mode 100644 doc/1.5.5/libguac/argv-fntypes_8h_source.html create mode 100644 doc/1.5.5/libguac/argv_8h.html create mode 100644 doc/1.5.5/libguac/argv_8h_source.html create mode 100644 doc/1.5.5/libguac/audio-fntypes_8h.html create mode 100644 doc/1.5.5/libguac/audio-fntypes_8h_source.html create mode 100644 doc/1.5.5/libguac/audio-types_8h.html create mode 100644 doc/1.5.5/libguac/audio-types_8h_source.html create mode 100644 doc/1.5.5/libguac/audio_8h.html create mode 100644 doc/1.5.5/libguac/audio_8h_source.html create mode 100644 doc/1.5.5/libguac/bc_s.png create mode 100644 doc/1.5.5/libguac/bc_sd.png create mode 100644 doc/1.5.5/libguac/classes.html create mode 100644 doc/1.5.5/libguac/client-constants_8h.html create mode 100644 doc/1.5.5/libguac/client-constants_8h_source.html create mode 100644 doc/1.5.5/libguac/client-fntypes_8h.html create mode 100644 doc/1.5.5/libguac/client-fntypes_8h_source.html create mode 100644 doc/1.5.5/libguac/client-types_8h.html create mode 100644 doc/1.5.5/libguac/client-types_8h_source.html create mode 100644 doc/1.5.5/libguac/client_8h.html create mode 100644 doc/1.5.5/libguac/client_8h_source.html create mode 100644 doc/1.5.5/libguac/clipboard.js create mode 100644 doc/1.5.5/libguac/closed.png create mode 100644 doc/1.5.5/libguac/cookie.js create mode 100644 doc/1.5.5/libguac/deprecated.html create mode 100644 doc/1.5.5/libguac/dir_6bb9fad85c98b48a11165f494b9f53ce.html create mode 100644 doc/1.5.5/libguac/doc.svg create mode 100644 doc/1.5.5/libguac/docd.svg create mode 100644 doc/1.5.5/libguac/doxygen.css create mode 100644 doc/1.5.5/libguac/doxygen.svg create mode 100644 doc/1.5.5/libguac/doxygen_crawl.html create mode 100644 doc/1.5.5/libguac/dynsections.js create mode 100644 doc/1.5.5/libguac/error-types_8h.html create mode 100644 doc/1.5.5/libguac/error-types_8h_source.html create mode 100644 doc/1.5.5/libguac/error_8h.html create mode 100644 doc/1.5.5/libguac/error_8h_source.html create mode 100644 doc/1.5.5/libguac/files.html create mode 100644 doc/1.5.5/libguac/fips_8h_source.html create mode 100644 doc/1.5.5/libguac/folderclosed.svg create mode 100644 doc/1.5.5/libguac/folderclosedd.svg create mode 100644 doc/1.5.5/libguac/folderopen.svg create mode 100644 doc/1.5.5/libguac/folderopend.svg create mode 100644 doc/1.5.5/libguac/functions.html create mode 100644 doc/1.5.5/libguac/functions_vars.html create mode 100644 doc/1.5.5/libguac/globals.html create mode 100644 doc/1.5.5/libguac/globals_c.html create mode 100644 doc/1.5.5/libguac/globals_defs.html create mode 100644 doc/1.5.5/libguac/globals_e.html create mode 100644 doc/1.5.5/libguac/globals_enum.html create mode 100644 doc/1.5.5/libguac/globals_eval.html create mode 100644 doc/1.5.5/libguac/globals_func.html create mode 100644 doc/1.5.5/libguac/globals_g.html create mode 100644 doc/1.5.5/libguac/globals_h.html create mode 100644 doc/1.5.5/libguac/globals_l.html create mode 100644 doc/1.5.5/libguac/globals_m.html create mode 100644 doc/1.5.5/libguac/globals_p.html create mode 100644 doc/1.5.5/libguac/globals_r.html create mode 100644 doc/1.5.5/libguac/globals_s.html create mode 100644 doc/1.5.5/libguac/globals_t.html create mode 100644 doc/1.5.5/libguac/globals_type.html create mode 100644 doc/1.5.5/libguac/globals_u.html create mode 100644 doc/1.5.5/libguac/globals_vars.html create mode 100644 doc/1.5.5/libguac/globals_w.html create mode 100644 doc/1.5.5/libguac/hash_8h.html create mode 100644 doc/1.5.5/libguac/hash_8h_source.html create mode 100644 doc/1.5.5/libguac/index.html create mode 100644 doc/1.5.5/libguac/jquery.js create mode 100644 doc/1.5.5/libguac/layer-types_8h.html create mode 100644 doc/1.5.5/libguac/layer-types_8h_source.html create mode 100644 doc/1.5.5/libguac/layer_8h.html create mode 100644 doc/1.5.5/libguac/layer_8h_source.html create mode 100644 doc/1.5.5/libguac/mem_8h.html create mode 100644 doc/1.5.5/libguac/mem_8h_source.html create mode 100644 doc/1.5.5/libguac/menu.js create mode 100644 doc/1.5.5/libguac/menudata.js create mode 100644 doc/1.5.5/libguac/minus.svg create mode 100644 doc/1.5.5/libguac/minusd.svg create mode 100644 doc/1.5.5/libguac/nav_f.png create mode 100644 doc/1.5.5/libguac/nav_fd.png create mode 100644 doc/1.5.5/libguac/nav_g.png create mode 100644 doc/1.5.5/libguac/nav_h.png create mode 100644 doc/1.5.5/libguac/nav_hd.png create mode 100644 doc/1.5.5/libguac/object-types_8h.html create mode 100644 doc/1.5.5/libguac/object-types_8h_source.html create mode 100644 doc/1.5.5/libguac/object_8h.html create mode 100644 doc/1.5.5/libguac/object_8h_source.html create mode 100644 doc/1.5.5/libguac/open.png create mode 100644 doc/1.5.5/libguac/pages.html create mode 100644 doc/1.5.5/libguac/parser-constants_8h.html create mode 100644 doc/1.5.5/libguac/parser-constants_8h_source.html create mode 100644 doc/1.5.5/libguac/parser-types_8h.html create mode 100644 doc/1.5.5/libguac/parser-types_8h_source.html create mode 100644 doc/1.5.5/libguac/parser_8h.html create mode 100644 doc/1.5.5/libguac/parser_8h_source.html create mode 100644 doc/1.5.5/libguac/plugin-constants_8h.html create mode 100644 doc/1.5.5/libguac/plugin-constants_8h_source.html create mode 100644 doc/1.5.5/libguac/plugin_8h.html create mode 100644 doc/1.5.5/libguac/plugin_8h_source.html create mode 100644 doc/1.5.5/libguac/plus.svg create mode 100644 doc/1.5.5/libguac/plusd.svg create mode 100644 doc/1.5.5/libguac/pool-types_8h.html create mode 100644 doc/1.5.5/libguac/pool-types_8h_source.html create mode 100644 doc/1.5.5/libguac/pool_8h.html create mode 100644 doc/1.5.5/libguac/pool_8h_source.html create mode 100644 doc/1.5.5/libguac/protocol-constants_8h.html create mode 100644 doc/1.5.5/libguac/protocol-constants_8h_source.html create mode 100644 doc/1.5.5/libguac/protocol-types_8h.html create mode 100644 doc/1.5.5/libguac/protocol-types_8h_source.html create mode 100644 doc/1.5.5/libguac/protocol_8h.html create mode 100644 doc/1.5.5/libguac/protocol_8h_source.html create mode 100644 doc/1.5.5/libguac/recording_8h.html create mode 100644 doc/1.5.5/libguac/recording_8h_source.html create mode 100644 doc/1.5.5/libguac/rwlock_8h_source.html create mode 100644 doc/1.5.5/libguac/search/all_0.js create mode 100644 doc/1.5.5/libguac/search/all_1.js create mode 100644 doc/1.5.5/libguac/search/all_10.js create mode 100644 doc/1.5.5/libguac/search/all_11.js create mode 100644 doc/1.5.5/libguac/search/all_12.js create mode 100644 doc/1.5.5/libguac/search/all_13.js create mode 100644 doc/1.5.5/libguac/search/all_14.js create mode 100644 doc/1.5.5/libguac/search/all_15.js create mode 100644 doc/1.5.5/libguac/search/all_2.js create mode 100644 doc/1.5.5/libguac/search/all_3.js create mode 100644 doc/1.5.5/libguac/search/all_4.js create mode 100644 doc/1.5.5/libguac/search/all_5.js create mode 100644 doc/1.5.5/libguac/search/all_6.js create mode 100644 doc/1.5.5/libguac/search/all_7.js create mode 100644 doc/1.5.5/libguac/search/all_8.js create mode 100644 doc/1.5.5/libguac/search/all_9.js create mode 100644 doc/1.5.5/libguac/search/all_a.js create mode 100644 doc/1.5.5/libguac/search/all_b.js create mode 100644 doc/1.5.5/libguac/search/all_c.js create mode 100644 doc/1.5.5/libguac/search/all_d.js create mode 100644 doc/1.5.5/libguac/search/all_e.js create mode 100644 doc/1.5.5/libguac/search/all_f.js create mode 100644 doc/1.5.5/libguac/search/classes_0.js create mode 100644 doc/1.5.5/libguac/search/close.svg create mode 100644 doc/1.5.5/libguac/search/defines_0.js create mode 100644 doc/1.5.5/libguac/search/enums_0.js create mode 100644 doc/1.5.5/libguac/search/enumvalues_0.js create mode 100644 doc/1.5.5/libguac/search/files_0.js create mode 100644 doc/1.5.5/libguac/search/files_1.js create mode 100644 doc/1.5.5/libguac/search/files_2.js create mode 100644 doc/1.5.5/libguac/search/files_3.js create mode 100644 doc/1.5.5/libguac/search/files_4.js create mode 100644 doc/1.5.5/libguac/search/files_5.js create mode 100644 doc/1.5.5/libguac/search/files_6.js create mode 100644 doc/1.5.5/libguac/search/files_7.js create mode 100644 doc/1.5.5/libguac/search/files_8.js create mode 100644 doc/1.5.5/libguac/search/files_9.js create mode 100644 doc/1.5.5/libguac/search/files_a.js create mode 100644 doc/1.5.5/libguac/search/files_b.js create mode 100644 doc/1.5.5/libguac/search/files_c.js create mode 100644 doc/1.5.5/libguac/search/functions_0.js create mode 100644 doc/1.5.5/libguac/search/functions_1.js create mode 100644 doc/1.5.5/libguac/search/mag.svg create mode 100644 doc/1.5.5/libguac/search/mag_d.svg create mode 100644 doc/1.5.5/libguac/search/mag_sel.svg create mode 100644 doc/1.5.5/libguac/search/mag_seld.svg create mode 100644 doc/1.5.5/libguac/search/pages_0.js create mode 100644 doc/1.5.5/libguac/search/pages_1.js create mode 100644 doc/1.5.5/libguac/search/search.css create mode 100644 doc/1.5.5/libguac/search/search.js create mode 100644 doc/1.5.5/libguac/search/searchdata.js create mode 100644 doc/1.5.5/libguac/search/typedefs_0.js create mode 100644 doc/1.5.5/libguac/search/variables_0.js create mode 100644 doc/1.5.5/libguac/search/variables_1.js create mode 100644 doc/1.5.5/libguac/search/variables_10.js create mode 100644 doc/1.5.5/libguac/search/variables_11.js create mode 100644 doc/1.5.5/libguac/search/variables_12.js create mode 100644 doc/1.5.5/libguac/search/variables_13.js create mode 100644 doc/1.5.5/libguac/search/variables_14.js create mode 100644 doc/1.5.5/libguac/search/variables_2.js create mode 100644 doc/1.5.5/libguac/search/variables_3.js create mode 100644 doc/1.5.5/libguac/search/variables_4.js create mode 100644 doc/1.5.5/libguac/search/variables_5.js create mode 100644 doc/1.5.5/libguac/search/variables_6.js create mode 100644 doc/1.5.5/libguac/search/variables_7.js create mode 100644 doc/1.5.5/libguac/search/variables_8.js create mode 100644 doc/1.5.5/libguac/search/variables_9.js create mode 100644 doc/1.5.5/libguac/search/variables_a.js create mode 100644 doc/1.5.5/libguac/search/variables_b.js create mode 100644 doc/1.5.5/libguac/search/variables_c.js create mode 100644 doc/1.5.5/libguac/search/variables_d.js create mode 100644 doc/1.5.5/libguac/search/variables_e.js create mode 100644 doc/1.5.5/libguac/search/variables_f.js create mode 100644 doc/1.5.5/libguac/socket-constants_8h.html create mode 100644 doc/1.5.5/libguac/socket-constants_8h_source.html create mode 100644 doc/1.5.5/libguac/socket-fntypes_8h.html create mode 100644 doc/1.5.5/libguac/socket-fntypes_8h_source.html create mode 100644 doc/1.5.5/libguac/socket-ssl_8h.html create mode 100644 doc/1.5.5/libguac/socket-ssl_8h_source.html create mode 100644 doc/1.5.5/libguac/socket-types_8h.html create mode 100644 doc/1.5.5/libguac/socket-types_8h_source.html create mode 100644 doc/1.5.5/libguac/socket-wsa_8h.html create mode 100644 doc/1.5.5/libguac/socket-wsa_8h_source.html create mode 100644 doc/1.5.5/libguac/socket_8h.html create mode 100644 doc/1.5.5/libguac/socket_8h_source.html create mode 100644 doc/1.5.5/libguac/splitbar.png create mode 100644 doc/1.5.5/libguac/splitbard.png create mode 100644 doc/1.5.5/libguac/stream-types_8h.html create mode 100644 doc/1.5.5/libguac/stream-types_8h_source.html create mode 100644 doc/1.5.5/libguac/stream_8h.html create mode 100644 doc/1.5.5/libguac/stream_8h_source.html create mode 100644 doc/1.5.5/libguac/string_8h.html create mode 100644 doc/1.5.5/libguac/string_8h_source.html create mode 100644 doc/1.5.5/libguac/structguac__audio__encoder.html create mode 100644 doc/1.5.5/libguac/structguac__audio__stream.html create mode 100644 doc/1.5.5/libguac/structguac__client.html create mode 100644 doc/1.5.5/libguac/structguac__layer.html create mode 100644 doc/1.5.5/libguac/structguac__object.html create mode 100644 doc/1.5.5/libguac/structguac__parser.html create mode 100644 doc/1.5.5/libguac/structguac__pool.html create mode 100644 doc/1.5.5/libguac/structguac__pool__int.html create mode 100644 doc/1.5.5/libguac/structguac__recording.html create mode 100644 doc/1.5.5/libguac/structguac__rwlock.html create mode 100644 doc/1.5.5/libguac/structguac__socket.html create mode 100644 doc/1.5.5/libguac/structguac__socket__ssl__data.html create mode 100644 doc/1.5.5/libguac/structguac__stream.html create mode 100644 doc/1.5.5/libguac/structguac__user.html create mode 100644 doc/1.5.5/libguac/structguac__user__info.html create mode 100644 doc/1.5.5/libguac/sync_off.png create mode 100644 doc/1.5.5/libguac/sync_on.png create mode 100644 doc/1.5.5/libguac/tab_a.png create mode 100644 doc/1.5.5/libguac/tab_ad.png create mode 100644 doc/1.5.5/libguac/tab_b.png create mode 100644 doc/1.5.5/libguac/tab_bd.png create mode 100644 doc/1.5.5/libguac/tab_h.png create mode 100644 doc/1.5.5/libguac/tab_hd.png create mode 100644 doc/1.5.5/libguac/tab_s.png create mode 100644 doc/1.5.5/libguac/tab_sd.png create mode 100644 doc/1.5.5/libguac/tabs.css create mode 100644 doc/1.5.5/libguac/timestamp-types_8h.html create mode 100644 doc/1.5.5/libguac/timestamp-types_8h_source.html create mode 100644 doc/1.5.5/libguac/timestamp_8h.html create mode 100644 doc/1.5.5/libguac/timestamp_8h_source.html create mode 100644 doc/1.5.5/libguac/unicode_8h.html create mode 100644 doc/1.5.5/libguac/unicode_8h_source.html create mode 100644 doc/1.5.5/libguac/user-constants_8h.html create mode 100644 doc/1.5.5/libguac/user-constants_8h_source.html create mode 100644 doc/1.5.5/libguac/user-fntypes_8h.html create mode 100644 doc/1.5.5/libguac/user-fntypes_8h_source.html create mode 100644 doc/1.5.5/libguac/user-types_8h.html create mode 100644 doc/1.5.5/libguac/user-types_8h_source.html create mode 100644 doc/1.5.5/libguac/user_8h.html create mode 100644 doc/1.5.5/libguac/user_8h_source.html create mode 100644 doc/1.5.5/libguac/wol-constants_8h.html create mode 100644 doc/1.5.5/libguac/wol-constants_8h_source.html create mode 100644 doc/1.5.5/libguac/wol_8h.html create mode 100644 doc/1.5.5/libguac/wol_8h_source.html diff --git a/doc/1.5.5/guacamole-common-js/Guacamole.ArrayBufferReader.html b/doc/1.5.5/guacamole-common-js/Guacamole.ArrayBufferReader.html new file mode 100644 index 000000000..1317e0377 --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/Guacamole.ArrayBufferReader.html @@ -0,0 +1,451 @@ + + + + + JSDoc: Class: ArrayBufferReader + + + + + + + + + + +
+ +

Class: ArrayBufferReader

+ + + + + + +
+ +
+ +

+ Guacamole.ArrayBufferReader(streamnon-null)

+ + +
+ +
+
+ + + + + + +

new ArrayBufferReader(streamnon-null)

+ + + + + + +
+ A reader which automatically handles the given input stream, returning +strictly received packets as array buffers. Note that this object will +overwrite any installed event handlers on the given Guacamole.InputStream. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
stream + + +Guacamole.InputStream + + + + The stream that data will be read from.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + +

Events

+ + + + + + + +

ondata

+ + + + + + +
+ Fired once for every blob of data received. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
buffer + + +ArrayBuffer + + + + The data packet received.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

onend

+ + + + + + +
+ Fired once this stream is finished and no further data will be written. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/doc/1.5.5/guacamole-common-js/Guacamole.ArrayBufferWriter.html b/doc/1.5.5/guacamole-common-js/Guacamole.ArrayBufferWriter.html new file mode 100644 index 000000000..d36e75330 --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/Guacamole.ArrayBufferWriter.html @@ -0,0 +1,755 @@ + + + + + JSDoc: Class: ArrayBufferWriter + + + + + + + + + + +
+ +

Class: ArrayBufferWriter

+ + + + + + +
+ +
+ +

+ Guacamole.ArrayBufferWriter(streamnon-null)

+ + +
+ +
+
+ + + + + + +

new ArrayBufferWriter(streamnon-null)

+ + + + + + +
+ A writer which automatically writes to the given output stream with arbitrary +binary data, supplied as ArrayBuffers. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
stream + + +Guacamole.OutputStream + + + + The stream that data will be written to.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + +

Members

+ + + +

(non-null) blobLength :number

+ + + + +
+ The maximum length of any blob sent by this Guacamole.ArrayBufferWriter, +in bytes. Data sent via +sendData() which exceeds +this length will be split into multiple blobs. As the Guacamole protocol +limits the maximum size of any instruction or instruction element to +8192 bytes, and the contents of blobs will be base64-encoded, this value +should only be increased with extreme caution. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
Default Value:
+
+ + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(static, constant, non-null) DEFAULT_BLOB_LENGTH :number

+ + + + +
+ The default maximum blob length for new Guacamole.ArrayBufferWriter +instances. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + +

Methods

+ + + + + + + +

sendData(datanon-null)

+ + + + + + +
+ Sends the given data. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
data + + +ArrayBuffer +| + +TypedArray + + + + The data to send.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

sendEnd()

+ + + + + + +
+ Signals that no further text will be sent, effectively closing the +stream. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

Events

+ + + + + + + +

onack

+ + + + + + +
+ Fired for received data, if acknowledged by the server. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
status + + +Guacamole.Status + + + + The status of the operation.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/doc/1.5.5/guacamole-common-js/Guacamole.AudioContextFactory.html b/doc/1.5.5/guacamole-common-js/Guacamole.AudioContextFactory.html new file mode 100644 index 000000000..b0db3b062 --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/Guacamole.AudioContextFactory.html @@ -0,0 +1,333 @@ + + + + + JSDoc: Namespace: AudioContextFactory + + + + + + + + + + +
+ +

Namespace: AudioContextFactory

+ + + + + + +
+ +
+ +

+ Guacamole.AudioContextFactory

+ + +
+ +
+
+ + +
Maintains a singleton instance of the Web Audio API AudioContext class, +instantiating the AudioContext only in response to the first call to +getAudioContext(), and only if no existing AudioContext instance has been +provided via the singleton property. Subsequent calls to getAudioContext() +will return the same instance.
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + +
+ + + + + + + + + + + + + + +

Members

+ + + +

(static) singleton :AudioContext

+ + + + +
+ A singleton instance of a Web Audio API AudioContext object, or null if +no instance has yes been created. This property may be manually set if +you wish to supply your own AudioContext instance, but care must be +taken to do so as early as possible. Assignments to this property will +not retroactively affect the value returned by previous calls to +getAudioContext(). +
+ + + +
Type:
+
    +
  • + +AudioContext + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + +

Methods

+ + + + + + + +

(static) getAudioContext() → {AudioContext}

+ + + + + + +
+ Returns a singleton instance of a Web Audio API AudioContext object. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ A singleton instance of a Web Audio API AudioContext object, or null + if the Web Audio API is not supported. +
+ + + +
+
+ Type +
+
+ +AudioContext + + +
+
+ + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/doc/1.5.5/guacamole-common-js/Guacamole.AudioPlayer.html b/doc/1.5.5/guacamole-common-js/Guacamole.AudioPlayer.html new file mode 100644 index 000000000..36ae600b3 --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/Guacamole.AudioPlayer.html @@ -0,0 +1,734 @@ + + + + + JSDoc: Class: AudioPlayer + + + + + + + + + + +
+ +

Class: AudioPlayer

+ + + + + + +
+ +
+ +

+ Guacamole.AudioPlayer()

+ + +
+ +
+
+ + + + + + +

new AudioPlayer()

+ + + + + + +
+ Abstract audio player which accepts, queues and plays back arbitrary audio +data. It is up to implementations of this class to provide some means of +handling a provided Guacamole.InputStream. Data received along the provided +stream is to be played back immediately. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + +

Methods

+ + + + + + + +

sync()

+ + + + + + +
+ Notifies this Guacamole.AudioPlayer that all audio up to the current +point in time has been given via the underlying stream, and that any +difference in time between queued audio data and the current time can be +considered latency. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

(static) getInstance(streamnon-null, mimetypenon-null) → {Guacamole.AudioPlayer}

+ + + + + + +
+ Returns an instance of Guacamole.AudioPlayer providing support for the given +audio format. If support for the given audio format is not available, null +is returned. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
stream + + +Guacamole.InputStream + + + + The Guacamole.InputStream to read audio data from.
mimetype + + +string + + + + The mimetype of the audio data in the provided stream.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ A Guacamole.AudioPlayer instance supporting the given mimetype and + reading from the given stream, or null if support for the given mimetype + is absent. +
+ + + +
+
+ Type +
+
+ +Guacamole.AudioPlayer + + +
+
+ + + + + + + + + + + + + +

(static) getSupportedTypes() → (non-null) {Array.<string>}

+ + + + + + +
+ Returns a list of all mimetypes supported by any built-in +Guacamole.AudioPlayer, in rough order of priority. Beware that only the core +mimetypes themselves will be listed. Any mimetype parameters, even required +ones, will not be included in the list. For example, "audio/L8" is a +supported raw audio mimetype that is supported, but it is invalid without +additional parameters. Something like "audio/L8;rate=44100" would be valid, +however (see https://tools.ietf.org/html/rfc4856). +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ A list of all mimetypes supported by any built-in Guacamole.AudioPlayer, + excluding any parameters. +
+ + + +
+
+ Type +
+
+ +Array.<string> + + +
+
+ + + + + + + + + + + + + +

(static) isSupportedType(mimetypenon-null) → (non-null) {boolean}

+ + + + + + +
+ Determines whether the given mimetype is supported by any built-in +implementation of Guacamole.AudioPlayer, and thus will be properly handled +by Guacamole.AudioPlayer.getInstance(). +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
mimetype + + +string + + + + The mimetype to check.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ true if the given mimetype is supported by any built-in + Guacamole.AudioPlayer, false otherwise. +
+ + + +
+
+ Type +
+
+ +boolean + + +
+
+ + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/doc/1.5.5/guacamole-common-js/Guacamole.AudioRecorder.html b/doc/1.5.5/guacamole-common-js/Guacamole.AudioRecorder.html new file mode 100644 index 000000000..3f831441a --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/Guacamole.AudioRecorder.html @@ -0,0 +1,830 @@ + + + + + JSDoc: Class: AudioRecorder + + + + + + + + + + +
+ +

Class: AudioRecorder

+ + + + + + +
+ +
+ +

+ Guacamole.AudioRecorder()

+ + +
+ +
+
+ + + + + + +

new AudioRecorder()

+ + + + + + +
+ Abstract audio recorder which streams arbitrary audio data to an underlying +Guacamole.OutputStream. It is up to implementations of this class to provide +some means of handling this Guacamole.OutputStream. Data produced by the +recorder is to be sent along the provided stream immediately. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + +

Methods

+ + + + + + + +

(static) getInstance(streamnon-null, mimetypenon-null) → {Guacamole.AudioRecorder}

+ + + + + + +
+ Returns an instance of Guacamole.AudioRecorder providing support for the +given audio format. If support for the given audio format is not available, +null is returned. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
stream + + +Guacamole.OutputStream + + + + The Guacamole.OutputStream to send audio data through.
mimetype + + +string + + + + The mimetype of the audio data to be sent along the provided stream.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ A Guacamole.AudioRecorder instance supporting the given mimetype and + writing to the given stream, or null if support for the given mimetype + is absent. +
+ + + +
+
+ Type +
+
+ +Guacamole.AudioRecorder + + +
+
+ + + + + + + + + + + + + +

(static) getSupportedTypes() → (non-null) {Array.<string>}

+ + + + + + +
+ Returns a list of all mimetypes supported by any built-in +Guacamole.AudioRecorder, in rough order of priority. Beware that only the +core mimetypes themselves will be listed. Any mimetype parameters, even +required ones, will not be included in the list. For example, "audio/L8" is +a supported raw audio mimetype that is supported, but it is invalid without +additional parameters. Something like "audio/L8;rate=44100" would be valid, +however (see https://tools.ietf.org/html/rfc4856). +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ A list of all mimetypes supported by any built-in + Guacamole.AudioRecorder, excluding any parameters. +
+ + + +
+
+ Type +
+
+ +Array.<string> + + +
+
+ + + + + + + + + + + + + +

(static) isSupportedType(mimetypenon-null) → (non-null) {boolean}

+ + + + + + +
+ Determines whether the given mimetype is supported by any built-in +implementation of Guacamole.AudioRecorder, and thus will be properly handled +by Guacamole.AudioRecorder.getInstance(). +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
mimetype + + +string + + + + The mimetype to check.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ true if the given mimetype is supported by any built-in + Guacamole.AudioRecorder, false otherwise. +
+ + + +
+
+ Type +
+
+ +boolean + + +
+
+ + + + + + + + + + + + + +

Events

+ + + + + + + +

onclose

+ + + + + + +
+ Callback which is invoked when the audio recording process has stopped +and the underlying Guacamole stream has been closed normally. Audio will +only resume recording if a new Guacamole.AudioRecorder is started. This +Guacamole.AudioRecorder instance MAY NOT be reused. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

onerror

+ + + + + + +
+ Callback which is invoked when the audio recording process cannot +continue due to an error, if it has started at all. The underlying +Guacamole stream is automatically closed. Future attempts to record +audio should not be made, and this Guacamole.AudioRecorder instance +MAY NOT be reused. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/doc/1.5.5/guacamole-common-js/Guacamole.BlobReader.html b/doc/1.5.5/guacamole-common-js/Guacamole.BlobReader.html new file mode 100644 index 000000000..9c7d7b4ed --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/Guacamole.BlobReader.html @@ -0,0 +1,699 @@ + + + + + JSDoc: Class: BlobReader + + + + + + + + + + +
+ +

Class: BlobReader

+ + + + + + +
+ +
+ +

+ Guacamole.BlobReader(streamnon-null, mimetypenon-null)

+ + +
+ +
+
+ + + + + + +

new BlobReader(streamnon-null, mimetypenon-null)

+ + + + + + +
+ A reader which automatically handles the given input stream, assembling all +received blobs into a single blob by appending them to each other in order. +Note that this object will overwrite any installed event handlers on the +given Guacamole.InputStream. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
stream + + +Guacamole.InputStream + + + + The stream that data will be read from.
mimetype + + +string + + + + The mimetype of the blob being built.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + +

Methods

+ + + + + + + +

getBlob() → (non-null) {Blob}

+ + + + + + +
+ Returns the contents of this Guacamole.BlobReader as a Blob. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ The contents of this Guacamole.BlobReader. +
+ + + +
+
+ Type +
+
+ +Blob + + +
+
+ + + + + + + + + + + + + +

getLength() → (non-null) {number}

+ + + + + + +
+ Returns the current length of this Guacamole.InputStream, in bytes. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ The current length of this Guacamole.InputStream. +
+ + + +
+
+ Type +
+
+ +number + + +
+
+ + + + + + + + + + + + + +

Events

+ + + + + + + +

onend

+ + + + + + +
+ Fired once this stream is finished and no further data will be written. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

onprogress

+ + + + + + +
+ Fired once for every blob of data received. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
length + + +number + + + + The number of bytes received.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/doc/1.5.5/guacamole-common-js/Guacamole.BlobWriter.html b/doc/1.5.5/guacamole-common-js/Guacamole.BlobWriter.html new file mode 100644 index 000000000..d38015c32 --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/Guacamole.BlobWriter.html @@ -0,0 +1,1077 @@ + + + + + JSDoc: Class: BlobWriter + + + + + + + + + + +
+ +

Class: BlobWriter

+ + + + + + +
+ +
+ +

+ Guacamole.BlobWriter(streamnon-null)

+ + +
+ +
+
+ + + + + + +

new BlobWriter(streamnon-null)

+ + + + + + +
+ A writer which automatically writes to the given output stream with the +contents of provided Blob objects. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
stream + + +Guacamole.OutputStream + + + + The stream that data will be written to.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + +

Methods

+ + + + + + + +

sendBlob(blobnon-null)

+ + + + + + +
+ Sends the contents of the given blob over the underlying stream. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
blob + + +Blob + + + + The blob to send.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

sendEnd()

+ + + + + + +
+ Signals that no further text will be sent, effectively closing the +stream. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

Events

+ + + + + + + +

onack

+ + + + + + +
+ Fired for received data, if acknowledged by the server. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
status + + +Guacamole.Status + + + + The status of the operation.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

oncomplete

+ + + + + + +
+ Fired when a blob passed to +sendBlob() has finished being +sent. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
blob + + +Blob + + + + The blob that was sent.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

onerror

+ + + + + + +
+ Fired when an error occurs reading a blob passed to +sendBlob(). The transfer for the +the given blob will cease, but the stream will remain open. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
blob + + +Blob + + + + The blob that was being read when the error occurred.
offset + + +number + + + + The offset of the failed read attempt within the blob, in bytes.
error + + +DOMError + + + + The error that occurred.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

onprogress

+ + + + + + +
+ Fired for each successfully-read chunk of data as a blob is being sent +via sendBlob(). +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
blob + + +Blob + + + + The blob that is being read.
offset + + +number + + + + The offset of the read that just succeeded.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/doc/1.5.5/guacamole-common-js/Guacamole.ChainedTunnel.html b/doc/1.5.5/guacamole-common-js/Guacamole.ChainedTunnel.html new file mode 100644 index 000000000..d3607f0a6 --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/Guacamole.ChainedTunnel.html @@ -0,0 +1,1685 @@ + + + + + JSDoc: Class: ChainedTunnel + + + + + + + + + + +
+ +

Class: ChainedTunnel

+ + + + + + +
+ +
+ +

+ Guacamole.ChainedTunnel(…tunnelChain)

+ + +
+ +
+
+ + + + + + +

new ChainedTunnel(…tunnelChain)

+ + + + + + +
+ Guacamole Tunnel which cycles between all specified tunnels until +no tunnels are left. Another tunnel is used if an error occurs but +no instructions have been received. If an instruction has been +received, or no tunnels remain, the error is passed directly out +through the onerror handler (if defined). +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeAttributesDescription
tunnelChain + + +Guacamole.Tunnel + + + + + + + + + + <repeatable>
+ +
The tunnels to use, in order of priority.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + +

Extends

+ + + + + + + + + + + + + + + + + + + + +

Members

+ + + +

(non-null) receiveTimeout :number

+ + + + +
+ The maximum amount of time to wait for data to be received, in +milliseconds. If data is not received within this amount of time, +the tunnel is closed with an error. The default value is 15000. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) state :number

+ + + + +
+ The current state of this tunnel. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) unstableThreshold :number

+ + + + +
+ The amount of time to wait for data to be received before considering +the connection to be unstable, in milliseconds. If data is not received +within this amount of time, the tunnel status is updated to warn that +the connection appears unresponsive and may close. The default value is +1500. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

uuid :string

+ + + + +
+ The UUID uniquely identifying this tunnel. If not yet known, this will +be null. +
+ + + +
Type:
+
    +
  • + +string + + +
  • +
+ + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + +

Methods

+ + + + + + + +

connect(dataopt)

+ + + + + + +
+ Connect to the tunnel with the given optional data. This data is +typically used for authentication. The format of data accepted is +up to the tunnel implementation. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeAttributesDescription
data + + +string + + + + + + <optional>
+ + + + + +
The data to send to the tunnel when connecting.
+ + + + + + +
+ + + + + + + + +
Overrides:
+
+ + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

disconnect()

+ + + + + + +
+ Disconnect from the tunnel. +
+ + + + + + + + + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

isConnected() → (non-null) {boolean}

+ + + + + + +
+ Returns whether this tunnel is currently connected. +
+ + + + + + + + + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ true if this tunnel is currently connected, false otherwise. +
+ + + +
+
+ Type +
+
+ +boolean + + +
+
+ + + + + + + + + + + + + +

sendMessage(…elements)

+ + + + + + +
+ Send the given message through the tunnel to the service on the other +side. All messages are guaranteed to be received in the order sent. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeAttributesDescription
elements + + +* + + + + + + + + + + <repeatable>
+ +
The elements of the message to send to the service on the other side + of the tunnel.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

Events

+ + + + + + + +

onerror

+ + + + + + +
+ Fired whenever an error is encountered by the tunnel. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
status + + +Guacamole.Status + + + + A status object which describes the error.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

oninstruction

+ + + + + + +
+ Fired once for every complete Guacamole instruction received, in order. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
opcode + + +string + + + + The Guacamole instruction opcode.
parameters + + +Array.<string> + + + + The parameters provided for the instruction, if any.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

onstatechange

+ + + + + + +
+ Fired whenever the state of the tunnel changes. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
state + + +number + + + + The new state of the client.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

onuuid

+ + + + + + +
+ Fired when the UUID that uniquely identifies this tunnel is known. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
The + + +string + + + + UUID uniquely identifying this tunnel.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/doc/1.5.5/guacamole-common-js/Guacamole.Client.html b/doc/1.5.5/guacamole-common-js/Guacamole.Client.html new file mode 100644 index 000000000..eb1c189b6 --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/Guacamole.Client.html @@ -0,0 +1,6395 @@ + + + + + JSDoc: Class: Client + + + + + + + + + + +
+ +

Class: Client

+ + + + + + +
+ +
+ +

+ Guacamole.Client(tunnelnon-null)

+ + +
+ +
+
+ + + + + + +

new Client(tunnelnon-null)

+ + + + + + +
+ Guacamole protocol client. Given a Guacamole.Tunnel, +automatically handles incoming and outgoing Guacamole instructions via the +provided tunnel, updating its display using one or more canvas elements. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
tunnel + + +Guacamole.Tunnel + + + + The tunnel to use to send and receive Guacamole instructions.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + +

Members

+ + + +

(static, non-null) Message :Object.<string, number>

+ + + + +
+ A list of possible messages that can be sent by the server for processing +by the client. +
+ + + +
Type:
+
    +
  • + +Object.<string, number> + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + +

Methods

+ + + + + + + +

connect(data)

+ + + + + + +
+ Connects the underlying tunnel of this Guacamole.Client, passing the +given arbitrary data to the tunnel during the connection process. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
data + + +string + + + + Arbitrary connection data to be sent to the underlying tunnel during + the connection process.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + +
Throws:
+ + + +
+
+
+ If an error occurs during connection. +
+
+
+
+
+
+ Type +
+
+ +Guacamole.Status + + +
+
+
+
+
+ + + + + + + + + + + + + + + + +

createArgumentValueStream(mimetypenon-null, namenon-null) → (non-null) {Guacamole.OutputStream}

+ + + + + + +
+ Opens a new argument value stream for writing, having the given +parameter name and mimetype, requesting that the connection parameter +with the given name be updated to the value described by the contents +of the following stream. The instruction necessary to create this stream +will automatically be sent. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
mimetype + + +string + + + + The mimetype of the data being sent.
name + + +string + + + + The name of the connection parameter to attempt to update.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ The created argument value stream. +
+ + + +
+
+ Type +
+
+ +Guacamole.OutputStream + + +
+
+ + + + + + + + + + + + + +

createAudioStream(mimetypenon-null) → (non-null) {Guacamole.OutputStream}

+ + + + + + +
+ Opens a new audio stream for writing, where audio data having the give +mimetype will be sent along the returned stream. The instruction +necessary to create this stream will automatically be sent. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
mimetype + + +string + + + + The mimetype of the audio data that will be sent along the returned + stream.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ The created audio stream. +
+ + + +
+
+ Type +
+
+ +Guacamole.OutputStream + + +
+
+ + + + + + + + + + + + + +

createClipboardStream(mimetypenon-null, namenon-null) → (non-null) {Guacamole.OutputStream}

+ + + + + + +
+ Opens a new clipboard object for writing, having the given mimetype. The +instruction necessary to create this stream will automatically be sent. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
mimetype + + +string + + + + The mimetype of the data being sent.
name + + +string + + + + The name of the pipe.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ The created file stream. +
+ + + +
+
+ Type +
+
+ +Guacamole.OutputStream + + +
+
+ + + + + + + + + + + + + +

createFileStream(mimetypenon-null, filenamenon-null) → (non-null) {Guacamole.OutputStream}

+ + + + + + +
+ Opens a new file for writing, having the given index, mimetype and +filename. The instruction necessary to create this stream will +automatically be sent. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
mimetype + + +string + + + + The mimetype of the file being sent.
filename + + +string + + + + The filename of the file being sent.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ The created file stream. +
+ + + +
+
+ Type +
+
+ +Guacamole.OutputStream + + +
+
+ + + + + + + + + + + + + +

createObjectOutputStream(indexnon-null, mimetypenon-null, namenon-null) → (non-null) {Guacamole.OutputStream}

+ + + + + + +
+ Creates a new output stream associated with the given object and having +the given mimetype and name. The legality of a mimetype and name is +dictated by the object itself. The instruction necessary to create this +stream will automatically be sent. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
index + + +number + + + + The index of the object for which the output stream is being + created.
mimetype + + +string + + + + The mimetype of the data which will be sent to the output stream.
name + + +string + + + + The defined name of an output stream within the given object.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ An output stream which will write blobs to the named output stream + of the given object. +
+ + + +
+
+ Type +
+
+ +Guacamole.OutputStream + + +
+
+ + + + + + + + + + + + + +

createOutputStream() → (non-null) {Guacamole.OutputStream}

+ + + + + + +
+ Allocates an available stream index and creates a new +Guacamole.OutputStream using that index, associating the resulting +stream with this Guacamole.Client. Note that this stream will not yet +exist as far as the other end of the Guacamole connection is concerned. +Streams exist within the Guacamole protocol only when referenced by an +instruction which creates the stream, such as a "clipboard", "file", or +"pipe" instruction. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ A new Guacamole.OutputStream with a newly-allocated index and + associated with this Guacamole.Client. +
+ + + +
+
+ Type +
+
+ +Guacamole.OutputStream + + +
+
+ + + + + + + + + + + + + +

createPipeStream(mimetypenon-null, namenon-null) → (non-null) {Guacamole.OutputStream}

+ + + + + + +
+ Opens a new pipe for writing, having the given name and mimetype. The +instruction necessary to create this stream will automatically be sent. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
mimetype + + +string + + + + The mimetype of the data being sent.
name + + +string + + + + The name of the pipe.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ The created file stream. +
+ + + +
+
+ Type +
+
+ +Guacamole.OutputStream + + +
+
+ + + + + + + + + + + + + +

disconnect()

+ + + + + + +
+ Sends a disconnect instruction to the server and closes the tunnel. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

endStream(indexnon-null)

+ + + + + + +
+ Marks a currently-open stream as complete. The other end of the +Guacamole connection will be notified via an "end" instruction that the +stream is closed, and the index will be made available for reuse in +future streams. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
index + + +number + + + + The index of the stream to end.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

exportState(callbacknon-null)

+ + + + + + +
+ Produces an opaque representation of Guacamole.Client state which can be +later imported through a call to importState(). This object is +effectively an independent, compressed snapshot of protocol and display +state. Invoking this function implicitly flushes the display. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
callback + + +function + + + + Callback which should be invoked once the state object is ready. The + state object will be passed to the callback as the sole parameter. + This callback may be invoked immediately, or later as the display + finishes rendering and becomes ready.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

getDisplay() → (non-null) {Guacamole.Display}

+ + + + + + +
+ Returns the underlying display of this Guacamole.Client. The display +contains an Element which can be added to the DOM, causing the +display to become visible. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ The underlying display of this Guacamole.Client. +
+ + + +
+
+ Type +
+
+ +Guacamole.Display + + +
+
+ + + + + + + + + + + + + +

importState(statenon-null, callbackopt)

+ + + + + + +
+ Restores Guacamole.Client protocol and display state based on an opaque +object from a prior call to exportState(). The Guacamole.Client instance +used to export that state need not be the same as this instance. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeAttributesDescription
state + + +object + + + + + + + + + + An opaque representation of Guacamole.Client state from a prior call + to exportState().
callback + + +function + + + + + + <optional>
+ + + + + +
The function to invoke when state has finished being imported. This + may happen immediately, or later as images within the provided state + object are loaded.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

requestObjectInputStream(indexnon-null, namenon-null)

+ + + + + + +
+ Requests read access to the input stream having the given name. If +successful, a new input stream will be created. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
index + + +number + + + + The index of the object from which the input stream is being + requested.
name + + +string + + + + The name of the input stream to request.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

sendAck(indexnon-null, messagenon-null, codenon-null)

+ + + + + + +
+ Acknowledge receipt of a blob on the stream with the given index. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
index + + +number + + + + The index of the stream associated with the received blob.
message + + +string + + + + A human-readable message describing the error or status.
code + + +number + + + + The error code, if any, or 0 for success.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

sendBlob(indexnon-null, datanon-null)

+ + + + + + +
+ Given the index of a file, writes a blob of data to that file. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
index + + +number + + + + The index of the file to write to.
data + + +string + + + + Base64-encoded data to write to the file.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

sendKeyEvent(pressednon-null, keysymnon-null)

+ + + + + + +
+ Sends a key event having the given properties as if the user +pressed or released a key. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
pressed + + +boolean + + + + Whether the key is pressed (true) or released (false).
keysym + + +number + + + + The keysym of the key being pressed or released.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

sendMouseState(mouseStatenon-null, applyDisplayScaleopt)

+ + + + + + +
+ Sends a mouse event having the properties provided by the given mouse +state. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
mouseState + + +Guacamole.Mouse.State + + + + + + + + + + + + The state of the mouse to send in the mouse event.
applyDisplayScale + + +boolean + + + + + + <optional>
+ + + + + +
+ + false + + Whether the provided mouse state uses local display units, rather + than remote display units, and should be scaled to match the + Guacamole.Display.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

sendSize(widthnon-null, heightnon-null)

+ + + + + + +
+ Sends the current size of the screen. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
width + + +number + + + + The width of the screen.
height + + +number + + + + The height of the screen.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

sendTouchState(touchStatenon-null, applyDisplayScaleopt)

+ + + + + + +
+ Sends a touch event having the properties provided by the given touch +state. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
touchState + + +Guacamole.Touch.State + + + + + + + + + + + + The state of the touch contact to send in the touch event.
applyDisplayScale + + +boolean + + + + + + <optional>
+ + + + + +
+ + false + + Whether the provided touch state uses local display units, rather + than remote display units, and should be scaled to match the + Guacamole.Display.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

(inner) getLayerIndex(layernon-null) → {number}

+ + + + + + +
+ Returns the index passed to getLayer() when the given layer was created. +Positive indices refer to visible layers, an index of zero refers to the +default layer, and negative indices refer to buffers. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
layer + + +Guacamole.Display.VisibleLayer +| + +Guacamole.Layer + + + + The layer whose index should be determined.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ The index of the given layer, or null if no such layer is associated + with this client. +
+ + + +
+
+ Type +
+
+ +number + + +
+
+ + + + + + + + + + + + + +

Events

+ + + + + + + +

onargv

+ + + + + + +
+ Fired when the current value of a connection parameter is being exposed +by the server. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
stream + + +Guacamole.InputStream + + + + The stream that will receive connection parameter data from the + server.
mimetype + + +string + + + + The mimetype of the data which will be received.
name + + +string + + + + The name of the connection parameter whose value is being exposed.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

onaudio

+ + + + + + +
+ Fired when a audio stream is created. The stream provided to this event +handler will contain its own event handlers for received data. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
stream + + +Guacamole.InputStream + + + + The stream that will receive audio data from the server.
mimetype + + +string + + + + The mimetype of the audio data which will be received.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ An object which implements the Guacamole.AudioPlayer interface and + has been initialized to play the data in the provided stream, or null + if the built-in audio players of the Guacamole client should be + used. +
+ + + +
+
+ Type +
+
+ +Guacamole.AudioPlayer + + +
+
+ + + + + + + + + + + + + +

onclipboard

+ + + + + + +
+ Fired when the clipboard of the remote client is changing. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
stream + + +Guacamole.InputStream + + + + The stream that will receive clipboard data from the server.
mimetype + + +string + + + + The mimetype of the data which will be received.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

onerror

+ + + + + + +
+ Fired when an error is reported by the remote client, and the connection +is being closed. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
status + + +Guacamole.Status + + + + A status object which describes the error.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

onfile

+ + + + + + +
+ Fired when a file stream is created. The stream provided to this event +handler will contain its own event handlers for received data. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
stream + + +Guacamole.InputStream + + + + The stream that will receive data from the server.
mimetype + + +string + + + + The mimetype of the file received.
filename + + +string + + + + The name of the file received.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

onfilesystem

+ + + + + + +
+ Fired when a filesystem object is created. The object provided to this +event handler will contain its own event handlers and functions for +requesting and handling data. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
object + + +Guacamole.Object + + + + The created filesystem object.
name + + +string + + + + The name of the filesystem.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

onjoin

+ + + + + + +
+ Fired when a user joins a shared connection. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
userID + + +string + + + + A unique value representing this specific user's connection to the + shared connection. This value is generated by the server and is + guaranteed to be unique relative to other users of the connection.
name + + +string + + + + A human-readable name representing the user that joined, such as + their username. This value is provided by the web application during + the connection handshake and is not necessarily unique relative to + other users of the connection.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

onleave

+ + + + + + +
+ Fired when a user leaves a shared connection. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
userID + + +string + + + + A unique value representing this specific user's connection to the + shared connection. This value is generated by the server and is + guaranteed to be unique relative to other users of the connection.
name + + +string + + + + A human-readable name representing the user that left, such as their + username. This value is provided by the web application during the + connection handshake and is not necessarily unique relative to other + users of the connection.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

onmsg

+ + + + + + +
+ Fired when an arbitrary message is received from the tunnel that should +be processed by the client. By default, additional message-specific +events such as "onjoin" and "onleave" will fire for the received message +after this event has been processed. An event handler for "onmsg" need +not be supplied if "onjoin" and/or "onleave" will be used. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
msgcode + + +number + + + + A status code sent by the remote server that indicates the nature of + the message that is being sent to the client.
args + + +Array.<string> + + + + An array of arguments to be processed with the message sent to the + client.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ true if message-specific events such as "onjoin" and + "onleave" should be fired for this message, false otherwise. If + no value is returned, message-specific events will be allowed to + fire. +
+ + + +
+
+ Type +
+
+ +boolean + + +
+
+ + + + + + + + + + + + + +

onmultitouch

+ + + + + + +
+ Fired when the remote client is explicitly declaring the level of +multi-touch support provided by a particular display layer. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
layer + + +Guacamole.Display.VisibleLayer + + + + The layer whose multi-touch support level is being declared.
touches + + +number + + + + The maximum number of simultaneous touches supported by the given + layer, where 0 indicates that touch events are not supported at all.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

onname

+ + + + + + +
+ Fired when the remote client sends a name update. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
name + + +string + + + + The new name of this client.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

onpipe

+ + + + + + +
+ Fired when a pipe stream is created. The stream provided to this event +handler will contain its own event handlers for received data; +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
stream + + +Guacamole.InputStream + + + + The stream that will receive data from the server.
mimetype + + +string + + + + The mimetype of the data which will be received.
name + + +string + + + + The name of the pipe.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

onrequired

+ + + + + + +
+ Fired when a "required" instruction is received. A required instruction +indicates that additional parameters are required for the connection to +continue, such as user credentials. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
parameters + + +Array.<string> + + + + The names of the connection parameters that are required to be + provided for the connection to continue.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

onstatechange

+ + + + + + +
+ Fired whenever the state of this Guacamole.Client changes. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
state + + +number + + + + The new state of the client.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

onsync

+ + + + + + +
+ Fired whenever a sync instruction is received from the server, indicating +that the server is finished processing any input from the client and +has sent any results. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
timestamp + + +number + + + + The timestamp associated with the sync instruction.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

onvideo

+ + + + + + +
+ Fired when a video stream is created. The stream provided to this event +handler will contain its own event handlers for received data. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
stream + + +Guacamole.InputStream + + + + The stream that will receive video data from the server.
layer + + +Guacamole.Display.VisibleLayer + + + + The destination layer on which the received video data should be + played. It is the responsibility of the Guacamole.VideoPlayer + implementation to play the received data within this layer.
mimetype + + +string + + + + The mimetype of the video data which will be received.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ An object which implements the Guacamole.VideoPlayer interface and + has been initialized to play the data in the provided stream, or null + if the built-in video players of the Guacamole client should be + used. +
+ + + +
+
+ Type +
+
+ +Guacamole.VideoPlayer + + +
+
+ + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/doc/1.5.5/guacamole-common-js/Guacamole.DataURIReader.html b/doc/1.5.5/guacamole-common-js/Guacamole.DataURIReader.html new file mode 100644 index 000000000..dccb3e39d --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/Guacamole.DataURIReader.html @@ -0,0 +1,454 @@ + + + + + JSDoc: Class: DataURIReader + + + + + + + + + + +
+ +

Class: DataURIReader

+ + + + + + +
+ +
+ +

+ Guacamole.DataURIReader(streamnon-null, mimetypenon-null)

+ + +
+ +
+
+ + + + + + +

new DataURIReader(streamnon-null, mimetypenon-null)

+ + + + + + +
+ A reader which automatically handles the given input stream, returning +received blobs as a single data URI built over the course of the stream. +Note that this object will overwrite any installed event handlers on the +given Guacamole.InputStream. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
stream + + +Guacamole.InputStream + + + + The stream that data will be read from.
mimetype + + +string + + + + The mimetype of the data being received.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + +

Methods

+ + + + + + + +

getURI() → (non-null) {string}

+ + + + + + +
+ Returns the data URI of all data received through the underlying stream +thus far. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ The data URI of all data received through the underlying stream thus + far. +
+ + + +
+
+ Type +
+
+ +string + + +
+
+ + + + + + + + + + + + + +

Events

+ + + + + + + +

onend

+ + + + + + +
+ Fired once this stream is finished and no further data will be written. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/doc/1.5.5/guacamole-common-js/Guacamole.Display.VisibleLayer.html b/doc/1.5.5/guacamole-common-js/Guacamole.Display.VisibleLayer.html new file mode 100644 index 000000000..27e2c7bbf --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/Guacamole.Display.VisibleLayer.html @@ -0,0 +1,6655 @@ + + + + + JSDoc: Class: VisibleLayer + + + + + + + + + + +
+ +

Class: VisibleLayer

+ + + + + + +
+ +
+ +

+ Guacamole.Display.VisibleLayer(widthnon-null, heightnon-null)

+ + +
+ +
+
+ + + + + + +

new VisibleLayer(widthnon-null, heightnon-null)

+ + + + + + +
+ Simple container for Guacamole.Layer, allowing layers to be easily +repositioned and nested. This allows certain operations to be accelerated +through DOM manipulation, rather than raster operations. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
width + + +number + + + + The width of the Layer, in pixels. The canvas element backing this Layer + will be given this width.
height + + +number + + + + The height of the Layer, in pixels. The canvas element backing this + Layer will be given this height.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + +

Extends

+ + + + + + + + + + + + + + + + + + + + +

Members

+ + + +

(non-null) alpha :number

+ + + + +
+ The opacity of the layer container, where 255 is fully opaque and 0 is +fully transparent. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) autosize :boolean

+ + + + +
+ Set to true if this Layer should resize itself to accommodate the +dimensions of any drawing operation, and false (the default) otherwise. + +Note that setting this property takes effect immediately, and thus may +take effect on operations that were started in the past but have not +yet completed. If you wish the setting of this flag to only modify +future operations, you will need to make the setting of this flag an +operation with sync(). +
+ + + +
Type:
+
    +
  • + +boolean + + +
  • +
+ + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + +
Default Value:
+
    +
  • false
  • +
+ + + +
Source:
+
+ + + + + + + +
+ + + + + +
Example
+ +
// Set autosize to true for all future operations
+layer.sync(function() {
+    layer.autosize = true;
+});
+ + + + + +

(non-null) children :Object.<number, Guacamole.Display.VisibleLayer>

+ + + + +
+ Set of all children of this layer, indexed by layer index. This object +will have one property per child. +
+ + + +
Type:
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) height :number

+ + + + +
+ The current height of this layer. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) matrix :Array.<number>

+ + + + +
+ The affine transformation applied to this layer container. Each element +corresponds to a value from the transformation matrix, with the first +three values being the first row, and the last three values being the +second row. There are six values total. +
+ + + +
Type:
+
    +
  • + +Array.<number> + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

parent :Guacamole.Display.VisibleLayer

+ + + + +
+ The parent layer container of this layer, if any. +
+ + + +
Type:
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) width :number

+ + + + +
+ The current width of this layer. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) x :number

+ + + + +
+ X coordinate of the upper-left corner of this layer container within +its parent, in pixels. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) y :number

+ + + + +
+ Y coordinate of the upper-left corner of this layer container within +its parent, in pixels. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) z :number

+ + + + +
+ Z stacking order of this layer relative to other sibling layers. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + +

Methods

+ + + + + + + +

arc(xnon-null, ynon-null, radiusnon-null, startAnglenon-null, endAnglenon-null, negativenon-null)

+ + + + + + +
+ Add the specified arc to the current path. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
x + + +number + + + + The X coordinate of the center of the circle which will contain the + arc.
y + + +number + + + + The Y coordinate of the center of the circle which will contain the + arc.
radius + + +number + + + + The radius of the circle.
startAngle + + +number + + + + The starting angle of the arc, in radians.
endAngle + + +number + + + + The ending angle of the arc, in radians.
negative + + +boolean + + + + Whether the arc should be drawn in order of decreasing angle.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

clip()

+ + + + + + +
+ Clip all future drawing operations by the current path. The current path +is implicitly closed. The current path can continue to be reused +for other operations (such as fillColor()) but a new path will be started +once a path drawing operation (path() or rect()) is used. +
+ + + + + + + + + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

close()

+ + + + + + +
+ Closes the current path by connecting the end point with the start +point (if any) with a straight line. +
+ + + + + + + + + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

copy(srcLayernon-null, srcxnon-null, srcynon-null, srcwnon-null, srchnon-null, xnon-null, ynon-null)

+ + + + + + +
+ Copy a rectangle of image data from one Layer to this Layer. This +operation will copy exactly the image data that will be drawn once all +operations of the source Layer that were pending at the time this +function was called are complete. This operation will not alter the +size of the source Layer even if its autosize property is set to true. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
srcLayer + + +Guacamole.Layer + + + + The Layer to copy image data from.
srcx + + +number + + + + The X coordinate of the upper-left corner of the rectangle within + the source Layer's coordinate space to copy data from.
srcy + + +number + + + + The Y coordinate of the upper-left corner of the rectangle within + the source Layer's coordinate space to copy data from.
srcw + + +number + + + + The width of the rectangle within the source Layer's coordinate + space to copy data from.
srch + + +number + + + + The height of the rectangle within the source Layer's coordinate + space to copy data from.
x + + +number + + + + The destination X coordinate.
y + + +number + + + + The destination Y coordinate.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

curveTo(cp1xnon-null, cp1ynon-null, cp2xnon-null, cp2ynon-null, xnon-null, ynon-null)

+ + + + + + +
+ Starts a new path at the specified point. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
cp1x + + +number + + + + The X coordinate of the first control point.
cp1y + + +number + + + + The Y coordinate of the first control point.
cp2x + + +number + + + + The X coordinate of the second control point.
cp2y + + +number + + + + The Y coordinate of the second control point.
x + + +number + + + + The X coordinate of the endpoint of the curve.
y + + +number + + + + The Y coordinate of the endpoint of the curve.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

dispose()

+ + + + + + +
+ Removes this layer container entirely, such that it is no longer +contained within its parent layer, if any. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

distort(anon-null, bnon-null, cnon-null, dnon-null, enon-null, fnon-null)

+ + + + + + +
+ Applies the given affine transform (defined with six values from the +transform's matrix). +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
a + + +number + + + + The first value in the affine transform's matrix.
b + + +number + + + + The second value in the affine transform's matrix.
c + + +number + + + + The third value in the affine transform's matrix.
d + + +number + + + + The fourth value in the affine transform's matrix.
e + + +number + + + + The fifth value in the affine transform's matrix.
f + + +number + + + + The sixth value in the affine transform's matrix.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

drawImage(xnon-null, ynon-null, imagenon-null)

+ + + + + + +
+ Draws the specified image at the given coordinates. The image specified +must already be loaded. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
x + + +number + + + + The destination X coordinate.
y + + +number + + + + The destination Y coordinate.
image + + +CanvasImageSource + + + + The image to draw. Note that this is not a URL.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

fillColor(rnon-null, gnon-null, bnon-null, anon-null)

+ + + + + + +
+ Fills the current path with the specified color. The current path +is implicitly closed. The current path can continue to be reused +for other operations (such as clip()) but a new path will be started +once a path drawing operation (path() or rect()) is used. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
r + + +number + + + + The red component of the color to fill.
g + + +number + + + + The green component of the color to fill.
b + + +number + + + + The blue component of the color to fill.
a + + +number + + + + The alpha component of the color to fill.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

fillLayer(srcLayernon-null)

+ + + + + + +
+ Fills the current path with the image within the specified layer. The +image data will be tiled infinitely within the stroke. The current path +is implicitly closed. The current path can continue to be reused +for other operations (such as clip()) but a new path will be started +once a path drawing operation (path() or rect()) is used. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
srcLayer + + +Guacamole.Layer + + + + The layer to use as a repeating pattern within the fill.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

getCanvas() → (non-null) {HTMLCanvasElement}

+ + + + + + +
+ Returns the canvas element backing this Layer. Note that the dimensions +of the canvas may not exactly match those of the Layer, as resizing a +canvas while maintaining its state is an expensive operation. +
+ + + + + + + + + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ The canvas element backing this Layer. +
+ + + +
+
+ Type +
+
+ +HTMLCanvasElement + + +
+
+ + + + + + + + + + + + + +

getElement() → (non-null) {Element}

+ + + + + + +
+ Returns the element containing the canvas and any other elements +associated with this layer. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ The element containing this layer's canvas. +
+ + + +
+
+ Type +
+
+ +Element + + +
+
+ + + + + + + + + + + + + +

lineTo(xnon-null, ynon-null)

+ + + + + + +
+ Add the specified line to the current path. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
x + + +number + + + + The X coordinate of the endpoint of the line to draw.
y + + +number + + + + The Y coordinate of the endpoint of the line to draw.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

move(parentnon-null, xnon-null, ynon-null, znon-null)

+ + + + + + +
+ Moves the upper-left corner of this VisibleLayer to the given X and Y +coordinate, sets the Z stacking order, and reparents this VisibleLayer +to the given VisibleLayer. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
parent + + +Guacamole.Display.VisibleLayer + + + + The parent to set.
x + + +number + + + + The X coordinate to move to.
y + + +number + + + + The Y coordinate to move to.
z + + +number + + + + The Z coordinate to move to.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

moveTo(xnon-null, ynon-null)

+ + + + + + +
+ Starts a new path at the specified point. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
x + + +number + + + + The X coordinate of the point to draw.
y + + +number + + + + The Y coordinate of the point to draw.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

pop()

+ + + + + + +
+ Pop layer state off stack. +
+ + + + + + + + + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

push()

+ + + + + + +
+ Push current layer state onto stack. +
+ + + + + + + + + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

put(srcLayernon-null, srcxnon-null, srcynon-null, srcwnon-null, srchnon-null, xnon-null, ynon-null)

+ + + + + + +
+ Put a rectangle of image data from one Layer to this Layer directly +without performing any alpha blending. Simply copy the data. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
srcLayer + + +Guacamole.Layer + + + + The Layer to copy image data from.
srcx + + +number + + + + The X coordinate of the upper-left corner of the rectangle within + the source Layer's coordinate space to copy data from.
srcy + + +number + + + + The Y coordinate of the upper-left corner of the rectangle within + the source Layer's coordinate space to copy data from.
srcw + + +number + + + + The width of the rectangle within the source Layer's coordinate + space to copy data from.
srch + + +number + + + + The height of the rectangle within the source Layer's coordinate + space to copy data from.
x + + +number + + + + The destination X coordinate.
y + + +number + + + + The destination Y coordinate.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

rect(xnon-null, ynon-null, wnon-null, hnon-null)

+ + + + + + +
+ Add the specified rectangle to the current path. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
x + + +number + + + + The X coordinate of the upper-left corner of the rectangle to draw.
y + + +number + + + + The Y coordinate of the upper-left corner of the rectangle to draw.
w + + +number + + + + The width of the rectangle to draw.
h + + +number + + + + The height of the rectangle to draw.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

reset()

+ + + + + + +
+ Reset the layer, clearing the stack, the current path, and any transform +matrix. +
+ + + + + + + + + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

resize(newWidthnon-null, newHeightnon-null)

+ + + + + + +
+ Changes the size of this Layer to the given width and height. Resizing +is only attempted if the new size provided is actually different from +the current size. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
newWidth + + +number + + + + The new width to assign to this Layer.
newHeight + + +number + + + + The new height to assign to this Layer.
+ + + + + + +
+ + + + + + + + +
Overrides:
+
+ + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

setChannelMask(masknon-null)

+ + + + + + +
+ Sets the channel mask for future operations on this Layer. + +The channel mask is a Guacamole-specific compositing operation identifier +with a single bit representing each of four channels (in order): source +image where destination transparent, source where destination opaque, +destination where source transparent, and destination where source +opaque. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
mask + + +number + + + + The channel mask for future operations on this Layer.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

setMiterLimit(limitnon-null)

+ + + + + + +
+ Sets the miter limit for stroke operations using the miter join. This +limit is the maximum ratio of the size of the miter join to the stroke +width. If this ratio is exceeded, the miter will not be drawn for that +joint of the path. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
limit + + +number + + + + The miter limit for stroke operations using the miter join.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

setTransform(anon-null, bnon-null, cnon-null, dnon-null, enon-null, fnon-null)

+ + + + + + +
+ Sets the given affine transform (defined with six values from the +transform's matrix). +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
a + + +number + + + + The first value in the affine transform's matrix.
b + + +number + + + + The second value in the affine transform's matrix.
c + + +number + + + + The third value in the affine transform's matrix.
d + + +number + + + + The fourth value in the affine transform's matrix.
e + + +number + + + + The fifth value in the affine transform's matrix.
f + + +number + + + + The sixth value in the affine transform's matrix.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

shade(anon-null)

+ + + + + + +
+ Sets the opacity of this layer to the given value, where 255 is fully +opaque and 0 is fully transparent. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
a + + +number + + + + The opacity to set.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

strokeColor(capnon-null, joinnon-null, thicknessnon-null, rnon-null, gnon-null, bnon-null, anon-null)

+ + + + + + +
+ Stroke the current path with the specified color. The current path +is implicitly closed. The current path can continue to be reused +for other operations (such as clip()) but a new path will be started +once a path drawing operation (path() or rect()) is used. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
cap + + +string + + + + The line cap style. Can be "round", "square", or "butt".
join + + +string + + + + The line join style. Can be "round", "bevel", or "miter".
thickness + + +number + + + + The line thickness in pixels.
r + + +number + + + + The red component of the color to fill.
g + + +number + + + + The green component of the color to fill.
b + + +number + + + + The blue component of the color to fill.
a + + +number + + + + The alpha component of the color to fill.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

strokeLayer(capnon-null, joinnon-null, thicknessnon-null, srcLayernon-null)

+ + + + + + +
+ Stroke the current path with the image within the specified layer. The +image data will be tiled infinitely within the stroke. The current path +is implicitly closed. The current path can continue to be reused +for other operations (such as clip()) but a new path will be started +once a path drawing operation (path() or rect()) is used. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
cap + + +string + + + + The line cap style. Can be "round", "square", or "butt".
join + + +string + + + + The line join style. Can be "round", "bevel", or "miter".
thickness + + +number + + + + The line thickness in pixels.
srcLayer + + +Guacamole.Layer + + + + The layer to use as a repeating pattern within the stroke.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

toCanvas() → (non-null) {HTMLCanvasElement}

+ + + + + + +
+ Returns a new canvas element containing the same image as this Layer. +Unlike getCanvas(), the canvas element returned is guaranteed to have +the exact same dimensions as the Layer. +
+ + + + + + + + + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ A new canvas element containing a copy of the image content this + Layer. +
+ + + +
+
+ Type +
+
+ +HTMLCanvasElement + + +
+
+ + + + + + + + + + + + + +

transfer(srcLayernon-null, srcxnon-null, srcynon-null, srcwnon-null, srchnon-null, xnon-null, ynon-null, transferFunctionnon-null)

+ + + + + + +
+ Transfer a rectangle of image data from one Layer to this Layer using the +specified transfer function. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
srcLayer + + +Guacamole.Layer + + + + The Layer to copy image data from.
srcx + + +number + + + + The X coordinate of the upper-left corner of the rectangle within + the source Layer's coordinate space to copy data from.
srcy + + +number + + + + The Y coordinate of the upper-left corner of the rectangle within + the source Layer's coordinate space to copy data from.
srcw + + +number + + + + The width of the rectangle within the source Layer's coordinate + space to copy data from.
srch + + +number + + + + The height of the rectangle within the source Layer's coordinate + space to copy data from.
x + + +number + + + + The destination X coordinate.
y + + +number + + + + The destination Y coordinate.
transferFunction + + +function + + + + The transfer function to use to transfer data from source to + destination.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

transform(anon-null, bnon-null, cnon-null, dnon-null, enon-null, fnon-null)

+ + + + + + +
+ Applies the given affine transform (defined with six values from the +transform's matrix). +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
a + + +number + + + + The first value in the affine transform's matrix.
b + + +number + + + + The second value in the affine transform's matrix.
c + + +number + + + + The third value in the affine transform's matrix.
d + + +number + + + + The fourth value in the affine transform's matrix.
e + + +number + + + + The fifth value in the affine transform's matrix.
f + + +number + + + + The sixth value in the affine transform's matrix.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

translate(xnon-null, ynon-null)

+ + + + + + +
+ Moves the upper-left corner of this layer to the given X and Y +coordinate. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
x + + +number + + + + The X coordinate to move to.
y + + +number + + + + The Y coordinate to move to.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/doc/1.5.5/guacamole-common-js/Guacamole.Display.html b/doc/1.5.5/guacamole-common-js/Guacamole.Display.html new file mode 100644 index 000000000..e28c46a84 --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/Guacamole.Display.html @@ -0,0 +1,9461 @@ + + + + + JSDoc: Class: Display + + + + + + + + + + +
+ +

Class: Display

+ + + + + + +
+ +
+ +

+ Guacamole.Display()

+ + +
+ +
+
+ + + + + + +

new Display()

+ + + + + + +
+ The Guacamole display. The display does not deal with the Guacamole +protocol, and instead implements a set of graphical operations which +embody the set of operations present in the protocol. The order operations +are executed is guaranteed to be in the same order as their corresponding +functions are called. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Classes

+ +
+
VisibleLayer
+
+
+ + + + + + + + + +

Members

+ + + +

(non-null) cursorHotspotX :number

+ + + + +
+ The X coordinate of the hotspot of the mouse cursor. The hotspot is +the relative location within the image of the mouse cursor at which +each click occurs. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) cursorHotspotY :number

+ + + + +
+ The Y coordinate of the hotspot of the mouse cursor. The hotspot is +the relative location within the image of the mouse cursor at which +each click occurs. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) cursorX :number

+ + + + +
+ The current X coordinate of the local mouse cursor. This is not +necessarily the location of the actual mouse - it refers only to +the location of the cursor image within the Guacamole display, as +last set by moveCursor(). +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) cursorY :number

+ + + + +
+ The current X coordinate of the local mouse cursor. This is not +necessarily the location of the actual mouse - it refers only to +the location of the cursor image within the Guacamole display, as +last set by moveCursor(). +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + +

Methods

+ + + + + + + +

arc(layernon-null, xnon-null, ynon-null, radiusnon-null, startAnglenon-null, endAnglenon-null, negativenon-null)

+ + + + + + +
+ Add the specified arc to the current path. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
layer + + +Guacamole.Layer + + + + The layer to draw upon.
x + + +number + + + + The X coordinate of the center of the circle which will contain the + arc.
y + + +number + + + + The Y coordinate of the center of the circle which will contain the + arc.
radius + + +number + + + + The radius of the circle.
startAngle + + +number + + + + The starting angle of the arc, in radians.
endAngle + + +number + + + + The ending angle of the arc, in radians.
negative + + +boolean + + + + Whether the arc should be drawn in order of decreasing angle.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

cancel()

+ + + + + + +
+ Cancels rendering of all pending frames and associated rendering +operations. The callbacks provided to outstanding past calls to flush(), +if any, are not invoked. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

clip(layernon-null)

+ + + + + + +
+ Clip all future drawing operations by the current path. The current path +is implicitly closed. The current path can continue to be reused +for other operations (such as fillColor()) but a new path will be started +once a path drawing operation (path() or rect()) is used. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
layer + + +Guacamole.Layer + + + + The layer to affect.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

close(layernon-null)

+ + + + + + +
+ Closes the current path by connecting the end point with the start +point (if any) with a straight line. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
layer + + +Guacamole.Layer + + + + The layer to draw upon.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

copy(srcLayernon-null, srcxnon-null, srcynon-null, srcwnon-null, srchnon-null, dstLayernon-null, xnon-null, ynon-null)

+ + + + + + +
+ Copy a rectangle of image data from one Layer to this Layer. This +operation will copy exactly the image data that will be drawn once all +operations of the source Layer that were pending at the time this +function was called are complete. This operation will not alter the +size of the source Layer even if its autosize property is set to true. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
srcLayer + + +Guacamole.Layer + + + + The Layer to copy image data from.
srcx + + +number + + + + The X coordinate of the upper-left corner of the rectangle within + the source Layer's coordinate space to copy data from.
srcy + + +number + + + + The Y coordinate of the upper-left corner of the rectangle within + the source Layer's coordinate space to copy data from.
srcw + + +number + + + + The width of the rectangle within the source Layer's coordinate + space to copy data from.
srch + + +number + + + + The height of the rectangle within the source Layer's coordinate space to copy data from.
dstLayer + + +Guacamole.Layer + + + + The layer to draw upon.
x + + +number + + + + The destination X coordinate.
y + + +number + + + + The destination Y coordinate.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

createBuffer() → (non-null) {Guacamole.Layer}

+ + + + + + +
+ Creates a new buffer. Buffers are invisible, off-screen surfaces. They +are implemented in the same manner as layers, but do not provide the +same nesting semantics. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ The newly-created buffer. +
+ + + +
+
+ Type +
+
+ +Guacamole.Layer + + +
+
+ + + + + + + + + + + + + +

createLayer() → (non-null) {Guacamole.Display.VisibleLayer}

+ + + + + + +
+ Creates a new layer. The new layer will be a direct child of the default +layer, but can be moved to be a child of any other layer. Layers returned +by this function are visible. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ The newly-created layer. +
+ + + +
+
+ Type +
+
+ +Guacamole.Display.VisibleLayer + + +
+
+ + + + + + + + + + + + + +

curveTo(layernon-null, cp1xnon-null, cp1ynon-null, cp2xnon-null, cp2ynon-null, xnon-null, ynon-null)

+ + + + + + +
+ Starts a new path at the specified point. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
layer + + +Guacamole.Layer + + + + The layer to draw upon.
cp1x + + +number + + + + The X coordinate of the first control point.
cp1y + + +number + + + + The Y coordinate of the first control point.
cp2x + + +number + + + + The X coordinate of the second control point.
cp2y + + +number + + + + The Y coordinate of the second control point.
x + + +number + + + + The X coordinate of the endpoint of the curve.
y + + +number + + + + The Y coordinate of the endpoint of the curve.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

dispose(layernon-null)

+ + + + + + +
+ Removes the given layer container entirely, such that it is no longer +contained within its parent layer, if any. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
layer + + +Guacamole.Display.VisibleLayer + + + + The layer being removed from its parent.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

distort(layernon-null, anon-null, bnon-null, cnon-null, dnon-null, enon-null, fnon-null)

+ + + + + + +
+ Applies the given affine transform (defined with six values from the +transform's matrix) to the given layer. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
layer + + +Guacamole.Display.VisibleLayer + + + + The layer being distorted.
a + + +number + + + + The first value in the affine transform's matrix.
b + + +number + + + + The second value in the affine transform's matrix.
c + + +number + + + + The third value in the affine transform's matrix.
d + + +number + + + + The fourth value in the affine transform's matrix.
e + + +number + + + + The fifth value in the affine transform's matrix.
f + + +number + + + + The sixth value in the affine transform's matrix.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

draw(layernon-null, xnon-null, ynon-null, urlnon-null)

+ + + + + + +
+ Draws the image at the specified URL at the given coordinates. The image +will be loaded automatically, and this and any future operations will +wait for the image to finish loading. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
layer + + +Guacamole.Layer + + + + The layer to draw upon.
x + + +number + + + + The destination X coordinate.
y + + +number + + + + The destination Y coordinate.
url + + +string + + + + The URL of the image to draw.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

drawBlob(layernon-null, xnon-null, ynon-null, blobnon-null)

+ + + + + + +
+ Draws the image contained within the specified Blob at the given +coordinates. The Blob specified must already be populated with image +data. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
layer + + +Guacamole.Layer + + + + The layer to draw upon.
x + + +number + + + + The destination X coordinate.
y + + +number + + + + The destination Y coordinate.
blob + + +Blob + + + + The Blob containing the image data to draw.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

drawImage(layernon-null, xnon-null, ynon-null, imagenon-null)

+ + + + + + +
+ Draws the specified image at the given coordinates. The image specified +must already be loaded. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
layer + + +Guacamole.Layer + + + + The layer to draw upon.
x + + +number + + + + The destination X coordinate.
y + + +number + + + + The destination Y coordinate.
image + + +CanvasImageSource + + + + The image to draw. Note that this not a URL.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

drawStream(layernon-null, xnon-null, ynon-null, streamnon-null, mimetypenon-null)

+ + + + + + +
+ Draws the image within the given stream at the given coordinates. The +image will be loaded automatically, and this and any future operations +will wait for the image to finish loading. This function will +automatically choose an appropriate method for reading and decoding the +given image stream, and should be preferred for received streams except +where manual decoding of the stream is unavoidable. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
layer + + +Guacamole.Layer + + + + The layer to draw upon.
x + + +number + + + + The destination X coordinate.
y + + +number + + + + The destination Y coordinate.
stream + + +Guacamole.InputStream + + + + The stream along which image data will be received.
mimetype + + +string + + + + The mimetype of the image within the stream.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

fillColor(layernon-null, rnon-null, gnon-null, bnon-null, anon-null)

+ + + + + + +
+ Fills the current path with the specified color. The current path +is implicitly closed. The current path can continue to be reused +for other operations (such as clip()) but a new path will be started +once a path drawing operation (path() or rect()) is used. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
layer + + +Guacamole.Layer + + + + The layer to draw upon.
r + + +number + + + + The red component of the color to fill.
g + + +number + + + + The green component of the color to fill.
b + + +number + + + + The blue component of the color to fill.
a + + +number + + + + The alpha component of the color to fill.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

fillLayer(layernon-null, srcLayernon-null)

+ + + + + + +
+ Fills the current path with the image within the specified layer. The +image data will be tiled infinitely within the stroke. The current path +is implicitly closed. The current path can continue to be reused +for other operations (such as clip()) but a new path will be started +once a path drawing operation (path() or rect()) is used. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
layer + + +Guacamole.Layer + + + + The layer to draw upon.
srcLayer + + +Guacamole.Layer + + + + The layer to use as a repeating pattern within the fill.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

flatten() → (non-null) {HTMLCanvasElement}

+ + + + + + +
+ Returns a canvas element containing the entire display, with all child +layers composited within. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ A new canvas element containing a copy of the display. +
+ + + +
+
+ Type +
+
+ +HTMLCanvasElement + + +
+
+ + + + + + + + + + + + + +

flush(callbackopt)

+ + + + + + +
+ Flush all pending draw tasks, if possible, as a new frame. If the entire +frame is not ready, the flush will wait until all required tasks are +unblocked. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeAttributesDescription
callback + + +function + + + + + + <optional>
+ + + + + +
The function to call when this frame is flushed. This may happen + immediately, or later when blocked tasks become unblocked.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

getCursorLayer() → (non-null) {Guacamole.Display.VisibleLayer}

+ + + + + + +
+ Returns the cursor layer of this display. Each Guacamole display contains +a layer for the image of the mouse cursor. This layer is a special case +and exists above all other layers, similar to the hardware mouse cursor. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ The cursor layer. +
+ + + +
+
+ Type +
+
+ +Guacamole.Display.VisibleLayer + + +
+
+ + + + + + + + + + + + + +

getDefaultLayer() → (non-null) {Guacamole.Display.VisibleLayer}

+ + + + + + +
+ Returns the default layer of this display. Each Guacamole display always +has at least one layer. Other layers can optionally be created within +this layer, but the default layer cannot be removed and is the absolute +ancestor of all other layers. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ The default layer. +
+ + + +
+
+ Type +
+
+ +Guacamole.Display.VisibleLayer + + +
+
+ + + + + + + + + + + + + +

getElement() → (non-null) {Element}

+ + + + + + +
+ Returns the element which contains the Guacamole display. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ The element containing the Guacamole display. +
+ + + +
+
+ Type +
+
+ +Element + + +
+
+ + + + + + + + + + + + + +

getHeight() → (non-null) {number}

+ + + + + + +
+ Returns the height of this display. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ The height of this display; +
+ + + +
+
+ Type +
+
+ +number + + +
+
+ + + + + + + + + + + + + +

getScale() → (non-null) {number}

+ + + + + + +
+ Returns the scale of the display. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ The scale of the display. +
+ + + +
+
+ Type +
+
+ +number + + +
+
+ + + + + + + + + + + + + +

getWidth() → (non-null) {number}

+ + + + + + +
+ Returns the width of this display. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ The width of this display; +
+ + + +
+
+ Type +
+
+ +number + + +
+
+ + + + + + + + + + + + + +

lineTo(layernon-null, xnon-null, ynon-null)

+ + + + + + +
+ Add the specified line to the current path. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
layer + + +Guacamole.Layer + + + + The layer to draw upon.
x + + +number + + + + The X coordinate of the endpoint of the line to draw.
y + + +number + + + + The Y coordinate of the endpoint of the line to draw.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

move(layernon-null, parentnon-null, xnon-null, ynon-null, znon-null)

+ + + + + + +
+ Moves the upper-left corner of the given layer to the given X and Y +coordinate, sets the Z stacking order, and reparents the layer +to the given parent layer. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
layer + + +Guacamole.Display.VisibleLayer + + + + The layer being moved.
parent + + +Guacamole.Display.VisibleLayer + + + + The parent to set.
x + + +number + + + + The X coordinate to move to.
y + + +number + + + + The Y coordinate to move to.
z + + +number + + + + The Z coordinate to move to.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

moveCursor(xnon-null, ynon-null)

+ + + + + + +
+ Sets the location of the local cursor to the given coordinates. For the +sake of responsiveness, this function performs its action immediately. +Cursor motion is not maintained within atomic frames. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
x + + +number + + + + The X coordinate to move the cursor to.
y + + +number + + + + The Y coordinate to move the cursor to.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

moveTo(layernon-null, xnon-null, ynon-null)

+ + + + + + +
+ Starts a new path at the specified point. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
layer + + +Guacamole.Layer + + + + The layer to draw upon.
x + + +number + + + + The X coordinate of the point to draw.
y + + +number + + + + The Y coordinate of the point to draw.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

play(layernon-null, mimetypenon-null, durationnon-null, urlnon-null)

+ + + + + + +
+ Plays the video at the specified URL within this layer. The video +will be loaded automatically, and this and any future operations will +wait for the video to finish loading. Future operations will not be +executed until the video finishes playing. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
layer + + +Guacamole.Layer + + + + The layer to draw upon.
mimetype + + +string + + + + The mimetype of the video to play.
duration + + +number + + + + The duration of the video in milliseconds.
url + + +string + + + + The URL of the video to play.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

pop(layernon-null)

+ + + + + + +
+ Pop layer state off stack. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
layer + + +Guacamole.Layer + + + + The layer to draw upon.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

push(layernon-null)

+ + + + + + +
+ Push current layer state onto stack. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
layer + + +Guacamole.Layer + + + + The layer to draw upon.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

put(srcLayernon-null, srcxnon-null, srcynon-null, srcwnon-null, srchnon-null, dstLayernon-null, xnon-null, ynon-null)

+ + + + + + +
+ Put a rectangle of image data from one Layer to this Layer directly +without performing any alpha blending. Simply copy the data. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
srcLayer + + +Guacamole.Layer + + + + The Layer to copy image data from.
srcx + + +number + + + + The X coordinate of the upper-left corner of the rectangle within + the source Layer's coordinate space to copy data from.
srcy + + +number + + + + The Y coordinate of the upper-left corner of the rectangle within + the source Layer's coordinate space to copy data from.
srcw + + +number + + + + The width of the rectangle within the source Layer's coordinate + space to copy data from.
srch + + +number + + + + The height of the rectangle within the source Layer's coordinate + space to copy data from.
dstLayer + + +Guacamole.Layer + + + + The layer to draw upon.
x + + +number + + + + The destination X coordinate.
y + + +number + + + + The destination Y coordinate.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

rect(layernon-null, xnon-null, ynon-null, wnon-null, hnon-null)

+ + + + + + +
+ Add the specified rectangle to the current path. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
layer + + +Guacamole.Layer + + + + The layer to draw upon.
x + + +number + + + + The X coordinate of the upper-left corner of the rectangle to draw.
y + + +number + + + + The Y coordinate of the upper-left corner of the rectangle to draw.
w + + +number + + + + The width of the rectangle to draw.
h + + +number + + + + The height of the rectangle to draw.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

reset(layernon-null)

+ + + + + + +
+ Reset the layer, clearing the stack, the current path, and any transform +matrix. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
layer + + +Guacamole.Layer + + + + The layer to draw upon.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

resize(layernon-null, widthnon-null, heightnon-null)

+ + + + + + +
+ Changes the size of the given Layer to the given width and height. +Resizing is only attempted if the new size provided is actually different +from the current size. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
layer + + +Guacamole.Layer + + + + The layer to resize.
width + + +number + + + + The new width.
height + + +number + + + + The new height.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

scale(scalenon-null)

+ + + + + + +
+ Sets the scale of the client display element such that it renders at +a relatively smaller or larger size, without affecting the true +resolution of the display. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
scale + + +number + + + + The scale to resize to, where 1.0 is normal size (1:1 scale).
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

setChannelMask(layernon-null, masknon-null)

+ + + + + + +
+ Sets the channel mask for future operations on this Layer. + +The channel mask is a Guacamole-specific compositing operation identifier +with a single bit representing each of four channels (in order): source +image where destination transparent, source where destination opaque, +destination where source transparent, and destination where source +opaque. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
layer + + +Guacamole.Layer + + + + The layer to modify.
mask + + +number + + + + The channel mask for future operations on this Layer.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

setCursor(hotspotXnon-null, hotspotYnon-null, layernon-null, srcxnon-null, srcynon-null, srcwnon-null, srchnon-null)

+ + + + + + +
+ Sets the hotspot and image of the mouse cursor displayed within the +Guacamole display. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
hotspotX + + +number + + + + The X coordinate of the cursor hotspot.
hotspotY + + +number + + + + The Y coordinate of the cursor hotspot.
layer + + +Guacamole.Layer + + + + The source layer containing the data which should be used as the + mouse cursor image.
srcx + + +number + + + + The X coordinate of the upper-left corner of the rectangle within + the source layer's coordinate space to copy data from.
srcy + + +number + + + + The Y coordinate of the upper-left corner of the rectangle within + the source layer's coordinate space to copy data from.
srcw + + +number + + + + The width of the rectangle within the source layer's coordinate + space to copy data from.
srch + + +number + + + + The height of the rectangle within the source layer's coordinate + space to copy data from.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

setMiterLimit(layernon-null, limitnon-null)

+ + + + + + +
+ Sets the miter limit for stroke operations using the miter join. This +limit is the maximum ratio of the size of the miter join to the stroke +width. If this ratio is exceeded, the miter will not be drawn for that +joint of the path. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
layer + + +Guacamole.Layer + + + + The layer to modify.
limit + + +number + + + + The miter limit for stroke operations using the miter join.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

setTransform(layernon-null, anon-null, bnon-null, cnon-null, dnon-null, enon-null, fnon-null)

+ + + + + + +
+ Sets the given affine transform (defined with six values from the +transform's matrix). +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
layer + + +Guacamole.Layer + + + + The layer to modify.
a + + +number + + + + The first value in the affine transform's matrix.
b + + +number + + + + The second value in the affine transform's matrix.
c + + +number + + + + The third value in the affine transform's matrix.
d + + +number + + + + The fourth value in the affine transform's matrix.
e + + +number + + + + The fifth value in the affine transform's matrix.
f + + +number + + + + The sixth value in the affine transform's matrix.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

shade(layernon-null, alphanon-null)

+ + + + + + +
+ Sets the opacity of the given layer to the given value, where 255 is +fully opaque and 0 is fully transparent. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
layer + + +Guacamole.Display.VisibleLayer + + + + The layer whose opacity should be set.
alpha + + +number + + + + The opacity to set.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

showCursor(shownopt)

+ + + + + + +
+ Sets whether the software-rendered cursor is shown. This cursor differs +from the hardware cursor in that it is built into the Guacamole.Display, +and relies on its own Guacamole layer to render. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
shown + + +boolean + + + + + + <optional>
+ + + + + +
+ + true + + Whether to show the software cursor.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

strokeColor(layernon-null, capnon-null, joinnon-null, thicknessnon-null, rnon-null, gnon-null, bnon-null, anon-null)

+ + + + + + +
+ Stroke the current path with the specified color. The current path +is implicitly closed. The current path can continue to be reused +for other operations (such as clip()) but a new path will be started +once a path drawing operation (path() or rect()) is used. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
layer + + +Guacamole.Layer + + + + The layer to draw upon.
cap + + +string + + + + The line cap style. Can be "round", "square", or "butt".
join + + +string + + + + The line join style. Can be "round", "bevel", or "miter".
thickness + + +number + + + + The line thickness in pixels.
r + + +number + + + + The red component of the color to fill.
g + + +number + + + + The green component of the color to fill.
b + + +number + + + + The blue component of the color to fill.
a + + +number + + + + The alpha component of the color to fill.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

strokeLayer(layernon-null, capnon-null, joinnon-null, thicknessnon-null, srcLayernon-null)

+ + + + + + +
+ Stroke the current path with the image within the specified layer. The +image data will be tiled infinitely within the stroke. The current path +is implicitly closed. The current path can continue to be reused +for other operations (such as clip()) but a new path will be started +once a path drawing operation (path() or rect()) is used. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
layer + + +Guacamole.Layer + + + + The layer to draw upon.
cap + + +string + + + + The line cap style. Can be "round", "square", or "butt".
join + + +string + + + + The line join style. Can be "round", "bevel", or "miter".
thickness + + +number + + + + The line thickness in pixels.
srcLayer + + +Guacamole.Layer + + + + The layer to use as a repeating pattern within the stroke.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

transfer(srcLayernon-null, srcxnon-null, srcynon-null, srcwnon-null, srchnon-null, dstLayernon-null, xnon-null, ynon-null, transferFunctionnon-null)

+ + + + + + +
+ Transfer a rectangle of image data from one Layer to this Layer using the +specified transfer function. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
srcLayer + + +Guacamole.Layer + + + + The Layer to copy image data from.
srcx + + +number + + + + The X coordinate of the upper-left corner of the rectangle within + the source Layer's coordinate space to copy data from.
srcy + + +number + + + + The Y coordinate of the upper-left corner of the rectangle within + the source Layer's coordinate space to copy data from.
srcw + + +number + + + + The width of the rectangle within the source Layer's coordinate + space to copy data from.
srch + + +number + + + + The height of the rectangle within the source Layer's coordinate + space to copy data from.
dstLayer + + +Guacamole.Layer + + + + The layer to draw upon.
x + + +number + + + + The destination X coordinate.
y + + +number + + + + The destination Y coordinate.
transferFunction + + +function + + + + The transfer function to use to transfer data from source to + destination.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

transform(layernon-null, anon-null, bnon-null, cnon-null, dnon-null, enon-null, fnon-null)

+ + + + + + +
+ Applies the given affine transform (defined with six values from the +transform's matrix). +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
layer + + +Guacamole.Layer + + + + The layer to modify.
a + + +number + + + + The first value in the affine transform's matrix.
b + + +number + + + + The second value in the affine transform's matrix.
c + + +number + + + + The third value in the affine transform's matrix.
d + + +number + + + + The fourth value in the affine transform's matrix.
e + + +number + + + + The fifth value in the affine transform's matrix.
f + + +number + + + + The sixth value in the affine transform's matrix.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

Events

+ + + + + + + +

oncursor

+ + + + + + +
+ Fired whenever the local cursor image is changed. This can be used to +implement special handling of the client-side cursor, or to override +the default use of a software cursor layer. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
canvas + + +HTMLCanvasElement + + + + The cursor image.
x + + +number + + + + The X-coordinate of the cursor hotspot.
y + + +number + + + + The Y-coordinate of the cursor hotspot.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

onresize

+ + + + + + +
+ Fired when the default layer (and thus the entire Guacamole display) +is resized. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
width + + +number + + + + The new width of the Guacamole display.
height + + +number + + + + The new height of the Guacamole display.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/doc/1.5.5/guacamole-common-js/Guacamole.Event.DOMEvent.html b/doc/1.5.5/guacamole-common-js/Guacamole.Event.DOMEvent.html new file mode 100644 index 000000000..d3726ff40 --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/Guacamole.Event.DOMEvent.html @@ -0,0 +1,1045 @@ + + + + + JSDoc: Class: DOMEvent + + + + + + + + + + +
+ +

Class: DOMEvent

+ + + + + + +
+ +
+ +

+ Guacamole.Event.DOMEvent(typenon-null, eventsopt)

+ + +
+ +
+
+ + + + + + +

new DOMEvent(typenon-null, eventsopt)

+ + + + + + +
+ A Guacamole.Event that may relate to one or more DOM events. +Continued propagation and default behavior of the related DOM events may be +prevented with stopPropagation() +and preventDefault() +respectively. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
type + + +string + + + + + + + + + + + + The unique name of this event type.
events + + +Event +| + +Array.<Event> + + + + + + <optional>
+ + + + + +
+ + [] + + The DOM events that are related to this event, if any. Future calls to + preventDefault() and + stopPropagation() will + affect these events.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + +

Extends

+ + + + + + + + + + + + + + + + + + + + +

Members

+ + + +

(non-null) timestamp :number

+ + + + +
+ An arbitrary timestamp in milliseconds, indicating this event's +position in time relative to other events. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) type :string

+ + + + +
+ The unique name of this event type. +
+ + + +
Type:
+
    +
  • + +string + + +
  • +
+ + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + +

Methods

+ + + + + + + +

getAge() → (non-null) {number}

+ + + + + + +
+ Returns the number of milliseconds elapsed since this event was created. +
+ + + + + + + + + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ The number of milliseconds elapsed since this event was created. +
+ + + +
+
+ Type +
+
+ +number + + +
+
+ + + + + + + + + + + + + +

invokeLegacyHandler(eventTargetnon-null)

+ + + + + + +
+ Requests that the legacy event handler associated with this event be +invoked on the given event target. This function will be invoked +automatically by implementations of Guacamole.Event.Target +whenever emit() is invoked. +

+Older versions of Guacamole relied on single event handlers with the +prefix "on", such as "onmousedown" or "onkeyup". If a Guacamole.Event +implementation is replacing the event previously represented by one of +these handlers, this function gives the implementation the opportunity +to provide backward compatibility with the old handler. +

+Unless overridden, this function does nothing. +

+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
eventTarget + + +Guacamole.Event.Target + + + + The Guacamole.Event.Target that emitted this event.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

preventDefault()

+ + + + + + +
+ Requests that the default behavior of related DOM events be prevented. +Whether this request will be honored by the browser depends on the +nature of those events and the timing of the request. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

stopPropagation()

+ + + + + + +
+ Stops further propagation of related events through the DOM. Only events +that are directly related to this event will be stopped. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

(static) cancelEvent(eventnon-null)

+ + + + + + +
+ Convenience function for cancelling all further processing of a given DOM +event. Invoking this function prevents the default behavior of the event and +stops any further propagation. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
event + + +Event + + + + The DOM event to cancel.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/doc/1.5.5/guacamole-common-js/Guacamole.Event.Target.html b/doc/1.5.5/guacamole-common-js/Guacamole.Event.Target.html new file mode 100644 index 000000000..a5fbe00c2 --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/Guacamole.Event.Target.html @@ -0,0 +1,1202 @@ + + + + + JSDoc: Class: Target + + + + + + + + + + +
+ +

Class: Target

+ + + + + + +
+ +
+ +

+ Guacamole.Event.Target()

+ + +
+ +
+
+ + + + + + +

new Target()

+ + + + + + +
+ An object which can dispatch Guacamole.Event objects. Listeners +registered with on() will automatically +be invoked based on the type of Guacamole.Event passed to +dispatch(). It is normally +subclasses of Guacamole.Event.Target that will dispatch events, and usages +of those subclasses that will catch dispatched events with on(). +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + +

Methods

+ + + + + + + +

dispatch(eventnon-null)

+ + + + + + +
+ Dispatches the given event, invoking all event handlers registered with +this Guacamole.Event.Target for that event's +type. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
event + + +Guacamole.Event + + + + The event to dispatch.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

off(typenon-null, listenernon-null) → (non-null) {boolean}

+ + + + + + +
+ Unregisters a listener that was previously registered with +on() or +onEach(). If no such listener was +registered, this function has no effect. If multiple copies of the same +listener were registered, the first listener still registered will be +removed. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
type + + +string + + + + The unique name of the event type handled by the listener being + removed.
listener + + +Guacamole.Event.Target~listener + + + + The listener function previously provided to + on()or + onEach().
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ true if the specified listener was removed, false otherwise. +
+ + + +
+
+ Type +
+
+ +boolean + + +
+
+ + + + + + + + + + + + + +

offEach(typesnon-null, listenernon-null) → (non-null) {boolean}

+ + + + + + +
+ Unregisters listeners that were previously registered with +on() or +onEach(). If no such listeners +were registered, this function has no effect. If multiple copies of the +same listener were registered for the same event type, the first +listener still registered will be removed. +

+Invoking this function is equivalent to manually invoking +off() for each of the provided types. +

+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
types + + +Array.<string> + + + + The unique names of the event types handled by the listeners being + removed.
listener + + +Guacamole.Event.Target~listener + + + + The listener function previously provided to + on() or + onEach().
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ true if any of the specified listeners were removed, false + otherwise. +
+ + + +
+
+ Type +
+
+ +boolean + + +
+
+ + + + + + + + + + + + + +

on(typenon-null, listenernon-null)

+ + + + + + +
+ Registers a listener for events having the given type, as dictated by +the type property of Guacamole.Event +provided to dispatch(). +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
type + + +string + + + + The unique name of this event type.
listener + + +Guacamole.Event.Target~listener + + + + The function to invoke when an event having the given type is + dispatched. The Guacamole.Event object provided to + dispatch() will be passed to + this function, along with the dispatching Guacamole.Event.Target.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

onEach(typesnon-null, listenernon-null)

+ + + + + + +
+ Registers a listener for events having the given types, as dictated by +the type property of Guacamole.Event +provided to dispatch(). +

+Invoking this function is equivalent to manually invoking +on() for each of the provided types. +

+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
types + + +Array.<string> + + + + The unique names of the event types to associate with the given + listener.
listener + + +Guacamole.Event.Target~listener + + + + The function to invoke when an event having any of the given types + is dispatched. The Guacamole.Event object provided to + dispatch() will be passed to + this function, along with the dispatching Guacamole.Event.Target.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +

Type Definitions

+ + + + + + + +

listener(eventnon-null, targetnon-null)

+ + + + + + +
+ A callback function which handles an event dispatched by an event +target. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
event + + +Guacamole.Event + + + + The event that was dispatched.
target + + +Guacamole.Event.Target + + + + The object that dispatched the event.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/doc/1.5.5/guacamole-common-js/Guacamole.Event.html b/doc/1.5.5/guacamole-common-js/Guacamole.Event.html new file mode 100644 index 000000000..52ea2d87f --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/Guacamole.Event.html @@ -0,0 +1,643 @@ + + + + + JSDoc: Class: Event + + + + + + + + + + +
+ +

Class: Event

+ + + + + + +
+ +
+ +

+ Guacamole.Event(typenon-null)

+ + +
+ +
+
+ + + + + + +

new Event(typenon-null)

+ + + + + + +
+ An arbitrary event, emitted by a Guacamole.Event.Target. This object +should normally serve as the base class for a different object that is more +specific to the event type. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
type + + +string + + + + The unique name of this event type.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Classes

+ +
+
DOMEvent
+
+ +
Target
+
+
+ + + + + + + + + +

Members

+ + + +

(non-null) timestamp :number

+ + + + +
+ An arbitrary timestamp in milliseconds, indicating this event's +position in time relative to other events. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) type :string

+ + + + +
+ The unique name of this event type. +
+ + + +
Type:
+
    +
  • + +string + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + +

Methods

+ + + + + + + +

getAge() → (non-null) {number}

+ + + + + + +
+ Returns the number of milliseconds elapsed since this event was created. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ The number of milliseconds elapsed since this event was created. +
+ + + +
+
+ Type +
+
+ +number + + +
+
+ + + + + + + + + + + + + +

invokeLegacyHandler(eventTargetnon-null)

+ + + + + + +
+ Requests that the legacy event handler associated with this event be +invoked on the given event target. This function will be invoked +automatically by implementations of Guacamole.Event.Target +whenever emit() is invoked. +

+Older versions of Guacamole relied on single event handlers with the +prefix "on", such as "onmousedown" or "onkeyup". If a Guacamole.Event +implementation is replacing the event previously represented by one of +these handlers, this function gives the implementation the opportunity +to provide backward compatibility with the old handler. +

+Unless overridden, this function does nothing. +

+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
eventTarget + + +Guacamole.Event.Target + + + + The Guacamole.Event.Target that emitted this event.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/doc/1.5.5/guacamole-common-js/Guacamole.HTTPTunnel.html b/doc/1.5.5/guacamole-common-js/Guacamole.HTTPTunnel.html new file mode 100644 index 000000000..f2744ff96 --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/Guacamole.HTTPTunnel.html @@ -0,0 +1,1767 @@ + + + + + JSDoc: Class: HTTPTunnel + + + + + + + + + + +
+ +

Class: HTTPTunnel

+ + + + + + +
+ +
+ +

+ Guacamole.HTTPTunnel(tunnelURLnon-null, crossDomainopt, extraTunnelHeadersopt)

+ + +
+ +
+
+ + + + + + +

new HTTPTunnel(tunnelURLnon-null, crossDomainopt, extraTunnelHeadersopt)

+ + + + + + +
+ Guacamole Tunnel implemented over HTTP via XMLHttpRequest. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
tunnelURL + + +string + + + + + + + + + + + + The URL of the HTTP tunneling service.
crossDomain + + +boolean + + + + + + <optional>
+ + + + + +
+ + false + + Whether tunnel requests will be cross-domain, and thus must use CORS + mechanisms and headers. By default, it is assumed that tunnel requests + will be made to the same domain.
extraTunnelHeaders + + +object + + + + + + <optional>
+ + + + + +
+ + {} + + Key value pairs containing the header names and values of any additional + headers to be sent in tunnel requests. By default, no extra headers will + be added.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + +

Extends

+ + + + + + + + + + + + + + + + + + + + +

Members

+ + + +

(non-null) receiveTimeout :number

+ + + + +
+ The maximum amount of time to wait for data to be received, in +milliseconds. If data is not received within this amount of time, +the tunnel is closed with an error. The default value is 15000. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) state :number

+ + + + +
+ The current state of this tunnel. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) unstableThreshold :number

+ + + + +
+ The amount of time to wait for data to be received before considering +the connection to be unstable, in milliseconds. If data is not received +within this amount of time, the tunnel status is updated to warn that +the connection appears unresponsive and may close. The default value is +1500. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

uuid :string

+ + + + +
+ The UUID uniquely identifying this tunnel. If not yet known, this will +be null. +
+ + + +
Type:
+
    +
  • + +string + + +
  • +
+ + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + +

Methods

+ + + + + + + +

connect(dataopt)

+ + + + + + +
+ Connect to the tunnel with the given optional data. This data is +typically used for authentication. The format of data accepted is +up to the tunnel implementation. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeAttributesDescription
data + + +string + + + + + + <optional>
+ + + + + +
The data to send to the tunnel when connecting.
+ + + + + + +
+ + + + + + + + +
Overrides:
+
+ + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

disconnect()

+ + + + + + +
+ Disconnect from the tunnel. +
+ + + + + + + + + + + + + +
+ + + + + + + + +
Overrides:
+
+ + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

isConnected() → (non-null) {boolean}

+ + + + + + +
+ Returns whether this tunnel is currently connected. +
+ + + + + + + + + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ true if this tunnel is currently connected, false otherwise. +
+ + + +
+
+ Type +
+
+ +boolean + + +
+
+ + + + + + + + + + + + + +

sendMessage(…elements)

+ + + + + + +
+ Send the given message through the tunnel to the service on the other +side. All messages are guaranteed to be received in the order sent. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeAttributesDescription
elements + + +* + + + + + + + + + + <repeatable>
+ +
The elements of the message to send to the service on the other side + of the tunnel.
+ + + + + + +
+ + + + + + + + +
Overrides:
+
+ + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

Events

+ + + + + + + +

onerror

+ + + + + + +
+ Fired whenever an error is encountered by the tunnel. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
status + + +Guacamole.Status + + + + A status object which describes the error.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

oninstruction

+ + + + + + +
+ Fired once for every complete Guacamole instruction received, in order. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
opcode + + +string + + + + The Guacamole instruction opcode.
parameters + + +Array.<string> + + + + The parameters provided for the instruction, if any.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

onstatechange

+ + + + + + +
+ Fired whenever the state of the tunnel changes. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
state + + +number + + + + The new state of the client.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

onuuid

+ + + + + + +
+ Fired when the UUID that uniquely identifies this tunnel is known. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
The + + +string + + + + UUID uniquely identifying this tunnel.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/doc/1.5.5/guacamole-common-js/Guacamole.InputSink.html b/doc/1.5.5/guacamole-common-js/Guacamole.InputSink.html new file mode 100644 index 000000000..94bf07bca --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/Guacamole.InputSink.html @@ -0,0 +1,380 @@ + + + + + JSDoc: Class: InputSink + + + + + + + + + + +
+ +

Class: InputSink

+ + + + + + +
+ +
+ +

+ Guacamole.InputSink()

+ + +
+ +
+
+ + + + + + +

new InputSink()

+ + + + + + +
+ A hidden input field which attempts to keep itself focused at all times, +except when another input field has been intentionally focused, whether +programatically or by the user. The actual underlying input field, returned +by getElement(), may be used as a reliable source of keyboard-related events, +particularly composition and input events which may require a focused input +field to be dispatched at all. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + +

Methods

+ + + + + + + +

focus()

+ + + + + + +
+ Attempts to focus the underlying input field. The focus attempt occurs +asynchronously, and may silently fail depending on browser restrictions. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

getElement() → (non-null) {Element}

+ + + + + + +
+ Returns the underlying input field. This input field MUST be manually +added to the DOM for the Guacamole.InputSink to have any effect. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ The underlying input field. +
+ + + +
+
+ Type +
+
+ +Element + + +
+
+ + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/doc/1.5.5/guacamole-common-js/Guacamole.InputStream.html b/doc/1.5.5/guacamole-common-js/Guacamole.InputStream.html new file mode 100644 index 000000000..16115b240 --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/Guacamole.InputStream.html @@ -0,0 +1,713 @@ + + + + + JSDoc: Class: InputStream + + + + + + + + + + +
+ +

Class: InputStream

+ + + + + + +
+ +
+ +

+ Guacamole.InputStream(clientnon-null, indexnon-null)

+ + +
+ +
+
+ + + + + + +

new InputStream(clientnon-null, indexnon-null)

+ + + + + + +
+ An input stream abstraction used by the Guacamole client to facilitate +transfer of files or other binary data. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
client + + +Guacamole.Client + + + + The client owning this stream.
index + + +number + + + + The index of this stream.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + +

Members

+ + + +

(non-null) index :number

+ + + + +
+ The index of this stream. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + +

Methods

+ + + + + + + +

sendAck(messagenon-null, codenon-null)

+ + + + + + +
+ Acknowledges the receipt of a blob. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
message + + +string + + + + A human-readable message describing the error or status.
code + + +number + + + + The error code, if any, or 0 for success.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

Events

+ + + + + + + +

onblob

+ + + + + + +
+ Called when a blob of data is received. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
data + + +string + + + + The received base64 data.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

onend

+ + + + + + +
+ Called when this stream is closed. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/doc/1.5.5/guacamole-common-js/Guacamole.IntegerPool.html b/doc/1.5.5/guacamole-common-js/Guacamole.IntegerPool.html new file mode 100644 index 000000000..16c2cceae --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/Guacamole.IntegerPool.html @@ -0,0 +1,500 @@ + + + + + JSDoc: Class: IntegerPool + + + + + + + + + + +
+ +

Class: IntegerPool

+ + + + + + +
+ +
+ +

+ Guacamole.IntegerPool()

+ + +
+ +
+
+ + + + + + +

new IntegerPool()

+ + + + + + +
+ Integer pool which returns consistently increasing integers while integers +are in use, and previously-used integers when possible. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + +

Members

+ + + +

(non-null) next_int :number

+ + + + +
+ The next integer to return if no more integers remain. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + +

Methods

+ + + + + + + +

free(integernon-null)

+ + + + + + +
+ Frees the given integer, allowing it to be reused. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
integer + + +number + + + + The integer to free.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

next() → (non-null) {number}

+ + + + + + +
+ Returns the next available integer in the pool. If possible, a previously +used integer will be returned. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ The next available integer. +
+ + + +
+
+ Type +
+
+ +number + + +
+
+ + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/doc/1.5.5/guacamole-common-js/Guacamole.JSONReader.html b/doc/1.5.5/guacamole-common-js/Guacamole.JSONReader.html new file mode 100644 index 000000000..ec381575b --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/Guacamole.JSONReader.html @@ -0,0 +1,678 @@ + + + + + JSDoc: Class: JSONReader + + + + + + + + + + +
+ +

Class: JSONReader

+ + + + + + +
+ +
+ +

+ Guacamole.JSONReader(stream)

+ + +
+ +
+
+ + + + + + +

new JSONReader(stream)

+ + + + + + +
+ A reader which automatically handles the given input stream, assembling all +received blobs into a JavaScript object by appending them to each other, in +order, and decoding the result as JSON. Note that this object will overwrite +any installed event handlers on the given Guacamole.InputStream. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
stream + + +Guacamole.InputStream + + + + The stream that JSON will be read from.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + +

Methods

+ + + + + + + +

getJSON() → {object}

+ + + + + + +
+ Returns the contents of this Guacamole.JSONReader as a JavaScript +object. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ The contents of this Guacamole.JSONReader, as parsed from the JSON + contents of the input stream. +
+ + + +
+
+ Type +
+
+ +object + + +
+
+ + + + + + + + + + + + + +

getLength() → (non-null) {number}

+ + + + + + +
+ Returns the current length of this Guacamole.JSONReader, in characters. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ The current length of this Guacamole.JSONReader. +
+ + + +
+
+ Type +
+
+ +number + + +
+
+ + + + + + + + + + + + + +

Events

+ + + + + + + +

onend

+ + + + + + +
+ Fired once this stream is finished and no further data will be written. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

onprogress

+ + + + + + +
+ Fired once for every blob of data received. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
length + + +number + + + + The number of characters received.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/doc/1.5.5/guacamole-common-js/Guacamole.Keyboard.ModifierState.html b/doc/1.5.5/guacamole-common-js/Guacamole.Keyboard.ModifierState.html new file mode 100644 index 000000000..89380d0c6 --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/Guacamole.Keyboard.ModifierState.html @@ -0,0 +1,698 @@ + + + + + JSDoc: Class: ModifierState + + + + + + + + + + +
+ +

Class: ModifierState

+ + + + + + +
+ +
+ +

+ Guacamole.Keyboard.ModifierState()

+ + +
+ +
+
+ + + + + + +

new ModifierState()

+ + + + + + +
+ The state of all supported keyboard modifiers. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + +

Members

+ + + +

(non-null) alt :boolean

+ + + + +
+ Whether alt is currently pressed. +
+ + + +
Type:
+
    +
  • + +boolean + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) ctrl :boolean

+ + + + +
+ Whether ctrl is currently pressed. +
+ + + +
Type:
+
    +
  • + +boolean + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) hyper :boolean

+ + + + +
+ Whether hyper (windows key) is currently pressed. +
+ + + +
Type:
+
    +
  • + +boolean + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) meta :boolean

+ + + + +
+ Whether meta (apple key) is currently pressed. +
+ + + +
Type:
+
    +
  • + +boolean + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) shift :boolean

+ + + + +
+ Whether shift is currently pressed. +
+ + + +
Type:
+
    +
  • + +boolean + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + +

Methods

+ + + + + + + +

(static) fromKeyboardEvent(enon-null) → (non-null) {Guacamole.Keyboard.ModifierState}

+ + + + + + +
+ Returns the modifier state applicable to the keyboard event given. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
e + + +KeyboardEvent + + + + The keyboard event to read.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ The current state of keyboard modifiers. +
+ + + +
+
+ Type +
+
+ +Guacamole.Keyboard.ModifierState + + +
+
+ + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/doc/1.5.5/guacamole-common-js/Guacamole.Keyboard.html b/doc/1.5.5/guacamole-common-js/Guacamole.Keyboard.html new file mode 100644 index 000000000..815441215 --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/Guacamole.Keyboard.html @@ -0,0 +1,1696 @@ + + + + + JSDoc: Class: Keyboard + + + + + + + + + + +
+ +

Class: Keyboard

+ + + + + + +
+ +
+ +

+ Guacamole.Keyboard(elementopt)

+ + +
+ +
+
+ + + + + + +

new Keyboard(elementopt)

+ + + + + + +
+ Provides cross-browser and cross-keyboard keyboard for a specific element. +Browser and keyboard layout variation is abstracted away, providing events +which represent keys as their corresponding X11 keysym. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeAttributesDescription
element + + +Element +| + +Document + + + + + + <optional>
+ + + + + +
The Element to use to provide keyboard events. If omitted, at least one + Element must be manually provided through the listenTo() function for + the Guacamole.Keyboard instance to have any effect.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Classes

+ +
+
ModifierState
+
+
+ + + + + + + + + +

Members

+ + + +

(non-null) modifiers :Guacamole.Keyboard.ModifierState

+ + + + +
+ All modifiers and their states. +
+ + + +
Type:
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) pressed :Object.<number, boolean>

+ + + + +
+ The state of every key, indexed by keysym. If a particular key is +pressed, the value of pressed for that keysym will be true. If a key +is not currently pressed, it will not be defined. +
+ + + +
Type:
+
    +
  • + +Object.<number, boolean> + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + +

Methods

+ + + + + + + +

listenTo(elementnon-null)

+ + + + + + +
+ Attaches event listeners to the given Element, automatically translating +received key, input, and composition events into simple keydown/keyup +events signalled through this Guacamole.Keyboard's onkeydown and +onkeyup handlers. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
element + + +Element +| + +Document + + + + The Element to attach event listeners to for the sake of handling + key or input events.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

press(keysym) → {boolean}

+ + + + + + +
+ Marks a key as pressed, firing the keydown event if registered. Key +repeat for the pressed key will start after a delay if that key is +not a modifier. The return value of this function depends on the +return value of the keydown event handler, if any. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
keysym + + +number + + + + The keysym of the key to press.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ true if event should NOT be canceled, false otherwise. +
+ + + +
+
+ Type +
+
+ +boolean + + +
+
+ + + + + + + + + + + + + +

release(keysym)

+ + + + + + +
+ Marks a key as released, firing the keyup event if registered. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
keysym + + +number + + + + The keysym of the key to release.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

reset()

+ + + + + + +
+ Resets the state of this keyboard, releasing all keys, and firing keyup +events for each released key. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

type(strnon-null)

+ + + + + + +
+ Presses and releases the keys necessary to type the given string of +text. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
str + + +string + + + + The string to type.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

(inner) isPrintable(keysymnon-null) → (non-null) {boolean}

+ + + + + + +
+ Returns true if the given keysym corresponds to a printable character, +false otherwise. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
keysym + + +number + + + + The keysym to check.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ true if the given keysym corresponds to a printable character, + false otherwise. +
+ + + +
+
+ Type +
+
+ +boolean + + +
+
+ + + + + + + + + + + + + +

(inner) markEvent(enon-null) → (non-null) {boolean}

+ + + + + + +
+ Attempts to mark the given Event as having been handled by this +Guacamole.Keyboard. If the Event has already been marked as handled, +false is returned. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
e + + +Event + + + + The Event to mark.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ true if the given Event was successfully marked, false if the given + Event was already marked. +
+ + + +
+
+ Type +
+
+ +boolean + + +
+
+ + + + + + + + + + + + + +

Events

+ + + + + + + +

onkeydown

+ + + + + + +
+ Fired whenever the user presses a key with the element associated +with this Guacamole.Keyboard in focus. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
keysym + + +number + + + + The keysym of the key being pressed.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ true if the key event should be allowed through to the browser, + false otherwise. +
+ + + +
+
+ Type +
+
+ +boolean + + +
+
+ + + + + + + + + + + + + +

onkeyup

+ + + + + + +
+ Fired whenever the user releases a key with the element associated +with this Guacamole.Keyboard in focus. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
keysym + + +number + + + + The keysym of the key being released.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/doc/1.5.5/guacamole-common-js/Guacamole.Layer.Pixel.html b/doc/1.5.5/guacamole-common-js/Guacamole.Layer.Pixel.html new file mode 100644 index 000000000..625c0a54c --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/Guacamole.Layer.Pixel.html @@ -0,0 +1,586 @@ + + + + + JSDoc: Class: Pixel + + + + + + + + + + +
+ +

Class: Pixel

+ + + + + + +
+ +
+ +

+ Guacamole.Layer.Pixel(rnon-null, gnon-null, bnon-null, anon-null)

+ + +
+ +
+
+ + + + + + +

new Pixel(rnon-null, gnon-null, bnon-null, anon-null)

+ + + + + + +
+ Represents a single pixel of image data. All components have a minimum value +of 0 and a maximum value of 255. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
r + + +number + + + + The red component of this pixel.
g + + +number + + + + The green component of this pixel.
b + + +number + + + + The blue component of this pixel.
a + + +number + + + + The alpha component of this pixel.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + +

Members

+ + + +

(non-null) alpha :number

+ + + + +
+ The alpha component of this pixel, where 0 is the minimum value, +and 255 is the maximum. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) blue :number

+ + + + +
+ The blue component of this pixel, where 0 is the minimum value, +and 255 is the maximum. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) green :number

+ + + + +
+ The green component of this pixel, where 0 is the minimum value, +and 255 is the maximum. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) red :number

+ + + + +
+ The red component of this pixel, where 0 is the minimum value, +and 255 is the maximum. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/doc/1.5.5/guacamole-common-js/Guacamole.Layer.html b/doc/1.5.5/guacamole-common-js/Guacamole.Layer.html new file mode 100644 index 000000000..3971e9fb7 --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/Guacamole.Layer.html @@ -0,0 +1,5849 @@ + + + + + JSDoc: Class: Layer + + + + + + + + + + +
+ +

Class: Layer

+ + + + + + +
+ +
+ +

+ Guacamole.Layer(widthnon-null, heightnon-null)

+ + +
+ +
+
+ + + + + + +

new Layer(widthnon-null, heightnon-null)

+ + + + + + +
+ Abstract ordered drawing surface. Each Layer contains a canvas element and +provides simple drawing instructions for drawing to that canvas element, +however unlike the canvas element itself, drawing operations on a Layer are +guaranteed to run in order, even if such an operation must wait for an image +to load before completing. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
width + + +number + + + + The width of the Layer, in pixels. The canvas element backing this Layer + will be given this width.
height + + +number + + + + The height of the Layer, in pixels. The canvas element backing this + Layer will be given this height.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Classes

+ +
+
Pixel
+
+
+ + + + + + + + + +

Members

+ + + +

(non-null) autosize :boolean

+ + + + +
+ Set to true if this Layer should resize itself to accommodate the +dimensions of any drawing operation, and false (the default) otherwise. + +Note that setting this property takes effect immediately, and thus may +take effect on operations that were started in the past but have not +yet completed. If you wish the setting of this flag to only modify +future operations, you will need to make the setting of this flag an +operation with sync(). +
+ + + +
Type:
+
    +
  • + +boolean + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
Default Value:
+
    +
  • false
  • +
+ + + +
Source:
+
+ + + + + + + +
+ + + + + +
Example
+ +
// Set autosize to true for all future operations
+layer.sync(function() {
+    layer.autosize = true;
+});
+ + + + + +

(non-null) height :number

+ + + + +
+ The current height of this layer. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) width :number

+ + + + +
+ The current width of this layer. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(static, non-null) ATOP :number

+ + + + +
+ Channel mask for the composite operation "atop". +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(static, non-null) IN :number

+ + + + +
+ Channel mask for the composite operation "in". +Beware that WebKit-based browsers may leave the contents of the destination +layer where the source layer is transparent, despite the definition of this +operation. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(static, non-null) OUT :number

+ + + + +
+ Channel mask for the composite operation "out". +Beware that WebKit-based browsers may leave the contents of the destination +layer where the source layer is transparent, despite the definition of this +operation. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(static, non-null) OVER :number

+ + + + +
+ Channel mask for the composite operation "over". +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(static, non-null) PLUS :number

+ + + + +
+ Channel mask for the composite operation "plus". +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(static, non-null) RATOP :number

+ + + + +
+ Channel mask for the composite operation "ratop". +Beware that WebKit-based browsers may leave the contents of the destination +layer where the source layer is transparent, despite the definition of this +operation. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(static, non-null) RIN :number

+ + + + +
+ Channel mask for the composite operation "rin". +Beware that WebKit-based browsers may leave the contents of the destination +layer where the source layer is transparent, despite the definition of this +operation. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(static, non-null) ROUT :number

+ + + + +
+ Channel mask for the composite operation "rout". +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(static, non-null) ROVER :number

+ + + + +
+ Channel mask for the composite operation "rover". +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(static, non-null) SRC :number

+ + + + +
+ Channel mask for the composite operation "src". +Beware that WebKit-based browsers may leave the contents of the destination +layer where the source layer is transparent, despite the definition of this +operation. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(static, non-null) XOR :number

+ + + + +
+ Channel mask for the composite operation "xor". +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + +

Methods

+ + + + + + + +

arc(xnon-null, ynon-null, radiusnon-null, startAnglenon-null, endAnglenon-null, negativenon-null)

+ + + + + + +
+ Add the specified arc to the current path. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
x + + +number + + + + The X coordinate of the center of the circle which will contain the + arc.
y + + +number + + + + The Y coordinate of the center of the circle which will contain the + arc.
radius + + +number + + + + The radius of the circle.
startAngle + + +number + + + + The starting angle of the arc, in radians.
endAngle + + +number + + + + The ending angle of the arc, in radians.
negative + + +boolean + + + + Whether the arc should be drawn in order of decreasing angle.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

clip()

+ + + + + + +
+ Clip all future drawing operations by the current path. The current path +is implicitly closed. The current path can continue to be reused +for other operations (such as fillColor()) but a new path will be started +once a path drawing operation (path() or rect()) is used. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

close()

+ + + + + + +
+ Closes the current path by connecting the end point with the start +point (if any) with a straight line. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

copy(srcLayernon-null, srcxnon-null, srcynon-null, srcwnon-null, srchnon-null, xnon-null, ynon-null)

+ + + + + + +
+ Copy a rectangle of image data from one Layer to this Layer. This +operation will copy exactly the image data that will be drawn once all +operations of the source Layer that were pending at the time this +function was called are complete. This operation will not alter the +size of the source Layer even if its autosize property is set to true. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
srcLayer + + +Guacamole.Layer + + + + The Layer to copy image data from.
srcx + + +number + + + + The X coordinate of the upper-left corner of the rectangle within + the source Layer's coordinate space to copy data from.
srcy + + +number + + + + The Y coordinate of the upper-left corner of the rectangle within + the source Layer's coordinate space to copy data from.
srcw + + +number + + + + The width of the rectangle within the source Layer's coordinate + space to copy data from.
srch + + +number + + + + The height of the rectangle within the source Layer's coordinate + space to copy data from.
x + + +number + + + + The destination X coordinate.
y + + +number + + + + The destination Y coordinate.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

curveTo(cp1xnon-null, cp1ynon-null, cp2xnon-null, cp2ynon-null, xnon-null, ynon-null)

+ + + + + + +
+ Starts a new path at the specified point. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
cp1x + + +number + + + + The X coordinate of the first control point.
cp1y + + +number + + + + The Y coordinate of the first control point.
cp2x + + +number + + + + The X coordinate of the second control point.
cp2y + + +number + + + + The Y coordinate of the second control point.
x + + +number + + + + The X coordinate of the endpoint of the curve.
y + + +number + + + + The Y coordinate of the endpoint of the curve.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

drawImage(xnon-null, ynon-null, imagenon-null)

+ + + + + + +
+ Draws the specified image at the given coordinates. The image specified +must already be loaded. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
x + + +number + + + + The destination X coordinate.
y + + +number + + + + The destination Y coordinate.
image + + +CanvasImageSource + + + + The image to draw. Note that this is not a URL.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

fillColor(rnon-null, gnon-null, bnon-null, anon-null)

+ + + + + + +
+ Fills the current path with the specified color. The current path +is implicitly closed. The current path can continue to be reused +for other operations (such as clip()) but a new path will be started +once a path drawing operation (path() or rect()) is used. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
r + + +number + + + + The red component of the color to fill.
g + + +number + + + + The green component of the color to fill.
b + + +number + + + + The blue component of the color to fill.
a + + +number + + + + The alpha component of the color to fill.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

fillLayer(srcLayernon-null)

+ + + + + + +
+ Fills the current path with the image within the specified layer. The +image data will be tiled infinitely within the stroke. The current path +is implicitly closed. The current path can continue to be reused +for other operations (such as clip()) but a new path will be started +once a path drawing operation (path() or rect()) is used. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
srcLayer + + +Guacamole.Layer + + + + The layer to use as a repeating pattern within the fill.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

getCanvas() → (non-null) {HTMLCanvasElement}

+ + + + + + +
+ Returns the canvas element backing this Layer. Note that the dimensions +of the canvas may not exactly match those of the Layer, as resizing a +canvas while maintaining its state is an expensive operation. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ The canvas element backing this Layer. +
+ + + +
+
+ Type +
+
+ +HTMLCanvasElement + + +
+
+ + + + + + + + + + + + + +

lineTo(xnon-null, ynon-null)

+ + + + + + +
+ Add the specified line to the current path. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
x + + +number + + + + The X coordinate of the endpoint of the line to draw.
y + + +number + + + + The Y coordinate of the endpoint of the line to draw.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

moveTo(xnon-null, ynon-null)

+ + + + + + +
+ Starts a new path at the specified point. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
x + + +number + + + + The X coordinate of the point to draw.
y + + +number + + + + The Y coordinate of the point to draw.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

pop()

+ + + + + + +
+ Pop layer state off stack. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

push()

+ + + + + + +
+ Push current layer state onto stack. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

put(srcLayernon-null, srcxnon-null, srcynon-null, srcwnon-null, srchnon-null, xnon-null, ynon-null)

+ + + + + + +
+ Put a rectangle of image data from one Layer to this Layer directly +without performing any alpha blending. Simply copy the data. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
srcLayer + + +Guacamole.Layer + + + + The Layer to copy image data from.
srcx + + +number + + + + The X coordinate of the upper-left corner of the rectangle within + the source Layer's coordinate space to copy data from.
srcy + + +number + + + + The Y coordinate of the upper-left corner of the rectangle within + the source Layer's coordinate space to copy data from.
srcw + + +number + + + + The width of the rectangle within the source Layer's coordinate + space to copy data from.
srch + + +number + + + + The height of the rectangle within the source Layer's coordinate + space to copy data from.
x + + +number + + + + The destination X coordinate.
y + + +number + + + + The destination Y coordinate.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

rect(xnon-null, ynon-null, wnon-null, hnon-null)

+ + + + + + +
+ Add the specified rectangle to the current path. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
x + + +number + + + + The X coordinate of the upper-left corner of the rectangle to draw.
y + + +number + + + + The Y coordinate of the upper-left corner of the rectangle to draw.
w + + +number + + + + The width of the rectangle to draw.
h + + +number + + + + The height of the rectangle to draw.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

reset()

+ + + + + + +
+ Reset the layer, clearing the stack, the current path, and any transform +matrix. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

resize(newWidthnon-null, newHeightnon-null)

+ + + + + + +
+ Changes the size of this Layer to the given width and height. Resizing +is only attempted if the new size provided is actually different from +the current size. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
newWidth + + +number + + + + The new width to assign to this Layer.
newHeight + + +number + + + + The new height to assign to this Layer.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

setChannelMask(masknon-null)

+ + + + + + +
+ Sets the channel mask for future operations on this Layer. + +The channel mask is a Guacamole-specific compositing operation identifier +with a single bit representing each of four channels (in order): source +image where destination transparent, source where destination opaque, +destination where source transparent, and destination where source +opaque. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
mask + + +number + + + + The channel mask for future operations on this Layer.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

setMiterLimit(limitnon-null)

+ + + + + + +
+ Sets the miter limit for stroke operations using the miter join. This +limit is the maximum ratio of the size of the miter join to the stroke +width. If this ratio is exceeded, the miter will not be drawn for that +joint of the path. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
limit + + +number + + + + The miter limit for stroke operations using the miter join.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

setTransform(anon-null, bnon-null, cnon-null, dnon-null, enon-null, fnon-null)

+ + + + + + +
+ Sets the given affine transform (defined with six values from the +transform's matrix). +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
a + + +number + + + + The first value in the affine transform's matrix.
b + + +number + + + + The second value in the affine transform's matrix.
c + + +number + + + + The third value in the affine transform's matrix.
d + + +number + + + + The fourth value in the affine transform's matrix.
e + + +number + + + + The fifth value in the affine transform's matrix.
f + + +number + + + + The sixth value in the affine transform's matrix.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

strokeColor(capnon-null, joinnon-null, thicknessnon-null, rnon-null, gnon-null, bnon-null, anon-null)

+ + + + + + +
+ Stroke the current path with the specified color. The current path +is implicitly closed. The current path can continue to be reused +for other operations (such as clip()) but a new path will be started +once a path drawing operation (path() or rect()) is used. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
cap + + +string + + + + The line cap style. Can be "round", "square", or "butt".
join + + +string + + + + The line join style. Can be "round", "bevel", or "miter".
thickness + + +number + + + + The line thickness in pixels.
r + + +number + + + + The red component of the color to fill.
g + + +number + + + + The green component of the color to fill.
b + + +number + + + + The blue component of the color to fill.
a + + +number + + + + The alpha component of the color to fill.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

strokeLayer(capnon-null, joinnon-null, thicknessnon-null, srcLayernon-null)

+ + + + + + +
+ Stroke the current path with the image within the specified layer. The +image data will be tiled infinitely within the stroke. The current path +is implicitly closed. The current path can continue to be reused +for other operations (such as clip()) but a new path will be started +once a path drawing operation (path() or rect()) is used. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
cap + + +string + + + + The line cap style. Can be "round", "square", or "butt".
join + + +string + + + + The line join style. Can be "round", "bevel", or "miter".
thickness + + +number + + + + The line thickness in pixels.
srcLayer + + +Guacamole.Layer + + + + The layer to use as a repeating pattern within the stroke.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

toCanvas() → (non-null) {HTMLCanvasElement}

+ + + + + + +
+ Returns a new canvas element containing the same image as this Layer. +Unlike getCanvas(), the canvas element returned is guaranteed to have +the exact same dimensions as the Layer. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ A new canvas element containing a copy of the image content this + Layer. +
+ + + +
+
+ Type +
+
+ +HTMLCanvasElement + + +
+
+ + + + + + + + + + + + + +

transfer(srcLayernon-null, srcxnon-null, srcynon-null, srcwnon-null, srchnon-null, xnon-null, ynon-null, transferFunctionnon-null)

+ + + + + + +
+ Transfer a rectangle of image data from one Layer to this Layer using the +specified transfer function. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
srcLayer + + +Guacamole.Layer + + + + The Layer to copy image data from.
srcx + + +number + + + + The X coordinate of the upper-left corner of the rectangle within + the source Layer's coordinate space to copy data from.
srcy + + +number + + + + The Y coordinate of the upper-left corner of the rectangle within + the source Layer's coordinate space to copy data from.
srcw + + +number + + + + The width of the rectangle within the source Layer's coordinate + space to copy data from.
srch + + +number + + + + The height of the rectangle within the source Layer's coordinate + space to copy data from.
x + + +number + + + + The destination X coordinate.
y + + +number + + + + The destination Y coordinate.
transferFunction + + +function + + + + The transfer function to use to transfer data from source to + destination.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

transform(anon-null, bnon-null, cnon-null, dnon-null, enon-null, fnon-null)

+ + + + + + +
+ Applies the given affine transform (defined with six values from the +transform's matrix). +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
a + + +number + + + + The first value in the affine transform's matrix.
b + + +number + + + + The second value in the affine transform's matrix.
c + + +number + + + + The third value in the affine transform's matrix.
d + + +number + + + + The fourth value in the affine transform's matrix.
e + + +number + + + + The fifth value in the affine transform's matrix.
f + + +number + + + + The sixth value in the affine transform's matrix.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/doc/1.5.5/guacamole-common-js/Guacamole.Mouse.Event.Target.html b/doc/1.5.5/guacamole-common-js/Guacamole.Mouse.Event.Target.html new file mode 100644 index 000000000..a334ddb25 --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/Guacamole.Mouse.Event.Target.html @@ -0,0 +1,2881 @@ + + + + + JSDoc: Class: Target + + + + + + + + + + +
+ +

Class: Target

+ + + + + + +
+ +
+ +

+ Guacamole.Mouse.Event.Target()

+ + +
+ +
+
+ + + + + + +

new Target()

+ + + + + + +
+ An object which can dispatch Guacamole.Mouse.Event objects +representing mouse events. These mouse events may be produced from an actual +mouse device (as with Guacamole.Mouse), from an emulated mouse +device (as with Guacamole.Mouse.Touchpad, or may be programmatically +generated (using functions like dispatch(), +press(), and +release()). +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + +

Extends

+ + + + + + + + + + + + + + + + + + + + +

Members

+ + + +

(non-null) currentState :Guacamole.Mouse.State

+ + + + +
+ The current mouse state. The properties of this state are updated when +mouse events fire. This state object is also passed in as a parameter to +the handler of any mouse events. +
+ + + +
Type:
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + +

Methods

+ + + + + + + +

click(buttonnon-null, eventsopt)

+ + + + + + +
+ Clicks (presses and releases) the given mouse button. Valid button +names are defined by Guacamole.Mouse.State.Buttons and +correspond to the button-related properties of +Guacamole.Mouse.State. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
button + + +string + + + + + + + + + + + + The name of the mouse button to click, as defined by + Guacamole.Mouse.State.Buttons.
events + + +Event +| + +Array.<Event> + + + + + + <optional>
+ + + + + +
+ + [] + + The DOM events related to the click, if any.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + +
Fires:
+ + + + + + + + + + + + + + + + + + + + + + + +

dispatch(eventnon-null)

+ + + + + + +
+ Dispatches the given event, invoking all event handlers registered with +this Guacamole.Event.Target for that event's +type. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
event + + +Guacamole.Event + + + + The event to dispatch.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

move(positionnon-null, eventsopt)

+ + + + + + +
+ Moves the mouse to the given coordinates. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
position + + +Guacamole.Position +| + +object + + + + + + + + + + + + The new coordinates of the mouse pointer. This object may be a + Guacamole.Position or any object with "x" and "y" + properties.
events + + +Event +| + +Array.<Event> + + + + + + <optional>
+ + + + + +
+ + [] + + The DOM events related to the mouse movement, if any.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + +
Fires:
+ + + + + + + + + + + + + + + + + + + + + + + +

off(typenon-null, listenernon-null) → (non-null) {boolean}

+ + + + + + +
+ Unregisters a listener that was previously registered with +on() or +onEach(). If no such listener was +registered, this function has no effect. If multiple copies of the same +listener were registered, the first listener still registered will be +removed. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
type + + +string + + + + The unique name of the event type handled by the listener being + removed.
listener + + +Guacamole.Event.Target~listener + + + + The listener function previously provided to + on()or + onEach().
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ true if the specified listener was removed, false otherwise. +
+ + + +
+
+ Type +
+
+ +boolean + + +
+
+ + + + + + + + + + + + + +

offEach(typesnon-null, listenernon-null) → (non-null) {boolean}

+ + + + + + +
+ Unregisters listeners that were previously registered with +on() or +onEach(). If no such listeners +were registered, this function has no effect. If multiple copies of the +same listener were registered for the same event type, the first +listener still registered will be removed. +

+Invoking this function is equivalent to manually invoking +off() for each of the provided types. +

+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
types + + +Array.<string> + + + + The unique names of the event types handled by the listeners being + removed.
listener + + +Guacamole.Event.Target~listener + + + + The listener function previously provided to + on() or + onEach().
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ true if any of the specified listeners were removed, false + otherwise. +
+ + + +
+
+ Type +
+
+ +boolean + + +
+
+ + + + + + + + + + + + + +

on(typenon-null, listenernon-null)

+ + + + + + +
+ Registers a listener for events having the given type, as dictated by +the type property of Guacamole.Event +provided to dispatch(). +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
type + + +string + + + + The unique name of this event type.
listener + + +Guacamole.Event.Target~listener + + + + The function to invoke when an event having the given type is + dispatched. The Guacamole.Event object provided to + dispatch() will be passed to + this function, along with the dispatching Guacamole.Event.Target.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

onEach(typesnon-null, listenernon-null)

+ + + + + + +
+ Registers a listener for events having the given types, as dictated by +the type property of Guacamole.Event +provided to dispatch(). +

+Invoking this function is equivalent to manually invoking +on() for each of the provided types. +

+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
types + + +Array.<string> + + + + The unique names of the event types to associate with the given + listener.
listener + + +Guacamole.Event.Target~listener + + + + The function to invoke when an event having any of the given types + is dispatched. The Guacamole.Event object provided to + dispatch() will be passed to + this function, along with the dispatching Guacamole.Event.Target.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

out(eventsopt)

+ + + + + + +
+ Notifies event listeners that the mouse pointer has left the boundaries +of the area being monitored for mouse events. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
events + + +Event +| + +Array.<Event> + + + + + + <optional>
+ + + + + +
+ + [] + + The DOM events related to the mouse leaving the boundaries of the + monitored object, if any.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + +
Fires:
+ + + + + + + + + + + + + + + + + + + + + + + +

press(buttonnon-null, eventsopt)

+ + + + + + +
+ Presses the given mouse button, if it isn't already pressed. Valid +button names are defined by Guacamole.Mouse.State.Buttons and +correspond to the button-related properties of +Guacamole.Mouse.State. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
button + + +string + + + + + + + + + + + + The name of the mouse button to press, as defined by + Guacamole.Mouse.State.Buttons.
events + + +Event +| + +Array.<Event> + + + + + + <optional>
+ + + + + +
+ + [] + + The DOM events that are related to the mouse button press, if any.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + +
Fires:
+ + + + + + + + + + + + + + + + + + + + + + + +

release(buttonnon-null, eventsopt)

+ + + + + + +
+ Releases the given mouse button, if it isn't already released. Valid +button names are defined by Guacamole.Mouse.State.Buttons and +correspond to the button-related properties of +Guacamole.Mouse.State. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
button + + +string + + + + + + + + + + + + The name of the mouse button to release, as defined by + Guacamole.Mouse.State.Buttons.
events + + +Event +| + +Array.<Event> + + + + + + <optional>
+ + + + + +
+ + [] + + The DOM events related to the mouse button release, if any.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + +
Fires:
+ + + + + + + + + + + + + + + + + + + + + + + +

reset(eventsopt)

+ + + + + + +
+ Releases all mouse buttons that are currently pressed. If all mouse +buttons have already been released, this function has no effect. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
events + + +Event +| + +Array.<Event> + + + + + + <optional>
+ + + + + +
+ + [] + + The DOM event related to all mouse buttons being released, if any.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + +
Fires:
+ + + + + + + + + + + + + + + + + + + + + + + +

Events

+ + + + + + + +

mousedown

+ + + + + + +
+ Fired whenever a mouse button is effectively pressed. Depending on the +object dispatching the event, this can be due to a true mouse button +press (Guacamole.Mouse), an emulated mouse button press from a +touch gesture (Guacamole.Mouse.Touchpad and +Guacamole.Mouse.Touchscreen), or may be programmatically +generated through dispatch(), +press(), or +click(). +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
event + + +Guacamole.Mouse.Event + + + + The mousedown event that was fired.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

mousemove

+ + + + + + +
+ Fired whenever the mouse pointer is effectively moved. Depending on the +object dispatching the event, this can be due to true mouse movement +(Guacamole.Mouse), emulated mouse movement from +a touch gesture (Guacamole.Mouse.Touchpad and +Guacamole.Mouse.Touchscreen), or may be programmatically +generated through dispatch(), +or move(). +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
event + + +Guacamole.Mouse.Event + + + + The mousemove event that was fired.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

mouseout

+ + + + + + +
+ Fired whenever the mouse pointer leaves the boundaries of the element +being monitored for interaction. This will only ever be automatically +fired due to movement of an actual mouse device via +Guacamole.Mouse unless programmatically generated through +dispatch(), +or out(). +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
event + + +Guacamole.Mouse.Event + + + + The mouseout event that was fired.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

mouseup

+ + + + + + +
+ Fired whenever a mouse button is effectively released. Depending on the +object dispatching the event, this can be due to a true mouse button +release (Guacamole.Mouse), an emulated mouse button release from +a touch gesture (Guacamole.Mouse.Touchpad and +Guacamole.Mouse.Touchscreen), or may be programmatically +generated through dispatch(), +release(), or +click(). +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
event + + +Guacamole.Mouse.Event + + + + The mouseup event that was fired.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/doc/1.5.5/guacamole-common-js/Guacamole.Mouse.Event.html b/doc/1.5.5/guacamole-common-js/Guacamole.Mouse.Event.html new file mode 100644 index 000000000..c9f3d1870 --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/Guacamole.Mouse.Event.html @@ -0,0 +1,1025 @@ + + + + + JSDoc: Class: Event + + + + + + + + + + +
+ +

Class: Event

+ + + + + + +
+ +
+ +

+ Guacamole.Mouse.Event(typenon-null, statenon-null, eventsopt)

+ + +
+ +
+
+ + + + + + +

new Event(typenon-null, statenon-null, eventsopt)

+ + + + + + +
+ Base event type for all mouse events. The mouse producing the event may be +the user's local mouse (as with Guacamole.Mouse) or an emulated +mouse (as with Guacamole.Mouse.Touchpad). +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
type + + +string + + + + + + + + + + + + The type name of the event ("mousedown", "mouseup", etc.)
state + + +Guacamole.Mouse.State + + + + + + + + + + + + The current mouse state.
events + + +Event +| + +Array.<Event> + + + + + + <optional>
+ + + + + +
+ + [] + + The DOM events that are related to this event, if any.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + +

Extends

+ + + + + + + + + + + + +

Classes

+ +
+
Target
+
+
+ + + + + + + + + +

Members

+ + + +

(non-null) state :Guacamole.Mouse.State

+ + + + +
+ The current mouse state at the time this event was fired. +
+ + + +
Type:
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) timestamp :number

+ + + + +
+ An arbitrary timestamp in milliseconds, indicating this event's +position in time relative to other events. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) type :string

+ + + + +
+ The unique name of this event type. +
+ + + +
Type:
+
    +
  • + +string + + +
  • +
+ + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + +

Methods

+ + + + + + + +

getAge() → (non-null) {number}

+ + + + + + +
+ Returns the number of milliseconds elapsed since this event was created. +
+ + + + + + + + + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ The number of milliseconds elapsed since this event was created. +
+ + + +
+
+ Type +
+
+ +number + + +
+
+ + + + + + + + + + + + + +

invokeLegacyHandler(eventTargetnon-null)

+ + + + + + +
+ Requests that the legacy event handler associated with this event be +invoked on the given event target. This function will be invoked +automatically by implementations of Guacamole.Event.Target +whenever emit() is invoked. +

+Older versions of Guacamole relied on single event handlers with the +prefix "on", such as "onmousedown" or "onkeyup". If a Guacamole.Event +implementation is replacing the event previously represented by one of +these handlers, this function gives the implementation the opportunity +to provide backward compatibility with the old handler. +

+Unless overridden, this function does nothing. +

+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
eventTarget + + +Guacamole.Event.Target + + + + The Guacamole.Event.Target that emitted this event.
+ + + + + + +
+ + + + + + + + +
Overrides:
+
+ + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

preventDefault()

+ + + + + + +
+ Requests that the default behavior of related DOM events be prevented. +Whether this request will be honored by the browser depends on the +nature of those events and the timing of the request. +
+ + + + + + + + + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

stopPropagation()

+ + + + + + +
+ Stops further propagation of related events through the DOM. Only events +that are directly related to this event will be stopped. +
+ + + + + + + + + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/doc/1.5.5/guacamole-common-js/Guacamole.Mouse.State.html b/doc/1.5.5/guacamole-common-js/Guacamole.Mouse.State.html new file mode 100644 index 000000000..6ddcdfeb1 --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/Guacamole.Mouse.State.html @@ -0,0 +1,1222 @@ + + + + + JSDoc: Class: State + + + + + + + + + + +
+ +

Class: State

+ + + + + + +
+ +
+ +

+ Guacamole.Mouse.State(templateopt)

+ + +
+ +
+
+ + + + + + +

new State(templateopt)

+ + + + + + +
+ The current state of a mouse, including position and buttons. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
template + + +Guacamole.Mouse.State +| + +object + + + + + + <optional>
+ + + + + +
+ + {} + + The object whose properties should be copied within the new + Guacamole.Mouse.State.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + +

Extends

+ + + + + + + + + + + + + + + + + + + + +

Members

+ + + +

(non-null) down :boolean

+ + + + +
+ Whether the down mouse button is currently pressed. This is the fifth +mouse button, associated with downward scrolling of the mouse scroll +wheel. +
+ + + +
Type:
+
    +
  • + +boolean + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
Default Value:
+
    +
  • false
  • +
+ + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) left :boolean

+ + + + +
+ Whether the left mouse button is currently pressed. +
+ + + +
Type:
+
    +
  • + +boolean + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
Default Value:
+
    +
  • false
  • +
+ + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) middle :boolean

+ + + + +
+ Whether the middle mouse button is currently pressed. +
+ + + +
Type:
+
    +
  • + +boolean + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
Default Value:
+
    +
  • false
  • +
+ + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + +
+ Whether the right mouse button is currently pressed. +
+ + + +
Type:
+
    +
  • + +boolean + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
Default Value:
+
    +
  • false
  • +
+ + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) up :boolean

+ + + + +
+ Whether the up mouse button is currently pressed. This is the fourth +mouse button, associated with upward scrolling of the mouse scroll +wheel. +
+ + + +
Type:
+
    +
  • + +boolean + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
Default Value:
+
    +
  • false
  • +
+ + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) x :number

+ + + + +
+ The current X position, in pixels. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + +
Default Value:
+
    +
  • 0
  • +
+ + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) y :number

+ + + + +
+ The current Y position, in pixels. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + +
Default Value:
+
    +
  • 0
  • +
+ + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(static, readonly) Buttons

+ + + + +
+ All mouse buttons that may be represented by a +Guacamole.Mouse.State. +
+ + + + + + + +
Properties:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
LEFT + + +string + + + + The name of the Guacamole.Mouse.State property representing the +left mouse button.
MIDDLE + + +string + + + + The name of the Guacamole.Mouse.State property representing the +middle mouse button.
RIGHT + + +string + + + + The name of the Guacamole.Mouse.State property representing the +right mouse button.
UP + + +string + + + + The name of the Guacamole.Mouse.State property representing the +up mouse button (the fourth mouse button, clicked when the mouse scroll +wheel is scrolled up).
DOWN + + +string + + + + The name of the Guacamole.Mouse.State property representing the +down mouse button (the fifth mouse button, clicked when the mouse scroll +wheel is scrolled up).
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + +

Methods

+ + + + + + + +

fromClientPosition(elementnon-null, clientXnon-null, clientYnon-null)

+ + + + + + +
+ Assigns the position represented by the given element and +clientX/clientY coordinates. The clientX and clientY coordinates are +relative to the browser viewport and are commonly available within +JavaScript event objects. The final position is translated to +coordinates that are relative the given element. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
element + + +Element + + + + The element the coordinates should be relative to.
clientX + + +number + + + + The viewport-relative X coordinate to translate.
clientY + + +number + + + + The viewport-relative Y coordinate to translate.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/doc/1.5.5/guacamole-common-js/Guacamole.Mouse.Touchpad.html b/doc/1.5.5/guacamole-common-js/Guacamole.Mouse.Touchpad.html new file mode 100644 index 000000000..bb8514eaf --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/Guacamole.Mouse.Touchpad.html @@ -0,0 +1,3072 @@ + + + + + JSDoc: Class: Touchpad + + + + + + + + + + +
+ +

Class: Touchpad

+ + + + + + +
+ +
+ +

+ Guacamole.Mouse.Touchpad(elementnon-null)

+ + +
+ +
+
+ + + + + + +

new Touchpad(elementnon-null)

+ + + + + + +
+ Provides cross-browser relative touch event translation for a given element. + +Touch events are translated into mouse events as if the touches occurred +on a touchpad (drag to push the mouse pointer, tap to click). +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
element + + +Element + + + + The Element to use to provide touch events.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Example
+ +
var touchpad = new Guacamole.Mouse.Touchpad(client.getDisplay().getElement());
+
+// Emulate a mouse using touchpad-style gestures, forwarding all mouse
+// interaction over Guacamole connection
+touchpad.onEach(['mousedown', 'mousemove', 'mouseup'], function sendMouseEvent(e) {
+
+    // Re-show software mouse cursor if possibly hidden by a prior call to
+    // showCursor(), such as a "mouseout" event handler that hides the
+    // cursor
+    client.getDisplay().showCursor(true);
+
+    client.sendMouseState(e.state, true);
+
+});
+ + + + +
+ + +

Extends

+ + + + + + + + + + + + + + + + + + + + +

Members

+ + + +

(non-null) clickMoveThreshold :number

+ + + + +
+ The maximum number of pixels to allow a touch to move for the gesture to +be considered a click. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) clickTimingThreshold :number

+ + + + +
+ The maximum number of milliseconds to wait for a touch to end for the +gesture to be considered a click. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) currentState :Guacamole.Mouse.State

+ + + + +
+ The current mouse state. The properties of this state are updated when +mouse events fire. This state object is also passed in as a parameter to +the handler of any mouse events. +
+ + + +
Type:
+ + + + + + +
+ + + + + + + + +
Overrides:
+
+ + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) scrollThreshold :number

+ + + + +
+ The distance a two-finger touch must move per scrollwheel event, in +pixels. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + +

Methods

+ + + + + + + +

click(buttonnon-null, eventsopt)

+ + + + + + +
+ Clicks (presses and releases) the given mouse button. Valid button +names are defined by Guacamole.Mouse.State.Buttons and +correspond to the button-related properties of +Guacamole.Mouse.State. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
button + + +string + + + + + + + + + + + + The name of the mouse button to click, as defined by + Guacamole.Mouse.State.Buttons.
events + + +Event +| + +Array.<Event> + + + + + + <optional>
+ + + + + +
+ + [] + + The DOM events related to the click, if any.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + +
Fires:
+ + + + + + + + + + + + + + + + + + + + + + + +

dispatch(eventnon-null)

+ + + + + + +
+ Dispatches the given event, invoking all event handlers registered with +this Guacamole.Event.Target for that event's +type. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
event + + +Guacamole.Event + + + + The event to dispatch.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

move(positionnon-null, eventsopt)

+ + + + + + +
+ Moves the mouse to the given coordinates. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
position + + +Guacamole.Position +| + +object + + + + + + + + + + + + The new coordinates of the mouse pointer. This object may be a + Guacamole.Position or any object with "x" and "y" + properties.
events + + +Event +| + +Array.<Event> + + + + + + <optional>
+ + + + + +
+ + [] + + The DOM events related to the mouse movement, if any.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + +
Fires:
+ + + + + + + + + + + + + + + + + + + + + + + +

off(typenon-null, listenernon-null) → (non-null) {boolean}

+ + + + + + +
+ Unregisters a listener that was previously registered with +on() or +onEach(). If no such listener was +registered, this function has no effect. If multiple copies of the same +listener were registered, the first listener still registered will be +removed. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
type + + +string + + + + The unique name of the event type handled by the listener being + removed.
listener + + +Guacamole.Event.Target~listener + + + + The listener function previously provided to + on()or + onEach().
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ true if the specified listener was removed, false otherwise. +
+ + + +
+
+ Type +
+
+ +boolean + + +
+
+ + + + + + + + + + + + + +

offEach(typesnon-null, listenernon-null) → (non-null) {boolean}

+ + + + + + +
+ Unregisters listeners that were previously registered with +on() or +onEach(). If no such listeners +were registered, this function has no effect. If multiple copies of the +same listener were registered for the same event type, the first +listener still registered will be removed. +

+Invoking this function is equivalent to manually invoking +off() for each of the provided types. +

+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
types + + +Array.<string> + + + + The unique names of the event types handled by the listeners being + removed.
listener + + +Guacamole.Event.Target~listener + + + + The listener function previously provided to + on() or + onEach().
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ true if any of the specified listeners were removed, false + otherwise. +
+ + + +
+
+ Type +
+
+ +boolean + + +
+
+ + + + + + + + + + + + + +

on(typenon-null, listenernon-null)

+ + + + + + +
+ Registers a listener for events having the given type, as dictated by +the type property of Guacamole.Event +provided to dispatch(). +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
type + + +string + + + + The unique name of this event type.
listener + + +Guacamole.Event.Target~listener + + + + The function to invoke when an event having the given type is + dispatched. The Guacamole.Event object provided to + dispatch() will be passed to + this function, along with the dispatching Guacamole.Event.Target.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

onEach(typesnon-null, listenernon-null)

+ + + + + + +
+ Registers a listener for events having the given types, as dictated by +the type property of Guacamole.Event +provided to dispatch(). +

+Invoking this function is equivalent to manually invoking +on() for each of the provided types. +

+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
types + + +Array.<string> + + + + The unique names of the event types to associate with the given + listener.
listener + + +Guacamole.Event.Target~listener + + + + The function to invoke when an event having any of the given types + is dispatched. The Guacamole.Event object provided to + dispatch() will be passed to + this function, along with the dispatching Guacamole.Event.Target.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

out(eventsopt)

+ + + + + + +
+ Notifies event listeners that the mouse pointer has left the boundaries +of the area being monitored for mouse events. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
events + + +Event +| + +Array.<Event> + + + + + + <optional>
+ + + + + +
+ + [] + + The DOM events related to the mouse leaving the boundaries of the + monitored object, if any.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + +
Fires:
+ + + + + + + + + + + + + + + + + + + + + + + +

press(buttonnon-null, eventsopt)

+ + + + + + +
+ Presses the given mouse button, if it isn't already pressed. Valid +button names are defined by Guacamole.Mouse.State.Buttons and +correspond to the button-related properties of +Guacamole.Mouse.State. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
button + + +string + + + + + + + + + + + + The name of the mouse button to press, as defined by + Guacamole.Mouse.State.Buttons.
events + + +Event +| + +Array.<Event> + + + + + + <optional>
+ + + + + +
+ + [] + + The DOM events that are related to the mouse button press, if any.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + +
Fires:
+ + + + + + + + + + + + + + + + + + + + + + + +

release(buttonnon-null, eventsopt)

+ + + + + + +
+ Releases the given mouse button, if it isn't already released. Valid +button names are defined by Guacamole.Mouse.State.Buttons and +correspond to the button-related properties of +Guacamole.Mouse.State. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
button + + +string + + + + + + + + + + + + The name of the mouse button to release, as defined by + Guacamole.Mouse.State.Buttons.
events + + +Event +| + +Array.<Event> + + + + + + <optional>
+ + + + + +
+ + [] + + The DOM events related to the mouse button release, if any.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + +
Fires:
+ + + + + + + + + + + + + + + + + + + + + + + +

reset(eventsopt)

+ + + + + + +
+ Releases all mouse buttons that are currently pressed. If all mouse +buttons have already been released, this function has no effect. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
events + + +Event +| + +Array.<Event> + + + + + + <optional>
+ + + + + +
+ + [] + + The DOM event related to all mouse buttons being released, if any.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + +
Fires:
+ + + + + + + + + + + + + + + + + + + + + + + +

Events

+ + + + + + + +

mousedown

+ + + + + + +
+ Fired whenever a mouse button is effectively pressed. Depending on the +object dispatching the event, this can be due to a true mouse button +press (Guacamole.Mouse), an emulated mouse button press from a +touch gesture (Guacamole.Mouse.Touchpad and +Guacamole.Mouse.Touchscreen), or may be programmatically +generated through dispatch(), +press(), or +click(). +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
event + + +Guacamole.Mouse.Event + + + + The mousedown event that was fired.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

mousemove

+ + + + + + +
+ Fired whenever the mouse pointer is effectively moved. Depending on the +object dispatching the event, this can be due to true mouse movement +(Guacamole.Mouse), emulated mouse movement from +a touch gesture (Guacamole.Mouse.Touchpad and +Guacamole.Mouse.Touchscreen), or may be programmatically +generated through dispatch(), +or move(). +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
event + + +Guacamole.Mouse.Event + + + + The mousemove event that was fired.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

mouseup

+ + + + + + +
+ Fired whenever a mouse button is effectively released. Depending on the +object dispatching the event, this can be due to a true mouse button +release (Guacamole.Mouse), an emulated mouse button release from +a touch gesture (Guacamole.Mouse.Touchpad and +Guacamole.Mouse.Touchscreen), or may be programmatically +generated through dispatch(), +release(), or +click(). +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
event + + +Guacamole.Mouse.Event + + + + The mouseup event that was fired.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/doc/1.5.5/guacamole-common-js/Guacamole.Mouse.Touchscreen.html b/doc/1.5.5/guacamole-common-js/Guacamole.Mouse.Touchscreen.html new file mode 100644 index 000000000..a051c48f0 --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/Guacamole.Mouse.Touchscreen.html @@ -0,0 +1,3136 @@ + + + + + JSDoc: Class: Touchscreen + + + + + + + + + + +
+ +

Class: Touchscreen

+ + + + + + +
+ +
+ +

+ Guacamole.Mouse.Touchscreen(elementnon-null)

+ + +
+ +
+
+ + + + + + +

new Touchscreen(elementnon-null)

+ + + + + + +
+ Provides cross-browser absolute touch event translation for a given element. + +Touch events are translated into mouse events as if the touches occurred +on a touchscreen (tapping anywhere on the screen clicks at that point, +long-press to right-click). +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
element + + +Element + + + + The Element to use to provide touch events.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Example
+ +
var touchscreen = new Guacamole.Mouse.Touchscreen(client.getDisplay().getElement());
+
+// Emulate a mouse using touchscreen-style gestures, forwarding all mouse
+// interaction over Guacamole connection
+touchscreen.onEach(['mousedown', 'mousemove', 'mouseup'], function sendMouseEvent(e) {
+
+    // Re-show software mouse cursor if possibly hidden by a prior call to
+    // showCursor(), such as a "mouseout" event handler that hides the
+    // cursor
+    client.getDisplay().showCursor(true);
+
+    client.sendMouseState(e.state, true);
+
+});
+ + + + +
+ + +

Extends

+ + + + + + + + + + + + + + + + + + + + +

Members

+ + + +

(non-null) clickMoveThreshold :number

+ + + + +
+ The maximum number of pixels to allow a touch to move for the gesture to +be considered a click. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) clickTimingThreshold :number

+ + + + +
+ The maximum number of milliseconds to wait for a touch to end for the +gesture to be considered a click. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) currentState :Guacamole.Mouse.State

+ + + + +
+ The current mouse state. The properties of this state are updated when +mouse events fire. This state object is also passed in as a parameter to +the handler of any mouse events. +
+ + + +
Type:
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

longPressThreshold

+ + + + +
+ The amount of time a press must be held for long press to be +detected. +
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) scrollThreshold :number

+ + + + +
+ The distance a two-finger touch must move per scrollwheel event, in +pixels. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + +

Methods

+ + + + + + + +

click(buttonnon-null, eventsopt)

+ + + + + + +
+ Clicks (presses and releases) the given mouse button. Valid button +names are defined by Guacamole.Mouse.State.Buttons and +correspond to the button-related properties of +Guacamole.Mouse.State. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
button + + +string + + + + + + + + + + + + The name of the mouse button to click, as defined by + Guacamole.Mouse.State.Buttons.
events + + +Event +| + +Array.<Event> + + + + + + <optional>
+ + + + + +
+ + [] + + The DOM events related to the click, if any.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + +
Fires:
+ + + + + + + + + + + + + + + + + + + + + + + +

dispatch(eventnon-null)

+ + + + + + +
+ Dispatches the given event, invoking all event handlers registered with +this Guacamole.Event.Target for that event's +type. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
event + + +Guacamole.Event + + + + The event to dispatch.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

move(positionnon-null, eventsopt)

+ + + + + + +
+ Moves the mouse to the given coordinates. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
position + + +Guacamole.Position +| + +object + + + + + + + + + + + + The new coordinates of the mouse pointer. This object may be a + Guacamole.Position or any object with "x" and "y" + properties.
events + + +Event +| + +Array.<Event> + + + + + + <optional>
+ + + + + +
+ + [] + + The DOM events related to the mouse movement, if any.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + +
Fires:
+ + + + + + + + + + + + + + + + + + + + + + + +

off(typenon-null, listenernon-null) → (non-null) {boolean}

+ + + + + + +
+ Unregisters a listener that was previously registered with +on() or +onEach(). If no such listener was +registered, this function has no effect. If multiple copies of the same +listener were registered, the first listener still registered will be +removed. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
type + + +string + + + + The unique name of the event type handled by the listener being + removed.
listener + + +Guacamole.Event.Target~listener + + + + The listener function previously provided to + on()or + onEach().
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ true if the specified listener was removed, false otherwise. +
+ + + +
+
+ Type +
+
+ +boolean + + +
+
+ + + + + + + + + + + + + +

offEach(typesnon-null, listenernon-null) → (non-null) {boolean}

+ + + + + + +
+ Unregisters listeners that were previously registered with +on() or +onEach(). If no such listeners +were registered, this function has no effect. If multiple copies of the +same listener were registered for the same event type, the first +listener still registered will be removed. +

+Invoking this function is equivalent to manually invoking +off() for each of the provided types. +

+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
types + + +Array.<string> + + + + The unique names of the event types handled by the listeners being + removed.
listener + + +Guacamole.Event.Target~listener + + + + The listener function previously provided to + on() or + onEach().
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ true if any of the specified listeners were removed, false + otherwise. +
+ + + +
+
+ Type +
+
+ +boolean + + +
+
+ + + + + + + + + + + + + +

on(typenon-null, listenernon-null)

+ + + + + + +
+ Registers a listener for events having the given type, as dictated by +the type property of Guacamole.Event +provided to dispatch(). +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
type + + +string + + + + The unique name of this event type.
listener + + +Guacamole.Event.Target~listener + + + + The function to invoke when an event having the given type is + dispatched. The Guacamole.Event object provided to + dispatch() will be passed to + this function, along with the dispatching Guacamole.Event.Target.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

onEach(typesnon-null, listenernon-null)

+ + + + + + +
+ Registers a listener for events having the given types, as dictated by +the type property of Guacamole.Event +provided to dispatch(). +

+Invoking this function is equivalent to manually invoking +on() for each of the provided types. +

+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
types + + +Array.<string> + + + + The unique names of the event types to associate with the given + listener.
listener + + +Guacamole.Event.Target~listener + + + + The function to invoke when an event having any of the given types + is dispatched. The Guacamole.Event object provided to + dispatch() will be passed to + this function, along with the dispatching Guacamole.Event.Target.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

out(eventsopt)

+ + + + + + +
+ Notifies event listeners that the mouse pointer has left the boundaries +of the area being monitored for mouse events. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
events + + +Event +| + +Array.<Event> + + + + + + <optional>
+ + + + + +
+ + [] + + The DOM events related to the mouse leaving the boundaries of the + monitored object, if any.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + +
Fires:
+ + + + + + + + + + + + + + + + + + + + + + + +

press(buttonnon-null, eventsopt)

+ + + + + + +
+ Presses the given mouse button, if it isn't already pressed. Valid +button names are defined by Guacamole.Mouse.State.Buttons and +correspond to the button-related properties of +Guacamole.Mouse.State. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
button + + +string + + + + + + + + + + + + The name of the mouse button to press, as defined by + Guacamole.Mouse.State.Buttons.
events + + +Event +| + +Array.<Event> + + + + + + <optional>
+ + + + + +
+ + [] + + The DOM events that are related to the mouse button press, if any.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + +
Fires:
+ + + + + + + + + + + + + + + + + + + + + + + +

release(buttonnon-null, eventsopt)

+ + + + + + +
+ Releases the given mouse button, if it isn't already released. Valid +button names are defined by Guacamole.Mouse.State.Buttons and +correspond to the button-related properties of +Guacamole.Mouse.State. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
button + + +string + + + + + + + + + + + + The name of the mouse button to release, as defined by + Guacamole.Mouse.State.Buttons.
events + + +Event +| + +Array.<Event> + + + + + + <optional>
+ + + + + +
+ + [] + + The DOM events related to the mouse button release, if any.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + +
Fires:
+ + + + + + + + + + + + + + + + + + + + + + + +

reset(eventsopt)

+ + + + + + +
+ Releases all mouse buttons that are currently pressed. If all mouse +buttons have already been released, this function has no effect. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
events + + +Event +| + +Array.<Event> + + + + + + <optional>
+ + + + + +
+ + [] + + The DOM event related to all mouse buttons being released, if any.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + +
Fires:
+ + + + + + + + + + + + + + + + + + + + + + + +

Events

+ + + + + + + +

mousedown

+ + + + + + +
+ Fired whenever a mouse button is effectively pressed. Depending on the +object dispatching the event, this can be due to a true mouse button +press (Guacamole.Mouse), an emulated mouse button press from a +touch gesture (Guacamole.Mouse.Touchpad and +Guacamole.Mouse.Touchscreen), or may be programmatically +generated through dispatch(), +press(), or +click(). +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
event + + +Guacamole.Mouse.Event + + + + The mousedown event that was fired.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

mousemove

+ + + + + + +
+ Fired whenever the mouse pointer is effectively moved. Depending on the +object dispatching the event, this can be due to true mouse movement +(Guacamole.Mouse), emulated mouse movement from +a touch gesture (Guacamole.Mouse.Touchpad and +Guacamole.Mouse.Touchscreen), or may be programmatically +generated through dispatch(), +or move(). +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
event + + +Guacamole.Mouse.Event + + + + The mousemove event that was fired.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

mouseup

+ + + + + + +
+ Fired whenever a mouse button is effectively released. Depending on the +object dispatching the event, this can be due to a true mouse button +release (Guacamole.Mouse), an emulated mouse button release from +a touch gesture (Guacamole.Mouse.Touchpad and +Guacamole.Mouse.Touchscreen), or may be programmatically +generated through dispatch(), +release(), or +click(). +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
event + + +Guacamole.Mouse.Event + + + + The mouseup event that was fired.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/doc/1.5.5/guacamole-common-js/Guacamole.Mouse.html b/doc/1.5.5/guacamole-common-js/Guacamole.Mouse.html new file mode 100644 index 000000000..360061e2a --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/Guacamole.Mouse.html @@ -0,0 +1,3516 @@ + + + + + JSDoc: Class: Mouse + + + + + + + + + + +
+ +

Class: Mouse

+ + + + + + +
+ +
+ +

+ Guacamole.Mouse(elementnon-null)

+ + +
+ +
+
+ + + + + + +

new Mouse(elementnon-null)

+ + + + + + +
+ Provides cross-browser mouse events for a given element. The events of +the given element are automatically populated with handlers that translate +mouse events into a non-browser-specific event provided by the +Guacamole.Mouse instance. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
element + + +Element + + + + The Element to use to provide mouse events.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Examples
+ +
var mouse = new Guacamole.Mouse(client.getDisplay().getElement());
+
+// Forward all mouse interaction over Guacamole connection
+mouse.onEach(['mousedown', 'mousemove', 'mouseup'], function sendMouseEvent(e) {
+    client.sendMouseState(e.state, true);
+});
+ +
// Hide software cursor when mouse leaves display
+mouse.on('mouseout', function hideCursor() {
+    client.getDisplay().showCursor(false);
+});
+ + + + +
+ + +

Extends

+ + + + + + + + + + + + +

Classes

+ +
+
Event
+
+ +
State
+
+ +
Touchpad
+
+ +
Touchscreen
+
+
+ + + + + + + + + +

Members

+ + + +

(non-null) PIXELS_PER_LINE :number

+ + + + +
+ The number of pixels to scroll per line. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) PIXELS_PER_PAGE :number

+ + + + +
+ The number of pixels to scroll per page. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) currentState :Guacamole.Mouse.State

+ + + + +
+ The current mouse state. The properties of this state are updated when +mouse events fire. This state object is also passed in as a parameter to +the handler of any mouse events. +
+ + + +
Type:
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) scrollThreshold :number

+ + + + +
+ The minimum amount of pixels scrolled required for a single scroll button +click. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) touchMouseThreshold :number

+ + + + +
+ The number of mousemove events to require before re-enabling mouse +event handling after receiving a touch event. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + +

Methods

+ + + + + + + +

click(buttonnon-null, eventsopt)

+ + + + + + +
+ Clicks (presses and releases) the given mouse button. Valid button +names are defined by Guacamole.Mouse.State.Buttons and +correspond to the button-related properties of +Guacamole.Mouse.State. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
button + + +string + + + + + + + + + + + + The name of the mouse button to click, as defined by + Guacamole.Mouse.State.Buttons.
events + + +Event +| + +Array.<Event> + + + + + + <optional>
+ + + + + +
+ + [] + + The DOM events related to the click, if any.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + +
Fires:
+ + + + + + + + + + + + + + + + + + + + + + + +

dispatch(eventnon-null)

+ + + + + + +
+ Dispatches the given event, invoking all event handlers registered with +this Guacamole.Event.Target for that event's +type. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
event + + +Guacamole.Event + + + + The event to dispatch.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

move(positionnon-null, eventsopt)

+ + + + + + +
+ Moves the mouse to the given coordinates. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
position + + +Guacamole.Position +| + +object + + + + + + + + + + + + The new coordinates of the mouse pointer. This object may be a + Guacamole.Position or any object with "x" and "y" + properties.
events + + +Event +| + +Array.<Event> + + + + + + <optional>
+ + + + + +
+ + [] + + The DOM events related to the mouse movement, if any.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + +
Fires:
+ + + + + + + + + + + + + + + + + + + + + + + +

off(typenon-null, listenernon-null) → (non-null) {boolean}

+ + + + + + +
+ Unregisters a listener that was previously registered with +on() or +onEach(). If no such listener was +registered, this function has no effect. If multiple copies of the same +listener were registered, the first listener still registered will be +removed. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
type + + +string + + + + The unique name of the event type handled by the listener being + removed.
listener + + +Guacamole.Event.Target~listener + + + + The listener function previously provided to + on()or + onEach().
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ true if the specified listener was removed, false otherwise. +
+ + + +
+
+ Type +
+
+ +boolean + + +
+
+ + + + + + + + + + + + + +

offEach(typesnon-null, listenernon-null) → (non-null) {boolean}

+ + + + + + +
+ Unregisters listeners that were previously registered with +on() or +onEach(). If no such listeners +were registered, this function has no effect. If multiple copies of the +same listener were registered for the same event type, the first +listener still registered will be removed. +

+Invoking this function is equivalent to manually invoking +off() for each of the provided types. +

+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
types + + +Array.<string> + + + + The unique names of the event types handled by the listeners being + removed.
listener + + +Guacamole.Event.Target~listener + + + + The listener function previously provided to + on() or + onEach().
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ true if any of the specified listeners were removed, false + otherwise. +
+ + + +
+
+ Type +
+
+ +boolean + + +
+
+ + + + + + + + + + + + + +

on(typenon-null, listenernon-null)

+ + + + + + +
+ Registers a listener for events having the given type, as dictated by +the type property of Guacamole.Event +provided to dispatch(). +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
type + + +string + + + + The unique name of this event type.
listener + + +Guacamole.Event.Target~listener + + + + The function to invoke when an event having the given type is + dispatched. The Guacamole.Event object provided to + dispatch() will be passed to + this function, along with the dispatching Guacamole.Event.Target.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

onEach(typesnon-null, listenernon-null)

+ + + + + + +
+ Registers a listener for events having the given types, as dictated by +the type property of Guacamole.Event +provided to dispatch(). +

+Invoking this function is equivalent to manually invoking +on() for each of the provided types. +

+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
types + + +Array.<string> + + + + The unique names of the event types to associate with the given + listener.
listener + + +Guacamole.Event.Target~listener + + + + The function to invoke when an event having any of the given types + is dispatched. The Guacamole.Event object provided to + dispatch() will be passed to + this function, along with the dispatching Guacamole.Event.Target.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

out(eventsopt)

+ + + + + + +
+ Notifies event listeners that the mouse pointer has left the boundaries +of the area being monitored for mouse events. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
events + + +Event +| + +Array.<Event> + + + + + + <optional>
+ + + + + +
+ + [] + + The DOM events related to the mouse leaving the boundaries of the + monitored object, if any.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + +
Fires:
+ + + + + + + + + + + + + + + + + + + + + + + +

press(buttonnon-null, eventsopt)

+ + + + + + +
+ Presses the given mouse button, if it isn't already pressed. Valid +button names are defined by Guacamole.Mouse.State.Buttons and +correspond to the button-related properties of +Guacamole.Mouse.State. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
button + + +string + + + + + + + + + + + + The name of the mouse button to press, as defined by + Guacamole.Mouse.State.Buttons.
events + + +Event +| + +Array.<Event> + + + + + + <optional>
+ + + + + +
+ + [] + + The DOM events that are related to the mouse button press, if any.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + +
Fires:
+ + + + + + + + + + + + + + + + + + + + + + + +

release(buttonnon-null, eventsopt)

+ + + + + + +
+ Releases the given mouse button, if it isn't already released. Valid +button names are defined by Guacamole.Mouse.State.Buttons and +correspond to the button-related properties of +Guacamole.Mouse.State. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
button + + +string + + + + + + + + + + + + The name of the mouse button to release, as defined by + Guacamole.Mouse.State.Buttons.
events + + +Event +| + +Array.<Event> + + + + + + <optional>
+ + + + + +
+ + [] + + The DOM events related to the mouse button release, if any.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + +
Fires:
+ + + + + + + + + + + + + + + + + + + + + + + +

reset(eventsopt)

+ + + + + + +
+ Releases all mouse buttons that are currently pressed. If all mouse +buttons have already been released, this function has no effect. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
events + + +Event +| + +Array.<Event> + + + + + + <optional>
+ + + + + +
+ + [] + + The DOM event related to all mouse buttons being released, if any.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + +
Fires:
+ + + + + + + + + + + + + + + + + + + + + + + +

setCursor(canvasnon-null, xnon-null, ynon-null) → (non-null) {boolean}

+ + + + + + +
+ Changes the local mouse cursor to the given canvas, having the given +hotspot coordinates. This affects styling of the element backing this +Guacamole.Mouse only, and may fail depending on browser support for +setting the mouse cursor. + +If setting the local cursor is desired, it is up to the implementation +to do something else, such as use the software cursor built into +Guacamole.Display, if the local cursor cannot be set. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
canvas + + +HTMLCanvasElement + + + + The cursor image.
x + + +number + + + + The X-coordinate of the cursor hotspot.
y + + +number + + + + The Y-coordinate of the cursor hotspot.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ true if the cursor was successfully set, false if the cursor could + not be set for any reason. +
+ + + +
+
+ Type +
+
+ +boolean + + +
+
+ + + + + + + + + + + + + +

Events

+ + + + + + + +

mousedown

+ + + + + + +
+ Fired whenever a mouse button is effectively pressed. Depending on the +object dispatching the event, this can be due to a true mouse button +press (Guacamole.Mouse), an emulated mouse button press from a +touch gesture (Guacamole.Mouse.Touchpad and +Guacamole.Mouse.Touchscreen), or may be programmatically +generated through dispatch(), +press(), or +click(). +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
event + + +Guacamole.Mouse.Event + + + + The mousedown event that was fired.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

mousemove

+ + + + + + +
+ Fired whenever the mouse pointer is effectively moved. Depending on the +object dispatching the event, this can be due to true mouse movement +(Guacamole.Mouse), emulated mouse movement from +a touch gesture (Guacamole.Mouse.Touchpad and +Guacamole.Mouse.Touchscreen), or may be programmatically +generated through dispatch(), +or move(). +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
event + + +Guacamole.Mouse.Event + + + + The mousemove event that was fired.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

mouseout

+ + + + + + +
+ Fired whenever the mouse pointer leaves the boundaries of the element +being monitored for interaction. This will only ever be automatically +fired due to movement of an actual mouse device via +Guacamole.Mouse unless programmatically generated through +dispatch(), +or out(). +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
event + + +Guacamole.Mouse.Event + + + + The mouseout event that was fired.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

mouseup

+ + + + + + +
+ Fired whenever a mouse button is effectively released. Depending on the +object dispatching the event, this can be due to a true mouse button +release (Guacamole.Mouse), an emulated mouse button release from +a touch gesture (Guacamole.Mouse.Touchpad and +Guacamole.Mouse.Touchscreen), or may be programmatically +generated through dispatch(), +release(), or +click(). +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
event + + +Guacamole.Mouse.Event + + + + The mouseup event that was fired.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/doc/1.5.5/guacamole-common-js/Guacamole.Object.html b/doc/1.5.5/guacamole-common-js/Guacamole.Object.html new file mode 100644 index 000000000..f8aadc386 --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/Guacamole.Object.html @@ -0,0 +1,1120 @@ + + + + + JSDoc: Class: Object + + + + + + + + + + +
+ +

Class: Object

+ + + + + + +
+ +
+ +

+ Guacamole.Object(clientnon-null, indexnon-null)

+ + +
+ +
+
+ + + + + + +

new Object(clientnon-null, indexnon-null)

+ + + + + + +
+ An object used by the Guacamole client to house arbitrarily-many named +input and output streams. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
client + + +Guacamole.Client + + + + The client owning this object.
index + + +number + + + + The index of this object.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + +

Members

+ + + +

(non-null) index :number

+ + + + +
+ The index of this object. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(static, constant, non-null) ROOT_STREAM :string

+ + + + +
+ The reserved name denoting the root stream of any object. The contents of +the root stream MUST be a JSON map of stream name to mimetype. +
+ + + +
Type:
+
    +
  • + +string + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(static, constant, non-null) STREAM_INDEX_MIMETYPE :string

+ + + + +
+ The mimetype of a stream containing JSON which maps available stream names +to their corresponding mimetype. The root stream of a Guacamole.Object MUST +have this mimetype. +
+ + + +
Type:
+
    +
  • + +string + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + +

Methods

+ + + + + + + +

createOutputStream(mimetypenon-null, namenon-null) → (non-null) {Guacamole.OutputStream}

+ + + + + + +
+ Creates a new output stream associated with this object and having the +given mimetype and name. The legality of a mimetype and name is dictated +by the object itself. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
mimetype + + +string + + + + The mimetype of the data which will be sent to the output stream.
name + + +string + + + + The defined name of an output stream within this object.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ An output stream which will write blobs to the named output stream + of this object. +
+ + + +
+
+ Type +
+
+ +Guacamole.OutputStream + + +
+
+ + + + + + + + + + + + + +

requestInputStream(namenon-null, bodyCallbackopt)

+ + + + + + +
+ Requests read access to the input stream having the given name. If +successful, a new input stream will be created. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeAttributesDescription
name + + +string + + + + + + + + + + The name of the input stream to request.
bodyCallback + + +function + + + + + + <optional>
+ + + + + +
The callback to invoke when the body of the requested input stream + is received. This callback will be provided a Guacamole.InputStream + and its mimetype as its two only arguments. If the onbody handler of + this object is overridden, this callback will not be invoked.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

Events

+ + + + + + + +

onbody

+ + + + + + +
+ Called when this object receives the body of a requested input stream. +By default, all objects will invoke the callbacks provided to their +requestInputStream() functions based on the name of the stream +requested. This behavior can be overridden by specifying a different +handler here. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
inputStream + + +Guacamole.InputStream + + + + The input stream of the received body.
mimetype + + +string + + + + The mimetype of the data being received.
name + + +string + + + + The name of the stream whose body has been received.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

onundefine

+ + + + + + +
+ Called when this object is being undefined. Once undefined, no further +communication involving this object may occur. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/doc/1.5.5/guacamole-common-js/Guacamole.OnScreenKeyboard.Key.html b/doc/1.5.5/guacamole-common-js/Guacamole.OnScreenKeyboard.Key.html new file mode 100644 index 000000000..3ab303305 --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/Guacamole.OnScreenKeyboard.Key.html @@ -0,0 +1,648 @@ + + + + + JSDoc: Class: Key + + + + + + + + + + +
+ +

Class: Key

+ + + + + + +
+ +
+ +

+ Guacamole.OnScreenKeyboard.Key(templatenon-null, nameopt)

+ + +
+ +
+
+ + + + + + +

new Key(templatenon-null, nameopt)

+ + + + + + +
+ Represents a single key, or a single possible behavior of a key. Each key +on the on-screen keyboard must have at least one associated +Guacamole.OnScreenKeyboard.Key, whether that key is explicitly defined or +implied, and may have multiple Guacamole.OnScreenKeyboard.Key if behavior +depends on modifier states. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeAttributesDescription
template + + +Guacamole.OnScreenKeyboard.Key +| + +object + + + + + + + + + + The object whose identically-named properties will be used to initialize + the properties of this key.
name + + +string + + + + + + <optional>
+ + + + + +
The name to use instead of any name provided within the template, if + any. If omitted, the name within the template will be used, assuming the + template contains a name.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + +

Members

+ + + +

keysym :number

+ + + + +
+ The keysym to be pressed/released when this key is pressed/released. If +not provided, this will be derived from the title if the title is a +single character. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

modifier :string

+ + + + +
+ The name of the modifier set when the key is pressed and cleared when +this key is released, if any. The names of modifiers are distinct from +the names of keys; both the "RightShift" and "LeftShift" keys may set +the "shift" modifier, for example. By default, the key will affect no +modifiers. +
+ + + +
Type:
+
    +
  • + +string + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) name :string

+ + + + +
+ The unique name identifying this key within the keyboard layout. +
+ + + +
Type:
+
    +
  • + +string + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) requires :Array.<string>

+ + + + +
+ An array containing the names of each modifier required for this key to +have an effect. For example, a lowercase letter may require nothing, +while an uppercase letter would require "shift", assuming the Shift key +is named "shift" within the layout. By default, the key will require +no modifiers. +
+ + + +
Type:
+
    +
  • + +Array.<string> + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) title :string

+ + + + +
+ The human-readable title that will be displayed to the user within the +key. If not provided, this will be derived from the key name. +
+ + + +
Type:
+
    +
  • + +string + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/doc/1.5.5/guacamole-common-js/Guacamole.OnScreenKeyboard.Layout.html b/doc/1.5.5/guacamole-common-js/Guacamole.OnScreenKeyboard.Layout.html new file mode 100644 index 000000000..eccc8345d --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/Guacamole.OnScreenKeyboard.Layout.html @@ -0,0 +1,679 @@ + + + + + JSDoc: Class: Layout + + + + + + + + + + +
+ +

Class: Layout

+ + + + + + +
+ +
+ +

+ Guacamole.OnScreenKeyboard.Layout(templatenon-null)

+ + +
+ +
+
+ + + + + + +

new Layout(templatenon-null)

+ + + + + + +
+ Represents an entire on-screen keyboard layout, including all available +keys, their behaviors, and their relative position and sizing. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
template + + +Guacamole.OnScreenKeyboard.Layout +| + +object + + + + The object whose identically-named properties will be used to initialize + the properties of this layout.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + +

Members

+ + + +

(non-null) keyWidths :Object.<string, number>

+ + + + +
+ The width of each key, in arbitrary units, relative to other keys in +this layout. The true pixel size of each key will be determined by the +overall size of the keyboard. If not defined here, the width of each +key will default to 1. +
+ + + +
Type:
+
    +
  • + +Object.<string, number> + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) keys :Object.<string, (number|string|Guacamole.OnScreenKeyboard.Key|Array.<Guacamole.OnScreenKeyboard.Key>)>

+ + + + +
+ Map of key name to corresponding keysym, title, or key object. If only +the keysym or title is provided, the key object will be created +implicitly. In all cases, the name property of the key object will be +taken from the name given in the mapping. +
+ + + +
Type:
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) language :string

+ + + + +
+ The language of keyboard layout, such as "en_US". This property is for +informational purposes only, but it is recommend to conform to the +[language code]_[country code] format. +
+ + + +
Type:
+
    +
  • + +string + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) layout :object

+ + + + +
+ Arbitrarily nested, arbitrarily grouped key names. The contents of the +layout will be traversed to produce an identically-nested grouping of +keys in the DOM tree. All strings will be transformed into their +corresponding sets of keys, while all objects and arrays will be +transformed into named groups and anonymous groups respectively. Any +numbers present will be transformed into gaps of that size, scaled +according to the same units as each key. +
+ + + +
Type:
+
    +
  • + +object + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) type :string

+ + + + +
+ The type of keyboard layout, such as "qwerty". This property is for +informational purposes only, and does not conform to any standard. +
+ + + +
Type:
+
    +
  • + +string + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) width :number

+ + + + +
+ The width of the entire keyboard, in arbitrary units. The width of each +key is relative to this width, as both width values are assumed to be in +the same units. The conversion factor between these units and pixels is +derived later via a call to resize() on the Guacamole.OnScreenKeyboard. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/doc/1.5.5/guacamole-common-js/Guacamole.OnScreenKeyboard.html b/doc/1.5.5/guacamole-common-js/Guacamole.OnScreenKeyboard.html new file mode 100644 index 000000000..b24a5a8e6 --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/Guacamole.OnScreenKeyboard.html @@ -0,0 +1,985 @@ + + + + + JSDoc: Class: OnScreenKeyboard + + + + + + + + + + +
+ +

Class: OnScreenKeyboard

+ + + + + + +
+ +
+ +

+ Guacamole.OnScreenKeyboard(layoutnon-null)

+ + +
+ +
+
+ + + + + + +

new OnScreenKeyboard(layoutnon-null)

+ + + + + + +
+ Dynamic on-screen keyboard. Given the layout object for an on-screen +keyboard, this object will construct a clickable on-screen keyboard with its +own key events. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
layout + + +Guacamole.OnScreenKeyboard.Layout + + + + The layout of the on-screen keyboard to display.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Classes

+ +
+
Key
+
+ +
Layout
+
+
+ + + + + + + + + +

Members

+ + + +

(non-null) keys :Object.<string, Array.<Guacamole.OnScreenKeyboard.Key>>

+ + + + +
+ Map of all key names to their corresponding set of keys. Each key name +may correspond to multiple keys due to the effect of modifiers. +
+ + + +
Type:
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) layout :Guacamole.OnScreenKeyboard.Layout

+ + + + +
+ The keyboard layout provided at time of construction. +
+ + + +
Type:
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) touchMouseThreshold :number

+ + + + +
+ The number of mousemove events to require before re-enabling mouse +event handling after receiving a touch event. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + +

Methods

+ + + + + + + +

getElement() → (non-null) {Element}

+ + + + + + +
+ Returns the element containing the entire on-screen keyboard. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ The element containing the entire on-screen keyboard. +
+ + + +
+
+ Type +
+
+ +Element + + +
+
+ + + + + + + + + + + + + +

resize(widthnon-null)

+ + + + + + +
+ Resizes all elements within this Guacamole.OnScreenKeyboard such that +the width is close to but does not exceed the specified width. The +height of the keyboard is determined based on the width. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
width + + +number + + + + The width to resize this Guacamole.OnScreenKeyboard to, in pixels.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

Events

+ + + + + + + +

onkeydown

+ + + + + + +
+ Fired whenever the user presses a key on this Guacamole.OnScreenKeyboard. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
keysym + + +number + + + + The keysym of the key being pressed.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

onkeyup

+ + + + + + +
+ Fired whenever the user releases a key on this Guacamole.OnScreenKeyboard. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
keysym + + +number + + + + The keysym of the key being released.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/doc/1.5.5/guacamole-common-js/Guacamole.OutputStream.html b/doc/1.5.5/guacamole-common-js/Guacamole.OutputStream.html new file mode 100644 index 000000000..df26340b9 --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/Guacamole.OutputStream.html @@ -0,0 +1,690 @@ + + + + + JSDoc: Class: OutputStream + + + + + + + + + + +
+ +

Class: OutputStream

+ + + + + + +
+ +
+ +

+ Guacamole.OutputStream(clientnon-null, indexnon-null)

+ + +
+ +
+
+ + + + + + +

new OutputStream(clientnon-null, indexnon-null)

+ + + + + + +
+ Abstract stream which can receive data. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
client + + +Guacamole.Client + + + + The client owning this stream.
index + + +number + + + + The index of this stream.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + +

Members

+ + + +

(non-null) index :number

+ + + + +
+ The index of this stream. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + +

Methods

+ + + + + + + +

sendBlob(datanon-null)

+ + + + + + +
+ Writes the given base64-encoded data to this stream as a blob. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
data + + +string + + + + The base64-encoded data to send.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

sendEnd()

+ + + + + + +
+ Closes this stream. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

Events

+ + + + + + + +

onack

+ + + + + + +
+ Fired whenever an acknowledgement is received from the server, indicating +that a stream operation has completed, or an error has occurred. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
status + + +Guacamole.Status + + + + The status of the operation.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/doc/1.5.5/guacamole-common-js/Guacamole.Parser.html b/doc/1.5.5/guacamole-common-js/Guacamole.Parser.html new file mode 100644 index 000000000..8292daaa3 --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/Guacamole.Parser.html @@ -0,0 +1,964 @@ + + + + + JSDoc: Class: Parser + + + + + + + + + + +
+ +

Class: Parser

+ + + + + + +
+ +
+ +

+ Guacamole.Parser()

+ + +
+ +
+
+ + + + + + +

new Parser()

+ + + + + + +
+ Simple Guacamole protocol parser that invokes an oninstruction event when +full instructions are available from data received via receive(). +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + +

Methods

+ + + + + + + +

receive(packetnon-null, isBufferopt, non-null)

+ + + + + + +
+ Appends the given instruction data packet to the internal buffer of +this Guacamole.Parser, executing all completed instructions at +the beginning of this buffer, if any. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
packet + + +string + + + + + + + + + + + + The instruction data to receive.
isBuffer + + +boolean + + + + + + <optional>
+ + + + + +
+ + false + + Whether the provided data should be treated as an instruction buffer + that grows continuously. If true, the data provided to receive() + MUST always start with the data provided to the previous call. If + false (the default), only the new data should be provided to + receive(), and previously-received data will automatically be + buffered by the parser as needed.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

(static) codePointCount(strnon-null, startopt, endopt) → (non-null) {number}

+ + + + + + +
+ Returns the number of Unicode codepoints (not code units) within the given +string. If character offsets are provided, only codepoints between those +offsets are counted. Unlike the length property of a string, this function +counts proper surrogate pairs as a single codepoint. High and low surrogate +characters that are not part of a proper surrogate pair are counted +separately as individual codepoints. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
str + + +string + + + + + + + + + + + + The string whose contents should be inspected.
start + + +number + + + + + + <optional>
+ + + + + +
+ + 0 + + The index of the location in the given string where codepoint counting + should start. If omitted, counting will begin at the start of the + string.
end + + +number + + + + + + <optional>
+ + + + + +
+ + The index of the first location in the given string after where counting + should stop (the character after the last character being counted). If + omitted, all characters after the start location will be counted.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ The number of Unicode codepoints within the requested portion of the + given string. +
+ + + +
+
+ Type +
+
+ +number + + +
+
+ + + + + + + + + + + + + +

(static) toInstruction(elementsnon-null) → (non-null) {string}

+ + + + + + +
+ Converts each of the values within the given array to strings, formatting +those strings as length-prefixed elements of a complete Guacamole +instruction. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
elements + + +Array.<*> + + + + The values that should be encoded as the elements of a Guacamole + instruction. Order of these elements is preserved. This array MUST have + at least one element.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ A complete Guacamole instruction consisting of each of the provided + element values, in order. +
+ + + +
+
+ Type +
+
+ +string + + +
+
+ + + + + + + + + + + + + +

Events

+ + + + + + + +

oninstruction

+ + + + + + +
+ Fired once for every complete Guacamole instruction received, in order. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
opcode + + +string + + + + The Guacamole instruction opcode.
parameters + + +Array.<string> + + + + The parameters provided for the instruction, if any.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/doc/1.5.5/guacamole-common-js/Guacamole.Position.html b/doc/1.5.5/guacamole-common-js/Guacamole.Position.html new file mode 100644 index 000000000..dfdc81c8b --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/Guacamole.Position.html @@ -0,0 +1,803 @@ + + + + + JSDoc: Class: Position + + + + + + + + + + +
+ +

Class: Position

+ + + + + + +
+ +
+ +

+ Guacamole.Position(templateopt)

+ + +
+ +
+
+ + + + + + +

new Position(templateopt)

+ + + + + + +
+ A position in 2-D space. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
template + + +Guacamole.Position +| + +object + + + + + + <optional>
+ + + + + +
+ + {} + + The object whose properties should be copied within the new + Guacamole.Position.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + +

Members

+ + + +

(non-null) x :number

+ + + + +
+ The current X position, in pixels. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
Default Value:
+
    +
  • 0
  • +
+ + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) y :number

+ + + + +
+ The current Y position, in pixels. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
Default Value:
+
    +
  • 0
  • +
+ + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + +

Methods

+ + + + + + + +

fromClientPosition(elementnon-null, clientXnon-null, clientYnon-null)

+ + + + + + +
+ Assigns the position represented by the given element and +clientX/clientY coordinates. The clientX and clientY coordinates are +relative to the browser viewport and are commonly available within +JavaScript event objects. The final position is translated to +coordinates that are relative the given element. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
element + + +Element + + + + The element the coordinates should be relative to.
clientX + + +number + + + + The viewport-relative X coordinate to translate.
clientY + + +number + + + + The viewport-relative Y coordinate to translate.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

(static) fromClientPosition(elementnon-null, clientXnon-null, clientYnon-null) → (non-null) {Guacamole.Position}

+ + + + + + +
+ Returns a new Guacamole.Position representing the relative position +of the given clientX/clientY coordinates within the given element. The +clientX and clientY coordinates are relative to the browser viewport and are +commonly available within JavaScript event objects. The final position is +translated to coordinates that are relative the given element. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
element + + +Element + + + + The element the coordinates should be relative to.
clientX + + +number + + + + The viewport-relative X coordinate to translate.
clientY + + +number + + + + The viewport-relative Y coordinate to translate.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ A new Guacamole.Position representing the relative position of the given + client coordinates. +
+ + + +
+
+ Type +
+
+ +Guacamole.Position + + +
+
+ + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/doc/1.5.5/guacamole-common-js/Guacamole.RawAudioFormat.html b/doc/1.5.5/guacamole-common-js/Guacamole.RawAudioFormat.html new file mode 100644 index 000000000..a77eb15a1 --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/Guacamole.RawAudioFormat.html @@ -0,0 +1,615 @@ + + + + + JSDoc: Class: RawAudioFormat + + + + + + + + + + +
+ +

Class: RawAudioFormat

+ + + + + + +
+ +
+ +

+ Guacamole.RawAudioFormat(templatenon-null)

+ + +
+ +
+
+ + + + + + +

new RawAudioFormat(templatenon-null)

+ + + + + + +
+ A description of the format of raw PCM audio, such as that used by +Guacamole.RawAudioPlayer and Guacamole.RawAudioRecorder. This object +describes the number of bytes per sample, the number of channels, and the +overall sample rate. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
template + + +Guacamole.RawAudioFormat +| + +object + + + + The object whose properties should be copied into the corresponding + properties of the new Guacamole.RawAudioFormat.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + +

Members

+ + + +

(non-null) bytesPerSample :number

+ + + + +
+ The number of bytes in each sample of audio data. This value is +independent of the number of channels. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) channels :number

+ + + + +
+ The number of audio channels (ie: 1 for mono, 2 for stereo). +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) rate :number

+ + + + +
+ The number of samples per second, per channel. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + +

Methods

+ + + + + + + +

(static) parse(mimetypenon-null) → {Guacamole.RawAudioFormat}

+ + + + + + +
+ Parses the given mimetype, returning a new Guacamole.RawAudioFormat +which describes the type of raw audio data represented by that mimetype. If +the mimetype is not a supported raw audio data mimetype, null is returned. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
mimetype + + +string + + + + The audio mimetype to parse.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ A new Guacamole.RawAudioFormat which describes the type of raw + audio data represented by the given mimetype, or null if the given + mimetype is not supported. +
+ + + +
+
+ Type +
+
+ +Guacamole.RawAudioFormat + + +
+
+ + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/doc/1.5.5/guacamole-common-js/Guacamole.RawAudioPlayer.html b/doc/1.5.5/guacamole-common-js/Guacamole.RawAudioPlayer.html new file mode 100644 index 000000000..fc3d97db8 --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/Guacamole.RawAudioPlayer.html @@ -0,0 +1,636 @@ + + + + + JSDoc: Class: RawAudioPlayer + + + + + + + + + + +
+ +

Class: RawAudioPlayer

+ + + + + + +
+ +
+ +

+ Guacamole.RawAudioPlayer(streamnon-null, mimetypenon-null)

+ + +
+ +
+
+ + + + + + +

new RawAudioPlayer(streamnon-null, mimetypenon-null)

+ + + + + + +
+ Implementation of Guacamole.AudioPlayer providing support for raw PCM format +audio. This player relies only on the Web Audio API and does not require any +browser-level support for its audio formats. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
stream + + +Guacamole.InputStream + + + + The Guacamole.InputStream to read audio data from.
mimetype + + +string + + + + The mimetype of the audio data in the provided stream, which must be a + "audio/L8" or "audio/L16" mimetype with necessary parameters, such as: + "audio/L16;rate=44100,channels=2".
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + +

Extends

+ + + + + + + + + + + + + + + + + + + + + + +

Methods

+ + + + + + + +

sync()

+ + + + + + +
+ Notifies this Guacamole.AudioPlayer that all audio up to the current +point in time has been given via the underlying stream, and that any +difference in time between queued audio data and the current time can be +considered latency. +
+ + + + + + + + + + + + + +
+ + + + + + + + +
Overrides:
+
+ + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

(static) getSupportedTypes() → (non-null) {Array.<string>}

+ + + + + + +
+ Returns a list of all mimetypes supported by Guacamole.RawAudioPlayer. Only +the core mimetypes themselves will be listed. Any mimetype parameters, even +required ones, will not be included in the list. For example, "audio/L8" is +a raw audio mimetype that may be supported, but it is invalid without +additional parameters. Something like "audio/L8;rate=44100" would be valid, +however (see https://tools.ietf.org/html/rfc4856). +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ A list of all mimetypes supported by Guacamole.RawAudioPlayer, excluding + any parameters. If the necessary JavaScript APIs for playing raw audio + are absent, this list will be empty. +
+ + + +
+
+ Type +
+
+ +Array.<string> + + +
+
+ + + + + + + + + + + + + +

(static) isSupportedType(mimetypenon-null) → (non-null) {boolean}

+ + + + + + +
+ Determines whether the given mimetype is supported by +Guacamole.RawAudioPlayer. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
mimetype + + +string + + + + The mimetype to check.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ true if the given mimetype is supported by Guacamole.RawAudioPlayer, + false otherwise. +
+ + + +
+
+ Type +
+
+ +boolean + + +
+
+ + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/doc/1.5.5/guacamole-common-js/Guacamole.RawAudioRecorder.html b/doc/1.5.5/guacamole-common-js/Guacamole.RawAudioRecorder.html new file mode 100644 index 000000000..e83a391a4 --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/Guacamole.RawAudioRecorder.html @@ -0,0 +1,737 @@ + + + + + JSDoc: Class: RawAudioRecorder + + + + + + + + + + +
+ +

Class: RawAudioRecorder

+ + + + + + +
+ +
+ +

+ Guacamole.RawAudioRecorder(streamnon-null, mimetypenon-null)

+ + +
+ +
+
+ + + + + + +

new RawAudioRecorder(streamnon-null, mimetypenon-null)

+ + + + + + +
+ Implementation of Guacamole.AudioRecorder providing support for raw PCM +format audio. This recorder relies only on the Web Audio API and does not +require any browser-level support for its audio formats. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
stream + + +Guacamole.OutputStream + + + + The Guacamole.OutputStream to write audio data to.
mimetype + + +string + + + + The mimetype of the audio data to send along the provided stream, which + must be a "audio/L8" or "audio/L16" mimetype with necessary parameters, + such as: "audio/L16;rate=44100,channels=2".
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + +

Extends

+ + + + + + + + + + + + + + + + + + + + + + +

Methods

+ + + + + + + +

(static) getSupportedTypes() → (non-null) {Array.<string>}

+ + + + + + +
+ Returns a list of all mimetypes supported by Guacamole.RawAudioRecorder. Only +the core mimetypes themselves will be listed. Any mimetype parameters, even +required ones, will not be included in the list. For example, "audio/L8" is +a raw audio mimetype that may be supported, but it is invalid without +additional parameters. Something like "audio/L8;rate=44100" would be valid, +however (see https://tools.ietf.org/html/rfc4856). +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ A list of all mimetypes supported by Guacamole.RawAudioRecorder, + excluding any parameters. If the necessary JavaScript APIs for recording + raw audio are absent, this list will be empty. +
+ + + +
+
+ Type +
+
+ +Array.<string> + + +
+
+ + + + + + + + + + + + + +

(static) isSupportedType(mimetypenon-null) → (non-null) {boolean}

+ + + + + + +
+ Determines whether the given mimetype is supported by +Guacamole.RawAudioRecorder. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
mimetype + + +string + + + + The mimetype to check.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ true if the given mimetype is supported by Guacamole.RawAudioRecorder, + false otherwise. +
+ + + +
+
+ Type +
+
+ +boolean + + +
+
+ + + + + + + + + + + + + +

Events

+ + + + + + + +

onclose

+ + + + + + +
+ Callback which is invoked when the audio recording process has stopped +and the underlying Guacamole stream has been closed normally. Audio will +only resume recording if a new Guacamole.AudioRecorder is started. This +Guacamole.AudioRecorder instance MAY NOT be reused. +
+ + + + + + + + + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

onerror

+ + + + + + +
+ Callback which is invoked when the audio recording process cannot +continue due to an error, if it has started at all. The underlying +Guacamole stream is automatically closed. Future attempts to record +audio should not be made, and this Guacamole.AudioRecorder instance +MAY NOT be reused. +
+ + + + + + + + + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/doc/1.5.5/guacamole-common-js/Guacamole.SessionRecording.html b/doc/1.5.5/guacamole-common-js/Guacamole.SessionRecording.html new file mode 100644 index 000000000..cd4c4a270 --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/Guacamole.SessionRecording.html @@ -0,0 +1,2323 @@ + + + + + JSDoc: Class: SessionRecording + + + + + + + + + + +
+ +

Class: SessionRecording

+ + + + + + +
+ +
+ +

+ Guacamole.SessionRecording(source)

+ + +
+ +
+
+ + + + + + +

new SessionRecording(source)

+ + + + + + +
+ A recording of a Guacamole session. Given a Guacamole.Tunnel or Blob, +the Guacamole.SessionRecording automatically parses Guacamole instructions +within the recording source as it plays back the recording. Playback of the +recording may be controlled through function calls to the +Guacamole.SessionRecording, even while the recording has not yet finished +being created or downloaded. Parsing of the contents of the recording will +begin immediately and automatically after this constructor is invoked. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
source + + +Blob +| + +Guacamole.Tunnel + + + + The Blob from which the instructions of the recording should + be read.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + +

Methods

+ + + + + + + +

abort()

+ + + + + + +
+ Aborts the loading process, stopping further processing of the +provided data. If the underlying recording source is a Guacamole tunnel, +it will be disconnected. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

cancel()

+ + + + + + +
+ Cancels the current seek operation, setting the current frame of the +recording to wherever the seek operation was able to reach prior to +being cancelled. If a callback was provided to seek(), that callback +is invoked. If a seek operation is not currently underway, this +function has no effect. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

connect(dataopt)

+ + + + + + +
+ Connects the underlying tunnel, beginning download of the Guacamole +session. Playback of the Guacamole session cannot occur until at least +one frame worth of instructions has been downloaded. If the underlying +recording source is a Blob, this function has no effect. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeAttributesDescription
data + + +string + + + + + + <optional>
+ + + + + +
The data to send to the tunnel when connecting.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

disconnect()

+ + + + + + +
+ Disconnects the underlying tunnel, stopping further download of the +Guacamole session. If the underlying recording source is a Blob, this +function has no effect. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

getDisplay() → (non-null) {Guacamole.Display}

+ + + + + + +
+ Returns the underlying display of the Guacamole.Client used by this +Guacamole.SessionRecording for playback. The display contains an Element +which can be added to the DOM, causing the display (and thus playback of +the recording) to become visible. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ The underlying display of the Guacamole.Client used by this + Guacamole.SessionRecording for playback. +
+ + + +
+
+ Type +
+
+ +Guacamole.Display + + +
+
+ + + + + + + + + + + + + +

getDuration() → (non-null) {number}

+ + + + + + +
+ Returns the duration of this recording, in milliseconds. If the +recording is still being downloaded, this value will gradually increase. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ The duration of this recording, in milliseconds. +
+ + + +
+
+ Type +
+
+ +number + + +
+
+ + + + + + + + + + + + + +

getPosition() → (non-null) {number}

+ + + + + + +
+ Returns the current playback position within the recording, in +milliseconds, where zero is the start of the recording. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ The current playback position within the recording, in milliseconds. +
+ + + +
+
+ Type +
+
+ +number + + +
+
+ + + + + + + + + + + + + +

isPlaying() → (non-null) {boolean}

+ + + + + + +
+ Returns whether playback is currently in progress. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ true if playback is currently in progress, false otherwise. +
+ + + +
+
+ Type +
+
+ +boolean + + +
+
+ + + + + + + + + + + + + +

pause()

+ + + + + + +
+ Pauses playback of the recording, if playback is currently in progress. +If playback is not in progress, this function has no effect. If a seek +operation is in progress, the seek is aborted. Playback is initially +paused when a Guacamole.SessionRecording is created, and must be +explicitly started through a call to play(). +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

play()

+ + + + + + +
+ Begins continuous playback of the recording downloaded thus far. +Playback of the recording will continue until pause() is invoked or +until no further frames exist. Playback is initially paused when a +Guacamole.SessionRecording is created, and must be explicitly started +through a call to this function. If playback is already in progress, +this function has no effect. If a seek operation is in progress, +playback resumes at the current position, and the seek is aborted as if +completed. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

seek(positionnon-null, callbackopt)

+ + + + + + +
+ Seeks to the given position within the recording. If the recording is +currently being played back, playback will continue after the seek is +performed. If the recording is currently paused, playback will be +paused after the seek is performed. If a seek operation is already in +progress, that seek is first aborted. The seek operation will proceed +asynchronously. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeAttributesDescription
position + + +number + + + + + + + + + + The position within the recording to seek to, in milliseconds.
callback + + +function + + + + + + <optional>
+ + + + + +
The callback to invoke once the seek operation has completed.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

Events

+ + + + + + + +

onabort

+ + + + + + +
+ Fired when further loading of this recording has been explicitly +aborted through a call to abort(). +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

onerror

+ + + + + + +
+ Fired when an error occurs which prevents the recording from being +played back. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
message + + +string + + + + A human-readable message describing the error that occurred.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

onload

+ + + + + + +
+ Fired when loading of this recording has completed and all frames +are available. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

onpause

+ + + + + + +
+ Fired whenever playback of the recording has been paused. This may +happen when playback is explicitly paused with a call to pause(), or +when playback is implicitly paused due to reaching the end of the +recording. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

onplay

+ + + + + + +
+ Fired whenever playback of the recording has started. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

onprogress

+ + + + + + +
+ Fired when new frames have become available while the recording is +being downloaded. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
duration + + +number + + + + The new duration of the recording, in milliseconds.
parsedSize + + +number + + + + The number of bytes that have been loaded/parsed.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

onseek

+ + + + + + +
+ Fired whenever the playback position within the recording changes. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
position + + +number + + + + The new position within the recording, in milliseconds.
current + + +number + + + + The number of frames that have been seeked through. If not + seeking through multiple frames due to a call to seek(), this + will be 1.
total + + +number + + + + The number of frames that are being seeked through in the + current seek operation. If not seeking through multiple frames + due to a call to seek(), this will be 1.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/doc/1.5.5/guacamole-common-js/Guacamole.StaticHTTPTunnel.html b/doc/1.5.5/guacamole-common-js/Guacamole.StaticHTTPTunnel.html new file mode 100644 index 000000000..1debcce9e --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/Guacamole.StaticHTTPTunnel.html @@ -0,0 +1,1842 @@ + + + + + JSDoc: Class: StaticHTTPTunnel + + + + + + + + + + +
+ +

Class: StaticHTTPTunnel

+ + + + + + +
+ +
+ +

+ Guacamole.StaticHTTPTunnel(urlnon-null, crossDomainopt, extraTunnelHeadersopt)

+ + +
+ +
+
+ + + + + + +

new StaticHTTPTunnel(urlnon-null, crossDomainopt, extraTunnelHeadersopt)

+ + + + + + +
+ Guacamole Tunnel which replays a Guacamole protocol dump from a static file +received via HTTP. Instructions within the file are parsed and handled as +quickly as possible, while the file is being downloaded. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
url + + +string + + + + + + + + + + + + The URL of a Guacamole protocol dump.
crossDomain + + +boolean + + + + + + <optional>
+ + + + + +
+ + false + + Whether tunnel requests will be cross-domain, and thus must use CORS + mechanisms and headers. By default, it is assumed that tunnel requests + will be made to the same domain.
extraTunnelHeaders + + +object + + + + + + <optional>
+ + + + + +
+ + {} + + Key value pairs containing the header names and values of any additional + headers to be sent in tunnel requests. By default, no extra headers will + be added.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + +

Extends

+ + + + + + + + + + + + + + + + + + + + +

Members

+ + + +

(non-null) receiveTimeout :number

+ + + + +
+ The maximum amount of time to wait for data to be received, in +milliseconds. If data is not received within this amount of time, +the tunnel is closed with an error. The default value is 15000. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

size :number

+ + + + +
+ The number of bytes in the file being downloaded, or null if this is not +known. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) state :number

+ + + + +
+ The current state of this tunnel. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) unstableThreshold :number

+ + + + +
+ The amount of time to wait for data to be received before considering +the connection to be unstable, in milliseconds. If data is not received +within this amount of time, the tunnel status is updated to warn that +the connection appears unresponsive and may close. The default value is +1500. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

uuid :string

+ + + + +
+ The UUID uniquely identifying this tunnel. If not yet known, this will +be null. +
+ + + +
Type:
+
    +
  • + +string + + +
  • +
+ + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + +

Methods

+ + + + + + + +

connect(dataopt)

+ + + + + + +
+ Connect to the tunnel with the given optional data. This data is +typically used for authentication. The format of data accepted is +up to the tunnel implementation. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeAttributesDescription
data + + +string + + + + + + <optional>
+ + + + + +
The data to send to the tunnel when connecting.
+ + + + + + +
+ + + + + + + + +
Overrides:
+
+ + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

disconnect()

+ + + + + + +
+ Disconnect from the tunnel. +
+ + + + + + + + + + + + + +
+ + + + + + + + +
Overrides:
+
+ + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

isConnected() → (non-null) {boolean}

+ + + + + + +
+ Returns whether this tunnel is currently connected. +
+ + + + + + + + + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ true if this tunnel is currently connected, false otherwise. +
+ + + +
+
+ Type +
+
+ +boolean + + +
+
+ + + + + + + + + + + + + +

sendMessage(…elements)

+ + + + + + +
+ Send the given message through the tunnel to the service on the other +side. All messages are guaranteed to be received in the order sent. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeAttributesDescription
elements + + +* + + + + + + + + + + <repeatable>
+ +
The elements of the message to send to the service on the other side + of the tunnel.
+ + + + + + +
+ + + + + + + + +
Overrides:
+
+ + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

Events

+ + + + + + + +

onerror

+ + + + + + +
+ Fired whenever an error is encountered by the tunnel. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
status + + +Guacamole.Status + + + + A status object which describes the error.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

oninstruction

+ + + + + + +
+ Fired once for every complete Guacamole instruction received, in order. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
opcode + + +string + + + + The Guacamole instruction opcode.
parameters + + +Array.<string> + + + + The parameters provided for the instruction, if any.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

onstatechange

+ + + + + + +
+ Fired whenever the state of the tunnel changes. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
state + + +number + + + + The new state of the client.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

onuuid

+ + + + + + +
+ Fired when the UUID that uniquely identifies this tunnel is known. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
The + + +string + + + + UUID uniquely identifying this tunnel.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/doc/1.5.5/guacamole-common-js/Guacamole.Status.html b/doc/1.5.5/guacamole-common-js/Guacamole.Status.html new file mode 100644 index 000000000..0efce8833 --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/Guacamole.Status.html @@ -0,0 +1,599 @@ + + + + + JSDoc: Class: Status + + + + + + + + + + +
+ +

Class: Status

+ + + + + + +
+ +
+ +

+ Guacamole.Status(codenon-null, messageopt)

+ + +
+ +
+
+ + + + + + +

new Status(codenon-null, messageopt)

+ + + + + + +
+ A Guacamole status. Each Guacamole status consists of a status code, defined +by the protocol, and an optional human-readable message, usually only +included for debugging convenience. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeAttributesDescription
code + + +number + + + + + + + + + + The Guacamole status code, as defined by Guacamole.Status.Code.
message + + +string + + + + + + <optional>
+ + + + + +
An optional human-readable message.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + +

Members

+ + + +

(non-null) code :number

+ + + + +
+ The Guacamole status code. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + +
See:
+
+ +
+ + + +
+ + + + + + + + +

message :string

+ + + + +
+ An arbitrary human-readable message associated with this status, if any. +The human-readable message is not required, and is generally provided +for debugging purposes only. For user feedback, it is better to translate +the Guacamole status code into a message. +
+ + + +
Type:
+
    +
  • + +string + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(static) Code

+ + + + +
+ Enumeration of all Guacamole status codes. +
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + +

Methods

+ + + + + + + +

isError() → (non-null) {boolean}

+ + + + + + +
+ Returns whether this status represents an error. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ true if this status represents an error, false otherwise. +
+ + + +
+
+ Type +
+
+ +boolean + + +
+
+ + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/doc/1.5.5/guacamole-common-js/Guacamole.StringReader.html b/doc/1.5.5/guacamole-common-js/Guacamole.StringReader.html new file mode 100644 index 000000000..075b8885a --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/Guacamole.StringReader.html @@ -0,0 +1,527 @@ + + + + + JSDoc: Class: StringReader + + + + + + + + + + +
+ +

Class: StringReader

+ + + + + + +
+ +
+ +

+ Guacamole.StringReader(streamnon-null)

+ + +
+ +
+
+ + + + + + +

new StringReader(streamnon-null)

+ + + + + + +
+ A reader which automatically handles the given input stream, returning +strictly text data. Note that this object will overwrite any installed event +handlers on the given Guacamole.InputStream. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
stream + + +Guacamole.InputStream + + + + The stream that data will be read from.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + +

Members

+ + + +

(inner, non-null) utf8Parser :Guacamole.UTF8Parser

+ + + + +
+ Parser for received UTF-8 data. +
+ + + +
Type:
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + +

Events

+ + + + + + + +

onend

+ + + + + + +
+ Fired once this stream is finished and no further data will be written. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

ontext

+ + + + + + +
+ Fired once for every blob of text data received. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
text + + +string + + + + The data packet received.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/doc/1.5.5/guacamole-common-js/Guacamole.StringWriter.html b/doc/1.5.5/guacamole-common-js/Guacamole.StringWriter.html new file mode 100644 index 000000000..e7350e188 --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/Guacamole.StringWriter.html @@ -0,0 +1,592 @@ + + + + + JSDoc: Class: StringWriter + + + + + + + + + + +
+ +

Class: StringWriter

+ + + + + + +
+ +
+ +

+ Guacamole.StringWriter(streamnon-null)

+ + +
+ +
+
+ + + + + + +

new StringWriter(streamnon-null)

+ + + + + + +
+ A writer which automatically writes to the given output stream with text +data. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
stream + + +Guacamole.OutputStream + + + + The stream that data will be written to.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + +

Methods

+ + + + + + + +

sendEnd()

+ + + + + + +
+ Signals that no further text will be sent, effectively closing the +stream. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

sendText(textnon-null)

+ + + + + + +
+ Sends the given text. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
text + + +string + + + + The text to send.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

Events

+ + + + + + + +

onack

+ + + + + + +
+ Fired for received data, if acknowledged by the server. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
status + + +Guacamole.Status + + + + The status of the operation.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/doc/1.5.5/guacamole-common-js/Guacamole.Touch.Event.html b/doc/1.5.5/guacamole-common-js/Guacamole.Touch.Event.html new file mode 100644 index 000000000..a82fbd11b --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/Guacamole.Touch.Event.html @@ -0,0 +1,973 @@ + + + + + JSDoc: Class: Event + + + + + + + + + + +
+ +

Class: Event

+ + + + + + +
+ +
+ +

+ Guacamole.Touch.Event(typenon-null, eventnon-null, statenon-null)

+ + +
+ +
+
+ + + + + + +

new Event(typenon-null, eventnon-null, statenon-null)

+ + + + + + +
+ An event which represents a change in state of a single touch contact, +including the creation or removal of that contact. If multiple contacts are +involved in a touch interaction, each contact will be associated with its +own event. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
type + + +string + + + + The name of the touch event type. Possible values are "touchstart", + "touchmove", and "touchend".
event + + +TouchEvent + + + + The DOM touch event that produced this Guacamole.Touch.Event.
state + + +Guacamole.Touch.State + + + + The state of the touch contact associated with this event.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + +

Extends

+ + + + + + + + + + + + + + + + + + + + +

Members

+ + + +

(non-null) state :Guacamole.Touch.State

+ + + + +
+ The state of the touch contact associated with this event. +
+ + + +
Type:
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) timestamp :number

+ + + + +
+ An arbitrary timestamp in milliseconds, indicating this event's +position in time relative to other events. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) type :string

+ + + + +
+ The unique name of this event type. +
+ + + +
Type:
+
    +
  • + +string + + +
  • +
+ + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + +

Methods

+ + + + + + + +

getAge() → (non-null) {number}

+ + + + + + +
+ Returns the number of milliseconds elapsed since this event was created. +
+ + + + + + + + + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ The number of milliseconds elapsed since this event was created. +
+ + + +
+
+ Type +
+
+ +number + + +
+
+ + + + + + + + + + + + + +

invokeLegacyHandler(eventTargetnon-null)

+ + + + + + +
+ Requests that the legacy event handler associated with this event be +invoked on the given event target. This function will be invoked +automatically by implementations of Guacamole.Event.Target +whenever emit() is invoked. +

+Older versions of Guacamole relied on single event handlers with the +prefix "on", such as "onmousedown" or "onkeyup". If a Guacamole.Event +implementation is replacing the event previously represented by one of +these handlers, this function gives the implementation the opportunity +to provide backward compatibility with the old handler. +

+Unless overridden, this function does nothing. +

+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
eventTarget + + +Guacamole.Event.Target + + + + The Guacamole.Event.Target that emitted this event.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

preventDefault()

+ + + + + + +
+ Requests that the default behavior of related DOM events be prevented. +Whether this request will be honored by the browser depends on the +nature of those events and the timing of the request. +
+ + + + + + + + + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

stopPropagation()

+ + + + + + +
+ Stops further propagation of related events through the DOM. Only events +that are directly related to this event will be stopped. +
+ + + + + + + + + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/doc/1.5.5/guacamole-common-js/Guacamole.Touch.State.html b/doc/1.5.5/guacamole-common-js/Guacamole.Touch.State.html new file mode 100644 index 000000000..c1b4c1065 --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/Guacamole.Touch.State.html @@ -0,0 +1,1010 @@ + + + + + JSDoc: Class: State + + + + + + + + + + +
+ +

Class: State

+ + + + + + +
+ +
+ +

+ Guacamole.Touch.State(templateopt)

+ + +
+ +
+
+ + + + + + +

new State(templateopt)

+ + + + + + +
+ The current state of a touch contact. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
template + + +Guacamole.Touch.State +| + +object + + + + + + <optional>
+ + + + + +
+ + {} + + The object whose properties should be copied within the new + Guacamole.Touch.State.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + +

Extends

+ + + + + + + + + + + + + + + + + + + + +

Members

+ + + +

(non-null) angle :number

+ + + + +
+ The rough angle of clockwise rotation of the general area of the touch +contact, in degrees. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
Default Value:
+
    +
  • 0.0
  • +
+ + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) force :number

+ + + + +
+ The relative force exerted by the touch contact, where 0 is no force +(the touch has been lifted) and 1 is maximum force (the maximum amount +of force representable by the device). +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
Default Value:
+
    +
  • 1.0
  • +
+ + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) id :number

+ + + + +
+ An arbitrary integer ID which uniquely identifies this contact relative +to other active contacts. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
Default Value:
+
    +
  • 0
  • +
+ + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) radiusX :number

+ + + + +
+ The Y radius of the ellipse covering the general area of the touch +contact, in pixels. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
Default Value:
+
    +
  • 0
  • +
+ + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) radiusY :number

+ + + + +
+ The X radius of the ellipse covering the general area of the touch +contact, in pixels. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
Default Value:
+
    +
  • 0
  • +
+ + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) x :number

+ + + + +
+ The current X position, in pixels. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + +
Default Value:
+
    +
  • 0
  • +
+ + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) y :number

+ + + + +
+ The current Y position, in pixels. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + +
Default Value:
+
    +
  • 0
  • +
+ + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + +

Methods

+ + + + + + + +

fromClientPosition(elementnon-null, clientXnon-null, clientYnon-null)

+ + + + + + +
+ Assigns the position represented by the given element and +clientX/clientY coordinates. The clientX and clientY coordinates are +relative to the browser viewport and are commonly available within +JavaScript event objects. The final position is translated to +coordinates that are relative the given element. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
element + + +Element + + + + The element the coordinates should be relative to.
clientX + + +number + + + + The viewport-relative X coordinate to translate.
clientY + + +number + + + + The viewport-relative Y coordinate to translate.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/doc/1.5.5/guacamole-common-js/Guacamole.Touch.html b/doc/1.5.5/guacamole-common-js/Guacamole.Touch.html new file mode 100644 index 000000000..8c0a59382 --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/Guacamole.Touch.html @@ -0,0 +1,1690 @@ + + + + + JSDoc: Class: Touch + + + + + + + + + + +
+ +

Class: Touch

+ + + + + + +
+ +
+ +

+ Guacamole.Touch(elementnon-null)

+ + +
+ +
+
+ + + + + + +

new Touch(elementnon-null)

+ + + + + + +
+ Provides cross-browser multi-touch events for a given element. The events of +the given element are automatically populated with handlers that translate +touch events into a non-browser-specific event provided by the +Guacamole.Touch instance. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
element + + +Element + + + + The Element to use to provide touch events.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + +

Extends

+ + + + + + + + + + + + +

Classes

+ +
+
Event
+
+ +
State
+
+
+ + + + + + + + + +

Members

+ + + +

activeTouches

+ + + + +
+ The number of active touches currently stored within +touches. +
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) touches :Object.<Number, Guacamole.Touch.State>

+ + + + +
+ The set of all active touches, stored by their unique identifiers. +
+ + + +
Type:
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + +

Methods

+ + + + + + + +

dispatch(eventnon-null)

+ + + + + + +
+ Dispatches the given event, invoking all event handlers registered with +this Guacamole.Event.Target for that event's +type. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
event + + +Guacamole.Event + + + + The event to dispatch.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

off(typenon-null, listenernon-null) → (non-null) {boolean}

+ + + + + + +
+ Unregisters a listener that was previously registered with +on() or +onEach(). If no such listener was +registered, this function has no effect. If multiple copies of the same +listener were registered, the first listener still registered will be +removed. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
type + + +string + + + + The unique name of the event type handled by the listener being + removed.
listener + + +Guacamole.Event.Target~listener + + + + The listener function previously provided to + on()or + onEach().
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ true if the specified listener was removed, false otherwise. +
+ + + +
+
+ Type +
+
+ +boolean + + +
+
+ + + + + + + + + + + + + +

offEach(typesnon-null, listenernon-null) → (non-null) {boolean}

+ + + + + + +
+ Unregisters listeners that were previously registered with +on() or +onEach(). If no such listeners +were registered, this function has no effect. If multiple copies of the +same listener were registered for the same event type, the first +listener still registered will be removed. +

+Invoking this function is equivalent to manually invoking +off() for each of the provided types. +

+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
types + + +Array.<string> + + + + The unique names of the event types handled by the listeners being + removed.
listener + + +Guacamole.Event.Target~listener + + + + The listener function previously provided to + on() or + onEach().
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ true if any of the specified listeners were removed, false + otherwise. +
+ + + +
+
+ Type +
+
+ +boolean + + +
+
+ + + + + + + + + + + + + +

on(typenon-null, listenernon-null)

+ + + + + + +
+ Registers a listener for events having the given type, as dictated by +the type property of Guacamole.Event +provided to dispatch(). +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
type + + +string + + + + The unique name of this event type.
listener + + +Guacamole.Event.Target~listener + + + + The function to invoke when an event having the given type is + dispatched. The Guacamole.Event object provided to + dispatch() will be passed to + this function, along with the dispatching Guacamole.Event.Target.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

onEach(typesnon-null, listenernon-null)

+ + + + + + +
+ Registers a listener for events having the given types, as dictated by +the type property of Guacamole.Event +provided to dispatch(). +

+Invoking this function is equivalent to manually invoking +on() for each of the provided types. +

+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
types + + +Array.<string> + + + + The unique names of the event types to associate with the given + listener.
listener + + +Guacamole.Event.Target~listener + + + + The function to invoke when an event having any of the given types + is dispatched. The Guacamole.Event object provided to + dispatch() will be passed to + this function, along with the dispatching Guacamole.Event.Target.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

Events

+ + + + + + + +

touchend

+ + + + + + +
+ Fired whenever an established touch contact is lifted from the element +associated with this Guacamole.Touch. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
event + + +Guacamole.Touch.Event + + + + A Guacamole.Touch.Event object representing the "touchend" + event.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

touchmove

+ + + + + + +
+ Fired whenever an established touch contact moves within the element +associated with this Guacamole.Touch. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
event + + +Guacamole.Touch.Event + + + + A Guacamole.Touch.Event object representing the "touchmove" + event.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

touchstart

+ + + + + + +
+ Fired whenever a new touch contact is initiated on the element +associated with this Guacamole.Touch. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
event + + +Guacamole.Touch.Event + + + + A Guacamole.Touch.Event object representing the "touchstart" + event.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/doc/1.5.5/guacamole-common-js/Guacamole.Tunnel.html b/doc/1.5.5/guacamole-common-js/Guacamole.Tunnel.html new file mode 100644 index 000000000..51786e5c1 --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/Guacamole.Tunnel.html @@ -0,0 +1,1708 @@ + + + + + JSDoc: Class: Tunnel + + + + + + + + + + +
+ +

Class: Tunnel

+ + + + + + +
+ +
+ +

+ Guacamole.Tunnel()

+ + +
+ +
+
+ + + + + + +

new Tunnel()

+ + + + + + +
+ Core object providing abstract communication for Guacamole. This object +is a null implementation whose functions do nothing. Guacamole applications +should use Guacamole.HTTPTunnel instead, or implement their own tunnel based +on this one. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + +
See:
+
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + +

Members

+ + + +

(non-null) receiveTimeout :number

+ + + + +
+ The maximum amount of time to wait for data to be received, in +milliseconds. If data is not received within this amount of time, +the tunnel is closed with an error. The default value is 15000. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) state :number

+ + + + +
+ The current state of this tunnel. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) unstableThreshold :number

+ + + + +
+ The amount of time to wait for data to be received before considering +the connection to be unstable, in milliseconds. If data is not received +within this amount of time, the tunnel status is updated to warn that +the connection appears unresponsive and may close. The default value is +1500. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

uuid :string

+ + + + +
+ The UUID uniquely identifying this tunnel. If not yet known, this will +be null. +
+ + + +
Type:
+
    +
  • + +string + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(static, constant, non-null) INTERNAL_DATA_OPCODE :string

+ + + + +
+ The Guacamole protocol instruction opcode reserved for arbitrary internal +use by tunnel implementations. The value of this opcode is guaranteed to be +the empty string (""). Tunnel implementations may use this opcode for any +purpose. It is currently used by the HTTP tunnel to mark the end of the HTTP +response, and by the WebSocket tunnel to transmit the tunnel UUID and send +connection stability test pings/responses. +
+ + + +
Type:
+
    +
  • + +string + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(static, non-null) State :Object.<string, number>

+ + + + +
+ All possible tunnel states. +
+ + + +
Type:
+
    +
  • + +Object.<string, number> + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + +

Methods

+ + + + + + + +

connect(dataopt)

+ + + + + + +
+ Connect to the tunnel with the given optional data. This data is +typically used for authentication. The format of data accepted is +up to the tunnel implementation. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeAttributesDescription
data + + +string + + + + + + <optional>
+ + + + + +
The data to send to the tunnel when connecting.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

disconnect()

+ + + + + + +
+ Disconnect from the tunnel. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

isConnected() → (non-null) {boolean}

+ + + + + + +
+ Returns whether this tunnel is currently connected. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ true if this tunnel is currently connected, false otherwise. +
+ + + +
+
+ Type +
+
+ +boolean + + +
+
+ + + + + + + + + + + + + +

sendMessage(…elements)

+ + + + + + +
+ Send the given message through the tunnel to the service on the other +side. All messages are guaranteed to be received in the order sent. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeAttributesDescription
elements + + +* + + + + + + + + + + <repeatable>
+ +
The elements of the message to send to the service on the other side + of the tunnel.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

Events

+ + + + + + + +

onerror

+ + + + + + +
+ Fired whenever an error is encountered by the tunnel. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
status + + +Guacamole.Status + + + + A status object which describes the error.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

oninstruction

+ + + + + + +
+ Fired once for every complete Guacamole instruction received, in order. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
opcode + + +string + + + + The Guacamole instruction opcode.
parameters + + +Array.<string> + + + + The parameters provided for the instruction, if any.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

onstatechange

+ + + + + + +
+ Fired whenever the state of the tunnel changes. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
state + + +number + + + + The new state of the client.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

onuuid

+ + + + + + +
+ Fired when the UUID that uniquely identifies this tunnel is known. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
The + + +string + + + + UUID uniquely identifying this tunnel.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/doc/1.5.5/guacamole-common-js/Guacamole.UTF8Parser.html b/doc/1.5.5/guacamole-common-js/Guacamole.UTF8Parser.html new file mode 100644 index 000000000..ab331b8e1 --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/Guacamole.UTF8Parser.html @@ -0,0 +1,173 @@ + + + + + JSDoc: Class: UTF8Parser + + + + + + + + + + +
+ +

Class: UTF8Parser

+ + + + + + +
+ +
+ +

+ Guacamole.UTF8Parser()

+ + +
+ +
+
+ + + + + + +

new UTF8Parser()

+ + + + + + +
+ Parser that decodes UTF-8 text from a series of provided ArrayBuffers. +Multi-byte characters that continue from one buffer to the next are handled +correctly. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/doc/1.5.5/guacamole-common-js/Guacamole.VideoPlayer.html b/doc/1.5.5/guacamole-common-js/Guacamole.VideoPlayer.html new file mode 100644 index 000000000..1f758f033 --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/Guacamole.VideoPlayer.html @@ -0,0 +1,756 @@ + + + + + JSDoc: Class: VideoPlayer + + + + + + + + + + +
+ +

Class: VideoPlayer

+ + + + + + +
+ +
+ +

+ Guacamole.VideoPlayer()

+ + +
+ +
+
+ + + + + + +

new VideoPlayer()

+ + + + + + +
+ Abstract video player which accepts, queues and plays back arbitrary video +data. It is up to implementations of this class to provide some means of +handling a provided Guacamole.InputStream and rendering the received data to +the provided Guacamole.Display.VisibleLayer. Data received along the +provided stream is to be played back immediately. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + +

Methods

+ + + + + + + +

sync()

+ + + + + + +
+ Notifies this Guacamole.VideoPlayer that all video up to the current +point in time has been given via the underlying stream, and that any +difference in time between queued video data and the current time can be +considered latency. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

(static) getInstance(streamnon-null, layernon-null, mimetypenon-null) → {Guacamole.VideoPlayer}

+ + + + + + +
+ Returns an instance of Guacamole.VideoPlayer providing support for the given +video format. If support for the given video format is not available, null +is returned. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
stream + + +Guacamole.InputStream + + + + The Guacamole.InputStream to read video data from.
layer + + +Guacamole.Display.VisibleLayer + + + + The destination layer in which this Guacamole.VideoPlayer should play + the received video data.
mimetype + + +string + + + + The mimetype of the video data in the provided stream.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ A Guacamole.VideoPlayer instance supporting the given mimetype and + reading from the given stream, or null if support for the given mimetype + is absent. +
+ + + +
+
+ Type +
+
+ +Guacamole.VideoPlayer + + +
+
+ + + + + + + + + + + + + +

(static) getSupportedTypes() → (non-null) {Array.<string>}

+ + + + + + +
+ Returns a list of all mimetypes supported by any built-in +Guacamole.VideoPlayer, in rough order of priority. Beware that only the core +mimetypes themselves will be listed. Any mimetype parameters, even required +ones, will not be included in the list. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ A list of all mimetypes supported by any built-in Guacamole.VideoPlayer, + excluding any parameters. +
+ + + +
+
+ Type +
+
+ +Array.<string> + + +
+
+ + + + + + + + + + + + + +

(static) isSupportedType(mimetypenon-null) → (non-null) {boolean}

+ + + + + + +
+ Determines whether the given mimetype is supported by any built-in +implementation of Guacamole.VideoPlayer, and thus will be properly handled +by Guacamole.VideoPlayer.getInstance(). +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
mimetype + + +string + + + + The mimetype to check.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ true if the given mimetype is supported by any built-in + Guacamole.VideoPlayer, false otherwise. +
+ + + +
+
+ Type +
+
+ +boolean + + +
+
+ + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/doc/1.5.5/guacamole-common-js/Guacamole.WebSocketTunnel.html b/doc/1.5.5/guacamole-common-js/Guacamole.WebSocketTunnel.html new file mode 100644 index 000000000..cd1f84a49 --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/Guacamole.WebSocketTunnel.html @@ -0,0 +1,1669 @@ + + + + + JSDoc: Class: WebSocketTunnel + + + + + + + + + + +
+ +

Class: WebSocketTunnel

+ + + + + + +
+ +
+ +

+ Guacamole.WebSocketTunnel(tunnelURLnon-null)

+ + +
+ +
+
+ + + + + + +

new WebSocketTunnel(tunnelURLnon-null)

+ + + + + + +
+ Guacamole Tunnel implemented over WebSocket via XMLHttpRequest. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
tunnelURL + + +string + + + + The URL of the WebSocket tunneling service.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + +

Extends

+ + + + + + + + + + + + + + + + + + + + +

Members

+ + + +

(non-null) receiveTimeout :number

+ + + + +
+ The maximum amount of time to wait for data to be received, in +milliseconds. If data is not received within this amount of time, +the tunnel is closed with an error. The default value is 15000. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) state :number

+ + + + +
+ The current state of this tunnel. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

(non-null) unstableThreshold :number

+ + + + +
+ The amount of time to wait for data to be received before considering +the connection to be unstable, in milliseconds. If data is not received +within this amount of time, the tunnel status is updated to warn that +the connection appears unresponsive and may close. The default value is +1500. +
+ + + +
Type:
+
    +
  • + +number + + +
  • +
+ + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + +

uuid :string

+ + + + +
+ The UUID uniquely identifying this tunnel. If not yet known, this will +be null. +
+ + + +
Type:
+
    +
  • + +string + + +
  • +
+ + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + +

Methods

+ + + + + + + +

connect(dataopt)

+ + + + + + +
+ Connect to the tunnel with the given optional data. This data is +typically used for authentication. The format of data accepted is +up to the tunnel implementation. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeAttributesDescription
data + + +string + + + + + + <optional>
+ + + + + +
The data to send to the tunnel when connecting.
+ + + + + + +
+ + + + + + + + +
Overrides:
+
+ + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

disconnect()

+ + + + + + +
+ Disconnect from the tunnel. +
+ + + + + + + + + + + + + +
+ + + + + + + + +
Overrides:
+
+ + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

isConnected() → (non-null) {boolean}

+ + + + + + +
+ Returns whether this tunnel is currently connected. +
+ + + + + + + + + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + +
Returns:
+ + +
+ true if this tunnel is currently connected, false otherwise. +
+ + + +
+
+ Type +
+
+ +boolean + + +
+
+ + + + + + + + + + + + + +

sendMessage(…elements)

+ + + + + + +
+ Send the given message through the tunnel to the service on the other +side. All messages are guaranteed to be received in the order sent. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeAttributesDescription
elements + + +* + + + + + + + + + + <repeatable>
+ +
The elements of the message to send to the service on the other side + of the tunnel.
+ + + + + + +
+ + + + + + + + +
Overrides:
+
+ + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

Events

+ + + + + + + +

onerror

+ + + + + + +
+ Fired whenever an error is encountered by the tunnel. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
status + + +Guacamole.Status + + + + A status object which describes the error.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

oninstruction

+ + + + + + +
+ Fired once for every complete Guacamole instruction received, in order. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
opcode + + +string + + + + The Guacamole instruction opcode.
parameters + + +Array.<string> + + + + The parameters provided for the instruction, if any.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

onstatechange

+ + + + + + +
+ Fired whenever the state of the tunnel changes. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
state + + +number + + + + The new state of the client.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

onuuid

+ + + + + + +
+ Fired when the UUID that uniquely identifies this tunnel is known. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
The + + +string + + + + UUID uniquely identifying this tunnel.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/doc/1.5.5/guacamole-common-js/Guacamole.html b/doc/1.5.5/guacamole-common-js/Guacamole.html new file mode 100644 index 000000000..abf2d184f --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/Guacamole.html @@ -0,0 +1,334 @@ + + + + + JSDoc: Namespace: Guacamole + + + + + + + + + + +
+ +

Namespace: Guacamole

+ + + + + + +
+ +
+ +

Guacamole

+ + +
+ +
+
+ + +
The namespace used by the Guacamole JavaScript API. Absolutely all classes +defined by the Guacamole JavaScript API will be within this namespace.
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + +
+ + + + + + +

Classes

+ +
+
ArrayBufferReader
+
+ +
ArrayBufferWriter
+
+ +
AudioPlayer
+
+ +
AudioRecorder
+
+ +
BlobReader
+
+ +
BlobWriter
+
+ +
ChainedTunnel
+
+ +
Client
+
+ +
DataURIReader
+
+ +
Display
+
+ +
Event
+
+ +
HTTPTunnel
+
+ +
InputSink
+
+ +
InputStream
+
+ +
IntegerPool
+
+ +
JSONReader
+
+ +
Keyboard
+
+ +
Layer
+
+ +
Mouse
+
+ +
Object
+
+ +
OnScreenKeyboard
+
+ +
OutputStream
+
+ +
Parser
+
+ +
Position
+
+ +
RawAudioFormat
+
+ +
RawAudioPlayer
+
+ +
RawAudioRecorder
+
+ +
SessionRecording
+
+ +
StaticHTTPTunnel
+
+ +
Status
+
+ +
StringReader
+
+ +
StringWriter
+
+ +
Touch
+
+ +
Tunnel
+
+ +
UTF8Parser
+
+ +
VideoPlayer
+
+ +
WebSocketTunnel
+
+
+ + + + + + + +

Namespaces

+ +
+
AudioContextFactory
+
+
+ + + +

Members

+ + + +

(static, non-null) API_VERSION :string

+ + + + +
+ The unique ID of this version of the Guacamole JavaScript API. This ID will +be the version string of the guacamole-common-js Maven project, and can be +used in downstream applications as a sanity check that the proper version +of the APIs is being used (in case an older version is cached, for example). +
+ + + +
Type:
+
    +
  • + +string + + +
  • +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/doc/1.5.5/guacamole-common-js/fonts/OpenSans-Bold-webfont.eot b/doc/1.5.5/guacamole-common-js/fonts/OpenSans-Bold-webfont.eot new file mode 100644 index 0000000000000000000000000000000000000000..5d20d916338a5890a033952e2e07ba7380f5a7d3 GIT binary patch literal 19544 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 literal 0 HcmV?d00001 diff --git a/doc/1.5.5/guacamole-common-js/fonts/OpenSans-Bold-webfont.svg b/doc/1.5.5/guacamole-common-js/fonts/OpenSans-Bold-webfont.svg new file mode 100644 index 000000000..3ed7be4bc --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/fonts/OpenSans-Bold-webfont.svg @@ -0,0 +1,1830 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/doc/1.5.5/guacamole-common-js/fonts/OpenSans-Bold-webfont.woff b/doc/1.5.5/guacamole-common-js/fonts/OpenSans-Bold-webfont.woff new file mode 100644 index 0000000000000000000000000000000000000000..1205787b0ed50db71ebd4f8a7f85d106721ff258 GIT binary patch literal 22432 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 ig3W + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/doc/1.5.5/guacamole-common-js/fonts/OpenSans-BoldItalic-webfont.woff b/doc/1.5.5/guacamole-common-js/fonts/OpenSans-BoldItalic-webfont.woff new file mode 100644 index 0000000000000000000000000000000000000000..ed760c0628b6a0026041f5b8bba466a0471fd2e0 GIT binary patch literal 23048 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/doc/1.5.5/guacamole-common-js/fonts/OpenSans-Italic-webfont.woff b/doc/1.5.5/guacamole-common-js/fonts/OpenSans-Italic-webfont.woff new file mode 100644 index 0000000000000000000000000000000000000000..ff652e64356b538c001423b6aedefcf1ee66cd17 GIT binary patch literal 23188 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 literal 0 HcmV?d00001 diff --git a/doc/1.5.5/guacamole-common-js/fonts/OpenSans-Light-webfont.svg b/doc/1.5.5/guacamole-common-js/fonts/OpenSans-Light-webfont.svg new file mode 100644 index 000000000..11a472ca8 --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/fonts/OpenSans-Light-webfont.svg @@ -0,0 +1,1831 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/doc/1.5.5/guacamole-common-js/fonts/OpenSans-Light-webfont.woff b/doc/1.5.5/guacamole-common-js/fonts/OpenSans-Light-webfont.woff new file mode 100644 index 0000000000000000000000000000000000000000..e786074813a27d0a7a249047832988d5bf0fe756 GIT binary patch literal 22248 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 literal 0 HcmV?d00001 diff --git a/doc/1.5.5/guacamole-common-js/fonts/OpenSans-LightItalic-webfont.eot b/doc/1.5.5/guacamole-common-js/fonts/OpenSans-LightItalic-webfont.eot new file mode 100644 index 0000000000000000000000000000000000000000..8f445929ffb03b50e98c2a2f7d831a0cb1b276a2 GIT binary patch literal 20535 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 Z%0#`NexefPFV?Xj51H#Y#AC7WXn+Jg($4?@ literal 0 HcmV?d00001 diff --git a/doc/1.5.5/guacamole-common-js/fonts/OpenSans-LightItalic-webfont.svg b/doc/1.5.5/guacamole-common-js/fonts/OpenSans-LightItalic-webfont.svg new file mode 100644 index 000000000..431d7e354 --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/fonts/OpenSans-LightItalic-webfont.svg @@ -0,0 +1,1835 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/doc/1.5.5/guacamole-common-js/fonts/OpenSans-LightItalic-webfont.woff b/doc/1.5.5/guacamole-common-js/fonts/OpenSans-LightItalic-webfont.woff new file mode 100644 index 0000000000000000000000000000000000000000..43e8b9e6cc061ff17fd2903075cbde12715512b3 GIT binary patch literal 23400 zcmZ^}18`?e^d=nJb~3STXQGL1+qNgRZQHhO+n(6?g`2m&|5saEwcEFzI(?pdPWS2V zs@A=3a$;gYz(7Aq%Nz*xKbeL0|LOnb|IZ{QrYr*l1YGvR;{69BS5Sbsh^W{PH}s};C5xs-P6IW9C4Fm)c^Z$WI+_ zKQcZN)>FvL!0E>qLGZ^0>VJS_X6<46!~FpQ65av=a!IPXxTrTbF)#)KQY8JcVfg_& zkYSRf`49QSssHG|en5%<2CiXlQ!y~@gw>Vptzt$wgxsPKit}n&C^eeb)HbU-}ZJ+KkZVV`{6!+%7Y0f))BOK zH2Lw>{NaG&{=rYh?Cy_YwQWe{ zPm`CO&kC-(_gf(w6)-|{nERgZ6RsvdyBDG14<$j7ef=mZG#)(n>lL4E#HZjlVc1)u zE$o?o=hs&I8f%}n#!Jd5QQsI^F^s|XdjMN+=vx7U80tLS<>49BYcJ}2Zb7;_b4nCJ zI9d41UOqA%q|^$a44I?u9?(!IlvO}R(7HzO$8%uu_(8b?NqPGw{Ccr70u!NJ)vkg7 zhp7B?S$&K~Wvl`^BfprjTy+h>;>*@(im`>|`Y*yivKb~$1PxAL3WLAyfv-6fC*W;R zsrpck_UUee_TV)GP*DReSb?~V2&ndnysdleTmD{CGROi&GB~TS74%qSc@XTvbbt#O z)u&fBL6jcTFEnr1-Ts$3LjwZI$7HQHk2D3Q@r5)p`Gl4g)(EP8!p8*hPh^AZLg#s#C=Gl%^P zJ7FDs<5F)`G^+1eKEG>r$M;fKlaNuVi+|Xo@lYJW_CDD|S3dilT$2#hEH5te6a_DY zm{_UmfV0bDk1^8^^d&_tQ=o`R?Q&+JLQh`?b8s20W-5U$936rK&xT{kx@688xQka5 zP?H1yNayNW)}(uaJ05?agUTul+k|4lQ{?eKeMqDVc__Q$IzTZ8-Z}PA#9-L`1?l0J z^MScXtR3)ctlwk@eh|G4hJ+Dj)d0@6k5jr&#Nt*9=2whm%CoZ@%sYpZYp4}XA9k1O`~IG z!6l`p(K);L;!+?BNq9A+23`lZgWcKY-^N^XzSaMQC^@3n;l?*TR<5F1UtNA4u)^5K zu-^iSVOYK^zVBjIdh==9lg8lFh-^V;gm2t4^GrK4C<#p`sP?;51|%jyKfc;^Ub(q~ z)-MjpeqU+$u-<<=^mvb0I8F~J(WFOme2(OuI@?=$A^JIakF5CG0p(8vA%=P|=D!!dn*2Zsk}gE+|=+6e=B2?oh&)453r z+Hs>geSP2xgV%4uKl(<{jEsP{cS=SmFu*&AL>=Xr@<`UyqX+~75^R)4pC^_-aTJ`X zenzr?s8Enlh)}pt;66SmOCUv{z@Qf6)!=Q2KlGRvJgEZs>n; znEDQs4faj+4RA*;r}_IU5d3D*GyY>_xTkM;U}|b)YGPn$=+W2rxZ^MME5qMk2s8{E z4nHs(8w=arud%N9Q_4txZ_JokQC~j`F~O+bY#X8o4J!@UiyGedXFfL4*Vi}wtB(yK z27&Yndc+g}poK&H+XNj55=RDNe8;@R^kK$o3};%U&pqNCc@_hb8W0wc6p$5=5Rehj z6ObGb`Mc|P_yCS*F(h2C#@9Dw<|yn^FHji`R86Fikf6|SA&81e6j4l2dCbG_+Hb;d zfk(fC?}6{0Z>+DL&-au5aY%6jJa7BG{vF6p0&CB@`~Cn(8^j0#^<9CI+k_|drDIZ1 zF?NVHRWWj+{-7ElELPeo>r1>W?JeFe?+=iG-vh)2h6gAKiVMsQj`uJTk`vSwmghJb znj735o^KE#Vk6`wrY9IFsw?a*uFnWDvNQBGw$}tXx;y+mzF)xpLjAw;4fc`a73P`h z9qypR;cTw5w-e2#w7Sg48;U2@YIK`Tuijj6*==_^Og3Y#yj*X#N9B_eGCX<>4TPQ} z8)!pfG~kBe;LeWqSC5w%tJap&vLFplSNQ)}T4wvcjy>VJUGH=?C+_dfQ_K?b`F@7v z-#_z(q~x6J)O~21HXG(f7mC%aBnrQf~4_n=?B01A);mbN+=5FpeWgogjt*K8FFw?#3uf#5pop za2ISAhrIc*AUZ5Y3+iFlUpjbD)nGbBw9dyogzp-?Csa+Rk0b)sFEOb>DLISm6yi5C znU$^D-Pn;vBE@o`4$<7o_l`u#%cF{C{NcDA`^WVO{Y187ss~gSsLhEYqs)StU^9@B}29I0IiPB|xaKgE^B;Lr^N_ ziBc*MOe8~f3**BwAr#qhp2`LbItZz+@n$=Un<4az9Fs}3>ve5TIvu!g8z3dBP%mxx zqU!hS-xMkYsl`f2zSpR@6mTFEhZRFL!wUzceYeG#%d5bdP0(nlT@Z(^u1hyt!p`y+ z?_3lrS(TQjUBu?CV`IeeMLfpXWhstJW?DiSR;3lHU5BSzK+~D*smNI7eNcd%)Ba>v zLaHyN6Um1&@#6CU7-Vp>SMO&%hbcq*S}VWx_WRTtOD zu5DILQszQpPKkXhlf7 zd=_>UC!ZgMxf~m7HHR=24MY}P&`5a1w74E(lBuZfL@rnYyix9rSM7z(Cs+93T!W}& zJioPvcHSM7J}7v&^;DMTVQWlgnrB;B)G9(Yhj!=eAlCl+5h%5{v(&SEQN?<$4HO2 zLVf1PO!3i2UJu2H_cT6w3wld}mHONvR`jb2TOy3!N|X0H7*O4F`k9OExb=balE_Zy@P(9q` zdiACoC^x-*@8V#Y_S|GS&GNl;U30w%gC!G*oCoiR38PGGMJlMq`k?Hd<#Kt6?#J>y zJAmyJbmM)h=Mml{4y~;ayfc1o*)-uMUWs`@OT;DKnzjpJ`FQIy4W#)M$^rb>kX2&O9RcVNB}Y6g)m;K@4`hZCM?1|a z?do=bVg)nl5OEb94g=xUmlWcy;FcN*MG{ySE<)U=YZyelPM7r0K$)Z&)M*hTyh1tI zG9>{jifYxcrAr%*I|d=B;X8yD#8*pfc^V9ly41MfXe` zze7%fzxur4M6D8G9g)~nx_6ojx+X<5%(2#T;YfL_T53nhk~k*dfM!NQT+S!OK9U2K zA`y@n>PC~rq*^Mc6^{e6LW9c_a;cxc`b% zBvz1zQOTAzp^v3nUX=eQfp(ZkZGV_ikQohZQBsnbJ5vVAW%?{DH~vOaN-`>jbvXSH zj=Om%h>c0=#{cnN+&@W8{RXeaTbFCU$Nk6bqOvz$VEz8pNXsF$ zbmdu>qLn_E4Hoh3FlpS~_8qg>>Nq!LHtUH}wK|g-TVb8js*`jGsx%%#LxG<9=~*Ux z0hTwk!H0tfD^9-P2P2O(x`(y@Sg(6quxv!EX> zc{31Ruxx1L6zO!&t1d1+<}&@jX)u?BuNsLU#Rwp1rCi68#fNZ>lcGbE;d&Z^1MH8R znNDi83aq(BdVg#-HN@uVwRRg`5NL1olDTdKaUjg-alhPmV9G(U5Ng+1AC^TYR^rxt zySjsZo$gswR+!d~4zxr*4I@tZz5PR#3K3Z1Ri7cSw|w>6>F~67+(t&SBX#1rwJ0GZ z?pA&4Ck;rq)W_S8$|^v)wUCF5Apgs-*8l;4;(~s$h##*sn*`!V5GGS)Vd|KIKy@WC zWKF{_+J`xznCQWcoLDu&ClHdfZ}T2^ljo=HWzg#*?z5~+jomW>qKWD+U?md!4Hg^> z55^NWzLw0nP40au;J7Ig~Ym8K; zK|lgrs6fOvfJBOv&!OZ6F@HYrtlf!R6|ijUjMT~tUyB>NI=(oPSpD?M}yArM9*A3 zgv1id2mO_LoamUbwtnXy5(1-s_a?>GWxW(Sx%a}~T2+<#_l+L$)OiAVC~IFN0+<&~ zhj0?)w3DA}6c|hY1u0(N!@$iJprLEvbwk5pXGoZMx(e*J>uR$SM~#VvVs=xPO|l*M z3;9rP1zAO<0r>`%(2#*`Rb|7u&8j!q5Lqe-kf|)uz;YNS*XR+CYp{HsP^`|9+v|u? z0lj*&n=-Rmy3xU-YML23D~6=q6x$!e&IW1t8u!o+%Fk^?un)as||0Ca;A^ftv^pmAgAO zibO{O+Q9X~54V8&X(ZWv%A^CAwShrSS^wo4#W^GaWpQe@2aB~puYl-34y2MZu6zc~ zPO(k=*#5BuyL`s$3w&~?SKos)H&L&9EFMe%Cs5tqm!ZnSQUEHDJlqwJ1B=Fnt4ewzJ|z^C2hG*M-rFeYXqB;gQbO!Dl0T%53wQx9^S)(jsnW&H%8pYF-b}H@VeS~8t--G>+-goS76>gdY>Gr-)h>u{w(!oV)Ip84n{>3$V`!8Ujk?v z`3rRZ?UAh8RbZ?X-T94tA~k?VE*cgV@Fxf&O)1{q&_$n|PQU8!M!sNmGDCQ{taO-c zw1kW-D;FL$?DB@hHQucVUU-;OqsHTGW89#1DoH$cjZW|2XK%*twldcx40Re~IS#5-Bk=KAQo;heDxkw@ z^ZdDqNa=b6Gj*r9S08rJ#pLS)7YQpSGytuFMvM|Iw)4-?=oW>{JNV*=guP~B;cfS~ z$@bC(q(PLCKcZ+J1F-_id4OX#R}E$37%BoLbQ(3>Tp#0O+`5Fs2xYsJWNHwn4pzia ze1V^<2o>dqermr=U~U9Mi8Pk@m3xrk*f_^*Z}-Dd0$1YAEr&s??3|ZEoJ*B-C`8oAYkYY1UU|#m?%pvG)c0t+)BHUmT&zVokJX zo4@s~e<5cRQ(6P;feUqH|1Y2^AB{VAPu-r##F`&mfyfY)F>sJr4L@r*6T?E;__wyP zq%zD9mNkFB<9&<>wGFgs=z)IyPxn6}hL>aPI7sq4-hKI!kRLGQ%JY4s+Ju^YTYOg9 zO;nclYBx8S{2QUlUcIFT%=TER5my+Fx48MeY$#PD>S=F2jt{tKdCAz=Zq(;iFGJhx z9$tBqtwFJ5N(gAQWCmi26Pq_b_XWfD40dgbMvt;w&vb8DkZl3H?F8f`E?n!#2Im+B_jmmr!jA5CF+bB3lvdpcS8Q0sHt;Am=ex?Z_is?@P29sA52sEHSV{p;TW;RbPvt0C%s3C8~!br5?qHv zOxGh6SpJ3S0o5o%8omG}-(Qjcr&tk0mfY5pZO9DUpT}Ija3rhaZKid>e0r-}E521L z_u5AhZ=8xsnIU98O(t9x&$n9;+u%^d1l*r|EGX8)FgT8R)F_xH@ee(vq8EZ43J5IS ztdT4-hnxVr(Ip)J%~{3SB*vG`XBXLER(B*dA#VNAM9p_X>NmmZ{uoQ{=k=u0eR=lx zNN@iU9o|Eg-BA<=Ioz4R*LqX~am_g!-~zKGro(OEZCLB5S?AaY5%G-2cu+2~MO*hS znD-^(!whg0Q4xV@|3z2_-upbr4KOr#Fq^a-x!Lr;V($o9@gL@=8K<~}JI@N5oDJYnZ);shr~wNEf1^;;Y|M$gUS9Kx=RxS;#~ zqugUP5Pv~dM8HFDN2mP@x9sOYLi&L{cjY-Z@sz>hwu8DnJ(MOev4q&|FFy7?&md03^;IE51i&aI25q< z(Ehs1Pj0(E!hA=BhIHls9O}$|eZ@S<{-QYDcz(PD^pNjX>~=NTM*G?L?{tG$ktNii z(THgW;RJ~U_7hSUv;;zTEe$40?;rhqoYr+Rqfv#J*|ApsDw8UpHwJ zfCL;U8zYubP2oT>6)Ks|+4k<%@Tb1XqBx+TPD#@p;awpyl=a4?HjY4v)YkWa*R|Zd zBSY~L68TfU$7LSIjrh?K#`Ly0pD=8@!Wee-z4IQ}5{I43cZ|~n2=M4}T3>CLX_No@ z;lLRzFd`ILUuyd^z@NrDsqPla6iuCP_9g%|Y3{ab?ve<-x>#$6@3_MdZo>&cZ4jwz z+lm9-pS=T}Lt^YcqZef^y9ESzTSxir1c9WrswW*zFZio24{rH4gFWByprD}c$E4s!`EWuPqL@U^5^c=J4d<}oe$Uw=|NeAy|G;E6!Rtfi0Ab)P9qYHM6tqXLap`!m2ff%?POGhuksu<3^T2&Ky#o#{{7V zT5k^t^GLZGqyQaeKgGT);~EU1swP@ho{wYeu?KB8j#Gn^r)(OzhzQk_EfUDJ*W=3d zc^Dllv1SEK#*Ss)p|?@sadk^9VK_vH`=8md2GDy_&)~4VmhW?Bt#)$W%JU_`0!fCx zxKVMKKTHZtjh7re*eb+I|HqJ{M zVIxU|M<)y%&&Vdab$2HrJft5Rp9=TvWF15AI$~LjXe%CjL4Y3x(}1o8>~a{_@Rysv zz=M;%`Uu}5kYT-m0j!vZA%u5TAYbHwZyeaS?8Mf0q}6%yUc;910-#_%j-Z$P5sjdw z1z@M4{;(~4FC*6&1D!Eu@*-UB;T5D<2*yyHa*Uge_Oh%|x9B>2OEfvZ=OLWd@cCqX zUwcxu;>}Wa`if9`D1Ozu1laF|&=Elzr6UwEBW^f_5rYvWm_tF^L&Z@i{OzBRr#IkO zgX73mII~h&cih1Ve3%FqGjSp;M}Li8)l}<8Vz>dsXHGm0+p0r87~lsfS^1T^Yt%;8 z{WE-I8W-|GmRF`shwd4dQ4wE7Gx$OV1hT9iPlh^-uYc>0yB(_lcC~unwx!g)Pn2wJ zGPgdhvSJGRo&eLLfUWY_qZ5HIH(c%z4(-=FO?kgNr*&?QH?@ug)MJkp0#M{kl6l)E z*d@7U(Ae^V(WU8--q-dXGg*3wv%YPCx2~rFp6c(EUCznWaf2TG0e|5hVR3 z9^6*sVH%bw4@P?0{%9V}cT*+jBB~v{TP!Av(@EEA#L`;7wUJjV03cc?4Vc?QU>$(2UTc}P2=J^j?b5{~9 zp~UHavUiW5$+P=@jn`$CcUjGn?Bv-N-+QvU@TsS2u;m^=-?97dj@Q^$h8w~mqX{2b zU^XnMZ}EJWI>lUSJvE~P%CtIWFy-WP7%>;gxDftxX5pvwK~X%i6BK&)ctHW@0G;OB zYN=Qc>j6Mme1_~fo85l#@?@6*ztu+M_xxmFt^l_yAhEIY5FR#mnW99d+{47DKa5}W z4D^MSqnCYVzd~l(d%yo(6%9V8PB8z8^41#nR=U6g^E^53SHwRs=Tg1WxxBd;MCm?P z?1Q&O)An4(h89)-ddQVw>6R}c$Oq^AMl5`IC9zUk0BNLf9&ZSEy#6IjB!V_iV0MS~ zz!b~&k)L+L`!HV5O&Pda&$rA8_P(H1iZ`J5wj+Of>v1JT!RSay{Cmi!Vvh%!RnLTb zcVA}jXCcPhhY0x0keX-KEDAnGpiF!yBX_p9bqa#db$+4X%h2q__Q>m@((E?a2>iLD z8>9a`U;=-Bfs$ZN#Ss6b!yhRei&ci|?ZeyL1{>Glpn-xrE(Pkf) zxyz7I4ZE$!9RP+*O}N;v8GXF_RG;tVkEA%b-FM#|0%^oj3lqrsNcdQZG%?YnMT7G` zAEB4G66lr(T-n;HUU&k|3zOyU^%e$&kL-1NE8H zlg1D0gyD2kPN{8fWt#Q!?%iTY;*|L6!Zq)XM-__)~4@oHG`$hOGHLVN8M)}ae+rYuMCdqV5U4=-vZ39`AwOyEyMjAm0f{;b z$Yi!tP}Av)Ff+3$c~2W6wtO@oTyM<4{zABVT3hpiE4V}vz^k!w0?}ck3%e-#agd;rqN0SG?Y0+H}hsPR{*%WEniS zDF$n6!LQTXeDkC^>Dk{#;J&^9oK=ZflU-kqcc?qNyd2463kVdso)s8sr5V-Q$Ov0Z zIf$wm%Puvy6R(Tnn1I{2%_NCq!?K@}eI&tLW+~K)Z6YlmJJVncgwi(@j2=4PTo&mP z33*zQc&=AGw026JkjityVV6njaCpAgu3sUuHnwu7wPh9*Re#9{emapKovtVJ)NY-q zmYYoAfxb5VyPenlE(E{r$b;MRgrZsJK(#-s9!na20XP2_UVZ)Nn&8Py$tz3O?`Jxu zG^8~_W9TWtFG3Jz@2}-V+?w7xL&Z{wMT}gFow|mbt)52OQvuG1&`TE;6F#c%GmhCV zJe%5a#EBV4h!=HT* zPwiG5Lyb)}!P5rG=ZPE$LBJkb{Jen9069Qv%Ns40&*ji^avgUNgTF_ZzeDMZnDRv% z_I54=#r$gyMvU%vco>)nr@!*xpI3R=h_zhKqDI1Wq-1@jvw^>b?AA)b_GlpXJJ(2{ z$TeIFNrDLa2LfKl-E0Cj9p6HLxQ`YcZ|kQ9al(@n-^4_jAmo%xSUWUn4Zy><0cEMzTOWv(E5(K_AevI`u&oGjQHyvbAmG zNe>FnZ#=^y;-czNZ;X3QV}ZwV{qmRZB3&NGxjwreWIQm8VAkk$aLEy-0fzEZ_{?X?)zF{!xHHg=5%YB_P=oUi-s1Xe&O7eN@CQ>Pk)a|U( zQr&QPQL4HdB8MWELKl&zM4QBV)hl)-KE8V@%^v^Y~Fe zPIs}%gcJTnpJru05TRXYv%fI-jhFeh)jM{QpQ5a`kepuq(xwxYMhq**uCn7dmtoPT zu=UeQOANhZ&=-dcPBr;QJiF*g0}xMRW5Uf0lsU}kbxjiLsE_W6)-+< z{*3275tDOWRS+>hudYO)=TJ3l^~w5|c12{XHSYTq{t4EqxB!R?rngiQt&?cScwkizzzgF-5vGTB>7Byh|Bgz9ll+4h>RZS_mD zdRK%Y0$Xs^|2iKZA(6s+GGa*C9KKgt#JM>g63S)ephJ(!yxF^x^iNTO7z_OxrNJGMNy2WDN_AzVcy&A|oeK|kPTz#WnLZVQ#z2+~i z)bPNK^e+;9{NQ`+_DSkewUeIKTo%+feDN1^F)|X=N$OsnkzrqIe?f=gdX)U(rj!dml;J$)uSK0E{<4VDBFtuKk0AwjY{z0E2?oHyN($n0Ss}d!KeSiU^}a#045u)VSW-Yz+VgqBQ6 zcx?&m#JF=YRkBe| z`57#LIKIJORvAdqTtLK za<&bMDiI^Zk_ghuGGA-11T-Oi_GNI}lT<7z3Y$ENL zye)z5$^JY1HBgow8~4Bw1CrI=_n-!B%X;tLxlpZ-Lye-DG*2|g4TT_wPuABEY+cXA3a{&cWs>>zc$SZfS~{VXLCdzErOpV$0e^o!G_`>4Mm>~TVCLG?Z*1a670 zp(3d=13huiSSoyR9kO7uh6ERzIWu`kj#6Ex6Tu} zG2~pO*>dk)tZ|4$IZ~C+wkzS#mWFQgB^~~OVOU6c>g-8brn;|x{J+|kz_cxIEBnK- zkg*i85OF5b4Vg0GSjT>sb0)8>k{-Fz4J{en%D?ndT*s{IvaK1kc$AGw7gW2O;WBR- zaU1Bgkvb}Goh;XnOiXAiS!{j0OG1d41|woI5OT%Omo`%a)*I@TZYz?VXe1nui2%#! zPBL8<-n%u6y=N!XZKWt5y}r!9I)^Fa%ufIEDbztUGos<^e2c+Z$zI6065-QhKV>A` z*yG|C>G^bHJ>}k@adA-){_@h_qUXMDQ@5wJkia6YbF5s4z!q;UOO~gT{_9X$>R-;H za22J!hF(TK;!lxUArqTkE*}bssJ&tQm^QksrI{icBkgXOTyCpg zQ_pI8eFWSs<6$82IYBqz5A9-6Ty2B`0Z-TI7O~aUQJzo)hZ{wMLC*}E65h=V%0%_& zDhpMiyy{A{$luKgJg@zs+oLH#8j%Je30_>VcX2~JZp2dcgKXZVaLe83W?w%2g|>%hF$|C&MU0(y2B2_yusN*J@m#h{LN-%`H@tPX7X7f(8qvjNhU z`zG1trh;8sBK`4clmN&F%p}YrbLWwUQ4AgRMCD{=EAPvqaw-0tZinFl zmFZcn8PRO7eWL5<8sA-l9gXB>jjzR>D<01!XV7*_@a-NYPX7b*D;&DpqcoX7bIqcO z09^E_;&lvYIvMnVa_@N*ANg1aY6C`L2Ts}QH9rb6DMPL90x$s!m$3DHhrl$4Mb~PV z6PcXegXGt*SLnp8xZDRMKx}dI0;6X($#>A*YhP0@48=r<=&7|f!%a7*Igz-hHB}l*PV;^D!+e<0I;n@Hzign%PmJvGd+ojmJ}NCrJo5awT!I8;y0==igVWsaOw<$c2XQkJY$#dBZ9c3k~bMaoE839(-gwM}{GlPbZieMcU zkc%=X=OyM8R`P`P1y#QyQgIH8wJhqWLqjVnS3#kzQ&{;LJiT(IGzhOAd*MYTq~x3n=J#uQdaF4F3eR!+ z10O1(LZ=MD)Swxdz^Sn&JTo=Am-yNb6IG{}BLYqK{flgsC9yMK7P{NGQaQFWo+ZwQ zEQ6T5Y@n-Cy2*S-XFk&`T+^>M>vu{KlBX%oG_$yTWnL~qtH4GuvD0_-wc1>aZrV{! z2WvSbozI#9qa)RL@d9maQqKn&zKKHN+9=jr(EF5?7Mqpsf&0!hFz_aw2ziH)m(ZO6 zVc7S%x%uRhn3^VM=i=%@nnK&&`;M8p6?!6jPIw}Ufd6FAtU)bdJ?Jk`T z^oCsPPy^vjviOx~4F%>2QIj2DQ+a$0^gQ`SPpqNx4}AKxlslx18<-^GmQo=mN3+fa zyyvtsSJB$%7a@@*o?gio47cLW+OF{l_Tt2_QNx2|KJ^3hI-xJ^Vx}LT zh-Niz_!++hW^ChIeVnCt?#8jTUGQqQUYK2bdl0XADZgV@rX1)URXC?R3^XAwB_Lxc zc2ORM;vj2^p~TW5d}+^Ybs7h}{(7DF$1eg8 z0r#AnGW=f_`O-Pj6@u+r@BT4~w=|0x|5VvDxDpL0w>*Vlk%xSKClstMtF6dwt ztc+zSUi7o8tvRReTyO%KyDK3O`<0~0Nw|3bAm4TbkCrfUvQ#I+Xn7fe9 zJ=2!hX{*7C zw&?Qr%l{NQ^=NZbiDpOO?@evrKz?qN+nzuFhUE+u%I;DZ^d;cT4~$022sDZc%60WonSa^`>Sb&VFh#s3N2dfOC}_!PuV=b5G%yPrb$xUr@Bq&wq6{!Kj>cf zwsn}!gD$H`z2ZCRdYH^~rRwEyoclwHsnF?6eAJ0DG7$@a-~Lm0`pbvh6i#0REQSOk z6hJ8{{IA4?Q-|9jpN~0gr8*X-TR%yS5CfwGaWOL~fT|-Ee}RMKXrmelAKc6A$YM)! zffd6p0e5s_kzr|d@e5s1QZ|6WxNw=$KyzS&{zI$D{~A`?(1|mdP80F@bV*|t93Edp zqAn3_Mp0`2`}-)MYsbIZ>^EKc4E=pd|>qpEBh$1 za6says67?Ii~iq7eH;0lS$1#HF7i2glI5e$CpPBCdR!bh(Y4_I}>;pis0%g!-Kiw#%&A>Fb8X|E=K_Hr=zx z$~=>Fw@d0%Y>q3IMwKV~*`zE-+v|k}Iy=t4HvDeMGrDc}SN%8_;)o#f@qf(hJsiC$ z6U|2{3~xs;B?Cb4PF$To3Q9X(-m#@aJDiOY=4$Fb*L}ELp;^>%KIl$wRvxG${;H~V zRNY0pY7P!9ZP(v7o=mb=)^ zK1*ojqG*S*N;&CSEJK=)7)HLLvWIOqI^a<+wJ~~H{i0(gmd#T7T6=vjMc7tfH*<`o z`=oHCL6zlYv^u#6Gx5H&=%GhrWte)yvRwd_QI%Set`@Zk0Tzv9?X74LPC9Q$n6kp0IXGZ$*32~kcZkRm zoNkVr#6-I@Y<~)JE%BEJ`7=(6X_j~s$O$In8yAfEQEdP;Ty$q3=}08zcHdyam3%r6 zT02kxQmHTj%F3YtfbSO`zj!9?R^rBtBjkj$>Cf z@_r{bRcZ-G3rwLL^+}{48V$upNJ)ZP))J_Y{yssy+KRB2AT$)zHCl`Z&7yfKs4_G_ zbQLp{iuT_QA8nP_>@^>(=aE;(iLt9|aWU!eD1?SVURB;h#1YjI>2BzgsNhxsEJYZ4 zKWdC8v?P7Rx>$?m(^j<%viib&Q^LW>MnLs%)@>AN>bPOUQfQ^jo0}fzXA*`II6sep zMmye*$6K$)>dozJuj8WBxW)R&6~ufUC5w=xDkyR=k$0acj%|o+B}OQif{3W*)Gx}9$L}AT!>BLaot(RP zQ`xu=C{iIyG$wriibG`QhqcE7Vj48y%SV=gdTx=tw@k*pVSB`mK)m_705JT}u+(s}QR>y# z?u=-nNz;Zfe^v<`}pUd5u4IyAp0;FtC`}$D8YZR1; zw=6@2d#U3$q?_XO8%9tI;RP!rwUymc{vB(K`ioKwMw2Mxj~5KQW#oz#SlGQsxH*kr z(8FL;p-oJvJ#lqts_AW&`6oR%KX zh+y}wG@_f@+QM3}*oct_LAtegf`?~~RSGU<>M|9|K{nB3N#kJx!Su;!KjEw=8UFg< zB?DjP>|AG8LC7it+b5TS_}o7vX?+$|;^%ua?Sk|oqXT=#@u=firYXhkcLvCWIdS5_ z=tq+XazG>IcQy{(u=Djz-`>fC3h^^oik=Z=0?8NC z$QIyC%WBHOl$q4SP0CbrIz_AXftqP<;IfT@s#Ns^Bq?|BXDo&pL~~Y;|1d6;F6=Bg zG^0*6j*jUhXOY)+#h;s7@d2*O00gj6>L?XwE?lb?y;QxR`sZg1i+UUh9Ja7%F?2Bz z*};qq9?KF&>})ED@Vk1Z`FP|JR;7%EdE}hEQ>u&Pza9l0W*m!rTwlrWZ2IRXPo$gB zO3fe)ti*dn>LoF;g!ZH(!_?wPq!bd_+HU^aQ7SN(L+ZqgzmVMP*3{cbE|ZMC1{eZ; z@O(&7%;X^hX8s)T(Y9K%sd{ zCh+kCX>N}f4{e<~KvO(C{fQh}RStT(^junlSgNc~Dgmx7voM-70a4KVMx+j=vK;T-x4jHzC(tlhrfX>19Oo zZ>8HWyOZSw{)O;vY5ny0aFhJ{dZN;FEPhZ=rq`kSOSnr?1G0)^fI-e{4R7mE5Axjr zK~Q)|Y`X)&)+(=$lbm}Xf^IFrSR%nt$1QLZ?$XGV?YfqE}M? z<$f!p0MOLT4r_PFZPt)1fVyC_tIv3dBcz2zot8XNBFqiks{%$NH#<0o;CJP@yKJ6U z#1e8kL6EJ_NA?N`Ja9GMeE<*#^^`+ zz*(;3KRy{eMEU9=-=Sl_#b&miM*MDIMO{KQp)I;E@qH zyBzmkwPn=2Nxe(D*A4q@|Jv$|l|7d|QCL<{nm%~!_=2fp7H>|F&)Xl7Ew-x2@%IUf z@%Z^O1}q&q@ZN6j0V#!#jM;U(*Oa8pH46qz&g(X@cYe+AzI|#ueabgKasAoNs}!3= z`v^pP&?c3zIK3DqWW0B*%L&0Nb(GXdtwIgA=Ks}dU2%Jbn5Mm2TpLm?ZZQ)~m2qs0 zInk0BC~*V!nusYZ+I43dnngxKs)MMhvjzkJ8Mo1(QvE_2I=h@HKTCt-78;KG2%6}f zkmE|>R2sVDsnURPzMTq` zZHV+yb_;vlLKHonKm`*)Pbz4qC9Iv6@DN)3n~QgbVfjTc4F3;wnEoH=u>3#JVf%le zBkKQ5$N!B4|1PaJkxCksv(D+xAJxT*$;qQ2M=MzmUfsKkoBsf8*A%coYOp`1?XSn64jnSoJ}x1dkYKAzl+9+^Fy z$@ch|D0)t$$)HtJYEWm~*{Jj)Ne)loBo5Y_Lib6fTbfkzJXRe}&gsdum(ya_v_j1a zzjXedSm&TLb?w_T<}7&R%I3y7I!*T?$Lh1w7s~I;A39a5AM3risC-513&m?&Mx>6d zng8L8;XF6{+wNVk^y47QoQbF9HOr3d`52EsHlzOC!)NACd+m@rs)jxO z_9q3+5AK$KdwA0_ZvVxjD<14SRIw+rh4wfF=dzEI^}utLtOu<+wP_*ZjKmU`hDCIH z)`KIG#ML2@rf-CXkiMvpa_gJ39&iVtDb-(i%bl|xiY#(1A-1TWVh{g?&`9s_^b{gW z5jfbh1?E~3aYLZ>2++|kw43{n{Dt1pQ4}Y{Q=Ovh(RQm@9}ZX}Nu(x_YXQ8k--fsO z6NcBBNF*@?FCYcf?RZ7;u6SMPDam)k``~SOkAH+vjdxUbdNL=f+7U}wRAE)YeR6a4Y4f>?#2%hKJL{7um)+dB=13w8PZa4#>-AJr>Ka$71{SSfYL{mS2S+px@)@9Ot@~K=syH4rA+y_S76#=7kkcZxnljMX)855I^Ll)o9}aozHaN}l=L(!aE(?B;U}IJY97`yi zCAYyjE`LBG&{du8~XflunEPhxk6!{H-)hNG1&w@~-)~1}&pqvyO z0>&?)Azxc=`Py*zyG?h$+j952ZFj#r>TY-6@kYN?yy0MZO_64!lwQ+;q65XFOd7$) z$Hh|H%Mql(UIfu0PY>$C2w2TmD<|10A*Ved&6$vC&om`x(sL|QoSryrOSTCSCVC20 zh-K_boPyIFJf(`oS>$A1L-&NSZme;(p%J6x3$ncT!-W?&Oxl(zRQ8j== z>IJXWZ4id_7+exvp0}y=ky-M)zmcDor+;>27nU9!H+nVhJo@?mH`dI%v2M_k{_{V7 z_=z3JKkt0D;-j;9AENl^Fy3L_A;CT>jVhdoJWb+Bl6olhp8}3ou(>MC-&_?Fjd7Q( z3|DGOlEWS!ofDITqi_`6$WPJv_cvLelp?odDb5PTF8u@1s-UCwisdV&+}v7I6;`WQnDtW+J*siN!`?~BX#fI1(-7=iy#tQqq=fii zj^p?bi00p1N%1VdAz)sl2beW5%cf#jq>ivqi+b}|)FF6u${dB@`A~(>5N{b$iD86C zDxMx}DGj9>k7`DWMsq8g*iIBt4#Z07snliY)HSwiC_;bS#>S=Sf)IR-e@D1k(F6|V zKttLP7zW0g;!@p;%dZteF16g{Qo}EYYWn3+Ex#P9?UzH1`lV2R5x{``iKbISCx&ic zhfWIhZaB0PYxpewNmes&qj|aZ>U1&W#KMrGeZXTi>e+#&^dJh!e_&zPK*^Xf_--e+ z()U$e7k9U`y1L9<_(`_b*UO(ZdffRrT=FDO*Zgc&Ynst^kk95A9s=Gc{O6;4*nF7#H#Z4QLBJ$}=H8-kIP`O-mL`E>GYD0HyMqC}rQcD@&{9 znJ|k4Y&d0m(fVsoZ>pcttEtc0Yulc$p6cbMIec4-S1vl%Bwtu?yg7l4E?v~Pi#9`6 zEYDp#@fq42Ido+n`DA>VFS`FzI0IjyO_DAB$Y1&?`Bc`ArL5g4RK`atItbR(`~!(` zY%@@)he{24#{Tjk<{7IxYTD|2*Gq5f;4)&I5D)4ypdQunuDj9JoJDDik7k>R0onrI za{wXJF&)!(w@W*sjqaEHQreEUA@sl-X^F9HGg2Wgt=+>8prjtQx+Cf`?tblUP2i^AT zphx{W=<&Y>I=JI^x$?HcKfgY-VoaR~8rKFVS<8G?rJqibL6)hnQP#)ni0Y)cC?X0b z%wr=>eA8+eB#5XX&}_&2iQ78vEH>J6XOw7Bl)rykv>*#gyi5PI?tj@ot-DMAbc7Wn zh~pC@f-T74U0Sduw11jNH#Jaq&_BIz-2FMU19>@ZpssvnbKmv`Y8CQ*_xY9$fez}K ze{LNTY@kL#-YV-S$XmLH-3)QSQm-b!*gzzk9N?>pjfvX3u-n<|UrQZaZ0Yb~!>@sC z`ZbU(zXr1H*FcW?<&b|N(7;O2LJX3^9bGh`7)wJtBKU=_EYyl%Zb<{Lui6DV74P|u`#y9$V67+k(_AI+FWUv zru71crv{6Rgd7h}QI6&`3DijNIX7I~1d76ex}bcTOEO@!Xy?F}PsB)owXOz- zNX=J=skEFZlA*M%!N!hIM?;YV2>TDEAda*)Huhn77~58z4Zp&YRYx=$xc%T*AsDkb?7!F4QWj#6Vr7VAK|~?-WKghPoGtxS8?n-P>exxCeg$L zDX~}$90aWn$`i?vOUub2dgb2E?o;h~*ppZCT8h^;&c%PxV?+K-N9;X^x_S3@gFCbN zuecLp1M6X+&qu;EEkdeU8UJAat~-bN`a2m|gQx%5Dw4lxhH5qL#LSVSr_Qb#Ii;*P zuSaoF{yn{goi#HWMvt6cUz=alFCSiP-xF8yU-6=F3`NpP8wkNg0xN6;tvMOWYEI}8 z{}EPNXv2<9jl_|(6*rM?TGFjbhjLa4%SF3&m@7;jkdj!ClF==q)Z9>!)@yjzbXUG< zVD!EGH!0D!r2Kx9n>uw%D(KTZ^`_@^pqn4X@qhTP2w&yq|H5Z~6qz`u(f{m^5`0yv z_=WeCn8en=GeZ`0NAcI}tUl!&yU+vV{Ld>fJM&B)w@9SreA=eU{zZ#YxuX&FSZr#P zf0&1Eg>lQXY5Xv7;B0sN74OPE6_)#ky2TegFq>fQD|e+KQLzC>?iNI}Mb(+YDV zzR0wdkvmV1cktS113Exu=V4kE{p4`4lp7$bMDuYgtLqnELnnuC13sgGjGUOH;zu?d$vFGCYO|wZNd@YjS&rg zU58;7iu`#{|8vNMo1S_?&3=UP__15R808JuYPCkKkv$8Ap5@_?93J*86t}}fA5??M zx~16_+45W~zFyg~{9HkjRx?5VhReEeVIb+{dlRRuO*AZ&-vIdKZI=WB_C5uT_Ev$V z(&B)8=Q^SsrW=CB|Hb$DQYaA11_lMY*pJ%U@UElUBKFoEjgt$RqddnYn85 zBcJ~LpkcQVx6AzM7+m}39dmOh2vh#`ZN=Ex761M=zt)3os4b>q{HzLaHWR8U%9LJ! zSIGt8Fgr6dl6J`(==oViYTAqj%xq8&os~qw9%QFc2|V26{~OU0@*`D|wg}*{i8UC| zCj~f+j$FIdfjNhbwhqRy?rD#M!{;l%Aeyhp$nzp!(Q^LlmP%gy3%Nj+mX-Nh$h{}! z2J)$I8>#hW;WcM`&r`XhAxr^Z;P=UxC+9Cyhh<{48|{3-jrZwGIZIF2C&r`hXq>k$ z!36$`-Ap(kn$GYiNlY>twY1ih@((V4I%uo&0%~u9_4h9f7dsRXnM*lPX$HX4QUd+J6zyZWS003g<3%vk%+GAj3VBpC7dk#o4 z{4@M#&K|^&!XV0k3_bt=iOB|R0001Z+HI3TNK{c2hW~r-c~4goBFL;lLR?4-32`BA z2D2e71{V^8v>0S~ErvlP28lt2!G#PVB1D8lM2HL`;>th*5eac2E@Frh7a}5vL`X=; zyZ!e~)*voE{`1ax_q}t^f3H48enO+_J1eWm$Sf+}0JRet^9332DW8YA?t<)x>yl=^f{Z_ftT)2?8kS_@znV+5o3GgL zQdp55Z2Jp1Gdp&|Y+*wJd#+>lvo2zfnv_-ym^S-Ra_U&J{O2SFO`giwyhBFEZL8d} zi;~Bn`sN5v%t|fxt4O%KjB;-UdmvLt>mNv%Uc_{OG1jtX5`i~{3G>FTnb)?%XqS=5&d(8bKdx1)^7bH4#Uux00k^P!%| zhdR6jQdd4)hkfl+%g&2>A}{Eb41~40-+&*d2l<*0_0)X$59gox=fic}85_l2=S4lv z3n|+Jr;(S(Sn}79j{3@}b$P41s44RiXcz~sRKK8C-$`E$oKXwZXRPr)Tw$t+H!P!H zb)p!tY3FqwMTcp$({w zoCW>>)uIZ&0001Z+GAi~(1F4Th6aWQjA@MTm@=4Jm{u`eV&-GEVvb|3VxGpliTMYM z97_z#HkNO!ZmcU`^GN7Zo?kJzKSD`V;aXRP9x4d&Uu{2xJ0<@xFWbZ zxVCX!dgvbn$SE4SWvqX=HiHJFgwTP_|XA{>D z?+`x)gx@4WB-TiBNrp(aNPd$lka{N_C*3B!Li&h|gG`i6pUf>;G1)xX335Dgc5)GN zU2x@x);bWiF2(bLmQ(wn89qQA_5#~{jJg~1QQS4L7sGmNv08;qZsWSLAb z*< + + + +
+ +
+ Documentation generated by JSDoc 4.0.2 on Sat Mar 30 2024 09:36:10 GMT-0700 (Pacific Daylight Time) +
+ + + + + \ No newline at end of file diff --git a/doc/1.5.5/guacamole-common-js/main_webapp_modules_ArrayBufferReader.js.html b/doc/1.5.5/guacamole-common-js/main_webapp_modules_ArrayBufferReader.js.html new file mode 100644 index 000000000..b742e854f --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/main_webapp_modules_ArrayBufferReader.js.html @@ -0,0 +1,127 @@ + + + + + JSDoc: Source: main/webapp/modules/ArrayBufferReader.js + + + + + + + + + + +
+ +

Source: main/webapp/modules/ArrayBufferReader.js

+ + + + + + +
+
+
/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+var Guacamole = Guacamole || {};
+
+/**
+ * A reader which automatically handles the given input stream, returning
+ * strictly received packets as array buffers. Note that this object will
+ * overwrite any installed event handlers on the given Guacamole.InputStream.
+ * 
+ * @constructor
+ * @param {!Guacamole.InputStream} stream
+ *     The stream that data will be read from.
+ */
+Guacamole.ArrayBufferReader = function(stream) {
+
+    /**
+     * Reference to this Guacamole.InputStream.
+     * @private
+     */
+    var guac_reader = this;
+
+    // Receive blobs as array buffers
+    stream.onblob = function(data) {
+
+        // Convert to ArrayBuffer
+        var binary = window.atob(data);
+        var arrayBuffer = new ArrayBuffer(binary.length);
+        var bufferView = new Uint8Array(arrayBuffer);
+
+        for (var i=0; i<binary.length; i++)
+            bufferView[i] = binary.charCodeAt(i);
+
+        // Call handler, if present
+        if (guac_reader.ondata)
+            guac_reader.ondata(arrayBuffer);
+
+    };
+
+    // Simply call onend when end received
+    stream.onend = function() {
+        if (guac_reader.onend)
+            guac_reader.onend();
+    };
+
+    /**
+     * Fired once for every blob of data received.
+     * 
+     * @event
+     * @param {!ArrayBuffer} buffer
+     *     The data packet received.
+     */
+    this.ondata = null;
+
+    /**
+     * Fired once this stream is finished and no further data will be written.
+     * @event
+     */
+    this.onend = null;
+
+};
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 4.0.2 on Sat Mar 30 2024 09:36:10 GMT-0700 (Pacific Daylight Time) +
+ + + + + diff --git a/doc/1.5.5/guacamole-common-js/main_webapp_modules_ArrayBufferWriter.js.html b/doc/1.5.5/guacamole-common-js/main_webapp_modules_ArrayBufferWriter.js.html new file mode 100644 index 000000000..3e33c81a0 --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/main_webapp_modules_ArrayBufferWriter.js.html @@ -0,0 +1,179 @@ + + + + + JSDoc: Source: main/webapp/modules/ArrayBufferWriter.js + + + + + + + + + + +
+ +

Source: main/webapp/modules/ArrayBufferWriter.js

+ + + + + + +
+
+
/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+var Guacamole = Guacamole || {};
+
+/**
+ * A writer which automatically writes to the given output stream with arbitrary
+ * binary data, supplied as ArrayBuffers.
+ * 
+ * @constructor
+ * @param {!Guacamole.OutputStream} stream
+ *     The stream that data will be written to.
+ */
+Guacamole.ArrayBufferWriter = function(stream) {
+
+    /**
+     * Reference to this Guacamole.StringWriter.
+     *
+     * @private
+     * @type {!Guacamole.ArrayBufferWriter}
+     */
+    var guac_writer = this;
+
+    // Simply call onack for acknowledgements
+    stream.onack = function(status) {
+        if (guac_writer.onack)
+            guac_writer.onack(status);
+    };
+
+    /**
+     * Encodes the given data as base64, sending it as a blob. The data must
+     * be small enough to fit into a single blob instruction.
+     * 
+     * @private
+     * @param {!Uint8Array} bytes
+     *     The data to send.
+     */
+    function __send_blob(bytes) {
+
+        var binary = "";
+
+        // Produce binary string from bytes in buffer
+        for (var i=0; i<bytes.byteLength; i++)
+            binary += String.fromCharCode(bytes[i]);
+
+        // Send as base64
+        stream.sendBlob(window.btoa(binary));
+
+    }
+
+    /**
+     * The maximum length of any blob sent by this Guacamole.ArrayBufferWriter,
+     * in bytes. Data sent via
+     * [sendData()]{@link Guacamole.ArrayBufferWriter#sendData} which exceeds
+     * this length will be split into multiple blobs. As the Guacamole protocol
+     * limits the maximum size of any instruction or instruction element to
+     * 8192 bytes, and the contents of blobs will be base64-encoded, this value
+     * should only be increased with extreme caution.
+     *
+     * @type {!number}
+     * @default {@link Guacamole.ArrayBufferWriter.DEFAULT_BLOB_LENGTH}
+     */
+    this.blobLength = Guacamole.ArrayBufferWriter.DEFAULT_BLOB_LENGTH;
+
+    /**
+     * Sends the given data.
+     * 
+     * @param {!(ArrayBuffer|TypedArray)} data
+     *     The data to send.
+     */
+    this.sendData = function(data) {
+
+        var bytes = new Uint8Array(data);
+
+        // If small enough to fit into single instruction, send as-is
+        if (bytes.length <= guac_writer.blobLength)
+            __send_blob(bytes);
+
+        // Otherwise, send as multiple instructions
+        else {
+            for (var offset=0; offset<bytes.length; offset += guac_writer.blobLength)
+                __send_blob(bytes.subarray(offset, offset + guac_writer.blobLength));
+        }
+
+    };
+
+    /**
+     * Signals that no further text will be sent, effectively closing the
+     * stream.
+     */
+    this.sendEnd = function() {
+        stream.sendEnd();
+    };
+
+    /**
+     * Fired for received data, if acknowledged by the server.
+     * @event
+     * @param {!Guacamole.Status} status
+     *     The status of the operation.
+     */
+    this.onack = null;
+
+};
+
+/**
+ * The default maximum blob length for new Guacamole.ArrayBufferWriter
+ * instances.
+ *
+ * @constant
+ * @type {!number}
+ */
+Guacamole.ArrayBufferWriter.DEFAULT_BLOB_LENGTH = 6048;
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 4.0.2 on Sat Mar 30 2024 09:36:10 GMT-0700 (Pacific Daylight Time) +
+ + + + + diff --git a/doc/1.5.5/guacamole-common-js/main_webapp_modules_AudioContextFactory.js.html b/doc/1.5.5/guacamole-common-js/main_webapp_modules_AudioContextFactory.js.html new file mode 100644 index 000000000..ea5a460c4 --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/main_webapp_modules_AudioContextFactory.js.html @@ -0,0 +1,130 @@ + + + + + JSDoc: Source: main/webapp/modules/AudioContextFactory.js + + + + + + + + + + +
+ +

Source: main/webapp/modules/AudioContextFactory.js

+ + + + + + +
+
+
/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+var Guacamole = Guacamole || {};
+
+/**
+ * Maintains a singleton instance of the Web Audio API AudioContext class,
+ * instantiating the AudioContext only in response to the first call to
+ * getAudioContext(), and only if no existing AudioContext instance has been
+ * provided via the singleton property. Subsequent calls to getAudioContext()
+ * will return the same instance.
+ *
+ * @namespace
+ */
+Guacamole.AudioContextFactory = {
+
+    /**
+     * A singleton instance of a Web Audio API AudioContext object, or null if
+     * no instance has yes been created. This property may be manually set if
+     * you wish to supply your own AudioContext instance, but care must be
+     * taken to do so as early as possible. Assignments to this property will
+     * not retroactively affect the value returned by previous calls to
+     * getAudioContext().
+     *
+     * @type {AudioContext}
+     */
+    'singleton' : null,
+
+    /**
+     * Returns a singleton instance of a Web Audio API AudioContext object.
+     *
+     * @return {AudioContext}
+     *     A singleton instance of a Web Audio API AudioContext object, or null
+     *     if the Web Audio API is not supported.
+     */
+    'getAudioContext' : function getAudioContext() {
+
+        // Fallback to Webkit-specific AudioContext implementation
+        var AudioContext = window.AudioContext || window.webkitAudioContext;
+
+        // Get new AudioContext instance if Web Audio API is supported
+        if (AudioContext) {
+            try {
+
+                // Create new instance if none yet exists
+                if (!Guacamole.AudioContextFactory.singleton)
+                    Guacamole.AudioContextFactory.singleton = new AudioContext();
+
+                // Return singleton instance
+                return Guacamole.AudioContextFactory.singleton;
+
+            }
+            catch (e) {
+                // Do not use Web Audio API if not allowed by browser
+            }
+        }
+
+        // Web Audio API not supported
+        return null;
+
+    }
+
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 4.0.2 on Sat Mar 30 2024 09:36:10 GMT-0700 (Pacific Daylight Time) +
+ + + + + diff --git a/doc/1.5.5/guacamole-common-js/main_webapp_modules_AudioPlayer.js.html b/doc/1.5.5/guacamole-common-js/main_webapp_modules_AudioPlayer.js.html new file mode 100644 index 000000000..26dbc95bd --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/main_webapp_modules_AudioPlayer.js.html @@ -0,0 +1,557 @@ + + + + + JSDoc: Source: main/webapp/modules/AudioPlayer.js + + + + + + + + + + +
+ +

Source: main/webapp/modules/AudioPlayer.js

+ + + + + + +
+
+
/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+var Guacamole = Guacamole || {};
+
+/**
+ * Abstract audio player which accepts, queues and plays back arbitrary audio
+ * data. It is up to implementations of this class to provide some means of
+ * handling a provided Guacamole.InputStream. Data received along the provided
+ * stream is to be played back immediately.
+ *
+ * @constructor
+ */
+Guacamole.AudioPlayer = function AudioPlayer() {
+
+    /**
+     * Notifies this Guacamole.AudioPlayer that all audio up to the current
+     * point in time has been given via the underlying stream, and that any
+     * difference in time between queued audio data and the current time can be
+     * considered latency.
+     */
+    this.sync = function sync() {
+        // Default implementation - do nothing
+    };
+
+};
+
+/**
+ * Determines whether the given mimetype is supported by any built-in
+ * implementation of Guacamole.AudioPlayer, and thus will be properly handled
+ * by Guacamole.AudioPlayer.getInstance().
+ *
+ * @param {!string} mimetype
+ *     The mimetype to check.
+ *
+ * @returns {!boolean}
+ *     true if the given mimetype is supported by any built-in
+ *     Guacamole.AudioPlayer, false otherwise.
+ */
+Guacamole.AudioPlayer.isSupportedType = function isSupportedType(mimetype) {
+
+    return Guacamole.RawAudioPlayer.isSupportedType(mimetype);
+
+};
+
+/**
+ * Returns a list of all mimetypes supported by any built-in
+ * Guacamole.AudioPlayer, in rough order of priority. Beware that only the core
+ * mimetypes themselves will be listed. Any mimetype parameters, even required
+ * ones, will not be included in the list. For example, "audio/L8" is a
+ * supported raw audio mimetype that is supported, but it is invalid without
+ * additional parameters. Something like "audio/L8;rate=44100" would be valid,
+ * however (see https://tools.ietf.org/html/rfc4856).
+ *
+ * @returns {!string[]}
+ *     A list of all mimetypes supported by any built-in Guacamole.AudioPlayer,
+ *     excluding any parameters.
+ */
+Guacamole.AudioPlayer.getSupportedTypes = function getSupportedTypes() {
+
+    return Guacamole.RawAudioPlayer.getSupportedTypes();
+
+};
+
+/**
+ * Returns an instance of Guacamole.AudioPlayer providing support for the given
+ * audio format. If support for the given audio format is not available, null
+ * is returned.
+ *
+ * @param {!Guacamole.InputStream} stream
+ *     The Guacamole.InputStream to read audio data from.
+ *
+ * @param {!string} mimetype
+ *     The mimetype of the audio data in the provided stream.
+ *
+ * @return {Guacamole.AudioPlayer}
+ *     A Guacamole.AudioPlayer instance supporting the given mimetype and
+ *     reading from the given stream, or null if support for the given mimetype
+ *     is absent.
+ */
+Guacamole.AudioPlayer.getInstance = function getInstance(stream, mimetype) {
+
+    // Use raw audio player if possible
+    if (Guacamole.RawAudioPlayer.isSupportedType(mimetype))
+        return new Guacamole.RawAudioPlayer(stream, mimetype);
+
+    // No support for given mimetype
+    return null;
+
+};
+
+/**
+ * Implementation of Guacamole.AudioPlayer providing support for raw PCM format
+ * audio. This player relies only on the Web Audio API and does not require any
+ * browser-level support for its audio formats.
+ *
+ * @constructor
+ * @augments Guacamole.AudioPlayer
+ * @param {!Guacamole.InputStream} stream
+ *     The Guacamole.InputStream to read audio data from.
+ *
+ * @param {!string} mimetype
+ *     The mimetype of the audio data in the provided stream, which must be a
+ *     "audio/L8" or "audio/L16" mimetype with necessary parameters, such as:
+ *     "audio/L16;rate=44100,channels=2".
+ */
+Guacamole.RawAudioPlayer = function RawAudioPlayer(stream, mimetype) {
+
+    /**
+     * The format of audio this player will decode.
+     *
+     * @private
+     * @type {Guacamole.RawAudioFormat}
+     */
+    var format = Guacamole.RawAudioFormat.parse(mimetype);
+
+    /**
+     * An instance of a Web Audio API AudioContext object, or null if the
+     * Web Audio API is not supported.
+     *
+     * @private
+     * @type {AudioContext}
+     */
+    var context = Guacamole.AudioContextFactory.getAudioContext();
+
+    /**
+     * The earliest possible time that the next packet could play without
+     * overlapping an already-playing packet, in seconds. Note that while this
+     * value is in seconds, it is not an integer value and has microsecond
+     * resolution.
+     *
+     * @private
+     * @type {!number}
+     */
+    var nextPacketTime = context.currentTime;
+
+    /**
+     * Guacamole.ArrayBufferReader wrapped around the audio input stream
+     * provided with this Guacamole.RawAudioPlayer was created.
+     *
+     * @private
+     * @type {!Guacamole.ArrayBufferReader}
+     */
+    var reader = new Guacamole.ArrayBufferReader(stream);
+
+    /**
+     * The minimum size of an audio packet split by splitAudioPacket(), in
+     * seconds. Audio packets smaller than this will not be split, nor will the
+     * split result of a larger packet ever be smaller in size than this
+     * minimum.
+     *
+     * @private
+     * @constant
+     * @type {!number}
+     */
+    var MIN_SPLIT_SIZE = 0.02;
+
+    /**
+     * The maximum amount of latency to allow between the buffered data stream
+     * and the playback position, in seconds. Initially, this is set to
+     * roughly one third of a second.
+     *
+     * @private
+     * @type {!number}
+     */
+    var maxLatency = 0.3;
+
+    /**
+     * The type of typed array that will be used to represent each audio packet
+     * internally. This will be either Int8Array or Int16Array, depending on
+     * whether the raw audio format is 8-bit or 16-bit.
+     *
+     * @private
+     * @constructor
+     */
+    var SampleArray = (format.bytesPerSample === 1) ? window.Int8Array : window.Int16Array;
+
+    /**
+     * The maximum absolute value of any sample within a raw audio packet
+     * received by this audio player. This depends only on the size of each
+     * sample, and will be 128 for 8-bit audio and 32768 for 16-bit audio.
+     *
+     * @private
+     * @type {!number}
+     */
+    var maxSampleValue = (format.bytesPerSample === 1) ? 128 : 32768;
+
+    /**
+     * The queue of all pending audio packets, as an array of sample arrays.
+     * Audio packets which are pending playback will be added to this queue for
+     * further manipulation prior to scheduling via the Web Audio API. Once an
+     * audio packet leaves this queue and is scheduled via the Web Audio API,
+     * no further modifications can be made to that packet.
+     *
+     * @private
+     * @type {!SampleArray[]}
+     */
+    var packetQueue = [];
+
+    /**
+     * Given an array of audio packets, returns a single audio packet
+     * containing the concatenation of those packets.
+     *
+     * @private
+     * @param {!SampleArray[]} packets
+     *     The array of audio packets to concatenate.
+     *
+     * @returns {SampleArray}
+     *     A single audio packet containing the concatenation of all given
+     *     audio packets. If no packets are provided, this will be undefined.
+     */
+    var joinAudioPackets = function joinAudioPackets(packets) {
+
+        // Do not bother joining if one or fewer packets are in the queue
+        if (packets.length <= 1)
+            return packets[0];
+
+        // Determine total sample length of the entire queue
+        var totalLength = 0;
+        packets.forEach(function addPacketLengths(packet) {
+            totalLength += packet.length;
+        });
+
+        // Append each packet within queue
+        var offset = 0;
+        var joined = new SampleArray(totalLength);
+        packets.forEach(function appendPacket(packet) {
+            joined.set(packet, offset);
+            offset += packet.length;
+        });
+
+        return joined;
+
+    };
+
+    /**
+     * Given a single packet of audio data, splits off an arbitrary length of
+     * audio data from the beginning of that packet, returning the split result
+     * as an array of two packets. The split location is determined through an
+     * algorithm intended to minimize the liklihood of audible clicking between
+     * packets. If no such split location is possible, an array containing only
+     * the originally-provided audio packet is returned.
+     *
+     * @private
+     * @param {!SampleArray} data
+     *     The audio packet to split.
+     *
+     * @returns {!SampleArray[]}
+     *     An array of audio packets containing the result of splitting the
+     *     provided audio packet. If splitting is possible, this array will
+     *     contain two packets. If splitting is not possible, this array will
+     *     contain only the originally-provided packet.
+     */
+    var splitAudioPacket = function splitAudioPacket(data) {
+
+        var minValue = Number.MAX_VALUE;
+        var optimalSplitLength = data.length;
+
+        // Calculate number of whole samples in the provided audio packet AND
+        // in the minimum possible split packet
+        var samples = Math.floor(data.length / format.channels);
+        var minSplitSamples = Math.floor(format.rate * MIN_SPLIT_SIZE);
+
+        // Calculate the beginning of the "end" of the audio packet
+        var start = Math.max(
+            format.channels * minSplitSamples,
+            format.channels * (samples - minSplitSamples)
+        );
+
+        // For all samples at the end of the given packet, find a point where
+        // the perceptible volume across all channels is lowest (and thus is
+        // the optimal point to split)
+        for (var offset = start; offset < data.length; offset += format.channels) {
+
+            // Calculate the sum of all values across all channels (the result
+            // will be proportional to the average volume of a sample)
+            var totalValue = 0;
+            for (var channel = 0; channel < format.channels; channel++) {
+                totalValue += Math.abs(data[offset + channel]);
+            }
+
+            // If this is the smallest average value thus far, set the split
+            // length such that the first packet ends with the current sample
+            if (totalValue <= minValue) {
+                optimalSplitLength = offset + format.channels;
+                minValue = totalValue;
+            }
+
+        }
+
+        // If packet is not split, return the supplied packet untouched
+        if (optimalSplitLength === data.length)
+            return [data];
+
+        // Otherwise, split the packet into two new packets according to the
+        // calculated optimal split length
+        return [
+            new SampleArray(data.buffer.slice(0, optimalSplitLength * format.bytesPerSample)),
+            new SampleArray(data.buffer.slice(optimalSplitLength * format.bytesPerSample))
+        ];
+
+    };
+
+    /**
+     * Pushes the given packet of audio data onto the playback queue. Unlike
+     * other private functions within Guacamole.RawAudioPlayer, the type of the
+     * ArrayBuffer packet of audio data here need not be specific to the type
+     * of audio (as with SampleArray). The ArrayBuffer type provided by a
+     * Guacamole.ArrayBufferReader, for example, is sufficient. Any necessary
+     * conversions will be performed automatically internally.
+     *
+     * @private
+     * @param {!ArrayBuffer} data
+     *     A raw packet of audio data that should be pushed onto the audio
+     *     playback queue.
+     */
+    var pushAudioPacket = function pushAudioPacket(data) {
+        packetQueue.push(new SampleArray(data));
+    };
+
+    /**
+     * Shifts off and returns a packet of audio data from the beginning of the
+     * playback queue. The length of this audio packet is determined
+     * dynamically according to the click-reduction algorithm implemented by
+     * splitAudioPacket().
+     *
+     * @private
+     * @returns {SampleArray}
+     *     A packet of audio data pulled from the beginning of the playback
+     *     queue. If there is no audio currently in the playback queue, this
+     *     will be null.
+     */
+    var shiftAudioPacket = function shiftAudioPacket() {
+
+        // Flatten data in packet queue
+        var data = joinAudioPackets(packetQueue);
+        if (!data)
+            return null;
+
+        // Pull an appropriate amount of data from the front of the queue
+        packetQueue = splitAudioPacket(data);
+        data = packetQueue.shift();
+
+        return data;
+
+    };
+
+    /**
+     * Converts the given audio packet into an AudioBuffer, ready for playback
+     * by the Web Audio API. Unlike the raw audio packets received by this
+     * audio player, AudioBuffers require floating point samples and are split
+     * into isolated planes of channel-specific data.
+     *
+     * @private
+     * @param {!SampleArray} data
+     *     The raw audio packet that should be converted into a Web Audio API
+     *     AudioBuffer.
+     *
+     * @returns {!AudioBuffer}
+     *     A new Web Audio API AudioBuffer containing the provided audio data,
+     *     converted to the format used by the Web Audio API.
+     */
+    var toAudioBuffer = function toAudioBuffer(data) {
+
+        // Calculate total number of samples
+        var samples = data.length / format.channels;
+
+        // Determine exactly when packet CAN play
+        var packetTime = context.currentTime;
+        if (nextPacketTime < packetTime)
+            nextPacketTime = packetTime;
+
+        // Get audio buffer for specified format
+        var audioBuffer = context.createBuffer(format.channels, samples, format.rate);
+
+        // Convert each channel
+        for (var channel = 0; channel < format.channels; channel++) {
+
+            var audioData = audioBuffer.getChannelData(channel);
+
+            // Fill audio buffer with data for channel
+            var offset = channel;
+            for (var i = 0; i < samples; i++) {
+                audioData[i] = data[offset] / maxSampleValue;
+                offset += format.channels;
+            }
+
+        }
+
+        return audioBuffer;
+
+    };
+
+    // Defer playback of received audio packets slightly
+    reader.ondata = function playReceivedAudio(data) {
+
+        // Push received samples onto queue
+        pushAudioPacket(new SampleArray(data));
+
+        // Shift off an arbitrary packet of audio data from the queue (this may
+        // be different in size from the packet just pushed)
+        var packet = shiftAudioPacket();
+        if (!packet)
+            return;
+
+        // Determine exactly when packet CAN play
+        var packetTime = context.currentTime;
+        if (nextPacketTime < packetTime)
+            nextPacketTime = packetTime;
+
+        // Set up buffer source
+        var source = context.createBufferSource();
+        source.connect(context.destination);
+
+        // Use noteOn() instead of start() if necessary
+        if (!source.start)
+            source.start = source.noteOn;
+
+        // Schedule packet
+        source.buffer = toAudioBuffer(packet);
+        source.start(nextPacketTime);
+
+        // Update timeline by duration of scheduled packet
+        nextPacketTime += packet.length / format.channels / format.rate;
+
+    };
+
+    /** @override */
+    this.sync = function sync() {
+
+        // Calculate elapsed time since last sync
+        var now = context.currentTime;
+
+        // Reschedule future playback time such that playback latency is
+        // bounded within a reasonable latency threshold
+        nextPacketTime = Math.min(nextPacketTime, now + maxLatency);
+
+    };
+
+};
+
+Guacamole.RawAudioPlayer.prototype = new Guacamole.AudioPlayer();
+
+/**
+ * Determines whether the given mimetype is supported by
+ * Guacamole.RawAudioPlayer.
+ *
+ * @param {!string} mimetype
+ *     The mimetype to check.
+ *
+ * @returns {!boolean}
+ *     true if the given mimetype is supported by Guacamole.RawAudioPlayer,
+ *     false otherwise.
+ */
+Guacamole.RawAudioPlayer.isSupportedType = function isSupportedType(mimetype) {
+
+    // No supported types if no Web Audio API
+    if (!Guacamole.AudioContextFactory.getAudioContext())
+        return false;
+
+    return Guacamole.RawAudioFormat.parse(mimetype) !== null;
+
+};
+
+/**
+ * Returns a list of all mimetypes supported by Guacamole.RawAudioPlayer. Only
+ * the core mimetypes themselves will be listed. Any mimetype parameters, even
+ * required ones, will not be included in the list. For example, "audio/L8" is
+ * a raw audio mimetype that may be supported, but it is invalid without
+ * additional parameters. Something like "audio/L8;rate=44100" would be valid,
+ * however (see https://tools.ietf.org/html/rfc4856).
+ *
+ * @returns {!string[]}
+ *     A list of all mimetypes supported by Guacamole.RawAudioPlayer, excluding
+ *     any parameters. If the necessary JavaScript APIs for playing raw audio
+ *     are absent, this list will be empty.
+ */
+Guacamole.RawAudioPlayer.getSupportedTypes = function getSupportedTypes() {
+
+    // No supported types if no Web Audio API
+    if (!Guacamole.AudioContextFactory.getAudioContext())
+        return [];
+
+    // We support 8-bit and 16-bit raw PCM
+    return [
+        'audio/L8',
+        'audio/L16'
+    ];
+
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 4.0.2 on Sat Mar 30 2024 09:36:10 GMT-0700 (Pacific Daylight Time) +
+ + + + + diff --git a/doc/1.5.5/guacamole-common-js/main_webapp_modules_AudioRecorder.js.html b/doc/1.5.5/guacamole-common-js/main_webapp_modules_AudioRecorder.js.html new file mode 100644 index 000000000..c6668fac8 --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/main_webapp_modules_AudioRecorder.js.html @@ -0,0 +1,655 @@ + + + + + JSDoc: Source: main/webapp/modules/AudioRecorder.js + + + + + + + + + + +
+ +

Source: main/webapp/modules/AudioRecorder.js

+ + + + + + +
+
+
/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+var Guacamole = Guacamole || {};
+
+/**
+ * Abstract audio recorder which streams arbitrary audio data to an underlying
+ * Guacamole.OutputStream. It is up to implementations of this class to provide
+ * some means of handling this Guacamole.OutputStream. Data produced by the
+ * recorder is to be sent along the provided stream immediately.
+ *
+ * @constructor
+ */
+Guacamole.AudioRecorder = function AudioRecorder() {
+
+    /**
+     * Callback which is invoked when the audio recording process has stopped
+     * and the underlying Guacamole stream has been closed normally. Audio will
+     * only resume recording if a new Guacamole.AudioRecorder is started. This
+     * Guacamole.AudioRecorder instance MAY NOT be reused.
+     *
+     * @event
+     */
+    this.onclose = null;
+
+    /**
+     * Callback which is invoked when the audio recording process cannot
+     * continue due to an error, if it has started at all. The underlying
+     * Guacamole stream is automatically closed. Future attempts to record
+     * audio should not be made, and this Guacamole.AudioRecorder instance
+     * MAY NOT be reused.
+     *
+     * @event
+     */
+    this.onerror = null;
+
+};
+
+/**
+ * Determines whether the given mimetype is supported by any built-in
+ * implementation of Guacamole.AudioRecorder, and thus will be properly handled
+ * by Guacamole.AudioRecorder.getInstance().
+ *
+ * @param {!string} mimetype
+ *     The mimetype to check.
+ *
+ * @returns {!boolean}
+ *     true if the given mimetype is supported by any built-in
+ *     Guacamole.AudioRecorder, false otherwise.
+ */
+Guacamole.AudioRecorder.isSupportedType = function isSupportedType(mimetype) {
+
+    return Guacamole.RawAudioRecorder.isSupportedType(mimetype);
+
+};
+
+/**
+ * Returns a list of all mimetypes supported by any built-in
+ * Guacamole.AudioRecorder, in rough order of priority. Beware that only the
+ * core mimetypes themselves will be listed. Any mimetype parameters, even
+ * required ones, will not be included in the list. For example, "audio/L8" is
+ * a supported raw audio mimetype that is supported, but it is invalid without
+ * additional parameters. Something like "audio/L8;rate=44100" would be valid,
+ * however (see https://tools.ietf.org/html/rfc4856).
+ *
+ * @returns {!string[]}
+ *     A list of all mimetypes supported by any built-in
+ *     Guacamole.AudioRecorder, excluding any parameters.
+ */
+Guacamole.AudioRecorder.getSupportedTypes = function getSupportedTypes() {
+
+    return Guacamole.RawAudioRecorder.getSupportedTypes();
+
+};
+
+/**
+ * Returns an instance of Guacamole.AudioRecorder providing support for the
+ * given audio format. If support for the given audio format is not available,
+ * null is returned.
+ *
+ * @param {!Guacamole.OutputStream} stream
+ *     The Guacamole.OutputStream to send audio data through.
+ *
+ * @param {!string} mimetype
+ *     The mimetype of the audio data to be sent along the provided stream.
+ *
+ * @return {Guacamole.AudioRecorder}
+ *     A Guacamole.AudioRecorder instance supporting the given mimetype and
+ *     writing to the given stream, or null if support for the given mimetype
+ *     is absent.
+ */
+Guacamole.AudioRecorder.getInstance = function getInstance(stream, mimetype) {
+
+    // Use raw audio recorder if possible
+    if (Guacamole.RawAudioRecorder.isSupportedType(mimetype))
+        return new Guacamole.RawAudioRecorder(stream, mimetype);
+
+    // No support for given mimetype
+    return null;
+
+};
+
+/**
+ * Implementation of Guacamole.AudioRecorder providing support for raw PCM
+ * format audio. This recorder relies only on the Web Audio API and does not
+ * require any browser-level support for its audio formats.
+ *
+ * @constructor
+ * @augments Guacamole.AudioRecorder
+ * @param {!Guacamole.OutputStream} stream
+ *     The Guacamole.OutputStream to write audio data to.
+ *
+ * @param {!string} mimetype
+ *     The mimetype of the audio data to send along the provided stream, which
+ *     must be a "audio/L8" or "audio/L16" mimetype with necessary parameters,
+ *     such as: "audio/L16;rate=44100,channels=2".
+ */
+Guacamole.RawAudioRecorder = function RawAudioRecorder(stream, mimetype) {
+
+    /**
+     * Reference to this RawAudioRecorder.
+     *
+     * @private
+     * @type {!Guacamole.RawAudioRecorder}
+     */
+    var recorder = this;
+
+    /**
+     * The size of audio buffer to request from the Web Audio API when
+     * recording or processing audio, in sample-frames. This must be a power of
+     * two between 256 and 16384 inclusive, as required by
+     * AudioContext.createScriptProcessor().
+     *
+     * @private
+     * @constant
+     * @type {!number}
+     */
+    var BUFFER_SIZE = 2048;
+
+    /**
+     * The window size to use when applying Lanczos interpolation, commonly
+     * denoted by the variable "a".
+     * See: https://en.wikipedia.org/wiki/Lanczos_resampling
+     *
+     * @private
+     * @contant
+     * @type {!number}
+     */
+    var LANCZOS_WINDOW_SIZE = 3;
+
+    /**
+     * The format of audio this recorder will encode.
+     *
+     * @private
+     * @type {Guacamole.RawAudioFormat}
+     */
+    var format = Guacamole.RawAudioFormat.parse(mimetype);
+
+    /**
+     * An instance of a Web Audio API AudioContext object, or null if the
+     * Web Audio API is not supported.
+     *
+     * @private
+     * @type {AudioContext}
+     */
+    var context = Guacamole.AudioContextFactory.getAudioContext();
+
+    // Some browsers do not implement navigator.mediaDevices - this
+    // shims in this functionality to ensure code compatibility.
+    if (!navigator.mediaDevices)
+        navigator.mediaDevices = {};
+
+    // Browsers that either do not implement navigator.mediaDevices
+    // at all or do not implement it completely need the getUserMedia
+    // method defined.  This shims in this function by detecting
+    // one of the supported legacy methods.
+    if (!navigator.mediaDevices.getUserMedia)
+        navigator.mediaDevices.getUserMedia = (navigator.getUserMedia
+                || navigator.webkitGetUserMedia
+                || navigator.mozGetUserMedia
+                || navigator.msGetUserMedia).bind(navigator);
+
+    /**
+     * Guacamole.ArrayBufferWriter wrapped around the audio output stream
+     * provided when this Guacamole.RawAudioRecorder was created.
+     *
+     * @private
+     * @type {!Guacamole.ArrayBufferWriter}
+     */
+    var writer = new Guacamole.ArrayBufferWriter(stream);
+
+    /**
+     * The type of typed array that will be used to represent each audio packet
+     * internally. This will be either Int8Array or Int16Array, depending on
+     * whether the raw audio format is 8-bit or 16-bit.
+     *
+     * @private
+     * @constructor
+     */
+    var SampleArray = (format.bytesPerSample === 1) ? window.Int8Array : window.Int16Array;
+
+    /**
+     * The maximum absolute value of any sample within a raw audio packet sent
+     * by this audio recorder. This depends only on the size of each sample,
+     * and will be 128 for 8-bit audio and 32768 for 16-bit audio.
+     *
+     * @private
+     * @type {!number}
+     */
+    var maxSampleValue = (format.bytesPerSample === 1) ? 128 : 32768;
+
+    /**
+     * The total number of audio samples read from the local audio input device
+     * over the life of this audio recorder.
+     *
+     * @private
+     * @type {!number}
+     */
+    var readSamples = 0;
+
+    /**
+     * The total number of audio samples written to the underlying Guacamole
+     * connection over the life of this audio recorder.
+     *
+     * @private
+     * @type {!number}
+     */
+    var writtenSamples = 0;
+
+    /**
+     * The audio stream provided by the browser, if allowed. If no stream has
+     * yet been received, this will be null.
+     *
+     * @private
+     * @type {MediaStream}
+     */
+    var mediaStream = null;
+
+    /**
+     * The source node providing access to the local audio input device.
+     *
+     * @private
+     * @type {MediaStreamAudioSourceNode}
+     */
+    var source = null;
+
+    /**
+     * The script processing node which receives audio input from the media
+     * stream source node as individual audio buffers.
+     *
+     * @private
+     * @type {ScriptProcessorNode}
+     */
+    var processor = null;
+
+    /**
+     * The normalized sinc function. The normalized sinc function is defined as
+     * 1 for x=0 and sin(PI * x) / (PI * x) for all other values of x.
+     *
+     * See: https://en.wikipedia.org/wiki/Sinc_function
+     *
+     * @private
+     * @param {!number} x
+     *     The point at which the normalized sinc function should be computed.
+     *
+     * @returns {!number}
+     *     The value of the normalized sinc function at x.
+     */
+    var sinc = function sinc(x) {
+
+        // The value of sinc(0) is defined as 1
+        if (x === 0)
+            return 1;
+
+        // Otherwise, normlized sinc(x) is sin(PI * x) / (PI * x)
+        var piX = Math.PI * x;
+        return Math.sin(piX) / piX;
+
+    };
+
+    /**
+     * Calculates the value of the Lanczos kernal at point x for a given window
+     * size. See: https://en.wikipedia.org/wiki/Lanczos_resampling
+     *
+     * @private
+     * @param {!number} x
+     *     The point at which the value of the Lanczos kernel should be
+     *     computed.
+     *
+     * @param {!number} a
+     *     The window size to use for the Lanczos kernel.
+     *
+     * @returns {!number}
+     *     The value of the Lanczos kernel at the given point for the given
+     *     window size.
+     */
+    var lanczos = function lanczos(x, a) {
+
+        // Lanczos is sinc(x) * sinc(x / a) for -a < x < a ...
+        if (-a < x && x < a)
+            return sinc(x) * sinc(x / a);
+
+        // ... and 0 otherwise
+        return 0;
+
+    };
+
+    /**
+     * Determines the value of the waveform represented by the audio data at
+     * the given location. If the value cannot be determined exactly as it does
+     * not correspond to an exact sample within the audio data, the value will
+     * be derived through interpolating nearby samples.
+     *
+     * @private
+     * @param {!Float32Array} audioData
+     *     An array of audio data, as returned by AudioBuffer.getChannelData().
+     *
+     * @param {!number} t
+     *     The relative location within the waveform from which the value
+     *     should be retrieved, represented as a floating point number between
+     *     0 and 1 inclusive, where 0 represents the earliest point in time and
+     *     1 represents the latest.
+     *
+     * @returns {!number}
+     *     The value of the waveform at the given location.
+     */
+    var interpolateSample = function getValueAt(audioData, t) {
+
+        // Convert [0, 1] range to [0, audioData.length - 1]
+        var index = (audioData.length - 1) * t;
+
+        // Determine the start and end points for the summation used by the
+        // Lanczos interpolation algorithm (see: https://en.wikipedia.org/wiki/Lanczos_resampling)
+        var start = Math.floor(index) - LANCZOS_WINDOW_SIZE + 1;
+        var end = Math.floor(index) + LANCZOS_WINDOW_SIZE;
+
+        // Calculate the value of the Lanczos interpolation function for the
+        // required range
+        var sum = 0;
+        for (var i = start; i <= end; i++) {
+            sum += (audioData[i] || 0) * lanczos(index - i, LANCZOS_WINDOW_SIZE);
+        }
+
+        return sum;
+
+    };
+
+    /**
+     * Converts the given AudioBuffer into an audio packet, ready for streaming
+     * along the underlying output stream. Unlike the raw audio packets used by
+     * this audio recorder, AudioBuffers require floating point samples and are
+     * split into isolated planes of channel-specific data.
+     *
+     * @private
+     * @param {!AudioBuffer} audioBuffer
+     *     The Web Audio API AudioBuffer that should be converted to a raw
+     *     audio packet.
+     *
+     * @returns {!SampleArray}
+     *     A new raw audio packet containing the audio data from the provided
+     *     AudioBuffer.
+     */
+    var toSampleArray = function toSampleArray(audioBuffer) {
+
+        // Track overall amount of data read
+        var inSamples = audioBuffer.length;
+        readSamples += inSamples;
+
+        // Calculate the total number of samples that should be written as of
+        // the audio data just received and adjust the size of the output
+        // packet accordingly
+        var expectedWrittenSamples = Math.round(readSamples * format.rate / audioBuffer.sampleRate);
+        var outSamples = expectedWrittenSamples - writtenSamples;
+
+        // Update number of samples written
+        writtenSamples += outSamples;
+
+        // Get array for raw PCM storage
+        var data = new SampleArray(outSamples * format.channels);
+
+        // Convert each channel
+        for (var channel = 0; channel < format.channels; channel++) {
+
+            var audioData = audioBuffer.getChannelData(channel);
+
+            // Fill array with data from audio buffer channel
+            var offset = channel;
+            for (var i = 0; i < outSamples; i++) {
+                data[offset] = interpolateSample(audioData, i / (outSamples - 1)) * maxSampleValue;
+                offset += format.channels;
+            }
+
+        }
+
+        return data;
+
+    };
+
+    /**
+     * getUserMedia() callback which handles successful retrieval of an
+     * audio stream (successful start of recording).
+     *
+     * @private
+     * @param {!MediaStream} stream
+     *     A MediaStream which provides access to audio data read from the
+     *     user's local audio input device.
+     */
+    var streamReceived = function streamReceived(stream) {
+
+        // Create processing node which receives appropriately-sized audio buffers
+        processor = context.createScriptProcessor(BUFFER_SIZE, format.channels, format.channels);
+        processor.connect(context.destination);
+
+        // Send blobs when audio buffers are received
+        processor.onaudioprocess = function processAudio(e) {
+            writer.sendData(toSampleArray(e.inputBuffer).buffer);
+        };
+
+        // Connect processing node to user's audio input source
+        source = context.createMediaStreamSource(stream);
+        source.connect(processor);
+
+        // Attempt to explicitly resume AudioContext, as it may be paused
+        // by default
+        if (context.state === 'suspended')
+            context.resume();
+
+        // Save stream for later cleanup
+        mediaStream = stream;
+
+    };
+
+    /**
+     * getUserMedia() callback which handles audio recording denial. The
+     * underlying Guacamole output stream is closed, and the failure to
+     * record is noted using onerror.
+     *
+     * @private
+     */
+    var streamDenied = function streamDenied() {
+
+        // Simply end stream if audio access is not allowed
+        writer.sendEnd();
+
+        // Notify of closure
+        if (recorder.onerror)
+            recorder.onerror();
+
+    };
+
+    /**
+     * Requests access to the user's microphone and begins capturing audio. All
+     * received audio data is resampled as necessary and forwarded to the
+     * Guacamole stream underlying this Guacamole.RawAudioRecorder. This
+     * function must be invoked ONLY ONCE per instance of
+     * Guacamole.RawAudioRecorder.
+     *
+     * @private
+     */
+    var beginAudioCapture = function beginAudioCapture() {
+
+        // Attempt to retrieve an audio input stream from the browser
+        var promise = navigator.mediaDevices.getUserMedia({
+            'audio' : true
+        }, streamReceived, streamDenied);
+
+        // Handle stream creation/rejection via Promise for newer versions of
+        // getUserMedia()
+        if (promise && promise.then)
+            promise.then(streamReceived, streamDenied);
+
+    };
+
+    /**
+     * Stops capturing audio, if the capture has started, freeing all associated
+     * resources. If the capture has not started, this function simply ends the
+     * underlying Guacamole stream.
+     *
+     * @private
+     */
+    var stopAudioCapture = function stopAudioCapture() {
+
+        // Disconnect media source node from script processor
+        if (source)
+            source.disconnect();
+
+        // Disconnect associated script processor node
+        if (processor)
+            processor.disconnect();
+
+        // Stop capture
+        if (mediaStream) {
+            var tracks = mediaStream.getTracks();
+            for (var i = 0; i < tracks.length; i++)
+                tracks[i].stop();
+        }
+
+        // Remove references to now-unneeded components
+        processor = null;
+        source = null;
+        mediaStream = null;
+
+        // End stream
+        writer.sendEnd();
+
+    };
+
+    // Once audio stream is successfully open, request and begin reading audio
+    writer.onack = function audioStreamAcknowledged(status) {
+
+        // Begin capture if successful response and not yet started
+        if (status.code === Guacamole.Status.Code.SUCCESS && !mediaStream)
+            beginAudioCapture();
+
+        // Otherwise stop capture and cease handling any further acks
+        else {
+
+            // Stop capturing audio
+            stopAudioCapture();
+            writer.onack = null;
+
+            // Notify if stream has closed normally
+            if (status.code === Guacamole.Status.Code.RESOURCE_CLOSED) {
+                if (recorder.onclose)
+                    recorder.onclose();
+            }
+
+            // Otherwise notify of closure due to error
+            else {
+                if (recorder.onerror)
+                    recorder.onerror();
+            }
+
+        }
+
+    };
+
+};
+
+Guacamole.RawAudioRecorder.prototype = new Guacamole.AudioRecorder();
+
+/**
+ * Determines whether the given mimetype is supported by
+ * Guacamole.RawAudioRecorder.
+ *
+ * @param {!string} mimetype
+ *     The mimetype to check.
+ *
+ * @returns {!boolean}
+ *     true if the given mimetype is supported by Guacamole.RawAudioRecorder,
+ *     false otherwise.
+ */
+Guacamole.RawAudioRecorder.isSupportedType = function isSupportedType(mimetype) {
+
+    // No supported types if no Web Audio API
+    if (!Guacamole.AudioContextFactory.getAudioContext())
+        return false;
+
+    return Guacamole.RawAudioFormat.parse(mimetype) !== null;
+
+};
+
+/**
+ * Returns a list of all mimetypes supported by Guacamole.RawAudioRecorder. Only
+ * the core mimetypes themselves will be listed. Any mimetype parameters, even
+ * required ones, will not be included in the list. For example, "audio/L8" is
+ * a raw audio mimetype that may be supported, but it is invalid without
+ * additional parameters. Something like "audio/L8;rate=44100" would be valid,
+ * however (see https://tools.ietf.org/html/rfc4856).
+ *
+ * @returns {!string[]}
+ *     A list of all mimetypes supported by Guacamole.RawAudioRecorder,
+ *     excluding any parameters. If the necessary JavaScript APIs for recording
+ *     raw audio are absent, this list will be empty.
+ */
+Guacamole.RawAudioRecorder.getSupportedTypes = function getSupportedTypes() {
+
+    // No supported types if no Web Audio API
+    if (!Guacamole.AudioContextFactory.getAudioContext())
+        return [];
+
+    // We support 8-bit and 16-bit raw PCM
+    return [
+        'audio/L8',
+        'audio/L16'
+    ];
+
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 4.0.2 on Sat Mar 30 2024 09:36:10 GMT-0700 (Pacific Daylight Time) +
+ + + + + diff --git a/doc/1.5.5/guacamole-common-js/main_webapp_modules_BlobReader.js.html b/doc/1.5.5/guacamole-common-js/main_webapp_modules_BlobReader.js.html new file mode 100644 index 000000000..c5df1fa8c --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/main_webapp_modules_BlobReader.js.html @@ -0,0 +1,189 @@ + + + + + JSDoc: Source: main/webapp/modules/BlobReader.js + + + + + + + + + + +
+ +

Source: main/webapp/modules/BlobReader.js

+ + + + + + +
+
+
/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+var Guacamole = Guacamole || {};
+
+/**
+ * A reader which automatically handles the given input stream, assembling all
+ * received blobs into a single blob by appending them to each other in order.
+ * Note that this object will overwrite any installed event handlers on the
+ * given Guacamole.InputStream.
+ * 
+ * @constructor
+ * @param {!Guacamole.InputStream} stream
+ *     The stream that data will be read from.
+ *
+ * @param {!string} mimetype
+ *     The mimetype of the blob being built.
+ */
+Guacamole.BlobReader = function(stream, mimetype) {
+
+    /**
+     * Reference to this Guacamole.InputStream.
+     *
+     * @private
+     * @type {!Guacamole.BlobReader}
+     */
+    var guac_reader = this;
+
+    /**
+     * The length of this Guacamole.InputStream in bytes.
+     *
+     * @private
+     * @type {!number}
+     */
+    var length = 0;
+
+    // Get blob builder
+    var blob_builder;
+    if      (window.BlobBuilder)       blob_builder = new BlobBuilder();
+    else if (window.WebKitBlobBuilder) blob_builder = new WebKitBlobBuilder();
+    else if (window.MozBlobBuilder)    blob_builder = new MozBlobBuilder();
+    else
+        blob_builder = new (function() {
+
+            var blobs = [];
+
+            /** @ignore */
+            this.append = function(data) {
+                blobs.push(new Blob([data], {"type": mimetype}));
+            };
+
+            /** @ignore */
+            this.getBlob = function() {
+                return new Blob(blobs, {"type": mimetype});
+            };
+
+        })();
+
+    // Append received blobs
+    stream.onblob = function(data) {
+
+        // Convert to ArrayBuffer
+        var binary = window.atob(data);
+        var arrayBuffer = new ArrayBuffer(binary.length);
+        var bufferView = new Uint8Array(arrayBuffer);
+
+        for (var i=0; i<binary.length; i++)
+            bufferView[i] = binary.charCodeAt(i);
+
+        blob_builder.append(arrayBuffer);
+        length += arrayBuffer.byteLength;
+
+        // Call handler, if present
+        if (guac_reader.onprogress)
+            guac_reader.onprogress(arrayBuffer.byteLength);
+
+        // Send success response
+        stream.sendAck("OK", 0x0000);
+
+    };
+
+    // Simply call onend when end received
+    stream.onend = function() {
+        if (guac_reader.onend)
+            guac_reader.onend();
+    };
+
+    /**
+     * Returns the current length of this Guacamole.InputStream, in bytes.
+     *
+     * @return {!number}
+     *     The current length of this Guacamole.InputStream.
+     */
+    this.getLength = function() {
+        return length;
+    };
+
+    /**
+     * Returns the contents of this Guacamole.BlobReader as a Blob.
+     *
+     * @return {!Blob}
+     *     The contents of this Guacamole.BlobReader.
+     */
+    this.getBlob = function() {
+        return blob_builder.getBlob();
+    };
+
+    /**
+     * Fired once for every blob of data received.
+     * 
+     * @event
+     * @param {!number} length
+     *     The number of bytes received.
+     */
+    this.onprogress = null;
+
+    /**
+     * Fired once this stream is finished and no further data will be written.
+     * @event
+     */
+    this.onend = null;
+
+};
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 4.0.2 on Sat Mar 30 2024 09:36:10 GMT-0700 (Pacific Daylight Time) +
+ + + + + diff --git a/doc/1.5.5/guacamole-common-js/main_webapp_modules_BlobWriter.js.html b/doc/1.5.5/guacamole-common-js/main_webapp_modules_BlobWriter.js.html new file mode 100644 index 000000000..6ae4de6c8 --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/main_webapp_modules_BlobWriter.js.html @@ -0,0 +1,296 @@ + + + + + JSDoc: Source: main/webapp/modules/BlobWriter.js + + + + + + + + + + +
+ +

Source: main/webapp/modules/BlobWriter.js

+ + + + + + +
+
+
/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+var Guacamole = Guacamole || {};
+
+/**
+ * A writer which automatically writes to the given output stream with the
+ * contents of provided Blob objects.
+ *
+ * @constructor
+ * @param {!Guacamole.OutputStream} stream
+ *     The stream that data will be written to.
+ */
+Guacamole.BlobWriter = function BlobWriter(stream) {
+
+    /**
+     * Reference to this Guacamole.BlobWriter.
+     *
+     * @private
+     * @type {!Guacamole.BlobWriter}
+     */
+    var guacWriter = this;
+
+    /**
+     * Wrapped Guacamole.ArrayBufferWriter which will be used to send any
+     * provided file data.
+     *
+     * @private
+     * @type {!Guacamole.ArrayBufferWriter}
+     */
+    var arrayBufferWriter = new Guacamole.ArrayBufferWriter(stream);
+
+    // Initially, simply call onack for acknowledgements
+    arrayBufferWriter.onack = function(status) {
+        if (guacWriter.onack)
+            guacWriter.onack(status);
+    };
+
+    /**
+     * Browser-independent implementation of Blob.slice() which uses an end
+     * offset to determine the span of the resulting slice, rather than a
+     * length.
+     *
+     * @private
+     * @param {!Blob} blob
+     *     The Blob to slice.
+     *
+     * @param {!number} start
+     *     The starting offset of the slice, in bytes, inclusive.
+     *
+     * @param {!number} end
+     *     The ending offset of the slice, in bytes, exclusive.
+     *
+     * @returns {!Blob}
+     *     A Blob containing the data within the given Blob starting at
+     *     <code>start</code> and ending at <code>end - 1</code>.
+     */
+    var slice = function slice(blob, start, end) {
+
+        // Use prefixed implementations if necessary
+        var sliceImplementation = (
+                blob.slice
+             || blob.webkitSlice
+             || blob.mozSlice
+        ).bind(blob);
+
+        var length = end - start;
+
+        // The old Blob.slice() was length-based (not end-based). Try the
+        // length version first, if the two calls are not equivalent.
+        if (length !== end) {
+
+            // If the result of the slice() call matches the expected length,
+            // trust that result. It must be correct.
+            var sliceResult = sliceImplementation(start, length);
+            if (sliceResult.size === length)
+                return sliceResult;
+
+        }
+
+        // Otherwise, use the most-recent standard: end-based slice()
+        return sliceImplementation(start, end);
+
+    };
+
+    /**
+     * Sends the contents of the given blob over the underlying stream.
+     *
+     * @param {!Blob} blob
+     *     The blob to send.
+     */
+    this.sendBlob = function sendBlob(blob) {
+
+        var offset = 0;
+        var reader = new FileReader();
+
+        /**
+         * Reads the next chunk of the blob provided to
+         * [sendBlob()]{@link Guacamole.BlobWriter#sendBlob}. The chunk itself
+         * is read asynchronously, and will not be available until
+         * reader.onload fires.
+         *
+         * @private
+         */
+        var readNextChunk = function readNextChunk() {
+
+            // If no further chunks remain, inform of completion and stop
+            if (offset >= blob.size) {
+
+                // Fire completion event for completed blob
+                if (guacWriter.oncomplete)
+                    guacWriter.oncomplete(blob);
+
+                // No further chunks to read
+                return;
+
+            }
+
+            // Obtain reference to next chunk as a new blob
+            var chunk = slice(blob, offset, offset + arrayBufferWriter.blobLength);
+            offset += arrayBufferWriter.blobLength;
+
+            // Attempt to read the blob contents represented by the blob into
+            // a new array buffer
+            reader.readAsArrayBuffer(chunk);
+
+        };
+
+        // Send each chunk over the stream, continue reading the next chunk
+        reader.onload = function chunkLoadComplete() {
+
+            // Send the successfully-read chunk
+            arrayBufferWriter.sendData(reader.result);
+
+            // Continue sending more chunks after the latest chunk is
+            // acknowledged
+            arrayBufferWriter.onack = function sendMoreChunks(status) {
+
+                if (guacWriter.onack)
+                    guacWriter.onack(status);
+
+                // Abort transfer if an error occurs
+                if (status.isError())
+                    return;
+
+                // Inform of blob upload progress via progress events
+                if (guacWriter.onprogress)
+                    guacWriter.onprogress(blob, offset - arrayBufferWriter.blobLength);
+
+                // Queue the next chunk for reading
+                readNextChunk();
+
+            };
+
+        };
+
+        // If an error prevents further reading, inform of error and stop
+        reader.onerror = function chunkLoadFailed() {
+
+            // Fire error event, including the context of the error
+            if (guacWriter.onerror)
+                guacWriter.onerror(blob, offset, reader.error);
+
+        };
+
+        // Begin reading the first chunk
+        readNextChunk();
+
+    };
+
+    /**
+     * Signals that no further text will be sent, effectively closing the
+     * stream.
+     */
+    this.sendEnd = function sendEnd() {
+        arrayBufferWriter.sendEnd();
+    };
+
+    /**
+     * Fired for received data, if acknowledged by the server.
+     *
+     * @event
+     * @param {!Guacamole.Status} status
+     *     The status of the operation.
+     */
+    this.onack = null;
+
+    /**
+     * Fired when an error occurs reading a blob passed to
+     * [sendBlob()]{@link Guacamole.BlobWriter#sendBlob}. The transfer for the
+     * the given blob will cease, but the stream will remain open.
+     *
+     * @event
+     * @param {!Blob} blob
+     *     The blob that was being read when the error occurred.
+     *
+     * @param {!number} offset
+     *     The offset of the failed read attempt within the blob, in bytes.
+     *
+     * @param {!DOMError} error
+     *     The error that occurred.
+     */
+    this.onerror = null;
+
+    /**
+     * Fired for each successfully-read chunk of data as a blob is being sent
+     * via [sendBlob()]{@link Guacamole.BlobWriter#sendBlob}.
+     *
+     * @event
+     * @param {!Blob} blob
+     *     The blob that is being read.
+     *
+     * @param {!number} offset
+     *     The offset of the read that just succeeded.
+     */
+    this.onprogress = null;
+
+    /**
+     * Fired when a blob passed to
+     * [sendBlob()]{@link Guacamole.BlobWriter#sendBlob} has finished being
+     * sent.
+     *
+     * @event
+     * @param {!Blob} blob
+     *     The blob that was sent.
+     */
+    this.oncomplete = null;
+
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 4.0.2 on Sat Mar 30 2024 09:36:10 GMT-0700 (Pacific Daylight Time) +
+ + + + + diff --git a/doc/1.5.5/guacamole-common-js/main_webapp_modules_Client.js.html b/doc/1.5.5/guacamole-common-js/main_webapp_modules_Client.js.html new file mode 100644 index 000000000..96de5d658 --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/main_webapp_modules_Client.js.html @@ -0,0 +1,2079 @@ + + + + + JSDoc: Source: main/webapp/modules/Client.js + + + + + + + + + + +
+ +

Source: main/webapp/modules/Client.js

+ + + + + + +
+
+
/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+var Guacamole = Guacamole || {};
+
+/**
+ * Guacamole protocol client. Given a {@link Guacamole.Tunnel},
+ * automatically handles incoming and outgoing Guacamole instructions via the
+ * provided tunnel, updating its display using one or more canvas elements.
+ * 
+ * @constructor
+ * @param {!Guacamole.Tunnel} tunnel
+ *     The tunnel to use to send and receive Guacamole instructions.
+ */
+Guacamole.Client = function(tunnel) {
+
+    var guac_client = this;
+
+    var STATE_IDLE          = 0;
+    var STATE_CONNECTING    = 1;
+    var STATE_WAITING       = 2;
+    var STATE_CONNECTED     = 3;
+    var STATE_DISCONNECTING = 4;
+    var STATE_DISCONNECTED  = 5;
+
+    var currentState = STATE_IDLE;
+    
+    var currentTimestamp = 0;
+
+    /**
+     * The rough number of milliseconds to wait between sending keep-alive
+     * pings. This may vary depending on how frequently the browser allows
+     * timers to run, as well as how frequently the client receives messages
+     * from the server.
+     *
+     * @private
+     * @constant
+     * @type {!number}
+     */
+    var KEEP_ALIVE_FREQUENCY = 5000;
+
+    /**
+     * The current keep-alive ping timeout ID, if any. This will only be set
+     * upon connecting.
+     *
+     * @private
+     * @type {number}
+     */
+    var keepAliveTimeout = null;
+
+    /**
+     * The timestamp of the point in time that the last keep-live ping was
+     * sent, in milliseconds elapsed since midnight of January 1, 1970 UTC.
+     *
+     * @private
+     * @type {!number}
+     */
+    var lastSentKeepAlive = 0;
+
+    /**
+     * Translation from Guacamole protocol line caps to Layer line caps.
+     *
+     * @private
+     * @type {!Object.<number, string>}
+     */
+    var lineCap = {
+        0: "butt",
+        1: "round",
+        2: "square"
+    };
+
+    /**
+     * Translation from Guacamole protocol line caps to Layer line caps.
+     *
+     * @private
+     * @type {!Object.<number, string>}
+     */
+    var lineJoin = {
+        0: "bevel",
+        1: "miter",
+        2: "round"
+    };
+
+    /**
+     * The underlying Guacamole display.
+     *
+     * @private
+     * @type {!Guacamole.Display}
+     */
+    var display = new Guacamole.Display();
+
+    /**
+     * All available layers and buffers
+     *
+     * @private
+     * @type {!Object.<number, (Guacamole.Display.VisibleLayer|Guacamole.Layer)>}
+     */
+    var layers = {};
+    
+    /**
+     * All audio players currently in use by the client. Initially, this will
+     * be empty, but audio players may be allocated by the server upon request.
+     *
+     * @private
+     * @type {!Object.<number, Guacamole.AudioPlayer>}
+     */
+    var audioPlayers = {};
+
+    /**
+     * All video players currently in use by the client. Initially, this will
+     * be empty, but video players may be allocated by the server upon request.
+     *
+     * @private
+     * @type {!Object.<number, Guacamole.VideoPlayer>}
+     */
+    var videoPlayers = {};
+
+    // No initial parsers
+    var parsers = [];
+
+    // No initial streams 
+    var streams = [];
+
+    /**
+     * All current objects. The index of each object is dictated by the
+     * Guacamole server.
+     *
+     * @private
+     * @type {!Guacamole.Object[]}
+     */
+    var objects = [];
+
+    // Pool of available stream indices
+    var stream_indices = new Guacamole.IntegerPool();
+
+    // Array of allocated output streams by index
+    var output_streams = [];
+
+    function setState(state) {
+        if (state != currentState) {
+            currentState = state;
+            if (guac_client.onstatechange)
+                guac_client.onstatechange(currentState);
+        }
+    }
+
+    function isConnected() {
+        return currentState == STATE_CONNECTED
+            || currentState == STATE_WAITING;
+    }
+
+    /**
+     * Produces an opaque representation of Guacamole.Client state which can be
+     * later imported through a call to importState(). This object is
+     * effectively an independent, compressed snapshot of protocol and display
+     * state. Invoking this function implicitly flushes the display.
+     *
+     * @param {!function} callback
+     *     Callback which should be invoked once the state object is ready. The
+     *     state object will be passed to the callback as the sole parameter.
+     *     This callback may be invoked immediately, or later as the display
+     *     finishes rendering and becomes ready.
+     */
+    this.exportState = function exportState(callback) {
+
+        // Start with empty state
+        var state = {
+            'currentState' : currentState,
+            'currentTimestamp' : currentTimestamp,
+            'layers' : {}
+        };
+
+        var layersSnapshot = {};
+
+        // Make a copy of all current layers (protocol state)
+        for (var key in layers) {
+            layersSnapshot[key] = layers[key];
+        }
+
+        // Populate layers once data is available (display state, requires flush)
+        display.flush(function populateLayers() {
+
+            // Export each defined layer/buffer
+            for (var key in layersSnapshot) {
+
+                var index = parseInt(key);
+                var layer = layersSnapshot[key];
+                var canvas = layer.toCanvas();
+
+                // Store layer/buffer dimensions
+                var exportLayer = {
+                    'width'  : layer.width,
+                    'height' : layer.height
+                };
+
+                // Store layer/buffer image data, if it can be generated
+                if (layer.width && layer.height)
+                    exportLayer.url = canvas.toDataURL('image/png');
+
+                // Add layer properties if not a buffer nor the default layer
+                if (index > 0) {
+                    exportLayer.x = layer.x;
+                    exportLayer.y = layer.y;
+                    exportLayer.z = layer.z;
+                    exportLayer.alpha = layer.alpha;
+                    exportLayer.matrix = layer.matrix;
+                    exportLayer.parent = getLayerIndex(layer.parent);
+                }
+
+                // Store exported layer
+                state.layers[key] = exportLayer;
+
+            }
+
+            // Invoke callback now that the state is ready
+            callback(state);
+
+        });
+
+    };
+
+    /**
+     * Restores Guacamole.Client protocol and display state based on an opaque
+     * object from a prior call to exportState(). The Guacamole.Client instance
+     * used to export that state need not be the same as this instance.
+     *
+     * @param {!object} state
+     *     An opaque representation of Guacamole.Client state from a prior call
+     *     to exportState().
+     *
+     * @param {function} [callback]
+     *     The function to invoke when state has finished being imported. This
+     *     may happen immediately, or later as images within the provided state
+     *     object are loaded.
+     */
+    this.importState = function importState(state, callback) {
+
+        var key;
+        var index;
+
+        currentState = state.currentState;
+        currentTimestamp = state.currentTimestamp;
+
+        // Cancel any pending display operations/frames
+        display.cancel();
+
+        // Dispose of all layers
+        for (key in layers) {
+            index = parseInt(key);
+            if (index > 0)
+                layers[key].dispose();
+        }
+
+        layers = {};
+
+        // Import state of each layer/buffer
+        for (key in state.layers) {
+
+            index = parseInt(key);
+
+            var importLayer = state.layers[key];
+            var layer = getLayer(index);
+
+            // Reset layer size
+            display.resize(layer, importLayer.width, importLayer.height);
+
+            // Initialize new layer if it has associated data
+            if (importLayer.url) {
+                display.setChannelMask(layer, Guacamole.Layer.SRC);
+                display.draw(layer, 0, 0, importLayer.url);
+            }
+
+            // Set layer-specific properties if not a buffer nor the default layer
+            if (index > 0 && importLayer.parent >= 0) {
+
+                // Apply layer position and set parent
+                var parent = getLayer(importLayer.parent);
+                display.move(layer, parent, importLayer.x, importLayer.y, importLayer.z);
+
+                // Set layer transparency
+                display.shade(layer, importLayer.alpha);
+
+                // Apply matrix transform
+                var matrix = importLayer.matrix;
+                display.distort(layer,
+                    matrix[0], matrix[1], matrix[2],
+                    matrix[3], matrix[4], matrix[5]);
+
+            }
+
+        }
+
+        // Flush changes to display
+        display.flush(callback);
+
+    };
+
+    /**
+     * Returns the underlying display of this Guacamole.Client. The display
+     * contains an Element which can be added to the DOM, causing the
+     * display to become visible.
+     * 
+     * @return {!Guacamole.Display}
+     *     The underlying display of this Guacamole.Client.
+     */
+    this.getDisplay = function() {
+        return display;
+    };
+
+    /**
+     * Sends the current size of the screen.
+     * 
+     * @param {!number} width
+     *     The width of the screen.
+     *
+     * @param {!number} height
+     *     The height of the screen.
+     */
+    this.sendSize = function(width, height) {
+
+        // Do not send requests if not connected
+        if (!isConnected())
+            return;
+
+        tunnel.sendMessage("size", width, height);
+
+    };
+
+    /**
+     * Sends a key event having the given properties as if the user
+     * pressed or released a key.
+     * 
+     * @param {!boolean} pressed
+     *     Whether the key is pressed (true) or released (false).
+     *
+     * @param {!number} keysym
+     *     The keysym of the key being pressed or released.
+     */
+    this.sendKeyEvent = function(pressed, keysym) {
+        // Do not send requests if not connected
+        if (!isConnected())
+            return;
+
+        tunnel.sendMessage("key", keysym, pressed);
+    };
+
+    /**
+     * Sends a mouse event having the properties provided by the given mouse
+     * state.
+     * 
+     * @param {!Guacamole.Mouse.State} mouseState
+     *     The state of the mouse to send in the mouse event.
+     *
+     * @param {boolean} [applyDisplayScale=false]
+     *     Whether the provided mouse state uses local display units, rather
+     *     than remote display units, and should be scaled to match the
+     *     {@link Guacamole.Display}.
+     */
+    this.sendMouseState = function sendMouseState(mouseState, applyDisplayScale) {
+
+        // Do not send requests if not connected
+        if (!isConnected())
+            return;
+
+        var x = mouseState.x;
+        var y = mouseState.y;
+
+        // Translate for display units if requested
+        if (applyDisplayScale) {
+            x /= display.getScale();
+            y /= display.getScale();
+        }
+
+        // Update client-side cursor
+        display.moveCursor(
+            Math.floor(x),
+            Math.floor(y)
+        );
+
+        // Build mask
+        var buttonMask = 0;
+        if (mouseState.left)   buttonMask |= 1;
+        if (mouseState.middle) buttonMask |= 2;
+        if (mouseState.right)  buttonMask |= 4;
+        if (mouseState.up)     buttonMask |= 8;
+        if (mouseState.down)   buttonMask |= 16;
+
+        // Send message
+        tunnel.sendMessage("mouse", Math.floor(x), Math.floor(y), buttonMask);
+    };
+
+    /**
+     * Sends a touch event having the properties provided by the given touch
+     * state.
+     *
+     * @param {!Guacamole.Touch.State} touchState
+     *     The state of the touch contact to send in the touch event.
+     *
+     * @param {boolean} [applyDisplayScale=false]
+     *     Whether the provided touch state uses local display units, rather
+     *     than remote display units, and should be scaled to match the
+     *     {@link Guacamole.Display}.
+     */
+    this.sendTouchState = function sendTouchState(touchState, applyDisplayScale) {
+
+        // Do not send requests if not connected
+        if (!isConnected())
+            return;
+
+        var x = touchState.x;
+        var y = touchState.y;
+
+        // Translate for display units if requested
+        if (applyDisplayScale) {
+            x /= display.getScale();
+            y /= display.getScale();
+        }
+
+        tunnel.sendMessage('touch', touchState.id, Math.floor(x), Math.floor(y),
+            Math.floor(touchState.radiusX), Math.floor(touchState.radiusY),
+            touchState.angle, touchState.force);
+
+    };
+
+    /**
+     * Allocates an available stream index and creates a new
+     * Guacamole.OutputStream using that index, associating the resulting
+     * stream with this Guacamole.Client. Note that this stream will not yet
+     * exist as far as the other end of the Guacamole connection is concerned.
+     * Streams exist within the Guacamole protocol only when referenced by an
+     * instruction which creates the stream, such as a "clipboard", "file", or
+     * "pipe" instruction.
+     *
+     * @returns {!Guacamole.OutputStream}
+     *     A new Guacamole.OutputStream with a newly-allocated index and
+     *     associated with this Guacamole.Client.
+     */
+    this.createOutputStream = function createOutputStream() {
+
+        // Allocate index
+        var index = stream_indices.next();
+
+        // Return new stream
+        var stream = output_streams[index] = new Guacamole.OutputStream(guac_client, index);
+        return stream;
+
+    };
+
+    /**
+     * Opens a new audio stream for writing, where audio data having the give
+     * mimetype will be sent along the returned stream. The instruction
+     * necessary to create this stream will automatically be sent.
+     *
+     * @param {!string} mimetype
+     *     The mimetype of the audio data that will be sent along the returned
+     *     stream.
+     *
+     * @return {!Guacamole.OutputStream}
+     *     The created audio stream.
+     */
+    this.createAudioStream = function(mimetype) {
+
+        // Allocate and associate stream with audio metadata
+        var stream = guac_client.createOutputStream();
+        tunnel.sendMessage("audio", stream.index, mimetype);
+        return stream;
+
+    };
+
+    /**
+     * Opens a new file for writing, having the given index, mimetype and
+     * filename. The instruction necessary to create this stream will
+     * automatically be sent.
+     *
+     * @param {!string} mimetype
+     *     The mimetype of the file being sent.
+     *
+     * @param {!string} filename
+     *     The filename of the file being sent.
+     *
+     * @return {!Guacamole.OutputStream}
+     *     The created file stream.
+     */
+    this.createFileStream = function(mimetype, filename) {
+
+        // Allocate and associate stream with file metadata
+        var stream = guac_client.createOutputStream();
+        tunnel.sendMessage("file", stream.index, mimetype, filename);
+        return stream;
+
+    };
+
+    /**
+     * Opens a new pipe for writing, having the given name and mimetype. The
+     * instruction necessary to create this stream will automatically be sent.
+     *
+     * @param {!string} mimetype
+     *     The mimetype of the data being sent.
+     *
+     * @param {!string} name
+     *     The name of the pipe.
+     *
+     * @return {!Guacamole.OutputStream}
+     *     The created file stream.
+     */
+    this.createPipeStream = function(mimetype, name) {
+
+        // Allocate and associate stream with pipe metadata
+        var stream = guac_client.createOutputStream();
+        tunnel.sendMessage("pipe", stream.index, mimetype, name);
+        return stream;
+
+    };
+
+    /**
+     * Opens a new clipboard object for writing, having the given mimetype. The
+     * instruction necessary to create this stream will automatically be sent.
+     *
+     * @param {!string} mimetype
+     *     The mimetype of the data being sent.
+     *
+     * @param {!string} name
+     *     The name of the pipe.
+     *
+     * @return {!Guacamole.OutputStream}
+     *     The created file stream.
+     */
+    this.createClipboardStream = function(mimetype) {
+
+        // Allocate and associate stream with clipboard metadata
+        var stream = guac_client.createOutputStream();
+        tunnel.sendMessage("clipboard", stream.index, mimetype);
+        return stream;
+
+    };
+
+    /**
+     * Opens a new argument value stream for writing, having the given
+     * parameter name and mimetype, requesting that the connection parameter
+     * with the given name be updated to the value described by the contents
+     * of the following stream. The instruction necessary to create this stream
+     * will automatically be sent.
+     *
+     * @param {!string} mimetype
+     *     The mimetype of the data being sent.
+     *
+     * @param {!string} name
+     *     The name of the connection parameter to attempt to update.
+     *
+     * @return {!Guacamole.OutputStream}
+     *     The created argument value stream.
+     */
+    this.createArgumentValueStream = function createArgumentValueStream(mimetype, name) {
+
+        // Allocate and associate stream with argument value metadata
+        var stream = guac_client.createOutputStream();
+        tunnel.sendMessage("argv", stream.index, mimetype, name);
+        return stream;
+
+    };
+
+    /**
+     * Creates a new output stream associated with the given object and having
+     * the given mimetype and name. The legality of a mimetype and name is
+     * dictated by the object itself. The instruction necessary to create this
+     * stream will automatically be sent.
+     *
+     * @param {!number} index
+     *     The index of the object for which the output stream is being
+     *     created.
+     *
+     * @param {!string} mimetype
+     *     The mimetype of the data which will be sent to the output stream.
+     *
+     * @param {!string} name
+     *     The defined name of an output stream within the given object.
+     *
+     * @returns {!Guacamole.OutputStream}
+     *     An output stream which will write blobs to the named output stream
+     *     of the given object.
+     */
+    this.createObjectOutputStream = function createObjectOutputStream(index, mimetype, name) {
+
+        // Allocate and associate stream with object metadata
+        var stream = guac_client.createOutputStream();
+        tunnel.sendMessage("put", index, stream.index, mimetype, name);
+        return stream;
+
+    };
+
+    /**
+     * Requests read access to the input stream having the given name. If
+     * successful, a new input stream will be created.
+     *
+     * @param {!number} index
+     *     The index of the object from which the input stream is being
+     *     requested.
+     *
+     * @param {!string} name
+     *     The name of the input stream to request.
+     */
+    this.requestObjectInputStream = function requestObjectInputStream(index, name) {
+
+        // Do not send requests if not connected
+        if (!isConnected())
+            return;
+
+        tunnel.sendMessage("get", index, name);
+    };
+
+    /**
+     * Acknowledge receipt of a blob on the stream with the given index.
+     * 
+     * @param {!number} index
+     *     The index of the stream associated with the received blob.
+     *
+     * @param {!string} message
+     *     A human-readable message describing the error or status.
+     *
+     * @param {!number} code
+     *     The error code, if any, or 0 for success.
+     */
+    this.sendAck = function(index, message, code) {
+
+        // Do not send requests if not connected
+        if (!isConnected())
+            return;
+
+        tunnel.sendMessage("ack", index, message, code);
+    };
+
+    /**
+     * Given the index of a file, writes a blob of data to that file.
+     * 
+     * @param {!number} index
+     *     The index of the file to write to.
+     *
+     * @param {!string} data
+     *     Base64-encoded data to write to the file.
+     */
+    this.sendBlob = function(index, data) {
+
+        // Do not send requests if not connected
+        if (!isConnected())
+            return;
+
+        tunnel.sendMessage("blob", index, data);
+    };
+
+    /**
+     * Marks a currently-open stream as complete. The other end of the
+     * Guacamole connection will be notified via an "end" instruction that the
+     * stream is closed, and the index will be made available for reuse in
+     * future streams.
+     * 
+     * @param {!number} index
+     *     The index of the stream to end.
+     */
+    this.endStream = function(index) {
+
+        // Do not send requests if not connected
+        if (!isConnected())
+            return;
+
+        // Explicitly close stream by sending "end" instruction
+        tunnel.sendMessage("end", index);
+
+        // Free associated index and stream if they exist
+        if (output_streams[index]) {
+            stream_indices.free(index);
+            delete output_streams[index];
+        }
+
+    };
+
+    /**
+     * Fired whenever the state of this Guacamole.Client changes.
+     * 
+     * @event
+     * @param {!number} state
+     *     The new state of the client.
+     */
+    this.onstatechange = null;
+
+    /**
+     * Fired when the remote client sends a name update.
+     * 
+     * @event
+     * @param {!string} name
+     *     The new name of this client.
+     */
+    this.onname = null;
+
+    /**
+     * Fired when an error is reported by the remote client, and the connection
+     * is being closed.
+     * 
+     * @event
+     * @param {!Guacamole.Status} status
+     *     A status object which describes the error.
+     */
+    this.onerror = null;
+    
+    /**
+     * Fired when an arbitrary message is received from the tunnel that should
+     * be processed by the client. By default, additional message-specific
+     * events such as "onjoin" and "onleave" will fire for the received message
+     * after this event has been processed. An event handler for "onmsg" need
+     * not be supplied if "onjoin" and/or "onleave" will be used.
+     * 
+     * @event
+     * @param {!number} msgcode
+     *     A status code sent by the remote server that indicates the nature of
+     *     the message that is being sent to the client.
+     *     
+     * @param {string[]} args
+     *     An array of arguments to be processed with the message sent to the
+     *     client.
+     *
+     * @return {boolean}
+     *     true if message-specific events such as "onjoin" and
+     *     "onleave" should be fired for this message, false otherwise. If
+     *     no value is returned, message-specific events will be allowed to
+     *     fire.
+     */
+    this.onmsg = null;
+
+    /**
+     * Fired when a user joins a shared connection.
+     *
+     * @event
+     * @param {!string} userID
+     *     A unique value representing this specific user's connection to the
+     *     shared connection. This value is generated by the server and is
+     *     guaranteed to be unique relative to other users of the connection.
+     *
+     * @param {!string} name
+     *     A human-readable name representing the user that joined, such as
+     *     their username. This value is provided by the web application during
+     *     the connection handshake and is not necessarily unique relative to
+     *     other users of the connection.
+     */
+    this.onjoin = null;
+
+    /**
+     * Fired when a user leaves a shared connection.
+     *
+     * @event
+     * @param {!string} userID
+     *     A unique value representing this specific user's connection to the
+     *     shared connection. This value is generated by the server and is
+     *     guaranteed to be unique relative to other users of the connection.
+     *
+     * @param {!string} name
+     *     A human-readable name representing the user that left, such as their
+     *     username. This value is provided by the web application during the
+     *     connection handshake and is not necessarily unique relative to other
+     *     users of the connection.
+     */
+    this.onleave = null;
+
+    /**
+     * Fired when a audio stream is created. The stream provided to this event
+     * handler will contain its own event handlers for received data.
+     *
+     * @event
+     * @param {!Guacamole.InputStream} stream
+     *     The stream that will receive audio data from the server.
+     *
+     * @param {!string} mimetype
+     *     The mimetype of the audio data which will be received.
+     *
+     * @return {Guacamole.AudioPlayer}
+     *     An object which implements the Guacamole.AudioPlayer interface and
+     *     has been initialized to play the data in the provided stream, or null
+     *     if the built-in audio players of the Guacamole client should be
+     *     used.
+     */
+    this.onaudio = null;
+
+    /**
+     * Fired when a video stream is created. The stream provided to this event
+     * handler will contain its own event handlers for received data.
+     *
+     * @event
+     * @param {!Guacamole.InputStream} stream
+     *     The stream that will receive video data from the server.
+     *
+     * @param {!Guacamole.Display.VisibleLayer} layer
+     *     The destination layer on which the received video data should be
+     *     played. It is the responsibility of the Guacamole.VideoPlayer
+     *     implementation to play the received data within this layer.
+     *
+     * @param {!string} mimetype
+     *     The mimetype of the video data which will be received.
+     *
+     * @return {Guacamole.VideoPlayer}
+     *     An object which implements the Guacamole.VideoPlayer interface and
+     *     has been initialized to play the data in the provided stream, or null
+     *     if the built-in video players of the Guacamole client should be
+     *     used.
+     */
+    this.onvideo = null;
+
+    /**
+     * Fired when the remote client is explicitly declaring the level of
+     * multi-touch support provided by a particular display layer.
+     *
+     * @event
+     * @param {!Guacamole.Display.VisibleLayer} layer
+     *     The layer whose multi-touch support level is being declared.
+     *
+     * @param {!number} touches
+     *     The maximum number of simultaneous touches supported by the given
+     *     layer, where 0 indicates that touch events are not supported at all.
+     */
+    this.onmultitouch = null;
+
+    /**
+     * Fired when the current value of a connection parameter is being exposed
+     * by the server.
+     *
+     * @event
+     * @param {!Guacamole.InputStream} stream
+     *     The stream that will receive connection parameter data from the
+     *     server.
+     *
+     * @param {!string} mimetype
+     *     The mimetype of the data which will be received.
+     *
+     * @param {!string} name
+     *     The name of the connection parameter whose value is being exposed.
+     */
+    this.onargv = null;
+
+    /**
+     * Fired when the clipboard of the remote client is changing.
+     * 
+     * @event
+     * @param {!Guacamole.InputStream} stream
+     *     The stream that will receive clipboard data from the server.
+     *
+     * @param {!string} mimetype
+     *     The mimetype of the data which will be received.
+     */
+    this.onclipboard = null;
+
+    /**
+     * Fired when a file stream is created. The stream provided to this event
+     * handler will contain its own event handlers for received data.
+     * 
+     * @event
+     * @param {!Guacamole.InputStream} stream
+     *     The stream that will receive data from the server.
+     *
+     * @param {!string} mimetype
+     *     The mimetype of the file received.
+     *
+     * @param {!string} filename
+     *     The name of the file received.
+     */
+    this.onfile = null;
+
+    /**
+     * Fired when a filesystem object is created. The object provided to this
+     * event handler will contain its own event handlers and functions for
+     * requesting and handling data.
+     *
+     * @event
+     * @param {!Guacamole.Object} object
+     *     The created filesystem object.
+     *
+     * @param {!string} name
+     *     The name of the filesystem.
+     */
+    this.onfilesystem = null;
+
+    /**
+     * Fired when a pipe stream is created. The stream provided to this event
+     * handler will contain its own event handlers for received data;
+     * 
+     * @event
+     * @param {!Guacamole.InputStream} stream
+     *     The stream that will receive data from the server.
+     *
+     * @param {!string} mimetype
+     *     The mimetype of the data which will be received.
+     *
+     * @param {!string} name
+     *     The name of the pipe.
+     */
+    this.onpipe = null;
+    
+    /**
+     * Fired when a "required" instruction is received. A required instruction
+     * indicates that additional parameters are required for the connection to
+     * continue, such as user credentials.
+     * 
+     * @event
+     * @param {!string[]} parameters
+     *      The names of the connection parameters that are required to be
+     *      provided for the connection to continue.
+     */
+    this.onrequired = null;
+
+    /**
+     * Fired whenever a sync instruction is received from the server, indicating
+     * that the server is finished processing any input from the client and
+     * has sent any results.
+     * 
+     * @event
+     * @param {!number} timestamp
+     *     The timestamp associated with the sync instruction.
+     */
+    this.onsync = null;
+
+    /**
+     * Returns the layer with the given index, creating it if necessary.
+     * Positive indices refer to visible layers, an index of zero refers to
+     * the default layer, and negative indices refer to buffers.
+     *
+     * @private
+     * @param {!number} index
+     *     The index of the layer to retrieve.
+     *
+     * @return {!(Guacamole.Display.VisibleLayer|Guacamole.Layer)}
+     *     The layer having the given index.
+     */
+    var getLayer = function getLayer(index) {
+
+        // Get layer, create if necessary
+        var layer = layers[index];
+        if (!layer) {
+
+            // Create layer based on index
+            if (index === 0)
+                layer = display.getDefaultLayer();
+            else if (index > 0)
+                layer = display.createLayer();
+            else
+                layer = display.createBuffer();
+                
+            // Add new layer
+            layers[index] = layer;
+
+        }
+
+        return layer;
+
+    };
+
+    /**
+     * Returns the index passed to getLayer() when the given layer was created.
+     * Positive indices refer to visible layers, an index of zero refers to the
+     * default layer, and negative indices refer to buffers.
+     *
+     * @param {!(Guacamole.Display.VisibleLayer|Guacamole.Layer)} layer
+     *     The layer whose index should be determined.
+     *
+     * @returns {number}
+     *     The index of the given layer, or null if no such layer is associated
+     *     with this client.
+     */
+    var getLayerIndex = function getLayerIndex(layer) {
+
+        // Avoid searching if there clearly is no such layer
+        if (!layer)
+            return null;
+
+        // Search through each layer, returning the index of the given layer
+        // once found
+        for (var key in layers) {
+            if (layer === layers[key])
+                return parseInt(key);
+        }
+
+        // Otherwise, no such index
+        return null;
+
+    };
+
+    function getParser(index) {
+
+        var parser = parsers[index];
+
+        // If parser not yet created, create it, and tie to the
+        // oninstruction handler of the tunnel.
+        if (parser == null) {
+            parser = parsers[index] = new Guacamole.Parser();
+            parser.oninstruction = tunnel.oninstruction;
+        }
+
+        return parser;
+
+    }
+
+    /**
+     * Handlers for all defined layer properties.
+     *
+     * @private
+     * @type {!Object.<string, function>}
+     */
+    var layerPropertyHandlers = {
+
+        "miter-limit": function(layer, value) {
+            display.setMiterLimit(layer, parseFloat(value));
+        },
+
+        "multi-touch" : function layerSupportsMultiTouch(layer, value) {
+
+            // Process "multi-touch" property only for true visible layers (not off-screen buffers)
+            if (guac_client.onmultitouch && layer instanceof Guacamole.Display.VisibleLayer)
+                guac_client.onmultitouch(layer, parseInt(value));
+
+        }
+
+    };
+    
+    /**
+     * Handlers for all instruction opcodes receivable by a Guacamole protocol
+     * client.
+     *
+     * @private
+     * @type {!Object.<string, function>}
+     */
+    var instructionHandlers = {
+
+        "ack": function(parameters) {
+
+            var stream_index = parseInt(parameters[0]);
+            var reason = parameters[1];
+            var code = parseInt(parameters[2]);
+
+            // Get stream
+            var stream = output_streams[stream_index];
+            if (stream) {
+
+                // Signal ack if handler defined
+                if (stream.onack)
+                    stream.onack(new Guacamole.Status(code, reason));
+
+                // If code is an error, invalidate stream if not already
+                // invalidated by onack handler
+                if (code >= 0x0100 && output_streams[stream_index] === stream) {
+                    stream_indices.free(stream_index);
+                    delete output_streams[stream_index];
+                }
+
+            }
+
+        },
+
+        "arc": function(parameters) {
+
+            var layer = getLayer(parseInt(parameters[0]));
+            var x = parseInt(parameters[1]);
+            var y = parseInt(parameters[2]);
+            var radius = parseInt(parameters[3]);
+            var startAngle = parseFloat(parameters[4]);
+            var endAngle = parseFloat(parameters[5]);
+            var negative = parseInt(parameters[6]);
+
+            display.arc(layer, x, y, radius, startAngle, endAngle, negative != 0);
+
+        },
+
+        "argv": function(parameters) {
+
+            var stream_index = parseInt(parameters[0]);
+            var mimetype = parameters[1];
+            var name = parameters[2];
+
+            // Create stream
+            if (guac_client.onargv) {
+                var stream = streams[stream_index] = new Guacamole.InputStream(guac_client, stream_index);
+                guac_client.onargv(stream, mimetype, name);
+            }
+
+            // Otherwise, unsupported
+            else
+                guac_client.sendAck(stream_index, "Receiving argument values unsupported", 0x0100);
+
+        },
+
+        "audio": function(parameters) {
+
+            var stream_index = parseInt(parameters[0]);
+            var mimetype = parameters[1];
+
+            // Create stream 
+            var stream = streams[stream_index] =
+                    new Guacamole.InputStream(guac_client, stream_index);
+
+            // Get player instance via callback
+            var audioPlayer = null;
+            if (guac_client.onaudio)
+                audioPlayer = guac_client.onaudio(stream, mimetype);
+
+            // If unsuccessful, try to use a default implementation
+            if (!audioPlayer)
+                audioPlayer = Guacamole.AudioPlayer.getInstance(stream, mimetype);
+
+            // If we have successfully retrieved an audio player, send success response
+            if (audioPlayer) {
+                audioPlayers[stream_index] = audioPlayer;
+                guac_client.sendAck(stream_index, "OK", 0x0000);
+            }
+
+            // Otherwise, mimetype must be unsupported
+            else
+                guac_client.sendAck(stream_index, "BAD TYPE", 0x030F);
+
+        },
+
+        "blob": function(parameters) {
+
+            // Get stream 
+            var stream_index = parseInt(parameters[0]);
+            var data = parameters[1];
+            var stream = streams[stream_index];
+
+            // Write data
+            if (stream && stream.onblob)
+                stream.onblob(data);
+
+        },
+
+        "body" : function handleBody(parameters) {
+
+            // Get object
+            var objectIndex = parseInt(parameters[0]);
+            var object = objects[objectIndex];
+
+            var streamIndex = parseInt(parameters[1]);
+            var mimetype = parameters[2];
+            var name = parameters[3];
+
+            // Create stream if handler defined
+            if (object && object.onbody) {
+                var stream = streams[streamIndex] = new Guacamole.InputStream(guac_client, streamIndex);
+                object.onbody(stream, mimetype, name);
+            }
+
+            // Otherwise, unsupported
+            else
+                guac_client.sendAck(streamIndex, "Receipt of body unsupported", 0x0100);
+
+        },
+
+        "cfill": function(parameters) {
+
+            var channelMask = parseInt(parameters[0]);
+            var layer = getLayer(parseInt(parameters[1]));
+            var r = parseInt(parameters[2]);
+            var g = parseInt(parameters[3]);
+            var b = parseInt(parameters[4]);
+            var a = parseInt(parameters[5]);
+
+            display.setChannelMask(layer, channelMask);
+            display.fillColor(layer, r, g, b, a);
+
+        },
+
+        "clip": function(parameters) {
+
+            var layer = getLayer(parseInt(parameters[0]));
+
+            display.clip(layer);
+
+        },
+
+        "clipboard": function(parameters) {
+
+            var stream_index = parseInt(parameters[0]);
+            var mimetype = parameters[1];
+
+            // Create stream 
+            if (guac_client.onclipboard) {
+                var stream = streams[stream_index] = new Guacamole.InputStream(guac_client, stream_index);
+                guac_client.onclipboard(stream, mimetype);
+            }
+
+            // Otherwise, unsupported
+            else
+                guac_client.sendAck(stream_index, "Clipboard unsupported", 0x0100);
+
+        },
+
+        "close": function(parameters) {
+
+            var layer = getLayer(parseInt(parameters[0]));
+
+            display.close(layer);
+
+        },
+
+        "copy": function(parameters) {
+
+            var srcL = getLayer(parseInt(parameters[0]));
+            var srcX = parseInt(parameters[1]);
+            var srcY = parseInt(parameters[2]);
+            var srcWidth = parseInt(parameters[3]);
+            var srcHeight = parseInt(parameters[4]);
+            var channelMask = parseInt(parameters[5]);
+            var dstL = getLayer(parseInt(parameters[6]));
+            var dstX = parseInt(parameters[7]);
+            var dstY = parseInt(parameters[8]);
+
+            display.setChannelMask(dstL, channelMask);
+            display.copy(srcL, srcX, srcY, srcWidth, srcHeight, 
+                         dstL, dstX, dstY);
+
+        },
+
+        "cstroke": function(parameters) {
+
+            var channelMask = parseInt(parameters[0]);
+            var layer = getLayer(parseInt(parameters[1]));
+            var cap = lineCap[parseInt(parameters[2])];
+            var join = lineJoin[parseInt(parameters[3])];
+            var thickness = parseInt(parameters[4]);
+            var r = parseInt(parameters[5]);
+            var g = parseInt(parameters[6]);
+            var b = parseInt(parameters[7]);
+            var a = parseInt(parameters[8]);
+
+            display.setChannelMask(layer, channelMask);
+            display.strokeColor(layer, cap, join, thickness, r, g, b, a);
+
+        },
+
+        "cursor": function(parameters) {
+
+            var cursorHotspotX = parseInt(parameters[0]);
+            var cursorHotspotY = parseInt(parameters[1]);
+            var srcL = getLayer(parseInt(parameters[2]));
+            var srcX = parseInt(parameters[3]);
+            var srcY = parseInt(parameters[4]);
+            var srcWidth = parseInt(parameters[5]);
+            var srcHeight = parseInt(parameters[6]);
+
+            display.setCursor(cursorHotspotX, cursorHotspotY,
+                              srcL, srcX, srcY, srcWidth, srcHeight);
+
+        },
+
+        "curve": function(parameters) {
+
+            var layer = getLayer(parseInt(parameters[0]));
+            var cp1x = parseInt(parameters[1]);
+            var cp1y = parseInt(parameters[2]);
+            var cp2x = parseInt(parameters[3]);
+            var cp2y = parseInt(parameters[4]);
+            var x = parseInt(parameters[5]);
+            var y = parseInt(parameters[6]);
+
+            display.curveTo(layer, cp1x, cp1y, cp2x, cp2y, x, y);
+
+        },
+
+        "disconnect" : function handleDisconnect(parameters) {
+
+            // Explicitly tear down connection
+            guac_client.disconnect();
+
+        },
+
+        "dispose": function(parameters) {
+            
+            var layer_index = parseInt(parameters[0]);
+
+            // If visible layer, remove from parent
+            if (layer_index > 0) {
+
+                // Remove from parent
+                var layer = getLayer(layer_index);
+                display.dispose(layer);
+
+                // Delete reference
+                delete layers[layer_index];
+
+            }
+
+            // If buffer, just delete reference
+            else if (layer_index < 0)
+                delete layers[layer_index];
+
+            // Attempting to dispose the root layer currently has no effect.
+
+        },
+
+        "distort": function(parameters) {
+
+            var layer_index = parseInt(parameters[0]);
+            var a = parseFloat(parameters[1]);
+            var b = parseFloat(parameters[2]);
+            var c = parseFloat(parameters[3]);
+            var d = parseFloat(parameters[4]);
+            var e = parseFloat(parameters[5]);
+            var f = parseFloat(parameters[6]);
+
+            // Only valid for visible layers (not buffers)
+            if (layer_index >= 0) {
+                var layer = getLayer(layer_index);
+                display.distort(layer, a, b, c, d, e, f);
+            }
+
+        },
+ 
+        "error": function(parameters) {
+
+            var reason = parameters[0];
+            var code = parseInt(parameters[1]);
+
+            // Call handler if defined
+            if (guac_client.onerror)
+                guac_client.onerror(new Guacamole.Status(code, reason));
+
+            guac_client.disconnect();
+
+        },
+
+        "end": function(parameters) {
+
+            var stream_index = parseInt(parameters[0]);
+
+            // Get stream
+            var stream = streams[stream_index];
+            if (stream) {
+
+                // Signal end of stream if handler defined
+                if (stream.onend)
+                    stream.onend();
+
+                // Invalidate stream
+                delete streams[stream_index];
+
+            }
+
+        },
+
+        "file": function(parameters) {
+
+            var stream_index = parseInt(parameters[0]);
+            var mimetype = parameters[1];
+            var filename = parameters[2];
+
+            // Create stream 
+            if (guac_client.onfile) {
+                var stream = streams[stream_index] = new Guacamole.InputStream(guac_client, stream_index);
+                guac_client.onfile(stream, mimetype, filename);
+            }
+
+            // Otherwise, unsupported
+            else
+                guac_client.sendAck(stream_index, "File transfer unsupported", 0x0100);
+
+        },
+
+        "filesystem" : function handleFilesystem(parameters) {
+
+            var objectIndex = parseInt(parameters[0]);
+            var name = parameters[1];
+
+            // Create object, if supported
+            if (guac_client.onfilesystem) {
+                var object = objects[objectIndex] = new Guacamole.Object(guac_client, objectIndex);
+                guac_client.onfilesystem(object, name);
+            }
+
+            // If unsupported, simply ignore the availability of the filesystem
+
+        },
+
+        "identity": function(parameters) {
+
+            var layer = getLayer(parseInt(parameters[0]));
+
+            display.setTransform(layer, 1, 0, 0, 1, 0, 0);
+
+        },
+
+        "img": function(parameters) {
+
+            var stream_index = parseInt(parameters[0]);
+            var channelMask = parseInt(parameters[1]);
+            var layer = getLayer(parseInt(parameters[2]));
+            var mimetype = parameters[3];
+            var x = parseInt(parameters[4]);
+            var y = parseInt(parameters[5]);
+
+            // Create stream
+            var stream = streams[stream_index] = new Guacamole.InputStream(guac_client, stream_index);
+
+            // Draw received contents once decoded
+            display.setChannelMask(layer, channelMask);
+            display.drawStream(layer, x, y, stream, mimetype);
+
+        },
+
+        "jpeg": function(parameters) {
+
+            var channelMask = parseInt(parameters[0]);
+            var layer = getLayer(parseInt(parameters[1]));
+            var x = parseInt(parameters[2]);
+            var y = parseInt(parameters[3]);
+            var data = parameters[4];
+
+            display.setChannelMask(layer, channelMask);
+            display.draw(layer, x, y, "data:image/jpeg;base64," + data);
+
+        },
+
+        "lfill": function(parameters) {
+
+            var channelMask = parseInt(parameters[0]);
+            var layer = getLayer(parseInt(parameters[1]));
+            var srcLayer = getLayer(parseInt(parameters[2]));
+
+            display.setChannelMask(layer, channelMask);
+            display.fillLayer(layer, srcLayer);
+
+        },
+
+        "line": function(parameters) {
+
+            var layer = getLayer(parseInt(parameters[0]));
+            var x = parseInt(parameters[1]);
+            var y = parseInt(parameters[2]);
+
+            display.lineTo(layer, x, y);
+
+        },
+
+        "lstroke": function(parameters) {
+
+            var channelMask = parseInt(parameters[0]);
+            var layer = getLayer(parseInt(parameters[1]));
+            var srcLayer = getLayer(parseInt(parameters[2]));
+
+            display.setChannelMask(layer, channelMask);
+            display.strokeLayer(layer, srcLayer);
+
+        },
+
+        "mouse" : function handleMouse(parameters) {
+
+            var x = parseInt(parameters[0]);
+            var y = parseInt(parameters[1]);
+
+            // Display and move software cursor to received coordinates
+            display.showCursor(true);
+            display.moveCursor(x, y);
+
+        },
+
+        "move": function(parameters) {
+            
+            var layer_index = parseInt(parameters[0]);
+            var parent_index = parseInt(parameters[1]);
+            var x = parseInt(parameters[2]);
+            var y = parseInt(parameters[3]);
+            var z = parseInt(parameters[4]);
+
+            // Only valid for non-default layers
+            if (layer_index > 0 && parent_index >= 0) {
+                var layer = getLayer(layer_index);
+                var parent = getLayer(parent_index);
+                display.move(layer, parent, x, y, z);
+            }
+
+        },
+        
+        "msg" : function(parameters) {
+
+            var userID;
+            var username;
+
+            // Fire general message handling event first
+            var allowDefault = true;
+            var msgid = parseInt(parameters[0]);
+            if (guac_client.onmsg) {
+                allowDefault = guac_client.onmsg(msgid, parameters.slice(1));
+                if (allowDefault === undefined)
+                    allowDefault = true;
+            }
+
+            // Fire message-specific convenience events if not prevented by the
+            // "onmsg" handler
+            if (allowDefault) {
+                switch (msgid) {
+
+                    case Guacamole.Client.Message.USER_JOINED:
+                        userID = parameters[1];
+                        username = parameters[2];
+                        if (guac_client.onjoin)
+                            guac_client.onjoin(userID, username);
+                        break;
+
+                    case Guacamole.Client.Message.USER_LEFT:
+                        userID = parameters[1];
+                        username = parameters[2];
+                        if (guac_client.onleave)
+                            guac_client.onleave(userID, username);
+                        break;
+
+                }
+            }
+            
+        },
+
+        "name": function(parameters) {
+            if (guac_client.onname) guac_client.onname(parameters[0]);
+        },
+
+        "nest": function(parameters) {
+            var parser = getParser(parseInt(parameters[0]));
+            parser.receive(parameters[1]);
+        },
+
+        "pipe": function(parameters) {
+
+            var stream_index = parseInt(parameters[0]);
+            var mimetype = parameters[1];
+            var name = parameters[2];
+
+            // Create stream 
+            if (guac_client.onpipe) {
+                var stream = streams[stream_index] = new Guacamole.InputStream(guac_client, stream_index);
+                guac_client.onpipe(stream, mimetype, name);
+            }
+
+            // Otherwise, unsupported
+            else
+                guac_client.sendAck(stream_index, "Named pipes unsupported", 0x0100);
+
+        },
+
+        "png": function(parameters) {
+
+            var channelMask = parseInt(parameters[0]);
+            var layer = getLayer(parseInt(parameters[1]));
+            var x = parseInt(parameters[2]);
+            var y = parseInt(parameters[3]);
+            var data = parameters[4];
+
+            display.setChannelMask(layer, channelMask);
+            display.draw(layer, x, y, "data:image/png;base64," + data);
+
+        },
+
+        "pop": function(parameters) {
+
+            var layer = getLayer(parseInt(parameters[0]));
+
+            display.pop(layer);
+
+        },
+
+        "push": function(parameters) {
+
+            var layer = getLayer(parseInt(parameters[0]));
+
+            display.push(layer);
+
+        },
+ 
+        "rect": function(parameters) {
+
+            var layer = getLayer(parseInt(parameters[0]));
+            var x = parseInt(parameters[1]);
+            var y = parseInt(parameters[2]);
+            var w = parseInt(parameters[3]);
+            var h = parseInt(parameters[4]);
+
+            display.rect(layer, x, y, w, h);
+
+        },
+                
+        "required": function required(parameters) {
+            if (guac_client.onrequired) guac_client.onrequired(parameters);
+        },
+        
+        "reset": function(parameters) {
+
+            var layer = getLayer(parseInt(parameters[0]));
+
+            display.reset(layer);
+
+        },
+        
+        "set": function(parameters) {
+
+            var layer = getLayer(parseInt(parameters[0]));
+            var name = parameters[1];
+            var value = parameters[2];
+
+            // Call property handler if defined
+            var handler = layerPropertyHandlers[name];
+            if (handler)
+                handler(layer, value);
+
+        },
+
+        "shade": function(parameters) {
+            
+            var layer_index = parseInt(parameters[0]);
+            var a = parseInt(parameters[1]);
+
+            // Only valid for visible layers (not buffers)
+            if (layer_index >= 0) {
+                var layer = getLayer(layer_index);
+                display.shade(layer, a);
+            }
+
+        },
+
+        "size": function(parameters) {
+
+            var layer_index = parseInt(parameters[0]);
+            var layer = getLayer(layer_index);
+            var width = parseInt(parameters[1]);
+            var height = parseInt(parameters[2]);
+
+            display.resize(layer, width, height);
+
+        },
+        
+        "start": function(parameters) {
+
+            var layer = getLayer(parseInt(parameters[0]));
+            var x = parseInt(parameters[1]);
+            var y = parseInt(parameters[2]);
+
+            display.moveTo(layer, x, y);
+
+        },
+
+        "sync": function(parameters) {
+
+            var timestamp = parseInt(parameters[0]);
+
+            // Flush display, send sync when done
+            display.flush(function displaySyncComplete() {
+
+                // Synchronize all audio players
+                for (var index in audioPlayers) {
+                    var audioPlayer = audioPlayers[index];
+                    if (audioPlayer)
+                        audioPlayer.sync();
+                }
+
+                // Send sync response to server
+                if (timestamp !== currentTimestamp) {
+                    tunnel.sendMessage("sync", timestamp);
+                    currentTimestamp = timestamp;
+                }
+
+            });
+
+            // If received first update, no longer waiting.
+            if (currentState === STATE_WAITING)
+                setState(STATE_CONNECTED);
+
+            // Call sync handler if defined
+            if (guac_client.onsync)
+                guac_client.onsync(timestamp);
+
+        },
+
+        "transfer": function(parameters) {
+
+            var srcL = getLayer(parseInt(parameters[0]));
+            var srcX = parseInt(parameters[1]);
+            var srcY = parseInt(parameters[2]);
+            var srcWidth = parseInt(parameters[3]);
+            var srcHeight = parseInt(parameters[4]);
+            var function_index = parseInt(parameters[5]);
+            var dstL = getLayer(parseInt(parameters[6]));
+            var dstX = parseInt(parameters[7]);
+            var dstY = parseInt(parameters[8]);
+
+            /* SRC */
+            if (function_index === 0x3)
+                display.put(srcL, srcX, srcY, srcWidth, srcHeight, 
+                    dstL, dstX, dstY);
+
+            /* Anything else that isn't a NO-OP */
+            else if (function_index !== 0x5)
+                display.transfer(srcL, srcX, srcY, srcWidth, srcHeight, 
+                    dstL, dstX, dstY, Guacamole.Client.DefaultTransferFunction[function_index]);
+
+        },
+
+        "transform": function(parameters) {
+
+            var layer = getLayer(parseInt(parameters[0]));
+            var a = parseFloat(parameters[1]);
+            var b = parseFloat(parameters[2]);
+            var c = parseFloat(parameters[3]);
+            var d = parseFloat(parameters[4]);
+            var e = parseFloat(parameters[5]);
+            var f = parseFloat(parameters[6]);
+
+            display.transform(layer, a, b, c, d, e, f);
+
+        },
+
+        "undefine" : function handleUndefine(parameters) {
+
+            // Get object
+            var objectIndex = parseInt(parameters[0]);
+            var object = objects[objectIndex];
+
+            // Signal end of object definition
+            if (object && object.onundefine)
+                object.onundefine();
+
+        },
+
+        "video": function(parameters) {
+
+            var stream_index = parseInt(parameters[0]);
+            var layer = getLayer(parseInt(parameters[1]));
+            var mimetype = parameters[2];
+
+            // Create stream
+            var stream = streams[stream_index] =
+                    new Guacamole.InputStream(guac_client, stream_index);
+
+            // Get player instance via callback
+            var videoPlayer = null;
+            if (guac_client.onvideo)
+                videoPlayer = guac_client.onvideo(stream, layer, mimetype);
+
+            // If unsuccessful, try to use a default implementation
+            if (!videoPlayer)
+                videoPlayer = Guacamole.VideoPlayer.getInstance(stream, layer, mimetype);
+
+            // If we have successfully retrieved an video player, send success response
+            if (videoPlayer) {
+                videoPlayers[stream_index] = videoPlayer;
+                guac_client.sendAck(stream_index, "OK", 0x0000);
+            }
+
+            // Otherwise, mimetype must be unsupported
+            else
+                guac_client.sendAck(stream_index, "BAD TYPE", 0x030F);
+
+        }
+
+    };
+
+    /**
+     * Sends a keep-alive ping to the Guacamole server, advising the server
+     * that the client is still connected and responding. The lastSentKeepAlive
+     * timestamp is automatically updated as a result of calling this function.
+     *
+     * @private
+     */
+    var sendKeepAlive = function sendKeepAlive() {
+        tunnel.sendMessage('nop');
+        lastSentKeepAlive = new Date().getTime();
+    };
+
+    /**
+     * Schedules the next keep-alive ping based on the KEEP_ALIVE_FREQUENCY and
+     * the time that the last ping was sent, if ever. If enough time has
+     * elapsed that a ping should have already been sent, calling this function
+     * will send that ping immediately.
+     *
+     * @private
+     */
+    var scheduleKeepAlive = function scheduleKeepAlive() {
+
+        window.clearTimeout(keepAliveTimeout);
+
+        var currentTime = new Date().getTime();
+        var keepAliveDelay = Math.max(lastSentKeepAlive + KEEP_ALIVE_FREQUENCY - currentTime, 0);
+
+        // Ping server regularly to keep connection alive, but send the ping
+        // immediately if enough time has elapsed that it should have already
+        // been sent
+        if (keepAliveDelay > 0)
+            keepAliveTimeout = window.setTimeout(sendKeepAlive, keepAliveDelay);
+        else
+            sendKeepAlive();
+
+    };
+
+    /**
+     * Stops sending any further keep-alive pings. If a keep-alive ping was
+     * scheduled to be sent, that ping is cancelled.
+     *
+     * @private
+     */
+    var stopKeepAlive = function stopKeepAlive() {
+        window.clearTimeout(keepAliveTimeout);
+    };
+
+    tunnel.oninstruction = function(opcode, parameters) {
+
+        var handler = instructionHandlers[opcode];
+        if (handler)
+            handler(parameters);
+
+        // Leverage network activity to ensure the next keep-alive ping is
+        // sent, even if the browser is currently throttling timers
+        scheduleKeepAlive();
+
+    };
+
+    /**
+     * Sends a disconnect instruction to the server and closes the tunnel.
+     */
+    this.disconnect = function() {
+
+        // Only attempt disconnection not disconnected.
+        if (currentState != STATE_DISCONNECTED
+                && currentState != STATE_DISCONNECTING) {
+
+            setState(STATE_DISCONNECTING);
+
+            // Stop sending keep-alive messages
+            stopKeepAlive();
+
+            // Send disconnect message and disconnect
+            tunnel.sendMessage("disconnect");
+            tunnel.disconnect();
+            setState(STATE_DISCONNECTED);
+
+        }
+
+    };
+    
+    /**
+     * Connects the underlying tunnel of this Guacamole.Client, passing the
+     * given arbitrary data to the tunnel during the connection process.
+     *
+     * @param {string} data
+     *     Arbitrary connection data to be sent to the underlying tunnel during
+     *     the connection process.
+     *
+     * @throws {!Guacamole.Status}
+     *     If an error occurs during connection.
+     */
+    this.connect = function(data) {
+
+        setState(STATE_CONNECTING);
+
+        try {
+            tunnel.connect(data);
+        }
+        catch (status) {
+            setState(STATE_IDLE);
+            throw status;
+        }
+
+        // Regularly send keep-alive ping to ensure the server knows we're
+        // still here, even if not active
+        scheduleKeepAlive();
+
+        setState(STATE_WAITING);
+    };
+
+};
+
+/**
+ * Map of all Guacamole binary raster operations to transfer functions.
+ *
+ * @private
+ * @type {!Object.<number, function>}
+ */
+Guacamole.Client.DefaultTransferFunction = {
+
+    /* BLACK */
+    0x0: function (src, dst) {
+        dst.red = dst.green = dst.blue = 0x00;
+    },
+
+    /* WHITE */
+    0xF: function (src, dst) {
+        dst.red = dst.green = dst.blue = 0xFF;
+    },
+
+    /* SRC */
+    0x3: function (src, dst) {
+        dst.red   = src.red;
+        dst.green = src.green;
+        dst.blue  = src.blue;
+        dst.alpha = src.alpha;
+    },
+
+    /* DEST (no-op) */
+    0x5: function (src, dst) {
+        // Do nothing
+    },
+
+    /* Invert SRC */
+    0xC: function (src, dst) {
+        dst.red   = 0xFF & ~src.red;
+        dst.green = 0xFF & ~src.green;
+        dst.blue  = 0xFF & ~src.blue;
+        dst.alpha =  src.alpha;
+    },
+    
+    /* Invert DEST */
+    0xA: function (src, dst) {
+        dst.red   = 0xFF & ~dst.red;
+        dst.green = 0xFF & ~dst.green;
+        dst.blue  = 0xFF & ~dst.blue;
+    },
+
+    /* AND */
+    0x1: function (src, dst) {
+        dst.red   =  ( src.red   &  dst.red);
+        dst.green =  ( src.green &  dst.green);
+        dst.blue  =  ( src.blue  &  dst.blue);
+    },
+
+    /* NAND */
+    0xE: function (src, dst) {
+        dst.red   = 0xFF & ~( src.red   &  dst.red);
+        dst.green = 0xFF & ~( src.green &  dst.green);
+        dst.blue  = 0xFF & ~( src.blue  &  dst.blue);
+    },
+
+    /* OR */
+    0x7: function (src, dst) {
+        dst.red   =  ( src.red   |  dst.red);
+        dst.green =  ( src.green |  dst.green);
+        dst.blue  =  ( src.blue  |  dst.blue);
+    },
+
+    /* NOR */
+    0x8: function (src, dst) {
+        dst.red   = 0xFF & ~( src.red   |  dst.red);
+        dst.green = 0xFF & ~( src.green |  dst.green);
+        dst.blue  = 0xFF & ~( src.blue  |  dst.blue);
+    },
+
+    /* XOR */
+    0x6: function (src, dst) {
+        dst.red   =  ( src.red   ^  dst.red);
+        dst.green =  ( src.green ^  dst.green);
+        dst.blue  =  ( src.blue  ^  dst.blue);
+    },
+
+    /* XNOR */
+    0x9: function (src, dst) {
+        dst.red   = 0xFF & ~( src.red   ^  dst.red);
+        dst.green = 0xFF & ~( src.green ^  dst.green);
+        dst.blue  = 0xFF & ~( src.blue  ^  dst.blue);
+    },
+
+    /* AND inverted source */
+    0x4: function (src, dst) {
+        dst.red   =  0xFF & (~src.red   &  dst.red);
+        dst.green =  0xFF & (~src.green &  dst.green);
+        dst.blue  =  0xFF & (~src.blue  &  dst.blue);
+    },
+
+    /* OR inverted source */
+    0xD: function (src, dst) {
+        dst.red   =  0xFF & (~src.red   |  dst.red);
+        dst.green =  0xFF & (~src.green |  dst.green);
+        dst.blue  =  0xFF & (~src.blue  |  dst.blue);
+    },
+
+    /* AND inverted destination */
+    0x2: function (src, dst) {
+        dst.red   =  0xFF & ( src.red   & ~dst.red);
+        dst.green =  0xFF & ( src.green & ~dst.green);
+        dst.blue  =  0xFF & ( src.blue  & ~dst.blue);
+    },
+
+    /* OR inverted destination */
+    0xB: function (src, dst) {
+        dst.red   =  0xFF & ( src.red   | ~dst.red);
+        dst.green =  0xFF & ( src.green | ~dst.green);
+        dst.blue  =  0xFF & ( src.blue  | ~dst.blue);
+    }
+
+};
+
+/**
+ * A list of possible messages that can be sent by the server for processing
+ * by the client.
+ * 
+ * @type {!Object.<string, number>}
+ */
+Guacamole.Client.Message = {
+    
+    /**
+     * A client message that indicates that a user has joined an existing
+     * connection. This message expects a single additional argument - the
+     * name of the user who has joined the connection.
+     * 
+     * @type {!number}
+     */
+    "USER_JOINED": 0x0001,
+    
+    /**
+     * A client message that indicates that a user has left an existing
+     * connection. This message expects a single additional argument - the
+     * name of the user who has left the connection.
+     * 
+     * @type {!number}
+     */
+    "USER_LEFT": 0x0002
+    
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 4.0.2 on Sat Mar 30 2024 09:36:10 GMT-0700 (Pacific Daylight Time) +
+ + + + + diff --git a/doc/1.5.5/guacamole-common-js/main_webapp_modules_DataURIReader.js.html b/doc/1.5.5/guacamole-common-js/main_webapp_modules_DataURIReader.js.html new file mode 100644 index 000000000..9373ec2f6 --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/main_webapp_modules_DataURIReader.js.html @@ -0,0 +1,139 @@ + + + + + JSDoc: Source: main/webapp/modules/DataURIReader.js + + + + + + + + + + +
+ +

Source: main/webapp/modules/DataURIReader.js

+ + + + + + +
+
+
/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+var Guacamole = Guacamole || {};
+
+/**
+ * A reader which automatically handles the given input stream, returning
+ * received blobs as a single data URI built over the course of the stream.
+ * Note that this object will overwrite any installed event handlers on the
+ * given Guacamole.InputStream.
+ * 
+ * @constructor
+ * @param {!Guacamole.InputStream} stream
+ *     The stream that data will be read from.
+ *
+ * @param {!string} mimetype
+ *     The mimetype of the data being received.
+ */
+Guacamole.DataURIReader = function(stream, mimetype) {
+
+    /**
+     * Reference to this Guacamole.DataURIReader.
+     *
+     * @private
+     * @type {!Guacamole.DataURIReader}
+     */
+    var guac_reader = this;
+
+    /**
+     * Current data URI.
+     *
+     * @private
+     * @type {!string}
+     */
+    var uri = 'data:' + mimetype + ';base64,';
+
+    // Receive blobs as array buffers
+    stream.onblob = function dataURIReaderBlob(data) {
+
+        // Currently assuming data will ALWAYS be safe to simply append. This
+        // will not be true if the received base64 data encodes a number of
+        // bytes that isn't a multiple of three (as base64 expands in a ratio
+        // of exactly 3:4).
+        uri += data;
+
+    };
+
+    // Simply call onend when end received
+    stream.onend = function dataURIReaderEnd() {
+        if (guac_reader.onend)
+            guac_reader.onend();
+    };
+
+    /**
+     * Returns the data URI of all data received through the underlying stream
+     * thus far.
+     *
+     * @returns {!string}
+     *     The data URI of all data received through the underlying stream thus
+     *     far.
+     */
+    this.getURI = function getURI() {
+        return uri;
+    };
+
+    /**
+     * Fired once this stream is finished and no further data will be written.
+     *
+     * @event
+     */
+    this.onend = null;
+
+};
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 4.0.2 on Sat Mar 30 2024 09:36:10 GMT-0700 (Pacific Daylight Time) +
+ + + + + diff --git a/doc/1.5.5/guacamole-common-js/main_webapp_modules_Display.js.html b/doc/1.5.5/guacamole-common-js/main_webapp_modules_Display.js.html new file mode 100644 index 000000000..99ae5af4d --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/main_webapp_modules_Display.js.html @@ -0,0 +1,1908 @@ + + + + + JSDoc: Source: main/webapp/modules/Display.js + + + + + + + + + + +
+ +

Source: main/webapp/modules/Display.js

+ + + + + + +
+
+
/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+var Guacamole = Guacamole || {};
+
+/**
+ * The Guacamole display. The display does not deal with the Guacamole
+ * protocol, and instead implements a set of graphical operations which
+ * embody the set of operations present in the protocol. The order operations
+ * are executed is guaranteed to be in the same order as their corresponding
+ * functions are called.
+ * 
+ * @constructor
+ */
+Guacamole.Display = function() {
+
+    /**
+     * Reference to this Guacamole.Display.
+     * @private
+     */
+    var guac_display = this;
+
+    var displayWidth = 0;
+    var displayHeight = 0;
+    var displayScale = 1;
+
+    // Create display
+    var display = document.createElement("div");
+    display.style.position = "relative";
+    display.style.width = displayWidth + "px";
+    display.style.height = displayHeight + "px";
+
+    // Ensure transformations on display originate at 0,0
+    display.style.transformOrigin =
+    display.style.webkitTransformOrigin =
+    display.style.MozTransformOrigin =
+    display.style.OTransformOrigin =
+    display.style.msTransformOrigin =
+        "0 0";
+
+    // Create default layer
+    var default_layer = new Guacamole.Display.VisibleLayer(displayWidth, displayHeight);
+
+    // Create cursor layer
+    var cursor = new Guacamole.Display.VisibleLayer(0, 0);
+    cursor.setChannelMask(Guacamole.Layer.SRC);
+
+    // Add default layer and cursor to display
+    display.appendChild(default_layer.getElement());
+    display.appendChild(cursor.getElement());
+
+    // Create bounding div 
+    var bounds = document.createElement("div");
+    bounds.style.position = "relative";
+    bounds.style.width = (displayWidth*displayScale) + "px";
+    bounds.style.height = (displayHeight*displayScale) + "px";
+
+    // Add display to bounds
+    bounds.appendChild(display);
+
+    /**
+     * The X coordinate of the hotspot of the mouse cursor. The hotspot is
+     * the relative location within the image of the mouse cursor at which
+     * each click occurs.
+     * 
+     * @type {!number}
+     */
+    this.cursorHotspotX = 0;
+
+    /**
+     * The Y coordinate of the hotspot of the mouse cursor. The hotspot is
+     * the relative location within the image of the mouse cursor at which
+     * each click occurs.
+     * 
+     * @type {!number}
+     */
+    this.cursorHotspotY = 0;
+
+    /**
+     * The current X coordinate of the local mouse cursor. This is not
+     * necessarily the location of the actual mouse - it refers only to
+     * the location of the cursor image within the Guacamole display, as
+     * last set by moveCursor().
+     * 
+     * @type {!number}
+     */
+    this.cursorX = 0;
+
+    /**
+     * The current X coordinate of the local mouse cursor. This is not
+     * necessarily the location of the actual mouse - it refers only to
+     * the location of the cursor image within the Guacamole display, as
+     * last set by moveCursor().
+     * 
+     * @type {!number}
+     */
+    this.cursorY = 0;
+
+    /**
+     * Fired when the default layer (and thus the entire Guacamole display)
+     * is resized.
+     * 
+     * @event
+     * @param {!number} width
+     *     The new width of the Guacamole display.
+     *
+     * @param {!number} height
+     *     The new height of the Guacamole display.
+     */
+    this.onresize = null;
+
+    /**
+     * Fired whenever the local cursor image is changed. This can be used to
+     * implement special handling of the client-side cursor, or to override
+     * the default use of a software cursor layer.
+     * 
+     * @event
+     * @param {!HTMLCanvasElement} canvas
+     *     The cursor image.
+     *
+     * @param {!number} x
+     *     The X-coordinate of the cursor hotspot.
+     *
+     * @param {!number} y
+     *     The Y-coordinate of the cursor hotspot.
+     */
+    this.oncursor = null;
+
+    /**
+     * The queue of all pending Tasks. Tasks will be run in order, with new
+     * tasks added at the end of the queue and old tasks removed from the
+     * front of the queue (FIFO). These tasks will eventually be grouped
+     * into a Frame.
+     *
+     * @private
+     * @type {!Task[]}
+     */
+    var tasks = [];
+
+    /**
+     * The queue of all frames. Each frame is a pairing of an array of tasks
+     * and a callback which must be called when the frame is rendered.
+     *
+     * @private
+     * @type {!Frame[]}
+     */
+    var frames = [];
+
+    /**
+     * Flushes all pending frames.
+     * @private
+     */
+    function __flush_frames() {
+
+        var rendered_frames = 0;
+
+        // Draw all pending frames, if ready
+        while (rendered_frames < frames.length) {
+
+            var frame = frames[rendered_frames];
+            if (!frame.isReady())
+                break;
+
+            frame.flush();
+            rendered_frames++;
+
+        } 
+
+        // Remove rendered frames from array
+        frames.splice(0, rendered_frames);
+
+    }
+
+    /**
+     * An ordered list of tasks which must be executed atomically. Once
+     * executed, an associated (and optional) callback will be called.
+     *
+     * @private
+     * @constructor
+     * @param {function} [callback]
+     *     The function to call when this frame is rendered.
+     *
+     * @param {!Task[]} tasks
+     *     The set of tasks which must be executed to render this frame.
+     */
+    function Frame(callback, tasks) {
+
+        /**
+         * Cancels rendering of this frame and all associated tasks. The
+         * callback provided at construction time, if any, is not invoked.
+         */
+        this.cancel = function cancel() {
+
+            callback = null;
+
+            tasks.forEach(function cancelTask(task) {
+                task.cancel();
+            });
+
+            tasks = [];
+
+        };
+
+        /**
+         * Returns whether this frame is ready to be rendered. This function
+         * returns true if and only if ALL underlying tasks are unblocked.
+         * 
+         * @returns {!boolean}
+         *     true if all underlying tasks are unblocked, false otherwise.
+         */
+        this.isReady = function() {
+
+            // Search for blocked tasks
+            for (var i=0; i < tasks.length; i++) {
+                if (tasks[i].blocked)
+                    return false;
+            }
+
+            // If no blocked tasks, the frame is ready
+            return true;
+
+        };
+
+        /**
+         * Renders this frame, calling the associated callback, if any, after
+         * the frame is complete. This function MUST only be called when no
+         * blocked tasks exist. Calling this function with blocked tasks
+         * will result in undefined behavior.
+         */
+        this.flush = function() {
+
+            // Draw all pending tasks.
+            for (var i=0; i < tasks.length; i++)
+                tasks[i].execute();
+
+            // Call callback
+            if (callback) callback();
+
+        };
+
+    }
+
+    /**
+     * A container for an task handler. Each operation which must be ordered
+     * is associated with a Task that goes into a task queue. Tasks in this
+     * queue are executed in order once their handlers are set, while Tasks 
+     * without handlers block themselves and any following Tasks from running.
+     *
+     * @constructor
+     * @private
+     * @param {function} [taskHandler]
+     *     The function to call when this task runs, if any.
+     *
+     * @param {boolean} [blocked]
+     *     Whether this task should start blocked.
+     */
+    function Task(taskHandler, blocked) {
+
+        /**
+         * Reference to this Task.
+         *
+         * @private
+         * @type {!Guacamole.Display.Task}
+         */
+        var task = this;
+       
+        /**
+         * Whether this Task is blocked.
+         * 
+         * @type {boolean}
+         */
+        this.blocked = blocked;
+
+        /**
+         * Cancels this task such that it will not run. The task handler
+         * provided at construction time, if any, is not invoked. Calling
+         * execute() after calling this function has no effect.
+         */
+        this.cancel = function cancel() {
+            task.blocked = false;
+            taskHandler = null;
+        };
+
+        /**
+         * Unblocks this Task, allowing it to run.
+         */
+        this.unblock = function() {
+            if (task.blocked) {
+                task.blocked = false;
+                __flush_frames();
+            }
+        };
+
+        /**
+         * Calls the handler associated with this task IMMEDIATELY. This
+         * function does not track whether this task is marked as blocked.
+         * Enforcing the blocked status of tasks is up to the caller.
+         */
+        this.execute = function() {
+            if (taskHandler) taskHandler();
+        };
+
+    }
+
+    /**
+     * Schedules a task for future execution. The given handler will execute
+     * immediately after all previous tasks upon frame flush, unless this
+     * task is blocked. If any tasks is blocked, the entire frame will not
+     * render (and no tasks within will execute) until all tasks are unblocked.
+     * 
+     * @private
+     * @param {function} [handler]
+     *     The function to call when possible, if any.
+     *
+     * @param {boolean} [blocked]
+     *     Whether the task should start blocked.
+     *
+     * @returns {!Task}
+     *     The Task created and added to the queue for future running.
+     */
+    function scheduleTask(handler, blocked) {
+        var task = new Task(handler, blocked);
+        tasks.push(task);
+        return task;
+    }
+
+    /**
+     * Returns the element which contains the Guacamole display.
+     * 
+     * @return {!Element}
+     *     The element containing the Guacamole display.
+     */
+    this.getElement = function() {
+        return bounds;
+    };
+
+    /**
+     * Returns the width of this display.
+     * 
+     * @return {!number}
+     *     The width of this display;
+     */
+    this.getWidth = function() {
+        return displayWidth;
+    };
+
+    /**
+     * Returns the height of this display.
+     * 
+     * @return {!number}
+     *     The height of this display;
+     */
+    this.getHeight = function() {
+        return displayHeight;
+    };
+
+    /**
+     * Returns the default layer of this display. Each Guacamole display always
+     * has at least one layer. Other layers can optionally be created within
+     * this layer, but the default layer cannot be removed and is the absolute
+     * ancestor of all other layers.
+     * 
+     * @return {!Guacamole.Display.VisibleLayer}
+     *     The default layer.
+     */
+    this.getDefaultLayer = function() {
+        return default_layer;
+    };
+
+    /**
+     * Returns the cursor layer of this display. Each Guacamole display contains
+     * a layer for the image of the mouse cursor. This layer is a special case
+     * and exists above all other layers, similar to the hardware mouse cursor.
+     * 
+     * @return {!Guacamole.Display.VisibleLayer}
+     *     The cursor layer.
+     */
+    this.getCursorLayer = function() {
+        return cursor;
+    };
+
+    /**
+     * Creates a new layer. The new layer will be a direct child of the default
+     * layer, but can be moved to be a child of any other layer. Layers returned
+     * by this function are visible.
+     * 
+     * @return {!Guacamole.Display.VisibleLayer}
+     *     The newly-created layer.
+     */
+    this.createLayer = function() {
+        var layer = new Guacamole.Display.VisibleLayer(displayWidth, displayHeight);
+        layer.move(default_layer, 0, 0, 0);
+        return layer;
+    };
+
+    /**
+     * Creates a new buffer. Buffers are invisible, off-screen surfaces. They
+     * are implemented in the same manner as layers, but do not provide the
+     * same nesting semantics.
+     * 
+     * @return {!Guacamole.Layer}
+     *     The newly-created buffer.
+     */
+    this.createBuffer = function() {
+        var buffer = new Guacamole.Layer(0, 0);
+        buffer.autosize = 1;
+        return buffer;
+    };
+
+    /**
+     * Flush all pending draw tasks, if possible, as a new frame. If the entire
+     * frame is not ready, the flush will wait until all required tasks are
+     * unblocked.
+     * 
+     * @param {function} [callback]
+     *     The function to call when this frame is flushed. This may happen
+     *     immediately, or later when blocked tasks become unblocked.
+     */
+    this.flush = function(callback) {
+
+        // Add frame, reset tasks
+        frames.push(new Frame(callback, tasks));
+        tasks = [];
+
+        // Attempt flush
+        __flush_frames();
+
+    };
+
+    /**
+     * Cancels rendering of all pending frames and associated rendering
+     * operations. The callbacks provided to outstanding past calls to flush(),
+     * if any, are not invoked.
+     */
+    this.cancel = function cancel() {
+
+        frames.forEach(function cancelFrame(frame) {
+            frame.cancel();
+        });
+
+        frames = [];
+
+        tasks.forEach(function cancelTask(task) {
+            task.cancel();
+        });
+
+        tasks = [];
+
+    };
+
+    /**
+     * Sets the hotspot and image of the mouse cursor displayed within the
+     * Guacamole display.
+     * 
+     * @param {!number} hotspotX
+     *     The X coordinate of the cursor hotspot.
+     *
+     * @param {!number} hotspotY
+     *     The Y coordinate of the cursor hotspot.
+     *
+     * @param {!Guacamole.Layer} layer
+     *     The source layer containing the data which should be used as the
+     *     mouse cursor image.
+     *
+     * @param {!number} srcx
+     *     The X coordinate of the upper-left corner of the rectangle within
+     *     the source layer's coordinate space to copy data from.
+     *
+     * @param {!number} srcy
+     *     The Y coordinate of the upper-left corner of the rectangle within
+     *     the source layer's coordinate space to copy data from.
+     *
+     * @param {!number} srcw
+     *     The width of the rectangle within the source layer's coordinate
+     *     space to copy data from.
+     *
+     * @param {!number} srch
+     *     The height of the rectangle within the source layer's coordinate
+     *     space to copy data from.
+     */
+    this.setCursor = function(hotspotX, hotspotY, layer, srcx, srcy, srcw, srch) {
+        scheduleTask(function __display_set_cursor() {
+
+            // Set hotspot
+            guac_display.cursorHotspotX = hotspotX;
+            guac_display.cursorHotspotY = hotspotY;
+
+            // Reset cursor size
+            cursor.resize(srcw, srch);
+
+            // Draw cursor to cursor layer
+            cursor.copy(layer, srcx, srcy, srcw, srch, 0, 0);
+            guac_display.moveCursor(guac_display.cursorX, guac_display.cursorY);
+
+            // Fire cursor change event
+            if (guac_display.oncursor)
+                guac_display.oncursor(cursor.toCanvas(), hotspotX, hotspotY);
+
+        });
+    };
+
+    /**
+     * Sets whether the software-rendered cursor is shown. This cursor differs
+     * from the hardware cursor in that it is built into the Guacamole.Display,
+     * and relies on its own Guacamole layer to render.
+     *
+     * @param {boolean} [shown=true]
+     *     Whether to show the software cursor.
+     */
+    this.showCursor = function(shown) {
+
+        var element = cursor.getElement();
+        var parent = element.parentNode;
+
+        // Remove from DOM if hidden
+        if (shown === false) {
+            if (parent)
+                parent.removeChild(element);
+        }
+
+        // Otherwise, ensure cursor is child of display
+        else if (parent !== display)
+            display.appendChild(element);
+
+    };
+
+    /**
+     * Sets the location of the local cursor to the given coordinates. For the
+     * sake of responsiveness, this function performs its action immediately.
+     * Cursor motion is not maintained within atomic frames.
+     * 
+     * @param {!number} x
+     *     The X coordinate to move the cursor to.
+     *
+     * @param {!number} y
+     *     The Y coordinate to move the cursor to.
+     */
+    this.moveCursor = function(x, y) {
+
+        // Move cursor layer
+        cursor.translate(x - guac_display.cursorHotspotX,
+                         y - guac_display.cursorHotspotY);
+
+        // Update stored position
+        guac_display.cursorX = x;
+        guac_display.cursorY = y;
+
+    };
+
+    /**
+     * Changes the size of the given Layer to the given width and height.
+     * Resizing is only attempted if the new size provided is actually different
+     * from the current size.
+     * 
+     * @param {!Guacamole.Layer} layer
+     *     The layer to resize.
+     *
+     * @param {!number} width
+     *     The new width.
+     *
+     * @param {!number} height
+     *     The new height.
+     */
+    this.resize = function(layer, width, height) {
+        scheduleTask(function __display_resize() {
+
+            layer.resize(width, height);
+
+            // Resize display if default layer is resized
+            if (layer === default_layer) {
+
+                // Update (set) display size
+                displayWidth = width;
+                displayHeight = height;
+                display.style.width = displayWidth + "px";
+                display.style.height = displayHeight + "px";
+
+                // Update bounds size
+                bounds.style.width = (displayWidth*displayScale) + "px";
+                bounds.style.height = (displayHeight*displayScale) + "px";
+
+                // Notify of resize
+                if (guac_display.onresize)
+                    guac_display.onresize(width, height);
+
+            }
+
+        });
+    };
+
+    /**
+     * Draws the specified image at the given coordinates. The image specified
+     * must already be loaded.
+     * 
+     * @param {!Guacamole.Layer} layer
+     *     The layer to draw upon.
+     *
+     * @param {!number} x
+     *     The destination X coordinate.
+     *
+     * @param {!number} y 
+     *     The destination Y coordinate.
+     *
+     * @param {!CanvasImageSource} image
+     *     The image to draw. Note that this not a URL.
+     */
+    this.drawImage = function(layer, x, y, image) {
+        scheduleTask(function __display_drawImage() {
+            layer.drawImage(x, y, image);
+        });
+    };
+
+    /**
+     * Draws the image contained within the specified Blob at the given
+     * coordinates. The Blob specified must already be populated with image
+     * data.
+     *
+     * @param {!Guacamole.Layer} layer
+     *     The layer to draw upon.
+     *
+     * @param {!number} x
+     *     The destination X coordinate.
+     *
+     * @param {!number} y
+     *     The destination Y coordinate.
+     *
+     * @param {!Blob} blob
+     *     The Blob containing the image data to draw.
+     */
+    this.drawBlob = function(layer, x, y, blob) {
+
+        var task;
+
+        // Prefer createImageBitmap() over blob URLs if available
+        if (window.createImageBitmap) {
+
+            var bitmap;
+
+            // Draw image once loaded
+            task = scheduleTask(function drawImageBitmap() {
+                layer.drawImage(x, y, bitmap);
+            }, true);
+
+            // Load image from provided blob
+            window.createImageBitmap(blob).then(function bitmapLoaded(decoded) {
+                bitmap = decoded;
+                task.unblock();
+            });
+
+        }
+
+        // Use blob URLs and the Image object if createImageBitmap() is
+        // unavailable
+        else {
+
+            // Create URL for blob
+            var url = URL.createObjectURL(blob);
+
+            // Draw and free blob URL when ready
+            task = scheduleTask(function __display_drawBlob() {
+
+                // Draw the image only if it loaded without errors
+                if (image.width && image.height)
+                    layer.drawImage(x, y, image);
+
+                // Blob URL no longer needed
+                URL.revokeObjectURL(url);
+
+            }, true);
+
+            // Load image from URL
+            var image = new Image();
+            image.onload = task.unblock;
+            image.onerror = task.unblock;
+            image.src = url;
+
+        }
+
+    };
+
+    /**
+     * Draws the image within the given stream at the given coordinates. The
+     * image will be loaded automatically, and this and any future operations
+     * will wait for the image to finish loading. This function will
+     * automatically choose an appropriate method for reading and decoding the
+     * given image stream, and should be preferred for received streams except
+     * where manual decoding of the stream is unavoidable.
+     *
+     * @param {!Guacamole.Layer} layer
+     *     The layer to draw upon.
+     *
+     * @param {!number} x
+     *     The destination X coordinate.
+     *
+     * @param {!number} y
+     *     The destination Y coordinate.
+     *
+     * @param {!Guacamole.InputStream} stream
+     *     The stream along which image data will be received.
+     *
+     * @param {!string} mimetype
+     *     The mimetype of the image within the stream.
+     */
+    this.drawStream = function drawStream(layer, x, y, stream, mimetype) {
+
+        // If createImageBitmap() is available, load the image as a blob so
+        // that function can be used
+        if (window.createImageBitmap) {
+            var reader = new Guacamole.BlobReader(stream, mimetype);
+            reader.onend = function drawImageBlob() {
+                guac_display.drawBlob(layer, x, y, reader.getBlob());
+            };
+        }
+
+        // Lacking createImageBitmap(), fall back to data URIs and the Image
+        // object
+        else {
+            var reader = new Guacamole.DataURIReader(stream, mimetype);
+            reader.onend = function drawImageDataURI() {
+                guac_display.draw(layer, x, y, reader.getURI());
+            };
+        }
+
+    };
+
+    /**
+     * Draws the image at the specified URL at the given coordinates. The image
+     * will be loaded automatically, and this and any future operations will
+     * wait for the image to finish loading.
+     * 
+     * @param {!Guacamole.Layer} layer
+     *     The layer to draw upon.
+     *
+     * @param {!number} x
+     *     The destination X coordinate.
+     *
+     * @param {!number} y
+     *     The destination Y coordinate.
+     *
+     * @param {!string} url
+     *     The URL of the image to draw.
+     */
+    this.draw = function(layer, x, y, url) {
+
+        var task = scheduleTask(function __display_draw() {
+
+            // Draw the image only if it loaded without errors
+            if (image.width && image.height)
+                layer.drawImage(x, y, image);
+
+        }, true);
+
+        var image = new Image();
+        image.onload = task.unblock;
+        image.onerror = task.unblock;
+        image.src = url;
+
+    };
+
+    /**
+     * Plays the video at the specified URL within this layer. The video
+     * will be loaded automatically, and this and any future operations will
+     * wait for the video to finish loading. Future operations will not be
+     * executed until the video finishes playing.
+     * 
+     * @param {!Guacamole.Layer} layer
+     *     The layer to draw upon.
+     *
+     * @param {!string} mimetype
+     *     The mimetype of the video to play.
+     *
+     * @param {!number} duration
+     *     The duration of the video in milliseconds.
+     *
+     * @param {!string} url
+     *     The URL of the video to play.
+     */
+    this.play = function(layer, mimetype, duration, url) {
+
+        // Start loading the video
+        var video = document.createElement("video");
+        video.type = mimetype;
+        video.src = url;
+
+        // Start copying frames when playing
+        video.addEventListener("play", function() {
+            
+            function render_callback() {
+                layer.drawImage(0, 0, video);
+                if (!video.ended)
+                    window.setTimeout(render_callback, 20);
+            }
+            
+            render_callback();
+            
+        }, false);
+
+        scheduleTask(video.play);
+
+    };
+
+    /**
+     * Transfer a rectangle of image data from one Layer to this Layer using the
+     * specified transfer function.
+     * 
+     * @param {!Guacamole.Layer} srcLayer
+     *     The Layer to copy image data from.
+     *
+     * @param {!number} srcx
+     *     The X coordinate of the upper-left corner of the rectangle within
+     *     the source Layer's coordinate space to copy data from.
+     *
+     * @param {!number} srcy
+     *     The Y coordinate of the upper-left corner of the rectangle within
+     *     the source Layer's coordinate space to copy data from.
+     *
+     * @param {!number} srcw
+     *     The width of the rectangle within the source Layer's coordinate
+     *     space to copy data from.
+     *
+     * @param {!number} srch
+     *     The height of the rectangle within the source Layer's coordinate
+     *     space to copy data from.
+     *
+     * @param {!Guacamole.Layer} dstLayer
+     *     The layer to draw upon.
+     *
+     * @param {!number} x
+     *     The destination X coordinate.
+     *
+     * @param {!number} y
+     *     The destination Y coordinate.
+     *
+     * @param {!function} transferFunction
+     *     The transfer function to use to transfer data from source to
+     *     destination.
+     */
+    this.transfer = function(srcLayer, srcx, srcy, srcw, srch, dstLayer, x, y, transferFunction) {
+        scheduleTask(function __display_transfer() {
+            dstLayer.transfer(srcLayer, srcx, srcy, srcw, srch, x, y, transferFunction);
+        });
+    };
+
+    /**
+     * Put a rectangle of image data from one Layer to this Layer directly
+     * without performing any alpha blending. Simply copy the data.
+     * 
+     * @param {!Guacamole.Layer} srcLayer
+     *     The Layer to copy image data from.
+     *
+     * @param {!number} srcx
+     *     The X coordinate of the upper-left corner of the rectangle within
+     *     the source Layer's coordinate space to copy data from.
+     *
+     * @param {!number} srcy
+     *     The Y coordinate of the upper-left corner of the rectangle within
+     *     the source Layer's coordinate space to copy data from.
+     *
+     * @param {!number} srcw
+     *     The width of the rectangle within the source Layer's coordinate
+     *     space to copy data from.
+     *
+     * @param {!number} srch
+     *     The height of the rectangle within the source Layer's coordinate
+     *     space to copy data from.
+     *
+     * @param {!Guacamole.Layer} dstLayer
+     *     The layer to draw upon.
+     *
+     * @param {!number} x
+     *     The destination X coordinate.
+     *
+     * @param {!number} y
+     *     The destination Y coordinate.
+     */
+    this.put = function(srcLayer, srcx, srcy, srcw, srch, dstLayer, x, y) {
+        scheduleTask(function __display_put() {
+            dstLayer.put(srcLayer, srcx, srcy, srcw, srch, x, y);
+        });
+    };
+
+    /**
+     * Copy a rectangle of image data from one Layer to this Layer. This
+     * operation will copy exactly the image data that will be drawn once all
+     * operations of the source Layer that were pending at the time this
+     * function was called are complete. This operation will not alter the
+     * size of the source Layer even if its autosize property is set to true.
+     * 
+     * @param {!Guacamole.Layer} srcLayer
+     *     The Layer to copy image data from.
+     *
+     * @param {!number} srcx
+     *     The X coordinate of the upper-left corner of the rectangle within
+     *     the source Layer's coordinate space to copy data from.
+     *
+     * @param {!number} srcy
+     *     The Y coordinate of the upper-left corner of the rectangle within
+     *     the source Layer's coordinate space to copy data from.
+     *
+     * @param {!number} srcw
+     *     The width of the rectangle within the source Layer's coordinate
+     *     space to copy data from.
+     *
+     * @param {!number} srch
+     *     The height of the rectangle within the source Layer's coordinate space to copy data from.
+     *
+     * @param {!Guacamole.Layer} dstLayer
+     *     The layer to draw upon.
+     *
+     * @param {!number} x
+     *     The destination X coordinate.
+     *
+     * @param {!number} y
+     *     The destination Y coordinate.
+     */
+    this.copy = function(srcLayer, srcx, srcy, srcw, srch, dstLayer, x, y) {
+        scheduleTask(function __display_copy() {
+            dstLayer.copy(srcLayer, srcx, srcy, srcw, srch, x, y);
+        });
+    };
+
+    /**
+     * Starts a new path at the specified point.
+     * 
+     * @param {!Guacamole.Layer} layer
+     *     The layer to draw upon.
+     *
+     * @param {!number} x
+     *     The X coordinate of the point to draw.
+     *
+     * @param {!number} y
+     *     The Y coordinate of the point to draw.
+     */
+    this.moveTo = function(layer, x, y) {
+        scheduleTask(function __display_moveTo() {
+            layer.moveTo(x, y);
+        });
+    };
+
+    /**
+     * Add the specified line to the current path.
+     * 
+     * @param {!Guacamole.Layer} layer
+     *     The layer to draw upon.
+     *
+     * @param {!number} x
+     *     The X coordinate of the endpoint of the line to draw.
+     *
+     * @param {!number} y
+     *     The Y coordinate of the endpoint of the line to draw.
+     */
+    this.lineTo = function(layer, x, y) {
+        scheduleTask(function __display_lineTo() {
+            layer.lineTo(x, y);
+        });
+    };
+
+    /**
+     * Add the specified arc to the current path.
+     *
+     * @param {!Guacamole.Layer} layer
+     *     The layer to draw upon.
+     *
+     * @param {!number} x
+     *     The X coordinate of the center of the circle which will contain the
+     *     arc.
+     *
+     * @param {!number} y
+     *     The Y coordinate of the center of the circle which will contain the
+     *     arc.
+     *
+     * @param {!number} radius
+     *     The radius of the circle.
+     *
+     * @param {!number} startAngle
+     *     The starting angle of the arc, in radians.
+     *
+     * @param {!number} endAngle
+     *     The ending angle of the arc, in radians.
+     *
+     * @param {!boolean} negative
+     *     Whether the arc should be drawn in order of decreasing angle.
+     */
+    this.arc = function(layer, x, y, radius, startAngle, endAngle, negative) {
+        scheduleTask(function __display_arc() {
+            layer.arc(x, y, radius, startAngle, endAngle, negative);
+        });
+    };
+
+    /**
+     * Starts a new path at the specified point.
+     *
+     * @param {!Guacamole.Layer} layer
+     *     The layer to draw upon.
+     *
+     * @param {!number} cp1x
+     *     The X coordinate of the first control point.
+     *
+     * @param {!number} cp1y
+     *     The Y coordinate of the first control point.
+     *
+     * @param {!number} cp2x
+     *     The X coordinate of the second control point.
+     *
+     * @param {!number} cp2y
+     *     The Y coordinate of the second control point.
+     *
+     * @param {!number} x
+     *     The X coordinate of the endpoint of the curve.
+     *
+     * @param {!number} y
+     *     The Y coordinate of the endpoint of the curve.
+     */
+    this.curveTo = function(layer, cp1x, cp1y, cp2x, cp2y, x, y) {
+        scheduleTask(function __display_curveTo() {
+            layer.curveTo(cp1x, cp1y, cp2x, cp2y, x, y);
+        });
+    };
+
+    /**
+     * Closes the current path by connecting the end point with the start
+     * point (if any) with a straight line.
+     * 
+     * @param {!Guacamole.Layer} layer
+     *     The layer to draw upon.
+     */
+    this.close = function(layer) {
+        scheduleTask(function __display_close() {
+            layer.close();
+        });
+    };
+
+    /**
+     * Add the specified rectangle to the current path.
+     *
+     * @param {!Guacamole.Layer} layer
+     *     The layer to draw upon.
+     *
+     * @param {!number} x
+     *     The X coordinate of the upper-left corner of the rectangle to draw.
+     *
+     * @param {!number} y
+     *     The Y coordinate of the upper-left corner of the rectangle to draw.
+     *
+     * @param {!number} w
+     *     The width of the rectangle to draw.
+     *
+     * @param {!number} h
+     *     The height of the rectangle to draw.
+     */
+    this.rect = function(layer, x, y, w, h) {
+        scheduleTask(function __display_rect() {
+            layer.rect(x, y, w, h);
+        });
+    };
+
+    /**
+     * Clip all future drawing operations by the current path. The current path
+     * is implicitly closed. The current path can continue to be reused
+     * for other operations (such as fillColor()) but a new path will be started
+     * once a path drawing operation (path() or rect()) is used.
+     * 
+     * @param {!Guacamole.Layer} layer
+     *     The layer to affect.
+     */
+    this.clip = function(layer) {
+        scheduleTask(function __display_clip() {
+            layer.clip();
+        });
+    };
+
+    /**
+     * Stroke the current path with the specified color. The current path
+     * is implicitly closed. The current path can continue to be reused
+     * for other operations (such as clip()) but a new path will be started
+     * once a path drawing operation (path() or rect()) is used.
+     *
+     * @param {!Guacamole.Layer} layer
+     *     The layer to draw upon.
+     *
+     * @param {!string} cap
+     *     The line cap style. Can be "round", "square", or "butt".
+     *
+     * @param {!string} join
+     *     The line join style. Can be "round", "bevel", or "miter".
+     *
+     * @param {!number} thickness
+     *     The line thickness in pixels.
+     *
+     * @param {!number} r
+     *     The red component of the color to fill.
+     *
+     * @param {!number} g
+     *     The green component of the color to fill.
+     *
+     * @param {!number} b
+     *     The blue component of the color to fill.
+     *
+     * @param {!number} a
+     *     The alpha component of the color to fill.
+     */
+    this.strokeColor = function(layer, cap, join, thickness, r, g, b, a) {
+        scheduleTask(function __display_strokeColor() {
+            layer.strokeColor(cap, join, thickness, r, g, b, a);
+        });
+    };
+
+    /**
+     * Fills the current path with the specified color. The current path
+     * is implicitly closed. The current path can continue to be reused
+     * for other operations (such as clip()) but a new path will be started
+     * once a path drawing operation (path() or rect()) is used.
+     * 
+     * @param {!Guacamole.Layer} layer
+     *     The layer to draw upon.
+     *
+     * @param {!number} r
+     *     The red component of the color to fill.
+     *
+     * @param {!number} g
+     *     The green component of the color to fill.
+     *
+     * @param {!number} b
+     *     The blue component of the color to fill.
+     *
+     * @param {!number} a
+     *     The alpha component of the color to fill.
+     */
+    this.fillColor = function(layer, r, g, b, a) {
+        scheduleTask(function __display_fillColor() {
+            layer.fillColor(r, g, b, a);
+        });
+    };
+
+    /**
+     * Stroke the current path with the image within the specified layer. The
+     * image data will be tiled infinitely within the stroke. The current path
+     * is implicitly closed. The current path can continue to be reused
+     * for other operations (such as clip()) but a new path will be started
+     * once a path drawing operation (path() or rect()) is used.
+     * 
+     * @param {!Guacamole.Layer} layer
+     *     The layer to draw upon.
+     *
+     * @param {!string} cap
+     *     The line cap style. Can be "round", "square", or "butt".
+     *
+     * @param {!string} join
+     *     The line join style. Can be "round", "bevel", or "miter".
+     *
+     * @param {!number} thickness
+     *     The line thickness in pixels.
+     *
+     * @param {!Guacamole.Layer} srcLayer
+     *     The layer to use as a repeating pattern within the stroke.
+     */
+    this.strokeLayer = function(layer, cap, join, thickness, srcLayer) {
+        scheduleTask(function __display_strokeLayer() {
+            layer.strokeLayer(cap, join, thickness, srcLayer);
+        });
+    };
+
+    /**
+     * Fills the current path with the image within the specified layer. The
+     * image data will be tiled infinitely within the stroke. The current path
+     * is implicitly closed. The current path can continue to be reused
+     * for other operations (such as clip()) but a new path will be started
+     * once a path drawing operation (path() or rect()) is used.
+     * 
+     * @param {!Guacamole.Layer} layer
+     *     The layer to draw upon.
+     *
+     * @param {!Guacamole.Layer} srcLayer
+     *     The layer to use as a repeating pattern within the fill.
+     */
+    this.fillLayer = function(layer, srcLayer) {
+        scheduleTask(function __display_fillLayer() {
+            layer.fillLayer(srcLayer);
+        });
+    };
+
+    /**
+     * Push current layer state onto stack.
+     * 
+     * @param {!Guacamole.Layer} layer
+     *     The layer to draw upon.
+     */
+    this.push = function(layer) {
+        scheduleTask(function __display_push() {
+            layer.push();
+        });
+    };
+
+    /**
+     * Pop layer state off stack.
+     * 
+     * @param {!Guacamole.Layer} layer
+     *     The layer to draw upon.
+     */
+    this.pop = function(layer) {
+        scheduleTask(function __display_pop() {
+            layer.pop();
+        });
+    };
+
+    /**
+     * Reset the layer, clearing the stack, the current path, and any transform
+     * matrix.
+     * 
+     * @param {!Guacamole.Layer} layer
+     *     The layer to draw upon.
+     */
+    this.reset = function(layer) {
+        scheduleTask(function __display_reset() {
+            layer.reset();
+        });
+    };
+
+    /**
+     * Sets the given affine transform (defined with six values from the
+     * transform's matrix).
+     *
+     * @param {!Guacamole.Layer} layer
+     *     The layer to modify.
+     *
+     * @param {!number} a
+     *     The first value in the affine transform's matrix.
+     *
+     * @param {!number} b
+     *     The second value in the affine transform's matrix.
+     *
+     * @param {!number} c
+     *     The third value in the affine transform's matrix.
+     *
+     * @param {!number} d
+     *     The fourth value in the affine transform's matrix.
+     *
+     * @param {!number} e
+     *     The fifth value in the affine transform's matrix.
+     *
+     * @param {!number} f
+     *     The sixth value in the affine transform's matrix.
+     */
+    this.setTransform = function(layer, a, b, c, d, e, f) {
+        scheduleTask(function __display_setTransform() {
+            layer.setTransform(a, b, c, d, e, f);
+        });
+    };
+
+    /**
+     * Applies the given affine transform (defined with six values from the
+     * transform's matrix).
+     *
+     * @param {!Guacamole.Layer} layer
+     *     The layer to modify.
+     *
+     * @param {!number} a
+     *     The first value in the affine transform's matrix.
+     *
+     * @param {!number} b
+     *     The second value in the affine transform's matrix.
+     *
+     * @param {!number} c
+     *     The third value in the affine transform's matrix.
+     *
+     * @param {!number} d
+     *     The fourth value in the affine transform's matrix.
+     *
+     * @param {!number} e
+     *     The fifth value in the affine transform's matrix.
+     *
+     * @param {!number} f
+     *     The sixth value in the affine transform's matrix.
+     *
+     */
+    this.transform = function(layer, a, b, c, d, e, f) {
+        scheduleTask(function __display_transform() {
+            layer.transform(a, b, c, d, e, f);
+        });
+    };
+
+    /**
+     * Sets the channel mask for future operations on this Layer.
+     * 
+     * The channel mask is a Guacamole-specific compositing operation identifier
+     * with a single bit representing each of four channels (in order): source
+     * image where destination transparent, source where destination opaque,
+     * destination where source transparent, and destination where source
+     * opaque.
+     * 
+     * @param {!Guacamole.Layer} layer
+     *     The layer to modify.
+     *
+     * @param {!number} mask
+     *     The channel mask for future operations on this Layer.
+     */
+    this.setChannelMask = function(layer, mask) {
+        scheduleTask(function __display_setChannelMask() {
+            layer.setChannelMask(mask);
+        });
+    };
+
+    /**
+     * Sets the miter limit for stroke operations using the miter join. This
+     * limit is the maximum ratio of the size of the miter join to the stroke
+     * width. If this ratio is exceeded, the miter will not be drawn for that
+     * joint of the path.
+     * 
+     * @param {!Guacamole.Layer} layer
+     *     The layer to modify.
+     *
+     * @param {!number} limit
+     *     The miter limit for stroke operations using the miter join.
+     */
+    this.setMiterLimit = function(layer, limit) {
+        scheduleTask(function __display_setMiterLimit() {
+            layer.setMiterLimit(limit);
+        });
+    };
+
+    /**
+     * Removes the given layer container entirely, such that it is no longer
+     * contained within its parent layer, if any.
+     *
+     * @param {!Guacamole.Display.VisibleLayer} layer
+     *     The layer being removed from its parent.
+     */
+    this.dispose = function dispose(layer) {
+        scheduleTask(function disposeLayer() {
+            layer.dispose();
+        });
+    };
+
+    /**
+     * Applies the given affine transform (defined with six values from the
+     * transform's matrix) to the given layer.
+     *
+     * @param {!Guacamole.Display.VisibleLayer} layer
+     *     The layer being distorted.
+     *
+     * @param {!number} a
+     *     The first value in the affine transform's matrix.
+     *
+     * @param {!number} b
+     *     The second value in the affine transform's matrix.
+     *
+     * @param {!number} c
+     *     The third value in the affine transform's matrix.
+     *
+     * @param {!number} d
+     *     The fourth value in the affine transform's matrix.
+     *
+     * @param {!number} e
+     *     The fifth value in the affine transform's matrix.
+     *
+     * @param {!number} f
+     *     The sixth value in the affine transform's matrix.
+     */
+    this.distort = function distort(layer, a, b, c, d, e, f) {
+        scheduleTask(function distortLayer() {
+            layer.distort(a, b, c, d, e, f);
+        });
+    };
+
+    /**
+     * Moves the upper-left corner of the given layer to the given X and Y
+     * coordinate, sets the Z stacking order, and reparents the layer
+     * to the given parent layer.
+     *
+     * @param {!Guacamole.Display.VisibleLayer} layer
+     *     The layer being moved.
+     *
+     * @param {!Guacamole.Display.VisibleLayer} parent
+     *     The parent to set.
+     *
+     * @param {!number} x
+     *     The X coordinate to move to.
+     *
+     * @param {!number} y
+     *     The Y coordinate to move to.
+     *
+     * @param {!number} z
+     *     The Z coordinate to move to.
+     */
+    this.move = function move(layer, parent, x, y, z) {
+        scheduleTask(function moveLayer() {
+            layer.move(parent, x, y, z);
+        });
+    };
+
+    /**
+     * Sets the opacity of the given layer to the given value, where 255 is
+     * fully opaque and 0 is fully transparent.
+     *
+     * @param {!Guacamole.Display.VisibleLayer} layer
+     *     The layer whose opacity should be set.
+     *
+     * @param {!number} alpha
+     *     The opacity to set.
+     */
+    this.shade = function shade(layer, alpha) {
+        scheduleTask(function shadeLayer() {
+            layer.shade(alpha);
+        });
+    };
+
+    /**
+     * Sets the scale of the client display element such that it renders at
+     * a relatively smaller or larger size, without affecting the true
+     * resolution of the display.
+     *
+     * @param {!number} scale
+     *     The scale to resize to, where 1.0 is normal size (1:1 scale).
+     */
+    this.scale = function(scale) {
+
+        display.style.transform =
+        display.style.WebkitTransform =
+        display.style.MozTransform =
+        display.style.OTransform =
+        display.style.msTransform =
+
+            "scale(" + scale + "," + scale + ")";
+
+        displayScale = scale;
+
+        // Update bounds size
+        bounds.style.width = (displayWidth*displayScale) + "px";
+        bounds.style.height = (displayHeight*displayScale) + "px";
+
+    };
+
+    /**
+     * Returns the scale of the display.
+     *
+     * @return {!number}
+     *     The scale of the display.
+     */
+    this.getScale = function() {
+        return displayScale;
+    };
+
+    /**
+     * Returns a canvas element containing the entire display, with all child
+     * layers composited within.
+     *
+     * @return {!HTMLCanvasElement}
+     *     A new canvas element containing a copy of the display.
+     */
+    this.flatten = function() {
+       
+        // Get destination canvas
+        var canvas = document.createElement("canvas");
+        canvas.width = default_layer.width;
+        canvas.height = default_layer.height;
+
+        var context = canvas.getContext("2d");
+
+        // Returns sorted array of children
+        function get_children(layer) {
+
+            // Build array of children
+            var children = [];
+            for (var index in layer.children)
+                children.push(layer.children[index]);
+
+            // Sort
+            children.sort(function children_comparator(a, b) {
+
+                // Compare based on Z order
+                var diff = a.z - b.z;
+                if (diff !== 0)
+                    return diff;
+
+                // If Z order identical, use document order
+                var a_element = a.getElement();
+                var b_element = b.getElement();
+                var position = b_element.compareDocumentPosition(a_element);
+
+                if (position & Node.DOCUMENT_POSITION_PRECEDING) return -1;
+                if (position & Node.DOCUMENT_POSITION_FOLLOWING) return  1;
+
+                // Otherwise, assume same
+                return 0;
+
+            });
+
+            // Done
+            return children;
+
+        }
+
+        // Draws the contents of the given layer at the given coordinates
+        function draw_layer(layer, x, y) {
+
+            // Draw layer
+            if (layer.width > 0 && layer.height > 0) {
+
+                // Save and update alpha
+                var initial_alpha = context.globalAlpha;
+                context.globalAlpha *= layer.alpha / 255.0;
+
+                // Copy data
+                context.drawImage(layer.getCanvas(), x, y);
+
+                // Draw all children
+                var children = get_children(layer);
+                for (var i=0; i<children.length; i++) {
+                    var child = children[i];
+                    draw_layer(child, x + child.x, y + child.y);
+                }
+
+                // Restore alpha
+                context.globalAlpha = initial_alpha;
+
+            }
+
+        }
+
+        // Draw default layer and all children
+        draw_layer(default_layer, 0, 0);
+
+        // Return new canvas copy
+        return canvas;
+        
+    };
+
+};
+
+/**
+ * Simple container for Guacamole.Layer, allowing layers to be easily
+ * repositioned and nested. This allows certain operations to be accelerated
+ * through DOM manipulation, rather than raster operations.
+ * 
+ * @constructor
+ * @augments Guacamole.Layer
+ * @param {!number} width
+ *     The width of the Layer, in pixels. The canvas element backing this Layer
+ *     will be given this width.
+ *
+ * @param {!number} height
+ *     The height of the Layer, in pixels. The canvas element backing this
+ *     Layer will be given this height.
+ */
+Guacamole.Display.VisibleLayer = function(width, height) {
+
+    Guacamole.Layer.apply(this, [width, height]);
+
+    /**
+     * Reference to this layer.
+     *
+     * @private
+     * @type {!Guacamole.Display.Layer}
+     */
+    var layer = this;
+
+    /**
+     * Identifier which uniquely identifies this layer. This is COMPLETELY
+     * UNRELATED to the index of the underlying layer, which is specific
+     * to the Guacamole protocol, and not relevant at this level.
+     * 
+     * @private
+     * @type {!number}
+     */
+    this.__unique_id = Guacamole.Display.VisibleLayer.__next_id++;
+
+    /**
+     * The opacity of the layer container, where 255 is fully opaque and 0 is
+     * fully transparent.
+     *
+     * @type {!number}
+     */
+    this.alpha = 0xFF;
+
+    /**
+     * X coordinate of the upper-left corner of this layer container within
+     * its parent, in pixels.
+     *
+     * @type {!number}
+     */
+    this.x = 0;
+
+    /**
+     * Y coordinate of the upper-left corner of this layer container within
+     * its parent, in pixels.
+     *
+     * @type {!number}
+     */
+    this.y = 0;
+
+    /**
+     * Z stacking order of this layer relative to other sibling layers.
+     *
+     * @type {!number}
+     */
+    this.z = 0;
+
+    /**
+     * The affine transformation applied to this layer container. Each element
+     * corresponds to a value from the transformation matrix, with the first
+     * three values being the first row, and the last three values being the
+     * second row. There are six values total.
+     * 
+     * @type {!number[]}
+     */
+    this.matrix = [1, 0, 0, 1, 0, 0];
+
+    /**
+     * The parent layer container of this layer, if any.
+     * @type {Guacamole.Display.VisibleLayer}
+     */
+    this.parent = null;
+
+    /**
+     * Set of all children of this layer, indexed by layer index. This object
+     * will have one property per child.
+     *
+     * @type {!Object.<number, Guacamole.Display.VisibleLayer>}
+     */
+    this.children = {};
+
+    // Set layer position
+    var canvas = layer.getCanvas();
+    canvas.style.position = "absolute";
+    canvas.style.left = "0px";
+    canvas.style.top = "0px";
+
+    // Create div with given size
+    var div = document.createElement("div");
+    div.appendChild(canvas);
+    div.style.width = width + "px";
+    div.style.height = height + "px";
+    div.style.position = "absolute";
+    div.style.left = "0px";
+    div.style.top = "0px";
+    div.style.overflow = "hidden";
+
+    /**
+     * Superclass resize() function.
+     * @private
+     */
+    var __super_resize = this.resize;
+
+    this.resize = function(width, height) {
+
+        // Resize containing div
+        div.style.width = width + "px";
+        div.style.height = height + "px";
+
+        __super_resize(width, height);
+
+    };
+  
+    /**
+     * Returns the element containing the canvas and any other elements
+     * associated with this layer.
+     *
+     * @returns {!Element}
+     *     The element containing this layer's canvas.
+     */
+    this.getElement = function() {
+        return div;
+    };
+
+    /**
+     * The translation component of this layer's transform.
+     *
+     * @private
+     * @type {!string}
+     */
+    var translate = "translate(0px, 0px)"; // (0, 0)
+
+    /**
+     * The arbitrary matrix component of this layer's transform.
+     *
+     * @private
+     * @type {!string}
+     */
+    var matrix = "matrix(1, 0, 0, 1, 0, 0)"; // Identity
+
+    /**
+     * Moves the upper-left corner of this layer to the given X and Y
+     * coordinate.
+     * 
+     * @param {!number} x
+     *     The X coordinate to move to.
+     *
+     * @param {!number} y
+     *     The Y coordinate to move to.
+     */
+    this.translate = function(x, y) {
+
+        layer.x = x;
+        layer.y = y;
+
+        // Generate translation
+        translate = "translate("
+                        + x + "px,"
+                        + y + "px)";
+
+        // Set layer transform 
+        div.style.transform =
+        div.style.WebkitTransform =
+        div.style.MozTransform =
+        div.style.OTransform =
+        div.style.msTransform =
+
+            translate + " " + matrix;
+
+    };
+
+    /**
+     * Moves the upper-left corner of this VisibleLayer to the given X and Y
+     * coordinate, sets the Z stacking order, and reparents this VisibleLayer
+     * to the given VisibleLayer.
+     * 
+     * @param {!Guacamole.Display.VisibleLayer} parent
+     *     The parent to set.
+     *
+     * @param {!number} x
+     *     The X coordinate to move to.
+     *
+     * @param {!number} y
+     *     The Y coordinate to move to.
+     *
+     * @param {!number} z
+     *     The Z coordinate to move to.
+     */
+    this.move = function(parent, x, y, z) {
+
+        // Set parent if necessary
+        if (layer.parent !== parent) {
+
+            // Maintain relationship
+            if (layer.parent)
+                delete layer.parent.children[layer.__unique_id];
+            layer.parent = parent;
+            parent.children[layer.__unique_id] = layer;
+
+            // Reparent element
+            var parent_element = parent.getElement();
+            parent_element.appendChild(div);
+
+        }
+
+        // Set location
+        layer.translate(x, y);
+        layer.z = z;
+        div.style.zIndex = z;
+
+    };
+
+    /**
+     * Sets the opacity of this layer to the given value, where 255 is fully
+     * opaque and 0 is fully transparent.
+     * 
+     * @param {!number} a
+     *     The opacity to set.
+     */
+    this.shade = function(a) {
+        layer.alpha = a;
+        div.style.opacity = a/255.0;
+    };
+
+    /**
+     * Removes this layer container entirely, such that it is no longer
+     * contained within its parent layer, if any.
+     */
+    this.dispose = function() {
+
+        // Remove from parent container
+        if (layer.parent) {
+            delete layer.parent.children[layer.__unique_id];
+            layer.parent = null;
+        }
+
+        // Remove from parent element
+        if (div.parentNode)
+            div.parentNode.removeChild(div);
+        
+    };
+
+    /**
+     * Applies the given affine transform (defined with six values from the
+     * transform's matrix).
+     *
+     * @param {!number} a
+     *     The first value in the affine transform's matrix.
+     *
+     * @param {!number} b
+     *     The second value in the affine transform's matrix.
+     *
+     * @param {!number} c
+     *     The third value in the affine transform's matrix.
+     *
+     * @param {!number} d
+     *     The fourth value in the affine transform's matrix.
+     *
+     * @param {!number} e
+     *     The fifth value in the affine transform's matrix.
+     *
+     * @param {!number} f
+     *     The sixth value in the affine transform's matrix.
+     */
+    this.distort = function(a, b, c, d, e, f) {
+
+        // Store matrix
+        layer.matrix = [a, b, c, d, e, f];
+
+        // Generate matrix transformation
+        matrix =
+
+            /* a c e
+             * b d f
+             * 0 0 1
+             */
+    
+            "matrix(" + a + "," + b + "," + c + "," + d + "," + e + "," + f + ")";
+
+        // Set layer transform 
+        div.style.transform =
+        div.style.WebkitTransform =
+        div.style.MozTransform =
+        div.style.OTransform =
+        div.style.msTransform =
+
+            translate + " " + matrix;
+
+    };
+
+};
+
+/**
+ * The next identifier to be assigned to the layer container. This identifier
+ * uniquely identifies each VisibleLayer, but is unrelated to the index of
+ * the layer, which exists at the protocol/client level only.
+ * 
+ * @private
+ * @type {!number}
+ */
+Guacamole.Display.VisibleLayer.__next_id = 0;
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 4.0.2 on Sat Mar 30 2024 09:36:10 GMT-0700 (Pacific Daylight Time) +
+ + + + + diff --git a/doc/1.5.5/guacamole-common-js/main_webapp_modules_Event.js.html b/doc/1.5.5/guacamole-common-js/main_webapp_modules_Event.js.html new file mode 100644 index 000000000..6f6015cca --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/main_webapp_modules_Event.js.html @@ -0,0 +1,377 @@ + + + + + JSDoc: Source: main/webapp/modules/Event.js + + + + + + + + + + +
+ +

Source: main/webapp/modules/Event.js

+ + + + + + +
+
+
/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+var Guacamole = Guacamole || {};
+
+/**
+ * An arbitrary event, emitted by a {@link Guacamole.Event.Target}. This object
+ * should normally serve as the base class for a different object that is more
+ * specific to the event type.
+ *
+ * @constructor
+ * @param {!string} type
+ *     The unique name of this event type.
+ */
+Guacamole.Event = function Event(type) {
+
+    /**
+     * The unique name of this event type.
+     *
+     * @type {!string}
+     */
+    this.type = type;
+
+    /**
+     * An arbitrary timestamp in milliseconds, indicating this event's
+     * position in time relative to other events.
+     *
+     * @type {!number}
+     */
+    this.timestamp = new Date().getTime();
+
+    /**
+     * Returns the number of milliseconds elapsed since this event was created.
+     *
+     * @return {!number}
+     *     The number of milliseconds elapsed since this event was created.
+     */
+    this.getAge = function getAge() {
+        return new Date().getTime() - this.timestamp;
+    };
+
+    /**
+     * Requests that the legacy event handler associated with this event be
+     * invoked on the given event target. This function will be invoked
+     * automatically by implementations of {@link Guacamole.Event.Target}
+     * whenever {@link Guacamole.Event.Target#emit emit()} is invoked.
+     * <p>
+     * Older versions of Guacamole relied on single event handlers with the
+     * prefix "on", such as "onmousedown" or "onkeyup". If a Guacamole.Event
+     * implementation is replacing the event previously represented by one of
+     * these handlers, this function gives the implementation the opportunity
+     * to provide backward compatibility with the old handler.
+     * <p>
+     * Unless overridden, this function does nothing.
+     *
+     * @param {!Guacamole.Event.Target} eventTarget
+     *     The {@link Guacamole.Event.Target} that emitted this event.
+     */
+    this.invokeLegacyHandler = function invokeLegacyHandler(eventTarget) {
+        // Do nothing
+    };
+
+};
+
+/**
+ * A {@link Guacamole.Event} that may relate to one or more DOM events.
+ * Continued propagation and default behavior of the related DOM events may be
+ * prevented with {@link Guacamole.Event.DOMEvent#stopPropagation stopPropagation()}
+ * and {@link Guacamole.Event.DOMEvent#preventDefault preventDefault()}
+ * respectively.
+ *
+ * @constructor
+ * @augments Guacamole.Event
+ *
+ * @param {!string} type
+ *     The unique name of this event type.
+ *
+ * @param {Event|Event[]} [events=[]]
+ *     The DOM events that are related to this event, if any. Future calls to
+ *     {@link Guacamole.Event.DOMEvent#preventDefault preventDefault()} and
+ *     {@link Guacamole.Event.DOMEvent#stopPropagation stopPropagation()} will
+ *     affect these events.
+ */
+Guacamole.Event.DOMEvent = function DOMEvent(type, events) {
+
+    Guacamole.Event.call(this, type);
+
+    // Default to empty array
+    events = events || [];
+
+    // Automatically wrap non-array single Event in an array
+    if (!Array.isArray(events))
+        events = [ events ];
+
+    /**
+     * Requests that the default behavior of related DOM events be prevented.
+     * Whether this request will be honored by the browser depends on the
+     * nature of those events and the timing of the request.
+     */
+    this.preventDefault = function preventDefault() {
+        events.forEach(function applyPreventDefault(event) {
+            if (event.preventDefault) event.preventDefault();
+            event.returnValue = false;
+        });
+    };
+
+    /**
+     * Stops further propagation of related events through the DOM. Only events
+     * that are directly related to this event will be stopped.
+     */
+    this.stopPropagation = function stopPropagation() {
+        events.forEach(function applyStopPropagation(event) {
+            event.stopPropagation();
+        });
+    };
+
+};
+
+/**
+ * Convenience function for cancelling all further processing of a given DOM
+ * event. Invoking this function prevents the default behavior of the event and
+ * stops any further propagation.
+ *
+ * @param {!Event} event
+ *     The DOM event to cancel.
+ */
+Guacamole.Event.DOMEvent.cancelEvent = function cancelEvent(event) {
+    event.stopPropagation();
+    if (event.preventDefault) event.preventDefault();
+    event.returnValue = false;
+};
+
+/**
+ * An object which can dispatch {@link Guacamole.Event} objects. Listeners
+ * registered with {@link Guacamole.Event.Target#on on()} will automatically
+ * be invoked based on the type of {@link Guacamole.Event} passed to
+ * {@link Guacamole.Event.Target#dispatch dispatch()}. It is normally
+ * subclasses of Guacamole.Event.Target that will dispatch events, and usages
+ * of those subclasses that will catch dispatched events with on().
+ *
+ * @constructor
+ */
+Guacamole.Event.Target = function Target() {
+
+    /**
+     * A callback function which handles an event dispatched by an event
+     * target.
+     *
+     * @callback Guacamole.Event.Target~listener
+     * @param {!Guacamole.Event} event
+     *     The event that was dispatched.
+     *
+     * @param {!Guacamole.Event.Target} target
+     *     The object that dispatched the event.
+     */
+
+    /**
+     * All listeners (callback functions) registered for each event type passed
+     * to {@link Guacamole.Event.Targer#on on()}.
+     *
+     * @private
+     * @type {!Object.<string, Guacamole.Event.Target~listener[]>}
+     */
+    var listeners = {};
+
+    /**
+     * Registers a listener for events having the given type, as dictated by
+     * the {@link Guacamole.Event#type type} property of {@link Guacamole.Event}
+     * provided to {@link Guacamole.Event.Target#dispatch dispatch()}.
+     *
+     * @param {!string} type
+     *     The unique name of this event type.
+     *
+     * @param {!Guacamole.Event.Target~listener} listener
+     *     The function to invoke when an event having the given type is
+     *     dispatched. The {@link Guacamole.Event} object provided to
+     *     {@link Guacamole.Event.Target#dispatch dispatch()} will be passed to
+     *     this function, along with the dispatching Guacamole.Event.Target.
+     */
+    this.on = function on(type, listener) {
+
+        var relevantListeners = listeners[type];
+        if (!relevantListeners)
+            listeners[type] = relevantListeners = [];
+
+        relevantListeners.push(listener);
+
+    };
+
+    /**
+     * Registers a listener for events having the given types, as dictated by
+     * the {@link Guacamole.Event#type type} property of {@link Guacamole.Event}
+     * provided to {@link Guacamole.Event.Target#dispatch dispatch()}.
+     * <p>
+     * Invoking this function is equivalent to manually invoking
+     * {@link Guacamole.Event.Target#on on()} for each of the provided types.
+     *
+     * @param {!string[]} types
+     *     The unique names of the event types to associate with the given
+     *     listener.
+     *
+     * @param {!Guacamole.Event.Target~listener} listener
+     *     The function to invoke when an event having any of the given types
+     *     is dispatched. The {@link Guacamole.Event} object provided to
+     *     {@link Guacamole.Event.Target#dispatch dispatch()} will be passed to
+     *     this function, along with the dispatching Guacamole.Event.Target.
+     */
+    this.onEach = function onEach(types, listener) {
+        types.forEach(function addListener(type) {
+            this.on(type, listener);
+        }, this);
+    };
+
+    /**
+     * Dispatches the given event, invoking all event handlers registered with
+     * this Guacamole.Event.Target for that event's
+     * {@link Guacamole.Event#type type}.
+     *
+     * @param {!Guacamole.Event} event
+     *     The event to dispatch.
+     */
+    this.dispatch = function dispatch(event) {
+
+        // Invoke any relevant legacy handler for the event
+        event.invokeLegacyHandler(this);
+
+        // Invoke all registered listeners
+        var relevantListeners = listeners[event.type];
+        if (relevantListeners) {
+            for (var i = 0; i < relevantListeners.length; i++) {
+                relevantListeners[i](event, this);
+            }
+        }
+
+    };
+
+    /**
+     * Unregisters a listener that was previously registered with
+     * {@link Guacamole.Event.Target#on on()} or
+     * {@link Guacamole.Event.Target#onEach onEach()}. If no such listener was
+     * registered, this function has no effect. If multiple copies of the same
+     * listener were registered, the first listener still registered will be
+     * removed.
+     *
+     * @param {!string} type
+     *     The unique name of the event type handled by the listener being
+     *     removed.
+     *
+     * @param {!Guacamole.Event.Target~listener} listener
+     *     The listener function previously provided to
+     *     {@link Guacamole.Event.Target#on on()}or
+     *     {@link Guacamole.Event.Target#onEach onEach()}.
+     *
+     * @returns {!boolean}
+     *     true if the specified listener was removed, false otherwise.
+     */
+    this.off = function off(type, listener) {
+
+        var relevantListeners = listeners[type];
+        if (!relevantListeners)
+            return false;
+
+        for (var i = 0; i < relevantListeners.length; i++) {
+            if (relevantListeners[i] === listener) {
+                relevantListeners.splice(i, 1);
+                return true;
+            }
+        }
+
+        return false;
+
+    };
+
+    /**
+     * Unregisters listeners that were previously registered with
+     * {@link Guacamole.Event.Target#on on()} or
+     * {@link Guacamole.Event.Target#onEach onEach()}. If no such listeners
+     * were registered, this function has no effect. If multiple copies of the
+     * same listener were registered for the same event type, the first
+     * listener still registered will be removed.
+     * <p>
+     * Invoking this function is equivalent to manually invoking
+     * {@link Guacamole.Event.Target#off off()} for each of the provided types.
+     *
+     * @param {!string[]} types
+     *     The unique names of the event types handled by the listeners being
+     *     removed.
+     *
+     * @param {!Guacamole.Event.Target~listener} listener
+     *     The listener function previously provided to
+     *     {@link Guacamole.Event.Target#on on()} or
+     *     {@link Guacamole.Event.Target#onEach onEach()}.
+     *
+     * @returns {!boolean}
+     *     true if any of the specified listeners were removed, false
+     *     otherwise.
+     */
+    this.offEach = function offEach(types, listener) {
+
+        var changed = false;
+
+        types.forEach(function removeListener(type) {
+            changed |= this.off(type, listener);
+        }, this);
+
+        return changed;
+
+    };
+
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 4.0.2 on Sat Mar 30 2024 09:36:10 GMT-0700 (Pacific Daylight Time) +
+ + + + + diff --git a/doc/1.5.5/guacamole-common-js/main_webapp_modules_InputSink.js.html b/doc/1.5.5/guacamole-common-js/main_webapp_modules_InputSink.js.html new file mode 100644 index 000000000..c2aafe21e --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/main_webapp_modules_InputSink.js.html @@ -0,0 +1,180 @@ + + + + + JSDoc: Source: main/webapp/modules/InputSink.js + + + + + + + + + + +
+ +

Source: main/webapp/modules/InputSink.js

+ + + + + + +
+
+
/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+var Guacamole = Guacamole || {};
+
+/**
+ * A hidden input field which attempts to keep itself focused at all times,
+ * except when another input field has been intentionally focused, whether
+ * programatically or by the user. The actual underlying input field, returned
+ * by getElement(), may be used as a reliable source of keyboard-related events,
+ * particularly composition and input events which may require a focused input
+ * field to be dispatched at all.
+ *
+ * @constructor
+ */
+Guacamole.InputSink = function InputSink() {
+
+    /**
+     * Reference to this instance of Guacamole.InputSink.
+     *
+     * @private
+     * @type {!Guacamole.InputSink}
+     */
+    var sink = this;
+
+    /**
+     * The underlying input field, styled to be invisible.
+     *
+     * @private
+     * @type {!Element}
+     */
+    var field = document.createElement('textarea');
+    field.style.position   = 'fixed';
+    field.style.outline    = 'none';
+    field.style.border     = 'none';
+    field.style.margin     = '0';
+    field.style.padding    = '0';
+    field.style.height     = '0';
+    field.style.width      = '0';
+    field.style.left       = '0';
+    field.style.bottom     = '0';
+    field.style.resize     = 'none';
+    field.style.background = 'transparent';
+    field.style.color      = 'transparent';
+
+    // Keep field clear when modified via normal keypresses
+    field.addEventListener("keypress", function clearKeypress(e) {
+        field.value = '';
+    }, false);
+
+    // Keep field clear when modofied via composition events
+    field.addEventListener("compositionend", function clearCompletedComposition(e) {
+        if (e.data)
+            field.value = '';
+    }, false);
+
+    // Keep field clear when modofied via input events
+    field.addEventListener("input", function clearCompletedInput(e) {
+        if (e.data && !e.isComposing)
+            field.value = '';
+    }, false);
+
+    // Whenever focus is gained, automatically click to ensure cursor is
+    // actually placed within the field (the field may simply be highlighted or
+    // outlined otherwise)
+    field.addEventListener("focus", function focusReceived() {
+        window.setTimeout(function deferRefocus() {
+            field.click();
+            field.select();
+        }, 0);
+    }, true);
+
+    /**
+     * Attempts to focus the underlying input field. The focus attempt occurs
+     * asynchronously, and may silently fail depending on browser restrictions.
+     */
+    this.focus = function focus() {
+        window.setTimeout(function deferRefocus() {
+            field.focus(); // Focus must be deferred to work reliably across browsers
+        }, 0);
+    };
+
+    /**
+     * Returns the underlying input field. This input field MUST be manually
+     * added to the DOM for the Guacamole.InputSink to have any effect.
+     *
+     * @returns {!Element}
+     *     The underlying input field.
+     */
+    this.getElement = function getElement() {
+        return field;
+    };
+
+    // Automatically refocus input sink if part of DOM
+    document.addEventListener("keydown", function refocusSink(e) {
+
+        // Do not refocus if focus is on an input field
+        var focused = document.activeElement;
+        if (focused && focused !== document.body) {
+
+            // Only consider focused input fields which are actually visible
+            var rect = focused.getBoundingClientRect();
+            if (rect.left + rect.width > 0 && rect.top + rect.height > 0)
+                return;
+
+        }
+
+        // Refocus input sink instead of handling click
+        sink.focus();
+
+    }, true);
+
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 4.0.2 on Sat Mar 30 2024 09:36:10 GMT-0700 (Pacific Daylight Time) +
+ + + + + diff --git a/doc/1.5.5/guacamole-common-js/main_webapp_modules_InputStream.js.html b/doc/1.5.5/guacamole-common-js/main_webapp_modules_InputStream.js.html new file mode 100644 index 000000000..499fbf2fd --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/main_webapp_modules_InputStream.js.html @@ -0,0 +1,130 @@ + + + + + JSDoc: Source: main/webapp/modules/InputStream.js + + + + + + + + + + +
+ +

Source: main/webapp/modules/InputStream.js

+ + + + + + +
+
+
/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+var Guacamole = Guacamole || {};
+
+/**
+ * An input stream abstraction used by the Guacamole client to facilitate
+ * transfer of files or other binary data.
+ * 
+ * @constructor
+ * @param {!Guacamole.Client} client
+ *     The client owning this stream.
+ *
+ * @param {!number} index
+ *     The index of this stream.
+ */
+Guacamole.InputStream = function(client, index) {
+
+    /**
+     * Reference to this stream.
+     *
+     * @private
+     * @type {!Guacamole.InputStream}
+     */
+    var guac_stream = this;
+
+    /**
+     * The index of this stream.
+     *
+     * @type {!number}
+     */
+    this.index = index;
+
+    /**
+     * Called when a blob of data is received.
+     * 
+     * @event
+     * @param {!string} data
+     *     The received base64 data.
+     */
+    this.onblob = null;
+
+    /**
+     * Called when this stream is closed.
+     * 
+     * @event
+     */
+    this.onend = null;
+
+    /**
+     * Acknowledges the receipt of a blob.
+     * 
+     * @param {!string} message
+     *     A human-readable message describing the error or status.
+     *
+     * @param {!number} code
+     *     The error code, if any, or 0 for success.
+     */
+    this.sendAck = function(message, code) {
+        client.sendAck(guac_stream.index, message, code);
+    };
+
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 4.0.2 on Sat Mar 30 2024 09:36:10 GMT-0700 (Pacific Daylight Time) +
+ + + + + diff --git a/doc/1.5.5/guacamole-common-js/main_webapp_modules_IntegerPool.js.html b/doc/1.5.5/guacamole-common-js/main_webapp_modules_IntegerPool.js.html new file mode 100644 index 000000000..a5e4d8746 --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/main_webapp_modules_IntegerPool.js.html @@ -0,0 +1,130 @@ + + + + + JSDoc: Source: main/webapp/modules/IntegerPool.js + + + + + + + + + + +
+ +

Source: main/webapp/modules/IntegerPool.js

+ + + + + + +
+
+
/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+var Guacamole = Guacamole || {};
+
+/**
+ * Integer pool which returns consistently increasing integers while integers
+ * are in use, and previously-used integers when possible.
+ * @constructor 
+ */
+Guacamole.IntegerPool = function() {
+
+    /**
+     * Reference to this integer pool.
+     *
+     * @private
+     */
+    var guac_pool = this;
+
+    /**
+     * Array of available integers.
+     *
+     * @private
+     * @type {!number[]}
+     */
+    var pool = [];
+
+    /**
+     * The next integer to return if no more integers remain.
+     *
+     * @type {!number}
+     */
+    this.next_int = 0;
+
+    /**
+     * Returns the next available integer in the pool. If possible, a previously
+     * used integer will be returned.
+     * 
+     * @return {!number}
+     *     The next available integer.
+     */
+    this.next = function() {
+
+        // If free'd integers exist, return one of those
+        if (pool.length > 0)
+            return pool.shift();
+
+        // Otherwise, return a new integer
+        return guac_pool.next_int++;
+
+    };
+
+    /**
+     * Frees the given integer, allowing it to be reused.
+     * 
+     * @param {!number} integer
+     *     The integer to free.
+     */
+    this.free = function(integer) {
+        pool.push(integer);
+    };
+
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 4.0.2 on Sat Mar 30 2024 09:36:10 GMT-0700 (Pacific Daylight Time) +
+ + + + + diff --git a/doc/1.5.5/guacamole-common-js/main_webapp_modules_JSONReader.js.html b/doc/1.5.5/guacamole-common-js/main_webapp_modules_JSONReader.js.html new file mode 100644 index 000000000..e678743ba --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/main_webapp_modules_JSONReader.js.html @@ -0,0 +1,165 @@ + + + + + JSDoc: Source: main/webapp/modules/JSONReader.js + + + + + + + + + + +
+ +

Source: main/webapp/modules/JSONReader.js

+ + + + + + +
+
+
/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+var Guacamole = Guacamole || {};
+
+/**
+ * A reader which automatically handles the given input stream, assembling all
+ * received blobs into a JavaScript object by appending them to each other, in
+ * order, and decoding the result as JSON. Note that this object will overwrite
+ * any installed event handlers on the given Guacamole.InputStream.
+ * 
+ * @constructor
+ * @param {Guacamole.InputStream} stream
+ *     The stream that JSON will be read from.
+ */
+Guacamole.JSONReader = function guacamoleJSONReader(stream) {
+
+    /**
+     * Reference to this Guacamole.JSONReader.
+     *
+     * @private
+     * @type {!Guacamole.JSONReader}
+     */
+    var guacReader = this;
+
+    /**
+     * Wrapped Guacamole.StringReader.
+     *
+     * @private
+     * @type {!Guacamole.StringReader}
+     */
+    var stringReader = new Guacamole.StringReader(stream);
+
+    /**
+     * All JSON read thus far.
+     *
+     * @private
+     * @type {!string}
+     */
+    var json = '';
+
+    /**
+     * Returns the current length of this Guacamole.JSONReader, in characters.
+     *
+     * @return {!number}
+     *     The current length of this Guacamole.JSONReader.
+     */
+    this.getLength = function getLength() {
+        return json.length;
+    };
+
+    /**
+     * Returns the contents of this Guacamole.JSONReader as a JavaScript
+     * object.
+     *
+     * @return {object}
+     *     The contents of this Guacamole.JSONReader, as parsed from the JSON
+     *     contents of the input stream.
+     */
+    this.getJSON = function getJSON() {
+        return JSON.parse(json);
+    };
+
+    // Append all received text
+    stringReader.ontext = function ontext(text) {
+
+        // Append received text
+        json += text;
+
+        // Call handler, if present
+        if (guacReader.onprogress)
+            guacReader.onprogress(text.length);
+
+    };
+
+    // Simply call onend when end received
+    stringReader.onend = function onend() {
+        if (guacReader.onend)
+            guacReader.onend();
+    };
+
+    /**
+     * Fired once for every blob of data received.
+     * 
+     * @event
+     * @param {!number} length
+     *     The number of characters received.
+     */
+    this.onprogress = null;
+
+    /**
+     * Fired once this stream is finished and no further data will be written.
+     *
+     * @event
+     */
+    this.onend = null;
+
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 4.0.2 on Sat Mar 30 2024 09:36:10 GMT-0700 (Pacific Daylight Time) +
+ + + + + diff --git a/doc/1.5.5/guacamole-common-js/main_webapp_modules_Keyboard.js.html b/doc/1.5.5/guacamole-common-js/main_webapp_modules_Keyboard.js.html new file mode 100644 index 000000000..861d38a8a --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/main_webapp_modules_Keyboard.js.html @@ -0,0 +1,1561 @@ + + + + + JSDoc: Source: main/webapp/modules/Keyboard.js + + + + + + + + + + +
+ +

Source: main/webapp/modules/Keyboard.js

+ + + + + + +
+
+
/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+var Guacamole = Guacamole || {};
+
+/**
+ * Provides cross-browser and cross-keyboard keyboard for a specific element.
+ * Browser and keyboard layout variation is abstracted away, providing events
+ * which represent keys as their corresponding X11 keysym.
+ * 
+ * @constructor
+ * @param {Element|Document} [element]
+ *    The Element to use to provide keyboard events. If omitted, at least one
+ *    Element must be manually provided through the listenTo() function for
+ *    the Guacamole.Keyboard instance to have any effect.
+ */
+Guacamole.Keyboard = function Keyboard(element) {
+
+    /**
+     * Reference to this Guacamole.Keyboard.
+     *
+     * @private
+     * @type {!Guacamole.Keyboard}
+     */
+    var guac_keyboard = this;
+
+    /**
+     * An integer value which uniquely identifies this Guacamole.Keyboard
+     * instance with respect to other Guacamole.Keyboard instances.
+     *
+     * @private
+     * @type {!number}
+     */
+    var guacKeyboardID = Guacamole.Keyboard._nextID++;
+
+    /**
+     * The name of the property which is added to event objects via markEvent()
+     * to note that they have already been handled by this Guacamole.Keyboard.
+     *
+     * @private
+     * @constant
+     * @type {!string}
+     */
+    var EVENT_MARKER = '_GUAC_KEYBOARD_HANDLED_BY_' + guacKeyboardID;
+
+    /**
+     * Fired whenever the user presses a key with the element associated
+     * with this Guacamole.Keyboard in focus.
+     * 
+     * @event
+     * @param {!number} keysym
+     *     The keysym of the key being pressed.
+     *
+     * @return {!boolean}
+     *     true if the key event should be allowed through to the browser,
+     *     false otherwise.
+     */
+    this.onkeydown = null;
+
+    /**
+     * Fired whenever the user releases a key with the element associated
+     * with this Guacamole.Keyboard in focus.
+     * 
+     * @event
+     * @param {!number} keysym
+     *     The keysym of the key being released.
+     */
+    this.onkeyup = null;
+
+    /**
+     * Set of known platform-specific or browser-specific quirks which must be
+     * accounted for to properly interpret key events, even if the only way to
+     * reliably detect that quirk is to platform/browser-sniff.
+     *
+     * @private
+     * @type {!Object.<string, boolean>}
+     */
+    var quirks = {
+
+        /**
+         * Whether keyup events are universally unreliable.
+         *
+         * @type {!boolean}
+         */
+        keyupUnreliable: false,
+
+        /**
+         * Whether the Alt key is actually a modifier for typable keys and is
+         * thus never used for keyboard shortcuts.
+         *
+         * @type {!boolean}
+         */
+        altIsTypableOnly: false,
+
+        /**
+         * Whether we can rely on receiving a keyup event for the Caps Lock
+         * key.
+         *
+         * @type {!boolean}
+         */
+        capsLockKeyupUnreliable: false
+
+    };
+
+    // Set quirk flags depending on platform/browser, if such information is
+    // available
+    if (navigator && navigator.platform) {
+
+        // All keyup events are unreliable on iOS (sadly)
+        if (navigator.platform.match(/ipad|iphone|ipod/i))
+            quirks.keyupUnreliable = true;
+
+        // The Alt key on Mac is never used for keyboard shortcuts, and the
+        // Caps Lock key never dispatches keyup events
+        else if (navigator.platform.match(/^mac/i)) {
+            quirks.altIsTypableOnly = true;
+            quirks.capsLockKeyupUnreliable = true;
+        }
+
+    }
+
+    /**
+     * A key event having a corresponding timestamp. This event is non-specific.
+     * Its subclasses should be used instead when recording specific key
+     * events.
+     *
+     * @private
+     * @constructor
+     * @param {KeyboardEvent} [orig]
+     *     The relevant DOM keyboard event.
+     */
+    var KeyEvent = function KeyEvent(orig) {
+
+        /**
+         * Reference to this key event.
+         *
+         * @private
+         * @type {!KeyEvent}
+         */
+        var key_event = this;
+
+        /**
+         * The JavaScript key code of the key pressed. For most events (keydown
+         * and keyup), this is a scancode-like value related to the position of
+         * the key on the US English "Qwerty" keyboard. For keypress events, 
+         * this is the Unicode codepoint of the character that would be typed
+         * by the key pressed.
+         *
+         * @type {!number}
+         */
+        this.keyCode = orig ? (orig.which || orig.keyCode) : 0;
+
+        /**
+         * The legacy DOM3 "keyIdentifier" of the key pressed, as defined at:
+         * http://www.w3.org/TR/2009/WD-DOM-Level-3-Events-20090908/#events-Events-KeyboardEvent
+         *
+         * @type {!string}
+         */
+        this.keyIdentifier = orig && orig.keyIdentifier;
+
+        /**
+         * The standard name of the key pressed, as defined at:
+         * http://www.w3.org/TR/DOM-Level-3-Events/#events-KeyboardEvent
+         * 
+         * @type {!string}
+         */
+        this.key = orig && orig.key;
+
+        /**
+         * The location on the keyboard corresponding to the key pressed, as
+         * defined at:
+         * http://www.w3.org/TR/DOM-Level-3-Events/#events-KeyboardEvent
+         * 
+         * @type {!number}
+         */
+        this.location = orig ? getEventLocation(orig) : 0;
+
+        /**
+         * The state of all local keyboard modifiers at the time this event was
+         * received.
+         *
+         * @type {!Guacamole.Keyboard.ModifierState}
+         */
+        this.modifiers = orig ? Guacamole.Keyboard.ModifierState.fromKeyboardEvent(orig) : new Guacamole.Keyboard.ModifierState();
+
+        /**
+         * An arbitrary timestamp in milliseconds, indicating this event's
+         * position in time relative to other events.
+         *
+         * @type {!number}
+         */
+        this.timestamp = new Date().getTime();
+
+        /**
+         * Whether the default action of this key event should be prevented.
+         *
+         * @type {!boolean}
+         */
+        this.defaultPrevented = false;
+
+        /**
+         * The keysym of the key associated with this key event, as determined
+         * by a best-effort guess using available event properties and keyboard
+         * state.
+         *
+         * @type {number}
+         */
+        this.keysym = null;
+
+        /**
+         * Whether the keysym value of this key event is known to be reliable.
+         * If false, the keysym may still be valid, but it's only a best guess,
+         * and future key events may be a better source of information.
+         *
+         * @type {!boolean}
+         */
+        this.reliable = false;
+
+        /**
+         * Returns the number of milliseconds elapsed since this event was
+         * received.
+         *
+         * @return {!number}
+         *     The number of milliseconds elapsed since this event was
+         *     received.
+         */
+        this.getAge = function() {
+            return new Date().getTime() - key_event.timestamp;
+        };
+
+    };
+
+    /**
+     * Information related to the pressing of a key, which need not be a key
+     * associated with a printable character. The presence or absence of any
+     * information within this object is browser-dependent.
+     *
+     * @private
+     * @constructor
+     * @augments Guacamole.Keyboard.KeyEvent
+     * @param {!KeyboardEvent} orig
+     *     The relevant DOM "keydown" event.
+     */
+    var KeydownEvent = function KeydownEvent(orig) {
+
+        // We extend KeyEvent
+        KeyEvent.call(this, orig);
+
+        // If key is known from keyCode or DOM3 alone, use that
+        this.keysym =  keysym_from_key_identifier(this.key, this.location)
+                    || keysym_from_keycode(this.keyCode, this.location);
+
+        /**
+         * Whether the keyup following this keydown event is known to be
+         * reliable. If false, we cannot rely on the keyup event to occur.
+         *
+         * @type {!boolean}
+         */
+        this.keyupReliable = !quirks.keyupUnreliable;
+
+        // DOM3 and keyCode are reliable sources if the corresponding key is
+        // not a printable key
+        if (this.keysym && !isPrintable(this.keysym))
+            this.reliable = true;
+
+        // Use legacy keyIdentifier as a last resort, if it looks sane
+        if (!this.keysym && key_identifier_sane(this.keyCode, this.keyIdentifier))
+            this.keysym = keysym_from_key_identifier(this.keyIdentifier, this.location, this.modifiers.shift);
+
+        // If a key is pressed while meta is held down, the keyup will
+        // never be sent in Chrome (bug #108404)
+        if (this.modifiers.meta && this.keysym !== 0xFFE7 && this.keysym !== 0xFFE8)
+            this.keyupReliable = false;
+
+        // We cannot rely on receiving keyup for Caps Lock on certain platforms
+        else if (this.keysym === 0xFFE5 && quirks.capsLockKeyupUnreliable)
+            this.keyupReliable = false;
+
+        // Determine whether default action for Alt+combinations must be prevented
+        var prevent_alt = !this.modifiers.ctrl && !quirks.altIsTypableOnly;
+
+        // Determine whether default action for Ctrl+combinations must be prevented
+        var prevent_ctrl = !this.modifiers.alt;
+
+        // We must rely on the (potentially buggy) keyIdentifier if preventing
+        // the default action is important
+        if ((prevent_ctrl && this.modifiers.ctrl)
+         || (prevent_alt  && this.modifiers.alt)
+         || this.modifiers.meta
+         || this.modifiers.hyper)
+            this.reliable = true;
+
+        // Record most recently known keysym by associated key code
+        recentKeysym[this.keyCode] = this.keysym;
+
+    };
+
+    KeydownEvent.prototype = new KeyEvent();
+
+    /**
+     * Information related to the pressing of a key, which MUST be
+     * associated with a printable character. The presence or absence of any
+     * information within this object is browser-dependent.
+     *
+     * @private
+     * @constructor
+     * @augments Guacamole.Keyboard.KeyEvent
+     * @param {!KeyboardEvent} orig
+     *     The relevant DOM "keypress" event.
+     */
+    var KeypressEvent = function KeypressEvent(orig) {
+
+        // We extend KeyEvent
+        KeyEvent.call(this, orig);
+
+        // Pull keysym from char code
+        this.keysym = keysym_from_charcode(this.keyCode);
+
+        // Keypress is always reliable
+        this.reliable = true;
+
+    };
+
+    KeypressEvent.prototype = new KeyEvent();
+
+    /**
+     * Information related to the releasing of a key, which need not be a key
+     * associated with a printable character. The presence or absence of any
+     * information within this object is browser-dependent.
+     *
+     * @private
+     * @constructor
+     * @augments Guacamole.Keyboard.KeyEvent
+     * @param {!KeyboardEvent} orig
+     *     The relevant DOM "keyup" event.
+     */
+    var KeyupEvent = function KeyupEvent(orig) {
+
+        // We extend KeyEvent
+        KeyEvent.call(this, orig);
+
+        // If key is known from keyCode or DOM3 alone, use that (keyCode is
+        // still more reliable for keyup when dead keys are in use)
+        this.keysym =  keysym_from_keycode(this.keyCode, this.location)
+                    || keysym_from_key_identifier(this.key, this.location);
+
+        // Fall back to the most recently pressed keysym associated with the
+        // keyCode if the inferred key doesn't seem to actually be pressed
+        if (!guac_keyboard.pressed[this.keysym])
+            this.keysym = recentKeysym[this.keyCode] || this.keysym;
+
+        // Keyup is as reliable as it will ever be
+        this.reliable = true;
+
+    };
+
+    KeyupEvent.prototype = new KeyEvent();
+
+    /**
+     * An array of recorded events, which can be instances of the private
+     * KeydownEvent, KeypressEvent, and KeyupEvent classes.
+     *
+     * @private
+     * @type {!KeyEvent[]}
+     */
+    var eventLog = [];
+
+    /**
+     * Map of known JavaScript keycodes which do not map to typable characters
+     * to their X11 keysym equivalents.
+     *
+     * @private
+     * @type {!Object.<number, number[]>}
+     */
+    var keycodeKeysyms = {
+        8:   [0xFF08], // backspace
+        9:   [0xFF09], // tab
+        12:  [0xFF0B, 0xFF0B, 0xFF0B, 0xFFB5], // clear       / KP 5
+        13:  [0xFF0D], // enter
+        16:  [0xFFE1, 0xFFE1, 0xFFE2], // shift
+        17:  [0xFFE3, 0xFFE3, 0xFFE4], // ctrl
+        18:  [0xFFE9, 0xFFE9, 0xFE03], // alt
+        19:  [0xFF13], // pause/break
+        20:  [0xFFE5], // caps lock
+        27:  [0xFF1B], // escape
+        32:  [0x0020], // space
+        33:  [0xFF55, 0xFF55, 0xFF55, 0xFFB9], // page up     / KP 9
+        34:  [0xFF56, 0xFF56, 0xFF56, 0xFFB3], // page down   / KP 3
+        35:  [0xFF57, 0xFF57, 0xFF57, 0xFFB1], // end         / KP 1
+        36:  [0xFF50, 0xFF50, 0xFF50, 0xFFB7], // home        / KP 7
+        37:  [0xFF51, 0xFF51, 0xFF51, 0xFFB4], // left arrow  / KP 4
+        38:  [0xFF52, 0xFF52, 0xFF52, 0xFFB8], // up arrow    / KP 8
+        39:  [0xFF53, 0xFF53, 0xFF53, 0xFFB6], // right arrow / KP 6
+        40:  [0xFF54, 0xFF54, 0xFF54, 0xFFB2], // down arrow  / KP 2
+        45:  [0xFF63, 0xFF63, 0xFF63, 0xFFB0], // insert      / KP 0
+        46:  [0xFFFF, 0xFFFF, 0xFFFF, 0xFFAE], // delete      / KP decimal
+        91:  [0xFFE7], // left windows/command key (meta_l)
+        92:  [0xFFE8], // right window/command key (meta_r)
+        93:  [0xFF67], // menu key
+        96:  [0xFFB0], // KP 0
+        97:  [0xFFB1], // KP 1
+        98:  [0xFFB2], // KP 2
+        99:  [0xFFB3], // KP 3
+        100: [0xFFB4], // KP 4
+        101: [0xFFB5], // KP 5
+        102: [0xFFB6], // KP 6
+        103: [0xFFB7], // KP 7
+        104: [0xFFB8], // KP 8
+        105: [0xFFB9], // KP 9
+        106: [0xFFAA], // KP multiply
+        107: [0xFFAB], // KP add
+        109: [0xFFAD], // KP subtract
+        110: [0xFFAE], // KP decimal
+        111: [0xFFAF], // KP divide
+        112: [0xFFBE], // f1
+        113: [0xFFBF], // f2
+        114: [0xFFC0], // f3
+        115: [0xFFC1], // f4
+        116: [0xFFC2], // f5
+        117: [0xFFC3], // f6
+        118: [0xFFC4], // f7
+        119: [0xFFC5], // f8
+        120: [0xFFC6], // f9
+        121: [0xFFC7], // f10
+        122: [0xFFC8], // f11
+        123: [0xFFC9], // f12
+        144: [0xFF7F], // num lock
+        145: [0xFF14], // scroll lock
+        225: [0xFE03]  // altgraph (iso_level3_shift)
+    };
+
+    /**
+     * Map of known JavaScript keyidentifiers which do not map to typable
+     * characters to their unshifted X11 keysym equivalents.
+     *
+     * @private
+     * @type {!Object.<string, number[]>}
+     */
+    var keyidentifier_keysym = {
+        "Again": [0xFF66],
+        "AllCandidates": [0xFF3D],
+        "Alphanumeric": [0xFF30],
+        "Alt": [0xFFE9, 0xFFE9, 0xFE03],
+        "Attn": [0xFD0E],
+        "AltGraph": [0xFE03],
+        "ArrowDown": [0xFF54],
+        "ArrowLeft": [0xFF51],
+        "ArrowRight": [0xFF53],
+        "ArrowUp": [0xFF52],
+        "Backspace": [0xFF08],
+        "CapsLock": [0xFFE5],
+        "Cancel": [0xFF69],
+        "Clear": [0xFF0B],
+        "Convert": [0xFF21],
+        "Copy": [0xFD15],
+        "Crsel": [0xFD1C],
+        "CrSel": [0xFD1C],
+        "CodeInput": [0xFF37],
+        "Compose": [0xFF20],
+        "Control": [0xFFE3, 0xFFE3, 0xFFE4],
+        "ContextMenu": [0xFF67],
+        "Delete": [0xFFFF],
+        "Down": [0xFF54],
+        "End": [0xFF57],
+        "Enter": [0xFF0D],
+        "EraseEof": [0xFD06],
+        "Escape": [0xFF1B],
+        "Execute": [0xFF62],
+        "Exsel": [0xFD1D],
+        "ExSel": [0xFD1D],
+        "F1": [0xFFBE],
+        "F2": [0xFFBF],
+        "F3": [0xFFC0],
+        "F4": [0xFFC1],
+        "F5": [0xFFC2],
+        "F6": [0xFFC3],
+        "F7": [0xFFC4],
+        "F8": [0xFFC5],
+        "F9": [0xFFC6],
+        "F10": [0xFFC7],
+        "F11": [0xFFC8],
+        "F12": [0xFFC9],
+        "F13": [0xFFCA],
+        "F14": [0xFFCB],
+        "F15": [0xFFCC],
+        "F16": [0xFFCD],
+        "F17": [0xFFCE],
+        "F18": [0xFFCF],
+        "F19": [0xFFD0],
+        "F20": [0xFFD1],
+        "F21": [0xFFD2],
+        "F22": [0xFFD3],
+        "F23": [0xFFD4],
+        "F24": [0xFFD5],
+        "Find": [0xFF68],
+        "GroupFirst": [0xFE0C],
+        "GroupLast": [0xFE0E],
+        "GroupNext": [0xFE08],
+        "GroupPrevious": [0xFE0A],
+        "FullWidth": null,
+        "HalfWidth": null,
+        "HangulMode": [0xFF31],
+        "Hankaku": [0xFF29],
+        "HanjaMode": [0xFF34],
+        "Help": [0xFF6A],
+        "Hiragana": [0xFF25],
+        "HiraganaKatakana": [0xFF27],
+        "Home": [0xFF50],
+        "Hyper": [0xFFED, 0xFFED, 0xFFEE],
+        "Insert": [0xFF63],
+        "JapaneseHiragana": [0xFF25],
+        "JapaneseKatakana": [0xFF26],
+        "JapaneseRomaji": [0xFF24],
+        "JunjaMode": [0xFF38],
+        "KanaMode": [0xFF2D],
+        "KanjiMode": [0xFF21],
+        "Katakana": [0xFF26],
+        "Left": [0xFF51],
+        "Meta": [0xFFE7, 0xFFE7, 0xFFE8],
+        "ModeChange": [0xFF7E],
+        "NumLock": [0xFF7F],
+        "PageDown": [0xFF56],
+        "PageUp": [0xFF55],
+        "Pause": [0xFF13],
+        "Play": [0xFD16],
+        "PreviousCandidate": [0xFF3E],
+        "PrintScreen": [0xFF61],
+        "Redo": [0xFF66],
+        "Right": [0xFF53],
+        "RomanCharacters": null,
+        "Scroll": [0xFF14],
+        "Select": [0xFF60],
+        "Separator": [0xFFAC],
+        "Shift": [0xFFE1, 0xFFE1, 0xFFE2],
+        "SingleCandidate": [0xFF3C],
+        "Super": [0xFFEB, 0xFFEB, 0xFFEC],
+        "Tab": [0xFF09],
+        "UIKeyInputDownArrow": [0xFF54],
+        "UIKeyInputEscape": [0xFF1B],
+        "UIKeyInputLeftArrow": [0xFF51],
+        "UIKeyInputRightArrow": [0xFF53],
+        "UIKeyInputUpArrow": [0xFF52],
+        "Up": [0xFF52],
+        "Undo": [0xFF65],
+        "Win": [0xFFE7, 0xFFE7, 0xFFE8],
+        "Zenkaku": [0xFF28],
+        "ZenkakuHankaku": [0xFF2A]
+    };
+
+    /**
+     * All keysyms which should not repeat when held down.
+     *
+     * @private
+     * @type {!Object.<number, boolean>}
+     */
+    var no_repeat = {
+        0xFE03: true, // ISO Level 3 Shift (AltGr)
+        0xFFE1: true, // Left shift
+        0xFFE2: true, // Right shift
+        0xFFE3: true, // Left ctrl 
+        0xFFE4: true, // Right ctrl 
+        0xFFE5: true, // Caps Lock
+        0xFFE7: true, // Left meta 
+        0xFFE8: true, // Right meta 
+        0xFFE9: true, // Left alt
+        0xFFEA: true, // Right alt
+        0xFFEB: true, // Left super/hyper
+        0xFFEC: true  // Right super/hyper
+    };
+
+    /**
+     * All modifiers and their states.
+     *
+     * @type {!Guacamole.Keyboard.ModifierState}
+     */
+    this.modifiers = new Guacamole.Keyboard.ModifierState();
+        
+    /**
+     * The state of every key, indexed by keysym. If a particular key is
+     * pressed, the value of pressed for that keysym will be true. If a key
+     * is not currently pressed, it will not be defined. 
+     *
+     * @type {!Object.<number, boolean>}
+     */
+    this.pressed = {};
+
+    /**
+     * The state of every key, indexed by keysym, for strictly those keys whose
+     * status has been indirectly determined thorugh observation of other key
+     * events. If a particular key is implicitly pressed, the value of
+     * implicitlyPressed for that keysym will be true. If a key
+     * is not currently implicitly pressed (the key is not pressed OR the state
+     * of the key is explicitly known), it will not be defined.
+     *
+     * @private
+     * @type {!Object.<number, boolean>}
+     */
+    var implicitlyPressed = {};
+
+    /**
+     * The last result of calling the onkeydown handler for each key, indexed
+     * by keysym. This is used to prevent/allow default actions for key events,
+     * even when the onkeydown handler cannot be called again because the key
+     * is (theoretically) still pressed.
+     *
+     * @private
+     * @type {!Object.<number, boolean>}
+     */
+    var last_keydown_result = {};
+
+    /**
+     * The keysym most recently associated with a given keycode when keydown
+     * fired. This object maps keycodes to keysyms.
+     *
+     * @private
+     * @type {!Object.<number, number>}
+     */
+    var recentKeysym = {};
+
+    /**
+     * Timeout before key repeat starts.
+     *
+     * @private
+     * @type {number}
+     */
+    var key_repeat_timeout = null;
+
+    /**
+     * Interval which presses and releases the last key pressed while that
+     * key is still being held down.
+     *
+     * @private
+     * @type {number}
+     */
+    var key_repeat_interval = null;
+
+    /**
+     * Given an array of keysyms indexed by location, returns the keysym
+     * for the given location, or the keysym for the standard location if
+     * undefined.
+     * 
+     * @private
+     * @param {number[]} keysyms
+     *     An array of keysyms, where the index of the keysym in the array is
+     *     the location value.
+     *
+     * @param {!number} location
+     *     The location on the keyboard corresponding to the key pressed, as
+     *     defined at: http://www.w3.org/TR/DOM-Level-3-Events/#events-KeyboardEvent
+     */
+    var get_keysym = function get_keysym(keysyms, location) {
+
+        if (!keysyms)
+            return null;
+
+        return keysyms[location] || keysyms[0];
+    };
+
+    /**
+     * Returns true if the given keysym corresponds to a printable character,
+     * false otherwise.
+     *
+     * @param {!number} keysym
+     *     The keysym to check.
+     *
+     * @returns {!boolean}
+     *     true if the given keysym corresponds to a printable character,
+     *     false otherwise.
+     */
+    var isPrintable = function isPrintable(keysym) {
+
+        // Keysyms with Unicode equivalents are printable
+        return (keysym >= 0x00 && keysym <= 0xFF)
+            || (keysym & 0xFFFF0000) === 0x01000000;
+
+    };
+
+    function keysym_from_key_identifier(identifier, location, shifted) {
+
+        if (!identifier)
+            return null;
+
+        var typedCharacter;
+
+        // If identifier is U+xxxx, decode Unicode character 
+        var unicodePrefixLocation = identifier.indexOf("U+");
+        if (unicodePrefixLocation >= 0) {
+            var hex = identifier.substring(unicodePrefixLocation+2);
+            typedCharacter = String.fromCharCode(parseInt(hex, 16));
+        }
+
+        // If single character and not keypad, use that as typed character
+        else if (identifier.length === 1 && location !== 3)
+            typedCharacter = identifier;
+
+        // Otherwise, look up corresponding keysym
+        else
+            return get_keysym(keyidentifier_keysym[identifier], location);
+
+        // Alter case if necessary
+        if (shifted === true)
+            typedCharacter = typedCharacter.toUpperCase();
+        else if (shifted === false)
+            typedCharacter = typedCharacter.toLowerCase();
+
+        // Get codepoint
+        var codepoint = typedCharacter.charCodeAt(0);
+        return keysym_from_charcode(codepoint);
+
+    }
+
+    function isControlCharacter(codepoint) {
+        return codepoint <= 0x1F || (codepoint >= 0x7F && codepoint <= 0x9F);
+    }
+
+    function keysym_from_charcode(codepoint) {
+
+        // Keysyms for control characters
+        if (isControlCharacter(codepoint)) return 0xFF00 | codepoint;
+
+        // Keysyms for ASCII chars
+        if (codepoint >= 0x0000 && codepoint <= 0x00FF)
+            return codepoint;
+
+        // Keysyms for Unicode
+        if (codepoint >= 0x0100 && codepoint <= 0x10FFFF)
+            return 0x01000000 | codepoint;
+
+        return null;
+
+    }
+
+    function keysym_from_keycode(keyCode, location) {
+        return get_keysym(keycodeKeysyms[keyCode], location);
+    }
+
+    /**
+     * Heuristically detects if the legacy keyIdentifier property of
+     * a keydown/keyup event looks incorrectly derived. Chrome, and
+     * presumably others, will produce the keyIdentifier by assuming
+     * the keyCode is the Unicode codepoint for that key. This is not
+     * correct in all cases.
+     *
+     * @private
+     * @param {!number} keyCode
+     *     The keyCode from a browser keydown/keyup event.
+     *
+     * @param {string} keyIdentifier
+     *     The legacy keyIdentifier from a browser keydown/keyup event.
+     *
+     * @returns {!boolean}
+     *     true if the keyIdentifier looks sane, false if the keyIdentifier
+     *     appears incorrectly derived or is missing entirely.
+     */
+    var key_identifier_sane = function key_identifier_sane(keyCode, keyIdentifier) {
+
+        // Missing identifier is not sane
+        if (!keyIdentifier)
+            return false;
+
+        // Assume non-Unicode keyIdentifier values are sane
+        var unicodePrefixLocation = keyIdentifier.indexOf("U+");
+        if (unicodePrefixLocation === -1)
+            return true;
+
+        // If the Unicode codepoint isn't identical to the keyCode,
+        // then the identifier is likely correct
+        var codepoint = parseInt(keyIdentifier.substring(unicodePrefixLocation+2), 16);
+        if (keyCode !== codepoint)
+            return true;
+
+        // The keyCodes for A-Z and 0-9 are actually identical to their
+        // Unicode codepoints
+        if ((keyCode >= 65 && keyCode <= 90) || (keyCode >= 48 && keyCode <= 57))
+            return true;
+
+        // The keyIdentifier does NOT appear sane
+        return false;
+
+    };
+
+    /**
+     * Marks a key as pressed, firing the keydown event if registered. Key
+     * repeat for the pressed key will start after a delay if that key is
+     * not a modifier. The return value of this function depends on the
+     * return value of the keydown event handler, if any.
+     * 
+     * @param {number} keysym
+     *     The keysym of the key to press.
+     *
+     * @return {boolean}
+     *     true if event should NOT be canceled, false otherwise.
+     */
+    this.press = function(keysym) {
+
+        // Don't bother with pressing the key if the key is unknown
+        if (keysym === null) return;
+
+        // Only press if released
+        if (!guac_keyboard.pressed[keysym]) {
+
+            // Mark key as pressed
+            guac_keyboard.pressed[keysym] = true;
+
+            // Send key event
+            if (guac_keyboard.onkeydown) {
+                var result = guac_keyboard.onkeydown(keysym);
+                last_keydown_result[keysym] = result;
+
+                // Stop any current repeat
+                window.clearTimeout(key_repeat_timeout);
+                window.clearInterval(key_repeat_interval);
+
+                // Repeat after a delay as long as pressed
+                if (!no_repeat[keysym])
+                    key_repeat_timeout = window.setTimeout(function() {
+                        key_repeat_interval = window.setInterval(function() {
+                            guac_keyboard.onkeyup(keysym);
+                            guac_keyboard.onkeydown(keysym);
+                        }, 50);
+                    }, 500);
+
+                return result;
+            }
+        }
+
+        // Return the last keydown result by default, resort to false if unknown
+        return last_keydown_result[keysym] || false;
+
+    };
+
+    /**
+     * Marks a key as released, firing the keyup event if registered.
+     * 
+     * @param {number} keysym
+     *     The keysym of the key to release.
+     */
+    this.release = function(keysym) {
+
+        // Only release if pressed
+        if (guac_keyboard.pressed[keysym]) {
+            
+            // Mark key as released
+            delete guac_keyboard.pressed[keysym];
+            delete implicitlyPressed[keysym];
+
+            // Stop repeat
+            window.clearTimeout(key_repeat_timeout);
+            window.clearInterval(key_repeat_interval);
+
+            // Send key event
+            if (keysym !== null && guac_keyboard.onkeyup)
+                guac_keyboard.onkeyup(keysym);
+
+        }
+
+    };
+
+    /**
+     * Presses and releases the keys necessary to type the given string of
+     * text.
+     *
+     * @param {!string} str
+     *     The string to type.
+     */
+    this.type = function type(str) {
+
+        // Press/release the key corresponding to each character in the string
+        for (var i = 0; i < str.length; i++) {
+
+            // Determine keysym of current character
+            var codepoint = str.codePointAt ? str.codePointAt(i) : str.charCodeAt(i);
+            var keysym = keysym_from_charcode(codepoint);
+
+            // Press and release key for current character
+            guac_keyboard.press(keysym);
+            guac_keyboard.release(keysym);
+
+        }
+
+    };
+
+    /**
+     * Resets the state of this keyboard, releasing all keys, and firing keyup
+     * events for each released key.
+     */
+    this.reset = function() {
+
+        // Release all pressed keys
+        for (var keysym in guac_keyboard.pressed)
+            guac_keyboard.release(parseInt(keysym));
+
+        // Clear event log
+        eventLog = [];
+
+    };
+
+    /**
+     * Resynchronizes the remote state of the given modifier with its
+     * corresponding local modifier state, as dictated by
+     * {@link KeyEvent#modifiers} within the given key event, by pressing or
+     * releasing keysyms.
+     *
+     * @private
+     * @param {!string} modifier
+     *     The name of the {@link Guacamole.Keyboard.ModifierState} property
+     *     being updated.
+     *
+     * @param {!number[]} keysyms
+     *     The keysyms which represent the modifier being updated.
+     *
+     * @param {!KeyEvent} keyEvent
+     *     Guacamole's current best interpretation of the key event being
+     *     processed.
+     */
+    var updateModifierState = function updateModifierState(modifier,
+        keysyms, keyEvent) {
+
+        var localState = keyEvent.modifiers[modifier];
+        var remoteState = guac_keyboard.modifiers[modifier];
+
+        var i;
+
+        // Do not trust changes in modifier state for events directly involving
+        // that modifier: (1) the flag may erroneously be cleared despite
+        // another version of the same key still being held and (2) the change
+        // in flag may be due to the current event being processed, thus
+        // updating things here is at best redundant and at worst incorrect
+        if (keysyms.indexOf(keyEvent.keysym) !== -1)
+            return;
+
+        // Release all related keys if modifier is implicitly released
+        if (remoteState && localState === false) {
+            for (i = 0; i < keysyms.length; i++) {
+                guac_keyboard.release(keysyms[i]);
+            }
+        }
+
+        // Press if modifier is implicitly pressed
+        else if (!remoteState && localState) {
+
+            // Verify that modifier flag isn't already pressed or already set
+            // due to another version of the same key being held down
+            for (i = 0; i < keysyms.length; i++) {
+                if (guac_keyboard.pressed[keysyms[i]])
+                    return;
+            }
+
+            // Mark as implicitly pressed only if there is other information
+            // within the key event relating to a different key. Some
+            // platforms, such as iOS, will send essentially empty key events
+            // for modifier keys, using only the modifier flags to signal the
+            // identity of the key.
+            var keysym = keysyms[0];
+            if (keyEvent.keysym)
+                implicitlyPressed[keysym] = true;
+
+            guac_keyboard.press(keysym);
+
+        }
+
+    };
+
+    /**
+     * Given a keyboard event, updates the remote key state to match the local
+     * modifier state and remote based on the modifier flags within the event.
+     * This function pays no attention to keycodes.
+     *
+     * @private
+     * @param {!KeyEvent} keyEvent
+     *     Guacamole's current best interpretation of the key event being
+     *     processed.
+     */
+    var syncModifierStates = function syncModifierStates(keyEvent) {
+
+        // Resync state of alt
+        updateModifierState('alt', [
+            0xFFE9, // Left alt
+            0xFFEA, // Right alt
+            0xFE03  // AltGr
+        ], keyEvent);
+
+        // Resync state of shift
+        updateModifierState('shift', [
+            0xFFE1, // Left shift
+            0xFFE2  // Right shift
+        ], keyEvent);
+
+        // Resync state of ctrl
+        updateModifierState('ctrl', [
+            0xFFE3, // Left ctrl
+            0xFFE4  // Right ctrl
+        ], keyEvent);
+
+        // Resync state of meta
+        updateModifierState('meta', [
+            0xFFE7, // Left meta
+            0xFFE8  // Right meta
+        ], keyEvent);
+
+        // Resync state of hyper
+        updateModifierState('hyper', [
+            0xFFEB, // Left super/hyper
+            0xFFEC  // Right super/hyper
+        ], keyEvent);
+
+        // Update state
+        guac_keyboard.modifiers = keyEvent.modifiers;
+
+    };
+
+    /**
+     * Returns whether all currently pressed keys were implicitly pressed. A
+     * key is implicitly pressed if its status was inferred indirectly from
+     * inspection of other key events.
+     *
+     * @private
+     * @returns {!boolean}
+     *     true if all currently pressed keys were implicitly pressed, false
+     *     otherwise.
+     */
+    var isStateImplicit = function isStateImplicit() {
+
+        for (var keysym in guac_keyboard.pressed) {
+            if (!implicitlyPressed[keysym])
+                return false;
+        }
+
+        return true;
+
+    };
+
+    /**
+     * Reads through the event log, removing events from the head of the log
+     * when the corresponding true key presses are known (or as known as they
+     * can be).
+     * 
+     * @private
+     * @return {boolean}
+     *     Whether the default action of the latest event should be prevented.
+     */
+    function interpret_events() {
+
+        // Do not prevent default if no event could be interpreted
+        var handled_event = interpret_event();
+        if (!handled_event)
+            return false;
+
+        // Interpret as much as possible
+        var last_event;
+        do {
+            last_event = handled_event;
+            handled_event = interpret_event();
+        } while (handled_event !== null);
+
+        // Reset keyboard state if we cannot expect to receive any further
+        // keyup events
+        if (isStateImplicit())
+            guac_keyboard.reset();
+
+        return last_event.defaultPrevented;
+
+    }
+
+    /**
+     * Releases Ctrl+Alt, if both are currently pressed and the given keysym
+     * looks like a key that may require AltGr.
+     *
+     * @private
+     * @param {!number} keysym
+     *     The key that was just pressed.
+     */
+    var release_simulated_altgr = function release_simulated_altgr(keysym) {
+
+        // Both Ctrl+Alt must be pressed if simulated AltGr is in use
+        if (!guac_keyboard.modifiers.ctrl || !guac_keyboard.modifiers.alt)
+            return;
+
+        // Assume [A-Z] never require AltGr
+        if (keysym >= 0x0041 && keysym <= 0x005A)
+            return;
+
+        // Assume [a-z] never require AltGr
+        if (keysym >= 0x0061 && keysym <= 0x007A)
+            return;
+
+        // Release Ctrl+Alt if the keysym is printable
+        if (keysym <= 0xFF || (keysym & 0xFF000000) === 0x01000000) {
+            guac_keyboard.release(0xFFE3); // Left ctrl 
+            guac_keyboard.release(0xFFE4); // Right ctrl 
+            guac_keyboard.release(0xFFE9); // Left alt
+            guac_keyboard.release(0xFFEA); // Right alt
+        }
+
+    };
+
+    /**
+     * Reads through the event log, interpreting the first event, if possible,
+     * and returning that event. If no events can be interpreted, due to a
+     * total lack of events or the need for more events, null is returned. Any
+     * interpreted events are automatically removed from the log.
+     * 
+     * @private
+     * @return {KeyEvent}
+     *     The first key event in the log, if it can be interpreted, or null
+     *     otherwise.
+     */
+    var interpret_event = function interpret_event() {
+
+        // Peek at first event in log
+        var first = eventLog[0];
+        if (!first)
+            return null;
+
+        // Keydown event
+        if (first instanceof KeydownEvent) {
+
+            var keysym = null;
+            var accepted_events = [];
+
+            // Defer handling of Meta until it is known to be functioning as a
+            // modifier (it may otherwise actually be an alternative method for
+            // pressing a single key, such as Meta+Left for Home on ChromeOS)
+            if (first.keysym === 0xFFE7 || first.keysym === 0xFFE8) {
+
+                // Defer handling until further events exist to provide context
+                if (eventLog.length === 1)
+                    return null;
+
+                // Drop keydown if it turns out Meta does not actually apply
+                if (eventLog[1].keysym !== first.keysym) {
+                    if (!eventLog[1].modifiers.meta)
+                        return eventLog.shift();
+                }
+
+                // Drop duplicate keydown events while waiting to determine
+                // whether to acknowledge Meta (browser may repeat keydown
+                // while the key is held)
+                else if (eventLog[1] instanceof KeydownEvent)
+                    return eventLog.shift();
+
+            }
+
+            // If event itself is reliable, no need to wait for other events
+            if (first.reliable) {
+                keysym = first.keysym;
+                accepted_events = eventLog.splice(0, 1);
+            }
+
+            // If keydown is immediately followed by a keypress, use the indicated character
+            else if (eventLog[1] instanceof KeypressEvent) {
+                keysym = eventLog[1].keysym;
+                accepted_events = eventLog.splice(0, 2);
+            }
+
+            // If keydown is immediately followed by anything else, then no
+            // keypress can possibly occur to clarify this event, and we must
+            // handle it now
+            else if (eventLog[1]) {
+                keysym = first.keysym;
+                accepted_events = eventLog.splice(0, 1);
+            }
+
+            // Fire a key press if valid events were found
+            if (accepted_events.length > 0) {
+
+                syncModifierStates(first);
+
+                if (keysym) {
+
+                    // Fire event
+                    release_simulated_altgr(keysym);
+                    var defaultPrevented = !guac_keyboard.press(keysym);
+                    recentKeysym[first.keyCode] = keysym;
+
+                    // Release the key now if we cannot rely on the associated
+                    // keyup event
+                    if (!first.keyupReliable)
+                        guac_keyboard.release(keysym);
+
+                    // Record whether default was prevented
+                    for (var i=0; i<accepted_events.length; i++)
+                        accepted_events[i].defaultPrevented = defaultPrevented;
+
+                }
+
+                return first;
+
+            }
+
+        } // end if keydown
+
+        // Keyup event
+        else if (first instanceof KeyupEvent && !quirks.keyupUnreliable) {
+
+            // Release specific key if known
+            var keysym = first.keysym;
+            if (keysym) {
+                guac_keyboard.release(keysym);
+                delete recentKeysym[first.keyCode];
+                first.defaultPrevented = true;
+            }
+
+            // Otherwise, fall back to releasing all keys
+            else {
+                guac_keyboard.reset();
+                return first;
+            }
+
+            syncModifierStates(first);
+            return eventLog.shift();
+
+        } // end if keyup
+
+        // Ignore any other type of event (keypress by itself is invalid, and
+        // unreliable keyup events should simply be dumped)
+        else
+            return eventLog.shift();
+
+        // No event interpreted
+        return null;
+
+    };
+
+    /**
+     * Returns the keyboard location of the key associated with the given
+     * keyboard event. The location differentiates key events which otherwise
+     * have the same keycode, such as left shift vs. right shift.
+     *
+     * @private
+     * @param {!KeyboardEvent} e
+     *     A JavaScript keyboard event, as received through the DOM via a
+     *     "keydown", "keyup", or "keypress" handler.
+     *
+     * @returns {!number}
+     *     The location of the key event on the keyboard, as defined at:
+     *     http://www.w3.org/TR/DOM-Level-3-Events/#events-KeyboardEvent
+     */
+    var getEventLocation = function getEventLocation(e) {
+
+        // Use standard location, if possible
+        if ('location' in e)
+            return e.location;
+
+        // Failing that, attempt to use deprecated keyLocation
+        if ('keyLocation' in e)
+            return e.keyLocation;
+
+        // If no location is available, assume left side
+        return 0;
+
+    };
+
+    /**
+     * Attempts to mark the given Event as having been handled by this
+     * Guacamole.Keyboard. If the Event has already been marked as handled,
+     * false is returned.
+     *
+     * @param {!Event} e
+     *     The Event to mark.
+     *
+     * @returns {!boolean}
+     *     true if the given Event was successfully marked, false if the given
+     *     Event was already marked.
+     */
+    var markEvent = function markEvent(e) {
+
+        // Fail if event is already marked
+        if (e[EVENT_MARKER])
+            return false;
+
+        // Mark event otherwise
+        e[EVENT_MARKER] = true;
+        return true;
+
+    };
+
+    /**
+     * Attaches event listeners to the given Element, automatically translating
+     * received key, input, and composition events into simple keydown/keyup
+     * events signalled through this Guacamole.Keyboard's onkeydown and
+     * onkeyup handlers.
+     *
+     * @param {!(Element|Document)} element
+     *     The Element to attach event listeners to for the sake of handling
+     *     key or input events.
+     */
+    this.listenTo = function listenTo(element) {
+
+        // When key pressed
+        element.addEventListener("keydown", function(e) {
+
+            // Only intercept if handler set
+            if (!guac_keyboard.onkeydown) return;
+
+            // Ignore events which have already been handled
+            if (!markEvent(e)) return;
+
+            var keydownEvent = new KeydownEvent(e);
+
+            // Ignore (but do not prevent) the "composition" keycode sent by some
+            // browsers when an IME is in use (see: http://lists.w3.org/Archives/Public/www-dom/2010JulSep/att-0182/keyCode-spec.html)
+            if (keydownEvent.keyCode === 229)
+                return;
+
+            // Log event
+            eventLog.push(keydownEvent);
+
+            // Interpret as many events as possible, prevent default if indicated
+            if (interpret_events())
+                e.preventDefault();
+
+        }, true);
+
+        // When key pressed
+        element.addEventListener("keypress", function(e) {
+
+            // Only intercept if handler set
+            if (!guac_keyboard.onkeydown && !guac_keyboard.onkeyup) return;
+
+            // Ignore events which have already been handled
+            if (!markEvent(e)) return;
+
+            // Log event
+            eventLog.push(new KeypressEvent(e));
+
+            // Interpret as many events as possible, prevent default if indicated
+            if (interpret_events())
+                e.preventDefault();
+
+        }, true);
+
+        // When key released
+        element.addEventListener("keyup", function(e) {
+
+            // Only intercept if handler set
+            if (!guac_keyboard.onkeyup) return;
+
+            // Ignore events which have already been handled
+            if (!markEvent(e)) return;
+
+            e.preventDefault();
+
+            // Log event, call for interpretation
+            eventLog.push(new KeyupEvent(e));
+            interpret_events();
+
+        }, true);
+
+        /**
+         * Handles the given "input" event, typing the data within the input text.
+         * If the event is complete (text is provided), handling of "compositionend"
+         * events is suspended, as such events may conflict with input events.
+         *
+         * @private
+         * @param {!InputEvent} e
+         *     The "input" event to handle.
+         */
+        var handleInput = function handleInput(e) {
+
+            // Only intercept if handler set
+            if (!guac_keyboard.onkeydown && !guac_keyboard.onkeyup) return;
+
+            // Ignore events which have already been handled
+            if (!markEvent(e)) return;
+
+            // Type all content written
+            if (e.data && !e.isComposing) {
+                element.removeEventListener("compositionend", handleComposition, false);
+                guac_keyboard.type(e.data);
+            }
+
+        };
+
+        /**
+         * Handles the given "compositionend" event, typing the data within the
+         * composed text. If the event is complete (composed text is provided),
+         * handling of "input" events is suspended, as such events may conflict
+         * with composition events.
+         *
+         * @private
+         * @param {!CompositionEvent} e
+         *     The "compositionend" event to handle.
+         */
+        var handleComposition = function handleComposition(e) {
+
+            // Only intercept if handler set
+            if (!guac_keyboard.onkeydown && !guac_keyboard.onkeyup) return;
+
+            // Ignore events which have already been handled
+            if (!markEvent(e)) return;
+
+            // Type all content written
+            if (e.data) {
+                element.removeEventListener("input", handleInput, false);
+                guac_keyboard.type(e.data);
+            }
+
+        };
+
+        // Automatically type text entered into the wrapped field
+        element.addEventListener("input", handleInput, false);
+        element.addEventListener("compositionend", handleComposition, false);
+
+    };
+
+    // Listen to given element, if any
+    if (element)
+        guac_keyboard.listenTo(element);
+
+};
+
+/**
+ * The unique numerical identifier to assign to the next Guacamole.Keyboard
+ * instance.
+ *
+ * @private
+ * @type {!number}
+ */
+Guacamole.Keyboard._nextID = 0;
+
+/**
+ * The state of all supported keyboard modifiers.
+ * @constructor
+ */
+Guacamole.Keyboard.ModifierState = function() {
+    
+    /**
+     * Whether shift is currently pressed.
+     *
+     * @type {!boolean}
+     */
+    this.shift = false;
+    
+    /**
+     * Whether ctrl is currently pressed.
+     *
+     * @type {!boolean}
+     */
+    this.ctrl = false;
+    
+    /**
+     * Whether alt is currently pressed.
+     *
+     * @type {!boolean}
+     */
+    this.alt = false;
+    
+    /**
+     * Whether meta (apple key) is currently pressed.
+     *
+     * @type {!boolean}
+     */
+    this.meta = false;
+
+    /**
+     * Whether hyper (windows key) is currently pressed.
+     *
+     * @type {!boolean}
+     */
+    this.hyper = false;
+
+};
+
+/**
+ * Returns the modifier state applicable to the keyboard event given.
+ * 
+ * @param {!KeyboardEvent} e
+ *     The keyboard event to read.
+ *
+ * @returns {!Guacamole.Keyboard.ModifierState}
+ *     The current state of keyboard modifiers.
+ */
+Guacamole.Keyboard.ModifierState.fromKeyboardEvent = function(e) {
+    
+    var state = new Guacamole.Keyboard.ModifierState();
+
+    // Assign states from old flags
+    state.shift = e.shiftKey;
+    state.ctrl  = e.ctrlKey;
+    state.alt   = e.altKey;
+    state.meta  = e.metaKey;
+
+    // Use DOM3 getModifierState() for others
+    if (e.getModifierState) {
+        state.hyper = e.getModifierState("OS")
+                   || e.getModifierState("Super")
+                   || e.getModifierState("Hyper")
+                   || e.getModifierState("Win");
+    }
+
+    return state;
+    
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 4.0.2 on Sat Mar 30 2024 09:36:10 GMT-0700 (Pacific Daylight Time) +
+ + + + + diff --git a/doc/1.5.5/guacamole-common-js/main_webapp_modules_Layer.js.html b/doc/1.5.5/guacamole-common-js/main_webapp_modules_Layer.js.html new file mode 100644 index 000000000..b42806710 --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/main_webapp_modules_Layer.js.html @@ -0,0 +1,1203 @@ + + + + + JSDoc: Source: main/webapp/modules/Layer.js + + + + + + + + + + +
+ +

Source: main/webapp/modules/Layer.js

+ + + + + + +
+
+
/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+var Guacamole = Guacamole || {};
+
+/**
+ * Abstract ordered drawing surface. Each Layer contains a canvas element and
+ * provides simple drawing instructions for drawing to that canvas element,
+ * however unlike the canvas element itself, drawing operations on a Layer are
+ * guaranteed to run in order, even if such an operation must wait for an image
+ * to load before completing.
+ * 
+ * @constructor
+ * 
+ * @param {!number} width
+ *     The width of the Layer, in pixels. The canvas element backing this Layer
+ *     will be given this width.
+ *                       
+ * @param {!number} height
+ *     The height of the Layer, in pixels. The canvas element backing this
+ *     Layer will be given this height.
+ */
+Guacamole.Layer = function(width, height) {
+
+    /**
+     * Reference to this Layer.
+     *
+     * @private
+     * @type {!Guacamole.Layer}
+     */
+    var layer = this;
+
+    /**
+     * The number of pixels the width or height of a layer must change before
+     * the underlying canvas is resized. The underlying canvas will be kept at
+     * dimensions which are integer multiples of this factor.
+     *
+     * @private
+     * @constant
+     * @type {!number}
+     */
+    var CANVAS_SIZE_FACTOR = 64;
+
+    /**
+     * The canvas element backing this Layer.
+     *
+     * @private
+     * @type {!HTMLCanvasElement}
+     */
+    var canvas = document.createElement("canvas");
+
+    /**
+     * The 2D display context of the canvas element backing this Layer.
+     *
+     * @private
+     * @type {!CanvasRenderingContext2D}
+     */
+    var context = canvas.getContext("2d");
+    context.save();
+
+    /**
+     * Whether the layer has not yet been drawn to. Once any draw operation
+     * which affects the underlying canvas is invoked, this flag will be set to
+     * false.
+     *
+     * @private
+     * @type {!boolean}
+     */
+    var empty = true;
+
+    /**
+     * Whether a new path should be started with the next path drawing
+     * operations.
+     *
+     * @private
+     * @type {!boolean}
+     */
+    var pathClosed = true;
+
+    /**
+     * The number of states on the state stack.
+     * 
+     * Note that there will ALWAYS be one element on the stack, but that
+     * element is not exposed. It is only used to reset the layer to its
+     * initial state.
+     * 
+     * @private
+     * @type {!number}
+     */
+    var stackSize = 0;
+
+    /**
+     * Map of all Guacamole channel masks to HTML5 canvas composite operation
+     * names. Not all channel mask combinations are currently implemented.
+     *
+     * @private
+     * @type {!Object.<number, string>}
+     */
+    var compositeOperation = {
+     /* 0x0 NOT IMPLEMENTED */
+        0x1: "destination-in",
+        0x2: "destination-out",
+     /* 0x3 NOT IMPLEMENTED */
+        0x4: "source-in",
+     /* 0x5 NOT IMPLEMENTED */
+        0x6: "source-atop",
+     /* 0x7 NOT IMPLEMENTED */
+        0x8: "source-out",
+        0x9: "destination-atop",
+        0xA: "xor",
+        0xB: "destination-over",
+        0xC: "copy",
+     /* 0xD NOT IMPLEMENTED */
+        0xE: "source-over",
+        0xF: "lighter"
+    };
+
+    /**
+     * Resizes the canvas element backing this Layer. This function should only
+     * be used internally.
+     * 
+     * @private
+     * @param {number} [newWidth=0]
+     *     The new width to assign to this Layer.
+     *
+     * @param {number} [newHeight=0]
+     *     The new height to assign to this Layer.
+     */
+    var resize = function resize(newWidth, newHeight) {
+
+        // Default size to zero
+        newWidth = newWidth || 0;
+        newHeight = newHeight || 0;
+
+        // Calculate new dimensions of internal canvas
+        var canvasWidth  = Math.ceil(newWidth  / CANVAS_SIZE_FACTOR) * CANVAS_SIZE_FACTOR;
+        var canvasHeight = Math.ceil(newHeight / CANVAS_SIZE_FACTOR) * CANVAS_SIZE_FACTOR;
+
+        // Resize only if canvas dimensions are actually changing
+        if (canvas.width !== canvasWidth || canvas.height !== canvasHeight) {
+
+            // Copy old data only if relevant and non-empty
+            var oldData = null;
+            if (!empty && canvas.width !== 0 && canvas.height !== 0) {
+
+                // Create canvas and context for holding old data
+                oldData = document.createElement("canvas");
+                oldData.width = Math.min(layer.width, newWidth);
+                oldData.height = Math.min(layer.height, newHeight);
+
+                var oldDataContext = oldData.getContext("2d");
+
+                // Copy image data from current
+                oldDataContext.drawImage(canvas,
+                        0, 0, oldData.width, oldData.height,
+                        0, 0, oldData.width, oldData.height);
+
+            }
+
+            // Preserve composite operation
+            var oldCompositeOperation = context.globalCompositeOperation;
+
+            // Resize canvas
+            canvas.width = canvasWidth;
+            canvas.height = canvasHeight;
+
+            // Redraw old data, if any
+            if (oldData)
+                context.drawImage(oldData,
+                    0, 0, oldData.width, oldData.height,
+                    0, 0, oldData.width, oldData.height);
+
+            // Restore composite operation
+            context.globalCompositeOperation = oldCompositeOperation;
+
+            // Acknowledge reset of stack (happens on resize of canvas)
+            stackSize = 0;
+            context.save();
+
+        }
+
+        // If the canvas size is not changing, manually force state reset
+        else
+            layer.reset();
+
+        // Assign new layer dimensions
+        layer.width = newWidth;
+        layer.height = newHeight;
+
+    };
+
+    /**
+     * Given the X and Y coordinates of the upper-left corner of a rectangle
+     * and the rectangle's width and height, resize the backing canvas element
+     * as necessary to ensure that the rectangle fits within the canvas
+     * element's coordinate space. This function will only make the canvas
+     * larger. If the rectangle already fits within the canvas element's
+     * coordinate space, the canvas is left unchanged.
+     * 
+     * @private
+     * @param {!number} x
+     *     The X coordinate of the upper-left corner of the rectangle to fit.
+     *
+     * @param {!number} y
+     *     The Y coordinate of the upper-left corner of the rectangle to fit.
+     *
+     * @param {!number} w
+     *     The width of the rectangle to fit.
+     *
+     * @param {!number} h
+     *     The height of the rectangle to fit.
+     */
+    function fitRect(x, y, w, h) {
+        
+        // Calculate bounds
+        var opBoundX = w + x;
+        var opBoundY = h + y;
+        
+        // Determine max width
+        var resizeWidth;
+        if (opBoundX > layer.width)
+            resizeWidth = opBoundX;
+        else
+            resizeWidth = layer.width;
+
+        // Determine max height
+        var resizeHeight;
+        if (opBoundY > layer.height)
+            resizeHeight = opBoundY;
+        else
+            resizeHeight = layer.height;
+
+        // Resize if necessary
+        layer.resize(resizeWidth, resizeHeight);
+
+    }
+
+    /**
+     * Set to true if this Layer should resize itself to accommodate the
+     * dimensions of any drawing operation, and false (the default) otherwise.
+     * 
+     * Note that setting this property takes effect immediately, and thus may
+     * take effect on operations that were started in the past but have not
+     * yet completed. If you wish the setting of this flag to only modify
+     * future operations, you will need to make the setting of this flag an
+     * operation with sync().
+     * 
+     * @example
+     * // Set autosize to true for all future operations
+     * layer.sync(function() {
+     *     layer.autosize = true;
+     * });
+     * 
+     * @type {!boolean}
+     * @default false
+     */
+    this.autosize = false;
+
+    /**
+     * The current width of this layer.
+     *
+     * @type {!number}
+     */
+    this.width = width;
+
+    /**
+     * The current height of this layer.
+     *
+     * @type {!number}
+     */
+    this.height = height;
+
+    /**
+     * Returns the canvas element backing this Layer. Note that the dimensions
+     * of the canvas may not exactly match those of the Layer, as resizing a
+     * canvas while maintaining its state is an expensive operation.
+     *
+     * @returns {!HTMLCanvasElement}
+     *     The canvas element backing this Layer.
+     */
+    this.getCanvas = function getCanvas() {
+        return canvas;
+    };
+
+    /**
+     * Returns a new canvas element containing the same image as this Layer.
+     * Unlike getCanvas(), the canvas element returned is guaranteed to have
+     * the exact same dimensions as the Layer.
+     *
+     * @returns {!HTMLCanvasElement}
+     *     A new canvas element containing a copy of the image content this
+     *     Layer.
+     */
+    this.toCanvas = function toCanvas() {
+
+        // Create new canvas having same dimensions
+        var canvas = document.createElement('canvas');
+        canvas.width = layer.width;
+        canvas.height = layer.height;
+
+        // Copy image contents to new canvas
+        var context = canvas.getContext('2d');
+        context.drawImage(layer.getCanvas(), 0, 0);
+
+        return canvas;
+
+    };
+
+    /**
+     * Changes the size of this Layer to the given width and height. Resizing
+     * is only attempted if the new size provided is actually different from
+     * the current size.
+     * 
+     * @param {!number} newWidth
+     *     The new width to assign to this Layer.
+     *
+     * @param {!number} newHeight
+     *     The new height to assign to this Layer.
+     */
+    this.resize = function(newWidth, newHeight) {
+        if (newWidth !== layer.width || newHeight !== layer.height)
+            resize(newWidth, newHeight);
+    };
+
+    /**
+     * Draws the specified image at the given coordinates. The image specified
+     * must already be loaded.
+     * 
+     * @param {!number} x
+     *     The destination X coordinate.
+     *
+     * @param {!number} y
+     *     The destination Y coordinate.
+     *
+     * @param {!CanvasImageSource} image
+     *     The image to draw. Note that this is not a URL.
+     */
+    this.drawImage = function(x, y, image) {
+        if (layer.autosize) fitRect(x, y, image.width, image.height);
+        context.drawImage(image, x, y);
+        empty = false;
+    };
+
+    /**
+     * Transfer a rectangle of image data from one Layer to this Layer using the
+     * specified transfer function.
+     * 
+     * @param {!Guacamole.Layer} srcLayer
+     *     The Layer to copy image data from.
+     *
+     * @param {!number} srcx
+     *     The X coordinate of the upper-left corner of the rectangle within
+     *     the source Layer's coordinate space to copy data from.
+     *
+     * @param {!number} srcy
+     *     The Y coordinate of the upper-left corner of the rectangle within
+     *     the source Layer's coordinate space to copy data from.
+     *
+     * @param {!number} srcw
+     *     The width of the rectangle within the source Layer's coordinate
+     *     space to copy data from.
+     *
+     * @param {!number} srch
+     *     The height of the rectangle within the source Layer's coordinate
+     *     space to copy data from.
+     *
+     * @param {!number} x
+     *     The destination X coordinate.
+     *
+     * @param {!number} y
+     *     The destination Y coordinate.
+     *
+     * @param {!function} transferFunction
+     *     The transfer function to use to transfer data from source to
+     *     destination.
+     */
+    this.transfer = function(srcLayer, srcx, srcy, srcw, srch, x, y, transferFunction) {
+
+        var srcCanvas = srcLayer.getCanvas();
+
+        // If entire rectangle outside source canvas, stop
+        if (srcx >= srcCanvas.width || srcy >= srcCanvas.height) return;
+
+        // Otherwise, clip rectangle to area
+        if (srcx + srcw > srcCanvas.width)
+            srcw = srcCanvas.width - srcx;
+
+        if (srcy + srch > srcCanvas.height)
+            srch = srcCanvas.height - srcy;
+
+        // Stop if nothing to draw.
+        if (srcw === 0 || srch === 0) return;
+
+        if (layer.autosize) fitRect(x, y, srcw, srch);
+
+        // Get image data from src and dst
+        var src = srcLayer.getCanvas().getContext("2d").getImageData(srcx, srcy, srcw, srch);
+        var dst = context.getImageData(x , y, srcw, srch);
+
+        // Apply transfer for each pixel
+        for (var i=0; i<srcw*srch*4; i+=4) {
+
+            // Get source pixel environment
+            var src_pixel = new Guacamole.Layer.Pixel(
+                src.data[i],
+                src.data[i+1],
+                src.data[i+2],
+                src.data[i+3]
+            );
+                
+            // Get destination pixel environment
+            var dst_pixel = new Guacamole.Layer.Pixel(
+                dst.data[i],
+                dst.data[i+1],
+                dst.data[i+2],
+                dst.data[i+3]
+            );
+
+            // Apply transfer function
+            transferFunction(src_pixel, dst_pixel);
+
+            // Save pixel data
+            dst.data[i  ] = dst_pixel.red;
+            dst.data[i+1] = dst_pixel.green;
+            dst.data[i+2] = dst_pixel.blue;
+            dst.data[i+3] = dst_pixel.alpha;
+
+        }
+
+        // Draw image data
+        context.putImageData(dst, x, y);
+        empty = false;
+
+    };
+
+    /**
+     * Put a rectangle of image data from one Layer to this Layer directly
+     * without performing any alpha blending. Simply copy the data.
+     * 
+     * @param {!Guacamole.Layer} srcLayer
+     *     The Layer to copy image data from.
+     *
+     * @param {!number} srcx
+     *     The X coordinate of the upper-left corner of the rectangle within
+     *     the source Layer's coordinate space to copy data from.
+     *
+     * @param {!number} srcy
+     *     The Y coordinate of the upper-left corner of the rectangle within
+     *     the source Layer's coordinate space to copy data from.
+     *
+     * @param {!number} srcw
+     *     The width of the rectangle within the source Layer's coordinate
+     *     space to copy data from.
+     *
+     * @param {!number} srch
+     *     The height of the rectangle within the source Layer's coordinate
+     *     space to copy data from.
+     *
+     * @param {!number} x
+     *     The destination X coordinate.
+     *
+     * @param {!number} y
+     *     The destination Y coordinate.
+     */
+    this.put = function(srcLayer, srcx, srcy, srcw, srch, x, y) {
+
+        var srcCanvas = srcLayer.getCanvas();
+
+        // If entire rectangle outside source canvas, stop
+        if (srcx >= srcCanvas.width || srcy >= srcCanvas.height) return;
+
+        // Otherwise, clip rectangle to area
+        if (srcx + srcw > srcCanvas.width)
+            srcw = srcCanvas.width - srcx;
+
+        if (srcy + srch > srcCanvas.height)
+            srch = srcCanvas.height - srcy;
+
+        // Stop if nothing to draw.
+        if (srcw === 0 || srch === 0) return;
+
+        if (layer.autosize) fitRect(x, y, srcw, srch);
+
+        // Get image data from src and dst
+        var src = srcLayer.getCanvas().getContext("2d").getImageData(srcx, srcy, srcw, srch);
+        context.putImageData(src, x, y);
+        empty = false;
+
+    };
+
+    /**
+     * Copy a rectangle of image data from one Layer to this Layer. This
+     * operation will copy exactly the image data that will be drawn once all
+     * operations of the source Layer that were pending at the time this
+     * function was called are complete. This operation will not alter the
+     * size of the source Layer even if its autosize property is set to true.
+     * 
+     * @param {!Guacamole.Layer} srcLayer
+     *     The Layer to copy image data from.
+     *
+     * @param {!number} srcx
+     *     The X coordinate of the upper-left corner of the rectangle within
+     *     the source Layer's coordinate space to copy data from.
+     *
+     * @param {!number} srcy
+     *     The Y coordinate of the upper-left corner of the rectangle within
+     *     the source Layer's coordinate space to copy data from.
+     *
+     * @param {!number} srcw
+     *     The width of the rectangle within the source Layer's coordinate
+     *     space to copy data from.
+     *
+     * @param {!number} srch
+     *     The height of the rectangle within the source Layer's coordinate
+     *     space to copy data from.
+     *
+     * @param {!number} x
+     *     The destination X coordinate.
+     *
+     * @param {!number} y
+     *     The destination Y coordinate.
+     */
+    this.copy = function(srcLayer, srcx, srcy, srcw, srch, x, y) {
+
+        var srcCanvas = srcLayer.getCanvas();
+
+        // If entire rectangle outside source canvas, stop
+        if (srcx >= srcCanvas.width || srcy >= srcCanvas.height) return;
+
+        // Otherwise, clip rectangle to area
+        if (srcx + srcw > srcCanvas.width)
+            srcw = srcCanvas.width - srcx;
+
+        if (srcy + srch > srcCanvas.height)
+            srch = srcCanvas.height - srcy;
+
+        // Stop if nothing to draw.
+        if (srcw === 0 || srch === 0) return;
+
+        if (layer.autosize) fitRect(x, y, srcw, srch);
+        context.drawImage(srcCanvas, srcx, srcy, srcw, srch, x, y, srcw, srch);
+        empty = false;
+
+    };
+
+    /**
+     * Starts a new path at the specified point.
+     * 
+     * @param {!number} x
+     *     The X coordinate of the point to draw.
+     *
+     * @param {!number} y
+     *     The Y coordinate of the point to draw.
+     */
+    this.moveTo = function(x, y) {
+        
+        // Start a new path if current path is closed
+        if (pathClosed) {
+            context.beginPath();
+            pathClosed = false;
+        }
+        
+        if (layer.autosize) fitRect(x, y, 0, 0);
+        context.moveTo(x, y);
+
+    };
+
+    /**
+     * Add the specified line to the current path.
+     * 
+     * @param {!number} x
+     *     The X coordinate of the endpoint of the line to draw.
+     *
+     * @param {!number} y
+     *     The Y coordinate of the endpoint of the line to draw.
+     */
+    this.lineTo = function(x, y) {
+        
+        // Start a new path if current path is closed
+        if (pathClosed) {
+            context.beginPath();
+            pathClosed = false;
+        }
+        
+        if (layer.autosize) fitRect(x, y, 0, 0);
+        context.lineTo(x, y);
+        
+    };
+
+    /**
+     * Add the specified arc to the current path.
+     * 
+     * @param {!number} x
+     *     The X coordinate of the center of the circle which will contain the
+     *     arc.
+     *
+     * @param {!number} y
+     *     The Y coordinate of the center of the circle which will contain the
+     *     arc.
+     *
+     * @param {!number} radius
+     *     The radius of the circle.
+     *
+     * @param {!number} startAngle
+     *     The starting angle of the arc, in radians.
+     *
+     * @param {!number} endAngle
+     *     The ending angle of the arc, in radians.
+     *
+     * @param {!boolean} negative
+     *     Whether the arc should be drawn in order of decreasing angle.
+     */
+    this.arc = function(x, y, radius, startAngle, endAngle, negative) {
+        
+        // Start a new path if current path is closed
+        if (pathClosed) {
+            context.beginPath();
+            pathClosed = false;
+        }
+        
+        if (layer.autosize) fitRect(x, y, 0, 0);
+        context.arc(x, y, radius, startAngle, endAngle, negative);
+        
+    };
+
+    /**
+     * Starts a new path at the specified point.
+     * 
+     * @param {!number} cp1x
+     *     The X coordinate of the first control point.
+     *
+     * @param {!number} cp1y
+     *     The Y coordinate of the first control point.
+     *
+     * @param {!number} cp2x
+     *     The X coordinate of the second control point.
+     *
+     * @param {!number} cp2y
+     *     The Y coordinate of the second control point.
+     *
+     * @param {!number} x
+     *     The X coordinate of the endpoint of the curve.
+     *
+     * @param {!number} y
+     *     The Y coordinate of the endpoint of the curve.
+     */
+    this.curveTo = function(cp1x, cp1y, cp2x, cp2y, x, y) {
+        
+        // Start a new path if current path is closed
+        if (pathClosed) {
+            context.beginPath();
+            pathClosed = false;
+        }
+        
+        if (layer.autosize) fitRect(x, y, 0, 0);
+        context.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);
+        
+    };
+
+    /**
+     * Closes the current path by connecting the end point with the start
+     * point (if any) with a straight line.
+     */
+    this.close = function() {
+        context.closePath();
+        pathClosed = true;
+    };
+
+    /**
+     * Add the specified rectangle to the current path.
+     * 
+     * @param {!number} x
+     *     The X coordinate of the upper-left corner of the rectangle to draw.
+     *
+     * @param {!number} y
+     *     The Y coordinate of the upper-left corner of the rectangle to draw.
+     *
+     * @param {!number} w
+     *     The width of the rectangle to draw.
+     *
+     * @param {!number} h
+     *     The height of the rectangle to draw.
+     */
+    this.rect = function(x, y, w, h) {
+            
+        // Start a new path if current path is closed
+        if (pathClosed) {
+            context.beginPath();
+            pathClosed = false;
+        }
+        
+        if (layer.autosize) fitRect(x, y, w, h);
+        context.rect(x, y, w, h);
+        
+    };
+
+    /**
+     * Clip all future drawing operations by the current path. The current path
+     * is implicitly closed. The current path can continue to be reused
+     * for other operations (such as fillColor()) but a new path will be started
+     * once a path drawing operation (path() or rect()) is used.
+     */
+    this.clip = function() {
+
+        // Set new clipping region
+        context.clip();
+
+        // Path now implicitly closed
+        pathClosed = true;
+
+    };
+
+    /**
+     * Stroke the current path with the specified color. The current path
+     * is implicitly closed. The current path can continue to be reused
+     * for other operations (such as clip()) but a new path will be started
+     * once a path drawing operation (path() or rect()) is used.
+     * 
+     * @param {!string} cap
+     *     The line cap style. Can be "round", "square", or "butt".
+     *
+     * @param {!string} join
+     *     The line join style. Can be "round", "bevel", or "miter".
+     *
+     * @param {!number} thickness
+     *     The line thickness in pixels.
+     *
+     * @param {!number} r
+     *     The red component of the color to fill.
+     *
+     * @param {!number} g
+     *     The green component of the color to fill.
+     *
+     * @param {!number} b
+     *     The blue component of the color to fill.
+     *
+     * @param {!number} a
+     *     The alpha component of the color to fill.
+     */
+    this.strokeColor = function(cap, join, thickness, r, g, b, a) {
+
+        // Stroke with color
+        context.lineCap = cap;
+        context.lineJoin = join;
+        context.lineWidth = thickness;
+        context.strokeStyle = "rgba(" + r + "," + g + "," + b + "," + a/255.0 + ")";
+        context.stroke();
+        empty = false;
+
+        // Path now implicitly closed
+        pathClosed = true;
+
+    };
+
+    /**
+     * Fills the current path with the specified color. The current path
+     * is implicitly closed. The current path can continue to be reused
+     * for other operations (such as clip()) but a new path will be started
+     * once a path drawing operation (path() or rect()) is used.
+     * 
+     * @param {!number} r
+     *     The red component of the color to fill.
+     *
+     * @param {!number} g
+     *     The green component of the color to fill.
+     *
+     * @param {!number} b
+     *     The blue component of the color to fill.
+     *
+     * @param {!number} a
+     *     The alpha component of the color to fill.
+     */
+    this.fillColor = function(r, g, b, a) {
+
+        // Fill with color
+        context.fillStyle = "rgba(" + r + "," + g + "," + b + "," + a/255.0 + ")";
+        context.fill();
+        empty = false;
+
+        // Path now implicitly closed
+        pathClosed = true;
+
+    };
+
+    /**
+     * Stroke the current path with the image within the specified layer. The
+     * image data will be tiled infinitely within the stroke. The current path
+     * is implicitly closed. The current path can continue to be reused
+     * for other operations (such as clip()) but a new path will be started
+     * once a path drawing operation (path() or rect()) is used.
+     * 
+     * @param {!string} cap
+     *     The line cap style. Can be "round", "square", or "butt".
+     *
+     * @param {!string} join
+     *     The line join style. Can be "round", "bevel", or "miter".
+     *
+     * @param {!number} thickness
+     *     The line thickness in pixels.
+     *
+     * @param {!Guacamole.Layer} srcLayer
+     *     The layer to use as a repeating pattern within the stroke.
+     */
+    this.strokeLayer = function(cap, join, thickness, srcLayer) {
+
+        // Stroke with image data
+        context.lineCap = cap;
+        context.lineJoin = join;
+        context.lineWidth = thickness;
+        context.strokeStyle = context.createPattern(
+            srcLayer.getCanvas(),
+            "repeat"
+        );
+        context.stroke();
+        empty = false;
+
+        // Path now implicitly closed
+        pathClosed = true;
+
+    };
+
+    /**
+     * Fills the current path with the image within the specified layer. The
+     * image data will be tiled infinitely within the stroke. The current path
+     * is implicitly closed. The current path can continue to be reused
+     * for other operations (such as clip()) but a new path will be started
+     * once a path drawing operation (path() or rect()) is used.
+     * 
+     * @param {!Guacamole.Layer} srcLayer
+     *     The layer to use as a repeating pattern within the fill.
+     */
+    this.fillLayer = function(srcLayer) {
+
+        // Fill with image data 
+        context.fillStyle = context.createPattern(
+            srcLayer.getCanvas(),
+            "repeat"
+        );
+        context.fill();
+        empty = false;
+
+        // Path now implicitly closed
+        pathClosed = true;
+
+    };
+
+    /**
+     * Push current layer state onto stack.
+     */
+    this.push = function() {
+
+        // Save current state onto stack
+        context.save();
+        stackSize++;
+
+    };
+
+    /**
+     * Pop layer state off stack.
+     */
+    this.pop = function() {
+
+        // Restore current state from stack
+        if (stackSize > 0) {
+            context.restore();
+            stackSize--;
+        }
+
+    };
+
+    /**
+     * Reset the layer, clearing the stack, the current path, and any transform
+     * matrix.
+     */
+    this.reset = function() {
+
+        // Clear stack
+        while (stackSize > 0) {
+            context.restore();
+            stackSize--;
+        }
+
+        // Restore to initial state
+        context.restore();
+        context.save();
+
+        // Clear path
+        context.beginPath();
+        pathClosed = false;
+
+    };
+
+    /**
+     * Sets the given affine transform (defined with six values from the
+     * transform's matrix).
+     * 
+     * @param {!number} a
+     *     The first value in the affine transform's matrix.
+     *
+     * @param {!number} b
+     *     The second value in the affine transform's matrix.
+     *
+     * @param {!number} c
+     *     The third value in the affine transform's matrix.
+     *
+     * @param {!number} d
+     *     The fourth value in the affine transform's matrix.
+     *
+     * @param {!number} e
+     *     The fifth value in the affine transform's matrix.
+     *
+     * @param {!number} f
+     *     The sixth value in the affine transform's matrix.
+     */
+    this.setTransform = function(a, b, c, d, e, f) {
+        context.setTransform(
+            a, b, c,
+            d, e, f
+          /*0, 0, 1*/
+        );
+    };
+
+    /**
+     * Applies the given affine transform (defined with six values from the
+     * transform's matrix).
+     *
+     * @param {!number} a
+     *     The first value in the affine transform's matrix.
+     *
+     * @param {!number} b
+     *     The second value in the affine transform's matrix.
+     *
+     * @param {!number} c
+     *     The third value in the affine transform's matrix.
+     *
+     * @param {!number} d
+     *     The fourth value in the affine transform's matrix.
+     *
+     * @param {!number} e
+     *     The fifth value in the affine transform's matrix.
+     *
+     * @param {!number} f
+     *     The sixth value in the affine transform's matrix.
+     */
+    this.transform = function(a, b, c, d, e, f) {
+        context.transform(
+            a, b, c,
+            d, e, f
+          /*0, 0, 1*/
+        );
+    };
+
+    /**
+     * Sets the channel mask for future operations on this Layer.
+     * 
+     * The channel mask is a Guacamole-specific compositing operation identifier
+     * with a single bit representing each of four channels (in order): source
+     * image where destination transparent, source where destination opaque,
+     * destination where source transparent, and destination where source
+     * opaque.
+     * 
+     * @param {!number} mask
+     *     The channel mask for future operations on this Layer.
+     */
+    this.setChannelMask = function(mask) {
+        context.globalCompositeOperation = compositeOperation[mask];
+    };
+
+    /**
+     * Sets the miter limit for stroke operations using the miter join. This
+     * limit is the maximum ratio of the size of the miter join to the stroke
+     * width. If this ratio is exceeded, the miter will not be drawn for that
+     * joint of the path.
+     * 
+     * @param {!number} limit
+     *     The miter limit for stroke operations using the miter join.
+     */
+    this.setMiterLimit = function(limit) {
+        context.miterLimit = limit;
+    };
+
+    // Initialize canvas dimensions
+    resize(width, height);
+
+    // Explicitly render canvas below other elements in the layer (such as
+    // child layers). Chrome and others may fail to render layers properly
+    // without this.
+    canvas.style.zIndex = -1;
+
+};
+
+/**
+ * Channel mask for the composite operation "rout".
+ *
+ * @type {!number}
+ */
+Guacamole.Layer.ROUT  = 0x2;
+
+/**
+ * Channel mask for the composite operation "atop".
+ *
+ * @type {!number}
+ */
+Guacamole.Layer.ATOP  = 0x6;
+
+/**
+ * Channel mask for the composite operation "xor".
+ *
+ * @type {!number}
+ */
+Guacamole.Layer.XOR   = 0xA;
+
+/**
+ * Channel mask for the composite operation "rover".
+ *
+ * @type {!number}
+ */
+Guacamole.Layer.ROVER = 0xB;
+
+/**
+ * Channel mask for the composite operation "over".
+ *
+ * @type {!number}
+ */
+Guacamole.Layer.OVER  = 0xE;
+
+/**
+ * Channel mask for the composite operation "plus".
+ *
+ * @type {!number}
+ */
+Guacamole.Layer.PLUS  = 0xF;
+
+/**
+ * Channel mask for the composite operation "rin".
+ * Beware that WebKit-based browsers may leave the contents of the destination
+ * layer where the source layer is transparent, despite the definition of this
+ * operation.
+ *
+ * @type {!number}
+ */
+Guacamole.Layer.RIN   = 0x1;
+
+/**
+ * Channel mask for the composite operation "in".
+ * Beware that WebKit-based browsers may leave the contents of the destination
+ * layer where the source layer is transparent, despite the definition of this
+ * operation.
+ *
+ * @type {!number}
+ */
+Guacamole.Layer.IN    = 0x4;
+
+/**
+ * Channel mask for the composite operation "out".
+ * Beware that WebKit-based browsers may leave the contents of the destination
+ * layer where the source layer is transparent, despite the definition of this
+ * operation.
+ *
+ * @type {!number}
+ */
+Guacamole.Layer.OUT   = 0x8;
+
+/**
+ * Channel mask for the composite operation "ratop".
+ * Beware that WebKit-based browsers may leave the contents of the destination
+ * layer where the source layer is transparent, despite the definition of this
+ * operation.
+ *
+ * @type {!number}
+ */
+Guacamole.Layer.RATOP = 0x9;
+
+/**
+ * Channel mask for the composite operation "src".
+ * Beware that WebKit-based browsers may leave the contents of the destination
+ * layer where the source layer is transparent, despite the definition of this
+ * operation.
+ *
+ * @type {!number}
+ */
+Guacamole.Layer.SRC   = 0xC;
+
+/**
+ * Represents a single pixel of image data. All components have a minimum value
+ * of 0 and a maximum value of 255.
+ * 
+ * @constructor
+ * 
+ * @param {!number} r
+ *     The red component of this pixel.
+ *
+ * @param {!number} g
+ *     The green component of this pixel.
+ *
+ * @param {!number} b
+ *     The blue component of this pixel.
+ *
+ * @param {!number} a
+ *     The alpha component of this pixel.
+ */
+Guacamole.Layer.Pixel = function(r, g, b, a) {
+
+    /**
+     * The red component of this pixel, where 0 is the minimum value,
+     * and 255 is the maximum.
+     *
+     * @type {!number}
+     */
+    this.red   = r;
+
+    /**
+     * The green component of this pixel, where 0 is the minimum value,
+     * and 255 is the maximum.
+     *
+     * @type {!number}
+     */
+    this.green = g;
+
+    /**
+     * The blue component of this pixel, where 0 is the minimum value,
+     * and 255 is the maximum.
+     *
+     * @type {!number}
+     */
+    this.blue  = b;
+
+    /**
+     * The alpha component of this pixel, where 0 is the minimum value,
+     * and 255 is the maximum.
+     *
+     * @type {!number}
+     */
+    this.alpha = a;
+
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 4.0.2 on Sat Mar 30 2024 09:36:10 GMT-0700 (Pacific Daylight Time) +
+ + + + + diff --git a/doc/1.5.5/guacamole-common-js/main_webapp_modules_Mouse.js.html b/doc/1.5.5/guacamole-common-js/main_webapp_modules_Mouse.js.html new file mode 100644 index 000000000..30239c746 --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/main_webapp_modules_Mouse.js.html @@ -0,0 +1,1316 @@ + + + + + JSDoc: Source: main/webapp/modules/Mouse.js + + + + + + + + + + +
+ +

Source: main/webapp/modules/Mouse.js

+ + + + + + +
+
+
/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+var Guacamole = Guacamole || {};
+
+/**
+ * Provides cross-browser mouse events for a given element. The events of
+ * the given element are automatically populated with handlers that translate
+ * mouse events into a non-browser-specific event provided by the
+ * Guacamole.Mouse instance.
+ *
+ * @example
+ * var mouse = new Guacamole.Mouse(client.getDisplay().getElement());
+ *
+ * // Forward all mouse interaction over Guacamole connection
+ * mouse.onEach(['mousedown', 'mousemove', 'mouseup'], function sendMouseEvent(e) {
+ *     client.sendMouseState(e.state, true);
+ * });
+ *
+ * @example
+ * // Hide software cursor when mouse leaves display
+ * mouse.on('mouseout', function hideCursor() {
+ *     client.getDisplay().showCursor(false);
+ * });
+ *
+ * @constructor
+ * @augments Guacamole.Mouse.Event.Target
+ * @param {!Element} element
+ *     The Element to use to provide mouse events.
+ */
+Guacamole.Mouse = function Mouse(element) {
+
+    Guacamole.Mouse.Event.Target.call(this);
+
+    /**
+     * Reference to this Guacamole.Mouse.
+     *
+     * @private
+     * @type {!Guacamole.Mouse}
+     */
+    var guac_mouse = this;
+
+    /**
+     * The number of mousemove events to require before re-enabling mouse
+     * event handling after receiving a touch event.
+     *
+     * @type {!number}
+     */
+    this.touchMouseThreshold = 3;
+
+    /**
+     * The minimum amount of pixels scrolled required for a single scroll button
+     * click.
+     *
+     * @type {!number}
+     */
+    this.scrollThreshold = 53;
+
+    /**
+     * The number of pixels to scroll per line.
+     *
+     * @type {!number}
+     */
+    this.PIXELS_PER_LINE = 18;
+
+    /**
+     * The number of pixels to scroll per page.
+     *
+     * @type {!number}
+     */
+    this.PIXELS_PER_PAGE = this.PIXELS_PER_LINE * 16;
+
+    /**
+     * Array of {@link Guacamole.Mouse.State} button names corresponding to the
+     * mouse button indices used by DOM mouse events.
+     *
+     * @private
+     * @type {!string[]}
+     */
+    var MOUSE_BUTTONS = [
+        Guacamole.Mouse.State.Buttons.LEFT,
+        Guacamole.Mouse.State.Buttons.MIDDLE,
+        Guacamole.Mouse.State.Buttons.RIGHT
+    ];
+
+    /**
+     * Counter of mouse events to ignore. This decremented by mousemove, and
+     * while non-zero, mouse events will have no effect.
+     *
+     * @private
+     * @type {!number}
+     */
+    var ignore_mouse = 0;
+
+    /**
+     * Cumulative scroll delta amount. This value is accumulated through scroll
+     * events and results in scroll button clicks if it exceeds a certain
+     * threshold.
+     *
+     * @private
+     * @type {!number}
+     */
+    var scroll_delta = 0;
+
+    // Block context menu so right-click gets sent properly
+    element.addEventListener("contextmenu", function(e) {
+        Guacamole.Event.DOMEvent.cancelEvent(e);
+    }, false);
+
+    element.addEventListener("mousemove", function(e) {
+
+        // If ignoring events, decrement counter
+        if (ignore_mouse) {
+            Guacamole.Event.DOMEvent.cancelEvent(e);
+            ignore_mouse--;
+            return;
+        }
+
+        guac_mouse.move(Guacamole.Position.fromClientPosition(element, e.clientX, e.clientY), e);
+
+    }, false);
+
+    element.addEventListener("mousedown", function(e) {
+
+        // Do not handle if ignoring events
+        if (ignore_mouse) {
+            Guacamole.Event.DOMEvent.cancelEvent(e);
+            return;
+        }
+
+        var button = MOUSE_BUTTONS[e.button];
+        if (button)
+            guac_mouse.press(button, e);
+
+    }, false);
+
+    element.addEventListener("mouseup", function(e) {
+
+        // Do not handle if ignoring events
+        if (ignore_mouse) {
+            Guacamole.Event.DOMEvent.cancelEvent(e);
+            return;
+        }
+
+        var button = MOUSE_BUTTONS[e.button];
+        if (button)
+            guac_mouse.release(button, e);
+
+    }, false);
+
+    element.addEventListener("mouseout", function(e) {
+
+        // Get parent of the element the mouse pointer is leaving
+       	if (!e) e = window.event;
+
+        // Check that mouseout is due to actually LEAVING the element
+        var target = e.relatedTarget || e.toElement;
+        while (target) {
+            if (target === element)
+                return;
+            target = target.parentNode;
+        }
+
+        // Release all buttons and fire mouseout
+        guac_mouse.reset(e);
+        guac_mouse.out(e);
+
+    }, false);
+
+    // Override selection on mouse event element.
+    element.addEventListener("selectstart", function(e) {
+        Guacamole.Event.DOMEvent.cancelEvent(e);
+    }, false);
+
+    // Ignore all pending mouse events when touch events are the apparent source
+    function ignorePendingMouseEvents() { ignore_mouse = guac_mouse.touchMouseThreshold; }
+
+    element.addEventListener("touchmove",  ignorePendingMouseEvents, false);
+    element.addEventListener("touchstart", ignorePendingMouseEvents, false);
+    element.addEventListener("touchend",   ignorePendingMouseEvents, false);
+
+    // Scroll wheel support
+    function mousewheel_handler(e) {
+
+        // Determine approximate scroll amount (in pixels)
+        var delta = e.deltaY || -e.wheelDeltaY || -e.wheelDelta;
+
+        // If successfully retrieved scroll amount, convert to pixels if not
+        // already in pixels
+        if (delta) {
+
+            // Convert to pixels if delta was lines
+            if (e.deltaMode === 1)
+                delta = e.deltaY * guac_mouse.PIXELS_PER_LINE;
+
+            // Convert to pixels if delta was pages
+            else if (e.deltaMode === 2)
+                delta = e.deltaY * guac_mouse.PIXELS_PER_PAGE;
+
+        }
+
+        // Otherwise, assume legacy mousewheel event and line scrolling
+        else
+            delta = e.detail * guac_mouse.PIXELS_PER_LINE;
+        
+        // Update overall delta
+        scroll_delta += delta;
+
+        // Up
+        if (scroll_delta <= -guac_mouse.scrollThreshold) {
+
+            // Repeatedly click the up button until insufficient delta remains
+            do {
+                guac_mouse.click(Guacamole.Mouse.State.Buttons.UP);
+                scroll_delta += guac_mouse.scrollThreshold;
+            } while (scroll_delta <= -guac_mouse.scrollThreshold);
+
+            // Reset delta
+            scroll_delta = 0;
+
+        }
+
+        // Down
+        if (scroll_delta >= guac_mouse.scrollThreshold) {
+
+            // Repeatedly click the down button until insufficient delta remains
+            do {
+                guac_mouse.click(Guacamole.Mouse.State.Buttons.DOWN);
+                scroll_delta -= guac_mouse.scrollThreshold;
+            } while (scroll_delta >= guac_mouse.scrollThreshold);
+
+            // Reset delta
+            scroll_delta = 0;
+
+        }
+
+        // All scroll/wheel events must currently be cancelled regardless of
+        // whether the dispatched event is cancelled, as there is no Guacamole
+        // scroll event and thus no way to cancel scroll events that are
+        // smaller than required to produce an up/down click
+        Guacamole.Event.DOMEvent.cancelEvent(e);
+
+    }
+
+    element.addEventListener('DOMMouseScroll', mousewheel_handler, false);
+    element.addEventListener('mousewheel',     mousewheel_handler, false);
+    element.addEventListener('wheel',          mousewheel_handler, false);
+
+    /**
+     * Whether the browser supports CSS3 cursor styling, including hotspot
+     * coordinates.
+     *
+     * @private
+     * @type {!boolean}
+     */
+    var CSS3_CURSOR_SUPPORTED = (function() {
+
+        var div = document.createElement("div");
+
+        // If no cursor property at all, then no support
+        if (!("cursor" in div.style))
+            return false;
+
+        try {
+            // Apply simple 1x1 PNG
+            div.style.cursor = "url(data:image/png;base64,"
+                             + "iVBORw0KGgoAAAANSUhEUgAAAAEAAAAB"
+                             + "AQMAAAAl21bKAAAAA1BMVEX///+nxBvI"
+                             + "AAAACklEQVQI12NgAAAAAgAB4iG8MwAA"
+                             + "AABJRU5ErkJggg==) 0 0, auto";
+        }
+        catch (e) {
+            return false;
+        }
+
+        // Verify cursor property is set to URL with hotspot
+        return /\burl\([^()]*\)\s+0\s+0\b/.test(div.style.cursor || "");
+
+    })();
+
+    /**
+     * Changes the local mouse cursor to the given canvas, having the given
+     * hotspot coordinates. This affects styling of the element backing this
+     * Guacamole.Mouse only, and may fail depending on browser support for
+     * setting the mouse cursor.
+     * 
+     * If setting the local cursor is desired, it is up to the implementation
+     * to do something else, such as use the software cursor built into
+     * Guacamole.Display, if the local cursor cannot be set.
+     *
+     * @param {!HTMLCanvasElement} canvas
+     *     The cursor image.
+     *
+     * @param {!number} x
+     *     The X-coordinate of the cursor hotspot.
+     *
+     * @param {!number} y
+     *     The Y-coordinate of the cursor hotspot.
+     *
+     * @return {!boolean}
+     *     true if the cursor was successfully set, false if the cursor could
+     *     not be set for any reason.
+     */
+    this.setCursor = function(canvas, x, y) {
+
+        // Attempt to set via CSS3 cursor styling
+        if (CSS3_CURSOR_SUPPORTED) {
+            var dataURL = canvas.toDataURL('image/png');
+            element.style.cursor = "url(" + dataURL + ") " + x + " " + y + ", auto";
+            return true;
+        }
+
+        // Otherwise, setting cursor failed
+        return false;
+
+    };
+
+};
+
+/**
+ * The current state of a mouse, including position and buttons.
+ *
+ * @constructor
+ * @augments Guacamole.Position
+ * @param {Guacamole.Mouse.State|object} [template={}]
+ *     The object whose properties should be copied within the new
+ *     Guacamole.Mouse.State.
+ */
+Guacamole.Mouse.State = function State(template) {
+
+    /**
+     * Returns the template object that would be provided to the
+     * Guacamole.Mouse.State constructor to produce a new Guacamole.Mouse.State
+     * object with the properties specified. The order and type of arguments
+     * used by this function are identical to those accepted by the
+     * Guacamole.Mouse.State constructor of Apache Guacamole 1.3.0 and older.
+     *
+     * @private
+     * @param {!number} x
+     *     The X position of the mouse pointer in pixels.
+     *
+     * @param {!number} y
+     *     The Y position of the mouse pointer in pixels.
+     *
+     * @param {!boolean} left
+     *     Whether the left mouse button is pressed.
+     *
+     * @param {!boolean} middle
+     *     Whether the middle mouse button is pressed.
+     *
+     * @param {!boolean} right
+     *     Whether the right mouse button is pressed.
+     *
+     * @param {!boolean} up
+     *     Whether the up mouse button is pressed (the fourth button, usually
+     *     part of a scroll wheel).
+     *
+     * @param {!boolean} down
+     *     Whether the down mouse button is pressed (the fifth button, usually
+     *     part of a scroll wheel).
+     *
+     * @return {!object}
+     *     The equivalent template object that would be passed to the new
+     *     Guacamole.Mouse.State constructor.
+     */
+    var legacyConstructor = function legacyConstructor(x, y, left, middle, right, up, down) {
+        return {
+            x      : x,
+            y      : y,
+            left   : left,
+            middle : middle,
+            right  : right,
+            up     : up,
+            down   : down
+        };
+    };
+
+    // Accept old-style constructor, as well
+    if (arguments.length > 1)
+        template = legacyConstructor.apply(this, arguments);
+    else
+        template = template || {};
+
+    Guacamole.Position.call(this, template);
+
+    /**
+     * Whether the left mouse button is currently pressed.
+     *
+     * @type {!boolean}
+     * @default false
+     */
+    this.left = template.left || false;
+
+    /**
+     * Whether the middle mouse button is currently pressed.
+     *
+     * @type {!boolean}
+     * @default false
+     */
+    this.middle = template.middle || false;
+
+    /**
+     * Whether the right mouse button is currently pressed.
+     *
+     * @type {!boolean}
+     * @default false
+     */
+    this.right = template.right || false;
+
+    /**
+     * Whether the up mouse button is currently pressed. This is the fourth
+     * mouse button, associated with upward scrolling of the mouse scroll
+     * wheel.
+     *
+     * @type {!boolean}
+     * @default false
+     */
+    this.up = template.up || false;
+
+    /**
+     * Whether the down mouse button is currently pressed. This is the fifth 
+     * mouse button, associated with downward scrolling of the mouse scroll
+     * wheel.
+     *
+     * @type {!boolean}
+     * @default false
+     */
+    this.down = template.down || false;
+
+};
+
+/**
+ * All mouse buttons that may be represented by a
+ * {@link Guacamole.Mouse.State}. 
+ *
+ * @readonly
+ * @enum
+ */
+Guacamole.Mouse.State.Buttons = {
+
+    /**
+     * The name of the {@link Guacamole.Mouse.State} property representing the
+     * left mouse button.
+     *
+     * @constant
+     * @type {!string}
+     */
+    LEFT : 'left',
+
+    /**
+     * The name of the {@link Guacamole.Mouse.State} property representing the
+     * middle mouse button.
+     *
+     * @constant
+     * @type {!string}
+     */
+    MIDDLE : 'middle',
+
+    /**
+     * The name of the {@link Guacamole.Mouse.State} property representing the
+     * right mouse button.
+     *
+     * @constant
+     * @type {!string}
+     */
+    RIGHT : 'right',
+
+    /**
+     * The name of the {@link Guacamole.Mouse.State} property representing the
+     * up mouse button (the fourth mouse button, clicked when the mouse scroll
+     * wheel is scrolled up).
+     *
+     * @constant
+     * @type {!string}
+     */
+    UP : 'up',
+
+    /**
+     * The name of the {@link Guacamole.Mouse.State} property representing the
+     * down mouse button (the fifth mouse button, clicked when the mouse scroll
+     * wheel is scrolled up).
+     *
+     * @constant
+     * @type {!string}
+     */
+    DOWN : 'down'
+
+};
+
+/**
+ * Base event type for all mouse events. The mouse producing the event may be
+ * the user's local mouse (as with {@link Guacamole.Mouse}) or an emulated
+ * mouse (as with {@link Guacamole.Mouse.Touchpad}).
+ *
+ * @constructor
+ * @augments Guacamole.Event.DOMEvent
+ * @param {!string} type
+ *     The type name of the event ("mousedown", "mouseup", etc.)
+ *
+ * @param {!Guacamole.Mouse.State} state
+ *     The current mouse state.
+ *     
+ * @param {Event|Event[]} [events=[]]
+ *     The DOM events that are related to this event, if any.
+ */
+Guacamole.Mouse.Event = function MouseEvent(type, state, events) {
+
+    Guacamole.Event.DOMEvent.call(this, type, events);
+
+    /**
+     * The name of the event handler used by the Guacamole JavaScript API for
+     * this event prior to the migration to Guacamole.Event.Target.
+     *
+     * @private
+     * @constant
+     * @type {!string}
+     */
+    var legacyHandlerName = 'on' + this.type;
+
+    /**
+     * The current mouse state at the time this event was fired.
+     *
+     * @type {!Guacamole.Mouse.State}
+     */
+    this.state = state;
+
+    /**
+     * @inheritdoc
+     */
+    this.invokeLegacyHandler = function invokeLegacyHandler(target) {
+        if (target[legacyHandlerName]) {
+
+            this.preventDefault();
+            this.stopPropagation();
+
+            target[legacyHandlerName](this.state);
+
+        }
+    };
+
+};
+
+/**
+ * An object which can dispatch {@link Guacamole.Mouse.Event} objects
+ * representing mouse events. These mouse events may be produced from an actual
+ * mouse device (as with {@link Guacamole.Mouse}), from an emulated mouse
+ * device (as with {@link Guacamole.Mouse.Touchpad}, or may be programmatically
+ * generated (using functions like [dispatch()]{@link Guacamole.Mouse.Event.Target#dispatch},
+ * [press()]{@link Guacamole.Mouse.Event.Target#press}, and
+ * [release()]{@link Guacamole.Mouse.Event.Target#release}).
+ * 
+ * @constructor
+ * @augments Guacamole.Event.Target
+ */
+Guacamole.Mouse.Event.Target = function MouseEventTarget() {
+
+    Guacamole.Event.Target.call(this);
+
+    /**
+     * The current mouse state. The properties of this state are updated when
+     * mouse events fire. This state object is also passed in as a parameter to
+     * the handler of any mouse events.
+     *
+     * @type {!Guacamole.Mouse.State}
+     */
+    this.currentState = new Guacamole.Mouse.State();
+
+    /**
+     * Fired whenever a mouse button is effectively pressed. Depending on the
+     * object dispatching the event, this can be due to a true mouse button
+     * press ({@link Guacamole.Mouse}), an emulated mouse button press from a
+     * touch gesture ({@link Guacamole.Mouse.Touchpad} and
+     * {@link Guacamole.Mouse.Touchscreen}), or may be programmatically
+     * generated through [dispatch()]{@link Guacamole.Mouse.Event.Target#dispatch},
+     * [press()]{@link Guacamole.Mouse.Event.Target#press}, or
+     * [click()]{@link Guacamole.Mouse.Event.Target#click}.
+     *
+     * @event Guacamole.Mouse.Event.Target#mousedown
+     * @param {!Guacamole.Mouse.Event} event
+     *     The mousedown event that was fired.
+     */
+
+    /**
+     * Fired whenever a mouse button is effectively released. Depending on the
+     * object dispatching the event, this can be due to a true mouse button
+     * release ({@link Guacamole.Mouse}), an emulated mouse button release from
+     * a touch gesture ({@link Guacamole.Mouse.Touchpad} and
+     * {@link Guacamole.Mouse.Touchscreen}), or may be programmatically
+     * generated through [dispatch()]{@link Guacamole.Mouse.Event.Target#dispatch},
+     * [release()]{@link Guacamole.Mouse.Event.Target#release}, or
+     * [click()]{@link Guacamole.Mouse.Event.Target#click}.
+     *
+     * @event Guacamole.Mouse.Event.Target#mouseup
+     * @param {!Guacamole.Mouse.Event} event
+     *     The mouseup event that was fired.
+     */
+
+    /**
+     * Fired whenever the mouse pointer is effectively moved. Depending on the
+     * object dispatching the event, this can be due to true mouse movement
+     * ({@link Guacamole.Mouse}), emulated mouse movement from
+     * a touch gesture ({@link Guacamole.Mouse.Touchpad} and
+     * {@link Guacamole.Mouse.Touchscreen}), or may be programmatically
+     * generated through [dispatch()]{@link Guacamole.Mouse.Event.Target#dispatch},
+     * or [move()]{@link Guacamole.Mouse.Event.Target#move}.
+     *
+     * @event Guacamole.Mouse.Event.Target#mousemove
+     * @param {!Guacamole.Mouse.Event} event
+     *     The mousemove event that was fired.
+     */
+
+    /**
+     * Fired whenever the mouse pointer leaves the boundaries of the element
+     * being monitored for interaction. This will only ever be automatically
+     * fired due to movement of an actual mouse device via
+     * {@link Guacamole.Mouse} unless programmatically generated through
+     * [dispatch()]{@link Guacamole.Mouse.Event.Target#dispatch},
+     * or [out()]{@link Guacamole.Mouse.Event.Target#out}.
+     *
+     * @event Guacamole.Mouse.Event.Target#mouseout
+     * @param {!Guacamole.Mouse.Event} event
+     *     The mouseout event that was fired.
+     */
+
+    /**
+     * Presses the given mouse button, if it isn't already pressed. Valid
+     * button names are defined by {@link Guacamole.Mouse.State.Buttons} and
+     * correspond to the button-related properties of
+     * {@link Guacamole.Mouse.State}.
+     *
+     * @fires Guacamole.Mouse.Event.Target#mousedown
+     *
+     * @param {!string} button
+     *     The name of the mouse button to press, as defined by
+     *     {@link Guacamole.Mouse.State.Buttons}.
+     *
+     * @param {Event|Event[]} [events=[]]
+     *     The DOM events that are related to the mouse button press, if any.
+     */
+    this.press = function press(button, events) {
+        if (!this.currentState[button]) {
+            this.currentState[button] = true;
+            this.dispatch(new Guacamole.Mouse.Event('mousedown', this.currentState, events));
+        }
+    };
+
+    /**
+     * Releases the given mouse button, if it isn't already released. Valid
+     * button names are defined by {@link Guacamole.Mouse.State.Buttons} and
+     * correspond to the button-related properties of
+     * {@link Guacamole.Mouse.State}.
+     *
+     * @fires Guacamole.Mouse.Event.Target#mouseup
+     *
+     * @param {!string} button
+     *     The name of the mouse button to release, as defined by
+     *     {@link Guacamole.Mouse.State.Buttons}.
+     *
+     * @param {Event|Event[]} [events=[]]
+     *     The DOM events related to the mouse button release, if any.
+     */
+    this.release = function release(button, events) {
+        if (this.currentState[button]) {
+            this.currentState[button] = false;
+            this.dispatch(new Guacamole.Mouse.Event('mouseup', this.currentState, events));
+        }
+    };
+
+    /**
+     * Clicks (presses and releases) the given mouse button. Valid button
+     * names are defined by {@link Guacamole.Mouse.State.Buttons} and
+     * correspond to the button-related properties of
+     * {@link Guacamole.Mouse.State}.
+     *
+     * @fires Guacamole.Mouse.Event.Target#mousedown
+     * @fires Guacamole.Mouse.Event.Target#mouseup
+     *
+     * @param {!string} button
+     *     The name of the mouse button to click, as defined by
+     *     {@link Guacamole.Mouse.State.Buttons}.
+     *
+     * @param {Event|Event[]} [events=[]]
+     *     The DOM events related to the click, if any.
+     */
+    this.click = function click(button, events) {
+        this.press(button, events);
+        this.release(button, events);
+    };
+
+    /**
+     * Moves the mouse to the given coordinates.
+     *
+     * @fires Guacamole.Mouse.Event.Target#mousemove
+     *
+     * @param {!(Guacamole.Position|object)} position
+     *     The new coordinates of the mouse pointer. This object may be a
+     *     {@link Guacamole.Position} or any object with "x" and "y"
+     *     properties.
+     *
+     * @param {Event|Event[]} [events=[]]
+     *     The DOM events related to the mouse movement, if any.
+     */
+    this.move = function move(position, events) {
+
+        if (this.currentState.x !== position.x || this.currentState.y !== position.y) {
+            this.currentState.x = position.x;
+            this.currentState.y = position.y;
+            this.dispatch(new Guacamole.Mouse.Event('mousemove', this.currentState, events));
+        }
+
+    };
+
+    /**
+     * Notifies event listeners that the mouse pointer has left the boundaries
+     * of the area being monitored for mouse events.
+     *
+     * @fires Guacamole.Mouse.Event.Target#mouseout
+     *
+     * @param {Event|Event[]} [events=[]]
+     *     The DOM events related to the mouse leaving the boundaries of the
+     *     monitored object, if any.
+     */
+    this.out = function out(events) {
+        this.dispatch(new Guacamole.Mouse.Event('mouseout', this.currentState, events));
+    };
+
+    /**
+     * Releases all mouse buttons that are currently pressed. If all mouse
+     * buttons have already been released, this function has no effect.
+     *
+     * @fires Guacamole.Mouse.Event.Target#mouseup
+     *
+     * @param {Event|Event[]} [events=[]]
+     *     The DOM event related to all mouse buttons being released, if any.
+     */
+    this.reset = function reset(events) {
+        for (var button in Guacamole.Mouse.State.Buttons) {
+            this.release(Guacamole.Mouse.State.Buttons[button], events);
+        }
+    };
+
+};
+
+/**
+ * Provides cross-browser relative touch event translation for a given element.
+ * 
+ * Touch events are translated into mouse events as if the touches occurred
+ * on a touchpad (drag to push the mouse pointer, tap to click).
+ * 
+ * @example
+ * var touchpad = new Guacamole.Mouse.Touchpad(client.getDisplay().getElement());
+ *
+ * // Emulate a mouse using touchpad-style gestures, forwarding all mouse
+ * // interaction over Guacamole connection
+ * touchpad.onEach(['mousedown', 'mousemove', 'mouseup'], function sendMouseEvent(e) {
+ *
+ *     // Re-show software mouse cursor if possibly hidden by a prior call to
+ *     // showCursor(), such as a "mouseout" event handler that hides the
+ *     // cursor
+ *     client.getDisplay().showCursor(true);
+ *
+ *     client.sendMouseState(e.state, true);
+ *
+ * });
+ *
+ * @constructor
+ * @augments Guacamole.Mouse.Event.Target
+ * @param {!Element} element
+ *     The Element to use to provide touch events.
+ */
+Guacamole.Mouse.Touchpad = function Touchpad(element) {
+
+    Guacamole.Mouse.Event.Target.call(this);
+
+    /**
+     * The "mouseout" event will never be fired by Guacamole.Mouse.Touchpad.
+     *
+     * @ignore
+     * @event Guacamole.Mouse.Touchpad#mouseout
+     */
+
+    /**
+     * Reference to this Guacamole.Mouse.Touchpad.
+     *
+     * @private
+     * @type {!Guacamole.Mouse.Touchpad}
+     */
+    var guac_touchpad = this;
+
+    /**
+     * The distance a two-finger touch must move per scrollwheel event, in
+     * pixels.
+     *
+     * @type {!number}
+     */
+    this.scrollThreshold = 20 * (window.devicePixelRatio || 1);
+
+    /**
+     * The maximum number of milliseconds to wait for a touch to end for the
+     * gesture to be considered a click.
+     *
+     * @type {!number}
+     */
+    this.clickTimingThreshold = 250;
+
+    /**
+     * The maximum number of pixels to allow a touch to move for the gesture to
+     * be considered a click.
+     *
+     * @type {!number}
+     */
+    this.clickMoveThreshold = 10 * (window.devicePixelRatio || 1);
+
+    /**
+     * The current mouse state. The properties of this state are updated when
+     * mouse events fire. This state object is also passed in as a parameter to
+     * the handler of any mouse events.
+     * 
+     * @type {!Guacamole.Mouse.State}
+     */
+    this.currentState = new Guacamole.Mouse.State();
+
+    var touch_count = 0;
+    var last_touch_x = 0;
+    var last_touch_y = 0;
+    var last_touch_time = 0;
+    var pixels_moved = 0;
+
+    var touch_buttons = {
+        1: "left",
+        2: "right",
+        3: "middle"
+    };
+
+    var gesture_in_progress = false;
+    var click_release_timeout = null;
+
+    element.addEventListener("touchend", function(e) {
+        
+        e.preventDefault();
+            
+        // If we're handling a gesture AND this is the last touch
+        if (gesture_in_progress && e.touches.length === 0) {
+            
+            var time = new Date().getTime();
+
+            // Get corresponding mouse button
+            var button = touch_buttons[touch_count];
+
+            // If mouse already down, release anad clear timeout
+            if (guac_touchpad.currentState[button]) {
+
+                // Fire button up event
+                guac_touchpad.release(button, e);
+
+                // Clear timeout, if set
+                if (click_release_timeout) {
+                    window.clearTimeout(click_release_timeout);
+                    click_release_timeout = null;
+                }
+
+            }
+
+            // If single tap detected (based on time and distance)
+            if (time - last_touch_time <= guac_touchpad.clickTimingThreshold
+                    && pixels_moved < guac_touchpad.clickMoveThreshold) {
+
+                // Fire button down event
+                guac_touchpad.press(button, e);
+
+                // Delay mouse up - mouse up should be canceled if
+                // touchstart within timeout.
+                click_release_timeout = window.setTimeout(function() {
+                    
+                    // Fire button up event
+                    guac_touchpad.release(button, e);
+
+                    // Gesture now over
+                    gesture_in_progress = false;
+
+                }, guac_touchpad.clickTimingThreshold);
+
+            }
+
+            // If we're not waiting to see if this is a click, stop gesture
+            if (!click_release_timeout)
+                gesture_in_progress = false;
+
+        }
+
+    }, false);
+
+    element.addEventListener("touchstart", function(e) {
+
+        e.preventDefault();
+
+        // Track number of touches, but no more than three
+        touch_count = Math.min(e.touches.length, 3);
+
+        // Clear timeout, if set
+        if (click_release_timeout) {
+            window.clearTimeout(click_release_timeout);
+            click_release_timeout = null;
+        }
+
+        // Record initial touch location and time for touch movement
+        // and tap gestures
+        if (!gesture_in_progress) {
+
+            // Stop mouse events while touching
+            gesture_in_progress = true;
+
+            // Record touch location and time
+            var starting_touch = e.touches[0];
+            last_touch_x = starting_touch.clientX;
+            last_touch_y = starting_touch.clientY;
+            last_touch_time = new Date().getTime();
+            pixels_moved = 0;
+
+        }
+
+    }, false);
+
+    element.addEventListener("touchmove", function(e) {
+
+        e.preventDefault();
+
+        // Get change in touch location
+        var touch = e.touches[0];
+        var delta_x = touch.clientX - last_touch_x;
+        var delta_y = touch.clientY - last_touch_y;
+
+        // Track pixels moved
+        pixels_moved += Math.abs(delta_x) + Math.abs(delta_y);
+
+        // If only one touch involved, this is mouse move
+        if (touch_count === 1) {
+
+            // Calculate average velocity in Manhatten pixels per millisecond
+            var velocity = pixels_moved / (new Date().getTime() - last_touch_time);
+
+            // Scale mouse movement relative to velocity
+            var scale = 1 + velocity;
+
+            // Update mouse location
+            var position = new Guacamole.Position(guac_touchpad.currentState);
+            position.x += delta_x*scale;
+            position.y += delta_y*scale;
+
+            // Prevent mouse from leaving screen
+            position.x = Math.min(Math.max(0, position.x), element.offsetWidth - 1);
+            position.y = Math.min(Math.max(0, position.y), element.offsetHeight - 1);
+
+            // Fire movement event, if defined
+            guac_touchpad.move(position, e);
+
+            // Update touch location
+            last_touch_x = touch.clientX;
+            last_touch_y = touch.clientY;
+
+        }
+
+        // Interpret two-finger swipe as scrollwheel
+        else if (touch_count === 2) {
+
+            // If change in location passes threshold for scroll
+            if (Math.abs(delta_y) >= guac_touchpad.scrollThreshold) {
+
+                // Decide button based on Y movement direction
+                var button;
+                if (delta_y > 0) button = "down";
+                else             button = "up";
+
+                guac_touchpad.click(button, e);
+
+                // Only update touch location after a scroll has been
+                // detected
+                last_touch_x = touch.clientX;
+                last_touch_y = touch.clientY;
+
+            }
+
+        }
+
+    }, false);
+
+};
+
+/**
+ * Provides cross-browser absolute touch event translation for a given element.
+ *
+ * Touch events are translated into mouse events as if the touches occurred
+ * on a touchscreen (tapping anywhere on the screen clicks at that point,
+ * long-press to right-click).
+ *
+ * @example
+ * var touchscreen = new Guacamole.Mouse.Touchscreen(client.getDisplay().getElement());
+ *
+ * // Emulate a mouse using touchscreen-style gestures, forwarding all mouse
+ * // interaction over Guacamole connection
+ * touchscreen.onEach(['mousedown', 'mousemove', 'mouseup'], function sendMouseEvent(e) {
+ *
+ *     // Re-show software mouse cursor if possibly hidden by a prior call to
+ *     // showCursor(), such as a "mouseout" event handler that hides the
+ *     // cursor
+ *     client.getDisplay().showCursor(true);
+ *
+ *     client.sendMouseState(e.state, true);
+ *
+ * });
+ *
+ * @constructor
+ * @augments Guacamole.Mouse.Event.Target
+ * @param {!Element} element
+ *     The Element to use to provide touch events.
+ */
+Guacamole.Mouse.Touchscreen = function Touchscreen(element) {
+
+    Guacamole.Mouse.Event.Target.call(this);
+
+    /**
+     * The "mouseout" event will never be fired by Guacamole.Mouse.Touchscreen.
+     *
+     * @ignore
+     * @event Guacamole.Mouse.Touchscreen#mouseout
+     */
+
+    /**
+     * Reference to this Guacamole.Mouse.Touchscreen.
+     *
+     * @private
+     * @type {!Guacamole.Mouse.Touchscreen}
+     */
+    var guac_touchscreen = this;
+
+    /**
+     * Whether a gesture is known to be in progress. If false, touch events
+     * will be ignored.
+     *
+     * @private
+     * @type {!boolean}
+     */
+    var gesture_in_progress = false;
+
+    /**
+     * The start X location of a gesture.
+     *
+     * @private
+     * @type {number}
+     */
+    var gesture_start_x = null;
+
+    /**
+     * The start Y location of a gesture.
+     *
+     * @private
+     * @type {number}
+     */
+    var gesture_start_y = null;
+
+    /**
+     * The timeout associated with the delayed, cancellable click release.
+     *
+     * @private
+     * @type {number}
+     */
+    var click_release_timeout = null;
+
+    /**
+     * The timeout associated with long-press for right click.
+     *
+     * @private
+     * @type {number}
+     */
+    var long_press_timeout = null;
+
+    /**
+     * The distance a two-finger touch must move per scrollwheel event, in
+     * pixels.
+     *
+     * @type {!number}
+     */
+    this.scrollThreshold = 20 * (window.devicePixelRatio || 1);
+
+    /**
+     * The maximum number of milliseconds to wait for a touch to end for the
+     * gesture to be considered a click.
+     *
+     * @type {!number}
+     */
+    this.clickTimingThreshold = 250;
+
+    /**
+     * The maximum number of pixels to allow a touch to move for the gesture to
+     * be considered a click.
+     *
+     * @type {!number}
+     */
+    this.clickMoveThreshold = 16 * (window.devicePixelRatio || 1);
+
+    /**
+     * The amount of time a press must be held for long press to be
+     * detected.
+     */
+    this.longPressThreshold = 500;
+
+    /**
+     * Returns whether the given touch event exceeds the movement threshold for
+     * clicking, based on where the touch gesture began.
+     *
+     * @private
+     * @param {!TouchEvent} e
+     *     The touch event to check.
+     *
+     * @return {!boolean}
+     *     true if the movement threshold is exceeded, false otherwise.
+     */
+    function finger_moved(e) {
+        var touch = e.touches[0] || e.changedTouches[0];
+        var delta_x = touch.clientX - gesture_start_x;
+        var delta_y = touch.clientY - gesture_start_y;
+        return Math.sqrt(delta_x*delta_x + delta_y*delta_y) >= guac_touchscreen.clickMoveThreshold;
+    }
+
+    /**
+     * Begins a new gesture at the location of the first touch in the given
+     * touch event.
+     * 
+     * @private
+     * @param {!TouchEvent} e
+     *     The touch event beginning this new gesture.
+     */
+    function begin_gesture(e) {
+        var touch = e.touches[0];
+        gesture_in_progress = true;
+        gesture_start_x = touch.clientX;
+        gesture_start_y = touch.clientY;
+    }
+
+    /**
+     * End the current gesture entirely. Wait for all touches to be done before
+     * resuming gesture detection.
+     * 
+     * @private
+     */
+    function end_gesture() {
+        window.clearTimeout(click_release_timeout);
+        window.clearTimeout(long_press_timeout);
+        gesture_in_progress = false;
+    }
+
+    element.addEventListener("touchend", function(e) {
+
+        // Do not handle if no gesture
+        if (!gesture_in_progress)
+            return;
+
+        // Ignore if more than one touch
+        if (e.touches.length !== 0 || e.changedTouches.length !== 1) {
+            end_gesture();
+            return;
+        }
+
+        // Long-press, if any, is over
+        window.clearTimeout(long_press_timeout);
+
+        // Always release mouse button if pressed
+        guac_touchscreen.release(Guacamole.Mouse.State.Buttons.LEFT, e);
+
+        // If finger hasn't moved enough to cancel the click
+        if (!finger_moved(e)) {
+
+            e.preventDefault();
+
+            // If not yet pressed, press and start delay release
+            if (!guac_touchscreen.currentState.left) {
+
+                var touch = e.changedTouches[0];
+                guac_touchscreen.move(Guacamole.Position.fromClientPosition(element, touch.clientX, touch.clientY));
+                guac_touchscreen.press(Guacamole.Mouse.State.Buttons.LEFT, e);
+
+                // Release button after a delay, if not canceled
+                click_release_timeout = window.setTimeout(function() {
+                    guac_touchscreen.release(Guacamole.Mouse.State.Buttons.LEFT, e);
+                    end_gesture();
+                }, guac_touchscreen.clickTimingThreshold);
+
+            }
+
+        } // end if finger not moved
+
+    }, false);
+
+    element.addEventListener("touchstart", function(e) {
+
+        // Ignore if more than one touch
+        if (e.touches.length !== 1) {
+            end_gesture();
+            return;
+        }
+
+        e.preventDefault();
+
+        // New touch begins a new gesture
+        begin_gesture(e);
+
+        // Keep button pressed if tap after left click
+        window.clearTimeout(click_release_timeout);
+
+        // Click right button if this turns into a long-press
+        long_press_timeout = window.setTimeout(function() {
+            var touch = e.touches[0];
+            guac_touchscreen.move(Guacamole.Position.fromClientPosition(element, touch.clientX, touch.clientY));
+            guac_touchscreen.click(Guacamole.Mouse.State.Buttons.RIGHT, e);
+            end_gesture();
+        }, guac_touchscreen.longPressThreshold);
+
+    }, false);
+
+    element.addEventListener("touchmove", function(e) {
+
+        // Do not handle if no gesture
+        if (!gesture_in_progress)
+            return;
+
+        // Cancel long press if finger moved
+        if (finger_moved(e))
+            window.clearTimeout(long_press_timeout);
+
+        // Ignore if more than one touch
+        if (e.touches.length !== 1) {
+            end_gesture();
+            return;
+        }
+
+        // Update mouse position if dragging
+        if (guac_touchscreen.currentState.left) {
+
+            e.preventDefault();
+
+            // Update state
+            var touch = e.touches[0];
+            guac_touchscreen.move(Guacamole.Position.fromClientPosition(element, touch.clientX, touch.clientY), e);
+
+        }
+
+    }, false);
+
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 4.0.2 on Sat Mar 30 2024 09:36:10 GMT-0700 (Pacific Daylight Time) +
+ + + + + diff --git a/doc/1.5.5/guacamole-common-js/main_webapp_modules_Namespace.js.html b/doc/1.5.5/guacamole-common-js/main_webapp_modules_Namespace.js.html new file mode 100644 index 000000000..c299e3025 --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/main_webapp_modules_Namespace.js.html @@ -0,0 +1,77 @@ + + + + + JSDoc: Source: main/webapp/modules/Namespace.js + + + + + + + + + + +
+ +

Source: main/webapp/modules/Namespace.js

+ + + + + + +
+
+
/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * The namespace used by the Guacamole JavaScript API. Absolutely all classes
+ * defined by the Guacamole JavaScript API will be within this namespace.
+ *
+ * @namespace
+ */
+var Guacamole = Guacamole || {};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 4.0.2 on Sat Mar 30 2024 09:36:10 GMT-0700 (Pacific Daylight Time) +
+ + + + + diff --git a/doc/1.5.5/guacamole-common-js/main_webapp_modules_Object.js.html b/doc/1.5.5/guacamole-common-js/main_webapp_modules_Object.js.html new file mode 100644 index 000000000..9235238a7 --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/main_webapp_modules_Object.js.html @@ -0,0 +1,261 @@ + + + + + JSDoc: Source: main/webapp/modules/Object.js + + + + + + + + + + +
+ +

Source: main/webapp/modules/Object.js

+ + + + + + +
+
+
/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+var Guacamole = Guacamole || {};
+
+/**
+ * An object used by the Guacamole client to house arbitrarily-many named
+ * input and output streams.
+ * 
+ * @constructor
+ * @param {!Guacamole.Client} client
+ *     The client owning this object.
+ *
+ * @param {!number} index
+ *     The index of this object.
+ */
+Guacamole.Object = function guacamoleObject(client, index) {
+
+    /**
+     * Reference to this Guacamole.Object.
+     *
+     * @private
+     * @type {!Guacamole.Object}
+     */
+    var guacObject = this;
+
+    /**
+     * Map of stream name to corresponding queue of callbacks. The queue of
+     * callbacks is guaranteed to be in order of request.
+     *
+     * @private
+     * @type {!Object.<string, function[]>}
+     */
+    var bodyCallbacks = {};
+
+    /**
+     * Removes and returns the callback at the head of the callback queue for
+     * the stream having the given name. If no such callbacks exist, null is
+     * returned.
+     *
+     * @private
+     * @param {!string} name
+     *     The name of the stream to retrieve a callback for.
+     *
+     * @returns {function}
+     *     The next callback associated with the stream having the given name,
+     *     or null if no such callback exists.
+     */
+    var dequeueBodyCallback = function dequeueBodyCallback(name) {
+
+        // If no callbacks defined, simply return null
+        var callbacks = bodyCallbacks[name];
+        if (!callbacks)
+            return null;
+
+        // Otherwise, pull off first callback, deleting the queue if empty
+        var callback = callbacks.shift();
+        if (callbacks.length === 0)
+            delete bodyCallbacks[name];
+
+        // Return found callback
+        return callback;
+
+    };
+
+    /**
+     * Adds the given callback to the tail of the callback queue for the stream
+     * having the given name.
+     *
+     * @private
+     * @param {!string} name
+     *     The name of the stream to associate with the given callback.
+     *
+     * @param {!function} callback
+     *     The callback to add to the queue of the stream with the given name.
+     */
+    var enqueueBodyCallback = function enqueueBodyCallback(name, callback) {
+
+        // Get callback queue by name, creating first if necessary
+        var callbacks = bodyCallbacks[name];
+        if (!callbacks) {
+            callbacks = [];
+            bodyCallbacks[name] = callbacks;
+        }
+
+        // Add callback to end of queue
+        callbacks.push(callback);
+
+    };
+
+    /**
+     * The index of this object.
+     *
+     * @type {!number}
+     */
+    this.index = index;
+
+    /**
+     * Called when this object receives the body of a requested input stream.
+     * By default, all objects will invoke the callbacks provided to their
+     * requestInputStream() functions based on the name of the stream
+     * requested. This behavior can be overridden by specifying a different
+     * handler here.
+     *
+     * @event
+     * @param {!Guacamole.InputStream} inputStream
+     *     The input stream of the received body.
+     *
+     * @param {!string} mimetype
+     *     The mimetype of the data being received.
+     *
+     * @param {!string} name
+     *     The name of the stream whose body has been received.
+     */
+    this.onbody = function defaultBodyHandler(inputStream, mimetype, name) {
+
+        // Call queued callback for the received body, if any
+        var callback = dequeueBodyCallback(name);
+        if (callback)
+            callback(inputStream, mimetype);
+
+    };
+
+    /**
+     * Called when this object is being undefined. Once undefined, no further
+     * communication involving this object may occur.
+     * 
+     * @event
+     */
+    this.onundefine = null;
+
+    /**
+     * Requests read access to the input stream having the given name. If
+     * successful, a new input stream will be created.
+     *
+     * @param {!string} name
+     *     The name of the input stream to request.
+     *
+     * @param {function} [bodyCallback]
+     *     The callback to invoke when the body of the requested input stream
+     *     is received. This callback will be provided a Guacamole.InputStream
+     *     and its mimetype as its two only arguments. If the onbody handler of
+     *     this object is overridden, this callback will not be invoked.
+     */
+    this.requestInputStream = function requestInputStream(name, bodyCallback) {
+
+        // Queue body callback if provided
+        if (bodyCallback)
+            enqueueBodyCallback(name, bodyCallback);
+
+        // Send request for input stream
+        client.requestObjectInputStream(guacObject.index, name);
+
+    };
+
+    /**
+     * Creates a new output stream associated with this object and having the
+     * given mimetype and name. The legality of a mimetype and name is dictated
+     * by the object itself.
+     *
+     * @param {!string} mimetype
+     *     The mimetype of the data which will be sent to the output stream.
+     *
+     * @param {!string} name
+     *     The defined name of an output stream within this object.
+     *
+     * @returns {!Guacamole.OutputStream}
+     *     An output stream which will write blobs to the named output stream
+     *     of this object.
+     */
+    this.createOutputStream = function createOutputStream(mimetype, name) {
+        return client.createObjectOutputStream(guacObject.index, mimetype, name);
+    };
+
+};
+
+/**
+ * The reserved name denoting the root stream of any object. The contents of
+ * the root stream MUST be a JSON map of stream name to mimetype.
+ *
+ * @constant
+ * @type {!string}
+ */
+Guacamole.Object.ROOT_STREAM = '/';
+
+/**
+ * The mimetype of a stream containing JSON which maps available stream names
+ * to their corresponding mimetype. The root stream of a Guacamole.Object MUST
+ * have this mimetype.
+ *
+ * @constant
+ * @type {!string}
+ */
+Guacamole.Object.STREAM_INDEX_MIMETYPE = 'application/vnd.glyptodon.guacamole.stream-index+json';
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 4.0.2 on Sat Mar 30 2024 09:36:10 GMT-0700 (Pacific Daylight Time) +
+ + + + + diff --git a/doc/1.5.5/guacamole-common-js/main_webapp_modules_OnScreenKeyboard.js.html b/doc/1.5.5/guacamole-common-js/main_webapp_modules_OnScreenKeyboard.js.html new file mode 100644 index 000000000..3a1fd7d11 --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/main_webapp_modules_OnScreenKeyboard.js.html @@ -0,0 +1,998 @@ + + + + + JSDoc: Source: main/webapp/modules/OnScreenKeyboard.js + + + + + + + + + + +
+ +

Source: main/webapp/modules/OnScreenKeyboard.js

+ + + + + + +
+
+
/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+var Guacamole = Guacamole || {};
+
+/**
+ * Dynamic on-screen keyboard. Given the layout object for an on-screen
+ * keyboard, this object will construct a clickable on-screen keyboard with its
+ * own key events.
+ *
+ * @constructor
+ * @param {!Guacamole.OnScreenKeyboard.Layout} layout
+ *     The layout of the on-screen keyboard to display.
+ */
+Guacamole.OnScreenKeyboard = function(layout) {
+
+    /**
+     * Reference to this Guacamole.OnScreenKeyboard.
+     *
+     * @private
+     * @type {!Guacamole.OnScreenKeyboard}
+     */
+    var osk = this;
+
+    /**
+     * Map of currently-set modifiers to the keysym associated with their
+     * original press. When the modifier is cleared, this keysym must be
+     * released.
+     *
+     * @private
+     * @type {!Object.<String, Number>}
+     */
+    var modifierKeysyms = {};
+
+    /**
+     * Map of all key names to their current pressed states. If a key is not
+     * pressed, it may not be in this map at all, but all pressed keys will
+     * have a corresponding mapping to true.
+     *
+     * @private
+     * @type {!Object.<String, Boolean>}
+     */
+    var pressed = {};
+
+    /**
+     * All scalable elements which are part of the on-screen keyboard. Each
+     * scalable element is carefully controlled to ensure the interface layout
+     * and sizing remains constant, even on browsers that would otherwise
+     * experience rounding error due to unit conversions.
+     *
+     * @private
+     * @type {!ScaledElement[]}
+     */
+    var scaledElements = [];
+
+    /**
+     * Adds a CSS class to an element.
+     * 
+     * @private
+     * @function
+     * @param {!Element} element
+     *     The element to add a class to.
+     *
+     * @param {!string} classname
+     *     The name of the class to add.
+     */
+    var addClass = function addClass(element, classname) {
+
+        // If classList supported, use that
+        if (element.classList)
+            element.classList.add(classname);
+
+        // Otherwise, simply append the class
+        else
+            element.className += " " + classname;
+
+    };
+
+    /**
+     * Removes a CSS class from an element.
+     * 
+     * @private
+     * @function
+     * @param {!Element} element
+     *     The element to remove a class from.
+     *
+     * @param {!string} classname
+     *     The name of the class to remove.
+     */
+    var removeClass = function removeClass(element, classname) {
+
+        // If classList supported, use that
+        if (element.classList)
+            element.classList.remove(classname);
+
+        // Otherwise, manually filter out classes with given name
+        else {
+            element.className = element.className.replace(/([^ ]+)[ ]*/g,
+                function removeMatchingClasses(match, testClassname) {
+
+                    // If same class, remove
+                    if (testClassname === classname)
+                        return "";
+
+                    // Otherwise, allow
+                    return match;
+                    
+                }
+            );
+        }
+
+    };
+
+    /**
+     * Counter of mouse events to ignore. This decremented by mousemove, and
+     * while non-zero, mouse events will have no effect.
+     *
+     * @private
+     * @type {!number}
+     */
+    var ignoreMouse = 0;
+
+    /**
+     * Ignores all pending mouse events when touch events are the apparent
+     * source. Mouse events are ignored until at least touchMouseThreshold
+     * mouse events occur without corresponding touch events.
+     *
+     * @private
+     */
+    var ignorePendingMouseEvents = function ignorePendingMouseEvents() {
+        ignoreMouse = osk.touchMouseThreshold;
+    };
+
+    /**
+     * An element whose dimensions are maintained according to an arbitrary
+     * scale. The conversion factor for these arbitrary units to pixels is
+     * provided later via a call to scale().
+     *
+     * @private
+     * @constructor
+     * @param {!Element} element
+     *     The element whose scale should be maintained.
+     *
+     * @param {!number} width
+     *     The width of the element, in arbitrary units, relative to other
+     *     ScaledElements.
+     *
+     * @param {!number} height
+     *     The height of the element, in arbitrary units, relative to other
+     *     ScaledElements.
+     *     
+     * @param {boolean} [scaleFont=false]
+     *     Whether the line height and font size should be scaled as well.
+     */
+    var ScaledElement = function ScaledElement(element, width, height, scaleFont) {
+
+        /**
+         * The width of this ScaledElement, in arbitrary units, relative to
+         * other ScaledElements.
+         *
+         * @type {!number}
+         */
+         this.width = width;
+
+        /**
+         * The height of this ScaledElement, in arbitrary units, relative to
+         * other ScaledElements.
+         *
+         * @type {!number}
+         */
+         this.height = height;
+ 
+        /**
+         * Resizes the associated element, updating its dimensions according to
+         * the given pixels per unit.
+         *
+         * @param {!number} pixels
+         *     The number of pixels to assign per arbitrary unit.
+         */
+        this.scale = function(pixels) {
+
+            // Scale element width/height
+            element.style.width  = (width  * pixels) + "px";
+            element.style.height = (height * pixels) + "px";
+
+            // Scale font, if requested
+            if (scaleFont) {
+                element.style.lineHeight = (height * pixels) + "px";
+                element.style.fontSize   = pixels + "px";
+            }
+
+        };
+
+    };
+
+    /**
+     * Returns whether all modifiers having the given names are currently
+     * active.
+     *
+     * @private
+     * @param {!string[]} names
+     *     The names of all modifiers to test.
+     *
+     * @returns {!boolean}
+     *     true if all specified modifiers are pressed, false otherwise.
+     */
+    var modifiersPressed = function modifiersPressed(names) {
+
+        // If any required modifiers are not pressed, return false
+        for (var i=0; i < names.length; i++) {
+
+            // Test whether current modifier is pressed
+            var name = names[i];
+            if (!(name in modifierKeysyms))
+                return false;
+
+        }
+
+        // Otherwise, all required modifiers are pressed
+        return true;
+
+    };
+
+    /**
+     * Returns the single matching Key object associated with the key of the
+     * given name, where that Key object's requirements (such as pressed
+     * modifiers) are all currently satisfied.
+     *
+     * @private
+     * @param {!string} keyName
+     *     The name of the key to retrieve.
+     *
+     * @returns {Guacamole.OnScreenKeyboard.Key}
+     *     The Key object associated with the given name, where that object's
+     *     requirements are all currently satisfied, or null if no such Key
+     *     can be found.
+     */
+    var getActiveKey = function getActiveKey(keyName) {
+
+        // Get key array for given name
+        var keys = osk.keys[keyName];
+        if (!keys)
+            return null;
+
+        // Find last matching key
+        for (var i = keys.length - 1; i >= 0; i--) {
+
+            // Get candidate key
+            var candidate = keys[i];
+
+            // If all required modifiers are pressed, use that key
+            if (modifiersPressed(candidate.requires))
+                return candidate;
+
+        }
+
+        // No valid key
+        return null;
+
+    };
+
+    /**
+     * Presses the key having the given name, updating the associated key
+     * element with the "guac-keyboard-pressed" CSS class. If the key is
+     * already pressed, this function has no effect.
+     *
+     * @private
+     * @param {!string} keyName
+     *     The name of the key to press.
+     *
+     * @param {!string} keyElement
+     *     The element associated with the given key.
+     */
+    var press = function press(keyName, keyElement) {
+
+        // Press key if not yet pressed
+        if (!pressed[keyName]) {
+
+            addClass(keyElement, "guac-keyboard-pressed");
+
+            // Get current key based on modifier state
+            var key = getActiveKey(keyName);
+
+            // Update modifier state
+            if (key.modifier) {
+
+                // Construct classname for modifier
+                var modifierClass = "guac-keyboard-modifier-" + getCSSName(key.modifier);
+
+                // Retrieve originally-pressed keysym, if modifier was already pressed
+                var originalKeysym = modifierKeysyms[key.modifier];
+
+                // Activate modifier if not pressed
+                if (originalKeysym === undefined) {
+                    
+                    addClass(keyboard, modifierClass);
+                    modifierKeysyms[key.modifier] = key.keysym;
+                    
+                    // Send key event only if keysym is meaningful
+                    if (key.keysym && osk.onkeydown)
+                        osk.onkeydown(key.keysym);
+
+                }
+
+                // Deactivate if not pressed
+                else {
+
+                    removeClass(keyboard, modifierClass);
+                    delete modifierKeysyms[key.modifier];
+                    
+                    // Send key event only if original keysym is meaningful
+                    if (originalKeysym && osk.onkeyup)
+                        osk.onkeyup(originalKeysym);
+
+                }
+
+            }
+
+            // If not modifier, send key event now
+            else if (osk.onkeydown)
+                osk.onkeydown(key.keysym);
+
+            // Mark key as pressed
+            pressed[keyName] = true;
+
+        }
+
+    };
+
+    /**
+     * Releases the key having the given name, removing the
+     * "guac-keyboard-pressed" CSS class from the associated element. If the
+     * key is already released, this function has no effect.
+     *
+     * @private
+     * @param {!string} keyName
+     *     The name of the key to release.
+     *
+     * @param {!string} keyElement
+     *     The element associated with the given key.
+     */
+    var release = function release(keyName, keyElement) {
+
+        // Release key if currently pressed
+        if (pressed[keyName]) {
+
+            removeClass(keyElement, "guac-keyboard-pressed");
+
+            // Get current key based on modifier state
+            var key = getActiveKey(keyName);
+
+            // Send key event if not a modifier key
+            if (!key.modifier && osk.onkeyup)
+                osk.onkeyup(key.keysym);
+
+            // Mark key as released
+            pressed[keyName] = false;
+
+        }
+
+    };
+
+    // Create keyboard
+    var keyboard = document.createElement("div");
+    keyboard.className = "guac-keyboard";
+
+    // Do not allow selection or mouse movement to propagate/register.
+    keyboard.onselectstart =
+    keyboard.onmousemove   =
+    keyboard.onmouseup     =
+    keyboard.onmousedown   = function handleMouseEvents(e) {
+
+        // If ignoring events, decrement counter
+        if (ignoreMouse)
+            ignoreMouse--;
+
+        e.stopPropagation();
+        return false;
+
+    };
+
+    /**
+     * The number of mousemove events to require before re-enabling mouse
+     * event handling after receiving a touch event.
+     *
+     * @type {!number}
+     */
+    this.touchMouseThreshold = 3;
+
+    /**
+     * Fired whenever the user presses a key on this Guacamole.OnScreenKeyboard.
+     * 
+     * @event
+     * @param {!number} keysym
+     *     The keysym of the key being pressed.
+     */
+    this.onkeydown = null;
+
+    /**
+     * Fired whenever the user releases a key on this Guacamole.OnScreenKeyboard.
+     * 
+     * @event
+     * @param {!number} keysym
+     *     The keysym of the key being released.
+     */
+    this.onkeyup = null;
+
+    /**
+     * The keyboard layout provided at time of construction.
+     *
+     * @type {!Guacamole.OnScreenKeyboard.Layout}
+     */
+    this.layout = new Guacamole.OnScreenKeyboard.Layout(layout);
+
+    /**
+     * Returns the element containing the entire on-screen keyboard.
+     *
+     * @returns {!Element}
+     *     The element containing the entire on-screen keyboard.
+     */
+    this.getElement = function() {
+        return keyboard;
+    };
+
+    /**
+     * Resizes all elements within this Guacamole.OnScreenKeyboard such that
+     * the width is close to but does not exceed the specified width. The
+     * height of the keyboard is determined based on the width.
+     * 
+     * @param {!number} width
+     *     The width to resize this Guacamole.OnScreenKeyboard to, in pixels.
+     */
+    this.resize = function(width) {
+
+        // Get pixel size of a unit
+        var unit = Math.floor(width * 10 / osk.layout.width) / 10;
+
+        // Resize all scaled elements
+        for (var i=0; i<scaledElements.length; i++) {
+            var scaledElement = scaledElements[i];
+            scaledElement.scale(unit);
+        }
+
+    };
+
+    /**
+     * Given the name of a key and its corresponding definition, which may be
+     * an array of keys objects, a number (keysym), a string (key title), or a
+     * single key object, returns an array of key objects, deriving any missing
+     * properties as needed, and ensuring the key name is defined.
+     *
+     * @private
+     * @param {!string} name
+     *     The name of the key being coerced into an array of Key objects.
+     *
+     * @param {!(number|string|Guacamole.OnScreenKeyboard.Key|Guacamole.OnScreenKeyboard.Key[])} object
+     *     The object defining the behavior of the key having the given name,
+     *     which may be the title of the key (a string), the keysym (a number),
+     *     a single Key object, or an array of Key objects.
+     *     
+     * @returns {!Guacamole.OnScreenKeyboard.Key[]}
+     *     An array of all keys associated with the given name.
+     */
+    var asKeyArray = function asKeyArray(name, object) {
+
+        // If already an array, just coerce into a true Key[] 
+        if (object instanceof Array) {
+            var keys = [];
+            for (var i=0; i < object.length; i++) {
+                keys.push(new Guacamole.OnScreenKeyboard.Key(object[i], name));
+            }
+            return keys;
+        }
+
+        // Derive key object from keysym if that's all we have
+        if (typeof object === 'number') {
+            return [new Guacamole.OnScreenKeyboard.Key({
+                name   : name,
+                keysym : object
+            })];
+        }
+
+        // Derive key object from title if that's all we have
+        if (typeof object === 'string') {
+            return [new Guacamole.OnScreenKeyboard.Key({
+                name  : name,
+                title : object
+            })];
+        }
+
+        // Otherwise, assume it's already a key object, just not an array
+        return [new Guacamole.OnScreenKeyboard.Key(object, name)];
+
+    };
+
+    /**
+     * Converts the rather forgiving key mapping allowed by
+     * Guacamole.OnScreenKeyboard.Layout into a rigorous mapping of key name
+     * to key definition, where the key definition is always an array of Key
+     * objects.
+     *
+     * @private
+     * @param {!Object.<string, number|string|Guacamole.OnScreenKeyboard.Key|Guacamole.OnScreenKeyboard.Key[]>} keys
+     *     A mapping of key name to key definition, where the key definition is
+     *     the title of the key (a string), the keysym (a number), a single
+     *     Key object, or an array of Key objects.
+     *
+     * @returns {!Object.<string, Guacamole.OnScreenKeyboard.Key[]>}
+     *     A more-predictable mapping of key name to key definition, where the
+     *     key definition is always simply an array of Key objects.
+     */
+    var getKeys = function getKeys(keys) {
+
+        var keyArrays = {};
+
+        // Coerce all keys into individual key arrays
+        for (var name in layout.keys) {
+            keyArrays[name] = asKeyArray(name, keys[name]);
+        }
+
+        return keyArrays;
+
+    };
+
+    /**
+     * Map of all key names to their corresponding set of keys. Each key name
+     * may correspond to multiple keys due to the effect of modifiers.
+     *
+     * @type {!Object.<string, Guacamole.OnScreenKeyboard.Key[]>}
+     */
+    this.keys = getKeys(layout.keys);
+
+    /**
+     * Given an arbitrary string representing the name of some component of the
+     * on-screen keyboard, returns a string formatted for use as a CSS class
+     * name. The result will be lowercase. Word boundaries previously denoted
+     * by CamelCase will be replaced by individual hyphens, as will all
+     * contiguous non-alphanumeric characters.
+     *
+     * @private
+     * @param {!string} name
+     *     An arbitrary string representing the name of some component of the
+     *     on-screen keyboard.
+     *
+     * @returns {!string}
+     *     A string formatted for use as a CSS class name.
+     */
+    var getCSSName = function getCSSName(name) {
+
+        // Convert name from possibly-CamelCase to hyphenated lowercase
+        var cssName = name
+               .replace(/([a-z])([A-Z])/g, '$1-$2')
+               .replace(/[^A-Za-z0-9]+/g, '-')
+               .toLowerCase();
+
+        return cssName;
+
+    };
+
+    /**
+     * Appends DOM elements to the given element as dictated by the layout
+     * structure object provided. If a name is provided, an additional CSS
+     * class, prepended with "guac-keyboard-", will be added to the top-level
+     * element.
+     * 
+     * If the layout structure object is an array, all elements within that
+     * array will be recursively appended as children of a group, and the
+     * top-level element will be given the CSS class "guac-keyboard-group".
+     *
+     * If the layout structure object is an object, all properties within that
+     * object will be recursively appended as children of a group, and the
+     * top-level element will be given the CSS class "guac-keyboard-group". The
+     * name of each property will be applied as the name of each child object
+     * for the sake of CSS. Each property will be added in sorted order.
+     *
+     * If the layout structure object is a string, the key having that name
+     * will be appended. The key will be given the CSS class
+     * "guac-keyboard-key" and "guac-keyboard-key-NAME", where NAME is the name
+     * of the key. If the name of the key is a single character, this will
+     * first be transformed into the C-style hexadecimal literal for the
+     * Unicode codepoint of that character. For example, the key "A" would
+     * become "guac-keyboard-key-0x41".
+     * 
+     * If the layout structure object is a number, a gap of that size will be
+     * inserted. The gap will be given the CSS class "guac-keyboard-gap", and
+     * will be scaled according to the same size units as each key.
+     *
+     * @private
+     * @param {!Element} element
+     *     The element to append elements to.
+     *
+     * @param {!(Array|object|string|number)} object
+     *     The layout structure object to use when constructing the elements to
+     *     append.
+     *
+     * @param {string} [name]
+     *     The name of the top-level element being appended, if any.
+     */
+    var appendElements = function appendElements(element, object, name) {
+
+        var i;
+
+        // Create div which will become the group or key
+        var div = document.createElement('div');
+
+        // Add class based on name, if name given
+        if (name)
+            addClass(div, 'guac-keyboard-' + getCSSName(name));
+
+        // If an array, append each element
+        if (object instanceof Array) {
+
+            // Add group class
+            addClass(div, 'guac-keyboard-group');
+
+            // Append all elements of array
+            for (i=0; i < object.length; i++)
+                appendElements(div, object[i]);
+
+        }
+
+        // If an object, append each property value
+        else if (object instanceof Object) {
+
+            // Add group class
+            addClass(div, 'guac-keyboard-group');
+
+            // Append all children, sorted by name
+            var names = Object.keys(object).sort();
+            for (i=0; i < names.length; i++) {
+                var name = names[i];
+                appendElements(div, object[name], name);
+            }
+
+        }
+
+        // If a number, create as a gap 
+        else if (typeof object === 'number') {
+
+            // Add gap class
+            addClass(div, 'guac-keyboard-gap');
+
+            // Maintain scale
+            scaledElements.push(new ScaledElement(div, object, object));
+
+        }
+
+        // If a string, create as a key
+        else if (typeof object === 'string') {
+
+            // If key name is only one character, use codepoint for name
+            var keyName = object;
+            if (keyName.length === 1)
+                keyName = '0x' + keyName.charCodeAt(0).toString(16);
+
+            // Add key container class
+            addClass(div, 'guac-keyboard-key-container');
+
+            // Create key element which will contain all possible caps
+            var keyElement = document.createElement('div');
+            keyElement.className = 'guac-keyboard-key '
+                                 + 'guac-keyboard-key-' + getCSSName(keyName);
+
+            // Add all associated keys as caps within DOM
+            var keys = osk.keys[object];
+            if (keys) {
+                for (i=0; i < keys.length; i++) {
+
+                    // Get current key
+                    var key = keys[i];
+
+                    // Create cap element for key
+                    var capElement = document.createElement('div');
+                    capElement.className   = 'guac-keyboard-cap';
+                    capElement.textContent = key.title;
+
+                    // Add classes for any requirements
+                    for (var j=0; j < key.requires.length; j++) {
+                        var requirement = key.requires[j];
+                        addClass(capElement, 'guac-keyboard-requires-' + getCSSName(requirement));
+                        addClass(keyElement, 'guac-keyboard-uses-'     + getCSSName(requirement));
+                    }
+
+                    // Add cap to key within DOM
+                    keyElement.appendChild(capElement);
+
+                }
+            }
+
+            // Add key to DOM, maintain scale
+            div.appendChild(keyElement);
+            scaledElements.push(new ScaledElement(div, osk.layout.keyWidths[object] || 1, 1, true));
+
+            /**
+             * Handles a touch event which results in the pressing of an OSK
+             * key. Touch events will result in mouse events being ignored for
+             * touchMouseThreshold events.
+             *
+             * @private
+             * @param {!TouchEvent} e
+             *     The touch event being handled.
+             */
+            var touchPress = function touchPress(e) {
+                e.preventDefault();
+                ignoreMouse = osk.touchMouseThreshold;
+                press(object, keyElement);
+            };
+
+            /**
+             * Handles a touch event which results in the release of an OSK
+             * key. Touch events will result in mouse events being ignored for
+             * touchMouseThreshold events.
+             *
+             * @private
+             * @param {!TouchEvent} e
+             *     The touch event being handled.
+             */
+            var touchRelease = function touchRelease(e) {
+                e.preventDefault();
+                ignoreMouse = osk.touchMouseThreshold;
+                release(object, keyElement);
+            };
+
+            /**
+             * Handles a mouse event which results in the pressing of an OSK
+             * key. If mouse events are currently being ignored, this handler
+             * does nothing.
+             *
+             * @private
+             * @param {!MouseEvent} e
+             *     The touch event being handled.
+             */
+            var mousePress = function mousePress(e) {
+                e.preventDefault();
+                if (ignoreMouse === 0)
+                    press(object, keyElement);
+            };
+
+            /**
+             * Handles a mouse event which results in the release of an OSK
+             * key. If mouse events are currently being ignored, this handler
+             * does nothing.
+             *
+             * @private
+             * @param {!MouseEvent} e
+             *     The touch event being handled.
+             */
+            var mouseRelease = function mouseRelease(e) {
+                e.preventDefault();
+                if (ignoreMouse === 0)
+                    release(object, keyElement);
+            };
+
+            // Handle touch events on key
+            keyElement.addEventListener("touchstart", touchPress,   true);
+            keyElement.addEventListener("touchend",   touchRelease, true);
+
+            // Handle mouse events on key
+            keyElement.addEventListener("mousedown", mousePress,   true);
+            keyElement.addEventListener("mouseup",   mouseRelease, true);
+            keyElement.addEventListener("mouseout",  mouseRelease, true);
+
+        } // end if object is key name
+
+        // Add newly-created group/key
+        element.appendChild(div);
+
+    };
+
+    // Create keyboard layout in DOM
+    appendElements(keyboard, layout.layout);
+
+};
+
+/**
+ * Represents an entire on-screen keyboard layout, including all available
+ * keys, their behaviors, and their relative position and sizing.
+ *
+ * @constructor
+ * @param {!(Guacamole.OnScreenKeyboard.Layout|object)} template
+ *     The object whose identically-named properties will be used to initialize
+ *     the properties of this layout.
+ */
+Guacamole.OnScreenKeyboard.Layout = function(template) {
+
+    /**
+     * The language of keyboard layout, such as "en_US". This property is for
+     * informational purposes only, but it is recommend to conform to the
+     * [language code]_[country code] format.
+     *
+     * @type {!string}
+     */
+    this.language = template.language;
+
+    /**
+     * The type of keyboard layout, such as "qwerty". This property is for
+     * informational purposes only, and does not conform to any standard.
+     *
+     * @type {!string}
+     */
+    this.type = template.type;
+
+    /**
+     * Map of key name to corresponding keysym, title, or key object. If only
+     * the keysym or title is provided, the key object will be created
+     * implicitly. In all cases, the name property of the key object will be
+     * taken from the name given in the mapping.
+     *
+     * @type {!Object.<string, number|string|Guacamole.OnScreenKeyboard.Key|Guacamole.OnScreenKeyboard.Key[]>}
+     */
+    this.keys = template.keys;
+
+    /**
+     * Arbitrarily nested, arbitrarily grouped key names. The contents of the
+     * layout will be traversed to produce an identically-nested grouping of
+     * keys in the DOM tree. All strings will be transformed into their
+     * corresponding sets of keys, while all objects and arrays will be
+     * transformed into named groups and anonymous groups respectively. Any
+     * numbers present will be transformed into gaps of that size, scaled
+     * according to the same units as each key.
+     *
+     * @type {!object}
+     */
+    this.layout = template.layout;
+
+    /**
+     * The width of the entire keyboard, in arbitrary units. The width of each
+     * key is relative to this width, as both width values are assumed to be in
+     * the same units. The conversion factor between these units and pixels is
+     * derived later via a call to resize() on the Guacamole.OnScreenKeyboard.
+     *
+     * @type {!number}
+     */
+    this.width = template.width;
+
+    /**
+     * The width of each key, in arbitrary units, relative to other keys in
+     * this layout. The true pixel size of each key will be determined by the
+     * overall size of the keyboard. If not defined here, the width of each
+     * key will default to 1.
+     *
+     * @type {!Object.<string, number>}
+     */
+    this.keyWidths = template.keyWidths || {};
+
+};
+
+/**
+ * Represents a single key, or a single possible behavior of a key. Each key
+ * on the on-screen keyboard must have at least one associated
+ * Guacamole.OnScreenKeyboard.Key, whether that key is explicitly defined or
+ * implied, and may have multiple Guacamole.OnScreenKeyboard.Key if behavior
+ * depends on modifier states.
+ *
+ * @constructor
+ * @param {!(Guacamole.OnScreenKeyboard.Key|object)} template
+ *     The object whose identically-named properties will be used to initialize
+ *     the properties of this key.
+ *     
+ * @param {string} [name]
+ *     The name to use instead of any name provided within the template, if
+ *     any. If omitted, the name within the template will be used, assuming the
+ *     template contains a name.
+ */
+Guacamole.OnScreenKeyboard.Key = function(template, name) {
+
+    /**
+     * The unique name identifying this key within the keyboard layout.
+     *
+     * @type {!string}
+     */
+    this.name = name || template.name;
+
+    /**
+     * The human-readable title that will be displayed to the user within the
+     * key. If not provided, this will be derived from the key name.
+     *
+     * @type {!string}
+     */
+    this.title = template.title || this.name;
+
+    /**
+     * The keysym to be pressed/released when this key is pressed/released. If
+     * not provided, this will be derived from the title if the title is a
+     * single character.
+     *
+     * @type {number}
+     */
+    this.keysym = template.keysym || (function deriveKeysym(title) {
+
+        // Do not derive keysym if title is not exactly one character
+        if (!title || title.length !== 1)
+            return null;
+
+        // For characters between U+0000 and U+00FF, the keysym is the codepoint
+        var charCode = title.charCodeAt(0);
+        if (charCode >= 0x0000 && charCode <= 0x00FF)
+            return charCode;
+
+        // For characters between U+0100 and U+10FFFF, the keysym is the codepoint or'd with 0x01000000
+        if (charCode >= 0x0100 && charCode <= 0x10FFFF)
+            return 0x01000000 | charCode;
+
+        // Unable to derive keysym
+        return null;
+
+    })(this.title);
+
+    /**
+     * The name of the modifier set when the key is pressed and cleared when
+     * this key is released, if any. The names of modifiers are distinct from
+     * the names of keys; both the "RightShift" and "LeftShift" keys may set
+     * the "shift" modifier, for example. By default, the key will affect no
+     * modifiers.
+     * 
+     * @type {string}
+     */
+    this.modifier = template.modifier;
+
+    /**
+     * An array containing the names of each modifier required for this key to
+     * have an effect. For example, a lowercase letter may require nothing,
+     * while an uppercase letter would require "shift", assuming the Shift key
+     * is named "shift" within the layout. By default, the key will require
+     * no modifiers.
+     *
+     * @type {!string[]}
+     */
+    this.requires = template.requires || [];
+
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 4.0.2 on Sat Mar 30 2024 09:36:10 GMT-0700 (Pacific Daylight Time) +
+ + + + + diff --git a/doc/1.5.5/guacamole-common-js/main_webapp_modules_OutputStream.js.html b/doc/1.5.5/guacamole-common-js/main_webapp_modules_OutputStream.js.html new file mode 100644 index 000000000..ababdda74 --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/main_webapp_modules_OutputStream.js.html @@ -0,0 +1,126 @@ + + + + + JSDoc: Source: main/webapp/modules/OutputStream.js + + + + + + + + + + +
+ +

Source: main/webapp/modules/OutputStream.js

+ + + + + + +
+
+
/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+var Guacamole = Guacamole || {};
+
+/**
+ * Abstract stream which can receive data.
+ * 
+ * @constructor
+ * @param {!Guacamole.Client} client
+ *     The client owning this stream.
+ *
+ * @param {!number} index
+ *     The index of this stream.
+ */
+Guacamole.OutputStream = function(client, index) {
+
+    /**
+     * Reference to this stream.
+     *
+     * @private
+     * @type {!Guacamole.OutputStream}
+     */
+    var guac_stream = this;
+
+    /**
+     * The index of this stream.
+     * @type {!number}
+     */
+    this.index = index;
+
+    /**
+     * Fired whenever an acknowledgement is received from the server, indicating
+     * that a stream operation has completed, or an error has occurred.
+     * 
+     * @event
+     * @param {!Guacamole.Status} status
+     *     The status of the operation.
+     */
+    this.onack = null;
+
+    /**
+     * Writes the given base64-encoded data to this stream as a blob.
+     * 
+     * @param {!string} data
+     *     The base64-encoded data to send.
+     */
+    this.sendBlob = function(data) {
+        client.sendBlob(guac_stream.index, data);
+    };
+
+    /**
+     * Closes this stream.
+     */
+    this.sendEnd = function() {
+        client.endStream(guac_stream.index);
+    };
+
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 4.0.2 on Sat Mar 30 2024 09:36:10 GMT-0700 (Pacific Daylight Time) +
+ + + + + diff --git a/doc/1.5.5/guacamole-common-js/main_webapp_modules_Parser.js.html b/doc/1.5.5/guacamole-common-js/main_webapp_modules_Parser.js.html new file mode 100644 index 000000000..0c2abf03b --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/main_webapp_modules_Parser.js.html @@ -0,0 +1,399 @@ + + + + + JSDoc: Source: main/webapp/modules/Parser.js + + + + + + + + + + +
+ +

Source: main/webapp/modules/Parser.js

+ + + + + + +
+
+
/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+var Guacamole = Guacamole || {};
+
+/**
+ * Simple Guacamole protocol parser that invokes an oninstruction event when
+ * full instructions are available from data received via receive().
+ *
+ * @constructor
+ */
+Guacamole.Parser = function Parser() {
+
+    /**
+     * Reference to this parser.
+     *
+     * @private
+     * @type {!Guacamole.Parser}
+     */
+    var parser = this;
+
+    /**
+     * Current buffer of received data. This buffer grows until a full
+     * element is available. After a full element is available, that element
+     * is flushed into the element buffer.
+     *
+     * @private
+     * @type {!string}
+     */
+    var buffer = '';
+
+    /**
+     * Buffer of all received, complete elements. After an entire instruction
+     * is read, this buffer is flushed, and a new instruction begins.
+     *
+     * @private
+     * @type {!string[]}
+     */
+    var elementBuffer = [];
+
+    /**
+     * The character offset within the buffer of the current or most recently
+     * parsed element's terminator. If sufficient characters have not yet been
+     * read via calls to receive(), this may point to an offset well beyond the
+     * end of the buffer. If no characters for an element have yet been read,
+     * this will be -1.
+     *
+     * @private
+     * @type {!number}
+     */
+    var elementEnd = -1;
+
+    /**
+     * The character offset within the buffer of the location that the parser
+     * should start looking for the next element length search or next element
+     * value.
+     *
+     * @private
+     * @type {!number}
+     */
+    var startIndex = 0;
+
+    /**
+     * The declared length of the current element being parsed, in Unicode
+     * codepoints.
+     *
+     * @private
+     * @type {!number}
+     */
+    var elementCodepoints = 0;
+
+    /**
+     * The number of parsed characters that must accumulate in the begining of
+     * the parse buffer before processing time is expended to truncate that
+     * buffer and conserve memory.
+     *
+     * @private
+     * @constant
+     * @type {!number}
+     */
+    var BUFFER_TRUNCATION_THRESHOLD = 4096;
+
+    /**
+     * The lowest Unicode codepoint to require a surrogate pair when encoded
+     * with UTF-16. In UTF-16, characters with codepoints at or above this
+     * value are represented with a surrogate pair, while characters with
+     * codepoints below this value are represented with a single character.
+     *
+     * @private
+     * @constant
+     * @type {!number}
+     */
+    var MIN_CODEPOINT_REQUIRES_SURROGATE = 0x10000;
+
+    /**
+     * Appends the given instruction data packet to the internal buffer of
+     * this Guacamole.Parser, executing all completed instructions at
+     * the beginning of this buffer, if any.
+     *
+     * @param {!string} packet
+     *     The instruction data to receive.
+     *
+     * @param {!boolean} [isBuffer=false]
+     *     Whether the provided data should be treated as an instruction buffer
+     *     that grows continuously. If true, the data provided to receive()
+     *     MUST always start with the data provided to the previous call. If
+     *     false (the default), only the new data should be provided to
+     *     receive(), and previously-received data will automatically be
+     *     buffered by the parser as needed.
+     */
+    this.receive = function receive(packet, isBuffer) {
+
+        if (isBuffer)
+            buffer = packet;
+
+        else {
+
+            // Truncate buffer as necessary
+            if (startIndex > BUFFER_TRUNCATION_THRESHOLD && elementEnd >= startIndex) {
+
+                buffer = buffer.substring(startIndex);
+
+                // Reset parse relative to truncation
+                elementEnd -= startIndex;
+                startIndex = 0;
+
+            }
+
+            // Append data to buffer ONLY if there is outstanding data present. It
+            // is otherwise much faster to simply parse the received buffer as-is,
+            // and tunnel implementations can take advantage of this by preferring
+            // to send only complete instructions. Both the HTTP and WebSocket
+            // tunnel implementations included with Guacamole already do this.
+            if (buffer.length)
+                buffer += packet;
+            else
+                buffer = packet;
+
+        }
+
+        // While search is within currently received data
+        while (elementEnd < buffer.length) {
+
+            // If we are waiting for element data
+            if (elementEnd >= startIndex) {
+
+                // If we have enough data in the buffer to fill the element
+                // value, but the number of codepoints in the expected substring
+                // containing the element value value is less that its declared
+                // length, that can only be because the element contains
+                // characters split between high and low surrogates, and the
+                // actual end of the element value is further out. The minimum
+                // number of additional characters that must be read to satisfy
+                // the declared length is simply the difference between the
+                // number of codepoints actually present vs. the expected
+                // length.
+                var codepoints = Guacamole.Parser.codePointCount(buffer, startIndex, elementEnd);
+                if (codepoints < elementCodepoints) {
+                    elementEnd += elementCodepoints - codepoints;
+                    continue;
+                }
+
+                // If the current element ends with a character involving both
+                // a high and low surrogate, elementEnd points to the low
+                // surrogate and NOT the element terminator. We must shift the
+                // end and reevaluate.
+                else if (elementCodepoints && buffer.codePointAt(elementEnd - 1) >= MIN_CODEPOINT_REQUIRES_SURROGATE) {
+                    elementEnd++;
+                    continue;
+                }
+
+                // We now have enough data for the element. Parse.
+                var element = buffer.substring(startIndex, elementEnd);
+                var terminator = buffer.substring(elementEnd, elementEnd + 1);
+
+                // Add element to array
+                elementBuffer.push(element);
+
+                // If last element, handle instruction
+                if (terminator === ';') {
+
+                    // Get opcode
+                    var opcode = elementBuffer.shift();
+
+                    // Call instruction handler.
+                    if (parser.oninstruction !== null)
+                        parser.oninstruction(opcode, elementBuffer);
+
+                    // Clear elements
+                    elementBuffer = [];
+
+                    // Immediately truncate buffer if its contents have been
+                    // completely parsed, so that the next call to receive()
+                    // need not append to the buffer unnecessarily
+                    if (!isBuffer && elementEnd + 1 === buffer.length) {
+                        elementEnd = -1;
+                        buffer = '';
+                    }
+
+                }
+                else if (terminator !== ',')
+                    throw new Error('Element terminator of instruction was not ";" nor ",".');
+
+                // Start searching for length at character after
+                // element terminator
+                startIndex = elementEnd + 1;
+
+            }
+
+            // Search for end of length
+            var lengthEnd = buffer.indexOf('.', startIndex);
+            if (lengthEnd !== -1) {
+
+                // Parse length
+                elementCodepoints = parseInt(buffer.substring(elementEnd + 1, lengthEnd));
+                if (isNaN(elementCodepoints))
+                    throw new Error('Non-numeric character in element length.');
+
+                // Calculate start of element
+                startIndex = lengthEnd + 1;
+
+                // Calculate location of element terminator
+                elementEnd = startIndex + elementCodepoints;
+
+            }
+
+            // If no period yet, continue search when more data
+            // is received
+            else {
+                startIndex = buffer.length;
+                break;
+            }
+
+        } // end parse loop
+
+    };
+
+    /**
+     * Fired once for every complete Guacamole instruction received, in order.
+     *
+     * @event
+     * @param {!string} opcode
+     *     The Guacamole instruction opcode.
+     *
+     * @param {!string[]} parameters
+     *     The parameters provided for the instruction, if any.
+     */
+    this.oninstruction = null;
+
+};
+
+/**
+ * Returns the number of Unicode codepoints (not code units) within the given
+ * string. If character offsets are provided, only codepoints between those
+ * offsets are counted. Unlike the length property of a string, this function
+ * counts proper surrogate pairs as a single codepoint. High and low surrogate
+ * characters that are not part of a proper surrogate pair are counted
+ * separately as individual codepoints.
+ *
+ * @param {!string} str
+ *     The string whose contents should be inspected.
+ *
+ * @param {number} [start=0]
+ *     The index of the location in the given string where codepoint counting
+ *     should start. If omitted, counting will begin at the start of the
+ *     string.
+ *
+ * @param {number} [end]
+ *     The index of the first location in the given string after where counting
+ *     should stop (the character after the last character being counted). If
+ *     omitted, all characters after the start location will be counted.
+ *
+ * @returns {!number}
+ *     The number of Unicode codepoints within the requested portion of the
+ *     given string.
+ */
+Guacamole.Parser.codePointCount = function codePointCount(str, start, end) {
+
+    // Count only characters within the specified region
+    str = str.substring(start || 0, end);
+
+    // Locate each proper Unicode surrogate pair (one high surrogate followed
+    // by one low surrogate)
+    var surrogatePairs = str.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g);
+
+    // Each surrogate pair represents a single codepoint but is represented by
+    // two characters in a JavaScript string, and thus is counted twice toward
+    // string length. Subtracting the number of surrogate pairs adjusts that
+    // length value such that it gives us the number of codepoints.
+    return str.length - (surrogatePairs ? surrogatePairs.length : 0);
+
+};
+
+/**
+ * Converts each of the values within the given array to strings, formatting
+ * those strings as length-prefixed elements of a complete Guacamole
+ * instruction.
+ *
+ * @param {!Array.<*>} elements
+ *     The values that should be encoded as the elements of a Guacamole
+ *     instruction. Order of these elements is preserved. This array MUST have
+ *     at least one element.
+ *
+ * @returns {!string}
+ *     A complete Guacamole instruction consisting of each of the provided
+ *     element values, in order.
+ */
+Guacamole.Parser.toInstruction = function toInstruction(elements) {
+
+    /**
+     * Converts the given value to a length/string pair for use as an
+     * element in a Guacamole instruction.
+     *
+     * @private
+     * @param {*} value
+     *     The value to convert.
+     *
+     * @return {!string}
+     *     The converted value.
+     */
+    var toElement = function toElement(value) {
+        var str = '' + value;
+        return Guacamole.Parser.codePointCount(str) + "." + str;
+    };
+
+    var instr = toElement(elements[0]);
+    for (var i = 1; i < elements.length; i++)
+        instr += ',' + toElement(elements[i]);
+
+    return instr + ';';
+
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 4.0.2 on Sat Mar 30 2024 09:36:10 GMT-0700 (Pacific Daylight Time) +
+ + + + + diff --git a/doc/1.5.5/guacamole-common-js/main_webapp_modules_Position.js.html b/doc/1.5.5/guacamole-common-js/main_webapp_modules_Position.js.html new file mode 100644 index 000000000..9be5a5df8 --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/main_webapp_modules_Position.js.html @@ -0,0 +1,169 @@ + + + + + JSDoc: Source: main/webapp/modules/Position.js + + + + + + + + + + +
+ +

Source: main/webapp/modules/Position.js

+ + + + + + +
+
+
/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+var Guacamole = Guacamole || {};
+
+/**
+ * A position in 2-D space.
+ *
+ * @constructor
+ * @param {Guacamole.Position|object} [template={}]
+ *     The object whose properties should be copied within the new
+ *     Guacamole.Position.
+ */
+Guacamole.Position = function Position(template) {
+
+    template = template || {};
+
+    /**
+     * The current X position, in pixels.
+     *
+     * @type {!number}
+     * @default 0
+     */
+    this.x = template.x || 0;
+
+    /**
+     * The current Y position, in pixels.
+     *
+     * @type {!number}
+     * @default 0
+     */
+    this.y = template.y || 0;
+
+    /**
+     * Assigns the position represented by the given element and
+     * clientX/clientY coordinates. The clientX and clientY coordinates are
+     * relative to the browser viewport and are commonly available within
+     * JavaScript event objects. The final position is translated to
+     * coordinates that are relative the given element.
+     *
+     * @param {!Element} element
+     *     The element the coordinates should be relative to.
+     *
+     * @param {!number} clientX
+     *     The viewport-relative X coordinate to translate.
+     *
+     * @param {!number} clientY
+     *     The viewport-relative Y coordinate to translate.
+     */
+    this.fromClientPosition = function fromClientPosition(element, clientX, clientY) {
+
+        this.x = clientX - element.offsetLeft;
+        this.y = clientY - element.offsetTop;
+
+        // This is all JUST so we can get the position within the element
+        var parent = element.offsetParent;
+        while (parent && !(parent === document.body)) {
+            this.x -= parent.offsetLeft - parent.scrollLeft;
+            this.y -= parent.offsetTop  - parent.scrollTop;
+
+            parent = parent.offsetParent;
+        }
+
+        // Element ultimately depends on positioning within document body,
+        // take document scroll into account.
+        if (parent) {
+            var documentScrollLeft = document.body.scrollLeft || document.documentElement.scrollLeft;
+            var documentScrollTop = document.body.scrollTop || document.documentElement.scrollTop;
+
+            this.x -= parent.offsetLeft - documentScrollLeft;
+            this.y -= parent.offsetTop  - documentScrollTop;
+        }
+
+    };
+
+};
+
+/**
+ * Returns a new {@link Guacamole.Position} representing the relative position
+ * of the given clientX/clientY coordinates within the given element. The
+ * clientX and clientY coordinates are relative to the browser viewport and are
+ * commonly available within JavaScript event objects. The final position is
+ * translated to  coordinates that are relative the given element.
+ *
+ * @param {!Element} element
+ *     The element the coordinates should be relative to.
+ *
+ * @param {!number} clientX
+ *     The viewport-relative X coordinate to translate.
+ *
+ * @param {!number} clientY
+ *     The viewport-relative Y coordinate to translate.
+ *
+ * @returns {!Guacamole.Position}
+ *     A new Guacamole.Position representing the relative position of the given
+ *     client coordinates.
+ */
+Guacamole.Position.fromClientPosition = function fromClientPosition(element, clientX, clientY) {
+    var position = new Guacamole.Position();
+    position.fromClientPosition(element, clientX, clientY);
+    return position;
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 4.0.2 on Sat Mar 30 2024 09:36:10 GMT-0700 (Pacific Daylight Time) +
+ + + + + diff --git a/doc/1.5.5/guacamole-common-js/main_webapp_modules_RawAudioFormat.js.html b/doc/1.5.5/guacamole-common-js/main_webapp_modules_RawAudioFormat.js.html new file mode 100644 index 000000000..06d4dad69 --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/main_webapp_modules_RawAudioFormat.js.html @@ -0,0 +1,197 @@ + + + + + JSDoc: Source: main/webapp/modules/RawAudioFormat.js + + + + + + + + + + +
+ +

Source: main/webapp/modules/RawAudioFormat.js

+ + + + + + +
+
+
/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+var Guacamole = Guacamole || {};
+
+/**
+ * A description of the format of raw PCM audio, such as that used by
+ * Guacamole.RawAudioPlayer and Guacamole.RawAudioRecorder. This object
+ * describes the number of bytes per sample, the number of channels, and the
+ * overall sample rate.
+ *
+ * @constructor
+ * @param {!(Guacamole.RawAudioFormat|object)} template
+ *     The object whose properties should be copied into the corresponding
+ *     properties of the new Guacamole.RawAudioFormat.
+ */
+Guacamole.RawAudioFormat = function RawAudioFormat(template) {
+
+    /**
+     * The number of bytes in each sample of audio data. This value is
+     * independent of the number of channels.
+     *
+     * @type {!number}
+     */
+    this.bytesPerSample = template.bytesPerSample;
+
+    /**
+     * The number of audio channels (ie: 1 for mono, 2 for stereo).
+     *
+     * @type {!number}
+     */
+    this.channels = template.channels;
+
+    /**
+     * The number of samples per second, per channel.
+     *
+     * @type {!number}
+     */
+    this.rate = template.rate;
+
+};
+
+/**
+ * Parses the given mimetype, returning a new Guacamole.RawAudioFormat
+ * which describes the type of raw audio data represented by that mimetype. If
+ * the mimetype is not a supported raw audio data mimetype, null is returned.
+ *
+ * @param {!string} mimetype
+ *     The audio mimetype to parse.
+ *
+ * @returns {Guacamole.RawAudioFormat}
+ *     A new Guacamole.RawAudioFormat which describes the type of raw
+ *     audio data represented by the given mimetype, or null if the given
+ *     mimetype is not supported.
+ */
+Guacamole.RawAudioFormat.parse = function parseFormat(mimetype) {
+
+    var bytesPerSample;
+
+    // Rate is absolutely required - if null is still present later, the
+    // mimetype must not be supported
+    var rate = null;
+
+    // Default for both "audio/L8" and "audio/L16" is one channel
+    var channels = 1;
+
+    // "audio/L8" has one byte per sample
+    if (mimetype.substring(0, 9) === 'audio/L8;') {
+        mimetype = mimetype.substring(9);
+        bytesPerSample = 1;
+    }
+
+    // "audio/L16" has two bytes per sample
+    else if (mimetype.substring(0, 10) === 'audio/L16;') {
+        mimetype = mimetype.substring(10);
+        bytesPerSample = 2;
+    }
+
+    // All other types are unsupported
+    else
+        return null;
+
+    // Parse all parameters
+    var parameters = mimetype.split(',');
+    for (var i = 0; i < parameters.length; i++) {
+
+        var parameter = parameters[i];
+
+        // All parameters must have an equals sign separating name from value
+        var equals = parameter.indexOf('=');
+        if (equals === -1)
+            return null;
+
+        // Parse name and value from parameter string
+        var name  = parameter.substring(0, equals);
+        var value = parameter.substring(equals+1);
+
+        // Handle each supported parameter
+        switch (name) {
+
+            // Number of audio channels
+            case 'channels':
+                channels = parseInt(value);
+                break;
+
+            // Sample rate
+            case 'rate':
+                rate = parseInt(value);
+                break;
+
+            // All other parameters are unsupported
+            default:
+                return null;
+
+        }
+
+    };
+
+    // The rate parameter is required
+    if (rate === null)
+        return null;
+
+    // Return parsed format details
+    return new Guacamole.RawAudioFormat({
+        bytesPerSample : bytesPerSample,
+        channels       : channels,
+        rate           : rate
+    });
+
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 4.0.2 on Sat Mar 30 2024 09:36:10 GMT-0700 (Pacific Daylight Time) +
+ + + + + diff --git a/doc/1.5.5/guacamole-common-js/main_webapp_modules_SessionRecording.js.html b/doc/1.5.5/guacamole-common-js/main_webapp_modules_SessionRecording.js.html new file mode 100644 index 000000000..a99f32f41 --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/main_webapp_modules_SessionRecording.js.html @@ -0,0 +1,1177 @@ + + + + + JSDoc: Source: main/webapp/modules/SessionRecording.js + + + + + + + + + + +
+ +

Source: main/webapp/modules/SessionRecording.js

+ + + + + + +
+
+
/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+var Guacamole = Guacamole || {};
+
+/**
+ * A recording of a Guacamole session. Given a {@link Guacamole.Tunnel} or Blob,
+ * the Guacamole.SessionRecording automatically parses Guacamole instructions
+ * within the recording source as it plays back the recording. Playback of the
+ * recording may be controlled through function calls to the
+ * Guacamole.SessionRecording, even while the recording has not yet finished
+ * being created or downloaded. Parsing of the contents of the recording will
+ * begin immediately and automatically after this constructor is invoked.
+ *
+ * @constructor
+ * @param {!Blob|Guacamole.Tunnel} source
+ *     The Blob from which the instructions of the recording should
+ *     be read.
+ */
+Guacamole.SessionRecording = function SessionRecording(source) {
+
+    /**
+     * Reference to this Guacamole.SessionRecording.
+     *
+     * @private
+     * @type {!Guacamole.SessionRecording}
+     */
+    var recording = this;
+
+    /**
+     * The Blob from which the instructions of the recording should be read.
+     * Note that this value is initialized far below.
+     *
+     * @private
+     * @type {!Blob}
+     */
+    var recordingBlob;
+
+    /**
+     * The tunnel from which the recording should be read, if the recording is
+     * being read from a tunnel. If the recording was supplied as a Blob, this
+     * will be null.
+     *
+     * @private
+     * @type {Guacamole.Tunnel}
+     */
+    var tunnel = null;
+
+    /**
+     * The number of bytes that this Guacamole.SessionRecording should attempt
+     * to read from the given blob in each read operation. Larger blocks will
+     * generally read the blob more quickly, but may result in excessive
+     * time being spent within the parser, making the page unresponsive
+     * while the recording is loading.
+     *
+     * @private
+     * @constant
+     * @type {Number}
+     */
+    var BLOCK_SIZE = 262144;
+
+    /**
+     * The minimum number of characters which must have been read between
+     * keyframes.
+     *
+     * @private
+     * @constant
+     * @type {Number}
+     */
+    var KEYFRAME_CHAR_INTERVAL = 16384;
+
+    /**
+     * The minimum number of milliseconds which must elapse between keyframes.
+     *
+     * @private
+     * @constant
+     * @type {Number}
+     */
+    var KEYFRAME_TIME_INTERVAL = 5000;
+
+    /**
+     * All frames parsed from the provided blob.
+     *
+     * @private
+     * @type {!Guacamole.SessionRecording._Frame[]}
+     */
+    var frames = [];
+
+    /**
+     * The timestamp of the last frame which was flagged for use as a keyframe.
+     * If no timestamp has yet been flagged, this will be 0.
+     *
+     * @private
+     * @type {!number}
+     */
+    var lastKeyframe = 0;
+
+    /**
+     * Tunnel which feeds arbitrary instructions to the client used by this
+     * Guacamole.SessionRecording for playback of the session recording.
+     *
+     * @private
+     * @type {!Guacamole.SessionRecording._PlaybackTunnel}
+     */
+    var playbackTunnel = new Guacamole.SessionRecording._PlaybackTunnel();
+
+    /**
+     * Guacamole.Client instance used for visible playback of the session
+     * recording.
+     *
+     * @private
+     * @type {!Guacamole.Client}
+     */
+    var playbackClient = new Guacamole.Client(playbackTunnel);
+
+    /**
+     * The current frame rendered within the playback client. If no frame is
+     * yet rendered, this will be -1.
+     *
+     * @private
+     * @type {!number}
+     */
+    var currentFrame = -1;
+
+    /**
+     * The timestamp of the frame when playback began, in milliseconds. If
+     * playback is not in progress, this will be null.
+     *
+     * @private
+     * @type {number}
+     */
+    var startVideoTimestamp = null;
+
+    /**
+     * The real-world timestamp when playback began, in milliseconds. If
+     * playback is not in progress, this will be null.
+     *
+     * @private
+     * @type {number}
+     */
+    var startRealTimestamp = null;
+
+    /**
+     * An object containing a single "aborted" property which is set to
+     * true if the in-progress seek operation should be aborted. If no seek
+     * operation is in progress, this will be null.
+     *
+     * @private
+     * @type {object}
+     */
+    var activeSeek = null;
+
+    /**
+     * The byte offset within the recording blob of the first character of
+     * the first instruction of the current frame. Here, "current frame"
+     * refers to the frame currently being parsed when the provided
+     * recording is initially loading. If the recording is not being
+     * loaded, this value has no meaning.
+     *
+     * @private
+     * @type {!number}
+     */
+    var frameStart = 0;
+
+    /**
+     * The byte offset within the recording blob of the character which
+     * follows the last character of the most recently parsed instruction
+     * of the current frame. Here, "current frame" refers to the frame
+     * currently being parsed when the provided recording is initially
+     * loading. If the recording is not being loaded, this value has no
+     * meaning.
+     *
+     * @private
+     * @type {!number}
+     */
+    var frameEnd = 0;
+
+    /**
+     * Whether the initial loading process has been aborted. If the loading
+     * process has been aborted, no further blocks of data should be read
+     * from the recording.
+     *
+     * @private
+     * @type {!boolean}
+     */
+    var aborted = false;
+
+    /**
+     * The function to invoke when the seek operation initiated by a call
+     * to seek() is cancelled or successfully completed. If no seek
+     * operation is in progress, this will be null.
+     *
+     * @private
+     * @type {function}
+     */
+    var seekCallback = null;
+
+    /**
+     * Parses all Guacamole instructions within the given blob, invoking
+     * the provided instruction callback for each such instruction. Once
+     * the end of the blob has been reached (no instructions remain to be
+     * parsed), the provided completion callback is invoked. If a parse
+     * error prevents reading instructions from the blob, the onerror
+     * callback of the Guacamole.SessionRecording is invoked, and no further
+     * data is handled within the blob.
+     *
+     * @private
+     * @param {!Blob} blob
+     *     The blob to parse Guacamole instructions from.
+     *
+     * @param {function} [instructionCallback]
+     *     The callback to invoke for each Guacamole instruction read from
+     *     the given blob. This function must accept the same arguments
+     *     as the oninstruction handler of Guacamole.Parser.
+     *
+     * @param {function} [completionCallback]
+     *     The callback to invoke once all instructions have been read from
+     *     the given blob.
+     */
+    var parseBlob = function parseBlob(blob, instructionCallback, completionCallback) {
+
+        // Do not read any further blocks if loading has been aborted
+        if (aborted && blob === recordingBlob)
+            return;
+
+        // Prepare a parser to handle all instruction data within the blob,
+        // automatically invoking the provided instruction callback for all
+        // parsed instructions
+        var parser = new Guacamole.Parser();
+        parser.oninstruction = instructionCallback;
+
+        var offset = 0;
+        var reader = new FileReader();
+
+        /**
+         * Reads the block of data at offset bytes within the blob. If no
+         * such block exists, then the completion callback provided to
+         * parseBlob() is invoked as all data has been read.
+         *
+         * @private
+         */
+        var readNextBlock = function readNextBlock() {
+
+            // Do not read any further blocks if loading has been aborted
+            if (aborted && blob === recordingBlob)
+                return;
+
+            // Parse all instructions within the block, invoking the
+            // onerror handler if a parse error occurs
+            if (reader.readyState === 2 /* DONE */) {
+                try {
+                    parser.receive(reader.result);
+                }
+                catch (parseError) {
+                    if (recording.onerror) {
+                        recording.onerror(parseError.message);
+                    }
+                    return;
+                }
+            }
+
+            // If no data remains, the read operation is complete and no
+            // further blocks need to be read
+            if (offset >= blob.size) {
+                if (completionCallback)
+                    completionCallback();
+            }
+
+            // Otherwise, read the next block
+            else {
+                var block = blob.slice(offset, offset + BLOCK_SIZE);
+                offset += block.size;
+                reader.readAsText(block);
+            }
+
+        };
+
+        // Read blocks until the end of the given blob is reached
+        reader.onload = readNextBlock;
+        readNextBlock();
+
+    };
+
+    /**
+     * Calculates the size of the given Guacamole instruction element, in
+     * Unicode characters. The size returned includes the characters which
+     * make up the length, the "." separator between the length and the
+     * element itself, and the "," or ";" terminator which follows the
+     * element.
+     *
+     * @private
+     * @param {!string} value
+     *     The value of the element which has already been parsed (lacks
+     *     the initial length, "." separator, and "," or ";" terminator).
+     *
+     * @returns {!number}
+     *     The number of Unicode characters which would make up the given
+     *     element within a Guacamole instruction.
+     */
+    var getElementSize = function getElementSize(value) {
+
+        var valueLength = value.length;
+
+        // Calculate base size, assuming at least one digit, the "."
+        // separator, and the "," or ";" terminator
+        var protocolSize = valueLength + 3;
+
+        // Add one character for each additional digit that would occur
+        // in the element length prefix
+        while (valueLength >= 10) {
+            protocolSize++;
+            valueLength = Math.floor(valueLength / 10);
+        }
+
+        return protocolSize;
+
+    };
+
+    // Start playback client connected
+    playbackClient.connect();
+
+    // Hide cursor unless mouse position is received
+    playbackClient.getDisplay().showCursor(false);
+
+    /**
+     * Handles a newly-received instruction, whether from the main Blob or a
+     * tunnel, adding new frames and keyframes as necessary. Load progress is
+     * reported via onprogress automatically.
+     *
+     * @private
+     * @param {!string} opcode
+     *     The opcode of the instruction to handle.
+     *
+     * @param {!string[]} args
+     *     The arguments of the received instruction, if any.
+     */
+    var loadInstruction = function loadInstruction(opcode, args) {
+
+        // Advance end of frame by overall length of parsed instruction
+        frameEnd += getElementSize(opcode);
+        for (var i = 0; i < args.length; i++)
+            frameEnd += getElementSize(args[i]);
+
+        // Once a sync is received, store all instructions since the last
+        // frame as a new frame
+        if (opcode === 'sync') {
+
+            // Parse frame timestamp from sync instruction
+            var timestamp = parseInt(args[0]);
+
+            // Add a new frame containing the instructions read since last frame
+            var frame = new Guacamole.SessionRecording._Frame(timestamp, frameStart, frameEnd);
+            frames.push(frame);
+            frameStart = frameEnd;
+
+            // This frame should eventually become a keyframe if enough data
+            // has been processed and enough recording time has elapsed, or if
+            // this is the absolute first frame
+            if (frames.length === 1 || (frameEnd - frames[lastKeyframe].start >= KEYFRAME_CHAR_INTERVAL
+                    && timestamp - frames[lastKeyframe].timestamp >= KEYFRAME_TIME_INTERVAL)) {
+                frame.keyframe = true;
+                lastKeyframe = frames.length - 1;
+            }
+
+            // Notify that additional content is available
+            if (recording.onprogress)
+                recording.onprogress(recording.getDuration(), frameEnd);
+
+        }
+
+    };
+
+    /**
+     * Notifies that the session recording has been fully loaded. If the onload
+     * handler has not been defined, this function has no effect.
+     *
+     * @private
+     */
+    var notifyLoaded = function notifyLoaded() {
+        if (recording.onload)
+            recording.onload();
+    };
+
+    // Read instructions from provided blob, extracting each frame
+    if (source instanceof Blob) {
+        recordingBlob = source;
+        parseBlob(recordingBlob, loadInstruction, notifyLoaded);
+    }
+
+    // If tunnel provided instead of Blob, extract frames, etc. as instructions
+    // are received, buffering things into a Blob for future seeks
+    else {
+
+        tunnel = source;
+        recordingBlob = new Blob();
+
+        var errorEncountered = false;
+        var instructionBuffer = '';
+
+        // Read instructions from provided tunnel, extracting each frame
+        tunnel.oninstruction = function handleInstruction(opcode, args) {
+
+            // Reconstitute received instruction
+            instructionBuffer += opcode.length + '.' + opcode;
+            args.forEach(function appendArg(arg) {
+                instructionBuffer += ',' + arg.length + '.' + arg;
+            });
+            instructionBuffer += ';';
+
+            // Append to Blob (creating a new Blob in the process)
+            if (instructionBuffer.length >= BLOCK_SIZE) {
+                recordingBlob = new Blob([recordingBlob, instructionBuffer]);
+                instructionBuffer = '';
+            }
+
+            // Load parsed instruction into recording
+            loadInstruction(opcode, args);
+
+        };
+
+        // Report any errors encountered
+        tunnel.onerror = function tunnelError(status) {
+            errorEncountered = true;
+            if (recording.onerror)
+                recording.onerror(status.message);
+        };
+
+        tunnel.onstatechange = function tunnelStateChanged(state) {
+            if (state === Guacamole.Tunnel.State.CLOSED) {
+
+                // Append any remaining instructions
+                if (instructionBuffer.length) {
+                    recordingBlob = new Blob([recordingBlob, instructionBuffer]);
+                    instructionBuffer = '';
+                }
+
+                // Consider recording loaded if tunnel has closed without errors
+                if (!errorEncountered)
+                    notifyLoaded();
+            }
+        };
+
+    }
+
+    /**
+     * Converts the given absolute timestamp to a timestamp which is relative
+     * to the first frame in the recording.
+     *
+     * @private
+     * @param {!number} timestamp
+     *     The timestamp to convert to a relative timestamp.
+     *
+     * @returns {!number}
+     *     The difference in milliseconds between the given timestamp and the
+     *     first frame of the recording, or zero if no frames yet exist.
+     */
+    var toRelativeTimestamp = function toRelativeTimestamp(timestamp) {
+
+        // If no frames yet exist, all timestamps are zero
+        if (frames.length === 0)
+            return 0;
+
+        // Calculate timestamp relative to first frame
+        return timestamp - frames[0].timestamp;
+
+    };
+
+    /**
+     * Searches through the given region of frames for the frame having a
+     * relative timestamp closest to the timestamp given.
+     *
+     * @private
+     * @param {!number} minIndex
+     *     The index of the first frame in the region (the frame having the
+     *     smallest timestamp).
+     *
+     * @param {!number} maxIndex
+     *     The index of the last frame in the region (the frame having the
+     *     largest timestamp).
+     *
+     * @param {!number} timestamp
+     *     The relative timestamp to search for, where zero denotes the first
+     *     frame in the recording.
+     *
+     * @returns {!number}
+     *     The index of the frame having a relative timestamp closest to the
+     *     given value.
+     */
+    var findFrame = function findFrame(minIndex, maxIndex, timestamp) {
+
+        // Do not search if the region contains only one element
+        if (minIndex === maxIndex)
+            return minIndex;
+
+        // Split search region into two halves
+        var midIndex = Math.floor((minIndex + maxIndex) / 2);
+        var midTimestamp = toRelativeTimestamp(frames[midIndex].timestamp);
+
+        // If timestamp is within lesser half, search again within that half
+        if (timestamp < midTimestamp && midIndex > minIndex)
+            return findFrame(minIndex, midIndex - 1, timestamp);
+
+        // If timestamp is within greater half, search again within that half
+        if (timestamp > midTimestamp && midIndex < maxIndex)
+            return findFrame(midIndex + 1, maxIndex, timestamp);
+
+        // Otherwise, we lucked out and found a frame with exactly the
+        // desired timestamp
+        return midIndex;
+
+    };
+
+    /**
+     * Replays the instructions associated with the given frame, sending those
+     * instructions to the playback client.
+     *
+     * @private
+     * @param {!number} index
+     *     The index of the frame within the frames array which should be
+     *     replayed.
+     *
+     * @param {function} callback
+     *     The callback to invoke once replay of the frame has completed.
+     */
+    var replayFrame = function replayFrame(index, callback) {
+
+        var frame = frames[index];
+
+        // Replay all instructions within the retrieved frame
+        parseBlob(recordingBlob.slice(frame.start, frame.end), function handleInstruction(opcode, args) {
+            playbackTunnel.receiveInstruction(opcode, args);
+        }, function replayCompleted() {
+
+            // Store client state if frame is flagged as a keyframe
+            if (frame.keyframe && !frame.clientState) {
+                playbackClient.exportState(function storeClientState(state) {
+                    frame.clientState = new Blob([JSON.stringify(state)]);
+                });
+            }
+
+            // Update state to correctly represent the current frame
+            currentFrame = index;
+
+            if (callback)
+                callback();
+
+        });
+
+    };
+
+    /**
+     * Moves the playback position to the given frame, resetting the state of
+     * the playback client and replaying frames as necessary. The seek
+     * operation will proceed asynchronously. If a seek operation is already in
+     * progress, that seek is first aborted. The progress of the seek operation
+     * can be observed through the onseek handler and the provided callback.
+     *
+     * @private
+     * @param {!number} index
+     *     The index of the frame which should become the new playback
+     *     position.
+     *
+     * @param {function} callback
+     *     The callback to invoke once the seek operation has completed.
+     *
+     * @param {number} [nextRealTimestamp]
+     *     The timestamp of the point in time that the given frame should be
+     *     displayed, as would be returned by new Date().getTime(). If omitted,
+     *     the frame will be displayed as soon as possible.
+     */
+    var seekToFrame = function seekToFrame(index, callback, nextRealTimestamp) {
+
+        // Abort any in-progress seek
+        abortSeek();
+
+        // Note that a new seek operation is in progress
+        var thisSeek = activeSeek = {
+            aborted : false
+        };
+
+        var startIndex = index;
+
+        // Replay any applicable incremental frames
+        var continueReplay = function continueReplay() {
+
+            // Notify of changes in position
+            if (recording.onseek && currentFrame > startIndex) {
+                recording.onseek(toRelativeTimestamp(frames[currentFrame].timestamp),
+                    currentFrame - startIndex, index - startIndex);
+            }
+
+            // Cancel seek if aborted
+            if (thisSeek.aborted)
+                return;
+
+            // If frames remain, replay the next frame
+            if (currentFrame < index)
+                replayFrame(currentFrame + 1, continueReplay);
+
+            // Otherwise, the seek operation is completed
+            else
+                callback();
+
+        };
+
+        // Continue replay after requested delay has elapsed, or
+        // immediately if no delay was requested
+        var continueAfterRequiredDelay = function continueAfterRequiredDelay() {
+            var delay = nextRealTimestamp ? Math.max(nextRealTimestamp - new Date().getTime(), 0) : 0;
+            if (delay)
+                window.setTimeout(continueReplay, delay);
+            else
+                continueReplay();
+        };
+
+        // Back up until startIndex represents current state
+        for (; startIndex >= 0; startIndex--) {
+
+            var frame = frames[startIndex];
+
+            // If we've reached the current frame, startIndex represents
+            // current state by definition
+            if (startIndex === currentFrame)
+                break;
+
+            // If frame has associated absolute state, make that frame the
+            // current state
+            if (frame.clientState) {
+                frame.clientState.text().then(function textReady(text) {
+                    playbackClient.importState(JSON.parse(text));
+                    currentFrame = startIndex;
+                    continueAfterRequiredDelay();
+                });
+                return;
+            }
+
+        }
+
+        continueAfterRequiredDelay();
+        
+    };
+
+    /**
+     * Aborts the seek operation currently in progress, if any. If no seek
+     * operation is in progress, this function has no effect.
+     *
+     * @private
+     */
+    var abortSeek = function abortSeek() {
+        if (activeSeek) {
+            activeSeek.aborted = true;
+            activeSeek = null;
+        }
+    };
+
+    /**
+     * Advances playback to the next frame in the frames array and schedules
+     * playback of the frame following that frame based on their associated
+     * timestamps. If no frames exist after the next frame, playback is paused.
+     *
+     * @private
+     */
+    var continuePlayback = function continuePlayback() {
+
+        // If frames remain after advancing, schedule next frame
+        if (currentFrame + 1 < frames.length) {
+
+            // Pull the upcoming frame
+            var next = frames[currentFrame + 1];
+
+            // Calculate the real timestamp corresponding to when the next
+            // frame begins
+            var nextRealTimestamp = next.timestamp - startVideoTimestamp + startRealTimestamp;
+
+            // Advance to next frame after enough time has elapsed
+            seekToFrame(currentFrame + 1, function frameDelayElapsed() {
+                continuePlayback();
+            }, nextRealTimestamp);
+
+        }
+
+        // Otherwise stop playback
+        else
+            recording.pause();
+
+    };
+
+    /**
+     * Fired when loading of this recording has completed and all frames
+     * are available.
+     *
+     * @event
+     */
+    this.onload = null;
+
+    /**
+     * Fired when an error occurs which prevents the recording from being
+     * played back.
+     *
+     * @event
+     * @param {!string} message
+     *     A human-readable message describing the error that occurred.
+     */
+    this.onerror = null;
+
+    /**
+     * Fired when further loading of this recording has been explicitly
+     * aborted through a call to abort().
+     *
+     * @event
+     */
+    this.onabort = null;
+
+    /**
+     * Fired when new frames have become available while the recording is
+     * being downloaded.
+     *
+     * @event
+     * @param {!number} duration
+     *     The new duration of the recording, in milliseconds.
+     *
+     * @param {!number} parsedSize
+     *     The number of bytes that have been loaded/parsed.
+     */
+    this.onprogress = null;
+
+    /**
+     * Fired whenever playback of the recording has started.
+     *
+     * @event
+     */
+    this.onplay = null;
+
+    /**
+     * Fired whenever playback of the recording has been paused. This may
+     * happen when playback is explicitly paused with a call to pause(), or
+     * when playback is implicitly paused due to reaching the end of the
+     * recording.
+     *
+     * @event
+     */
+    this.onpause = null;
+
+    /**
+     * Fired whenever the playback position within the recording changes.
+     *
+     * @event
+     * @param {!number} position
+     *     The new position within the recording, in milliseconds.
+     *
+     * @param {!number} current
+     *     The number of frames that have been seeked through. If not
+     *     seeking through multiple frames due to a call to seek(), this
+     *     will be 1.
+     *
+     * @param {!number} total
+     *     The number of frames that are being seeked through in the
+     *     current seek operation. If not seeking through multiple frames
+     *     due to a call to seek(), this will be 1.
+     */
+    this.onseek = null;
+
+    /**
+     * Connects the underlying tunnel, beginning download of the Guacamole
+     * session. Playback of the Guacamole session cannot occur until at least
+     * one frame worth of instructions has been downloaded. If the underlying
+     * recording source is a Blob, this function has no effect.
+     *
+     * @param {string} [data]
+     *     The data to send to the tunnel when connecting.
+     */
+    this.connect = function connect(data) {
+        if (tunnel)
+            tunnel.connect(data);
+    };
+
+    /**
+     * Disconnects the underlying tunnel, stopping further download of the
+     * Guacamole session. If the underlying recording source is a Blob, this
+     * function has no effect.
+     */
+    this.disconnect = function disconnect() {
+        if (tunnel)
+            tunnel.disconnect();
+    };
+
+    /**
+     * Aborts the loading process, stopping further processing of the
+     * provided data. If the underlying recording source is a Guacamole tunnel,
+     * it will be disconnected.
+     */
+    this.abort = function abort() {
+        if (!aborted) {
+
+            aborted = true;
+            if (recording.onabort)
+                recording.onabort();
+
+            if (tunnel)
+                tunnel.disconnect();
+
+        }
+    };
+
+    /**
+     * Returns the underlying display of the Guacamole.Client used by this
+     * Guacamole.SessionRecording for playback. The display contains an Element
+     * which can be added to the DOM, causing the display (and thus playback of
+     * the recording) to become visible.
+     *
+     * @return {!Guacamole.Display}
+     *     The underlying display of the Guacamole.Client used by this
+     *     Guacamole.SessionRecording for playback.
+     */
+    this.getDisplay = function getDisplay() {
+        return playbackClient.getDisplay();
+    };
+
+    /**
+     * Returns whether playback is currently in progress.
+     *
+     * @returns {!boolean}
+     *     true if playback is currently in progress, false otherwise.
+     */
+    this.isPlaying = function isPlaying() {
+        return !!startVideoTimestamp;
+    };
+
+    /**
+     * Returns the current playback position within the recording, in
+     * milliseconds, where zero is the start of the recording.
+     *
+     * @returns {!number}
+     *     The current playback position within the recording, in milliseconds.
+     */
+    this.getPosition = function getPosition() {
+
+        // Position is simply zero if playback has not started at all
+        if (currentFrame === -1)
+            return 0;
+
+        // Return current position as a millisecond timestamp relative to the
+        // start of the recording
+        return toRelativeTimestamp(frames[currentFrame].timestamp);
+
+    };
+
+    /**
+     * Returns the duration of this recording, in milliseconds. If the
+     * recording is still being downloaded, this value will gradually increase.
+     *
+     * @returns {!number}
+     *     The duration of this recording, in milliseconds.
+     */
+    this.getDuration = function getDuration() {
+
+        // If no frames yet exist, duration is zero
+        if (frames.length === 0)
+            return 0;
+
+        // Recording duration is simply the timestamp of the last frame
+        return toRelativeTimestamp(frames[frames.length - 1].timestamp);
+
+    };
+
+    /**
+     * Begins continuous playback of the recording downloaded thus far.
+     * Playback of the recording will continue until pause() is invoked or
+     * until no further frames exist. Playback is initially paused when a
+     * Guacamole.SessionRecording is created, and must be explicitly started
+     * through a call to this function. If playback is already in progress,
+     * this function has no effect. If a seek operation is in progress,
+     * playback resumes at the current position, and the seek is aborted as if
+     * completed.
+     */
+    this.play = function play() {
+
+        // If playback is not already in progress and frames remain,
+        // begin playback
+        if (!recording.isPlaying() && currentFrame + 1 < frames.length) {
+
+            // Notify that playback is starting
+            if (recording.onplay)
+                recording.onplay();
+
+            // Store timestamp of playback start for relative scheduling of
+            // future frames
+            var next = frames[currentFrame + 1];
+            startVideoTimestamp = next.timestamp;
+            startRealTimestamp = new Date().getTime();
+
+            // Begin playback of video
+            continuePlayback();
+
+        }
+
+    };
+
+    /**
+     * Seeks to the given position within the recording. If the recording is
+     * currently being played back, playback will continue after the seek is
+     * performed. If the recording is currently paused, playback will be
+     * paused after the seek is performed. If a seek operation is already in
+     * progress, that seek is first aborted. The seek operation will proceed
+     * asynchronously.
+     *
+     * @param {!number} position
+     *     The position within the recording to seek to, in milliseconds.
+     *
+     * @param {function} [callback]
+     *     The callback to invoke once the seek operation has completed.
+     */
+    this.seek = function seek(position, callback) {
+
+        // Do not seek if no frames exist
+        if (frames.length === 0)
+            return;
+
+        // Abort active seek operation, if any
+        recording.cancel();
+
+        // Pause playback, preserving playback state
+        var originallyPlaying = recording.isPlaying();
+        recording.pause();
+
+        // Restore playback when seek is completed or cancelled
+        seekCallback = function restorePlaybackState() {
+
+            // Seek is no longer in progress
+            seekCallback = null;
+
+            // Restore playback state
+            if (originallyPlaying) {
+                recording.play();
+                originallyPlaying = null;
+            }
+
+            // Notify that seek has completed
+            if (callback)
+                callback();
+
+        };
+
+        // Perform seek
+        seekToFrame(findFrame(0, frames.length - 1, position), seekCallback);
+
+    };
+
+    /**
+     * Cancels the current seek operation, setting the current frame of the
+     * recording to wherever the seek operation was able to reach prior to
+     * being cancelled. If a callback was provided to seek(), that callback
+     * is invoked. If a seek operation is not currently underway, this
+     * function has no effect.
+     */
+    this.cancel = function cancel() {
+        if (seekCallback) {
+            abortSeek();
+            seekCallback();
+        }
+    };
+
+    /**
+     * Pauses playback of the recording, if playback is currently in progress.
+     * If playback is not in progress, this function has no effect. If a seek
+     * operation is in progress, the seek is aborted. Playback is initially
+     * paused when a Guacamole.SessionRecording is created, and must be
+     * explicitly started through a call to play().
+     */
+    this.pause = function pause() {
+
+        // Abort any in-progress seek / playback
+        abortSeek();
+
+        // Stop playback only if playback is in progress
+        if (recording.isPlaying()) {
+
+            // Notify that playback is stopping
+            if (recording.onpause)
+                recording.onpause();
+
+            // Playback is stopped
+            startVideoTimestamp = null;
+            startRealTimestamp = null;
+
+        }
+
+    };
+
+};
+
+/**
+ * A single frame of Guacamole session data. Each frame is made up of the set
+ * of instructions used to generate that frame, and the timestamp as dictated
+ * by the "sync" instruction terminating the frame. Optionally, a frame may
+ * also be associated with a snapshot of Guacamole client state, such that the
+ * frame can be rendered without replaying all previous frames.
+ *
+ * @private
+ * @constructor
+ * @param {!number} timestamp
+ *     The timestamp of this frame, as dictated by the "sync" instruction which
+ *     terminates the frame.
+ *
+ * @param {!number} start
+ *     The byte offset within the blob of the first character of the first
+ *     instruction of this frame.
+ *
+ * @param {!number} end
+ *     The byte offset within the blob of character which follows the last
+ *     character of the last instruction of this frame.
+ */
+Guacamole.SessionRecording._Frame = function _Frame(timestamp, start, end) {
+
+    /**
+     * Whether this frame should be used as a keyframe if possible. This value
+     * is purely advisory. The stored clientState must eventually be manually
+     * set for the frame to be used as a keyframe. By default, frames are not
+     * keyframes.
+     *
+     * @type {!boolean}
+     * @default false
+     */
+    this.keyframe = false;
+
+    /**
+     * The timestamp of this frame, as dictated by the "sync" instruction which
+     * terminates the frame.
+     *
+     * @type {!number}
+     */
+    this.timestamp = timestamp;
+
+    /**
+     * The byte offset within the blob of the first character of the first
+     * instruction of this frame.
+     *
+     * @type {!number}
+     */
+    this.start = start;
+
+    /**
+     * The byte offset within the blob of character which follows the last
+     * character of the last instruction of this frame.
+     *
+     * @type {!number}
+     */
+    this.end = end;
+
+    /**
+     * A snapshot of client state after this frame was rendered, as returned by
+     * a call to exportState(), serialized as JSON, and stored within a Blob.
+     * Use of Blobs here is required to ensure the browser can make use of
+     * larger disk-backed storage if the size of the recording is large. If no
+     * such snapshot has been taken, this will be null.
+     *
+     * @type {Blob}
+     * @default null
+     */
+    this.clientState = null;
+
+};
+
+/**
+ * A read-only Guacamole.Tunnel implementation which streams instructions
+ * received through explicit calls to its receiveInstruction() function.
+ *
+ * @private
+ * @constructor
+ * @augments {Guacamole.Tunnel}
+ */
+Guacamole.SessionRecording._PlaybackTunnel = function _PlaybackTunnel() {
+
+    /**
+     * Reference to this Guacamole.SessionRecording._PlaybackTunnel.
+     *
+     * @private
+     * @type {!Guacamole.SessionRecording._PlaybackTunnel}
+     */
+    var tunnel = this;
+
+    this.connect = function connect(data) {
+        // Do nothing
+    };
+
+    this.sendMessage = function sendMessage(elements) {
+        // Do nothing
+    };
+
+    this.disconnect = function disconnect() {
+        // Do nothing
+    };
+
+    /**
+     * Invokes this tunnel's oninstruction handler, notifying users of this
+     * tunnel (such as a Guacamole.Client instance) that an instruction has
+     * been received. If the oninstruction handler has not been set, this
+     * function has no effect.
+     *
+     * @param {!string} opcode
+     *     The opcode of the Guacamole instruction.
+     *
+     * @param {!string[]} args
+     *     All arguments associated with this Guacamole instruction.
+     */
+    this.receiveInstruction = function receiveInstruction(opcode, args) {
+        if (tunnel.oninstruction)
+            tunnel.oninstruction(opcode, args);
+    };
+
+};
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 4.0.2 on Sat Mar 30 2024 09:36:10 GMT-0700 (Pacific Daylight Time) +
+ + + + + diff --git a/doc/1.5.5/guacamole-common-js/main_webapp_modules_Status.js.html b/doc/1.5.5/guacamole-common-js/main_webapp_modules_Status.js.html new file mode 100644 index 000000000..0b4a68d52 --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/main_webapp_modules_Status.js.html @@ -0,0 +1,373 @@ + + + + + JSDoc: Source: main/webapp/modules/Status.js + + + + + + + + + + +
+ +

Source: main/webapp/modules/Status.js

+ + + + + + +
+
+
/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+var Guacamole = Guacamole || {};
+
+/**
+ * A Guacamole status. Each Guacamole status consists of a status code, defined
+ * by the protocol, and an optional human-readable message, usually only
+ * included for debugging convenience.
+ *
+ * @constructor
+ * @param {!number} code
+ *     The Guacamole status code, as defined by Guacamole.Status.Code.
+ *
+ * @param {string} [message]
+ *     An optional human-readable message.
+ */
+Guacamole.Status = function(code, message) {
+
+    /**
+     * Reference to this Guacamole.Status.
+     *
+     * @private
+     * @type {!Guacamole.Status}
+     */
+    var guac_status = this;
+
+    /**
+     * The Guacamole status code.
+     *
+     * @see Guacamole.Status.Code
+     * @type {!number}
+     */
+    this.code = code;
+
+    /**
+     * An arbitrary human-readable message associated with this status, if any.
+     * The human-readable message is not required, and is generally provided
+     * for debugging purposes only. For user feedback, it is better to translate
+     * the Guacamole status code into a message.
+     * 
+     * @type {string}
+     */
+    this.message = message;
+
+    /**
+     * Returns whether this status represents an error.
+     *
+     * @returns {!boolean}
+     *     true if this status represents an error, false otherwise.
+     */
+    this.isError = function() {
+        return guac_status.code < 0 || guac_status.code > 0x00FF;
+    };
+
+};
+
+/**
+ * Enumeration of all Guacamole status codes.
+ */
+Guacamole.Status.Code = {
+
+    /**
+     * The operation succeeded.
+     *
+     * @type {!number}
+     */
+    "SUCCESS": 0x0000,
+
+    /**
+     * The requested operation is unsupported.
+     *
+     * @type {!number}
+     */
+    "UNSUPPORTED": 0x0100,
+
+    /**
+     * The operation could not be performed due to an internal failure.
+     *
+     * @type {!number}
+     */
+    "SERVER_ERROR": 0x0200,
+
+    /**
+     * The operation could not be performed as the server is busy.
+     *
+     * @type {!number}
+     */
+    "SERVER_BUSY": 0x0201,
+
+    /**
+     * The operation could not be performed because the upstream server is not
+     * responding.
+     *
+     * @type {!number}
+     */
+    "UPSTREAM_TIMEOUT": 0x0202,
+
+    /**
+     * The operation was unsuccessful due to an error or otherwise unexpected
+     * condition of the upstream server.
+     *
+     * @type {!number}
+     */
+    "UPSTREAM_ERROR": 0x0203,
+
+    /**
+     * The operation could not be performed as the requested resource does not
+     * exist.
+     *
+     * @type {!number}
+     */
+    "RESOURCE_NOT_FOUND": 0x0204,
+
+    /**
+     * The operation could not be performed as the requested resource is
+     * already in use.
+     *
+     * @type {!number}
+     */
+    "RESOURCE_CONFLICT": 0x0205,
+
+    /**
+     * The operation could not be performed as the requested resource is now
+     * closed.
+     *
+     * @type {!number}
+     */
+    "RESOURCE_CLOSED": 0x0206,
+
+    /**
+     * The operation could not be performed because the upstream server does
+     * not appear to exist.
+     *
+     * @type {!number}
+     */
+    "UPSTREAM_NOT_FOUND": 0x0207,
+
+    /**
+     * The operation could not be performed because the upstream server is not
+     * available to service the request.
+     *
+     * @type {!number}
+     */
+    "UPSTREAM_UNAVAILABLE": 0x0208,
+
+    /**
+     * The session within the upstream server has ended because it conflicted
+     * with another session.
+     *
+     * @type {!number}
+     */
+    "SESSION_CONFLICT": 0x0209,
+
+    /**
+     * The session within the upstream server has ended because it appeared to
+     * be inactive.
+     *
+     * @type {!number}
+     */
+    "SESSION_TIMEOUT": 0x020A,
+
+    /**
+     * The session within the upstream server has been forcibly terminated.
+     *
+     * @type {!number}
+     */
+    "SESSION_CLOSED": 0x020B,
+
+    /**
+     * The operation could not be performed because bad parameters were given.
+     *
+     * @type {!number}
+     */
+    "CLIENT_BAD_REQUEST": 0x0300,
+
+    /**
+     * Permission was denied to perform the operation, as the user is not yet
+     * authorized (not yet logged in, for example).
+     *
+     * @type {!number}
+     */
+    "CLIENT_UNAUTHORIZED": 0x0301,
+
+    /**
+     * Permission was denied to perform the operation, and this permission will
+     * not be granted even if the user is authorized.
+     *
+     * @type {!number}
+     */
+    "CLIENT_FORBIDDEN": 0x0303,
+
+    /**
+     * The client took too long to respond.
+     *
+     * @type {!number}
+     */
+    "CLIENT_TIMEOUT": 0x0308,
+
+    /**
+     * The client sent too much data.
+     *
+     * @type {!number}
+     */
+    "CLIENT_OVERRUN": 0x030D,
+
+    /**
+     * The client sent data of an unsupported or unexpected type.
+     *
+     * @type {!number}
+     */
+    "CLIENT_BAD_TYPE": 0x030F,
+
+    /**
+     * The operation failed because the current client is already using too
+     * many resources.
+     *
+     * @type {!number}
+     */
+    "CLIENT_TOO_MANY": 0x031D
+
+};
+
+/**
+ * Returns the Guacamole protocol status code which most closely
+ * represents the given HTTP status code.
+ *
+ * @param {!number} status
+ *     The HTTP status code to translate into a Guacamole protocol status
+ *     code.
+ *
+ * @returns {!number}
+ *     The Guacamole protocol status code which most closely represents the
+ *     given HTTP status code.
+ */
+Guacamole.Status.Code.fromHTTPCode = function fromHTTPCode(status) {
+
+    // Translate status codes with known equivalents
+    switch (status) {
+
+        // HTTP 400 - Bad request
+        case 400:
+            return Guacamole.Status.Code.CLIENT_BAD_REQUEST;
+
+        // HTTP 403 - Forbidden
+        case 403:
+            return Guacamole.Status.Code.CLIENT_FORBIDDEN;
+
+        // HTTP 404 - Resource not found
+        case 404:
+            return Guacamole.Status.Code.RESOURCE_NOT_FOUND;
+
+        // HTTP 429 - Too many requests
+        case 429:
+            return Guacamole.Status.Code.CLIENT_TOO_MANY;
+
+        // HTTP 503 - Server unavailable
+        case 503:
+            return Guacamole.Status.Code.SERVER_BUSY;
+
+    }
+
+    // Default all other codes to generic internal error
+    return Guacamole.Status.Code.SERVER_ERROR;
+
+};
+
+/**
+ * Returns the Guacamole protocol status code which most closely
+ * represents the given WebSocket status code.
+ *
+ * @param {!number} code
+ *     The WebSocket status code to translate into a Guacamole protocol
+ *     status code.
+ *
+ * @returns {!number}
+ *     The Guacamole protocol status code which most closely represents the
+ *     given WebSocket status code.
+ */
+Guacamole.Status.Code.fromWebSocketCode = function fromWebSocketCode(code) {
+
+    // Translate status codes with known equivalents
+    switch (code) {
+
+        // Successful disconnect (no error)
+        case 1000: // Normal Closure
+            return Guacamole.Status.Code.SUCCESS;
+
+        // Codes which indicate the server is not reachable
+        case 1006: // Abnormal Closure (also signalled by JavaScript when the connection cannot be opened in the first place)
+        case 1015: // TLS Handshake
+            return Guacamole.Status.Code.UPSTREAM_NOT_FOUND;
+
+        // Codes which indicate the server is reachable but busy/unavailable
+        case 1001: // Going Away
+        case 1012: // Service Restart
+        case 1013: // Try Again Later
+        case 1014: // Bad Gateway
+            return Guacamole.Status.Code.UPSTREAM_UNAVAILABLE;
+
+    }
+
+    // Default all other codes to generic internal error
+    return Guacamole.Status.Code.SERVER_ERROR;
+
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 4.0.2 on Sat Mar 30 2024 09:36:10 GMT-0700 (Pacific Daylight Time) +
+ + + + + diff --git a/doc/1.5.5/guacamole-common-js/main_webapp_modules_StringReader.js.html b/doc/1.5.5/guacamole-common-js/main_webapp_modules_StringReader.js.html new file mode 100644 index 000000000..de765d634 --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/main_webapp_modules_StringReader.js.html @@ -0,0 +1,139 @@ + + + + + JSDoc: Source: main/webapp/modules/StringReader.js + + + + + + + + + + +
+ +

Source: main/webapp/modules/StringReader.js

+ + + + + + +
+
+
/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+var Guacamole = Guacamole || {};
+
+/**
+ * A reader which automatically handles the given input stream, returning
+ * strictly text data. Note that this object will overwrite any installed event
+ * handlers on the given Guacamole.InputStream.
+ * 
+ * @constructor
+ * @param {!Guacamole.InputStream} stream
+ *     The stream that data will be read from.
+ */
+Guacamole.StringReader = function(stream) {
+
+    /**
+     * Reference to this Guacamole.InputStream.
+     *
+     * @private
+     * @type {!Guacamole.StringReader}
+     */
+    var guac_reader = this;
+
+    /**
+     * Parser for received UTF-8 data.
+     *
+     * @type {!Guacamole.UTF8Parser}
+     */
+    var utf8Parser = new Guacamole.UTF8Parser();
+
+    /**
+     * Wrapped Guacamole.ArrayBufferReader.
+     *
+     * @private
+     * @type {!Guacamole.ArrayBufferReader}
+     */
+    var array_reader = new Guacamole.ArrayBufferReader(stream);
+
+    // Receive blobs as strings
+    array_reader.ondata = function(buffer) {
+
+        // Decode UTF-8
+        var text = utf8Parser.decode(buffer);
+
+        // Call handler, if present
+        if (guac_reader.ontext)
+            guac_reader.ontext(text);
+
+    };
+
+    // Simply call onend when end received
+    array_reader.onend = function() {
+        if (guac_reader.onend)
+            guac_reader.onend();
+    };
+
+    /**
+     * Fired once for every blob of text data received.
+     * 
+     * @event
+     * @param {!string} text
+     *     The data packet received.
+     */
+    this.ontext = null;
+
+    /**
+     * Fired once this stream is finished and no further data will be written.
+     * @event
+     */
+    this.onend = null;
+
+};
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 4.0.2 on Sat Mar 30 2024 09:36:10 GMT-0700 (Pacific Daylight Time) +
+ + + + + diff --git a/doc/1.5.5/guacamole-common-js/main_webapp_modules_StringWriter.js.html b/doc/1.5.5/guacamole-common-js/main_webapp_modules_StringWriter.js.html new file mode 100644 index 000000000..30eede0be --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/main_webapp_modules_StringWriter.js.html @@ -0,0 +1,255 @@ + + + + + JSDoc: Source: main/webapp/modules/StringWriter.js + + + + + + + + + + +
+ +

Source: main/webapp/modules/StringWriter.js

+ + + + + + +
+
+
/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+var Guacamole = Guacamole || {};
+
+/**
+ * A writer which automatically writes to the given output stream with text
+ * data.
+ * 
+ * @constructor
+ * @param {!Guacamole.OutputStream} stream
+ *     The stream that data will be written to.
+ */
+Guacamole.StringWriter = function(stream) {
+
+    /**
+     * Reference to this Guacamole.StringWriter.
+     *
+     * @private
+     * @type {!Guacamole.StringWriter}
+     */
+    var guac_writer = this;
+
+    /**
+     * Wrapped Guacamole.ArrayBufferWriter.
+     *
+     * @private
+     * @type {!Guacamole.ArrayBufferWriter}
+     */
+    var array_writer = new Guacamole.ArrayBufferWriter(stream);
+
+    /**
+     * Internal buffer for UTF-8 output.
+     *
+     * @private
+     * @type {!Uint8Array}
+     */
+    var buffer = new Uint8Array(8192);
+
+    /**
+     * The number of bytes currently in the buffer.
+     *
+     * @private
+     * @type {!number}
+     */
+    var length = 0;
+
+    // Simply call onack for acknowledgements
+    array_writer.onack = function(status) {
+        if (guac_writer.onack)
+            guac_writer.onack(status);
+    };
+
+    /**
+     * Expands the size of the underlying buffer by the given number of bytes,
+     * updating the length appropriately.
+     * 
+     * @private
+     * @param {!number} bytes
+     *     The number of bytes to add to the underlying buffer.
+     */
+    function __expand(bytes) {
+
+        // Resize buffer if more space needed
+        if (length+bytes >= buffer.length) {
+            var new_buffer = new Uint8Array((length+bytes)*2);
+            new_buffer.set(buffer);
+            buffer = new_buffer;
+        }
+
+        length += bytes;
+
+    }
+
+    /**
+     * Appends a single Unicode character to the current buffer, resizing the
+     * buffer if necessary. The character will be encoded as UTF-8.
+     * 
+     * @private
+     * @param {!number} codepoint
+     *     The codepoint of the Unicode character to append.
+     */
+    function __append_utf8(codepoint) {
+
+        var mask;
+        var bytes;
+
+        // 1 byte
+        if (codepoint <= 0x7F) {
+            mask = 0x00;
+            bytes = 1;
+        }
+
+        // 2 byte
+        else if (codepoint <= 0x7FF) {
+            mask = 0xC0;
+            bytes = 2;
+        }
+
+        // 3 byte
+        else if (codepoint <= 0xFFFF) {
+            mask = 0xE0;
+            bytes = 3;
+        }
+
+        // 4 byte
+        else if (codepoint <= 0x1FFFFF) {
+            mask = 0xF0;
+            bytes = 4;
+        }
+
+        // If invalid codepoint, append replacement character
+        else {
+            __append_utf8(0xFFFD);
+            return;
+        }
+
+        // Offset buffer by size
+        __expand(bytes);
+        var offset = length - 1;
+
+        // Add trailing bytes, if any
+        for (var i=1; i<bytes; i++) {
+            buffer[offset--] = 0x80 | (codepoint & 0x3F);
+            codepoint >>= 6;
+        }
+
+        // Set initial byte
+        buffer[offset] = mask | codepoint;
+
+    }
+
+    /**
+     * Encodes the given string as UTF-8, returning an ArrayBuffer containing
+     * the resulting bytes.
+     * 
+     * @private
+     * @param {!string} text
+     *     The string to encode as UTF-8.
+     *
+     * @return {!Uint8Array}
+     *     The encoded UTF-8 data.
+     */
+    function __encode_utf8(text) {
+
+        // Fill buffer with UTF-8
+        for (var i=0; i<text.length; i++) {
+            var codepoint = text.charCodeAt(i);
+            __append_utf8(codepoint);
+        }
+
+        // Flush buffer
+        if (length > 0) {
+            var out_buffer = buffer.subarray(0, length);
+            length = 0;
+            return out_buffer;
+        }
+
+    }
+
+    /**
+     * Sends the given text.
+     * 
+     * @param {!string} text
+     *     The text to send.
+     */
+    this.sendText = function(text) {
+        if (text.length)
+            array_writer.sendData(__encode_utf8(text));
+    };
+
+    /**
+     * Signals that no further text will be sent, effectively closing the
+     * stream.
+     */
+    this.sendEnd = function() {
+        array_writer.sendEnd();
+    };
+
+    /**
+     * Fired for received data, if acknowledged by the server.
+     *
+     * @event
+     * @param {!Guacamole.Status} status
+     *     The status of the operation.
+     */
+    this.onack = null;
+
+};
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 4.0.2 on Sat Mar 30 2024 09:36:10 GMT-0700 (Pacific Daylight Time) +
+ + + + + diff --git a/doc/1.5.5/guacamole-common-js/main_webapp_modules_Touch.js.html b/doc/1.5.5/guacamole-common-js/main_webapp_modules_Touch.js.html new file mode 100644 index 000000000..1606eb665 --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/main_webapp_modules_Touch.js.html @@ -0,0 +1,331 @@ + + + + + JSDoc: Source: main/webapp/modules/Touch.js + + + + + + + + + + +
+ +

Source: main/webapp/modules/Touch.js

+ + + + + + +
+
+
/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+var Guacamole = Guacamole || {};
+
+/**
+ * Provides cross-browser multi-touch events for a given element. The events of
+ * the given element are automatically populated with handlers that translate
+ * touch events into a non-browser-specific event provided by the
+ * Guacamole.Touch instance.
+ * 
+ * @constructor
+ * @augments Guacamole.Event.Target
+ * @param {!Element} element
+ *     The Element to use to provide touch events.
+ */
+Guacamole.Touch = function Touch(element) {
+
+    Guacamole.Event.Target.call(this);
+
+    /**
+     * Reference to this Guacamole.Touch.
+     *
+     * @private
+     * @type {!Guacamole.Touch}
+     */
+    var guacTouch = this;
+
+    /**
+     * The default X/Y radius of each touch if the device or browser does not
+     * expose the size of the contact area.
+     *
+     * @private
+     * @constant
+     * @type {!number}
+     */
+    var DEFAULT_CONTACT_RADIUS = Math.floor(16 * window.devicePixelRatio);
+
+    /**
+     * The set of all active touches, stored by their unique identifiers.
+     *
+     * @type {!Object.<Number, Guacamole.Touch.State>}
+     */
+    this.touches = {};
+
+    /**
+     * The number of active touches currently stored within
+     * {@link Guacamole.Touch#touches touches}.
+     */
+    this.activeTouches = 0;
+
+    /**
+     * Fired whenever a new touch contact is initiated on the element
+     * associated with this Guacamole.Touch.
+     * 
+     * @event Guacamole.Touch#touchstart
+     * @param {!Guacamole.Touch.Event} event
+     *     A {@link Guacamole.Touch.Event} object representing the "touchstart"
+     *     event.
+     */
+
+    /**
+     * Fired whenever an established touch contact moves within the element
+     * associated with this Guacamole.Touch.
+     * 
+     * @event Guacamole.Touch#touchmove
+     * @param {!Guacamole.Touch.Event} event
+     *     A {@link Guacamole.Touch.Event} object representing the "touchmove"
+     *     event.
+     */
+
+    /**
+     * Fired whenever an established touch contact is lifted from the element
+     * associated with this Guacamole.Touch.
+     * 
+     * @event Guacamole.Touch#touchend
+     * @param {!Guacamole.Touch.Event} event
+     *     A {@link Guacamole.Touch.Event} object representing the "touchend"
+     *     event.
+     */
+
+    element.addEventListener('touchstart', function touchstart(e) {
+
+        // Fire "ontouchstart" events for all new touches
+        for (var i = 0; i < e.changedTouches.length; i++) {
+
+            var changedTouch = e.changedTouches[i];
+            var identifier = changedTouch.identifier;
+
+            // Ignore duplicated touches
+            if (guacTouch.touches[identifier])
+                continue;
+
+            var touch = guacTouch.touches[identifier] = new Guacamole.Touch.State({
+                id      : identifier,
+                radiusX : changedTouch.radiusX || DEFAULT_CONTACT_RADIUS,
+                radiusY : changedTouch.radiusY || DEFAULT_CONTACT_RADIUS,
+                angle   : changedTouch.angle || 0.0,
+                force   : changedTouch.force || 1.0 /* Within JavaScript changedTouch events, a force of 0.0 indicates the device does not support reporting changedTouch force */
+            });
+
+            guacTouch.activeTouches++;
+
+            touch.fromClientPosition(element, changedTouch.clientX, changedTouch.clientY);
+            guacTouch.dispatch(new Guacamole.Touch.Event('touchmove', e, touch));
+
+        }
+
+    }, false);
+
+    element.addEventListener('touchmove', function touchstart(e) {
+
+        // Fire "ontouchmove" events for all updated touches
+        for (var i = 0; i < e.changedTouches.length; i++) {
+
+            var changedTouch = e.changedTouches[i];
+            var identifier = changedTouch.identifier;
+
+            // Ignore any unrecognized touches
+            var touch = guacTouch.touches[identifier];
+            if (!touch)
+                continue;
+
+            // Update force only if supported by browser (otherwise, assume
+            // force is unchanged)
+            if (changedTouch.force)
+                touch.force = changedTouch.force;
+
+            // Update touch area, if supported by browser and device
+            touch.angle = changedTouch.angle || 0.0;
+            touch.radiusX = changedTouch.radiusX || DEFAULT_CONTACT_RADIUS;
+            touch.radiusY = changedTouch.radiusY || DEFAULT_CONTACT_RADIUS;
+
+            // Update with any change in position
+            touch.fromClientPosition(element, changedTouch.clientX, changedTouch.clientY);
+            guacTouch.dispatch(new Guacamole.Touch.Event('touchmove', e, touch));
+
+        }
+
+    }, false);
+
+    element.addEventListener('touchend', function touchstart(e) {
+
+        // Fire "ontouchend" events for all updated touches
+        for (var i = 0; i < e.changedTouches.length; i++) {
+
+            var changedTouch = e.changedTouches[i];
+            var identifier = changedTouch.identifier;
+
+            // Ignore any unrecognized touches
+            var touch = guacTouch.touches[identifier];
+            if (!touch)
+                continue;
+
+            // Stop tracking this particular touch
+            delete guacTouch.touches[identifier];
+            guacTouch.activeTouches--;
+
+            // Touch has ended
+            touch.force = 0.0;
+
+            // Update with final position
+            touch.fromClientPosition(element, changedTouch.clientX, changedTouch.clientY);
+            guacTouch.dispatch(new Guacamole.Touch.Event('touchend', e, touch));
+
+        }
+
+    }, false);
+
+};
+
+/**
+ * The current state of a touch contact.
+ *
+ * @constructor
+ * @augments Guacamole.Position
+ * @param {Guacamole.Touch.State|object} [template={}]
+ *     The object whose properties should be copied within the new
+ *     Guacamole.Touch.State.
+ */
+Guacamole.Touch.State = function State(template) {
+
+    template = template || {};
+
+    Guacamole.Position.call(this, template);
+
+    /**
+     * An arbitrary integer ID which uniquely identifies this contact relative
+     * to other active contacts.
+     *
+     * @type {!number}
+     * @default 0
+     */
+    this.id = template.id || 0;
+
+    /**
+     * The Y radius of the ellipse covering the general area of the touch
+     * contact, in pixels.
+     *
+     * @type {!number}
+     * @default 0
+     */
+    this.radiusX = template.radiusX || 0;
+
+    /**
+     * The X radius of the ellipse covering the general area of the touch
+     * contact, in pixels.
+     *
+     * @type {!number}
+     * @default 0
+     */
+    this.radiusY = template.radiusY || 0;
+
+    /**
+     * The rough angle of clockwise rotation of the general area of the touch
+     * contact, in degrees.
+     *
+     * @type {!number}
+     * @default 0.0
+     */
+    this.angle = template.angle || 0.0;
+
+    /**
+     * The relative force exerted by the touch contact, where 0 is no force
+     * (the touch has been lifted) and 1 is maximum force (the maximum amount
+     * of force representable by the device).
+     *
+     * @type {!number}
+     * @default 1.0
+     */
+    this.force = template.force || 1.0;
+
+};
+
+/**
+ * An event which represents a change in state of a single touch contact,
+ * including the creation or removal of that contact. If multiple contacts are
+ * involved in a touch interaction, each contact will be associated with its
+ * own event.
+ *
+ * @constructor
+ * @augments Guacamole.Event.DOMEvent
+ * @param {!string} type
+ *     The name of the touch event type. Possible values are "touchstart",
+ *     "touchmove", and "touchend".
+ *
+ * @param {!TouchEvent} event
+ *     The DOM touch event that produced this Guacamole.Touch.Event.
+ *
+ * @param {!Guacamole.Touch.State} state
+ *     The state of the touch contact associated with this event.
+ */
+Guacamole.Touch.Event = function TouchEvent(type, event, state) {
+
+    Guacamole.Event.DOMEvent.call(this, type, [ event ]);
+
+    /**
+     * The state of the touch contact associated with this event.
+     *
+     * @type {!Guacamole.Touch.State}
+     */
+    this.state = state;
+
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 4.0.2 on Sat Mar 30 2024 09:36:10 GMT-0700 (Pacific Daylight Time) +
+ + + + + diff --git a/doc/1.5.5/guacamole-common-js/main_webapp_modules_Tunnel.js.html b/doc/1.5.5/guacamole-common-js/main_webapp_modules_Tunnel.js.html new file mode 100644 index 000000000..05f74f858 --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/main_webapp_modules_Tunnel.js.html @@ -0,0 +1,1428 @@ + + + + + JSDoc: Source: main/webapp/modules/Tunnel.js + + + + + + + + + + +
+ +

Source: main/webapp/modules/Tunnel.js

+ + + + + + +
+
+
/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+var Guacamole = Guacamole || {};
+
+/**
+ * Core object providing abstract communication for Guacamole. This object
+ * is a null implementation whose functions do nothing. Guacamole applications
+ * should use {@link Guacamole.HTTPTunnel} instead, or implement their own tunnel based
+ * on this one.
+ * 
+ * @constructor
+ * @see Guacamole.HTTPTunnel
+ */
+Guacamole.Tunnel = function() {
+
+    /**
+     * Connect to the tunnel with the given optional data. This data is
+     * typically used for authentication. The format of data accepted is
+     * up to the tunnel implementation.
+     * 
+     * @param {string} [data]
+     *     The data to send to the tunnel when connecting.
+     */
+    this.connect = function(data) {};
+    
+    /**
+     * Disconnect from the tunnel.
+     */
+    this.disconnect = function() {};
+    
+    /**
+     * Send the given message through the tunnel to the service on the other
+     * side. All messages are guaranteed to be received in the order sent.
+     * 
+     * @param {...*} elements
+     *     The elements of the message to send to the service on the other side
+     *     of the tunnel.
+     */
+    this.sendMessage = function(elements) {};
+
+    /**
+     * Changes the stored numeric state of this tunnel, firing the onstatechange
+     * event if the new state is different and a handler has been defined.
+     *
+     * @private
+     * @param {!number} state
+     *     The new state of this tunnel.
+     */
+    this.setState = function(state) {
+
+        // Notify only if state changes
+        if (state !== this.state) {
+            this.state = state;
+            if (this.onstatechange)
+                this.onstatechange(state);
+        }
+
+    };
+
+    /**
+     * Changes the stored UUID that uniquely identifies this tunnel, firing the
+     * onuuid event if a handler has been defined.
+     *
+     * @private
+     * @param {string} uuid
+     *     The new state of this tunnel.
+     */
+    this.setUUID = function setUUID(uuid) {
+        this.uuid = uuid;
+        if (this.onuuid)
+            this.onuuid(uuid);
+    };
+
+    /**
+     * Returns whether this tunnel is currently connected.
+     *
+     * @returns {!boolean}
+     *     true if this tunnel is currently connected, false otherwise.
+     */
+    this.isConnected = function isConnected() {
+        return this.state === Guacamole.Tunnel.State.OPEN
+            || this.state === Guacamole.Tunnel.State.UNSTABLE;
+    };
+
+    /**
+     * The current state of this tunnel.
+     * 
+     * @type {!number}
+     */
+    this.state = Guacamole.Tunnel.State.CLOSED;
+
+    /**
+     * The maximum amount of time to wait for data to be received, in
+     * milliseconds. If data is not received within this amount of time,
+     * the tunnel is closed with an error. The default value is 15000.
+     *
+     * @type {!number}
+     */
+    this.receiveTimeout = 15000;
+
+    /**
+     * The amount of time to wait for data to be received before considering
+     * the connection to be unstable, in milliseconds. If data is not received
+     * within this amount of time, the tunnel status is updated to warn that
+     * the connection appears unresponsive and may close. The default value is
+     * 1500.
+     * 
+     * @type {!number}
+     */
+    this.unstableThreshold = 1500;
+
+    /**
+     * The UUID uniquely identifying this tunnel. If not yet known, this will
+     * be null.
+     *
+     * @type {string}
+     */
+    this.uuid = null;
+
+    /**
+     * Fired when the UUID that uniquely identifies this tunnel is known.
+     *
+     * @event
+     * @param {!string}
+     *     The UUID uniquely identifying this tunnel.
+     */
+    this.onuuid = null;
+
+    /**
+     * Fired whenever an error is encountered by the tunnel.
+     * 
+     * @event
+     * @param {!Guacamole.Status} status
+     *     A status object which describes the error.
+     */
+    this.onerror = null;
+
+    /**
+     * Fired whenever the state of the tunnel changes.
+     * 
+     * @event
+     * @param {!number} state
+     *     The new state of the client.
+     */
+    this.onstatechange = null;
+
+    /**
+     * Fired once for every complete Guacamole instruction received, in order.
+     * 
+     * @event
+     * @param {!string} opcode
+     *     The Guacamole instruction opcode.
+     *
+     * @param {!string[]} parameters
+     *     The parameters provided for the instruction, if any.
+     */
+    this.oninstruction = null;
+
+};
+
+/**
+ * The Guacamole protocol instruction opcode reserved for arbitrary internal
+ * use by tunnel implementations. The value of this opcode is guaranteed to be
+ * the empty string (""). Tunnel implementations may use this opcode for any
+ * purpose. It is currently used by the HTTP tunnel to mark the end of the HTTP
+ * response, and by the WebSocket tunnel to transmit the tunnel UUID and send
+ * connection stability test pings/responses.
+ *
+ * @constant
+ * @type {!string}
+ */
+Guacamole.Tunnel.INTERNAL_DATA_OPCODE = '';
+
+/**
+ * All possible tunnel states.
+ *
+ * @type {!Object.<string, number>}
+ */
+Guacamole.Tunnel.State = {
+
+    /**
+     * A connection is in pending. It is not yet known whether connection was
+     * successful.
+     * 
+     * @type {!number}
+     */
+    "CONNECTING": 0,
+
+    /**
+     * Connection was successful, and data is being received.
+     * 
+     * @type {!number}
+     */
+    "OPEN": 1,
+
+    /**
+     * The connection is closed. Connection may not have been successful, the
+     * tunnel may have been explicitly closed by either side, or an error may
+     * have occurred.
+     * 
+     * @type {!number}
+     */
+    "CLOSED": 2,
+
+    /**
+     * The connection is open, but communication through the tunnel appears to
+     * be disrupted, and the connection may close as a result.
+     *
+     * @type {!number}
+     */
+    "UNSTABLE" : 3
+
+};
+
+/**
+ * Guacamole Tunnel implemented over HTTP via XMLHttpRequest.
+ * 
+ * @constructor
+ * @augments Guacamole.Tunnel
+ *
+ * @param {!string} tunnelURL
+ *     The URL of the HTTP tunneling service.
+ *
+ * @param {boolean} [crossDomain=false]
+ *     Whether tunnel requests will be cross-domain, and thus must use CORS
+ *     mechanisms and headers. By default, it is assumed that tunnel requests
+ *     will be made to the same domain.
+ *
+ * @param {object} [extraTunnelHeaders={}]
+ *     Key value pairs containing the header names and values of any additional
+ *     headers to be sent in tunnel requests. By default, no extra headers will
+ *     be added.
+ */
+Guacamole.HTTPTunnel = function(tunnelURL, crossDomain, extraTunnelHeaders) {
+
+    /**
+     * Reference to this HTTP tunnel.
+     *
+     * @private
+     * @type {!Guacamole.HTTPTunnel}
+     */
+    var tunnel = this;
+
+    var TUNNEL_CONNECT = tunnelURL + "?connect";
+    var TUNNEL_READ    = tunnelURL + "?read:";
+    var TUNNEL_WRITE   = tunnelURL + "?write:";
+
+    var POLLING_ENABLED     = 1;
+    var POLLING_DISABLED    = 0;
+
+    // Default to polling - will be turned off automatically if not needed
+    var pollingMode = POLLING_ENABLED;
+
+    var sendingMessages = false;
+    var outputMessageBuffer = "";
+
+    // If requests are expected to be cross-domain, the cookie that the HTTP
+    // tunnel depends on will only be sent if withCredentials is true
+    var withCredentials = !!crossDomain;
+
+    /**
+     * The current receive timeout ID, if any.
+     *
+     * @private
+     * @type {number}
+     */
+    var receive_timeout = null;
+
+    /**
+     * The current connection stability timeout ID, if any.
+     *
+     * @private
+     * @type {number}
+     */
+    var unstableTimeout = null;
+
+    /**
+     * The current connection stability test ping interval ID, if any. This
+     * will only be set upon successful connection.
+     *
+     * @private
+     * @type {number}
+     */
+    var pingInterval = null;
+
+    /**
+     * The number of milliseconds to wait between connection stability test
+     * pings.
+     *
+     * @private
+     * @constant
+     * @type {!number}
+     */
+    var PING_FREQUENCY = 500;
+
+    /**
+     * Additional headers to be sent in tunnel requests. This dictionary can be
+     * populated with key/value header pairs to pass information such as authentication
+     * tokens, etc.
+     *
+     * @private
+     * @type {!object}
+     */
+    var extraHeaders = extraTunnelHeaders || {};
+
+    /**
+     * The name of the HTTP header containing the session token specific to the
+     * HTTP tunnel implementation.
+     *
+     * @private
+     * @constant
+     * @type {!string}
+     */
+    var TUNNEL_TOKEN_HEADER = 'Guacamole-Tunnel-Token';
+
+    /**
+     * The session token currently assigned to this HTTP tunnel. All distinct
+     * HTTP tunnel connections will have their own dedicated session token.
+     *
+     * @private
+     * @type {string}
+     */
+    var tunnelSessionToken = null;
+
+    /**
+     * Adds the configured additional headers to the given request.
+     *
+     * @private
+     * @param {!XMLHttpRequest} request
+     *     The request where the configured extra headers will be added.
+     *
+     * @param {!object} headers
+     *     The headers to be added to the request.
+     */
+    function addExtraHeaders(request, headers) {
+        for (var name in headers) {
+            request.setRequestHeader(name, headers[name]);
+        }
+    }
+
+    /**
+     * Resets the state of timers tracking network activity and stability. If
+     * those timers are not yet started, invoking this function starts them.
+     * This function should be invoked when the tunnel is established and every
+     * time there is network activity on the tunnel, such that the timers can
+     * safely assume the network and/or server are not responding if this
+     * function has not been invoked for a significant period of time.
+     *
+     * @private
+     */
+    var resetTimers = function resetTimers() {
+
+        // Get rid of old timeouts (if any)
+        window.clearTimeout(receive_timeout);
+        window.clearTimeout(unstableTimeout);
+
+        // Clear unstable status
+        if (tunnel.state === Guacamole.Tunnel.State.UNSTABLE)
+            tunnel.setState(Guacamole.Tunnel.State.OPEN);
+
+        // Set new timeout for tracking overall connection timeout
+        receive_timeout = window.setTimeout(function () {
+            close_tunnel(new Guacamole.Status(Guacamole.Status.Code.UPSTREAM_TIMEOUT, "Server timeout."));
+        }, tunnel.receiveTimeout);
+
+        // Set new timeout for tracking suspected connection instability
+        unstableTimeout = window.setTimeout(function() {
+            tunnel.setState(Guacamole.Tunnel.State.UNSTABLE);
+        }, tunnel.unstableThreshold);
+
+    };
+
+    /**
+     * Closes this tunnel, signaling the given status and corresponding
+     * message, which will be sent to the onerror handler if the status is
+     * an error status.
+     * 
+     * @private
+     * @param {!Guacamole.Status} status
+     *     The status causing the connection to close;
+     */
+    function close_tunnel(status) {
+
+        // Get rid of old timeouts (if any)
+        window.clearTimeout(receive_timeout);
+        window.clearTimeout(unstableTimeout);
+
+        // Cease connection test pings
+        window.clearInterval(pingInterval);
+
+        // Ignore if already closed
+        if (tunnel.state === Guacamole.Tunnel.State.CLOSED)
+            return;
+
+        // If connection closed abnormally, signal error.
+        if (status.code !== Guacamole.Status.Code.SUCCESS && tunnel.onerror) {
+
+            // Ignore RESOURCE_NOT_FOUND if we've already connected, as that
+            // only signals end-of-stream for the HTTP tunnel.
+            if (tunnel.state === Guacamole.Tunnel.State.CONNECTING
+                    || status.code !== Guacamole.Status.Code.RESOURCE_NOT_FOUND)
+                tunnel.onerror(status);
+
+        }
+
+        // Reset output message buffer
+        sendingMessages = false;
+
+        // Mark as closed
+        tunnel.setState(Guacamole.Tunnel.State.CLOSED);
+
+    }
+
+
+    this.sendMessage = function() {
+
+        // Do not attempt to send messages if not connected
+        if (!tunnel.isConnected())
+            return;
+
+        // Do not attempt to send empty messages
+        if (!arguments.length)
+            return;
+
+        // Add message to buffer
+        outputMessageBuffer += Guacamole.Parser.toInstruction(arguments);
+
+        // Send if not currently sending
+        if (!sendingMessages)
+            sendPendingMessages();
+
+    };
+
+    function sendPendingMessages() {
+
+        // Do not attempt to send messages if not connected
+        if (!tunnel.isConnected())
+            return;
+
+        if (outputMessageBuffer.length > 0) {
+
+            sendingMessages = true;
+
+            var message_xmlhttprequest = new XMLHttpRequest();
+            message_xmlhttprequest.open("POST", TUNNEL_WRITE + tunnel.uuid);
+            message_xmlhttprequest.withCredentials = withCredentials;
+            addExtraHeaders(message_xmlhttprequest, extraHeaders);
+            message_xmlhttprequest.setRequestHeader("Content-type", "application/octet-stream");
+            message_xmlhttprequest.setRequestHeader(TUNNEL_TOKEN_HEADER, tunnelSessionToken);
+
+            // Once response received, send next queued event.
+            message_xmlhttprequest.onreadystatechange = function() {
+                if (message_xmlhttprequest.readyState === 4) {
+
+                    resetTimers();
+
+                    // If an error occurs during send, handle it
+                    if (message_xmlhttprequest.status !== 200)
+                        handleHTTPTunnelError(message_xmlhttprequest);
+
+                    // Otherwise, continue the send loop
+                    else
+                        sendPendingMessages();
+
+                }
+            };
+
+            message_xmlhttprequest.send(outputMessageBuffer);
+            outputMessageBuffer = ""; // Clear buffer
+
+        }
+        else
+            sendingMessages = false;
+
+    }
+
+    function handleHTTPTunnelError(xmlhttprequest) {
+
+        // Pull status code directly from headers provided by Guacamole
+        var code = parseInt(xmlhttprequest.getResponseHeader("Guacamole-Status-Code"));
+        if (code) {
+            var message = xmlhttprequest.getResponseHeader("Guacamole-Error-Message");
+            close_tunnel(new Guacamole.Status(code, message));
+        }
+
+        // Failing that, derive a Guacamole status code from the HTTP status
+        // code provided by the browser
+        else if (xmlhttprequest.status)
+            close_tunnel(new Guacamole.Status(
+                Guacamole.Status.Code.fromHTTPCode(xmlhttprequest.status),
+                    xmlhttprequest.statusText));
+
+        // Otherwise, assume server is unreachable
+        else
+            close_tunnel(new Guacamole.Status(Guacamole.Status.Code.UPSTREAM_NOT_FOUND));
+
+    }
+
+    function handleResponse(xmlhttprequest) {
+
+        var interval = null;
+        var nextRequest = null;
+
+        var dataUpdateEvents = 0;
+
+        var parser = new Guacamole.Parser();
+        parser.oninstruction = function instructionReceived(opcode, args) {
+
+            // Switch to next request if end-of-stream is signalled
+            if (opcode === Guacamole.Tunnel.INTERNAL_DATA_OPCODE && args.length === 0) {
+
+                // Reset parser state by simply switching to an entirely new
+                // parser
+                parser = new Guacamole.Parser();
+                parser.oninstruction = instructionReceived;
+
+                // Clean up interval if polling
+                if (interval)
+                    clearInterval(interval);
+
+                // Clean up object
+                xmlhttprequest.onreadystatechange = null;
+                xmlhttprequest.abort();
+
+                // Start handling next request
+                if (nextRequest)
+                    handleResponse(nextRequest);
+
+            }
+
+            // Call instruction handler.
+            else if (opcode !== Guacamole.Tunnel.INTERNAL_DATA_OPCODE && tunnel.oninstruction)
+                tunnel.oninstruction(opcode, args);
+
+        };
+
+        function parseResponse() {
+
+            // Do not handle responses if not connected
+            if (!tunnel.isConnected()) {
+                
+                // Clean up interval if polling
+                if (interval !== null)
+                    clearInterval(interval);
+                
+                return;
+            }
+
+            // Do not parse response yet if not ready
+            if (xmlhttprequest.readyState < 2) return;
+
+            // Attempt to read status
+            var status;
+            try { status = xmlhttprequest.status; }
+
+            // If status could not be read, assume successful.
+            catch (e) { status = 200; }
+
+            // Start next request as soon as possible IF request was successful
+            if (!nextRequest && status === 200)
+                nextRequest = makeRequest();
+
+            // Parse stream when data is received and when complete.
+            if (xmlhttprequest.readyState === 3 ||
+                xmlhttprequest.readyState === 4) {
+
+                resetTimers();
+
+                // Also poll every 30ms (some browsers don't repeatedly call onreadystatechange for new data)
+                if (pollingMode === POLLING_ENABLED) {
+                    if (xmlhttprequest.readyState === 3 && !interval)
+                        interval = setInterval(parseResponse, 30);
+                    else if (xmlhttprequest.readyState === 4 && interval)
+                        clearInterval(interval);
+                }
+
+                // If canceled, stop transfer
+                if (xmlhttprequest.status === 0) {
+                    tunnel.disconnect();
+                    return;
+                }
+
+                // Halt on error during request
+                else if (xmlhttprequest.status !== 200) {
+                    handleHTTPTunnelError(xmlhttprequest);
+                    return;
+                }
+
+                // Attempt to read in-progress data
+                var current;
+                try { current = xmlhttprequest.responseText; }
+
+                // Do not attempt to parse if data could not be read
+                catch (e) { return; }
+
+                try {
+                    parser.receive(current, true);
+                }
+                catch (e) {
+                    close_tunnel(new Guacamole.Status(Guacamole.Status.Code.SERVER_ERROR, e.message));
+                    return;
+                }
+
+            }
+
+        }
+
+        // If response polling enabled, attempt to detect if still
+        // necessary (via wrapping parseResponse())
+        if (pollingMode === POLLING_ENABLED) {
+            xmlhttprequest.onreadystatechange = function() {
+
+                // If we receive two or more readyState==3 events,
+                // there is no need to poll.
+                if (xmlhttprequest.readyState === 3) {
+                    dataUpdateEvents++;
+                    if (dataUpdateEvents >= 2) {
+                        pollingMode = POLLING_DISABLED;
+                        xmlhttprequest.onreadystatechange = parseResponse;
+                    }
+                }
+
+                parseResponse();
+            };
+        }
+
+        // Otherwise, just parse
+        else
+            xmlhttprequest.onreadystatechange = parseResponse;
+
+        parseResponse();
+
+    }
+
+    /**
+     * Arbitrary integer, unique for each tunnel read request.
+     * @private
+     */
+    var request_id = 0;
+
+    function makeRequest() {
+
+        // Make request, increment request ID
+        var xmlhttprequest = new XMLHttpRequest();
+        xmlhttprequest.open("GET", TUNNEL_READ + tunnel.uuid + ":" + (request_id++));
+        xmlhttprequest.setRequestHeader(TUNNEL_TOKEN_HEADER, tunnelSessionToken);
+        xmlhttprequest.withCredentials = withCredentials;
+        addExtraHeaders(xmlhttprequest, extraHeaders);
+        xmlhttprequest.send(null);
+
+        return xmlhttprequest;
+
+    }
+
+    this.connect = function(data) {
+
+        // Start waiting for connect
+        resetTimers();
+
+        // Mark the tunnel as connecting
+        tunnel.setState(Guacamole.Tunnel.State.CONNECTING);
+
+        // Start tunnel and connect
+        var connect_xmlhttprequest = new XMLHttpRequest();
+        connect_xmlhttprequest.onreadystatechange = function() {
+
+            if (connect_xmlhttprequest.readyState !== 4)
+                return;
+
+            // If failure, throw error
+            if (connect_xmlhttprequest.status !== 200) {
+                handleHTTPTunnelError(connect_xmlhttprequest);
+                return;
+            }
+
+            resetTimers();
+
+            // Get UUID and HTTP-specific tunnel session token from response
+            tunnel.setUUID(connect_xmlhttprequest.responseText);
+            tunnelSessionToken = connect_xmlhttprequest.getResponseHeader(TUNNEL_TOKEN_HEADER);
+
+            // Fail connect attempt if token is not successfully assigned
+            if (!tunnelSessionToken) {
+                close_tunnel(new Guacamole.Status(Guacamole.Status.Code.UPSTREAM_NOT_FOUND));
+                return;
+            }
+
+            // Mark as open
+            tunnel.setState(Guacamole.Tunnel.State.OPEN);
+
+            // Ping tunnel endpoint regularly to test connection stability
+            pingInterval = setInterval(function sendPing() {
+                tunnel.sendMessage("nop");
+            }, PING_FREQUENCY);
+
+            // Start reading data
+            handleResponse(makeRequest());
+
+        };
+
+        connect_xmlhttprequest.open("POST", TUNNEL_CONNECT, true);
+        connect_xmlhttprequest.withCredentials = withCredentials;
+        addExtraHeaders(connect_xmlhttprequest, extraHeaders);
+        connect_xmlhttprequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=UTF-8");
+        connect_xmlhttprequest.send(data);
+
+    };
+
+    this.disconnect = function() {
+        close_tunnel(new Guacamole.Status(Guacamole.Status.Code.SUCCESS, "Manually closed."));
+    };
+
+};
+
+Guacamole.HTTPTunnel.prototype = new Guacamole.Tunnel();
+
+/**
+ * Guacamole Tunnel implemented over WebSocket via XMLHttpRequest.
+ * 
+ * @constructor
+ * @augments Guacamole.Tunnel
+ * @param {!string} tunnelURL
+ *     The URL of the WebSocket tunneling service.
+ */
+Guacamole.WebSocketTunnel = function(tunnelURL) {
+
+    /**
+     * Reference to this WebSocket tunnel.
+     *
+     * @private
+     * @type {Guacamole.WebSocketTunnel}
+     */
+    var tunnel = this;
+
+    /**
+     * The parser that this tunnel will use to parse received Guacamole
+     * instructions. The parser is created when the tunnel is (re-)connected.
+     * Initially, this will be null.
+     *
+     * @private
+     * @type {Guacamole.Parser}
+     */
+    var parser = null;
+
+    /**
+     * The WebSocket used by this tunnel.
+     * 
+     * @private
+     * @type {WebSocket}
+     */
+    var socket = null;
+
+    /**
+     * The current receive timeout ID, if any.
+     *
+     * @private
+     * @type {number}
+     */
+    var receive_timeout = null;
+
+    /**
+     * The current connection stability timeout ID, if any.
+     *
+     * @private
+     * @type {number}
+     */
+    var unstableTimeout = null;
+
+    /**
+     * The current connection stability test ping timeout ID, if any. This
+     * will only be set upon successful connection.
+     *
+     * @private
+     * @type {number}
+     */
+    var pingTimeout = null;
+
+    /**
+     * The WebSocket protocol corresponding to the protocol used for the current
+     * location.
+     *
+     * @private
+     * @type {!Object.<string, string>}
+     */
+    var ws_protocol = {
+        "http:":  "ws:",
+        "https:": "wss:"
+    };
+
+    /**
+     * The number of milliseconds to wait between connection stability test
+     * pings.
+     *
+     * @private
+     * @constant
+     * @type {!number}
+     */
+    var PING_FREQUENCY = 500;
+
+    /**
+     * The timestamp of the point in time that the last connection stability
+     * test ping was sent, in milliseconds elapsed since midnight of January 1,
+     * 1970 UTC.
+     *
+     * @private
+     * @type {!number}
+     */
+    var lastSentPing = 0;
+
+    // Transform current URL to WebSocket URL
+
+    // If not already a websocket URL
+    if (   tunnelURL.substring(0, 3) !== "ws:"
+        && tunnelURL.substring(0, 4) !== "wss:") {
+
+        var protocol = ws_protocol[window.location.protocol];
+
+        // If absolute URL, convert to absolute WS URL
+        if (tunnelURL.substring(0, 1) === "/")
+            tunnelURL =
+                protocol
+                + "//" + window.location.host
+                + tunnelURL;
+
+        // Otherwise, construct absolute from relative URL
+        else {
+
+            // Get path from pathname
+            var slash = window.location.pathname.lastIndexOf("/");
+            var path  = window.location.pathname.substring(0, slash + 1);
+
+            // Construct absolute URL
+            tunnelURL =
+                protocol
+                + "//" + window.location.host
+                + path
+                + tunnelURL;
+
+        }
+
+    }
+
+    /**
+     * Sends an internal "ping" instruction to the Guacamole WebSocket
+     * endpoint, verifying network connection stability. If the network is
+     * stable, the Guacamole server will receive this instruction and respond
+     * with an identical ping.
+     *
+     * @private
+     */
+    var sendPing = function sendPing() {
+        var currentTime = new Date().getTime();
+        tunnel.sendMessage(Guacamole.Tunnel.INTERNAL_DATA_OPCODE, 'ping', currentTime);
+        lastSentPing = currentTime;
+    };
+
+    /**
+     * Resets the state of timers tracking network activity and stability. If
+     * those timers are not yet started, invoking this function starts them.
+     * This function should be invoked when the tunnel is established and every
+     * time there is network activity on the tunnel, such that the timers can
+     * safely assume the network and/or server are not responding if this
+     * function has not been invoked for a significant period of time.
+     *
+     * @private
+     */
+    var resetTimers = function resetTimers() {
+
+        // Get rid of old timeouts (if any)
+        window.clearTimeout(receive_timeout);
+        window.clearTimeout(unstableTimeout);
+        window.clearTimeout(pingTimeout);
+
+        // Clear unstable status
+        if (tunnel.state === Guacamole.Tunnel.State.UNSTABLE)
+            tunnel.setState(Guacamole.Tunnel.State.OPEN);
+
+        // Set new timeout for tracking overall connection timeout
+        receive_timeout = window.setTimeout(function () {
+            close_tunnel(new Guacamole.Status(Guacamole.Status.Code.UPSTREAM_TIMEOUT, "Server timeout."));
+        }, tunnel.receiveTimeout);
+
+        // Set new timeout for tracking suspected connection instability
+        unstableTimeout = window.setTimeout(function() {
+            tunnel.setState(Guacamole.Tunnel.State.UNSTABLE);
+        }, tunnel.unstableThreshold);
+
+        var currentTime = new Date().getTime();
+        var pingDelay = Math.max(lastSentPing + PING_FREQUENCY - currentTime, 0);
+
+        // Ping tunnel endpoint regularly to test connection stability, sending
+        // the ping immediately if enough time has already elapsed
+        if (pingDelay > 0)
+            pingTimeout = window.setTimeout(sendPing, pingDelay);
+        else
+            sendPing();
+
+    };
+
+    /**
+     * Closes this tunnel, signaling the given status and corresponding
+     * message, which will be sent to the onerror handler if the status is
+     * an error status.
+     * 
+     * @private
+     * @param {!Guacamole.Status} status
+     *     The status causing the connection to close;
+     */
+    function close_tunnel(status) {
+
+        // Get rid of old timeouts (if any)
+        window.clearTimeout(receive_timeout);
+        window.clearTimeout(unstableTimeout);
+        window.clearTimeout(pingTimeout);
+
+        // Ignore if already closed
+        if (tunnel.state === Guacamole.Tunnel.State.CLOSED)
+            return;
+
+        // If connection closed abnormally, signal error.
+        if (status.code !== Guacamole.Status.Code.SUCCESS && tunnel.onerror)
+            tunnel.onerror(status);
+
+        // Mark as closed
+        tunnel.setState(Guacamole.Tunnel.State.CLOSED);
+
+        socket.close();
+
+    }
+
+    this.sendMessage = function(elements) {
+
+        // Do not attempt to send messages if not connected
+        if (!tunnel.isConnected())
+            return;
+
+        // Do not attempt to send empty messages
+        if (!arguments.length)
+            return;
+
+        socket.send(Guacamole.Parser.toInstruction(arguments));
+
+    };
+
+    this.connect = function(data) {
+
+        resetTimers();
+
+        // Mark the tunnel as connecting
+        tunnel.setState(Guacamole.Tunnel.State.CONNECTING);
+
+        parser = new Guacamole.Parser();
+        parser.oninstruction = function instructionReceived(opcode, args) {
+
+            // Update state and UUID when first instruction received
+            if (tunnel.uuid === null) {
+
+                // Associate tunnel UUID if received
+                if (opcode === Guacamole.Tunnel.INTERNAL_DATA_OPCODE && args.length === 1)
+                    tunnel.setUUID(args[0]);
+
+                // Tunnel is now open and UUID is available
+                tunnel.setState(Guacamole.Tunnel.State.OPEN);
+
+            }
+
+            // Call instruction handler.
+            if (opcode !== Guacamole.Tunnel.INTERNAL_DATA_OPCODE && tunnel.oninstruction)
+                tunnel.oninstruction(opcode, args);
+
+        };
+
+        // Connect socket
+        socket = new WebSocket(tunnelURL + "?" + data, "guacamole");
+
+        socket.onopen = function(event) {
+            resetTimers();
+        };
+
+        socket.onclose = function(event) {
+
+            // Pull status code directly from closure reason provided by Guacamole
+            if (event.reason)
+                close_tunnel(new Guacamole.Status(parseInt(event.reason), event.reason));
+
+            // Failing that, derive a Guacamole status code from the WebSocket
+            // status code provided by the browser
+            else if (event.code)
+                close_tunnel(new Guacamole.Status(Guacamole.Status.Code.fromWebSocketCode(event.code)));
+
+            // Otherwise, assume server is unreachable
+            else
+                close_tunnel(new Guacamole.Status(Guacamole.Status.Code.UPSTREAM_NOT_FOUND));
+
+        };
+        
+        socket.onmessage = function(event) {
+
+            resetTimers();
+
+            try {
+                parser.receive(event.data);
+            }
+            catch (e) {
+                close_tunnel(new Guacamole.Status(Guacamole.Status.Code.SERVER_ERROR, e.message));
+            }
+
+        };
+
+    };
+
+    this.disconnect = function() {
+        close_tunnel(new Guacamole.Status(Guacamole.Status.Code.SUCCESS, "Manually closed."));
+    };
+
+};
+
+Guacamole.WebSocketTunnel.prototype = new Guacamole.Tunnel();
+
+/**
+ * Guacamole Tunnel which cycles between all specified tunnels until
+ * no tunnels are left. Another tunnel is used if an error occurs but
+ * no instructions have been received. If an instruction has been
+ * received, or no tunnels remain, the error is passed directly out
+ * through the onerror handler (if defined).
+ * 
+ * @constructor
+ * @augments Guacamole.Tunnel
+ * @param {...Guacamole.Tunnel} tunnelChain
+ *     The tunnels to use, in order of priority.
+ */
+Guacamole.ChainedTunnel = function(tunnelChain) {
+
+    /**
+     * Reference to this chained tunnel.
+     * @private
+     */
+    var chained_tunnel = this;
+
+    /**
+     * Data passed in via connect(), to be used for
+     * wrapped calls to other tunnels' connect() functions.
+     * @private
+     */
+    var connect_data;
+
+    /**
+     * Array of all tunnels passed to this ChainedTunnel through the
+     * constructor arguments.
+     * @private
+     */
+    var tunnels = [];
+
+    /**
+     * The tunnel committed via commit_tunnel(), if any, or null if no tunnel
+     * has yet been committed.
+     *
+     * @private
+     * @type {Guacamole.Tunnel}
+     */
+    var committedTunnel = null;
+
+    // Load all tunnels into array
+    for (var i=0; i<arguments.length; i++)
+        tunnels.push(arguments[i]);
+
+    /**
+     * Sets the current tunnel.
+     * 
+     * @private
+     * @param {!Guacamole.Tunnel} tunnel
+     *     The tunnel to set as the current tunnel.
+     */
+    function attach(tunnel) {
+
+        // Set own functions to tunnel's functions
+        chained_tunnel.disconnect  = tunnel.disconnect;
+        chained_tunnel.sendMessage = tunnel.sendMessage;
+
+        /**
+         * Fails the currently-attached tunnel, attaching a new tunnel if
+         * possible.
+         *
+         * @private
+         * @param {Guacamole.Status} [status]
+         *     An object representing the failure that occured in the
+         *     currently-attached tunnel, if known.
+         *
+         * @return {Guacamole.Tunnel}
+         *     The next tunnel, or null if there are no more tunnels to try or
+         *     if no more tunnels should be tried.
+         */
+        var failTunnel = function failTunnel(status) {
+
+            // Do not attempt to continue using next tunnel on server timeout
+            if (status && status.code === Guacamole.Status.Code.UPSTREAM_TIMEOUT) {
+                tunnels = [];
+                return null;
+            }
+
+            // Get next tunnel
+            var next_tunnel = tunnels.shift();
+
+            // If there IS a next tunnel, try using it.
+            if (next_tunnel) {
+                tunnel.onerror = null;
+                tunnel.oninstruction = null;
+                tunnel.onstatechange = null;
+                attach(next_tunnel);
+            }
+
+            return next_tunnel;
+
+        };
+
+        /**
+         * Use the current tunnel from this point forward. Do not try any more
+         * tunnels, even if the current tunnel fails.
+         * 
+         * @private
+         */
+        function commit_tunnel() {
+
+            tunnel.onstatechange = chained_tunnel.onstatechange;
+            tunnel.oninstruction = chained_tunnel.oninstruction;
+            tunnel.onerror = chained_tunnel.onerror;
+
+            // Assign UUID if already known
+            if (tunnel.uuid)
+                chained_tunnel.setUUID(tunnel.uuid);
+
+            // Assign any future received UUIDs such that they are
+            // accessible from the main uuid property of the chained tunnel
+            tunnel.onuuid = function uuidReceived(uuid) {
+                chained_tunnel.setUUID(uuid);
+            };
+
+            committedTunnel = tunnel;
+
+        }
+
+        // Wrap own onstatechange within current tunnel
+        tunnel.onstatechange = function(state) {
+
+            switch (state) {
+
+                // If open, use this tunnel from this point forward.
+                case Guacamole.Tunnel.State.OPEN:
+                    commit_tunnel();
+                    if (chained_tunnel.onstatechange)
+                        chained_tunnel.onstatechange(state);
+                    break;
+
+                // If closed, mark failure, attempt next tunnel
+                case Guacamole.Tunnel.State.CLOSED:
+                    if (!failTunnel() && chained_tunnel.onstatechange)
+                        chained_tunnel.onstatechange(state);
+                    break;
+                
+            }
+
+        };
+
+        // Wrap own oninstruction within current tunnel
+        tunnel.oninstruction = function(opcode, elements) {
+
+            // Accept current tunnel
+            commit_tunnel();
+
+            // Invoke handler
+            if (chained_tunnel.oninstruction)
+                chained_tunnel.oninstruction(opcode, elements);
+
+        };
+
+        // Attach next tunnel on error
+        tunnel.onerror = function(status) {
+
+            // Mark failure, attempt next tunnel
+            if (!failTunnel(status) && chained_tunnel.onerror)
+                chained_tunnel.onerror(status);
+
+        };
+
+        // Attempt connection
+        tunnel.connect(connect_data);
+        
+    }
+
+    this.connect = function(data) {
+       
+        // Remember connect data
+        connect_data = data;
+
+        // Get committed tunnel if exists or the first tunnel on the list
+        var next_tunnel = committedTunnel ? committedTunnel : tunnels.shift();
+
+        // Attach first tunnel
+        if (next_tunnel)
+            attach(next_tunnel);
+
+        // If there IS no first tunnel, error
+        else if (chained_tunnel.onerror)
+            chained_tunnel.onerror(Guacamole.Status.Code.SERVER_ERROR, "No tunnels to try.");
+
+    };
+    
+};
+
+Guacamole.ChainedTunnel.prototype = new Guacamole.Tunnel();
+
+/**
+ * Guacamole Tunnel which replays a Guacamole protocol dump from a static file
+ * received via HTTP. Instructions within the file are parsed and handled as
+ * quickly as possible, while the file is being downloaded.
+ *
+ * @constructor
+ * @augments Guacamole.Tunnel
+ * @param {!string} url
+ *     The URL of a Guacamole protocol dump.
+ *
+ * @param {boolean} [crossDomain=false]
+ *     Whether tunnel requests will be cross-domain, and thus must use CORS
+ *     mechanisms and headers. By default, it is assumed that tunnel requests
+ *     will be made to the same domain.
+ *
+ * @param {object} [extraTunnelHeaders={}]
+ *     Key value pairs containing the header names and values of any additional
+ *     headers to be sent in tunnel requests. By default, no extra headers will
+ *     be added.
+ */
+Guacamole.StaticHTTPTunnel = function StaticHTTPTunnel(url, crossDomain, extraTunnelHeaders) {
+
+    /**
+     * Reference to this Guacamole.StaticHTTPTunnel.
+     *
+     * @private
+     */
+    var tunnel = this;
+
+    /**
+     * AbortController instance which allows the current, in-progress HTTP
+     * request to be aborted. If no request is currently in progress, this will
+     * be null.
+     *
+     * @private
+     * @type {AbortController}
+     */
+    var abortController = null;
+
+    /**
+     * Additional headers to be sent in tunnel requests. This dictionary can be
+     * populated with key/value header pairs to pass information such as authentication
+     * tokens, etc.
+     *
+     * @private
+     * @type {!object}
+     */
+    var extraHeaders = extraTunnelHeaders || {};
+
+    /**
+     * The number of bytes in the file being downloaded, or null if this is not
+     * known.
+     *
+     * @type {number}
+     */
+    this.size = null;
+
+    this.sendMessage = function sendMessage(elements) {
+        // Do nothing
+    };
+
+    this.connect = function connect(data) {
+
+        // Ensure any existing connection is killed
+        tunnel.disconnect();
+
+        // Connection is now starting
+        tunnel.setState(Guacamole.Tunnel.State.CONNECTING);
+
+        // Create Guacamole protocol and UTF-8 parsers specifically for this
+        // connection
+        var parser = new Guacamole.Parser();
+        var utf8Parser = new Guacamole.UTF8Parser();
+
+        // Invoke tunnel's oninstruction handler for each parsed instruction
+        parser.oninstruction = function instructionReceived(opcode, args) {
+            if (tunnel.oninstruction)
+                tunnel.oninstruction(opcode, args);
+        };
+
+        // Allow new request to be aborted
+        abortController = new AbortController();
+
+        // Stream using the Fetch API
+        fetch(url, {
+            headers : extraHeaders,
+            credentials : crossDomain ? 'include' : 'same-origin',
+            signal : abortController.signal
+        })
+        .then(function gotResponse(response) {
+
+            // Reset state and close upon error
+            if (!response.ok) {
+
+                if (tunnel.onerror)
+                    tunnel.onerror(new Guacamole.Status(
+                        Guacamole.Status.Code.fromHTTPCode(response.status), response.statusText));
+
+                tunnel.disconnect();
+                return;
+
+            }
+
+            // Report overall size of stream in bytes, if known
+            tunnel.size = response.headers.get('Content-Length');
+
+            // Connection is open
+            tunnel.setState(Guacamole.Tunnel.State.OPEN);
+
+            var reader = response.body.getReader();
+            var processReceivedText = function processReceivedText(result) {
+
+                // Clean up and close when done
+                if (result.done) {
+                    tunnel.disconnect();
+                    return;
+                }
+
+                // Parse only the portion of data which is newly received
+                parser.receive(utf8Parser.decode(result.value));
+
+                // Continue parsing when next chunk is received
+                reader.read().then(processReceivedText);
+
+            };
+
+            // Schedule parse of first chunk
+            reader.read().then(processReceivedText);
+
+        });
+
+    };
+
+    this.disconnect = function disconnect() {
+
+        // Abort any in-progress request
+        if (abortController) {
+            abortController.abort();
+            abortController = null;
+        }
+
+        // Connection is now closed
+        tunnel.setState(Guacamole.Tunnel.State.CLOSED);
+
+    };
+
+};
+
+Guacamole.StaticHTTPTunnel.prototype = new Guacamole.Tunnel();
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 4.0.2 on Sat Mar 30 2024 09:36:10 GMT-0700 (Pacific Daylight Time) +
+ + + + + diff --git a/doc/1.5.5/guacamole-common-js/main_webapp_modules_UTF8Parser.js.html b/doc/1.5.5/guacamole-common-js/main_webapp_modules_UTF8Parser.js.html new file mode 100644 index 000000000..45c898317 --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/main_webapp_modules_UTF8Parser.js.html @@ -0,0 +1,176 @@ + + + + + JSDoc: Source: main/webapp/modules/UTF8Parser.js + + + + + + + + + + +
+ +

Source: main/webapp/modules/UTF8Parser.js

+ + + + + + +
+
+
/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+var Guacamole = Guacamole || {};
+
+/**
+ * Parser that decodes UTF-8 text from a series of provided ArrayBuffers.
+ * Multi-byte characters that continue from one buffer to the next are handled
+ * correctly.
+ *
+ * @constructor
+ */
+Guacamole.UTF8Parser = function UTF8Parser() {
+
+    /**
+     * The number of bytes remaining for the current codepoint.
+     *
+     * @private
+     * @type {!number}
+     */
+    var bytesRemaining = 0;
+
+    /**
+     * The current codepoint value, as calculated from bytes read so far.
+     *
+     * @private
+     * @type {!number}
+     */
+    var codepoint = 0;
+
+    /**
+     * Decodes the given UTF-8 data into a Unicode string, returning a string
+     * containing all complete UTF-8 characters within the provided data. The
+     * data may end in the middle of a multi-byte character, in which case the
+     * complete character will be returned from a later call to decode() after
+     * enough bytes have been provided.
+     *
+     * @private
+     * @param {!ArrayBuffer} buffer
+     *     Arbitrary UTF-8 data.
+     *
+     * @return {!string}
+     *     The decoded Unicode string.
+     */
+    this.decode = function decode(buffer) {
+
+        var text = '';
+
+        var bytes = new Uint8Array(buffer);
+        for (var i=0; i<bytes.length; i++) {
+
+            // Get current byte
+            var value = bytes[i];
+
+            // Start new codepoint if nothing yet read
+            if (bytesRemaining === 0) {
+
+                // 1 byte (0xxxxxxx)
+                if ((value | 0x7F) === 0x7F)
+                    text += String.fromCharCode(value);
+
+                // 2 byte (110xxxxx)
+                else if ((value | 0x1F) === 0xDF) {
+                    codepoint = value & 0x1F;
+                    bytesRemaining = 1;
+                }
+
+                // 3 byte (1110xxxx)
+                else if ((value | 0x0F )=== 0xEF) {
+                    codepoint = value & 0x0F;
+                    bytesRemaining = 2;
+                }
+
+                // 4 byte (11110xxx)
+                else if ((value | 0x07) === 0xF7) {
+                    codepoint = value & 0x07;
+                    bytesRemaining = 3;
+                }
+
+                // Invalid byte
+                else
+                    text += '\uFFFD';
+
+            }
+
+            // Continue existing codepoint (10xxxxxx)
+            else if ((value | 0x3F) === 0xBF) {
+
+                codepoint = (codepoint << 6) | (value & 0x3F);
+                bytesRemaining--;
+
+                // Write codepoint if finished
+                if (bytesRemaining === 0)
+                    text += String.fromCharCode(codepoint);
+
+            }
+
+            // Invalid byte
+            else {
+                bytesRemaining = 0;
+                text += '\uFFFD';
+            }
+
+        }
+
+        return text;
+
+    };
+
+};
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 4.0.2 on Sat Mar 30 2024 09:36:10 GMT-0700 (Pacific Daylight Time) +
+ + + + + diff --git a/doc/1.5.5/guacamole-common-js/main_webapp_modules_Version.js.html b/doc/1.5.5/guacamole-common-js/main_webapp_modules_Version.js.html new file mode 100644 index 000000000..0b6c37238 --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/main_webapp_modules_Version.js.html @@ -0,0 +1,81 @@ + + + + + JSDoc: Source: main/webapp/modules/Version.js + + + + + + + + + + +
+ +

Source: main/webapp/modules/Version.js

+ + + + + + +
+
+
/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+var Guacamole = Guacamole || {};
+
+/**
+ * The unique ID of this version of the Guacamole JavaScript API. This ID will
+ * be the version string of the guacamole-common-js Maven project, and can be
+ * used in downstream applications as a sanity check that the proper version
+ * of the APIs is being used (in case an older version is cached, for example).
+ *
+ * @type {!string}
+ */
+Guacamole.API_VERSION = "1.5.4";
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 4.0.2 on Sat Mar 30 2024 09:36:10 GMT-0700 (Pacific Daylight Time) +
+ + + + + diff --git a/doc/1.5.5/guacamole-common-js/main_webapp_modules_VideoPlayer.js.html b/doc/1.5.5/guacamole-common-js/main_webapp_modules_VideoPlayer.js.html new file mode 100644 index 000000000..766f6c59b --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/main_webapp_modules_VideoPlayer.js.html @@ -0,0 +1,159 @@ + + + + + JSDoc: Source: main/webapp/modules/VideoPlayer.js + + + + + + + + + + +
+ +

Source: main/webapp/modules/VideoPlayer.js

+ + + + + + +
+
+
/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+var Guacamole = Guacamole || {};
+
+/**
+ * Abstract video player which accepts, queues and plays back arbitrary video
+ * data. It is up to implementations of this class to provide some means of
+ * handling a provided Guacamole.InputStream and rendering the received data to
+ * the provided Guacamole.Display.VisibleLayer. Data received along the
+ * provided stream is to be played back immediately.
+ *
+ * @constructor
+ */
+Guacamole.VideoPlayer = function VideoPlayer() {
+
+    /**
+     * Notifies this Guacamole.VideoPlayer that all video up to the current
+     * point in time has been given via the underlying stream, and that any
+     * difference in time between queued video data and the current time can be
+     * considered latency.
+     */
+    this.sync = function sync() {
+        // Default implementation - do nothing
+    };
+
+};
+
+/**
+ * Determines whether the given mimetype is supported by any built-in
+ * implementation of Guacamole.VideoPlayer, and thus will be properly handled
+ * by Guacamole.VideoPlayer.getInstance().
+ *
+ * @param {!string} mimetype
+ *     The mimetype to check.
+ *
+ * @returns {!boolean}
+ *     true if the given mimetype is supported by any built-in
+ *     Guacamole.VideoPlayer, false otherwise.
+ */
+Guacamole.VideoPlayer.isSupportedType = function isSupportedType(mimetype) {
+
+    // There are currently no built-in video players (and therefore no
+    // supported types)
+    return false;
+
+};
+
+/**
+ * Returns a list of all mimetypes supported by any built-in
+ * Guacamole.VideoPlayer, in rough order of priority. Beware that only the core
+ * mimetypes themselves will be listed. Any mimetype parameters, even required
+ * ones, will not be included in the list.
+ *
+ * @returns {!string[]}
+ *     A list of all mimetypes supported by any built-in Guacamole.VideoPlayer,
+ *     excluding any parameters.
+ */
+Guacamole.VideoPlayer.getSupportedTypes = function getSupportedTypes() {
+
+    // There are currently no built-in video players (and therefore no
+    // supported types)
+    return [];
+
+};
+
+/**
+ * Returns an instance of Guacamole.VideoPlayer providing support for the given
+ * video format. If support for the given video format is not available, null
+ * is returned.
+ *
+ * @param {!Guacamole.InputStream} stream
+ *     The Guacamole.InputStream to read video data from.
+ *
+ * @param {!Guacamole.Display.VisibleLayer} layer
+ *     The destination layer in which this Guacamole.VideoPlayer should play
+ *     the received video data.
+ *
+ * @param {!string} mimetype
+ *     The mimetype of the video data in the provided stream.
+ *
+ * @return {Guacamole.VideoPlayer}
+ *     A Guacamole.VideoPlayer instance supporting the given mimetype and
+ *     reading from the given stream, or null if support for the given mimetype
+ *     is absent.
+ */
+Guacamole.VideoPlayer.getInstance = function getInstance(stream, layer, mimetype) {
+
+    // There are currently no built-in video players
+    return null;
+
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 4.0.2 on Sat Mar 30 2024 09:36:10 GMT-0700 (Pacific Daylight Time) +
+ + + + + diff --git a/doc/1.5.5/guacamole-common-js/scripts/linenumber.js b/doc/1.5.5/guacamole-common-js/scripts/linenumber.js new file mode 100644 index 000000000..4354785ce --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/scripts/linenumber.js @@ -0,0 +1,25 @@ +/*global document */ +(() => { + const source = document.getElementsByClassName('prettyprint source linenums'); + let i = 0; + let lineNumber = 0; + let lineId; + let lines; + let totalLines; + let anchorHash; + + if (source && source[0]) { + anchorHash = document.location.hash.substring(1); + lines = source[0].getElementsByTagName('li'); + totalLines = lines.length; + + for (; i < totalLines; i++) { + lineNumber++; + lineId = `line${lineNumber}`; + lines[i].id = lineId; + if (lineId === anchorHash) { + lines[i].className += ' selected'; + } + } + } +})(); diff --git a/doc/1.5.5/guacamole-common-js/scripts/prettify/Apache-License-2.0.txt b/doc/1.5.5/guacamole-common-js/scripts/prettify/Apache-License-2.0.txt new file mode 100644 index 000000000..d64569567 --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/scripts/prettify/Apache-License-2.0.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/doc/1.5.5/guacamole-common-js/scripts/prettify/lang-css.js b/doc/1.5.5/guacamole-common-js/scripts/prettify/lang-css.js new file mode 100644 index 000000000..041e1f590 --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/scripts/prettify/lang-css.js @@ -0,0 +1,2 @@ +PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\f\r ]+/,null," \t\r\n "]],[["str",/^"(?:[^\n\f\r"\\]|\\(?:\r\n?|\n|\f)|\\[\S\s])*"/,null],["str",/^'(?:[^\n\f\r'\\]|\\(?:\r\n?|\n|\f)|\\[\S\s])*'/,null],["lang-css-str",/^url\(([^"')]*)\)/i],["kwd",/^(?:url|rgb|!important|@import|@page|@media|@charset|inherit)(?=[^\w-]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*)\s*:/i],["com",/^\/\*[^*]*\*+(?:[^*/][^*]*\*+)*\//],["com", +/^(?:<\!--|--\>)/],["lit",/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],["lit",/^#[\da-f]{3,6}/i],["pln",/^-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*/i],["pun",/^[^\s\w"']+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[["kwd",/^-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[["str",/^[^"')]+/]]),["css-str"]); diff --git a/doc/1.5.5/guacamole-common-js/scripts/prettify/prettify.js b/doc/1.5.5/guacamole-common-js/scripts/prettify/prettify.js new file mode 100644 index 000000000..eef5ad7e6 --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/scripts/prettify/prettify.js @@ -0,0 +1,28 @@ +var q=null;window.PR_SHOULD_USE_CONTINUATION=!0; +(function(){function L(a){function m(a){var f=a.charCodeAt(0);if(f!==92)return f;var b=a.charAt(1);return(f=r[b])?f:"0"<=b&&b<="7"?parseInt(a.substring(1),8):b==="u"||b==="x"?parseInt(a.substring(2),16):a.charCodeAt(1)}function e(a){if(a<32)return(a<16?"\\x0":"\\x")+a.toString(16);a=String.fromCharCode(a);if(a==="\\"||a==="-"||a==="["||a==="]")a="\\"+a;return a}function h(a){for(var f=a.substring(1,a.length-1).match(/\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\[0-3][0-7]{0,2}|\\[0-7]{1,2}|\\[\S\s]|[^\\]/g),a= +[],b=[],o=f[0]==="^",c=o?1:0,i=f.length;c122||(d<65||j>90||b.push([Math.max(65,j)|32,Math.min(d,90)|32]),d<97||j>122||b.push([Math.max(97,j)&-33,Math.min(d,122)&-33]))}}b.sort(function(a,f){return a[0]-f[0]||f[1]-a[1]});f=[];j=[NaN,NaN];for(c=0;ci[0]&&(i[1]+1>i[0]&&b.push("-"),b.push(e(i[1])));b.push("]");return b.join("")}function y(a){for(var f=a.source.match(/\[(?:[^\\\]]|\\[\S\s])*]|\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\\d+|\\[^\dux]|\(\?[!:=]|[()^]|[^()[\\^]+/g),b=f.length,d=[],c=0,i=0;c=2&&a==="["?f[c]=h(j):a!=="\\"&&(f[c]=j.replace(/[A-Za-z]/g,function(a){a=a.charCodeAt(0);return"["+String.fromCharCode(a&-33,a|32)+"]"}));return f.join("")}for(var t=0,s=!1,l=!1,p=0,d=a.length;p=5&&"lang-"===b.substring(0,5))&&!(o&&typeof o[1]==="string"))c=!1,b="src";c||(r[f]=b)}i=d;d+=f.length;if(c){c=o[1];var j=f.indexOf(c),k=j+c.length;o[2]&&(k=f.length-o[2].length,j=k-c.length);b=b.substring(5);B(l+i,f.substring(0,j),e,p);B(l+i+j,c,C(b,c),p);B(l+i+k,f.substring(k),e,p)}else p.push(l+i,b)}a.e=p}var h={},y;(function(){for(var e=a.concat(m), +l=[],p={},d=0,g=e.length;d=0;)h[n.charAt(k)]=r;r=r[1];n=""+r;p.hasOwnProperty(n)||(l.push(r),p[n]=q)}l.push(/[\S\s]/);y=L(l)})();var t=m.length;return e}function u(a){var m=[],e=[];a.tripleQuotedStrings?m.push(["str",/^(?:'''(?:[^'\\]|\\[\S\s]|''?(?=[^']))*(?:'''|$)|"""(?:[^"\\]|\\[\S\s]|""?(?=[^"]))*(?:"""|$)|'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$))/,q,"'\""]):a.multiLineStrings?m.push(["str",/^(?:'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$)|`(?:[^\\`]|\\[\S\s])*(?:`|$))/, +q,"'\"`"]):m.push(["str",/^(?:'(?:[^\n\r'\\]|\\.)*(?:'|$)|"(?:[^\n\r"\\]|\\.)*(?:"|$))/,q,"\"'"]);a.verbatimStrings&&e.push(["str",/^@"(?:[^"]|"")*(?:"|$)/,q]);var h=a.hashComments;h&&(a.cStyleComments?(h>1?m.push(["com",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,q,"#"]):m.push(["com",/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\n\r]*)/,q,"#"]),e.push(["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,q])):m.push(["com",/^#[^\n\r]*/, +q,"#"]));a.cStyleComments&&(e.push(["com",/^\/\/[^\n\r]*/,q]),e.push(["com",/^\/\*[\S\s]*?(?:\*\/|$)/,q]));a.regexLiterals&&e.push(["lang-regex",/^(?:^^\.?|[!+-]|!=|!==|#|%|%=|&|&&|&&=|&=|\(|\*|\*=|\+=|,|-=|->|\/|\/=|:|::|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|[?@[^]|\^=|\^\^|\^\^=|{|\||\|=|\|\||\|\|=|~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\s*(\/(?=[^*/])(?:[^/[\\]|\\[\S\s]|\[(?:[^\\\]]|\\[\S\s])*(?:]|$))+\/)/]);(h=a.types)&&e.push(["typ",h]);a=(""+a.keywords).replace(/^ | $/g, +"");a.length&&e.push(["kwd",RegExp("^(?:"+a.replace(/[\s,]+/g,"|")+")\\b"),q]);m.push(["pln",/^\s+/,q," \r\n\t\xa0"]);e.push(["lit",/^@[$_a-z][\w$@]*/i,q],["typ",/^(?:[@_]?[A-Z]+[a-z][\w$@]*|\w+_t\b)/,q],["pln",/^[$_a-z][\w$@]*/i,q],["lit",/^(?:0x[\da-f]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+-]?\d+)?)[a-z]*/i,q,"0123456789"],["pln",/^\\[\S\s]?/,q],["pun",/^.[^\s\w"-$'./@\\`]*/,q]);return x(m,e)}function D(a,m){function e(a){switch(a.nodeType){case 1:if(k.test(a.className))break;if("BR"===a.nodeName)h(a), +a.parentNode&&a.parentNode.removeChild(a);else for(a=a.firstChild;a;a=a.nextSibling)e(a);break;case 3:case 4:if(p){var b=a.nodeValue,d=b.match(t);if(d){var c=b.substring(0,d.index);a.nodeValue=c;(b=b.substring(d.index+d[0].length))&&a.parentNode.insertBefore(s.createTextNode(b),a.nextSibling);h(a);c||a.parentNode.removeChild(a)}}}}function h(a){function b(a,d){var e=d?a.cloneNode(!1):a,f=a.parentNode;if(f){var f=b(f,1),g=a.nextSibling;f.appendChild(e);for(var h=g;h;h=g)g=h.nextSibling,f.appendChild(h)}return e} +for(;!a.nextSibling;)if(a=a.parentNode,!a)return;for(var a=b(a.nextSibling,0),e;(e=a.parentNode)&&e.nodeType===1;)a=e;d.push(a)}var k=/(?:^|\s)nocode(?:\s|$)/,t=/\r\n?|\n/,s=a.ownerDocument,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=s.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);for(l=s.createElement("LI");a.firstChild;)l.appendChild(a.firstChild);for(var d=[l],g=0;g=0;){var h=m[e];A.hasOwnProperty(h)?window.console&&console.warn("cannot override language handler %s",h):A[h]=a}}function C(a,m){if(!a||!A.hasOwnProperty(a))a=/^\s*=o&&(h+=2);e>=c&&(a+=2)}}catch(w){"console"in window&&console.log(w&&w.stack?w.stack:w)}}var v=["break,continue,do,else,for,if,return,while"],w=[[v,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"], +"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"],F=[w,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"],G=[w,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"], +H=[G,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"],w=[w,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"],I=[v,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"], +J=[v,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"],v=[v,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"],K=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/,N=/\S/,O=u({keywords:[F,H,w,"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END"+ +I,J,v],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),A={};k(O,["default-code"]);k(x([],[["pln",/^[^]*(?:>|$)/],["com",/^<\!--[\S\s]*?(?:--\>|$)/],["lang-",/^<\?([\S\s]+?)(?:\?>|$)/],["lang-",/^<%([\S\s]+?)(?:%>|$)/],["pun",/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\S\s]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\S\s]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\S\s]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]), +["default-markup","htm","html","mxml","xhtml","xml","xsl"]);k(x([["pln",/^\s+/,q," \t\r\n"],["atv",/^(?:"[^"]*"?|'[^']*'?)/,q,"\"'"]],[["tag",/^^<\/?[a-z](?:[\w-.:]*\w)?|\/?>$/i],["atn",/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^\s"'>]*(?:[^\s"'/>]|\/(?=\s)))/],["pun",/^[/<->]+/],["lang-js",/^on\w+\s*=\s*"([^"]+)"/i],["lang-js",/^on\w+\s*=\s*'([^']+)'/i],["lang-js",/^on\w+\s*=\s*([^\s"'>]+)/i],["lang-css",/^style\s*=\s*"([^"]+)"/i],["lang-css",/^style\s*=\s*'([^']+)'/i],["lang-css", +/^style\s*=\s*([^\s"'>]+)/i]]),["in.tag"]);k(x([],[["atv",/^[\S\s]+/]]),["uq.val"]);k(u({keywords:F,hashComments:!0,cStyleComments:!0,types:K}),["c","cc","cpp","cxx","cyc","m"]);k(u({keywords:"null,true,false"}),["json"]);k(u({keywords:H,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:K}),["cs"]);k(u({keywords:G,cStyleComments:!0}),["java"]);k(u({keywords:v,hashComments:!0,multiLineStrings:!0}),["bsh","csh","sh"]);k(u({keywords:I,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}), +["cv","py"]);k(u({keywords:"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["perl","pl","pm"]);k(u({keywords:J,hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["rb"]);k(u({keywords:w,cStyleComments:!0,regexLiterals:!0}),["js"]);k(u({keywords:"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes", +hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),["coffee"]);k(x([],[["str",/^[\S\s]+/]]),["regex"]);window.prettyPrintOne=function(a,m,e){var h=document.createElement("PRE");h.innerHTML=a;e&&D(h,e);E({g:m,i:e,h:h});return h.innerHTML};window.prettyPrint=function(a){function m(){for(var e=window.PR_SHOULD_USE_CONTINUATION?l.now()+250:Infinity;p=0){var k=k.match(g),f,b;if(b= +!k){b=n;for(var o=void 0,c=b.firstChild;c;c=c.nextSibling)var i=c.nodeType,o=i===1?o?b:c:i===3?N.test(c.nodeValue)?b:o:o;b=(f=o===b?void 0:o)&&"CODE"===f.tagName}b&&(k=f.className.match(g));k&&(k=k[1]);b=!1;for(o=n.parentNode;o;o=o.parentNode)if((o.tagName==="pre"||o.tagName==="code"||o.tagName==="xmp")&&o.className&&o.className.indexOf("prettyprint")>=0){b=!0;break}b||((b=(b=n.className.match(/\blinenums\b(?::(\d+))?/))?b[1]&&b[1].length?+b[1]:!0:!1)&&D(n,b),d={g:k,h:n,i:b},E(d))}}p th:last-child { border-right: 1px solid #ddd; } + +.ancestors, .attribs { color: #999; } +.ancestors a, .attribs a +{ + color: #999 !important; + text-decoration: none; +} + +.clear +{ + clear: both; +} + +.important +{ + font-weight: bold; + color: #950B02; +} + +.yes-def { + text-indent: -1000px; +} + +.type-signature { + color: #aaa; +} + +.name, .signature { + font-family: Consolas, Monaco, 'Andale Mono', monospace; +} + +.details { margin-top: 14px; border-left: 2px solid #DDD; } +.details dt { width: 120px; float: left; padding-left: 10px; padding-top: 6px; } +.details dd { margin-left: 70px; } +.details ul { margin: 0; } +.details ul { list-style-type: none; } +.details li { margin-left: 30px; padding-top: 6px; } +.details pre.prettyprint { margin: 0 } +.details .object-value { padding-top: 0; } + +.description { + margin-bottom: 1em; + margin-top: 1em; +} + +.code-caption +{ + font-style: italic; + font-size: 107%; + margin: 0; +} + +.source +{ + border: 1px solid #ddd; + width: 80%; + overflow: auto; +} + +.prettyprint.source { + width: inherit; +} + +.source code +{ + font-size: 100%; + line-height: 18px; + display: block; + padding: 4px 12px; + margin: 0; + background-color: #fff; + color: #4D4E53; +} + +.prettyprint code span.line +{ + display: inline-block; +} + +.prettyprint.linenums +{ + padding-left: 70px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.prettyprint.linenums ol +{ + padding-left: 0; +} + +.prettyprint.linenums li +{ + border-left: 3px #ddd solid; +} + +.prettyprint.linenums li.selected, +.prettyprint.linenums li.selected * +{ + background-color: lightyellow; +} + +.prettyprint.linenums li * +{ + -webkit-user-select: text; + -moz-user-select: text; + -ms-user-select: text; + user-select: text; +} + +.params .name, .props .name, .name code { + color: #4D4E53; + font-family: Consolas, Monaco, 'Andale Mono', monospace; + font-size: 100%; +} + +.params td.description > p:first-child, +.props td.description > p:first-child +{ + margin-top: 0; + padding-top: 0; +} + +.params td.description > p:last-child, +.props td.description > p:last-child +{ + margin-bottom: 0; + padding-bottom: 0; +} + +.disabled { + color: #454545; +} diff --git a/doc/1.5.5/guacamole-common-js/styles/prettify-jsdoc.css b/doc/1.5.5/guacamole-common-js/styles/prettify-jsdoc.css new file mode 100644 index 000000000..5a2526e37 --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/styles/prettify-jsdoc.css @@ -0,0 +1,111 @@ +/* JSDoc prettify.js theme */ + +/* plain text */ +.pln { + color: #000000; + font-weight: normal; + font-style: normal; +} + +/* string content */ +.str { + color: #006400; + font-weight: normal; + font-style: normal; +} + +/* a keyword */ +.kwd { + color: #000000; + font-weight: bold; + font-style: normal; +} + +/* a comment */ +.com { + font-weight: normal; + font-style: italic; +} + +/* a type name */ +.typ { + color: #000000; + font-weight: normal; + font-style: normal; +} + +/* a literal value */ +.lit { + color: #006400; + font-weight: normal; + font-style: normal; +} + +/* punctuation */ +.pun { + color: #000000; + font-weight: bold; + font-style: normal; +} + +/* lisp open bracket */ +.opn { + color: #000000; + font-weight: bold; + font-style: normal; +} + +/* lisp close bracket */ +.clo { + color: #000000; + font-weight: bold; + font-style: normal; +} + +/* a markup tag name */ +.tag { + color: #006400; + font-weight: normal; + font-style: normal; +} + +/* a markup attribute name */ +.atn { + color: #006400; + font-weight: normal; + font-style: normal; +} + +/* a markup attribute value */ +.atv { + color: #006400; + font-weight: normal; + font-style: normal; +} + +/* a declaration */ +.dec { + color: #000000; + font-weight: bold; + font-style: normal; +} + +/* a variable name */ +.var { + color: #000000; + font-weight: normal; + font-style: normal; +} + +/* a function name */ +.fun { + color: #000000; + font-weight: bold; + font-style: normal; +} + +/* Specify class=linenums on a pre to get line numbering */ +ol.linenums { + margin-top: 0; + margin-bottom: 0; +} diff --git a/doc/1.5.5/guacamole-common-js/styles/prettify-tomorrow.css b/doc/1.5.5/guacamole-common-js/styles/prettify-tomorrow.css new file mode 100644 index 000000000..b6f92a78d --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/styles/prettify-tomorrow.css @@ -0,0 +1,132 @@ +/* Tomorrow Theme */ +/* Original theme - https://github.com/chriskempson/tomorrow-theme */ +/* Pretty printing styles. Used with prettify.js. */ +/* SPAN elements with the classes below are added by prettyprint. */ +/* plain text */ +.pln { + color: #4d4d4c; } + +@media screen { + /* string content */ + .str { + color: #718c00; } + + /* a keyword */ + .kwd { + color: #8959a8; } + + /* a comment */ + .com { + color: #8e908c; } + + /* a type name */ + .typ { + color: #4271ae; } + + /* a literal value */ + .lit { + color: #f5871f; } + + /* punctuation */ + .pun { + color: #4d4d4c; } + + /* lisp open bracket */ + .opn { + color: #4d4d4c; } + + /* lisp close bracket */ + .clo { + color: #4d4d4c; } + + /* a markup tag name */ + .tag { + color: #c82829; } + + /* a markup attribute name */ + .atn { + color: #f5871f; } + + /* a markup attribute value */ + .atv { + color: #3e999f; } + + /* a declaration */ + .dec { + color: #f5871f; } + + /* a variable name */ + .var { + color: #c82829; } + + /* a function name */ + .fun { + color: #4271ae; } } +/* Use higher contrast and text-weight for printable form. */ +@media print, projection { + .str { + color: #060; } + + .kwd { + color: #006; + font-weight: bold; } + + .com { + color: #600; + font-style: italic; } + + .typ { + color: #404; + font-weight: bold; } + + .lit { + color: #044; } + + .pun, .opn, .clo { + color: #440; } + + .tag { + color: #006; + font-weight: bold; } + + .atn { + color: #404; } + + .atv { + color: #060; } } +/* Style */ +/* +pre.prettyprint { + background: white; + font-family: Consolas, Monaco, 'Andale Mono', monospace; + font-size: 12px; + line-height: 1.5; + border: 1px solid #ccc; + padding: 10px; } +*/ + +/* Specify class=linenums on a pre to get line numbering */ +ol.linenums { + margin-top: 0; + margin-bottom: 0; } + +/* IE indents via margin-left */ +li.L0, +li.L1, +li.L2, +li.L3, +li.L4, +li.L5, +li.L6, +li.L7, +li.L8, +li.L9 { + /* */ } + +/* Alternate shading for lines */ +li.L1, +li.L3, +li.L5, +li.L7, +li.L9 { + /* */ } diff --git a/doc/1.5.5/guacamole-common-js/test_javascript_EventSpec.js.html b/doc/1.5.5/guacamole-common-js/test_javascript_EventSpec.js.html new file mode 100644 index 000000000..6401630d0 --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/test_javascript_EventSpec.js.html @@ -0,0 +1,192 @@ + + + + + JSDoc: Source: test/javascript/EventSpec.js + + + + + + + + + + +
+ +

Source: test/javascript/EventSpec.js

+ + + + + + +
+
+
/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/* global Guacamole, jasmine, expect */
+
+describe("Guacamole.Event", function EventSpec() {
+
+    /**
+     * Test subclass of {@link Guacamole.Event} which provides a single
+     * "value" property supports an "ontest" legacy event handler.
+     *
+     * @constructor
+     * @augments Guacamole.Event
+     * @param {object} value
+     *     An arbitrary value to expose to the handler of the event.
+     */
+    var TestEvent = function TestEvent(value) {
+
+        Guacamole.Event.apply(this, [ 'test' ]);
+
+        /**
+         * An arbitrary value to expose to the handler of this event.
+         *
+         * @type {object}
+         */
+        this.value = value;
+
+        /**
+         * @inheritdoc
+         */
+        this.invokeLegacyHandler = function invokeLegacyHandler(target) {
+            if (target.ontest)
+                target.ontest(value);
+        };
+
+    };
+
+    /**
+     * Event target instance which will receive each fired {@link TestEvent}.
+     *
+     * @type {Guacamole.Event.Target}
+     */
+    var eventTarget;
+
+    beforeEach(function() {
+        eventTarget = new Guacamole.Event.Target();
+    });
+
+    describe("when an event is dispatched", function(){
+
+        it("should invoke the legacy handler for matching events", function() {
+
+            eventTarget.ontest = jasmine.createSpy('ontest');
+            eventTarget.dispatch(new TestEvent('event1'));
+            expect(eventTarget.ontest).toHaveBeenCalledWith('event1');
+
+        });
+
+        it("should invoke all listeners for matching events", function() {
+
+            var listener1 = jasmine.createSpy('listener1');
+            var listener2 = jasmine.createSpy('listener2');
+
+            eventTarget.on('test', listener1);
+            eventTarget.on('test', listener2);
+
+            eventTarget.dispatch(new TestEvent('event2'));
+
+            expect(listener1).toHaveBeenCalledWith(jasmine.objectContaining({ type : 'test', value : 'event2' }), eventTarget);
+            expect(listener2).toHaveBeenCalledWith(jasmine.objectContaining({ type : 'test', value : 'event2' }), eventTarget);
+
+        });
+
+        it("should not invoke any listeners for non-matching events", function() {
+
+            var listener1 = jasmine.createSpy('listener1');
+            var listener2 = jasmine.createSpy('listener2');
+
+            eventTarget.on('test2', listener1);
+            eventTarget.on('test2', listener2);
+
+            eventTarget.dispatch(new TestEvent('event3'));
+
+            expect(listener1).not.toHaveBeenCalled();
+            expect(listener2).not.toHaveBeenCalled();
+
+        });
+
+        it("should not invoke any listeners that have been removed", function() {
+
+            var listener1 = jasmine.createSpy('listener1');
+            var listener2 = jasmine.createSpy('listener2');
+
+            eventTarget.on('test', listener1);
+            eventTarget.on('test', listener2);
+            eventTarget.off('test', listener1);
+
+            eventTarget.dispatch(new TestEvent('event4'));
+
+            expect(listener1).not.toHaveBeenCalled();
+            expect(listener2).toHaveBeenCalledWith(jasmine.objectContaining({ type : 'test', value : 'event4' }), eventTarget);
+
+        });
+
+    });
+
+    describe("when listeners are removed", function(){
+
+        it("should return whether a listener is successfully removed", function() {
+
+            var listener1 = jasmine.createSpy('listener1');
+            var listener2 = jasmine.createSpy('listener2');
+
+            eventTarget.on('test', listener1);
+            eventTarget.on('test', listener2);
+
+            expect(eventTarget.off('test', listener1)).toBe(true);
+            expect(eventTarget.off('test', listener1)).toBe(false);
+            expect(eventTarget.off('test', listener2)).toBe(true);
+            expect(eventTarget.off('test', listener2)).toBe(false);
+
+        });
+
+    });
+});
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 4.0.2 on Sat Mar 30 2024 09:36:10 GMT-0700 (Pacific Daylight Time) +
+ + + + + diff --git a/doc/1.5.5/guacamole-common/allclasses-index.html b/doc/1.5.5/guacamole-common/allclasses-index.html new file mode 100644 index 000000000..33d05cce0 --- /dev/null +++ b/doc/1.5.5/guacamole-common/allclasses-index.html @@ -0,0 +1,508 @@ + + + + + +All Classes (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

All Classes

+
+
+
    +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    All Classes Interface Summary Class Summary Enum Summary Exception Summary 
    ClassDescription
    AbstractGuacamoleTunnel +
    Base GuacamoleTunnel implementation which synchronizes access to the + underlying reader and writer with reentrant locks.
    +
    ConfiguredGuacamoleSocket +
    A GuacamoleSocket which pre-configures the connection based on a given + GuacamoleConfiguration, completing the initial protocol handshake before + accepting data for read or write.
    +
    DelegatingGuacamoleSocket +
    GuacamoleSocket implementation which simply delegates all function calls to + an underlying GuacamoleSocket.
    +
    DelegatingGuacamoleTunnel +
    GuacamoleTunnel implementation which simply delegates all function calls to + an underlying GuacamoleTunnel.
    +
    FailoverGuacamoleSocket +
    GuacamoleSocket which intercepts errors received early in the Guacamole + session.
    +
    FilteredGuacamoleReader +
    GuacamoleReader which applies a given GuacamoleFilter to observe or alter all + read instructions.
    +
    FilteredGuacamoleSocket +
    Implementation of GuacamoleSocket which allows individual instructions to be + intercepted, overridden, etc.
    +
    FilteredGuacamoleWriter +
    GuacamoleWriter which applies a given GuacamoleFilter to observe or alter + all written instructions.
    +
    GuacamoleClientBadTypeException +
    An exception which is thrown when data has been submitted with an unsupported + mimetype.
    +
    GuacamoleClientException +
    A generic exception thrown when part of the Guacamole API encounters + an error in the client's request.
    +
    GuacamoleClientInformation +
    An abstract representation of Guacamole client information, including all + information required by the Guacamole protocol during the preamble.
    +
    GuacamoleClientOverrunException +
    An exception which is thrown when the client has sent too much data.
    +
    GuacamoleClientTimeoutException +
    An exception which is thrown when the client is taking too long to respond.
    +
    GuacamoleClientTooManyException +
    An exception which is thrown when too many requests have been received + by the current client, and further requests are being rejected, either + temporarily or permanently.
    +
    GuacamoleConfiguration +
    All information necessary to complete the initial protocol handshake of a + Guacamole session.
    +
    GuacamoleConnectionClosedException +
    An exception which is thrown when an operation cannot be performed because + its corresponding connection is closed.
    +
    GuacamoleException +
    A generic exception thrown when parts of the Guacamole API encounter + errors.
    +
    GuacamoleFilter +
    Interface which provides for the filtering of individual instructions.
    +
    GuacamoleHTTPTunnelServlet +
    A HttpServlet implementing and abstracting the operations required by the + HTTP implementation of the JavaScript Guacamole client's tunnel.
    +
    GuacamoleInstruction +
    An abstract representation of a Guacamole instruction, as defined by the + Guacamole protocol.
    +
    GuacamoleParser +
    Parser for the Guacamole protocol.
    +
    GuacamoleProtocolCapability +
    Capabilities which may not be present in all versions of the Guacamole + protocol.
    +
    GuacamoleProtocolVersion +
    Representation of a Guacamole protocol version.
    +
    GuacamoleReader +
    Provides abstract and raw character read access to a stream of Guacamole + instructions.
    +
    GuacamoleResourceClosedException +
    An exception which is thrown when a resource is no longer available because + it is closed.
    +
    GuacamoleResourceConflictException +
    An exception which is thrown when a resource has been requested, but that + resource is locked or currently in use, and cannot be accessed by the + current user.
    +
    GuacamoleResourceNotFoundException +
    A generic exception thrown when part of the Guacamole API fails to find + a requested resource, such as a configuration or tunnel.
    +
    GuacamoleSecurityException +
    A security-related exception thrown when parts of the Guacamole API is + denying access to a resource.
    +
    GuacamoleServerBusyException +
    An exception which is thrown when the server is too busy to service the + request.
    +
    GuacamoleServerException +
    A generic exception thrown when part of the Guacamole API encounters + an unexpected, internal error.
    +
    GuacamoleSessionClosedException +
    An exception which indicates that a session within an upstream server (such + as the remote desktop) has been forcibly terminated.
    +
    GuacamoleSessionConflictException +
    An exception which indicates that a session within an upstream server (such + as the remote desktop) has ended because it conflicted with another session.
    +
    GuacamoleSessionTimeoutException +
    An exception which indicates that a session within an upstream server (such + as the remote desktop) has ended because it appeared to be inactive.
    +
    GuacamoleSocket +
    Provides abstract socket-like access to a Guacamole connection.
    +
    GuacamoleStatus +
    All possible statuses returned by various Guacamole instructions, each having + a corresponding code.
    +
    GuacamoleTunnel +
    Provides a unique identifier and synchronized access to the GuacamoleReader + and GuacamoleWriter associated with a GuacamoleSocket.
    +
    GuacamoleUnauthorizedException +
    A security-related exception thrown when parts of the Guacamole API is + denying access to a resource, but access MAY be granted were the user + authorized (logged in).
    +
    GuacamoleUnsupportedException +
    An exception which is thrown when the requested operation is unsupported + or unimplemented.
    +
    GuacamoleUpstreamException +
    An exception which indicates than an upstream server (such as the remote + desktop) is returning an error or is otherwise unreachable.
    +
    GuacamoleUpstreamNotFoundException +
    An exception which indicates that an upstream server (such as the remote + desktop) does not appear to exist.
    +
    GuacamoleUpstreamTimeoutException +
    An exception which indicates than an upstream server (such as the remote + desktop) is taking too long to respond.
    +
    GuacamoleUpstreamUnavailableException +
    An exception which indicates that an upstream server (such as the remote + desktop) is not available to service the request.
    +
    GuacamoleWebSocketTunnelEndpoint +
    A WebSocket implementation of GuacamoleTunnel functionality, compatible with + the Guacamole.WebSocketTunnel object included with the JavaScript API.
    +
    GuacamoleWriter +
    Provides abstract and raw character write access to a stream of Guacamole + instructions.
    +
    InetGuacamoleSocket +
    Provides abstract socket-like access to a Guacamole connection over a given + hostname and port.
    +
    ReaderGuacamoleReader +
    A GuacamoleReader which wraps a standard Java Reader, using that Reader as + the Guacamole instruction stream.
    +
    SimpleGuacamoleTunnel +
    GuacamoleTunnel implementation which uses a provided socket.
    +
    SSLGuacamoleSocket +
    Provides abstract socket-like access to a Guacamole connection over SSL to + a given hostname and port.
    +
    WriterGuacamoleWriter +
    A GuacamoleWriter which wraps a standard Java Writer, using that Writer as + the Guacamole instruction stream.
    +
    +
  • +
+
+
+
+ +

Copyright © 2024. All rights reserved.

+
+ + diff --git a/doc/1.5.5/guacamole-common/allclasses.html b/doc/1.5.5/guacamole-common/allclasses.html new file mode 100644 index 000000000..ee10371c1 --- /dev/null +++ b/doc/1.5.5/guacamole-common/allclasses.html @@ -0,0 +1,79 @@ + + + + + +All Classes (guacamole-common 1.5.5 API) + + + + + + + + + + + + + +
+

All Classes

+ +
+ + diff --git a/doc/1.5.5/guacamole-common/allpackages-index.html b/doc/1.5.5/guacamole-common/allpackages-index.html new file mode 100644 index 000000000..990fc4966 --- /dev/null +++ b/doc/1.5.5/guacamole-common/allpackages-index.html @@ -0,0 +1,202 @@ + + + + + +All Packages (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

All Packages

+
+
+ +
+
+
+ +

Copyright © 2024. All rights reserved.

+
+ + diff --git a/doc/1.5.5/guacamole-common/constant-values.html b/doc/1.5.5/guacamole-common/constant-values.html new file mode 100644 index 000000000..cb3746ed7 --- /dev/null +++ b/doc/1.5.5/guacamole-common/constant-values.html @@ -0,0 +1,218 @@ + + + + + +Constant Field Values (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Constant Field Values

+
+

Contents

+ +
+
+
+ + +
+

org.apache.*

+ + +
+
+
+
+ +

Copyright © 2024. All rights reserved.

+
+ + diff --git a/doc/1.5.5/guacamole-common/deprecated-list.html b/doc/1.5.5/guacamole-common/deprecated-list.html new file mode 100644 index 000000000..12b9b2596 --- /dev/null +++ b/doc/1.5.5/guacamole-common/deprecated-list.html @@ -0,0 +1,186 @@ + + + + + +Deprecated List (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Deprecated API

+

Contents

+ +
+
+ + + +
+
+
+ +

Copyright © 2024. All rights reserved.

+
+ + diff --git a/doc/1.5.5/guacamole-common/element-list b/doc/1.5.5/guacamole-common/element-list new file mode 100644 index 000000000..a64bfa3db --- /dev/null +++ b/doc/1.5.5/guacamole-common/element-list @@ -0,0 +1,6 @@ +org.apache.guacamole +org.apache.guacamole.io +org.apache.guacamole.net +org.apache.guacamole.protocol +org.apache.guacamole.servlet +org.apache.guacamole.websocket diff --git a/doc/1.5.5/guacamole-common/help-doc.html b/doc/1.5.5/guacamole-common/help-doc.html new file mode 100644 index 000000000..d02c1ecc4 --- /dev/null +++ b/doc/1.5.5/guacamole-common/help-doc.html @@ -0,0 +1,282 @@ + + + + + +API Help (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

How This API Document Is Organized

+
This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.
+
+
+
    +
  • +
    +

    Overview

    +

    The Overview page is the front page of this API document and provides a list of all packages with a summary for each. This page can also contain an overall description of the set of packages.

    +
    +
  • +
  • +
    +

    Package

    +

    Each package has a page that contains a list of its classes and interfaces, with a summary for each. These pages may contain six categories:

    +
      +
    • Interfaces
    • +
    • Classes
    • +
    • Enums
    • +
    • Exceptions
    • +
    • Errors
    • +
    • Annotation Types
    • +
    +
    +
  • +
  • +
    +

    Class or Interface

    +

    Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:

    +
      +
    • Class Inheritance Diagram
    • +
    • Direct Subclasses
    • +
    • All Known Subinterfaces
    • +
    • All Known Implementing Classes
    • +
    • Class or Interface Declaration
    • +
    • Class or Interface Description
    • +
    +
    +
      +
    • Nested Class Summary
    • +
    • Field Summary
    • +
    • Property Summary
    • +
    • Constructor Summary
    • +
    • Method Summary
    • +
    +
    +
      +
    • Field Detail
    • +
    • Property Detail
    • +
    • Constructor Detail
    • +
    • Method Detail
    • +
    +

    Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.

    +
    +
  • +
  • +
    +

    Annotation Type

    +

    Each annotation type has its own separate page with the following sections:

    +
      +
    • Annotation Type Declaration
    • +
    • Annotation Type Description
    • +
    • Required Element Summary
    • +
    • Optional Element Summary
    • +
    • Element Detail
    • +
    +
    +
  • +
  • +
    +

    Enum

    +

    Each enum has its own separate page with the following sections:

    +
      +
    • Enum Declaration
    • +
    • Enum Description
    • +
    • Enum Constant Summary
    • +
    • Enum Constant Detail
    • +
    +
    +
  • +
  • +
    +

    Use

    +

    Each documented package, class and interface has its own Use page. This page describes what packages, classes, methods, constructors and fields use any part of the given class or package. Given a class or interface A, its "Use" page includes subclasses of A, fields declared as A, methods that return A, and methods and constructors with parameters of type A. You can access this page by first going to the package, class or interface, then clicking on the "Use" link in the navigation bar.

    +
    +
  • +
  • +
    +

    Tree (Class Hierarchy)

    +

    There is a Class Hierarchy page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. Classes are organized by inheritance structure starting with java.lang.Object. Interfaces do not inherit from java.lang.Object.

    +
      +
    • When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.
    • +
    • When viewing a particular package, class or interface page, clicking on "Tree" displays the hierarchy for only that package.
    • +
    +
    +
  • +
  • +
    +

    Deprecated API

    +

    The Deprecated API page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.

    +
    +
  • +
  • +
    +

    Index

    +

    The Index contains an alphabetic index of all classes, interfaces, constructors, methods, and fields, as well as lists of all packages and all classes.

    +
    +
  • +
  • +
    +

    All Classes

    +

    The All Classes link shows all classes and interfaces except non-static nested types.

    +
    +
  • +
  • +
    +

    Serialized Form

    +

    Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description.

    +
    +
  • +
  • +
    +

    Constant Field Values

    +

    The Constant Field Values page lists the static final fields and their values.

    +
    +
  • +
  • +
    +

    Search

    +

    You can search for definitions of modules, packages, types, fields, methods and other terms defined in the API, using some or all of the name. "Camel-case" abbreviations are supported: for example, "InpStr" will find "InputStream" and "InputStreamReader".

    +
    +
  • +
+
+This help file applies to API documentation generated by the standard doclet.
+
+
+ +

Copyright © 2024. All rights reserved.

+
+ + diff --git a/doc/1.5.5/guacamole-common/index-all.html b/doc/1.5.5/guacamole-common/index-all.html new file mode 100644 index 000000000..8c2054580 --- /dev/null +++ b/doc/1.5.5/guacamole-common/index-all.html @@ -0,0 +1,1667 @@ + + + + + +Index (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
A C D E F G H I L M N O P R S T U V W 
All Classes All Packages + + +

A

+
+
AbstractGuacamoleTunnel - Class in org.apache.guacamole.net
+
+
Base GuacamoleTunnel implementation which synchronizes access to the + underlying reader and writer with reentrant locks.
+
+
AbstractGuacamoleTunnel() - Constructor for class org.apache.guacamole.net.AbstractGuacamoleTunnel
+
+
Creates a new GuacamoleTunnel which synchronizes access to the + Guacamole instruction stream associated with the underlying + GuacamoleSocket.
+
+
acquireReader() - Method in class org.apache.guacamole.net.AbstractGuacamoleTunnel
+
+
Acquires exclusive read access to the Guacamole instruction stream + and returns a GuacamoleReader for reading from that stream.
+
+
acquireReader() - Method in class org.apache.guacamole.net.DelegatingGuacamoleTunnel
+
 
+
acquireReader() - Method in interface org.apache.guacamole.net.GuacamoleTunnel
+
+
Acquires exclusive read access to the Guacamole instruction stream + and returns a GuacamoleReader for reading from that stream.
+
+
acquireWriter() - Method in class org.apache.guacamole.net.AbstractGuacamoleTunnel
+
+
Acquires exclusive write access to the Guacamole instruction stream + and returns a GuacamoleWriter for writing to that stream.
+
+
acquireWriter() - Method in class org.apache.guacamole.net.DelegatingGuacamoleTunnel
+
 
+
acquireWriter() - Method in interface org.apache.guacamole.net.GuacamoleTunnel
+
+
Acquires exclusive write access to the Guacamole instruction stream + and returns a GuacamoleWriter for writing to that stream.
+
+
append(char[]) - Method in class org.apache.guacamole.protocol.GuacamoleParser
+
+
Appends data from the given buffer to the current instruction.
+
+
append(char[], int, int) - Method in class org.apache.guacamole.protocol.GuacamoleParser
+
+
Appends data from the given buffer to the current instruction.
+
+
ARBITRARY_HANDSHAKE_ORDER - org.apache.guacamole.protocol.GuacamoleProtocolCapability
+
+
The protocol does not require handshake instructions to be sent in a + specific order, nor that all handshake instructions be sent.
+
+
atLeast(GuacamoleProtocolVersion) - Method in class org.apache.guacamole.protocol.GuacamoleProtocolVersion
+
+
Returns whether this GuacamoleProtocolVersion is at least as recent as + (greater than or equal to) the given version.
+
+
available() - Method in interface org.apache.guacamole.io.GuacamoleReader
+
+
Returns whether instruction data is available for reading.
+
+
available() - Method in class org.apache.guacamole.io.ReaderGuacamoleReader
+
 
+
available() - Method in class org.apache.guacamole.protocol.FilteredGuacamoleReader
+
 
+
+ + + +

C

+
+
CLIENT_BAD_REQUEST - org.apache.guacamole.protocol.GuacamoleStatus
+
+
The operation could not be performed because bad parameters were given.
+
+
CLIENT_BAD_TYPE - org.apache.guacamole.protocol.GuacamoleStatus
+
+
The client sent data of an unsupported or unexpected type.
+
+
CLIENT_FORBIDDEN - org.apache.guacamole.protocol.GuacamoleStatus
+
+
Permission was denied to perform the operation, and this operation will + not be granted even if the user is authorized.
+
+
CLIENT_OVERRUN - org.apache.guacamole.protocol.GuacamoleStatus
+
+
The client sent too much data.
+
+
CLIENT_TIMEOUT - org.apache.guacamole.protocol.GuacamoleStatus
+
+
The client took too long to respond.
+
+
CLIENT_TOO_MANY - org.apache.guacamole.protocol.GuacamoleStatus
+
+
The operation failed because the current client is already using too + many resources.
+
+
CLIENT_UNAUTHORIZED - org.apache.guacamole.protocol.GuacamoleStatus
+
+
Permission was denied to perform the operation, as the user is not yet + authorized (not yet logged in, for example).
+
+
close() - Method in class org.apache.guacamole.net.AbstractGuacamoleTunnel
+
 
+
close() - Method in class org.apache.guacamole.net.DelegatingGuacamoleSocket
+
 
+
close() - Method in class org.apache.guacamole.net.DelegatingGuacamoleTunnel
+
 
+
close() - Method in interface org.apache.guacamole.net.GuacamoleSocket
+
+
Releases all resources in use by the connection represented by this + GuacamoleSocket.
+
+
close() - Method in interface org.apache.guacamole.net.GuacamoleTunnel
+
+
Release all resources allocated to this GuacamoleTunnel.
+
+
close() - Method in class org.apache.guacamole.net.InetGuacamoleSocket
+
 
+
close() - Method in class org.apache.guacamole.net.SSLGuacamoleSocket
+
 
+
ConfiguredGuacamoleSocket - Class in org.apache.guacamole.protocol
+
+
A GuacamoleSocket which pre-configures the connection based on a given + GuacamoleConfiguration, completing the initial protocol handshake before + accepting data for read or write.
+
+
ConfiguredGuacamoleSocket(GuacamoleSocket, GuacamoleConfiguration) - Constructor for class org.apache.guacamole.protocol.ConfiguredGuacamoleSocket
+
+
Creates a new ConfiguredGuacamoleSocket which uses the given + GuacamoleConfiguration to complete the initial protocol handshake over + the given GuacamoleSocket.
+
+
ConfiguredGuacamoleSocket(GuacamoleSocket, GuacamoleConfiguration, GuacamoleClientInformation) - Constructor for class org.apache.guacamole.protocol.ConfiguredGuacamoleSocket
+
+
Creates a new ConfiguredGuacamoleSocket which uses the given + GuacamoleConfiguration and GuacamoleClientInformation to complete the + initial protocol handshake over the given GuacamoleSocket.
+
+
createTunnel(Session, EndpointConfig) - Method in class org.apache.guacamole.websocket.GuacamoleWebSocketTunnelEndpoint
+
+
Returns a new tunnel for the given session.
+
+
+ + + +

D

+
+
DelegatingGuacamoleSocket - Class in org.apache.guacamole.net
+
+
GuacamoleSocket implementation which simply delegates all function calls to + an underlying GuacamoleSocket.
+
+
DelegatingGuacamoleSocket(GuacamoleSocket) - Constructor for class org.apache.guacamole.net.DelegatingGuacamoleSocket
+
+
Wraps the given GuacamoleSocket such that all function calls against + this DelegatingGuacamoleSocket will be delegated to it.
+
+
DelegatingGuacamoleTunnel - Class in org.apache.guacamole.net
+
+
GuacamoleTunnel implementation which simply delegates all function calls to + an underlying GuacamoleTunnel.
+
+
DelegatingGuacamoleTunnel(GuacamoleTunnel) - Constructor for class org.apache.guacamole.net.DelegatingGuacamoleTunnel
+
+
Wraps the given tunnel such that all function calls against this tunnel + will be delegated to it.
+
+
deregisterTunnel(String) - Method in class org.apache.guacamole.servlet.GuacamoleHTTPTunnelServlet
+
+
Deregisters the HTTP tunnel associated with the given tunnel-specific + session token such that future read/write requests to that tunnel will + be rejected.
+
+
deregisterTunnel(GuacamoleTunnel) - Method in class org.apache.guacamole.servlet.GuacamoleHTTPTunnelServlet
+
+
Deprecated. +
This function has been deprecated in favor of deregisterTunnel(java.lang.String), + which decouples identification of HTTP tunnel sessions from the + tunnel UUID.
+
+
+
destroy() - Method in class org.apache.guacamole.servlet.GuacamoleHTTPTunnelServlet
+
 
+
doConnect(HttpServletRequest) - Method in class org.apache.guacamole.servlet.GuacamoleHTTPTunnelServlet
+
+
Called whenever the JavaScript Guacamole client makes a connection + request via HTTP.
+
+
doGet(HttpServletRequest, HttpServletResponse) - Method in class org.apache.guacamole.servlet.GuacamoleHTTPTunnelServlet
+
 
+
doPost(HttpServletRequest, HttpServletResponse) - Method in class org.apache.guacamole.servlet.GuacamoleHTTPTunnelServlet
+
 
+
doRead(HttpServletRequest, HttpServletResponse, String) - Method in class org.apache.guacamole.servlet.GuacamoleHTTPTunnelServlet
+
+
Called whenever the JavaScript Guacamole client makes a read request.
+
+
doWrite(HttpServletRequest, HttpServletResponse, String) - Method in class org.apache.guacamole.servlet.GuacamoleHTTPTunnelServlet
+
+
Called whenever the JavaScript Guacamole client makes a write request.
+
+
+ + + +

E

+
+
equals(Object) - Method in class org.apache.guacamole.protocol.GuacamoleProtocolVersion
+
 
+
+ + + +

F

+
+
FailoverGuacamoleSocket - Class in org.apache.guacamole.protocol
+
+
GuacamoleSocket which intercepts errors received early in the Guacamole + session.
+
+
FailoverGuacamoleSocket(GuacamoleSocket) - Constructor for class org.apache.guacamole.protocol.FailoverGuacamoleSocket
+
+
Creates a new FailoverGuacamoleSocket which reads Guacamole instructions + from the given socket, searching for errors from the upstream remote + desktop until a maximum of 128KB of instruction data has been queued.
+
+
FailoverGuacamoleSocket(GuacamoleSocket, int) - Constructor for class org.apache.guacamole.protocol.FailoverGuacamoleSocket
+
+
Creates a new FailoverGuacamoleSocket which reads Guacamole instructions + from the given socket, searching for errors from the upstream remote + desktop until the given instruction queue limit is reached.
+
+
filter(GuacamoleInstruction) - Method in interface org.apache.guacamole.protocol.GuacamoleFilter
+
+
Applies the filter to the given instruction, returning the original + instruction, a modified version of the original, or null, depending + on the implementation.
+
+
FilteredGuacamoleReader - Class in org.apache.guacamole.protocol
+
+
GuacamoleReader which applies a given GuacamoleFilter to observe or alter all + read instructions.
+
+
FilteredGuacamoleReader(GuacamoleReader, GuacamoleFilter) - Constructor for class org.apache.guacamole.protocol.FilteredGuacamoleReader
+
+
Wraps the given GuacamoleReader, applying the given filter to all read + instructions.
+
+
FilteredGuacamoleSocket - Class in org.apache.guacamole.protocol
+
+
Implementation of GuacamoleSocket which allows individual instructions to be + intercepted, overridden, etc.
+
+
FilteredGuacamoleSocket(GuacamoleSocket, GuacamoleFilter, GuacamoleFilter) - Constructor for class org.apache.guacamole.protocol.FilteredGuacamoleSocket
+
+
Creates a new FilteredGuacamoleSocket which uses the given filters to + determine whether instructions read/written are allowed through, + modified, etc.
+
+
FilteredGuacamoleWriter - Class in org.apache.guacamole.protocol
+
+
GuacamoleWriter which applies a given GuacamoleFilter to observe or alter + all written instructions.
+
+
FilteredGuacamoleWriter(GuacamoleWriter, GuacamoleFilter) - Constructor for class org.apache.guacamole.protocol.FilteredGuacamoleWriter
+
+
Wraps the given GuacamoleWriter, applying the given filter to all written + instructions.
+
+
fromGuacamoleStatusCode(int) - Static method in enum org.apache.guacamole.protocol.GuacamoleStatus
+
+
Returns the GuacamoleStatus corresponding to the given Guacamole + protocol status code.
+
+
+ + + +

G

+
+
generateToken() - Method in class org.apache.guacamole.servlet.GuacamoleHTTPTunnelServlet
+
+
Generates a new, securely-random session token that may be used to + represent the ongoing communication session of a distinct HTTP tunnel + connection.
+
+
getArgs() - Method in class org.apache.guacamole.protocol.GuacamoleInstruction
+
+
Returns a List of all argument values specified for this + GuacamoleInstruction.
+
+
getAudioMimetypes() - Method in class org.apache.guacamole.protocol.GuacamoleClientInformation
+
+
Returns the list of audio mimetypes supported by the client.
+
+
getConfiguration() - Method in class org.apache.guacamole.protocol.ConfiguredGuacamoleSocket
+
+
Returns the GuacamoleConfiguration used to configure this + ConfiguredGuacamoleSocket.
+
+
getConnectionID() - Method in class org.apache.guacamole.protocol.ConfiguredGuacamoleSocket
+
+
Returns the unique ID associated with the Guacamole connection + negotiated by this ConfiguredGuacamoleSocket.
+
+
getConnectionID() - Method in class org.apache.guacamole.protocol.GuacamoleConfiguration
+
+
Returns the ID of the connection being joined, if any.
+
+
getDelegateSocket() - Method in class org.apache.guacamole.net.DelegatingGuacamoleSocket
+
+
Returns the underlying GuacamoleSocket wrapped by this + DelegatingGuacamoleSocket.
+
+
getGuacamoleStatusCode() - Method in enum org.apache.guacamole.protocol.GuacamoleStatus
+
+
Returns the corresponding Guacamole protocol status code.
+
+
getHttpStatusCode() - Method in exception org.apache.guacamole.GuacamoleException
+
+
Returns the most applicable HTTP status code that can be associated + with this exception.
+
+
getHttpStatusCode() - Method in enum org.apache.guacamole.protocol.GuacamoleStatus
+
+
Returns the most applicable HTTP error code.
+
+
getImageMimetypes() - Method in class org.apache.guacamole.protocol.GuacamoleClientInformation
+
+
Returns the list of image mimetypes supported by the client.
+
+
getMajor() - Method in class org.apache.guacamole.protocol.GuacamoleProtocolVersion
+
+
Return the major version component of the protocol version.
+
+
getMinor() - Method in class org.apache.guacamole.protocol.GuacamoleProtocolVersion
+
+
Return the minor version component of the protocol version.
+
+
getName() - Method in class org.apache.guacamole.protocol.GuacamoleClientInformation
+
+
Returns the name of the Guacamole user as reported by the client, or null + if the user name is not set.
+
+
getOpcode() - Method in class org.apache.guacamole.protocol.GuacamoleInstruction
+
+
Returns the opcode associated with this GuacamoleInstruction.
+
+
getOptimalResolution() - Method in class org.apache.guacamole.protocol.GuacamoleClientInformation
+
+
Returns the resolution of the screen if the optimal width and height are + used, in DPI.
+
+
getOptimalScreenHeight() - Method in class org.apache.guacamole.protocol.GuacamoleClientInformation
+
+
Returns the optimal screen height requested by the client, in pixels.
+
+
getOptimalScreenWidth() - Method in class org.apache.guacamole.protocol.GuacamoleClientInformation
+
+
Returns the optimal screen width requested by the client, in pixels.
+
+
getParameter(String) - Method in class org.apache.guacamole.protocol.GuacamoleConfiguration
+
+
Returns the value set for the parameter with the given name, if any.
+
+
getParameterNames() - Method in class org.apache.guacamole.protocol.GuacamoleConfiguration
+
+
Returns a set of all currently defined parameter names.
+
+
getParameters() - Method in class org.apache.guacamole.protocol.GuacamoleConfiguration
+
+
Returns a map which contains parameter name/value pairs as key/value + pairs.
+
+
getPatch() - Method in class org.apache.guacamole.protocol.GuacamoleProtocolVersion
+
+
Return the patch version component of the protocol version.
+
+
getProtocol() - Method in class org.apache.guacamole.net.DelegatingGuacamoleSocket
+
 
+
getProtocol() - Method in interface org.apache.guacamole.net.GuacamoleSocket
+
+
Returns the name of the protocol to be used.
+
+
getProtocol() - Method in class org.apache.guacamole.protocol.ConfiguredGuacamoleSocket
+
 
+
getProtocol() - Method in class org.apache.guacamole.protocol.GuacamoleConfiguration
+
+
Returns the name of the protocol to be used.
+
+
getProtocolVersion() - Method in class org.apache.guacamole.protocol.ConfiguredGuacamoleSocket
+
+
Returns the version of the Guacamole protocol associated with the + Guacamole connection negotiated by this ConfiguredGuacamoleSocket.
+
+
getReader() - Method in class org.apache.guacamole.net.DelegatingGuacamoleSocket
+
 
+
getReader() - Method in interface org.apache.guacamole.net.GuacamoleSocket
+
+
Returns a GuacamoleReader which can be used to read from the + Guacamole instruction stream associated with the connection + represented by this GuacamoleSocket.
+
+
getReader() - Method in class org.apache.guacamole.net.InetGuacamoleSocket
+
 
+
getReader() - Method in class org.apache.guacamole.net.SSLGuacamoleSocket
+
 
+
getReader() - Method in class org.apache.guacamole.protocol.FailoverGuacamoleSocket
+
 
+
getReader() - Method in class org.apache.guacamole.protocol.FilteredGuacamoleSocket
+
 
+
getSocket() - Method in class org.apache.guacamole.net.DelegatingGuacamoleTunnel
+
 
+
getSocket() - Method in interface org.apache.guacamole.net.GuacamoleTunnel
+
+
Returns the GuacamoleSocket used by this GuacamoleTunnel for reading + and writing.
+
+
getSocket() - Method in class org.apache.guacamole.net.SimpleGuacamoleTunnel
+
 
+
getStatus() - Method in exception org.apache.guacamole.GuacamoleClientBadTypeException
+
 
+
getStatus() - Method in exception org.apache.guacamole.GuacamoleClientException
+
 
+
getStatus() - Method in exception org.apache.guacamole.GuacamoleClientOverrunException
+
 
+
getStatus() - Method in exception org.apache.guacamole.GuacamoleClientTimeoutException
+
 
+
getStatus() - Method in exception org.apache.guacamole.GuacamoleClientTooManyException
+
 
+
getStatus() - Method in exception org.apache.guacamole.GuacamoleConnectionClosedException
+
 
+
getStatus() - Method in exception org.apache.guacamole.GuacamoleException
+
+
Returns the Guacamole status associated with this exception.
+
+
getStatus() - Method in exception org.apache.guacamole.GuacamoleResourceClosedException
+
 
+
getStatus() - Method in exception org.apache.guacamole.GuacamoleResourceConflictException
+
 
+
getStatus() - Method in exception org.apache.guacamole.GuacamoleResourceNotFoundException
+
 
+
getStatus() - Method in exception org.apache.guacamole.GuacamoleSecurityException
+
 
+
getStatus() - Method in exception org.apache.guacamole.GuacamoleServerBusyException
+
 
+
getStatus() - Method in exception org.apache.guacamole.GuacamoleServerException
+
 
+
getStatus() - Method in exception org.apache.guacamole.GuacamoleSessionClosedException
+
 
+
getStatus() - Method in exception org.apache.guacamole.GuacamoleSessionConflictException
+
 
+
getStatus() - Method in exception org.apache.guacamole.GuacamoleSessionTimeoutException
+
 
+
getStatus() - Method in exception org.apache.guacamole.GuacamoleUnauthorizedException
+
 
+
getStatus() - Method in exception org.apache.guacamole.GuacamoleUnsupportedException
+
 
+
getStatus() - Method in exception org.apache.guacamole.GuacamoleUpstreamException
+
 
+
getStatus() - Method in exception org.apache.guacamole.GuacamoleUpstreamNotFoundException
+
 
+
getStatus() - Method in exception org.apache.guacamole.GuacamoleUpstreamTimeoutException
+
 
+
getStatus() - Method in exception org.apache.guacamole.GuacamoleUpstreamUnavailableException
+
 
+
getTimezone() - Method in class org.apache.guacamole.protocol.GuacamoleClientInformation
+
+
Return the timezone as reported by the client, or null if the timezone + is not set.
+
+
getTunnel(String) - Method in class org.apache.guacamole.servlet.GuacamoleHTTPTunnelServlet
+
+
Returns the tunnel associated with the given tunnel-specific session + token, if it has been registered with registerTunnel(java.lang.String, org.apache.guacamole.net.GuacamoleTunnel) + and not yet deregistered with deregisterTunnel(java.lang.String).
+
+
getUUID() - Method in class org.apache.guacamole.net.DelegatingGuacamoleTunnel
+
 
+
getUUID() - Method in interface org.apache.guacamole.net.GuacamoleTunnel
+
+
Returns the unique identifier associated with this GuacamoleTunnel.
+
+
getUUID() - Method in class org.apache.guacamole.net.SimpleGuacamoleTunnel
+
 
+
getVideoMimetypes() - Method in class org.apache.guacamole.protocol.GuacamoleClientInformation
+
+
Returns the list of video mimetypes supported by the client.
+
+
getWebSocketCode() - Method in exception org.apache.guacamole.GuacamoleException
+
+
Returns the most applicable WebSocket status code that can be + associated with this exception.
+
+
getWebSocketCode() - Method in enum org.apache.guacamole.protocol.GuacamoleStatus
+
+
Returns the most applicable HTTP error code.
+
+
getWriter() - Method in class org.apache.guacamole.net.DelegatingGuacamoleSocket
+
 
+
getWriter() - Method in interface org.apache.guacamole.net.GuacamoleSocket
+
+
Returns a GuacamoleWriter which can be used to write to the + Guacamole instruction stream associated with the connection + represented by this GuacamoleSocket.
+
+
getWriter() - Method in class org.apache.guacamole.net.InetGuacamoleSocket
+
 
+
getWriter() - Method in class org.apache.guacamole.net.SSLGuacamoleSocket
+
 
+
getWriter() - Method in class org.apache.guacamole.protocol.FilteredGuacamoleSocket
+
 
+
GuacamoleClientBadTypeException - Exception in org.apache.guacamole
+
+
An exception which is thrown when data has been submitted with an unsupported + mimetype.
+
+
GuacamoleClientBadTypeException(String) - Constructor for exception org.apache.guacamole.GuacamoleClientBadTypeException
+
+
Creates a new GuacamoleClientBadTypeException with the given message.
+
+
GuacamoleClientBadTypeException(String, Throwable) - Constructor for exception org.apache.guacamole.GuacamoleClientBadTypeException
+
+
Creates a new GuacamoleClientBadTypeException with the given message and cause.
+
+
GuacamoleClientBadTypeException(Throwable) - Constructor for exception org.apache.guacamole.GuacamoleClientBadTypeException
+
+
Creates a new GuacamoleClientBadTypeException with the given cause.
+
+
GuacamoleClientException - Exception in org.apache.guacamole
+
+
A generic exception thrown when part of the Guacamole API encounters + an error in the client's request.
+
+
GuacamoleClientException(String) - Constructor for exception org.apache.guacamole.GuacamoleClientException
+
+
Creates a new GuacamoleException with the given message.
+
+
GuacamoleClientException(String, Throwable) - Constructor for exception org.apache.guacamole.GuacamoleClientException
+
+
Creates a new GuacamoleException with the given message and cause.
+
+
GuacamoleClientException(Throwable) - Constructor for exception org.apache.guacamole.GuacamoleClientException
+
+
Creates a new GuacamoleException with the given cause.
+
+
GuacamoleClientInformation - Class in org.apache.guacamole.protocol
+
+
An abstract representation of Guacamole client information, including all + information required by the Guacamole protocol during the preamble.
+
+
GuacamoleClientInformation() - Constructor for class org.apache.guacamole.protocol.GuacamoleClientInformation
+
 
+
GuacamoleClientOverrunException - Exception in org.apache.guacamole
+
+
An exception which is thrown when the client has sent too much data.
+
+
GuacamoleClientOverrunException(String) - Constructor for exception org.apache.guacamole.GuacamoleClientOverrunException
+
+
Creates a new GuacamoleClientOverrunException with the given message.
+
+
GuacamoleClientOverrunException(String, Throwable) - Constructor for exception org.apache.guacamole.GuacamoleClientOverrunException
+
+
Creates a new GuacamoleClientOverrunException with the given message and cause.
+
+
GuacamoleClientOverrunException(Throwable) - Constructor for exception org.apache.guacamole.GuacamoleClientOverrunException
+
+
Creates a new GuacamoleClientOverrunException with the given cause.
+
+
GuacamoleClientTimeoutException - Exception in org.apache.guacamole
+
+
An exception which is thrown when the client is taking too long to respond.
+
+
GuacamoleClientTimeoutException(String) - Constructor for exception org.apache.guacamole.GuacamoleClientTimeoutException
+
+
Creates a new GuacamoleClientTimeoutException with the given message.
+
+
GuacamoleClientTimeoutException(String, Throwable) - Constructor for exception org.apache.guacamole.GuacamoleClientTimeoutException
+
+
Creates a new GuacamoleClientTimeoutException with the given message and cause.
+
+
GuacamoleClientTimeoutException(Throwable) - Constructor for exception org.apache.guacamole.GuacamoleClientTimeoutException
+
+
Creates a new GuacamoleClientTimeoutException with the given cause.
+
+
GuacamoleClientTooManyException - Exception in org.apache.guacamole
+
+
An exception which is thrown when too many requests have been received + by the current client, and further requests are being rejected, either + temporarily or permanently.
+
+
GuacamoleClientTooManyException(String) - Constructor for exception org.apache.guacamole.GuacamoleClientTooManyException
+
+
Creates a new GuacamoleClientTooManyException with the given message.
+
+
GuacamoleClientTooManyException(String, Throwable) - Constructor for exception org.apache.guacamole.GuacamoleClientTooManyException
+
+
Creates a new GuacamoleClientTooManyException with the given message and cause.
+
+
GuacamoleClientTooManyException(Throwable) - Constructor for exception org.apache.guacamole.GuacamoleClientTooManyException
+
+
Creates a new GuacamoleClientTooManyException with the given cause.
+
+
GuacamoleConfiguration - Class in org.apache.guacamole.protocol
+
+
All information necessary to complete the initial protocol handshake of a + Guacamole session.
+
+
GuacamoleConfiguration() - Constructor for class org.apache.guacamole.protocol.GuacamoleConfiguration
+
+
Creates a new, blank GuacamoleConfiguration with its protocol, connection + ID, and parameters unset.
+
+
GuacamoleConfiguration(GuacamoleConfiguration) - Constructor for class org.apache.guacamole.protocol.GuacamoleConfiguration
+
+
Copies the given GuacamoleConfiguration, creating a new, indepedent + GuacamoleConfiguration containing the same protocol, connection ID, + and parameter values, if any.
+
+
GuacamoleConnectionClosedException - Exception in org.apache.guacamole
+
+
An exception which is thrown when an operation cannot be performed because + its corresponding connection is closed.
+
+
GuacamoleConnectionClosedException(String) - Constructor for exception org.apache.guacamole.GuacamoleConnectionClosedException
+
+
Creates a new GuacamoleConnectionClosedException with the given message.
+
+
GuacamoleConnectionClosedException(String, Throwable) - Constructor for exception org.apache.guacamole.GuacamoleConnectionClosedException
+
+
Creates a new GuacamoleConnectionClosedException with the given message + and cause.
+
+
GuacamoleConnectionClosedException(Throwable) - Constructor for exception org.apache.guacamole.GuacamoleConnectionClosedException
+
+
Creates a new GuacamoleConnectionClosedException with the given cause.
+
+
GuacamoleException - Exception in org.apache.guacamole
+
+
A generic exception thrown when parts of the Guacamole API encounter + errors.
+
+
GuacamoleException(String) - Constructor for exception org.apache.guacamole.GuacamoleException
+
+
Creates a new GuacamoleException with the given message.
+
+
GuacamoleException(String, Throwable) - Constructor for exception org.apache.guacamole.GuacamoleException
+
+
Creates a new GuacamoleException with the given message and cause.
+
+
GuacamoleException(Throwable) - Constructor for exception org.apache.guacamole.GuacamoleException
+
+
Creates a new GuacamoleException with the given cause.
+
+
GuacamoleFilter - Interface in org.apache.guacamole.protocol
+
+
Interface which provides for the filtering of individual instructions.
+
+
GuacamoleHTTPTunnelServlet - Class in org.apache.guacamole.servlet
+
+
A HttpServlet implementing and abstracting the operations required by the + HTTP implementation of the JavaScript Guacamole client's tunnel.
+
+
GuacamoleHTTPTunnelServlet() - Constructor for class org.apache.guacamole.servlet.GuacamoleHTTPTunnelServlet
+
 
+
GuacamoleInstruction - Class in org.apache.guacamole.protocol
+
+
An abstract representation of a Guacamole instruction, as defined by the + Guacamole protocol.
+
+
GuacamoleInstruction(String, String...) - Constructor for class org.apache.guacamole.protocol.GuacamoleInstruction
+
+
Creates a new GuacamoleInstruction having the given Operation and + list of arguments values.
+
+
GuacamoleInstruction(String, List<String>) - Constructor for class org.apache.guacamole.protocol.GuacamoleInstruction
+
+
Creates a new GuacamoleInstruction having the given Operation and + list of arguments values.
+
+
GuacamoleParser - Class in org.apache.guacamole.protocol
+
+
Parser for the Guacamole protocol.
+
+
GuacamoleParser() - Constructor for class org.apache.guacamole.protocol.GuacamoleParser
+
 
+
GuacamoleProtocolCapability - Enum in org.apache.guacamole.protocol
+
+
Capabilities which may not be present in all versions of the Guacamole + protocol.
+
+
GuacamoleProtocolVersion - Class in org.apache.guacamole.protocol
+
+
Representation of a Guacamole protocol version.
+
+
GuacamoleProtocolVersion(int, int, int) - Constructor for class org.apache.guacamole.protocol.GuacamoleProtocolVersion
+
+
Generate a new GuacamoleProtocolVersion object with the given + major version, minor version, and patch version.
+
+
GuacamoleReader - Interface in org.apache.guacamole.io
+
+
Provides abstract and raw character read access to a stream of Guacamole + instructions.
+
+
GuacamoleResourceClosedException - Exception in org.apache.guacamole
+
+
An exception which is thrown when a resource is no longer available because + it is closed.
+
+
GuacamoleResourceClosedException(String) - Constructor for exception org.apache.guacamole.GuacamoleResourceClosedException
+
+
Creates a new GuacamoleResourceClosedException with the given message.
+
+
GuacamoleResourceClosedException(String, Throwable) - Constructor for exception org.apache.guacamole.GuacamoleResourceClosedException
+
+
Creates a new GuacamoleResourceClosedException with the given message + and cause.
+
+
GuacamoleResourceClosedException(Throwable) - Constructor for exception org.apache.guacamole.GuacamoleResourceClosedException
+
+
Creates a new GuacamoleResourceClosedException with the given cause.
+
+
GuacamoleResourceConflictException - Exception in org.apache.guacamole
+
+
An exception which is thrown when a resource has been requested, but that + resource is locked or currently in use, and cannot be accessed by the + current user.
+
+
GuacamoleResourceConflictException(String) - Constructor for exception org.apache.guacamole.GuacamoleResourceConflictException
+
+
Creates a new GuacamoleResourceConflictException with the given message.
+
+
GuacamoleResourceConflictException(String, Throwable) - Constructor for exception org.apache.guacamole.GuacamoleResourceConflictException
+
+
Creates a new GuacamoleResourceConflictException with the given message and cause.
+
+
GuacamoleResourceConflictException(Throwable) - Constructor for exception org.apache.guacamole.GuacamoleResourceConflictException
+
+
Creates a new GuacamoleResourceConflictException with the given cause.
+
+
GuacamoleResourceNotFoundException - Exception in org.apache.guacamole
+
+
A generic exception thrown when part of the Guacamole API fails to find + a requested resource, such as a configuration or tunnel.
+
+
GuacamoleResourceNotFoundException(String) - Constructor for exception org.apache.guacamole.GuacamoleResourceNotFoundException
+
+
Creates a new GuacamoleResourceNotFoundException with the given message.
+
+
GuacamoleResourceNotFoundException(String, Throwable) - Constructor for exception org.apache.guacamole.GuacamoleResourceNotFoundException
+
+
Creates a new GuacamoleResourceNotFoundException with the given message + and cause.
+
+
GuacamoleResourceNotFoundException(Throwable) - Constructor for exception org.apache.guacamole.GuacamoleResourceNotFoundException
+
+
Creates a new GuacamoleResourceNotFoundException with the given cause.
+
+
GuacamoleSecurityException - Exception in org.apache.guacamole
+
+
A security-related exception thrown when parts of the Guacamole API is + denying access to a resource.
+
+
GuacamoleSecurityException(String) - Constructor for exception org.apache.guacamole.GuacamoleSecurityException
+
+
Creates a new GuacamoleSecurityException with the given message.
+
+
GuacamoleSecurityException(String, Throwable) - Constructor for exception org.apache.guacamole.GuacamoleSecurityException
+
+
Creates a new GuacamoleSecurityException with the given message and cause.
+
+
GuacamoleSecurityException(Throwable) - Constructor for exception org.apache.guacamole.GuacamoleSecurityException
+
+
Creates a new GuacamoleSecurityException with the given cause.
+
+
GuacamoleServerBusyException - Exception in org.apache.guacamole
+
+
An exception which is thrown when the server is too busy to service the + request.
+
+
GuacamoleServerBusyException(String) - Constructor for exception org.apache.guacamole.GuacamoleServerBusyException
+
+
Creates a new GuacamoleServerBusyException with the given message.
+
+
GuacamoleServerBusyException(String, Throwable) - Constructor for exception org.apache.guacamole.GuacamoleServerBusyException
+
+
Creates a new GuacamoleServerBusyException with the given message and cause.
+
+
GuacamoleServerBusyException(Throwable) - Constructor for exception org.apache.guacamole.GuacamoleServerBusyException
+
+
Creates a new GuacamoleServerBusyException with the given cause.
+
+
GuacamoleServerException - Exception in org.apache.guacamole
+
+
A generic exception thrown when part of the Guacamole API encounters + an unexpected, internal error.
+
+
GuacamoleServerException(String) - Constructor for exception org.apache.guacamole.GuacamoleServerException
+
+
Creates a new GuacamoleServerException with the given message.
+
+
GuacamoleServerException(String, Throwable) - Constructor for exception org.apache.guacamole.GuacamoleServerException
+
+
Creates a new GuacamoleServerException with the given message and cause.
+
+
GuacamoleServerException(Throwable) - Constructor for exception org.apache.guacamole.GuacamoleServerException
+
+
Creates a new GuacamoleServerException with the given cause.
+
+
GuacamoleSessionClosedException - Exception in org.apache.guacamole
+
+
An exception which indicates that a session within an upstream server (such + as the remote desktop) has been forcibly terminated.
+
+
GuacamoleSessionClosedException(String) - Constructor for exception org.apache.guacamole.GuacamoleSessionClosedException
+
+
Creates a new GuacamoleSessionClosedException with the given message.
+
+
GuacamoleSessionClosedException(String, Throwable) - Constructor for exception org.apache.guacamole.GuacamoleSessionClosedException
+
+
Creates a new GuacamoleSessionClosedException with the given message and + cause.
+
+
GuacamoleSessionClosedException(Throwable) - Constructor for exception org.apache.guacamole.GuacamoleSessionClosedException
+
+
Creates a new GuacamoleSessionClosedException with the given cause.
+
+
GuacamoleSessionConflictException - Exception in org.apache.guacamole
+
+
An exception which indicates that a session within an upstream server (such + as the remote desktop) has ended because it conflicted with another session.
+
+
GuacamoleSessionConflictException(String) - Constructor for exception org.apache.guacamole.GuacamoleSessionConflictException
+
+
Creates a new GuacamoleSessionConflictException with the given message.
+
+
GuacamoleSessionConflictException(String, Throwable) - Constructor for exception org.apache.guacamole.GuacamoleSessionConflictException
+
+
Creates a new GuacamoleSessionConflictException with the given message + and cause.
+
+
GuacamoleSessionConflictException(Throwable) - Constructor for exception org.apache.guacamole.GuacamoleSessionConflictException
+
+
Creates a new GuacamoleSessionConflictException with the given cause.
+
+
GuacamoleSessionTimeoutException - Exception in org.apache.guacamole
+
+
An exception which indicates that a session within an upstream server (such + as the remote desktop) has ended because it appeared to be inactive.
+
+
GuacamoleSessionTimeoutException(String) - Constructor for exception org.apache.guacamole.GuacamoleSessionTimeoutException
+
+
Creates a new GuacamoleSessionTimeoutException with the given message.
+
+
GuacamoleSessionTimeoutException(String, Throwable) - Constructor for exception org.apache.guacamole.GuacamoleSessionTimeoutException
+
+
Creates a new GuacamoleSessionTimeoutException with the given message + and cause.
+
+
GuacamoleSessionTimeoutException(Throwable) - Constructor for exception org.apache.guacamole.GuacamoleSessionTimeoutException
+
+
Creates a new GuacamoleSessionTimeoutException with the given cause.
+
+
GuacamoleSocket - Interface in org.apache.guacamole.net
+
+
Provides abstract socket-like access to a Guacamole connection.
+
+
GuacamoleStatus - Enum in org.apache.guacamole.protocol
+
+
All possible statuses returned by various Guacamole instructions, each having + a corresponding code.
+
+
GuacamoleTunnel - Interface in org.apache.guacamole.net
+
+
Provides a unique identifier and synchronized access to the GuacamoleReader + and GuacamoleWriter associated with a GuacamoleSocket.
+
+
GuacamoleUnauthorizedException - Exception in org.apache.guacamole
+
+
A security-related exception thrown when parts of the Guacamole API is + denying access to a resource, but access MAY be granted were the user + authorized (logged in).
+
+
GuacamoleUnauthorizedException(String) - Constructor for exception org.apache.guacamole.GuacamoleUnauthorizedException
+
+
Creates a new GuacamoleUnauthorizedException with the given message.
+
+
GuacamoleUnauthorizedException(String, Throwable) - Constructor for exception org.apache.guacamole.GuacamoleUnauthorizedException
+
+
Creates a new GuacamoleUnauthorizedException with the given message and cause.
+
+
GuacamoleUnauthorizedException(Throwable) - Constructor for exception org.apache.guacamole.GuacamoleUnauthorizedException
+
+
Creates a new GuacamoleUnauthorizedException with the given cause.
+
+
GuacamoleUnsupportedException - Exception in org.apache.guacamole
+
+
An exception which is thrown when the requested operation is unsupported + or unimplemented.
+
+
GuacamoleUnsupportedException(String) - Constructor for exception org.apache.guacamole.GuacamoleUnsupportedException
+
+
Creates a new GuacamoleUnsupportedException with the given message.
+
+
GuacamoleUnsupportedException(String, Throwable) - Constructor for exception org.apache.guacamole.GuacamoleUnsupportedException
+
+
Creates a new GuacamoleUnsupportedException with the given message and cause.
+
+
GuacamoleUnsupportedException(Throwable) - Constructor for exception org.apache.guacamole.GuacamoleUnsupportedException
+
+
Creates a new GuacamoleUnsupportedException with the given cause.
+
+
GuacamoleUpstreamException - Exception in org.apache.guacamole
+
+
An exception which indicates than an upstream server (such as the remote + desktop) is returning an error or is otherwise unreachable.
+
+
GuacamoleUpstreamException(String) - Constructor for exception org.apache.guacamole.GuacamoleUpstreamException
+
+
Creates a new GuacamoleUpstreamException with the given message.
+
+
GuacamoleUpstreamException(String, Throwable) - Constructor for exception org.apache.guacamole.GuacamoleUpstreamException
+
+
Creates a new GuacamoleUpstreamException with the given message and + cause.
+
+
GuacamoleUpstreamException(Throwable) - Constructor for exception org.apache.guacamole.GuacamoleUpstreamException
+
+
Creates a new GuacamoleUpstreamException with the given cause.
+
+
GuacamoleUpstreamNotFoundException - Exception in org.apache.guacamole
+
+
An exception which indicates that an upstream server (such as the remote + desktop) does not appear to exist.
+
+
GuacamoleUpstreamNotFoundException(String) - Constructor for exception org.apache.guacamole.GuacamoleUpstreamNotFoundException
+
+
Creates a new GuacamoleUpstreamNotFoundException with the given message.
+
+
GuacamoleUpstreamNotFoundException(String, Throwable) - Constructor for exception org.apache.guacamole.GuacamoleUpstreamNotFoundException
+
+
Creates a new GuacamoleUpstreamNotFoundException with the given message + and cause.
+
+
GuacamoleUpstreamNotFoundException(Throwable) - Constructor for exception org.apache.guacamole.GuacamoleUpstreamNotFoundException
+
+
Creates a new GuacamoleUpstreamNotFoundException with the given cause.
+
+
GuacamoleUpstreamTimeoutException - Exception in org.apache.guacamole
+
+
An exception which indicates than an upstream server (such as the remote + desktop) is taking too long to respond.
+
+
GuacamoleUpstreamTimeoutException(String) - Constructor for exception org.apache.guacamole.GuacamoleUpstreamTimeoutException
+
+
Creates a new GuacamoleUpstreamException with the given message.
+
+
GuacamoleUpstreamTimeoutException(String, Throwable) - Constructor for exception org.apache.guacamole.GuacamoleUpstreamTimeoutException
+
+
Creates a new GuacamoleUpstreamException with the given message and + cause.
+
+
GuacamoleUpstreamTimeoutException(Throwable) - Constructor for exception org.apache.guacamole.GuacamoleUpstreamTimeoutException
+
+
Creates a new GuacamoleUpstreamException with the given cause.
+
+
GuacamoleUpstreamUnavailableException - Exception in org.apache.guacamole
+
+
An exception which indicates that an upstream server (such as the remote + desktop) is not available to service the request.
+
+
GuacamoleUpstreamUnavailableException(String) - Constructor for exception org.apache.guacamole.GuacamoleUpstreamUnavailableException
+
+
Creates a new GuacamoleUpstreamUnavailableException with the given + message.
+
+
GuacamoleUpstreamUnavailableException(String, Throwable) - Constructor for exception org.apache.guacamole.GuacamoleUpstreamUnavailableException
+
+
Creates a new GuacamoleUpstreamUnavailableException with the given + message and cause.
+
+
GuacamoleUpstreamUnavailableException(Throwable) - Constructor for exception org.apache.guacamole.GuacamoleUpstreamUnavailableException
+
+
Creates a new GuacamoleUpstreamUnavailableException with the given + cause.
+
+
GuacamoleWebSocketTunnelEndpoint - Class in org.apache.guacamole.websocket
+
+
A WebSocket implementation of GuacamoleTunnel functionality, compatible with + the Guacamole.WebSocketTunnel object included with the JavaScript API.
+
+
GuacamoleWebSocketTunnelEndpoint() - Constructor for class org.apache.guacamole.websocket.GuacamoleWebSocketTunnelEndpoint
+
 
+
GuacamoleWriter - Interface in org.apache.guacamole.io
+
+
Provides abstract and raw character write access to a stream of Guacamole + instructions.
+
+
+ + + +

H

+
+
handleTunnelRequest(HttpServletRequest, HttpServletResponse) - Method in class org.apache.guacamole.servlet.GuacamoleHTTPTunnelServlet
+
+
Dispatches every HTTP GET and POST request to the appropriate handler + function based on the query string.
+
+
hashCode() - Method in class org.apache.guacamole.protocol.GuacamoleProtocolVersion
+
 
+
hasNext() - Method in class org.apache.guacamole.protocol.GuacamoleParser
+
 
+
hasQueuedReaderThreads() - Method in class org.apache.guacamole.net.AbstractGuacamoleTunnel
+
+
Returns whether there are threads waiting for read access to the + Guacamole instruction stream.
+
+
hasQueuedReaderThreads() - Method in class org.apache.guacamole.net.DelegatingGuacamoleTunnel
+
 
+
hasQueuedReaderThreads() - Method in interface org.apache.guacamole.net.GuacamoleTunnel
+
+
Returns whether there are threads waiting for read access to the + Guacamole instruction stream.
+
+
hasQueuedWriterThreads() - Method in class org.apache.guacamole.net.AbstractGuacamoleTunnel
+
 
+
hasQueuedWriterThreads() - Method in class org.apache.guacamole.net.DelegatingGuacamoleTunnel
+
 
+
hasQueuedWriterThreads() - Method in interface org.apache.guacamole.net.GuacamoleTunnel
+
+
Returns whether there are threads waiting for write access to the + Guacamole instruction stream.
+
+
+ + + +

I

+
+
InetGuacamoleSocket - Class in org.apache.guacamole.net
+
+
Provides abstract socket-like access to a Guacamole connection over a given + hostname and port.
+
+
InetGuacamoleSocket(String, int) - Constructor for class org.apache.guacamole.net.InetGuacamoleSocket
+
+
Creates a new InetGuacamoleSocket which reads and writes instructions + to the Guacamole instruction stream of the Guacamole proxy server + running at the given hostname and port.
+
+
INSTRUCTION_MAX_DIGITS - Static variable in class org.apache.guacamole.protocol.GuacamoleParser
+
+
The maximum number of digits to allow per length prefix.
+
+
INSTRUCTION_MAX_ELEMENTS - Static variable in class org.apache.guacamole.protocol.GuacamoleParser
+
+
The maximum number of elements per instruction, including the opcode.
+
+
INSTRUCTION_MAX_LENGTH - Static variable in class org.apache.guacamole.protocol.GuacamoleParser
+
+
The maximum number of characters per instruction.
+
+
INTERNAL_DATA_OPCODE - Static variable in interface org.apache.guacamole.net.GuacamoleTunnel
+
+
The Guacamole protocol instruction opcode reserved for arbitrary + internal use by tunnel implementations.
+
+
isOpen() - Method in class org.apache.guacamole.net.AbstractGuacamoleTunnel
+
 
+
isOpen() - Method in class org.apache.guacamole.net.DelegatingGuacamoleSocket
+
 
+
isOpen() - Method in class org.apache.guacamole.net.DelegatingGuacamoleTunnel
+
 
+
isOpen() - Method in interface org.apache.guacamole.net.GuacamoleSocket
+
+
Returns whether this GuacamoleSocket is open and can be used for reading + and writing.
+
+
isOpen() - Method in interface org.apache.guacamole.net.GuacamoleTunnel
+
+
Returns whether this GuacamoleTunnel is open, or has been closed.
+
+
isOpen() - Method in class org.apache.guacamole.net.InetGuacamoleSocket
+
 
+
isOpen() - Method in class org.apache.guacamole.net.SSLGuacamoleSocket
+
 
+
isSupported(GuacamoleProtocolVersion) - Method in enum org.apache.guacamole.protocol.GuacamoleProtocolCapability
+
+
Returns whether this capability is supported in the given Guacamole + protocol version.
+
+
+ + + +

L

+
+
LATEST - Static variable in class org.apache.guacamole.protocol.GuacamoleProtocolVersion
+
+
The most recent version of the Guacamole protocol at the time this + version of GuacamoleProtocolVersion was built.
+
+
+ + + +

M

+
+
MSG_INSTRUCTION - org.apache.guacamole.protocol.GuacamoleProtocolCapability
+
+
Support for the "msg" instruction.
+
+
+ + + +

N

+
+
NAME_HANDSHAKE - org.apache.guacamole.protocol.GuacamoleProtocolCapability
+
+
Support for the "name" handshake instruction, allowing clients to send + the name of the Guacamole user to be passed to guacd and associated with + connections.
+
+
next() - Method in class org.apache.guacamole.protocol.GuacamoleParser
+
 
+
+ + + +

O

+
+
onClose(Session, CloseReason) - Method in class org.apache.guacamole.websocket.GuacamoleWebSocketTunnelEndpoint
+
 
+
onMessage(String) - Method in class org.apache.guacamole.websocket.GuacamoleWebSocketTunnelEndpoint
+
 
+
onOpen(Session, EndpointConfig) - Method in class org.apache.guacamole.websocket.GuacamoleWebSocketTunnelEndpoint
+
 
+
org.apache.guacamole - package org.apache.guacamole
+
+
All classes which apply generally across the Guacamole web application + and all other web applications which use the API provided by the + Guacamole project.
+
+
org.apache.guacamole.io - package org.apache.guacamole.io
+
+
All classes relating directly to data input or output.
+
+
org.apache.guacamole.net - package org.apache.guacamole.net
+
+
Classes which apply to network-specific concepts, such as low-level sockets + and tunnels.
+
+
org.apache.guacamole.protocol - package org.apache.guacamole.protocol
+
+
Classes relating directly to the Guacamole protocol.
+
+
org.apache.guacamole.servlet - package org.apache.guacamole.servlet
+
+
Classes which build upon the Java Servlet API, providing an HTTP-based + tunnel and session management.
+
+
org.apache.guacamole.websocket - package org.apache.guacamole.websocket
+
 
+
+ + + +

P

+
+
parseVersion(String) - Static method in class org.apache.guacamole.protocol.GuacamoleProtocolVersion
+
+
Parse the String format of the version provided and return the + the enum value matching that version.
+
+
PROTOCOL_VERSION_DETECTION - org.apache.guacamole.protocol.GuacamoleProtocolCapability
+
+
Negotiation of Guacamole protocol version between client and server + during the protocol handshake.
+
+
+ + + +

R

+
+
read() - Method in interface org.apache.guacamole.io.GuacamoleReader
+
+
Reads at least one complete Guacamole instruction, returning a buffer + containing one or more complete Guacamole instructions and no + incomplete Guacamole instructions.
+
+
read() - Method in class org.apache.guacamole.io.ReaderGuacamoleReader
+
 
+
read() - Method in class org.apache.guacamole.protocol.FilteredGuacamoleReader
+
 
+
ReaderGuacamoleReader - Class in org.apache.guacamole.io
+
+
A GuacamoleReader which wraps a standard Java Reader, using that Reader as + the Guacamole instruction stream.
+
+
ReaderGuacamoleReader(Reader) - Constructor for class org.apache.guacamole.io.ReaderGuacamoleReader
+
+
Creates a new ReaderGuacamoleReader which will use the given Reader as + the Guacamole instruction stream.
+
+
readInstruction() - Method in interface org.apache.guacamole.io.GuacamoleReader
+
+
Reads exactly one complete Guacamole instruction and returns the fully + parsed instruction.
+
+
readInstruction() - Method in class org.apache.guacamole.io.ReaderGuacamoleReader
+
 
+
readInstruction() - Method in class org.apache.guacamole.protocol.FilteredGuacamoleReader
+
 
+
registerTunnel(String, GuacamoleTunnel) - Method in class org.apache.guacamole.servlet.GuacamoleHTTPTunnelServlet
+
+
Registers the given HTTP tunnel such that future read/write requests + including the given tunnel-specific session token will be properly + directed.
+
+
registerTunnel(GuacamoleTunnel) - Method in class org.apache.guacamole.servlet.GuacamoleHTTPTunnelServlet
+
+
Deprecated. +
This function has been deprecated in favor of registerTunnel(java.lang.String, org.apache.guacamole.net.GuacamoleTunnel), + which decouples identification of HTTP tunnel sessions from the + tunnel UUID.
+
+
+
releaseReader() - Method in class org.apache.guacamole.net.AbstractGuacamoleTunnel
+
+
Relinquishes exclusive read access to the Guacamole instruction + stream.
+
+
releaseReader() - Method in class org.apache.guacamole.net.DelegatingGuacamoleTunnel
+
 
+
releaseReader() - Method in interface org.apache.guacamole.net.GuacamoleTunnel
+
+
Relinquishes exclusive read access to the Guacamole instruction + stream.
+
+
releaseWriter() - Method in class org.apache.guacamole.net.AbstractGuacamoleTunnel
+
+
Relinquishes exclusive write access to the Guacamole instruction + stream.
+
+
releaseWriter() - Method in class org.apache.guacamole.net.DelegatingGuacamoleTunnel
+
 
+
releaseWriter() - Method in interface org.apache.guacamole.net.GuacamoleTunnel
+
+
Relinquishes exclusive write access to the Guacamole instruction + stream.
+
+
remove() - Method in class org.apache.guacamole.protocol.GuacamoleParser
+
 
+
REQUIRED_INSTRUCTION - org.apache.guacamole.protocol.GuacamoleProtocolCapability
+
+
Support for the "required" instruction.
+
+
RESOURCE_CLOSED - org.apache.guacamole.protocol.GuacamoleStatus
+
+
The operation could not be performed as the requested resource is now + closed.
+
+
RESOURCE_CONFLICT - org.apache.guacamole.protocol.GuacamoleStatus
+
+
The operation could not be performed as the requested resource is already + in use.
+
+
RESOURCE_NOT_FOUND - org.apache.guacamole.protocol.GuacamoleStatus
+
+
The operation could not be performed as the requested resource does not + exist.
+
+
+ + + +

S

+
+
sendError(HttpServletResponse, int, int, String) - Method in class org.apache.guacamole.servlet.GuacamoleHTTPTunnelServlet
+
+
Sends an error on the given HTTP response using the information within + the given GuacamoleStatus.
+
+
SERVER_BUSY - org.apache.guacamole.protocol.GuacamoleStatus
+
+
The operation could not be performed as the server is busy.
+
+
SERVER_ERROR - org.apache.guacamole.protocol.GuacamoleStatus
+
+
The operation could not be performed due to an internal failure.
+
+
SESSION_CLOSED - org.apache.guacamole.protocol.GuacamoleStatus
+
+
The session within the upstream server has been forcibly terminated.
+
+
SESSION_CONFLICT - org.apache.guacamole.protocol.GuacamoleStatus
+
+
The session within the upstream server has ended because it conflicted + with another session.
+
+
SESSION_TIMEOUT - org.apache.guacamole.protocol.GuacamoleStatus
+
+
The session within the upstream server has ended because it appeared to + be inactive.
+
+
setConnectionID(String) - Method in class org.apache.guacamole.protocol.GuacamoleConfiguration
+
+
Sets the ID of the connection being joined, if any.
+
+
setName(String) - Method in class org.apache.guacamole.protocol.GuacamoleClientInformation
+
+
Set the human-readable name of the user associated with this client.
+
+
setOptimalResolution(int) - Method in class org.apache.guacamole.protocol.GuacamoleClientInformation
+
+
Sets the resolution of the screen if the optimal width and height are + used, in DPI.
+
+
setOptimalScreenHeight(int) - Method in class org.apache.guacamole.protocol.GuacamoleClientInformation
+
+
Sets the client's optimal screen height.
+
+
setOptimalScreenWidth(int) - Method in class org.apache.guacamole.protocol.GuacamoleClientInformation
+
+
Sets the client's optimal screen width.
+
+
setParameter(String, String) - Method in class org.apache.guacamole.protocol.GuacamoleConfiguration
+
+
Sets the value for the parameter with the given name.
+
+
setParameters(Map<String, String>) - Method in class org.apache.guacamole.protocol.GuacamoleConfiguration
+
+
Replaces all current parameters with the parameters defined within the + given map.
+
+
setProtocol(String) - Method in class org.apache.guacamole.protocol.GuacamoleConfiguration
+
+
Sets the name of the protocol to be used.
+
+
setTimezone(String) - Method in class org.apache.guacamole.protocol.GuacamoleClientInformation
+
+
Set the string value of the timezone, or null if the timezone will not + be provided by the client.
+
+
SimpleGuacamoleTunnel - Class in org.apache.guacamole.net
+
+
GuacamoleTunnel implementation which uses a provided socket.
+
+
SimpleGuacamoleTunnel(GuacamoleSocket) - Constructor for class org.apache.guacamole.net.SimpleGuacamoleTunnel
+
+
Creates a new GuacamoleTunnel which synchronizes access to the + Guacamole instruction stream associated with the given GuacamoleSocket.
+
+
SSLGuacamoleSocket - Class in org.apache.guacamole.net
+
+
Provides abstract socket-like access to a Guacamole connection over SSL to + a given hostname and port.
+
+
SSLGuacamoleSocket(String, int) - Constructor for class org.apache.guacamole.net.SSLGuacamoleSocket
+
+
Creates a new SSLGuacamoleSocket which reads and writes instructions + to the Guacamole instruction stream of the Guacamole proxy server + running at the given hostname and port using SSL.
+
+
SUCCESS - org.apache.guacamole.protocol.GuacamoleStatus
+
+
The operation succeeded.
+
+
+ + + +

T

+
+
TIMEZONE_HANDSHAKE - org.apache.guacamole.protocol.GuacamoleProtocolCapability
+
+
Support for the "timezone" handshake instruction.
+
+
toException(String) - Method in enum org.apache.guacamole.protocol.GuacamoleStatus
+
+
Returns an instance of the GuacamoleException subclass + corresponding to this Guacamole protocol status code.
+
+
toString() - Method in class org.apache.guacamole.protocol.GuacamoleInstruction
+
+
Returns this GuacamoleInstruction in the form it would be sent over the + Guacamole protocol.
+
+
toString() - Method in class org.apache.guacamole.protocol.GuacamoleProtocolVersion
+
 
+
+ + + +

U

+
+
unsetParameter(String) - Method in class org.apache.guacamole.protocol.GuacamoleConfiguration
+
+
Removes the value set for the parameter with the given name.
+
+
UNSUPPORTED - org.apache.guacamole.protocol.GuacamoleStatus
+
+
The requested operation is unsupported.
+
+
UPSTREAM_ERROR - org.apache.guacamole.protocol.GuacamoleStatus
+
+
The operation was unsuccessful due to an error or otherwise unexpected + condition of the upstream server.
+
+
UPSTREAM_NOT_FOUND - org.apache.guacamole.protocol.GuacamoleStatus
+
+
The operation could not be performed because the upstream server does + not appear to exist.
+
+
UPSTREAM_TIMEOUT - org.apache.guacamole.protocol.GuacamoleStatus
+
+
The operation could not be performed because the upstream server is not + responding.
+
+
UPSTREAM_UNAVAILABLE - org.apache.guacamole.protocol.GuacamoleStatus
+
+
The operation could not be performed because the upstream server is not + available to service the request.
+
+
+ + + +

V

+
+
valueOf(String) - Static method in enum org.apache.guacamole.protocol.GuacamoleProtocolCapability
+
+
Returns the enum constant of this type with the specified name.
+
+
valueOf(String) - Static method in enum org.apache.guacamole.protocol.GuacamoleStatus
+
+
Returns the enum constant of this type with the specified name.
+
+
values() - Static method in enum org.apache.guacamole.protocol.GuacamoleProtocolCapability
+
+
Returns an array containing the constants of this enum type, in +the order they are declared.
+
+
values() - Static method in enum org.apache.guacamole.protocol.GuacamoleStatus
+
+
Returns an array containing the constants of this enum type, in +the order they are declared.
+
+
VERSION_1_0_0 - Static variable in class org.apache.guacamole.protocol.GuacamoleProtocolVersion
+
+
Protocol version 1.0.0 and older.
+
+
VERSION_1_1_0 - Static variable in class org.apache.guacamole.protocol.GuacamoleProtocolVersion
+
+
Protocol version 1.1.0, which introduces Client-Server version + detection, arbitrary handshake instruction order, and support + for passing the client timezone to the server during the handshake.
+
+
VERSION_1_3_0 - Static variable in class org.apache.guacamole.protocol.GuacamoleProtocolVersion
+
+
Protocol version 1.3.0, which introduces the "required" instruction + allowing the server to explicitly request connection parameters from the + client.
+
+
VERSION_1_5_0 - Static variable in class org.apache.guacamole.protocol.GuacamoleProtocolVersion
+
+
Protocol version 1.5.0, which introduces the "msg" instruction, allowing + the server to send message notifications that will be displayed on the + client.
+
+
+ + + +

W

+
+
write(char[]) - Method in interface org.apache.guacamole.io.GuacamoleWriter
+
+
Writes the entire given array of characters to the Guacamole instruction + stream.
+
+
write(char[]) - Method in class org.apache.guacamole.io.WriterGuacamoleWriter
+
 
+
write(char[]) - Method in class org.apache.guacamole.protocol.FilteredGuacamoleWriter
+
 
+
write(char[], int, int) - Method in interface org.apache.guacamole.io.GuacamoleWriter
+
+
Writes a portion of the given array of characters to the Guacamole + instruction stream.
+
+
write(char[], int, int) - Method in class org.apache.guacamole.io.WriterGuacamoleWriter
+
 
+
write(char[], int, int) - Method in class org.apache.guacamole.protocol.FilteredGuacamoleWriter
+
 
+
writeInstruction(GuacamoleInstruction) - Method in interface org.apache.guacamole.io.GuacamoleWriter
+
+
Writes the given fully parsed instruction to the Guacamole instruction + stream.
+
+
writeInstruction(GuacamoleInstruction) - Method in class org.apache.guacamole.io.WriterGuacamoleWriter
+
 
+
writeInstruction(GuacamoleInstruction) - Method in class org.apache.guacamole.protocol.FilteredGuacamoleWriter
+
 
+
WriterGuacamoleWriter - Class in org.apache.guacamole.io
+
+
A GuacamoleWriter which wraps a standard Java Writer, using that Writer as + the Guacamole instruction stream.
+
+
WriterGuacamoleWriter(Writer) - Constructor for class org.apache.guacamole.io.WriterGuacamoleWriter
+
+
Creates a new WriterGuacamoleWriter which will use the given Writer as + the Guacamole instruction stream.
+
+
+A C D E F G H I L M N O P R S T U V W 
All Classes All Packages
+
+
+ +

Copyright © 2024. All rights reserved.

+
+ + diff --git a/doc/1.5.5/guacamole-common/index.html b/doc/1.5.5/guacamole-common/index.html new file mode 100644 index 000000000..d53839b7d --- /dev/null +++ b/doc/1.5.5/guacamole-common/index.html @@ -0,0 +1,198 @@ + + + + + +Overview (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

guacamole-common 1.5.5 API

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Packages 
PackageDescription
org.apache.guacamole +
All classes which apply generally across the Guacamole web application + and all other web applications which use the API provided by the + Guacamole project.
+
org.apache.guacamole.io +
All classes relating directly to data input or output.
+
org.apache.guacamole.net +
Classes which apply to network-specific concepts, such as low-level sockets + and tunnels.
+
org.apache.guacamole.protocol +
Classes relating directly to the Guacamole protocol.
+
org.apache.guacamole.servlet +
Classes which build upon the Java Servlet API, providing an HTTP-based + tunnel and session management.
+
org.apache.guacamole.websocket 
+
+
+
+ +

Copyright © 2024. All rights reserved.

+
+ + diff --git a/doc/1.5.5/guacamole-common/jquery-ui.overrides.css b/doc/1.5.5/guacamole-common/jquery-ui.overrides.css new file mode 100644 index 000000000..facf852c2 --- /dev/null +++ b/doc/1.5.5/guacamole-common/jquery-ui.overrides.css @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2020, 2022, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +.ui-state-active, +.ui-widget-content .ui-state-active, +.ui-widget-header .ui-state-active, +a.ui-button:active, +.ui-button:active, +.ui-button.ui-state-active:hover { + /* Overrides the color of selection used in jQuery UI */ + background: #F8981D; + border: 1px solid #F8981D; +} diff --git a/doc/1.5.5/guacamole-common/jquery/external/jquery/jquery.js b/doc/1.5.5/guacamole-common/jquery/external/jquery/jquery.js new file mode 100644 index 000000000..50937333b --- /dev/null +++ b/doc/1.5.5/guacamole-common/jquery/external/jquery/jquery.js @@ -0,0 +1,10872 @@ +/*! + * jQuery JavaScript Library v3.5.1 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2020-05-04T22:49Z + */ +( function( global, factory ) { + + "use strict"; + + if ( typeof module === "object" && typeof module.exports === "object" ) { + + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 +// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode +// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common +// enough that all such attempts are guarded in a try block. +"use strict"; + +var arr = []; + +var getProto = Object.getPrototypeOf; + +var slice = arr.slice; + +var flat = arr.flat ? function( array ) { + return arr.flat.call( array ); +} : function( array ) { + return arr.concat.apply( [], array ); +}; + + +var push = arr.push; + +var indexOf = arr.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var fnToString = hasOwn.toString; + +var ObjectFunctionString = fnToString.call( Object ); + +var support = {}; + +var isFunction = function isFunction( obj ) { + + // Support: Chrome <=57, Firefox <=52 + // In some browsers, typeof returns "function" for HTML elements + // (i.e., `typeof document.createElement( "object" ) === "function"`). + // We don't want to classify *any* DOM node as a function. + return typeof obj === "function" && typeof obj.nodeType !== "number"; + }; + + +var isWindow = function isWindow( obj ) { + return obj != null && obj === obj.window; + }; + + +var document = window.document; + + + + var preservedScriptAttributes = { + type: true, + src: true, + nonce: true, + noModule: true + }; + + function DOMEval( code, node, doc ) { + doc = doc || document; + + var i, val, + script = doc.createElement( "script" ); + + script.text = code; + if ( node ) { + for ( i in preservedScriptAttributes ) { + + // Support: Firefox 64+, Edge 18+ + // Some browsers don't support the "nonce" property on scripts. + // On the other hand, just using `getAttribute` is not enough as + // the `nonce` attribute is reset to an empty string whenever it + // becomes browsing-context connected. + // See https://github.com/whatwg/html/issues/2369 + // See https://html.spec.whatwg.org/#nonce-attributes + // The `node.getAttribute` check was added for the sake of + // `jQuery.globalEval` so that it can fake a nonce-containing node + // via an object. + val = node[ i ] || node.getAttribute && node.getAttribute( i ); + if ( val ) { + script.setAttribute( i, val ); + } + } + } + doc.head.appendChild( script ).parentNode.removeChild( script ); + } + + +function toType( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; +} +/* global Symbol */ +// Defining this global in .eslintrc.json would create a danger of using the global +// unguarded in another place, it seems safer to define global only for this module + + + +var + version = "3.5.1", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + + // Return all the elements in a clean array + if ( num == null ) { + return slice.call( this ); + } + + // Return just the one element from the set + return num < 0 ? this[ num + this.length ] : this[ num ]; + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + even: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return ( i + 1 ) % 2; + } ) ); + }, + + odd: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return i % 2; + } ) ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + copy = options[ name ]; + + // Prevent Object.prototype pollution + // Prevent never-ending loop + if ( name === "__proto__" || target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = Array.isArray( copy ) ) ) ) { + src = target[ name ]; + + // Ensure proper type for the source value + if ( copyIsArray && !Array.isArray( src ) ) { + clone = []; + } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { + clone = {}; + } else { + clone = src; + } + copyIsArray = false; + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + // Evaluates a script in a provided context; falls back to the global one + // if not specified. + globalEval: function( code, options, doc ) { + DOMEval( code, { nonce: options && options.nonce }, doc ); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return flat( ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), +function( _i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +} ); + +function isArrayLike( obj ) { + + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = toType( obj ); + + if ( isFunction( obj ) || isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.3.5 + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://js.foundation/ + * + * Date: 2020-03-14 + */ +( function( window ) { +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + nonnativeSelectorCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // Instance methods + hasOwn = ( {} ).hasOwnProperty, + arr = [], + pop = arr.pop, + pushNative = arr.push, + push = arr.push, + slice = arr.slice, + + // Use a stripped-down indexOf as it's faster than native + // https://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[ i ] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" + + "ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram + identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + + // "Attribute values must be CSS identifiers [capture 5] + // or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + + whitespace + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + + "*" ), + rdescend = new RegExp( whitespace + "|>" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rhtml = /HTML$/i, + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + + // CSS escapes + // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ), + funescape = function( escape, nonHex ) { + var high = "0x" + escape.slice( 1 ) - 0x10000; + + return nonHex ? + + // Strip the backslash prefix from a non-hex escape sequence + nonHex : + + // Replace a hexadecimal escape sequence with the encoded Unicode code point + // Support: IE <=11+ + // For values outside the Basic Multilingual Plane (BMP), manually construct a + // surrogate pair + high < 0 ? + String.fromCharCode( high + 0x10000 ) : + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // CSS string/identifier serialization + // https://drafts.csswg.org/cssom/#common-serializing-idioms + rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, + fcssescape = function( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }, + + inDisabledFieldset = addCombinator( + function( elem ) { + return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; + }, + { dir: "parentNode", next: "legend" } + ); + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + ( arr = slice.call( preferredDoc.childNodes ) ), + preferredDoc.childNodes + ); + + // Support: Android<4.0 + // Detect silently failing push.apply + // eslint-disable-next-line no-unused-expressions + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + pushNative.apply( target, slice.call( els ) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + + // Can't trust NodeList.length + while ( ( target[ j++ ] = els[ i++ ] ) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + setDocument( context ); + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { + + // ID selector + if ( ( m = match[ 1 ] ) ) { + + // Document context + if ( nodeType === 9 ) { + if ( ( elem = context.getElementById( m ) ) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && ( elem = newContext.getElementById( m ) ) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[ 2 ] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( ( m = match[ 3 ] ) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !nonnativeSelectorCache[ selector + " " ] && + ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) && + + // Support: IE 8 only + // Exclude object elements + ( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) { + + newSelector = selector; + newContext = context; + + // qSA considers elements outside a scoping root when evaluating child or + // descendant combinators, which is not what we want. + // In such cases, we work around the behavior by prefixing every selector in the + // list with an ID selector referencing the scope context. + // The technique has to be used as well when a leading combinator is used + // as such selectors are not recognized by querySelectorAll. + // Thanks to Andrew Dupont for this technique. + if ( nodeType === 1 && + ( rdescend.test( selector ) || rcombinators.test( selector ) ) ) { + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + + // We can use :scope instead of the ID hack if the browser + // supports it & if we're not changing the context. + if ( newContext !== context || !support.scope ) { + + // Capture the context ID, setting it first if necessary + if ( ( nid = context.getAttribute( "id" ) ) ) { + nid = nid.replace( rcssescape, fcssescape ); + } else { + context.setAttribute( "id", ( nid = expando ) ); + } + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + + toSelector( groups[ i ] ); + } + newSelector = groups.join( "," ); + } + + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + nonnativeSelectorCache( selector, true ); + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return ( cache[ key + " " ] = value ); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created element and returns a boolean result + */ +function assert( fn ) { + var el = document.createElement( "fieldset" ); + + try { + return !!fn( el ); + } catch ( e ) { + return false; + } finally { + + // Remove from its parent by default + if ( el.parentNode ) { + el.parentNode.removeChild( el ); + } + + // release memory in IE + el = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split( "|" ), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[ i ] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + a.sourceIndex - b.sourceIndex; + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( ( cur = cur.nextSibling ) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return ( name === "input" || name === "button" ) && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for :enabled/:disabled + * @param {Boolean} disabled true for :disabled; false for :enabled + */ +function createDisabledPseudo( disabled ) { + + // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Only certain elements can match :enabled or :disabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled + if ( "form" in elem ) { + + // Check for inherited disabledness on relevant non-disabled elements: + // * listed form-associated elements in a disabled fieldset + // https://html.spec.whatwg.org/multipage/forms.html#category-listed + // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled + // * option elements in a disabled optgroup + // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled + // All such elements have a "form" property. + if ( elem.parentNode && elem.disabled === false ) { + + // Option elements defer to a parent optgroup if present + if ( "label" in elem ) { + if ( "label" in elem.parentNode ) { + return elem.parentNode.disabled === disabled; + } else { + return elem.disabled === disabled; + } + } + + // Support: IE 6 - 11 + // Use the isDisabled shortcut property to check for disabled fieldset ancestors + return elem.isDisabled === disabled || + + // Where there is no isDisabled, check manually + /* jshint -W018 */ + elem.isDisabled !== !disabled && + inDisabledFieldset( elem ) === disabled; + } + + return elem.disabled === disabled; + + // Try to winnow out elements that can't be disabled before trusting the disabled property. + // Some victims get caught in our net (label, legend, menu, track), but it shouldn't + // even exist on them, let alone have a boolean value. + } else if ( "label" in elem ) { + return elem.disabled === disabled; + } + + // Remaining elements are neither :enabled nor :disabled + return false; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction( function( argument ) { + argument = +argument; + return markFunction( function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ ( j = matchIndexes[ i ] ) ] ) { + seed[ j ] = !( matches[ j ] = seed[ j ] ); + } + } + } ); + } ); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + var namespace = elem.namespaceURI, + docElem = ( elem.ownerDocument || elem ).documentElement; + + // Support: IE <=8 + // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes + // https://bugs.jquery.com/ticket/4833 + return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, subWindow, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9 - 11+, Edge 12 - 18+ + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( preferredDoc != document && + ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { + + // Support: IE 11, Edge + if ( subWindow.addEventListener ) { + subWindow.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( subWindow.attachEvent ) { + subWindow.attachEvent( "onunload", unloadHandler ); + } + } + + // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only, + // Safari 4 - 5 only, Opera <=11.6 - 12.x only + // IE/Edge & older browsers don't support the :scope pseudo-class. + // Support: Safari 6.0 only + // Safari 6.0 supports :scope but it's an alias of :root there. + support.scope = assert( function( el ) { + docElem.appendChild( el ).appendChild( document.createElement( "div" ) ); + return typeof el.querySelectorAll !== "undefined" && + !el.querySelectorAll( ":scope fieldset div" ).length; + } ); + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert( function( el ) { + el.className = "i"; + return !el.getAttribute( "className" ); + } ); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert( function( el ) { + el.appendChild( document.createComment( "" ) ); + return !el.getElementsByTagName( "*" ).length; + } ); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programmatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert( function( el ) { + docElem.appendChild( el ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + } ); + + // ID filter and find + if ( support.getById ) { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute( "id" ) === attrId; + }; + }; + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var elem = context.getElementById( id ); + return elem ? [ elem ] : []; + } + }; + } else { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode( "id" ); + return node && node.value === attrId; + }; + }; + + // Support: IE 6 - 7 only + // getElementById is not reliable as a find shortcut + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var node, i, elems, + elem = context.getElementById( id ); + + if ( elem ) { + + // Verify the id attribute + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + + // Fall back on getElementsByName + elems = context.getElementsByName( id ); + i = 0; + while ( ( elem = elems[ i++ ] ) ) { + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + } + } + + return []; + } + }; + } + + // Tag + Expr.find[ "TAG" ] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See https://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) { + + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert( function( el ) { + + var input; + + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // https://bugs.jquery.com/ticket/12359 + docElem.appendChild( el ).innerHTML = "" + + ""; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !el.querySelectorAll( "[selected]" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push( "~=" ); + } + + // Support: IE 11+, Edge 15 - 18+ + // IE 11/Edge don't find elements on a `[name='']` query in some cases. + // Adding a temporary attribute to the document before the selection works + // around the issue. + // Interestingly, IE 10 & older don't seem to have the issue. + input = document.createElement( "input" ); + input.setAttribute( "name", "" ); + el.appendChild( input ); + if ( !el.querySelectorAll( "[name='']" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + + whitespace + "*(?:''|\"\")" ); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !el.querySelectorAll( ":checked" ).length ) { + rbuggyQSA.push( ":checked" ); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibling-combinator selector` fails + if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push( ".#.+[+~]" ); + } + + // Support: Firefox <=3.6 - 5 only + // Old Firefox doesn't throw on a badly-escaped identifier. + el.querySelectorAll( "\\\f" ); + rbuggyQSA.push( "[\\r\\n\\f]" ); + } ); + + assert( function( el ) { + el.innerHTML = "" + + ""; + + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement( "input" ); + input.setAttribute( "type", "hidden" ); + el.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( el.querySelectorAll( "[name=d]" ).length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( el.querySelectorAll( ":enabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: IE9-11+ + // IE's :disabled selector does not pick up the children of disabled fieldsets + docElem.appendChild( el ).disabled = true; + if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: Opera 10 - 11 only + // Opera 10-11 does not throw on post-comma invalid pseudos + el.querySelectorAll( "*,:x" ); + rbuggyQSA.push( ",.*:" ); + } ); + } + + if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector ) ) ) ) { + + assert( function( el ) { + + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( el, "*" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( el, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + } ); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully self-exclusive + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + ) ); + } : + function( a, b ) { + if ( b ) { + while ( ( b = b.parentNode ) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { + + // Choose the first element that is related to our preferred document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( a == document || a.ownerDocument == preferredDoc && + contains( preferredDoc, a ) ) { + return -1; + } + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( b == document || b.ownerDocument == preferredDoc && + contains( preferredDoc, b ) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + return a == document ? -1 : + b == document ? 1 : + /* eslint-enable eqeqeq */ + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( ( cur = cur.parentNode ) ) { + ap.unshift( cur ); + } + cur = b; + while ( ( cur = cur.parentNode ) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[ i ] === bp[ i ] ) { + i++; + } + + return i ? + + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[ i ], bp[ i ] ) : + + // Otherwise nodes in our document sort first + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + ap[ i ] == preferredDoc ? -1 : + bp[ i ] == preferredDoc ? 1 : + /* eslint-enable eqeqeq */ + 0; + }; + + return document; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + setDocument( elem ); + + if ( support.matchesSelector && documentIsHTML && + !nonnativeSelectorCache[ expr + " " ] && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch ( e ) { + nonnativeSelectorCache( expr, true ); + } + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( context.ownerDocument || context ) != document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( elem.ownerDocument || elem ) != document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + ( val = elem.getAttributeNode( name ) ) && val.specified ? + val.value : + null; +}; + +Sizzle.escape = function( sel ) { + return ( sel + "" ).replace( rcssescape, fcssescape ); +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + + // If no nodeType, this is expected to be an array + while ( ( node = elem[ i++ ] ) ) { + + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[ 1 ] = match[ 1 ].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[ 3 ] = ( match[ 3 ] || match[ 4 ] || + match[ 5 ] || "" ).replace( runescape, funescape ); + + if ( match[ 2 ] === "~=" ) { + match[ 3 ] = " " + match[ 3 ] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[ 1 ] = match[ 1 ].toLowerCase(); + + if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { + + // nth-* requires argument + if ( !match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[ 4 ] = +( match[ 4 ] ? + match[ 5 ] + ( match[ 6 ] || 1 ) : + 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) ); + match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); + + // other types prohibit arguments + } else if ( match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[ 6 ] && match[ 2 ]; + + if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[ 3 ] ) { + match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + + // Get excess from tokenize (recursively) + ( excess = tokenize( unquoted, true ) ) && + + // advance to the next closing parenthesis + ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { + + // excess is a negative index + match[ 0 ] = match[ 0 ].slice( 0, excess ); + match[ 2 ] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { + return true; + } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + ( pattern = new RegExp( "(^|" + whitespace + + ")" + className + "(" + whitespace + "|$)" ) ) && classCache( + className, function( elem ) { + return pattern.test( + typeof elem.className === "string" && elem.className || + typeof elem.getAttribute !== "undefined" && + elem.getAttribute( "class" ) || + "" + ); + } ); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + /* eslint-disable max-len */ + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + /* eslint-enable max-len */ + + }; + }, + + "CHILD": function( type, what, _argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, _context, xml ) { + var cache, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( ( node = node[ dir ] ) ) { + if ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) { + + return false; + } + } + + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( ( node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + + // Use previously-cached element index if available + if ( useCache ) { + + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + + // Use the same loop as above to seek `elem` from the start + while ( ( node = ++nodeIndex && node && node[ dir ] || + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + if ( ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || + ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + uniqueCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction( function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[ i ] ); + seed[ idx ] = !( matches[ idx ] = matched[ i ] ); + } + } ) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + + // Potentially complex pseudos + "not": markFunction( function( selector ) { + + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction( function( seed, matches, _context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( ( elem = unmatched[ i ] ) ) { + seed[ i ] = !( matches[ i ] = elem ); + } + } + } ) : + function( elem, _context, xml ) { + input[ 0 ] = elem; + matcher( input, null, xml, results ); + + // Don't keep the element (issue #299) + input[ 0 ] = null; + return !results.pop(); + }; + } ), + + "has": markFunction( function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + } ), + + "contains": markFunction( function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1; + }; + } ), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + + // lang value must be a valid identifier + if ( !ridentifier.test( lang || "" ) ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( ( elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); + return false; + }; + } ), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && + ( !document.hasFocus || document.hasFocus() ) && + !!( elem.type || elem.href || ~elem.tabIndex ); + }, + + // Boolean properties + "enabled": createDisabledPseudo( false ), + "disabled": createDisabledPseudo( true ), + + "checked": function( elem ) { + + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return ( nodeName === "input" && !!elem.checked ) || + ( nodeName === "option" && !!elem.selected ); + }, + + "selected": function( elem ) { + + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + // eslint-disable-next-line no-unused-expressions + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos[ "empty" ]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( ( attr = elem.getAttribute( "type" ) ) == null || + attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo( function() { + return [ 0 ]; + } ), + + "last": createPositionalPseudo( function( _matchIndexes, length ) { + return [ length - 1 ]; + } ), + + "eq": createPositionalPseudo( function( _matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + } ), + + "even": createPositionalPseudo( function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "odd": createPositionalPseudo( function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "lt": createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? + argument + length : + argument > length ? + length : + argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "gt": createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ) + } +}; + +Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || ( match = rcomma.exec( soFar ) ) ) { + if ( match ) { + + // Don't consume trailing commas as valid + soFar = soFar.slice( match[ 0 ].length ) || soFar; + } + groups.push( ( tokens = [] ) ); + } + + matched = false; + + // Combinators + if ( ( match = rcombinators.exec( soFar ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + + // Cast descendant combinators to space + type: match[ 0 ].replace( rtrim, " " ) + } ); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || + ( match = preFilters[ type ]( match ) ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + type: type, + matches: match + } ); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +}; + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[ i ].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + skip = combinator.next, + key = skip || dir, + checkNonElements = base && key === "parentNode", + doneName = done++; + + return combinator.first ? + + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + return false; + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || ( elem[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || + ( outerCache[ elem.uniqueID ] = {} ); + + if ( skip && skip === elem.nodeName.toLowerCase() ) { + elem = elem[ dir ] || elem; + } else if ( ( oldCache = uniqueCache[ key ] ) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return ( newCache[ 2 ] = oldCache[ 2 ] ); + } else { + + // Reuse newcache so results back-propagate to previous elements + uniqueCache[ key ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { + return true; + } + } + } + } + } + return false; + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[ i ]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[ 0 ]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[ i ], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( ( elem = unmatched[ i ] ) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction( function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( + selector || "*", + context.nodeType ? [ context ] : context, + [] + ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( ( elem = temp[ i ] ) ) { + matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) ) { + + // Restore matcherIn since elem is not yet a final match + temp.push( ( matcherIn[ i ] = elem ) ); + } + } + postFinder( null, ( matcherOut = [] ), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) && + ( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) { + + seed[ temp ] = !( results[ temp ] = elem ); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + } ); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[ 0 ].type ], + implicitRelative = leadingRelative || Expr.relative[ " " ], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + ( checkContext = context ).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { + matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; + } else { + matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[ j ].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens + .slice( 0, i - 1 ) + .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ), + + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), + len = elems.length; + + if ( outermost ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + outermostContext = context == document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id + for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( !context && elem.ownerDocument != document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( ( matcher = elementMatchers[ j++ ] ) ) { + if ( matcher( elem, context || document, xml ) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + + // They will have gone through all possible matchers + if ( ( elem = !matcher && elem ) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + if ( bySet && i !== matchedCount ) { + j = 0; + while ( ( matcher = setMatchers[ j++ ] ) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !( unmatched[ i ] || setMatched[ i ] ) ) { + setMatched[ i ] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[ i ] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( + selector, + matcherFromGroupMatchers( elementMatchers, setMatchers ) + ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( ( selector = compiled.selector || selector ) ); + + results = results || []; + + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[ 0 ] = match[ 0 ].slice( 0 ); + if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && + context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { + + context = ( Expr.find[ "ID" ]( token.matches[ 0 ] + .replace( runescape, funescape ), context ) || [] )[ 0 ]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[ i ]; + + // Abort if we hit a combinator + if ( Expr.relative[ ( type = token.type ) ] ) { + break; + } + if ( ( find = Expr.find[ type ] ) ) { + + // Search, expanding context for leading sibling combinators + if ( ( seed = find( + token.matches[ 0 ].replace( runescape, funescape ), + rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) || + context + ) ) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + +// One-time assignments + +// Sort stability +support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; + +// Support: Chrome 14-35+ +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = !!hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert( function( el ) { + + // Should return 1, but returns 4 (following) + return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; +} ); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert( function( el ) { + el.innerHTML = ""; + return el.firstChild.getAttribute( "href" ) === "#"; +} ) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + } ); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert( function( el ) { + el.innerHTML = ""; + el.firstChild.setAttribute( "value", "" ); + return el.firstChild.getAttribute( "value" ) === ""; +} ) ) { + addHandle( "value", function( elem, _name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + } ); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert( function( el ) { + return el.getAttribute( "disabled" ) == null; +} ) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + ( val = elem.getAttributeNode( name ) ) && val.specified ? + val.value : + null; + } + } ); +} + +return Sizzle; + +} )( window ); + + + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; + +// Deprecated +jQuery.expr[ ":" ] = jQuery.expr.pseudos; +jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; +jQuery.escapeSelector = Sizzle.escape; + + + + +var dir = function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; +}; + + +var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; +}; + + +var rneedsContext = jQuery.expr.match.needsContext; + + + +function nodeName( elem, name ) { + + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + +}; +var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); + + + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + return !!qualifier.call( elem, i, elem ) !== not; + } ); + } + + // Single element + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + } + + // Arraylike of elements (jQuery, arguments, Array) + if ( typeof qualifier !== "string" ) { + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + } ); + } + + // Filtered directly for both simple and complex selectors + return jQuery.filter( qualifier, elements, not ); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + if ( elems.length === 1 && elem.nodeType === 1 ) { + return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; + } + + return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); +}; + +jQuery.fn.extend( { + find: function( selector ) { + var i, ret, + len = this.length, + self = this; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter( function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + } ) ); + } + + ret = this.pushStack( [] ); + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + return len > 1 ? jQuery.uniqueSort( ret ) : ret; + }, + filter: function( selector ) { + return this.pushStack( winnow( this, selector || [], false ) ); + }, + not: function( selector ) { + return this.pushStack( winnow( this, selector || [], true ) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +} ); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + // Shortcut simple #id case for speed + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Method init() accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[ 0 ] === "<" && + selector[ selector.length - 1 ] === ">" && + selector.length >= 3 ) { + + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && ( match[ 1 ] || !context ) ) { + + // HANDLE: $(html) -> $(array) + if ( match[ 1 ] ) { + context = context instanceof jQuery ? context[ 0 ] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[ 1 ], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + + // Properties of context are called as methods if possible + if ( isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[ 2 ] ); + + if ( elem ) { + + // Inject the element directly into the jQuery object + this[ 0 ] = elem; + this.length = 1; + } + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + + // Methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend( { + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter( function() { + var i = 0; + for ( ; i < l; i++ ) { + if ( jQuery.contains( this, targets[ i ] ) ) { + return true; + } + } + } ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + targets = typeof selectors !== "string" && jQuery( selectors ); + + // Positional selectors never match, since there's no _selection_ context + if ( !rneedsContext.test( selectors ) ) { + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( targets ? + targets.index( cur ) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector( cur, selectors ) ) ) { + + matched.push( cur ); + break; + } + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.uniqueSort( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + } +} ); + +function sibling( cur, dir ) { + while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} + return cur; +} + +jQuery.each( { + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, _i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, _i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, _i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + if ( elem.contentDocument != null && + + // Support: IE 11+ + // elements with no `data` attribute has an object + // `contentDocument` with a `null` prototype. + getProto( elem.contentDocument ) ) { + + return elem.contentDocument; + } + + // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only + // Treat the template element as a regular one in browsers that + // don't support it. + if ( nodeName( elem, "template" ) ) { + elem = elem.content || elem; + } + + return jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +} ); +var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); + + + +// Convert String-formatted options into Object-formatted ones +function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { + object[ flag ] = true; + } ); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + createOptions( options ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + + // Last fire value for non-forgettable lists + memory, + + // Flag to know if list was already fired + fired, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = locked || options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && toType( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; + } + } + } ); + return this; + }, + + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? + jQuery.inArray( fn, list ) > -1 : + list.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory && !firing ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + return this; + }, + + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +function Identity( v ) { + return v; +} +function Thrower( ex ) { + throw ex; +} + +function adoptValue( value, resolve, reject, noValue ) { + var method; + + try { + + // Check for promise aspect first to privilege synchronous behavior + if ( value && isFunction( ( method = value.promise ) ) ) { + method.call( value ).done( resolve ).fail( reject ); + + // Other thenables + } else if ( value && isFunction( ( method = value.then ) ) ) { + method.call( value, resolve, reject ); + + // Other non-thenables + } else { + + // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: + // * false: [ value ].slice( 0 ) => resolve( value ) + // * true: [ value ].slice( 1 ) => resolve() + resolve.apply( undefined, [ value ].slice( noValue ) ); + } + + // For Promises/A+, convert exceptions into rejections + // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in + // Deferred#then to conditionally suppress rejection. + } catch ( value ) { + + // Support: Android 4.0 only + // Strict mode functions invoked without .call/.apply get global-object context + reject.apply( undefined, [ value ] ); + } +} + +jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, callbacks, + // ... .then handlers, argument index, [final state] + [ "notify", "progress", jQuery.Callbacks( "memory" ), + jQuery.Callbacks( "memory" ), 2 ], + [ "resolve", "done", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 0, "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 1, "rejected" ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + "catch": function( fn ) { + return promise.then( null, fn ); + }, + + // Keep pipe for back-compat + pipe: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( _i, tuple ) { + + // Map tuples (progress, done, fail) to arguments (done, fail, progress) + var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; + + // deferred.progress(function() { bind to newDefer or newDefer.notify }) + // deferred.done(function() { bind to newDefer or newDefer.resolve }) + // deferred.fail(function() { bind to newDefer or newDefer.reject }) + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + then: function( onFulfilled, onRejected, onProgress ) { + var maxDepth = 0; + function resolve( depth, deferred, handler, special ) { + return function() { + var that = this, + args = arguments, + mightThrow = function() { + var returned, then; + + // Support: Promises/A+ section 2.3.3.3.3 + // https://promisesaplus.com/#point-59 + // Ignore double-resolution attempts + if ( depth < maxDepth ) { + return; + } + + returned = handler.apply( that, args ); + + // Support: Promises/A+ section 2.3.1 + // https://promisesaplus.com/#point-48 + if ( returned === deferred.promise() ) { + throw new TypeError( "Thenable self-resolution" ); + } + + // Support: Promises/A+ sections 2.3.3.1, 3.5 + // https://promisesaplus.com/#point-54 + // https://promisesaplus.com/#point-75 + // Retrieve `then` only once + then = returned && + + // Support: Promises/A+ section 2.3.4 + // https://promisesaplus.com/#point-64 + // Only check objects and functions for thenability + ( typeof returned === "object" || + typeof returned === "function" ) && + returned.then; + + // Handle a returned thenable + if ( isFunction( then ) ) { + + // Special processors (notify) just wait for resolution + if ( special ) { + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ) + ); + + // Normal processors (resolve) also hook into progress + } else { + + // ...and disregard older resolution values + maxDepth++; + + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ), + resolve( maxDepth, deferred, Identity, + deferred.notifyWith ) + ); + } + + // Handle all other returned values + } else { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Identity ) { + that = undefined; + args = [ returned ]; + } + + // Process the value(s) + // Default process is resolve + ( special || deferred.resolveWith )( that, args ); + } + }, + + // Only normal processors (resolve) catch and reject exceptions + process = special ? + mightThrow : + function() { + try { + mightThrow(); + } catch ( e ) { + + if ( jQuery.Deferred.exceptionHook ) { + jQuery.Deferred.exceptionHook( e, + process.stackTrace ); + } + + // Support: Promises/A+ section 2.3.3.3.4.1 + // https://promisesaplus.com/#point-61 + // Ignore post-resolution exceptions + if ( depth + 1 >= maxDepth ) { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Thrower ) { + that = undefined; + args = [ e ]; + } + + deferred.rejectWith( that, args ); + } + } + }; + + // Support: Promises/A+ section 2.3.3.3.1 + // https://promisesaplus.com/#point-57 + // Re-resolve promises immediately to dodge false rejection from + // subsequent errors + if ( depth ) { + process(); + } else { + + // Call an optional hook to record the stack, in case of exception + // since it's otherwise lost when execution goes async + if ( jQuery.Deferred.getStackHook ) { + process.stackTrace = jQuery.Deferred.getStackHook(); + } + window.setTimeout( process ); + } + }; + } + + return jQuery.Deferred( function( newDefer ) { + + // progress_handlers.add( ... ) + tuples[ 0 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onProgress ) ? + onProgress : + Identity, + newDefer.notifyWith + ) + ); + + // fulfilled_handlers.add( ... ) + tuples[ 1 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onFulfilled ) ? + onFulfilled : + Identity + ) + ); + + // rejected_handlers.add( ... ) + tuples[ 2 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onRejected ) ? + onRejected : + Thrower + ) + ); + } ).promise(); + }, + + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 5 ]; + + // promise.progress = list.add + // promise.done = list.add + // promise.fail = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( + function() { + + // state = "resolved" (i.e., fulfilled) + // state = "rejected" + state = stateString; + }, + + // rejected_callbacks.disable + // fulfilled_callbacks.disable + tuples[ 3 - i ][ 2 ].disable, + + // rejected_handlers.disable + // fulfilled_handlers.disable + tuples[ 3 - i ][ 3 ].disable, + + // progress_callbacks.lock + tuples[ 0 ][ 2 ].lock, + + // progress_handlers.lock + tuples[ 0 ][ 3 ].lock + ); + } + + // progress_handlers.fire + // fulfilled_handlers.fire + // rejected_handlers.fire + list.add( tuple[ 3 ].fire ); + + // deferred.notify = function() { deferred.notifyWith(...) } + // deferred.resolve = function() { deferred.resolveWith(...) } + // deferred.reject = function() { deferred.rejectWith(...) } + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); + return this; + }; + + // deferred.notifyWith = list.fireWith + // deferred.resolveWith = list.fireWith + // deferred.rejectWith = list.fireWith + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( singleValue ) { + var + + // count of uncompleted subordinates + remaining = arguments.length, + + // count of unprocessed arguments + i = remaining, + + // subordinate fulfillment data + resolveContexts = Array( i ), + resolveValues = slice.call( arguments ), + + // the master Deferred + master = jQuery.Deferred(), + + // subordinate callback factory + updateFunc = function( i ) { + return function( value ) { + resolveContexts[ i ] = this; + resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( !( --remaining ) ) { + master.resolveWith( resolveContexts, resolveValues ); + } + }; + }; + + // Single- and empty arguments are adopted like Promise.resolve + if ( remaining <= 1 ) { + adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, + !remaining ); + + // Use .then() to unwrap secondary thenables (cf. gh-3000) + if ( master.state() === "pending" || + isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { + + return master.then(); + } + } + + // Multiple arguments are aggregated like Promise.all array elements + while ( i-- ) { + adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); + } + + return master.promise(); + } +} ); + + +// These usually indicate a programmer mistake during development, +// warn about them ASAP rather than swallowing them by default. +var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; + +jQuery.Deferred.exceptionHook = function( error, stack ) { + + // Support: IE 8 - 9 only + // Console exists when dev tools are open, which can happen at any time + if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { + window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); + } +}; + + + + +jQuery.readyException = function( error ) { + window.setTimeout( function() { + throw error; + } ); +}; + + + + +// The deferred used on DOM ready +var readyList = jQuery.Deferred(); + +jQuery.fn.ready = function( fn ) { + + readyList + .then( fn ) + + // Wrap jQuery.readyException in a function so that the lookup + // happens at the time of error handling instead of callback + // registration. + .catch( function( error ) { + jQuery.readyException( error ); + } ); + + return this; +}; + +jQuery.extend( { + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + } +} ); + +jQuery.ready.then = readyList.then; + +// The ready event handler and self cleanup method +function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); +} + +// Catch cases where $(document).ready() is called +// after the browser event has already occurred. +// Support: IE <=9 - 10 only +// Older IE sometimes signals "interactive" too soon +if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + +} else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); +} + + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( toType( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, _key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < len; i++ ) { + fn( + elems[ i ], key, raw ? + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); + } + } + } + + if ( chainable ) { + return elems; + } + + // Gets + if ( bulk ) { + return fn.call( elems ); + } + + return len ? fn( elems[ 0 ], key ) : emptyGet; +}; + + +// Matches dashed string for camelizing +var rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g; + +// Used by camelCase as callback to replace() +function fcamelCase( _all, letter ) { + return letter.toUpperCase(); +} + +// Convert dashed to camelCase; used by the css and data modules +// Support: IE <=9 - 11, Edge 12 - 15 +// Microsoft forgot to hump their vendor prefix (#9572) +function camelCase( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); +} +var acceptData = function( owner ) { + + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); +}; + + + + +function Data() { + this.expando = jQuery.expando + Data.uid++; +} + +Data.uid = 1; + +Data.prototype = { + + cache: function( owner ) { + + // Check if the owner object already has a cache + var value = owner[ this.expando ]; + + // If not, create one + if ( !value ) { + value = {}; + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( acceptData( owner ) ) { + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable property + // configurable must be true to allow the property to be + // deleted when data is removed + } else { + Object.defineProperty( owner, this.expando, { + value: value, + configurable: true + } ); + } + } + } + + return value; + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + // Always use camelCase key (gh-2257) + if ( typeof data === "string" ) { + cache[ camelCase( data ) ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ camelCase( prop ) ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + return key === undefined ? + this.cache( owner ) : + + // Always use camelCase key (gh-2257) + owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; + }, + access: function( owner, key, value ) { + + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ( ( key && typeof key === "string" ) && value === undefined ) ) { + + return this.get( owner, key ); + } + + // When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key !== undefined ) { + + // Support array or space separated string of keys + if ( Array.isArray( key ) ) { + + // If key is an array of keys... + // We always set camelCase keys, so remove that. + key = key.map( camelCase ); + } else { + key = camelCase( key ); + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + key = key in cache ? + [ key ] : + ( key.match( rnothtmlwhite ) || [] ); + } + + i = key.length; + + while ( i-- ) { + delete cache[ key[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + + // Support: Chrome <=35 - 45 + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) + if ( owner.nodeType ) { + owner[ this.expando ] = undefined; + } else { + delete owner[ this.expando ]; + } + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } +}; +var dataPriv = new Data(); + +var dataUser = new Data(); + + + +// Implementation Summary +// +// 1. Enforce API surface and semantic compatibility with 1.9.x branch +// 2. Improve the module's maintainability by reducing the storage +// paths to a single mechanism. +// 3. Use the same single mechanism to support "private" and "user" data. +// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) +// 5. Avoid exposing implementation details on user objects (eg. expando properties) +// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /[A-Z]/g; + +function getData( data ) { + if ( data === "true" ) { + return true; + } + + if ( data === "false" ) { + return false; + } + + if ( data === "null" ) { + return null; + } + + // Only convert to a number if it doesn't change the string + if ( data === +data + "" ) { + return +data; + } + + if ( rbrace.test( data ) ) { + return JSON.parse( data ); + } + + return data; +} + +function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = getData( data ); + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; +} + +jQuery.extend( { + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.remove( elem, name ); + } +} ); + +jQuery.fn.extend( { + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE 11 only + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + dataUser.set( this, key ); + } ); + } + + return access( this, function( value ) { + var data; + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + + // Attempt to get data from the cache + // The key will always be camelCased in Data + data = dataUser.get( elem, key ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, key ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + this.each( function() { + + // We always store the camelCased key + dataUser.set( this, key, value ); + } ); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each( function() { + dataUser.remove( this, key ); + } ); + } +} ); + + +jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || Array.isArray( data ) ) { + queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.remove( elem, [ type + "queue", key ] ); + } ) + } ); + } +} ); + +jQuery.fn.extend( { + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[ 0 ], type ); + } + + return data === undefined ? + this : + this.each( function() { + var queue = jQuery.queue( this, type, data ); + + // Ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + } ); + }, + dequeue: function( type ) { + return this.each( function() { + jQuery.dequeue( this, type ); + } ); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +} ); +var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; + +var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var documentElement = document.documentElement; + + + + var isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ); + }, + composed = { composed: true }; + + // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only + // Check attachment across shadow DOM boundaries when possible (gh-3504) + // Support: iOS 10.0-10.2 only + // Early iOS 10 versions support `attachShadow` but not `getRootNode`, + // leading to errors. We need to check for `getRootNode`. + if ( documentElement.getRootNode ) { + isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ) || + elem.getRootNode( composed ) === elem.ownerDocument; + }; + } +var isHiddenWithinTree = function( elem, el ) { + + // isHiddenWithinTree might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + + // Inline style trumps all + return elem.style.display === "none" || + elem.style.display === "" && + + // Otherwise, check computed style + // Support: Firefox <=43 - 45 + // Disconnected elements can have computed display: none, so first confirm that elem is + // in the document. + isAttached( elem ) && + + jQuery.css( elem, "display" ) === "none"; + }; + + + +function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, scale, + maxIterations = 20, + currentValue = tween ? + function() { + return tween.cur(); + } : + function() { + return jQuery.css( elem, prop, "" ); + }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = elem.nodeType && + ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Support: Firefox <=54 + // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) + initial = initial / 2; + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + while ( maxIterations-- ) { + + // Evaluate and update our best guess (doubling guesses that zero out). + // Finish if the scale equals or crosses 1 (making the old*new product non-positive). + jQuery.style( elem, prop, initialInUnit + unit ); + if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { + maxIterations = 0; + } + initialInUnit = initialInUnit / scale; + + } + + initialInUnit = initialInUnit * 2; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; +} + + +var defaultDisplayMap = {}; + +function getDefaultDisplay( elem ) { + var temp, + doc = elem.ownerDocument, + nodeName = elem.nodeName, + display = defaultDisplayMap[ nodeName ]; + + if ( display ) { + return display; + } + + temp = doc.body.appendChild( doc.createElement( nodeName ) ); + display = jQuery.css( temp, "display" ); + + temp.parentNode.removeChild( temp ); + + if ( display === "none" ) { + display = "block"; + } + defaultDisplayMap[ nodeName ] = display; + + return display; +} + +function showHide( elements, show ) { + var display, elem, + values = [], + index = 0, + length = elements.length; + + // Determine new display value for elements that need to change + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + display = elem.style.display; + if ( show ) { + + // Since we force visibility upon cascade-hidden elements, an immediate (and slow) + // check is required in this first loop unless we have a nonempty display value (either + // inline or about-to-be-restored) + if ( display === "none" ) { + values[ index ] = dataPriv.get( elem, "display" ) || null; + if ( !values[ index ] ) { + elem.style.display = ""; + } + } + if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { + values[ index ] = getDefaultDisplay( elem ); + } + } else { + if ( display !== "none" ) { + values[ index ] = "none"; + + // Remember what we're overwriting + dataPriv.set( elem, "display", display ); + } + } + } + + // Set the display of the elements in a second loop to avoid constant reflow + for ( index = 0; index < length; index++ ) { + if ( values[ index ] != null ) { + elements[ index ].style.display = values[ index ]; + } + } + + return elements; +} + +jQuery.fn.extend( { + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + if ( typeof state === "boolean" ) { + return state ? this.show() : this.hide(); + } + + return this.each( function() { + if ( isHiddenWithinTree( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + } ); + } +} ); +var rcheckableType = ( /^(?:checkbox|radio)$/i ); + +var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); + +var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); + + + +( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0 - 4.3 only + // Check state lost if the name is set (#11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Android <=4.1 only + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE <=11 only + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; + + // Support: IE <=9 only + // IE <=9 replaces "; + support.option = !!div.lastChild; +} )(); + + +// We have to close these tags to support XHTML (#13200) +var wrapMap = { + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting or other required elements. + thead: [ 1, "", "
" ], + col: [ 2, "", "
" ], + tr: [ 2, "", "
" ], + td: [ 3, "", "
" ], + + _default: [ 0, "", "" ] +}; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// Support: IE <=9 only +if ( !support.option ) { + wrapMap.optgroup = wrapMap.option = [ 1, "" ]; +} + + +function getAll( context, tag ) { + + // Support: IE <=9 - 11 only + // Use typeof to avoid zero-argument method invocation on host objects (#15151) + var ret; + + if ( typeof context.getElementsByTagName !== "undefined" ) { + ret = context.getElementsByTagName( tag || "*" ); + + } else if ( typeof context.querySelectorAll !== "undefined" ) { + ret = context.querySelectorAll( tag || "*" ); + + } else { + ret = []; + } + + if ( tag === undefined || tag && nodeName( context, tag ) ) { + return jQuery.merge( [ context ], ret ); + } + + return ret; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/; + +function buildFragment( elems, context, scripts, selection, ignored ) { + var elem, tmp, tag, wrap, attached, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( toType( elem ) === "object" ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (#12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + continue; + } + + attached = isAttached( elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( attached ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; +} + + +var + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +// Support: IE <=9 - 11+ +// focus() and blur() are asynchronous, except when they are no-op. +// So expect focus to be synchronous when the element is already active, +// and blur to be synchronous when the element is not already active. +// (focus and blur are always synchronous in other supported browsers, +// this just defines when we can count on it). +function expectSync( elem, type ) { + return ( elem === safeActiveElement() ) === ( type === "focus" ); +} + +// Support: IE <=9 only +// Accessing document.activeElement can throw unexpectedly +// https://bugs.jquery.com/ticket/13393 +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.get( elem ); + + // Only attach events to objects that accept data + if ( !acceptData( elem ) ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Ensure that invalid selectors throw exceptions at attach time + // Evaluate against documentElement in case elem is a non-element node (e.g., document) + if ( selector ) { + jQuery.find.matchesSelector( documentElement, selector ); + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = Object.create( null ); + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = function( e ) { + + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend( { + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( nativeEvent ) { + + var i, j, ret, matched, handleObj, handlerQueue, + args = new Array( arguments.length ), + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( nativeEvent ), + + handlers = ( + dataPriv.get( this, "events" ) || Object.create( null ) + )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[ 0 ] = event; + + for ( i = 1; i < arguments.length; i++ ) { + args[ i ] = arguments[ i ]; + } + + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // If the event is namespaced, then each handler is only invoked if it is + // specially universal or its namespaces are a superset of the event's. + if ( !event.rnamespace || handleObj.namespace === false || + event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, handleObj, sel, matchedHandlers, matchedSelectors, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + if ( delegateCount && + + // Support: IE <=9 + // Black-hole SVG instance trees (trac-13180) + cur.nodeType && + + // Support: Firefox <=42 + // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) + // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click + // Support: IE 11 only + // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) + !( event.type === "click" && event.button >= 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { + matchedHandlers = []; + matchedSelectors = {}; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matchedSelectors[ sel ] === undefined ) { + matchedSelectors[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matchedSelectors[ sel ] ) { + matchedHandlers.push( handleObj ); + } + } + if ( matchedHandlers.length ) { + handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + cur = this; + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + addProp: function( name, hook ) { + Object.defineProperty( jQuery.Event.prototype, name, { + enumerable: true, + configurable: true, + + get: isFunction( hook ) ? + function() { + if ( this.originalEvent ) { + return hook( this.originalEvent ); + } + } : + function() { + if ( this.originalEvent ) { + return this.originalEvent[ name ]; + } + }, + + set: function( value ) { + Object.defineProperty( this, name, { + enumerable: true, + configurable: true, + writable: true, + value: value + } ); + } + } ); + }, + + fix: function( originalEvent ) { + return originalEvent[ jQuery.expando ] ? + originalEvent : + new jQuery.Event( originalEvent ); + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + click: { + + // Utilize native event to ensure correct state for checkable inputs + setup: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Claim the first handler + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + // dataPriv.set( el, "click", ... ) + leverageNative( el, "click", returnTrue ); + } + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Force setup before triggering a click + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + leverageNative( el, "click" ); + } + + // Return non-false to allow normal event-path propagation + return true; + }, + + // For cross-browser consistency, suppress native .click() on links + // Also prevent it if we're currently inside a leveraged native-event stack + _default: function( event ) { + var target = event.target; + return rcheckableType.test( target.type ) && + target.click && nodeName( target, "input" ) && + dataPriv.get( target, "click" ) || + nodeName( target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + } +}; + +// Ensure the presence of an event listener that handles manually-triggered +// synthetic events by interrupting progress until reinvoked in response to +// *native* events that it fires directly, ensuring that state changes have +// already occurred before other listeners are invoked. +function leverageNative( el, type, expectSync ) { + + // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add + if ( !expectSync ) { + if ( dataPriv.get( el, type ) === undefined ) { + jQuery.event.add( el, type, returnTrue ); + } + return; + } + + // Register the controller as a special universal handler for all event namespaces + dataPriv.set( el, type, false ); + jQuery.event.add( el, type, { + namespace: false, + handler: function( event ) { + var notAsync, result, + saved = dataPriv.get( this, type ); + + if ( ( event.isTrigger & 1 ) && this[ type ] ) { + + // Interrupt processing of the outer synthetic .trigger()ed event + // Saved data should be false in such cases, but might be a leftover capture object + // from an async native handler (gh-4350) + if ( !saved.length ) { + + // Store arguments for use when handling the inner native event + // There will always be at least one argument (an event object), so this array + // will not be confused with a leftover capture object. + saved = slice.call( arguments ); + dataPriv.set( this, type, saved ); + + // Trigger the native event and capture its result + // Support: IE <=9 - 11+ + // focus() and blur() are asynchronous + notAsync = expectSync( this, type ); + this[ type ](); + result = dataPriv.get( this, type ); + if ( saved !== result || notAsync ) { + dataPriv.set( this, type, false ); + } else { + result = {}; + } + if ( saved !== result ) { + + // Cancel the outer synthetic event + event.stopImmediatePropagation(); + event.preventDefault(); + return result.value; + } + + // If this is an inner synthetic event for an event with a bubbling surrogate + // (focus or blur), assume that the surrogate already propagated from triggering the + // native event and prevent that from happening again here. + // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the + // bubbling surrogate propagates *after* the non-bubbling base), but that seems + // less bad than duplication. + } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { + event.stopPropagation(); + } + + // If this is a native event triggered above, everything is now in order + // Fire an inner synthetic event with the original arguments + } else if ( saved.length ) { + + // ...and capture the result + dataPriv.set( this, type, { + value: jQuery.event.trigger( + + // Support: IE <=9 - 11+ + // Extend with the prototype to reset the above stopImmediatePropagation() + jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), + saved.slice( 1 ), + this + ) + } ); + + // Abort handling of the native event + event.stopImmediatePropagation(); + } + } + } ); +} + +jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } +}; + +jQuery.Event = function( src, props ) { + + // Allow instantiation without the 'new' keyword + if ( !( this instanceof jQuery.Event ) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + + // Support: Android <=2.3 only + src.returnValue === false ? + returnTrue : + returnFalse; + + // Create target properties + // Support: Safari <=6 - 7 only + // Target should not be a text node (#504, #13143) + this.target = ( src.target && src.target.nodeType === 3 ) ? + src.target.parentNode : + src.target; + + this.currentTarget = src.currentTarget; + this.relatedTarget = src.relatedTarget; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || Date.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + isSimulated: false, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && !this.isSimulated ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Includes all common event props including KeyEvent and MouseEvent specific props +jQuery.each( { + altKey: true, + bubbles: true, + cancelable: true, + changedTouches: true, + ctrlKey: true, + detail: true, + eventPhase: true, + metaKey: true, + pageX: true, + pageY: true, + shiftKey: true, + view: true, + "char": true, + code: true, + charCode: true, + key: true, + keyCode: true, + button: true, + buttons: true, + clientX: true, + clientY: true, + offsetX: true, + offsetY: true, + pointerId: true, + pointerType: true, + screenX: true, + screenY: true, + targetTouches: true, + toElement: true, + touches: true, + + which: function( event ) { + var button = event.button; + + // Add which for key events + if ( event.which == null && rkeyEvent.test( event.type ) ) { + return event.charCode != null ? event.charCode : event.keyCode; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { + if ( button & 1 ) { + return 1; + } + + if ( button & 2 ) { + return 3; + } + + if ( button & 4 ) { + return 2; + } + + return 0; + } + + return event.which; + } +}, jQuery.event.addProp ); + +jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { + jQuery.event.special[ type ] = { + + // Utilize native event if possible so blur/focus sequence is correct + setup: function() { + + // Claim the first handler + // dataPriv.set( this, "focus", ... ) + // dataPriv.set( this, "blur", ... ) + leverageNative( this, type, expectSync ); + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function() { + + // Force setup before trigger + leverageNative( this, type ); + + // Return non-false to allow normal event-path propagation + return true; + }, + + delegateType: delegateType + }; +} ); + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +jQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +} ); + +jQuery.fn.extend( { + + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each( function() { + jQuery.event.remove( this, types, fn, selector ); + } ); + } +} ); + + +var + + // Support: IE <=10 - 11, Edge 12 - 13 only + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /\s*$/g; + +// Prefer a tbody over its parent table for containing new rows +function manipulationTarget( elem, content ) { + if ( nodeName( elem, "table" ) && + nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { + + return jQuery( elem ).children( "tbody" )[ 0 ] || elem; + } + + return elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { + elem.type = elem.type.slice( 5 ); + } else { + elem.removeAttribute( "type" ); + } + + return elem; +} + +function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.get( src ); + events = pdataOld.events; + + if ( events ) { + dataPriv.remove( dest, "handle events" ); + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } +} + +// Fix IE bugs, see support tests +function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = flat( args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + valueIsFunction = isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( valueIsFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( valueIsFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl && !node.noModule ) { + jQuery._evalUrl( node.src, { + nonce: node.nonce || node.getAttribute( "nonce" ) + }, doc ); + } + } else { + DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); + } + } + } + } + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && isAttached( node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html; + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = isAttached( elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } +} ); + +jQuery.fn.extend( { + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each( function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + } ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +} ); + +jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: Android <=4.0 only, PhantomJS 1 only + // .get() because push.apply(_, arraylike) throws on ancient WebKit + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +} ); +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + +var getStyles = function( elem ) { + + // Support: IE <=11 only, Firefox <=30 (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view || !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + +var swap = function( elem, options, callback ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.call( elem ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; +}; + + +var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); + + + +( function() { + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + + // This is a singleton, we need to execute it only once + if ( !div ) { + return; + } + + container.style.cssText = "position:absolute;left:-11111px;width:60px;" + + "margin-top:1px;padding:0;border:0"; + div.style.cssText = + "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + + "margin:auto;border:1px;padding:1px;" + + "width:60%;top:1%"; + documentElement.appendChild( container ).appendChild( div ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + + // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 + reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; + + // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 + // Some styles come back with percentage values, even though they shouldn't + div.style.right = "60%"; + pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; + + // Support: IE 9 - 11 only + // Detect misreporting of content dimensions for box-sizing:border-box elements + boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; + + // Support: IE 9 only + // Detect overflow:scroll screwiness (gh-3699) + // Support: Chrome <=64 + // Don't get tricked when zoom affects offsetWidth (gh-4029) + div.style.position = "absolute"; + scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; + + documentElement.removeChild( container ); + + // Nullify the div so it wouldn't be stored in the memory and + // it will also be a sign that checks already performed + div = null; + } + + function roundPixelMeasures( measure ) { + return Math.round( parseFloat( measure ) ); + } + + var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, + reliableTrDimensionsVal, reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE <=9 - 11 only + // Style of cloned element affects source element cloned (#8908) + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + jQuery.extend( support, { + boxSizingReliable: function() { + computeStyleTests(); + return boxSizingReliableVal; + }, + pixelBoxStyles: function() { + computeStyleTests(); + return pixelBoxStylesVal; + }, + pixelPosition: function() { + computeStyleTests(); + return pixelPositionVal; + }, + reliableMarginLeft: function() { + computeStyleTests(); + return reliableMarginLeftVal; + }, + scrollboxSize: function() { + computeStyleTests(); + return scrollboxSizeVal; + }, + + // Support: IE 9 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Behavior in IE 9 is more subtle than in newer versions & it passes + // some versions of this test; make sure not to make it pass there! + reliableTrDimensions: function() { + var table, tr, trChild, trStyle; + if ( reliableTrDimensionsVal == null ) { + table = document.createElement( "table" ); + tr = document.createElement( "tr" ); + trChild = document.createElement( "div" ); + + table.style.cssText = "position:absolute;left:-11111px"; + tr.style.height = "1px"; + trChild.style.height = "9px"; + + documentElement + .appendChild( table ) + .appendChild( tr ) + .appendChild( trChild ); + + trStyle = window.getComputedStyle( tr ); + reliableTrDimensionsVal = parseInt( trStyle.height ) > 3; + + documentElement.removeChild( table ); + } + return reliableTrDimensionsVal; + } + } ); +} )(); + + +function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + + // Support: Firefox 51+ + // Retrieving style before computed somehow + // fixes an issue with getting wrong values + // on detached elements + style = elem.style; + + computed = computed || getStyles( elem ); + + // getPropertyValue is needed for: + // .css('filter') (IE 9 only, #12537) + // .css('--customProperty) (#3144) + if ( computed ) { + ret = computed.getPropertyValue( name ) || computed[ name ]; + + if ( ret === "" && !isAttached( elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // https://drafts.csswg.org/cssom/#resolved-values + if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret !== undefined ? + + // Support: IE <=9 - 11 only + // IE returns zIndex value as an integer. + ret + "" : + ret; +} + + +function addGetHookIf( conditionFn, hookFn ) { + + // Define the hook, we'll check on the first run if it's really needed. + return { + get: function() { + if ( conditionFn() ) { + + // Hook not needed (or it's not possible to use it due + // to missing dependency), remove it. + delete this.get; + return; + } + + // Hook needed; redefine it so that the support test is not executed again. + return ( this.get = hookFn ).apply( this, arguments ); + } + }; +} + + +var cssPrefixes = [ "Webkit", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style, + vendorProps = {}; + +// Return a vendor-prefixed property or undefined +function vendorPropName( name ) { + + // Check for vendor prefixed names + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } +} + +// Return a potentially-mapped jQuery.cssProps or vendor prefixed property +function finalPropName( name ) { + var final = jQuery.cssProps[ name ] || vendorProps[ name ]; + + if ( final ) { + return final; + } + if ( name in emptyStyle ) { + return name; + } + return vendorProps[ name ] = vendorPropName( name ) || name; +} + + +var + + // Swappable if display is none or starts with table + // except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rcustomProp = /^--/, + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }; + +function setPositiveNumber( _elem, value, subtract ) { + + // Any relative (+/-) values have already been + // normalized at this point + var matches = rcssNum.exec( value ); + return matches ? + + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : + value; +} + +function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { + var i = dimension === "width" ? 1 : 0, + extra = 0, + delta = 0; + + // Adjustment may not be necessary + if ( box === ( isBorderBox ? "border" : "content" ) ) { + return 0; + } + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin + if ( box === "margin" ) { + delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); + } + + // If we get here with a content-box, we're seeking "padding" or "border" or "margin" + if ( !isBorderBox ) { + + // Add padding + delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // For "border" or "margin", add border + if ( box !== "padding" ) { + delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + + // But still keep track of it otherwise + } else { + extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + + // If we get here with a border-box (content + padding + border), we're seeking "content" or + // "padding" or "margin" + } else { + + // For "content", subtract padding + if ( box === "content" ) { + delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // For "content" or "padding", subtract border + if ( box !== "margin" ) { + delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + // Account for positive content-box scroll gutter when requested by providing computedVal + if ( !isBorderBox && computedVal >= 0 ) { + + // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border + // Assuming integer scroll gutter, subtract the rest and round down + delta += Math.max( 0, Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + computedVal - + delta - + extra - + 0.5 + + // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter + // Use an explicit zero to avoid NaN (gh-3964) + ) ) || 0; + } + + return delta; +} + +function getWidthOrHeight( elem, dimension, extra ) { + + // Start with computed style + var styles = getStyles( elem ), + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). + // Fake content-box until we know it's needed to know the true value. + boxSizingNeeded = !support.boxSizingReliable() || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + valueIsBorderBox = isBorderBox, + + val = curCSS( elem, dimension, styles ), + offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); + + // Support: Firefox <=54 + // Return a confounding non-pixel value or feign ignorance, as appropriate. + if ( rnumnonpx.test( val ) ) { + if ( !extra ) { + return val; + } + val = "auto"; + } + + + // Support: IE 9 - 11 only + // Use offsetWidth/offsetHeight for when box sizing is unreliable. + // In those cases, the computed value can be trusted to be border-box. + if ( ( !support.boxSizingReliable() && isBorderBox || + + // Support: IE 10 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Interestingly, in some cases IE 9 doesn't suffer from this issue. + !support.reliableTrDimensions() && nodeName( elem, "tr" ) || + + // Fall back to offsetWidth/offsetHeight when value is "auto" + // This happens for inline elements with no explicit setting (gh-3571) + val === "auto" || + + // Support: Android <=4.1 - 4.3 only + // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) + !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && + + // Make sure the element is visible & connected + elem.getClientRects().length ) { + + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // Where available, offsetWidth/offsetHeight approximate border box dimensions. + // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the + // retrieved value as a content box dimension. + valueIsBorderBox = offsetProp in elem; + if ( valueIsBorderBox ) { + val = elem[ offsetProp ]; + } + } + + // Normalize "" and auto + val = parseFloat( val ) || 0; + + // Adjust for the element's box model + return ( val + + boxModelAdjustment( + elem, + dimension, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles, + + // Provide the current computed size to request scroll gutter calculation (gh-3589) + val + ) + ) + "px"; +} + +jQuery.extend( { + + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + "animationIterationCount": true, + "columnCount": true, + "fillOpacity": true, + "flexGrow": true, + "flexShrink": true, + "fontWeight": true, + "gridArea": true, + "gridColumn": true, + "gridColumnEnd": true, + "gridColumnStart": true, + "gridRow": true, + "gridRowEnd": true, + "gridRowStart": true, + "lineHeight": true, + "opacity": true, + "order": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: {}, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ), + style = elem.style; + + // Make sure that we're working with the right name. We don't + // want to query the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Gets hook for the prefixed version, then unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // Convert "+=" or "-=" to relative numbers (#7345) + if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + + // Fixes bug #9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set (#7116) + if ( value == null || value !== value ) { + return; + } + + // If a number was passed in, add the unit (except for certain CSS properties) + // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append + // "px" to a few hardcoded values. + if ( type === "number" && !isCustomProp ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // background-* props affect original clone's values + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !( "set" in hooks ) || + ( value = hooks.set( elem, value, extra ) ) !== undefined ) { + + if ( isCustomProp ) { + style.setProperty( name, value ); + } else { + style[ name ] = value; + } + } + + } else { + + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && + ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { + + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var val, num, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ); + + // Make sure that we're working with the right name. We don't + // want to modify the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Try prefixed name followed by the unprefixed name + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + // Convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Make numeric if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || isFinite( num ) ? num || 0 : val; + } + + return val; + } +} ); + +jQuery.each( [ "height", "width" ], function( _i, dimension ) { + jQuery.cssHooks[ dimension ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + + // Certain elements can have dimension info if we invisibly show them + // but it must have a current display style that would benefit + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && + + // Support: Safari 8+ + // Table columns in Safari have non-zero offsetWidth & zero + // getBoundingClientRect().width unless display is changed. + // Support: IE <=11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, dimension, extra ); + } ) : + getWidthOrHeight( elem, dimension, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = getStyles( elem ), + + // Only read styles.position if the test has a chance to fail + // to avoid forcing a reflow. + scrollboxSizeBuggy = !support.scrollboxSize() && + styles.position === "absolute", + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) + boxSizingNeeded = scrollboxSizeBuggy || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + subtract = extra ? + boxModelAdjustment( + elem, + dimension, + extra, + isBorderBox, + styles + ) : + 0; + + // Account for unreliable border-box dimensions by comparing offset* to computed and + // faking a content-box to get border and padding (gh-3699) + if ( isBorderBox && scrollboxSizeBuggy ) { + subtract -= Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + parseFloat( styles[ dimension ] ) - + boxModelAdjustment( elem, dimension, "border", false, styles ) - + 0.5 + ); + } + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ dimension ] = value; + value = jQuery.css( elem, dimension ); + } + + return setPositiveNumber( elem, value, subtract ); + } + }; +} ); + +jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, + function( elem, computed ) { + if ( computed ) { + return ( parseFloat( curCSS( elem, "marginLeft" ) ) || + elem.getBoundingClientRect().left - + swap( elem, { marginLeft: 0 }, function() { + return elem.getBoundingClientRect().left; + } ) + ) + "px"; + } + } +); + +// These hooks are used by animate to expand properties +jQuery.each( { + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // Assumes a single number if not a string + parts = typeof value === "string" ? value.split( " " ) : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( prefix !== "margin" ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } +} ); + +jQuery.fn.extend( { + css: function( name, value ) { + return access( this, function( elem, name, value ) { + var styles, len, + map = {}, + i = 0; + + if ( Array.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + } +} ); + + +function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); +} +jQuery.Tween = Tween; + +Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || jQuery.easing._default; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } +}; + +Tween.prototype.init.prototype = Tween.prototype; + +Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { + return tween.elem[ tween.prop ]; + } + + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); + + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.nodeType === 1 && ( + jQuery.cssHooks[ tween.prop ] || + tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; + +// Support: IE <=9 only +// Panic based approach to setting things on disconnected nodes +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } +}; + +jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p * Math.PI ) / 2; + }, + _default: "swing" +}; + +jQuery.fx = Tween.prototype.init; + +// Back compat <1.8 extension point +jQuery.fx.step = {}; + + + + +var + fxNow, inProgress, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + +function schedule() { + if ( inProgress ) { + if ( document.hidden === false && window.requestAnimationFrame ) { + window.requestAnimationFrame( schedule ); + } else { + window.setTimeout( schedule, jQuery.fx.interval ); + } + + jQuery.fx.tick(); + } +} + +// Animations created synchronously will run synchronously +function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = Date.now() ); +} + +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + includeWidth = includeWidth ? 1 : 0; + for ( ; i < 4; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; +} + +function createTween( value, prop, animation ) { + var tween, + collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { + + // We're done with this property + return tween; + } + } +} + +function defaultPrefilter( elem, props, opts ) { + var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, + isBox = "width" in props || "height" in props, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHiddenWithinTree( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Queue-skipping animations hijack the fx hooks + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always( function() { + + // Ensure the complete handler is called before this completes + anim.always( function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + } ); + } ); + } + + // Detect show/hide animations + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.test( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // Pretend to be hidden if this is a "show" and + // there is still data from a stopped show/hide + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + + // Ignore all other no-op show/hide data + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + } + } + + // Bail out if this is a no-op like .hide().hide() + propTween = !jQuery.isEmptyObject( props ); + if ( !propTween && jQuery.isEmptyObject( orig ) ) { + return; + } + + // Restrict "overflow" and "display" styles during box animations + if ( isBox && elem.nodeType === 1 ) { + + // Support: IE <=9 - 11, Edge 12 - 15 + // Record all 3 overflow attributes because IE does not infer the shorthand + // from identically-valued overflowX and overflowY and Edge just mirrors + // the overflowX value there. + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Identify a display type, preferring old show/hide data over the CSS cascade + restoreDisplay = dataShow && dataShow.display; + if ( restoreDisplay == null ) { + restoreDisplay = dataPriv.get( elem, "display" ); + } + display = jQuery.css( elem, "display" ); + if ( display === "none" ) { + if ( restoreDisplay ) { + display = restoreDisplay; + } else { + + // Get nonempty value(s) by temporarily forcing visibility + showHide( [ elem ], true ); + restoreDisplay = elem.style.display || restoreDisplay; + display = jQuery.css( elem, "display" ); + showHide( [ elem ] ); + } + } + + // Animate inline elements as inline-block + if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { + if ( jQuery.css( elem, "float" ) === "none" ) { + + // Restore the original display value at the end of pure show/hide animations + if ( !propTween ) { + anim.done( function() { + style.display = restoreDisplay; + } ); + if ( restoreDisplay == null ) { + display = style.display; + restoreDisplay = display === "none" ? "" : display; + } + } + style.display = "inline-block"; + } + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always( function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + } ); + } + + // Implement show/hide animations + propTween = false; + for ( prop in orig ) { + + // General show/hide setup for this element animation + if ( !propTween ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); + } + + // Store hidden/visible for toggle so `.stop().toggle()` "reverses" + if ( toggle ) { + dataShow.hidden = !hidden; + } + + // Show elements before animating them + if ( hidden ) { + showHide( [ elem ], true ); + } + + /* eslint-disable no-loop-func */ + + anim.done( function() { + + /* eslint-enable no-loop-func */ + + // The final step of a "hide" animation is actually hiding the element + if ( !hidden ) { + showHide( [ elem ] ); + } + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + } + + // Per-property setup + propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = propTween.start; + if ( hidden ) { + propTween.end = propTween.start; + propTween.start = 0; + } + } + } +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( Array.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } +} + +function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = Animation.prefilters.length, + deferred = jQuery.Deferred().always( function() { + + // Don't match elem in the :animated selector + delete tick.elem; + } ), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + + // Support: Android 2.3 only + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ] ); + + // If there's more to do, yield + if ( percent < 1 && length ) { + return remaining; + } + + // If this was an empty animation, synthesize a final progress notification + if ( !length ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + } + + // Resolve the animation and report its conclusion + deferred.resolveWith( elem, [ animation ] ); + return false; + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // Resolve when we played the last frame; otherwise, reject + if ( gotoEnd ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + } ), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length; index++ ) { + result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + result.stop.bind( result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + // Attach callbacks from options + animation + .progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + return animation; +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnothtmlwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } +} ); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !isFunction( easing ) && easing + }; + + // Go to the end state if fx are off + if ( jQuery.fx.off ) { + opt.duration = 0; + + } else { + if ( typeof opt.duration !== "number" ) { + if ( opt.duration in jQuery.fx.speeds ) { + opt.duration = jQuery.fx.speeds[ opt.duration ]; + + } else { + opt.duration = jQuery.fx.speeds._default; + } + } + } + + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; +}; + +jQuery.fn.extend( { + fadeTo: function( speed, to, easing, callback ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() + + // Animate to the value specified + .end().animate( { opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || dataPriv.get( this, "finish" ) ) { + anim.stop( true ); + } + }; + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue ) { + this.queue( type || "fx", [] ); + } + + return this.each( function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = dataPriv.get( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && + ( type == null || timers[ index ].queue === type ) ) { + + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + } ); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each( function() { + var index, + data = dataPriv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + delete data.finish; + } ); + } +} ); + +jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; +} ); + +// Generate shortcuts for custom animations +jQuery.each( { + slideDown: genFx( "show" ), + slideUp: genFx( "hide" ), + slideToggle: genFx( "toggle" ), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } +}, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; +} ); + +jQuery.timers = []; +jQuery.fx.tick = function() { + var timer, + i = 0, + timers = jQuery.timers; + + fxNow = Date.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + + // Run the timer and safely remove it when done (allowing for external removal) + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; +}; + +jQuery.fx.timer = function( timer ) { + jQuery.timers.push( timer ); + jQuery.fx.start(); +}; + +jQuery.fx.interval = 13; +jQuery.fx.start = function() { + if ( inProgress ) { + return; + } + + inProgress = true; + schedule(); +}; + +jQuery.fx.stop = function() { + inProgress = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 +}; + + +// Based off of the plugin by Clint Helfers, with permission. +// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ +jQuery.fn.delay = function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); +}; + + +( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: Android <=4.3 only + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE <=11 only + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: IE <=11 only + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; +} )(); + + +var boolHook, + attrHandle = jQuery.expr.attrHandle; + +jQuery.fn.extend( { + attr: function( name, value ) { + return access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each( function() { + jQuery.removeAttr( this, name ); + } ); + } +} ); + +jQuery.extend( { + attr: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // Attribute hooks are determined by the lowercase version + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + hooks = jQuery.attrHooks[ name.toLowerCase() ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, + i = 0, + + // Attribute names can contain non-HTML whitespace characters + // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 + attrNames = value && value.match( rnothtmlwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + elem.removeAttribute( name ); + } + } + } +} ); + +// Hooks for boolean attributes +boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } +}; + +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle, + lowercaseName = name.toLowerCase(); + + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ lowercaseName ]; + attrHandle[ lowercaseName ] = ret; + ret = getter( elem, name, isXML ) != null ? + lowercaseName : + null; + attrHandle[ lowercaseName ] = handle; + } + return ret; + }; +} ); + + + + +var rfocusable = /^(?:input|select|textarea|button)$/i, + rclickable = /^(?:a|area)$/i; + +jQuery.fn.extend( { + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } +} ); + +jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // Support: IE <=9 - 11 only + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + // Use proper attribute retrieval(#12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + if ( tabindex ) { + return parseInt( tabindex, 10 ); + } + + if ( + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && + elem.href + ) { + return 0; + } + + return -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } +} ); + +// Support: IE <=11 only +// Accessing the selectedIndex property +// forces the browser to respect setting selected +// on the option +// The getter ensures a default option is selected +// when in an optgroup +// eslint rule "no-unused-expressions" is disabled for this code +// since it considers such accessions noop +if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; +} + +jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +} ); + + + + + // Strip and collapse whitespace according to HTML spec + // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace + function stripAndCollapse( value ) { + var tokens = value.match( rnothtmlwhite ) || []; + return tokens.join( " " ); + } + + +function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; +} + +function classesToArray( value ) { + if ( Array.isArray( value ) ) { + return value; + } + if ( typeof value === "string" ) { + return value.match( rnothtmlwhite ) || []; + } + return []; +} + +jQuery.fn.extend( { + addClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) > -1 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isValidValue = type === "string" || Array.isArray( value ); + + if ( typeof stateVal === "boolean" && isValidValue ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + return this.each( function() { + var className, i, self, classNames; + + if ( isValidValue ) { + + // Toggle individual class names + i = 0; + self = jQuery( this ); + classNames = classesToArray( value ); + + while ( ( className = classNames[ i++ ] ) ) { + + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { + return true; + } + } + + return false; + } +} ); + + + + +var rreturn = /\r/g; + +jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, valueIsFunction, + elem = this[ 0 ]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || + jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && + "get" in hooks && + ( ret = hooks.get( elem, "value" ) ) !== undefined + ) { + return ret; + } + + ret = elem.value; + + // Handle most common string cases + if ( typeof ret === "string" ) { + return ret.replace( rreturn, "" ); + } + + // Handle cases where value is null/undef or number + return ret == null ? "" : ret; + } + + return; + } + + valueIsFunction = isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( valueIsFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + + } else if ( typeof val === "number" ) { + val += ""; + + } else if ( Array.isArray( val ) ) { + val = jQuery.map( val, function( value ) { + return value == null ? "" : value + ""; + } ); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + } ); + } +} ); + +jQuery.extend( { + valHooks: { + option: { + get: function( elem ) { + + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + + // Support: IE <=10 - 11 only + // option.text throws exceptions (#14686, #14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + stripAndCollapse( jQuery.text( elem ) ); + } + }, + select: { + get: function( elem ) { + var value, option, i, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one", + values = one ? null : [], + max = one ? index + 1 : options.length; + + if ( index < 0 ) { + i = max; + + } else { + i = one ? index : 0; + } + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Support: IE <=9 only + // IE8-9 doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + + // Don't return options that are disabled or in a disabled optgroup + !option.disabled && + ( !option.parentNode.disabled || + !nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + + /* eslint-disable no-cond-assign */ + + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + + /* eslint-enable no-cond-assign */ + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } +} ); + +// Radios and checkboxes getter/setter +jQuery.each( [ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( Array.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } +} ); + + + + +// Return jQuery for attributes-only inclusion + + +support.focusin = "onfocusin" in window; + + +var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + stopPropagationCallback = function( e ) { + e.stopPropagation(); + }; + +jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = lastElement = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "." ) > -1 ) { + + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split( "." ); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf( ":" ) < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === ( elem.ownerDocument || document ) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { + lastElement = cur; + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( + dataPriv.get( cur, "events" ) || Object.create( null ) + )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( ( !special._default || + special._default.apply( eventPath.pop(), data ) === false ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + + if ( event.isPropagationStopped() ) { + lastElement.addEventListener( type, stopPropagationCallback ); + } + + elem[ type ](); + + if ( event.isPropagationStopped() ) { + lastElement.removeEventListener( type, stopPropagationCallback ); + } + + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + // Used only for `focus(in | out)` events + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + } + ); + + jQuery.event.trigger( e, null, elem ); + } + +} ); + +jQuery.fn.extend( { + + trigger: function( type, data ) { + return this.each( function() { + jQuery.event.trigger( type, data, this ); + } ); + }, + triggerHandler: function( type, data ) { + var elem = this[ 0 ]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +} ); + + +// Support: Firefox <=44 +// Firefox doesn't have focus(in | out) events +// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 +// +// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 +// focus(in | out) events fire after focus & blur events, +// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order +// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 +if ( !support.focusin ) { + jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + + // Handle: regular nodes (via `this.ownerDocument`), window + // (via `this.document`) & document (via `this`). + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + dataPriv.remove( doc, fix ); + + } else { + dataPriv.access( doc, fix, attaches ); + } + } + }; + } ); +} +var location = window.location; + +var nonce = { guid: Date.now() }; + +var rquery = ( /\?/ ); + + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE 9 - 11 only + // IE throws on parseFromString with invalid input. + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) { + xml = undefined; + } + + if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; +}; + + +var + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + +function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( Array.isArray( obj ) ) { + + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + + // Item is non-scalar (array or object), encode its numeric index. + buildParams( + prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && toType( obj ) === "object" ) { + + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + + // Serialize scalar item. + add( prefix, obj ); + } +} + +// Serialize an array of form elements or a set of +// key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, valueOrFunction ) { + + // If value is a function, invoke it and use its return value + var value = isFunction( valueOrFunction ) ? + valueOrFunction() : + valueOrFunction; + + s[ s.length ] = encodeURIComponent( key ) + "=" + + encodeURIComponent( value == null ? "" : value ); + }; + + if ( a == null ) { + return ""; + } + + // If an array was passed in, assume that it is an array of form elements. + if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + } ); + + } else { + + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ); +}; + +jQuery.fn.extend( { + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map( function() { + + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + } ) + .filter( function() { + var type = this.type; + + // Use .is( ":disabled" ) so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !rcheckableType.test( type ) ); + } ) + .map( function( _i, elem ) { + var val = jQuery( this ).val(); + + if ( val == null ) { + return null; + } + + if ( Array.isArray( val ) ) { + return jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ); + } + + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } +} ); + + +var + r20 = /%20/g, + rhash = /#.*$/, + rantiCache = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + originAnchor.href = location.href; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; + + if ( isFunction( func ) ) { + + // For each dataType in the dataTypeExpression + while ( ( dataType = dataTypes[ i++ ] ) ) { + + // Prepend if requested + if ( dataType[ 0 ] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); + + // Otherwise append + } else { + ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); + } + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if ( typeof dataTypeOrTransport === "string" && + !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + } ); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes #9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; +} + +/* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} + +/* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ +function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s.throws ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { + state: "parsererror", + error: conv ? e : "No conversion from " + prev + " to " + current + }; + } + } + } + } + } + } + + return { state: "success", data: response }; +} + +jQuery.extend( { + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": JSON.parse, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var transport, + + // URL without anti-cache param + cacheURL, + + // Response headers + responseHeadersString, + responseHeaders, + + // timeout handle + timeoutTimer, + + // Url cleanup var + urlAnchor, + + // Request state (becomes false upon send and true upon completion) + completed, + + // To know if global events are to be dispatched + fireGlobals, + + // Loop variable + i, + + // uncached part of the url + uncached, + + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + + // Callbacks context + callbackContext = s.context || s, + + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && + ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + + // Status-dependent callbacks + statusCode = s.statusCode || {}, + + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + + // Default abort message + strAbort = "canceled", + + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( completed ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[ 1 ].toLowerCase() + " " ] = + ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) + .concat( match[ 2 ] ); + } + } + match = responseHeaders[ key.toLowerCase() + " " ]; + } + return match == null ? null : match.join( ", " ); + }, + + // Raw string + getAllResponseHeaders: function() { + return completed ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( completed == null ) { + name = requestHeadersNames[ name.toLowerCase() ] = + requestHeadersNames[ name.toLowerCase() ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( completed == null ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( completed ) { + + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } else { + + // Lazy-add the new callbacks in a way that preserves old ones + for ( code in map ) { + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ); + + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (#10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || location.href ) + "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE <=8 - 11, Edge 12 - 15 + // IE throws exception on accessing the href property if url is malformed, + // e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE <=8 - 11 only + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( completed ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) + fireGlobals = jQuery.event && s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + // Remove hash to simplify url manipulation + cacheURL = s.url.replace( rhash, "" ); + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // Remember the hash so we can put it back + uncached = s.url.slice( cacheURL.length ); + + // If data is available and should be processed, append data to url + if ( s.data && ( s.processData || typeof s.data === "string" ) ) { + cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; + + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add or update anti-cache param if needed + if ( s.cache === false ) { + cacheURL = cacheURL.replace( rantiCache, "$1" ); + uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + + uncached; + } + + // Put hash and anti-cache on the URL that will be requested (gh-1732) + s.url = cacheURL + uncached; + + // Change '%20' to '+' if this is encoded form body content (gh-2658) + } else if ( s.data && s.processData && + ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { + s.data = s.data.replace( r20, "+" ); + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? + s.accepts[ s.dataTypes[ 0 ] ] + + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && + ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + completeDeferred.add( s.complete ); + jqXHR.done( s.success ); + jqXHR.fail( s.error ); + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( completed ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + completed = false; + transport.send( requestHeaders, done ); + } catch ( e ) { + + // Rethrow post-completion exceptions + if ( completed ) { + throw e; + } + + // Propagate others as results + done( -1, e ); + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Ignore repeat invocations + if ( completed ) { + return; + } + + completed = true; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // Use a noop converter for missing script + if ( !isSuccess && jQuery.inArray( "script", s.dataTypes ) > -1 ) { + s.converters[ "text script" ] = function() {}; + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader( "Last-Modified" ); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader( "etag" ); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + return jqXHR; + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } +} ); + +jQuery.each( [ "get", "post" ], function( _i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + + // Shift arguments if data argument was omitted + if ( isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; +} ); + +jQuery.ajaxPrefilter( function( s ) { + var i; + for ( i in s.headers ) { + if ( i.toLowerCase() === "content-type" ) { + s.contentType = s.headers[ i ] || ""; + } + } +} ); + + +jQuery._evalUrl = function( url, options, doc ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (#11264) + type: "GET", + dataType: "script", + cache: true, + async: false, + global: false, + + // Only evaluate the response if it is successful (gh-4126) + // dataFilter is not invoked for failure responses, so using it instead + // of the default converter is kludgy but it works. + converters: { + "text script": function() {} + }, + dataFilter: function( response ) { + jQuery.globalEval( response, options, doc ); + } + } ); +}; + + +jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( this[ 0 ] ) { + if ( isFunction( html ) ) { + html = html.call( this[ 0 ] ); + } + + // The elements to wrap the target around + wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); + + if ( this[ 0 ].parentNode ) { + wrap.insertBefore( this[ 0 ] ); + } + + wrap.map( function() { + var elem = this; + + while ( elem.firstElementChild ) { + elem = elem.firstElementChild; + } + + return elem; + } ).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapInner( html.call( this, i ) ); + } ); + } + + return this.each( function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + } ); + }, + + wrap: function( html ) { + var htmlIsFunction = isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); + } ); + }, + + unwrap: function( selector ) { + this.parent( selector ).not( "body" ).each( function() { + jQuery( this ).replaceWith( this.childNodes ); + } ); + return this; + } +} ); + + +jQuery.expr.pseudos.hidden = function( elem ) { + return !jQuery.expr.pseudos.visible( elem ); +}; +jQuery.expr.pseudos.visible = function( elem ) { + return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); +}; + + + + +jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} +}; + +var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE <=9 only + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +support.ajax = xhrSupported = !!xhrSupported; + +jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + xhr.open( + options.type, + options.url, + options.async, + options.username, + options.password + ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.ontimeout = + xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE <=9 only + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE <=9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); + + // Support: IE 9 only + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = callback( "abort" ); + + try { + + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + + // #14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +} ); + + + + +// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) +jQuery.ajaxPrefilter( function( s ) { + if ( s.crossDomain ) { + s.contents.script = false; + } +} ); + +// Install script dataType +jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +} ); + +// Handle cache's special case and crossDomain +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } +} ); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function( s ) { + + // This transport only deals with cross domain or forced-by-attrs requests + if ( s.crossDomain || s.scriptAttrs ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery( "\r\n"; + +// inject VBScript +document.write(IEBinaryToArray_ByteStr_Script); + +global.JSZipUtils._getBinaryFromXHR = function (xhr) { + var binary = xhr.responseBody; + var byteMapping = {}; + for ( var i = 0; i < 256; i++ ) { + for ( var j = 0; j < 256; j++ ) { + byteMapping[ String.fromCharCode( i + (j << 8) ) ] = + String.fromCharCode(i) + String.fromCharCode(j); + } + } + var rawBytes = IEBinaryToArray_ByteStr(binary); + var lastChr = IEBinaryToArray_ByteStr_Last(binary); + return rawBytes.replace(/[\s\S]/g, function( match ) { + return byteMapping[match]; + }) + lastChr; +}; + +// enforcing Stuk's coding style +// vim: set shiftwidth=4 softtabstop=4: + +},{}]},{},[1]) +; diff --git a/doc/1.5.5/guacamole-common/jquery/jszip-utils/dist/jszip-utils-ie.min.js b/doc/1.5.5/guacamole-common/jquery/jszip-utils/dist/jszip-utils-ie.min.js new file mode 100644 index 000000000..93d8bc8ef --- /dev/null +++ b/doc/1.5.5/guacamole-common/jquery/jszip-utils/dist/jszip-utils-ie.min.js @@ -0,0 +1,10 @@ +/*! + +JSZipUtils - A collection of cross-browser utilities to go along with JSZip. + + +(c) 2014 Stuart Knightley, David Duponchel +Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip-utils/master/LICENSE.markdown. + +*/ +!function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);throw new Error("Cannot find module '"+g+"'")}var j=c[g]={exports:{}};b[g][0].call(j.exports,function(a){var c=b[g][1][a];return e(c?c:a)},j,j.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g\r\n";document.write(b),a.JSZipUtils._getBinaryFromXHR=function(a){for(var b=a.responseBody,c={},d=0;256>d;d++)for(var e=0;256>e;e++)c[String.fromCharCode(d+(e<<8))]=String.fromCharCode(d)+String.fromCharCode(e);var f=IEBinaryToArray_ByteStr(b),g=IEBinaryToArray_ByteStr_Last(b);return f.replace(/[\s\S]/g,function(a){return c[a]})+g}},{}]},{},[1]); diff --git a/doc/1.5.5/guacamole-common/jquery/jszip-utils/dist/jszip-utils.js b/doc/1.5.5/guacamole-common/jquery/jszip-utils/dist/jszip-utils.js new file mode 100644 index 000000000..775895ec9 --- /dev/null +++ b/doc/1.5.5/guacamole-common/jquery/jszip-utils/dist/jszip-utils.js @@ -0,0 +1,118 @@ +/*! + +JSZipUtils - A collection of cross-browser utilities to go along with JSZip. + + +(c) 2014 Stuart Knightley, David Duponchel +Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip-utils/master/LICENSE.markdown. + +*/ +!function(e){"object"==typeof exports?module.exports=e():"function"==typeof define&&define.amd?define(e):"undefined"!=typeof window?window.JSZipUtils=e():"undefined"!=typeof global?global.JSZipUtils=e():"undefined"!=typeof self&&(self.JSZipUtils=e())}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o + +(c) 2014 Stuart Knightley, David Duponchel +Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip-utils/master/LICENSE.markdown. + +*/ +!function(a){"object"==typeof exports?module.exports=a():"function"==typeof define&&define.amd?define(a):"undefined"!=typeof window?window.JSZipUtils=a():"undefined"!=typeof global?global.JSZipUtils=a():"undefined"!=typeof self&&(self.JSZipUtils=a())}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);throw new Error("Cannot find module '"+g+"'")}var j=c[g]={exports:{}};b[g][0].call(j.exports,function(a){var c=b[g][1][a];return e(c?c:a)},j,j.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g + +(c) 2009-2016 Stuart Knightley +Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/master/LICENSE.markdown. + +JSZip uses the library pako released under the MIT license : +https://github.com/nodeca/pako/blob/master/LICENSE +*/ + +(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.JSZip = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o> 2; + enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); + enc3 = remainingBytes > 1 ? (((chr2 & 15) << 2) | (chr3 >> 6)) : 64; + enc4 = remainingBytes > 2 ? (chr3 & 63) : 64; + + output.push(_keyStr.charAt(enc1) + _keyStr.charAt(enc2) + _keyStr.charAt(enc3) + _keyStr.charAt(enc4)); + + } + + return output.join(""); +}; + +// public method for decoding +exports.decode = function(input) { + var chr1, chr2, chr3; + var enc1, enc2, enc3, enc4; + var i = 0, resultIndex = 0; + + var dataUrlPrefix = "data:"; + + if (input.substr(0, dataUrlPrefix.length) === dataUrlPrefix) { + // This is a common error: people give a data url + // (data:image/png;base64,iVBOR...) with a {base64: true} and + // wonders why things don't work. + // We can detect that the string input looks like a data url but we + // *can't* be sure it is one: removing everything up to the comma would + // be too dangerous. + throw new Error("Invalid base64 input, it looks like a data url."); + } + + input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); + + var totalLength = input.length * 3 / 4; + if(input.charAt(input.length - 1) === _keyStr.charAt(64)) { + totalLength--; + } + if(input.charAt(input.length - 2) === _keyStr.charAt(64)) { + totalLength--; + } + if (totalLength % 1 !== 0) { + // totalLength is not an integer, the length does not match a valid + // base64 content. That can happen if: + // - the input is not a base64 content + // - the input is *almost* a base64 content, with a extra chars at the + // beginning or at the end + // - the input uses a base64 variant (base64url for example) + throw new Error("Invalid base64 input, bad content length."); + } + var output; + if (support.uint8array) { + output = new Uint8Array(totalLength|0); + } else { + output = new Array(totalLength|0); + } + + while (i < input.length) { + + enc1 = _keyStr.indexOf(input.charAt(i++)); + enc2 = _keyStr.indexOf(input.charAt(i++)); + enc3 = _keyStr.indexOf(input.charAt(i++)); + enc4 = _keyStr.indexOf(input.charAt(i++)); + + chr1 = (enc1 << 2) | (enc2 >> 4); + chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); + chr3 = ((enc3 & 3) << 6) | enc4; + + output[resultIndex++] = chr1; + + if (enc3 !== 64) { + output[resultIndex++] = chr2; + } + if (enc4 !== 64) { + output[resultIndex++] = chr3; + } + + } + + return output; +}; + +},{"./support":30,"./utils":32}],2:[function(require,module,exports){ +'use strict'; + +var external = require("./external"); +var DataWorker = require('./stream/DataWorker'); +var Crc32Probe = require('./stream/Crc32Probe'); +var DataLengthProbe = require('./stream/DataLengthProbe'); + +/** + * Represent a compressed object, with everything needed to decompress it. + * @constructor + * @param {number} compressedSize the size of the data compressed. + * @param {number} uncompressedSize the size of the data after decompression. + * @param {number} crc32 the crc32 of the decompressed file. + * @param {object} compression the type of compression, see lib/compressions.js. + * @param {String|ArrayBuffer|Uint8Array|Buffer} data the compressed data. + */ +function CompressedObject(compressedSize, uncompressedSize, crc32, compression, data) { + this.compressedSize = compressedSize; + this.uncompressedSize = uncompressedSize; + this.crc32 = crc32; + this.compression = compression; + this.compressedContent = data; +} + +CompressedObject.prototype = { + /** + * Create a worker to get the uncompressed content. + * @return {GenericWorker} the worker. + */ + getContentWorker: function () { + var worker = new DataWorker(external.Promise.resolve(this.compressedContent)) + .pipe(this.compression.uncompressWorker()) + .pipe(new DataLengthProbe("data_length")); + + var that = this; + worker.on("end", function () { + if (this.streamInfo['data_length'] !== that.uncompressedSize) { + throw new Error("Bug : uncompressed data size mismatch"); + } + }); + return worker; + }, + /** + * Create a worker to get the compressed content. + * @return {GenericWorker} the worker. + */ + getCompressedWorker: function () { + return new DataWorker(external.Promise.resolve(this.compressedContent)) + .withStreamInfo("compressedSize", this.compressedSize) + .withStreamInfo("uncompressedSize", this.uncompressedSize) + .withStreamInfo("crc32", this.crc32) + .withStreamInfo("compression", this.compression) + ; + } +}; + +/** + * Chain the given worker with other workers to compress the content with the + * given compression. + * @param {GenericWorker} uncompressedWorker the worker to pipe. + * @param {Object} compression the compression object. + * @param {Object} compressionOptions the options to use when compressing. + * @return {GenericWorker} the new worker compressing the content. + */ +CompressedObject.createWorkerFrom = function (uncompressedWorker, compression, compressionOptions) { + return uncompressedWorker + .pipe(new Crc32Probe()) + .pipe(new DataLengthProbe("uncompressedSize")) + .pipe(compression.compressWorker(compressionOptions)) + .pipe(new DataLengthProbe("compressedSize")) + .withStreamInfo("compression", compression); +}; + +module.exports = CompressedObject; + +},{"./external":6,"./stream/Crc32Probe":25,"./stream/DataLengthProbe":26,"./stream/DataWorker":27}],3:[function(require,module,exports){ +'use strict'; + +var GenericWorker = require("./stream/GenericWorker"); + +exports.STORE = { + magic: "\x00\x00", + compressWorker : function (compressionOptions) { + return new GenericWorker("STORE compression"); + }, + uncompressWorker : function () { + return new GenericWorker("STORE decompression"); + } +}; +exports.DEFLATE = require('./flate'); + +},{"./flate":7,"./stream/GenericWorker":28}],4:[function(require,module,exports){ +'use strict'; + +var utils = require('./utils'); + +/** + * The following functions come from pako, from pako/lib/zlib/crc32.js + * released under the MIT license, see pako https://github.com/nodeca/pako/ + */ + +// Use ordinary array, since untyped makes no boost here +function makeTable() { + var c, table = []; + + for(var n =0; n < 256; n++){ + c = n; + for(var k =0; k < 8; k++){ + c = ((c&1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1)); + } + table[n] = c; + } + + return table; +} + +// Create table on load. Just 255 signed longs. Not a problem. +var crcTable = makeTable(); + + +function crc32(crc, buf, len, pos) { + var t = crcTable, end = pos + len; + + crc = crc ^ (-1); + + for (var i = pos; i < end; i++ ) { + crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF]; + } + + return (crc ^ (-1)); // >>> 0; +} + +// That's all for the pako functions. + +/** + * Compute the crc32 of a string. + * This is almost the same as the function crc32, but for strings. Using the + * same function for the two use cases leads to horrible performances. + * @param {Number} crc the starting value of the crc. + * @param {String} str the string to use. + * @param {Number} len the length of the string. + * @param {Number} pos the starting position for the crc32 computation. + * @return {Number} the computed crc32. + */ +function crc32str(crc, str, len, pos) { + var t = crcTable, end = pos + len; + + crc = crc ^ (-1); + + for (var i = pos; i < end; i++ ) { + crc = (crc >>> 8) ^ t[(crc ^ str.charCodeAt(i)) & 0xFF]; + } + + return (crc ^ (-1)); // >>> 0; +} + +module.exports = function crc32wrapper(input, crc) { + if (typeof input === "undefined" || !input.length) { + return 0; + } + + var isArray = utils.getTypeOf(input) !== "string"; + + if(isArray) { + return crc32(crc|0, input, input.length, 0); + } else { + return crc32str(crc|0, input, input.length, 0); + } +}; + +},{"./utils":32}],5:[function(require,module,exports){ +'use strict'; +exports.base64 = false; +exports.binary = false; +exports.dir = false; +exports.createFolders = true; +exports.date = null; +exports.compression = null; +exports.compressionOptions = null; +exports.comment = null; +exports.unixPermissions = null; +exports.dosPermissions = null; + +},{}],6:[function(require,module,exports){ +/* global Promise */ +'use strict'; + +// load the global object first: +// - it should be better integrated in the system (unhandledRejection in node) +// - the environment may have a custom Promise implementation (see zone.js) +var ES6Promise = null; +if (typeof Promise !== "undefined") { + ES6Promise = Promise; +} else { + ES6Promise = require("lie"); +} + +/** + * Let the user use/change some implementations. + */ +module.exports = { + Promise: ES6Promise +}; + +},{"lie":37}],7:[function(require,module,exports){ +'use strict'; +var USE_TYPEDARRAY = (typeof Uint8Array !== 'undefined') && (typeof Uint16Array !== 'undefined') && (typeof Uint32Array !== 'undefined'); + +var pako = require("pako"); +var utils = require("./utils"); +var GenericWorker = require("./stream/GenericWorker"); + +var ARRAY_TYPE = USE_TYPEDARRAY ? "uint8array" : "array"; + +exports.magic = "\x08\x00"; + +/** + * Create a worker that uses pako to inflate/deflate. + * @constructor + * @param {String} action the name of the pako function to call : either "Deflate" or "Inflate". + * @param {Object} options the options to use when (de)compressing. + */ +function FlateWorker(action, options) { + GenericWorker.call(this, "FlateWorker/" + action); + + this._pako = null; + this._pakoAction = action; + this._pakoOptions = options; + // the `meta` object from the last chunk received + // this allow this worker to pass around metadata + this.meta = {}; +} + +utils.inherits(FlateWorker, GenericWorker); + +/** + * @see GenericWorker.processChunk + */ +FlateWorker.prototype.processChunk = function (chunk) { + this.meta = chunk.meta; + if (this._pako === null) { + this._createPako(); + } + this._pako.push(utils.transformTo(ARRAY_TYPE, chunk.data), false); +}; + +/** + * @see GenericWorker.flush + */ +FlateWorker.prototype.flush = function () { + GenericWorker.prototype.flush.call(this); + if (this._pako === null) { + this._createPako(); + } + this._pako.push([], true); +}; +/** + * @see GenericWorker.cleanUp + */ +FlateWorker.prototype.cleanUp = function () { + GenericWorker.prototype.cleanUp.call(this); + this._pako = null; +}; + +/** + * Create the _pako object. + * TODO: lazy-loading this object isn't the best solution but it's the + * quickest. The best solution is to lazy-load the worker list. See also the + * issue #446. + */ +FlateWorker.prototype._createPako = function () { + this._pako = new pako[this._pakoAction]({ + raw: true, + level: this._pakoOptions.level || -1 // default compression + }); + var self = this; + this._pako.onData = function(data) { + self.push({ + data : data, + meta : self.meta + }); + }; +}; + +exports.compressWorker = function (compressionOptions) { + return new FlateWorker("Deflate", compressionOptions); +}; +exports.uncompressWorker = function () { + return new FlateWorker("Inflate", {}); +}; + +},{"./stream/GenericWorker":28,"./utils":32,"pako":38}],8:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var GenericWorker = require('../stream/GenericWorker'); +var utf8 = require('../utf8'); +var crc32 = require('../crc32'); +var signature = require('../signature'); + +/** + * Transform an integer into a string in hexadecimal. + * @private + * @param {number} dec the number to convert. + * @param {number} bytes the number of bytes to generate. + * @returns {string} the result. + */ +var decToHex = function(dec, bytes) { + var hex = "", i; + for (i = 0; i < bytes; i++) { + hex += String.fromCharCode(dec & 0xff); + dec = dec >>> 8; + } + return hex; +}; + +/** + * Generate the UNIX part of the external file attributes. + * @param {Object} unixPermissions the unix permissions or null. + * @param {Boolean} isDir true if the entry is a directory, false otherwise. + * @return {Number} a 32 bit integer. + * + * adapted from http://unix.stackexchange.com/questions/14705/the-zip-formats-external-file-attribute : + * + * TTTTsstrwxrwxrwx0000000000ADVSHR + * ^^^^____________________________ file type, see zipinfo.c (UNX_*) + * ^^^_________________________ setuid, setgid, sticky + * ^^^^^^^^^________________ permissions + * ^^^^^^^^^^______ not used ? + * ^^^^^^ DOS attribute bits : Archive, Directory, Volume label, System file, Hidden, Read only + */ +var generateUnixExternalFileAttr = function (unixPermissions, isDir) { + + var result = unixPermissions; + if (!unixPermissions) { + // I can't use octal values in strict mode, hence the hexa. + // 040775 => 0x41fd + // 0100664 => 0x81b4 + result = isDir ? 0x41fd : 0x81b4; + } + return (result & 0xFFFF) << 16; +}; + +/** + * Generate the DOS part of the external file attributes. + * @param {Object} dosPermissions the dos permissions or null. + * @param {Boolean} isDir true if the entry is a directory, false otherwise. + * @return {Number} a 32 bit integer. + * + * Bit 0 Read-Only + * Bit 1 Hidden + * Bit 2 System + * Bit 3 Volume Label + * Bit 4 Directory + * Bit 5 Archive + */ +var generateDosExternalFileAttr = function (dosPermissions, isDir) { + + // the dir flag is already set for compatibility + return (dosPermissions || 0) & 0x3F; +}; + +/** + * Generate the various parts used in the construction of the final zip file. + * @param {Object} streamInfo the hash with information about the compressed file. + * @param {Boolean} streamedContent is the content streamed ? + * @param {Boolean} streamingEnded is the stream finished ? + * @param {number} offset the current offset from the start of the zip file. + * @param {String} platform let's pretend we are this platform (change platform dependents fields) + * @param {Function} encodeFileName the function to encode the file name / comment. + * @return {Object} the zip parts. + */ +var generateZipParts = function(streamInfo, streamedContent, streamingEnded, offset, platform, encodeFileName) { + var file = streamInfo['file'], + compression = streamInfo['compression'], + useCustomEncoding = encodeFileName !== utf8.utf8encode, + encodedFileName = utils.transformTo("string", encodeFileName(file.name)), + utfEncodedFileName = utils.transformTo("string", utf8.utf8encode(file.name)), + comment = file.comment, + encodedComment = utils.transformTo("string", encodeFileName(comment)), + utfEncodedComment = utils.transformTo("string", utf8.utf8encode(comment)), + useUTF8ForFileName = utfEncodedFileName.length !== file.name.length, + useUTF8ForComment = utfEncodedComment.length !== comment.length, + dosTime, + dosDate, + extraFields = "", + unicodePathExtraField = "", + unicodeCommentExtraField = "", + dir = file.dir, + date = file.date; + + + var dataInfo = { + crc32 : 0, + compressedSize : 0, + uncompressedSize : 0 + }; + + // if the content is streamed, the sizes/crc32 are only available AFTER + // the end of the stream. + if (!streamedContent || streamingEnded) { + dataInfo.crc32 = streamInfo['crc32']; + dataInfo.compressedSize = streamInfo['compressedSize']; + dataInfo.uncompressedSize = streamInfo['uncompressedSize']; + } + + var bitflag = 0; + if (streamedContent) { + // Bit 3: the sizes/crc32 are set to zero in the local header. + // The correct values are put in the data descriptor immediately + // following the compressed data. + bitflag |= 0x0008; + } + if (!useCustomEncoding && (useUTF8ForFileName || useUTF8ForComment)) { + // Bit 11: Language encoding flag (EFS). + bitflag |= 0x0800; + } + + + var extFileAttr = 0; + var versionMadeBy = 0; + if (dir) { + // dos or unix, we set the dos dir flag + extFileAttr |= 0x00010; + } + if(platform === "UNIX") { + versionMadeBy = 0x031E; // UNIX, version 3.0 + extFileAttr |= generateUnixExternalFileAttr(file.unixPermissions, dir); + } else { // DOS or other, fallback to DOS + versionMadeBy = 0x0014; // DOS, version 2.0 + extFileAttr |= generateDosExternalFileAttr(file.dosPermissions, dir); + } + + // date + // @see http://www.delorie.com/djgpp/doc/rbinter/it/52/13.html + // @see http://www.delorie.com/djgpp/doc/rbinter/it/65/16.html + // @see http://www.delorie.com/djgpp/doc/rbinter/it/66/16.html + + dosTime = date.getUTCHours(); + dosTime = dosTime << 6; + dosTime = dosTime | date.getUTCMinutes(); + dosTime = dosTime << 5; + dosTime = dosTime | date.getUTCSeconds() / 2; + + dosDate = date.getUTCFullYear() - 1980; + dosDate = dosDate << 4; + dosDate = dosDate | (date.getUTCMonth() + 1); + dosDate = dosDate << 5; + dosDate = dosDate | date.getUTCDate(); + + if (useUTF8ForFileName) { + // set the unicode path extra field. unzip needs at least one extra + // field to correctly handle unicode path, so using the path is as good + // as any other information. This could improve the situation with + // other archive managers too. + // This field is usually used without the utf8 flag, with a non + // unicode path in the header (winrar, winzip). This helps (a bit) + // with the messy Windows' default compressed folders feature but + // breaks on p7zip which doesn't seek the unicode path extra field. + // So for now, UTF-8 everywhere ! + unicodePathExtraField = + // Version + decToHex(1, 1) + + // NameCRC32 + decToHex(crc32(encodedFileName), 4) + + // UnicodeName + utfEncodedFileName; + + extraFields += + // Info-ZIP Unicode Path Extra Field + "\x75\x70" + + // size + decToHex(unicodePathExtraField.length, 2) + + // content + unicodePathExtraField; + } + + if(useUTF8ForComment) { + + unicodeCommentExtraField = + // Version + decToHex(1, 1) + + // CommentCRC32 + decToHex(crc32(encodedComment), 4) + + // UnicodeName + utfEncodedComment; + + extraFields += + // Info-ZIP Unicode Path Extra Field + "\x75\x63" + + // size + decToHex(unicodeCommentExtraField.length, 2) + + // content + unicodeCommentExtraField; + } + + var header = ""; + + // version needed to extract + header += "\x0A\x00"; + // general purpose bit flag + header += decToHex(bitflag, 2); + // compression method + header += compression.magic; + // last mod file time + header += decToHex(dosTime, 2); + // last mod file date + header += decToHex(dosDate, 2); + // crc-32 + header += decToHex(dataInfo.crc32, 4); + // compressed size + header += decToHex(dataInfo.compressedSize, 4); + // uncompressed size + header += decToHex(dataInfo.uncompressedSize, 4); + // file name length + header += decToHex(encodedFileName.length, 2); + // extra field length + header += decToHex(extraFields.length, 2); + + + var fileRecord = signature.LOCAL_FILE_HEADER + header + encodedFileName + extraFields; + + var dirRecord = signature.CENTRAL_FILE_HEADER + + // version made by (00: DOS) + decToHex(versionMadeBy, 2) + + // file header (common to file and central directory) + header + + // file comment length + decToHex(encodedComment.length, 2) + + // disk number start + "\x00\x00" + + // internal file attributes TODO + "\x00\x00" + + // external file attributes + decToHex(extFileAttr, 4) + + // relative offset of local header + decToHex(offset, 4) + + // file name + encodedFileName + + // extra field + extraFields + + // file comment + encodedComment; + + return { + fileRecord: fileRecord, + dirRecord: dirRecord + }; +}; + +/** + * Generate the EOCD record. + * @param {Number} entriesCount the number of entries in the zip file. + * @param {Number} centralDirLength the length (in bytes) of the central dir. + * @param {Number} localDirLength the length (in bytes) of the local dir. + * @param {String} comment the zip file comment as a binary string. + * @param {Function} encodeFileName the function to encode the comment. + * @return {String} the EOCD record. + */ +var generateCentralDirectoryEnd = function (entriesCount, centralDirLength, localDirLength, comment, encodeFileName) { + var dirEnd = ""; + var encodedComment = utils.transformTo("string", encodeFileName(comment)); + + // end of central dir signature + dirEnd = signature.CENTRAL_DIRECTORY_END + + // number of this disk + "\x00\x00" + + // number of the disk with the start of the central directory + "\x00\x00" + + // total number of entries in the central directory on this disk + decToHex(entriesCount, 2) + + // total number of entries in the central directory + decToHex(entriesCount, 2) + + // size of the central directory 4 bytes + decToHex(centralDirLength, 4) + + // offset of start of central directory with respect to the starting disk number + decToHex(localDirLength, 4) + + // .ZIP file comment length + decToHex(encodedComment.length, 2) + + // .ZIP file comment + encodedComment; + + return dirEnd; +}; + +/** + * Generate data descriptors for a file entry. + * @param {Object} streamInfo the hash generated by a worker, containing information + * on the file entry. + * @return {String} the data descriptors. + */ +var generateDataDescriptors = function (streamInfo) { + var descriptor = ""; + descriptor = signature.DATA_DESCRIPTOR + + // crc-32 4 bytes + decToHex(streamInfo['crc32'], 4) + + // compressed size 4 bytes + decToHex(streamInfo['compressedSize'], 4) + + // uncompressed size 4 bytes + decToHex(streamInfo['uncompressedSize'], 4); + + return descriptor; +}; + + +/** + * A worker to concatenate other workers to create a zip file. + * @param {Boolean} streamFiles `true` to stream the content of the files, + * `false` to accumulate it. + * @param {String} comment the comment to use. + * @param {String} platform the platform to use, "UNIX" or "DOS". + * @param {Function} encodeFileName the function to encode file names and comments. + */ +function ZipFileWorker(streamFiles, comment, platform, encodeFileName) { + GenericWorker.call(this, "ZipFileWorker"); + // The number of bytes written so far. This doesn't count accumulated chunks. + this.bytesWritten = 0; + // The comment of the zip file + this.zipComment = comment; + // The platform "generating" the zip file. + this.zipPlatform = platform; + // the function to encode file names and comments. + this.encodeFileName = encodeFileName; + // Should we stream the content of the files ? + this.streamFiles = streamFiles; + // If `streamFiles` is false, we will need to accumulate the content of the + // files to calculate sizes / crc32 (and write them *before* the content). + // This boolean indicates if we are accumulating chunks (it will change a lot + // during the lifetime of this worker). + this.accumulate = false; + // The buffer receiving chunks when accumulating content. + this.contentBuffer = []; + // The list of generated directory records. + this.dirRecords = []; + // The offset (in bytes) from the beginning of the zip file for the current source. + this.currentSourceOffset = 0; + // The total number of entries in this zip file. + this.entriesCount = 0; + // the name of the file currently being added, null when handling the end of the zip file. + // Used for the emitted metadata. + this.currentFile = null; + + + + this._sources = []; +} +utils.inherits(ZipFileWorker, GenericWorker); + +/** + * @see GenericWorker.push + */ +ZipFileWorker.prototype.push = function (chunk) { + + var currentFilePercent = chunk.meta.percent || 0; + var entriesCount = this.entriesCount; + var remainingFiles = this._sources.length; + + if(this.accumulate) { + this.contentBuffer.push(chunk); + } else { + this.bytesWritten += chunk.data.length; + + GenericWorker.prototype.push.call(this, { + data : chunk.data, + meta : { + currentFile : this.currentFile, + percent : entriesCount ? (currentFilePercent + 100 * (entriesCount - remainingFiles - 1)) / entriesCount : 100 + } + }); + } +}; + +/** + * The worker started a new source (an other worker). + * @param {Object} streamInfo the streamInfo object from the new source. + */ +ZipFileWorker.prototype.openedSource = function (streamInfo) { + this.currentSourceOffset = this.bytesWritten; + this.currentFile = streamInfo['file'].name; + + var streamedContent = this.streamFiles && !streamInfo['file'].dir; + + // don't stream folders (because they don't have any content) + if(streamedContent) { + var record = generateZipParts(streamInfo, streamedContent, false, this.currentSourceOffset, this.zipPlatform, this.encodeFileName); + this.push({ + data : record.fileRecord, + meta : {percent:0} + }); + } else { + // we need to wait for the whole file before pushing anything + this.accumulate = true; + } +}; + +/** + * The worker finished a source (an other worker). + * @param {Object} streamInfo the streamInfo object from the finished source. + */ +ZipFileWorker.prototype.closedSource = function (streamInfo) { + this.accumulate = false; + var streamedContent = this.streamFiles && !streamInfo['file'].dir; + var record = generateZipParts(streamInfo, streamedContent, true, this.currentSourceOffset, this.zipPlatform, this.encodeFileName); + + this.dirRecords.push(record.dirRecord); + if(streamedContent) { + // after the streamed file, we put data descriptors + this.push({ + data : generateDataDescriptors(streamInfo), + meta : {percent:100} + }); + } else { + // the content wasn't streamed, we need to push everything now + // first the file record, then the content + this.push({ + data : record.fileRecord, + meta : {percent:0} + }); + while(this.contentBuffer.length) { + this.push(this.contentBuffer.shift()); + } + } + this.currentFile = null; +}; + +/** + * @see GenericWorker.flush + */ +ZipFileWorker.prototype.flush = function () { + + var localDirLength = this.bytesWritten; + for(var i = 0; i < this.dirRecords.length; i++) { + this.push({ + data : this.dirRecords[i], + meta : {percent:100} + }); + } + var centralDirLength = this.bytesWritten - localDirLength; + + var dirEnd = generateCentralDirectoryEnd(this.dirRecords.length, centralDirLength, localDirLength, this.zipComment, this.encodeFileName); + + this.push({ + data : dirEnd, + meta : {percent:100} + }); +}; + +/** + * Prepare the next source to be read. + */ +ZipFileWorker.prototype.prepareNextSource = function () { + this.previous = this._sources.shift(); + this.openedSource(this.previous.streamInfo); + if (this.isPaused) { + this.previous.pause(); + } else { + this.previous.resume(); + } +}; + +/** + * @see GenericWorker.registerPrevious + */ +ZipFileWorker.prototype.registerPrevious = function (previous) { + this._sources.push(previous); + var self = this; + + previous.on('data', function (chunk) { + self.processChunk(chunk); + }); + previous.on('end', function () { + self.closedSource(self.previous.streamInfo); + if(self._sources.length) { + self.prepareNextSource(); + } else { + self.end(); + } + }); + previous.on('error', function (e) { + self.error(e); + }); + return this; +}; + +/** + * @see GenericWorker.resume + */ +ZipFileWorker.prototype.resume = function () { + if(!GenericWorker.prototype.resume.call(this)) { + return false; + } + + if (!this.previous && this._sources.length) { + this.prepareNextSource(); + return true; + } + if (!this.previous && !this._sources.length && !this.generatedError) { + this.end(); + return true; + } +}; + +/** + * @see GenericWorker.error + */ +ZipFileWorker.prototype.error = function (e) { + var sources = this._sources; + if(!GenericWorker.prototype.error.call(this, e)) { + return false; + } + for(var i = 0; i < sources.length; i++) { + try { + sources[i].error(e); + } catch(e) { + // the `error` exploded, nothing to do + } + } + return true; +}; + +/** + * @see GenericWorker.lock + */ +ZipFileWorker.prototype.lock = function () { + GenericWorker.prototype.lock.call(this); + var sources = this._sources; + for(var i = 0; i < sources.length; i++) { + sources[i].lock(); + } +}; + +module.exports = ZipFileWorker; + +},{"../crc32":4,"../signature":23,"../stream/GenericWorker":28,"../utf8":31,"../utils":32}],9:[function(require,module,exports){ +'use strict'; + +var compressions = require('../compressions'); +var ZipFileWorker = require('./ZipFileWorker'); + +/** + * Find the compression to use. + * @param {String} fileCompression the compression defined at the file level, if any. + * @param {String} zipCompression the compression defined at the load() level. + * @return {Object} the compression object to use. + */ +var getCompression = function (fileCompression, zipCompression) { + + var compressionName = fileCompression || zipCompression; + var compression = compressions[compressionName]; + if (!compression) { + throw new Error(compressionName + " is not a valid compression method !"); + } + return compression; +}; + +/** + * Create a worker to generate a zip file. + * @param {JSZip} zip the JSZip instance at the right root level. + * @param {Object} options to generate the zip file. + * @param {String} comment the comment to use. + */ +exports.generateWorker = function (zip, options, comment) { + + var zipFileWorker = new ZipFileWorker(options.streamFiles, comment, options.platform, options.encodeFileName); + var entriesCount = 0; + try { + + zip.forEach(function (relativePath, file) { + entriesCount++; + var compression = getCompression(file.options.compression, options.compression); + var compressionOptions = file.options.compressionOptions || options.compressionOptions || {}; + var dir = file.dir, date = file.date; + + file._compressWorker(compression, compressionOptions) + .withStreamInfo("file", { + name : relativePath, + dir : dir, + date : date, + comment : file.comment || "", + unixPermissions : file.unixPermissions, + dosPermissions : file.dosPermissions + }) + .pipe(zipFileWorker); + }); + zipFileWorker.entriesCount = entriesCount; + } catch (e) { + zipFileWorker.error(e); + } + + return zipFileWorker; +}; + +},{"../compressions":3,"./ZipFileWorker":8}],10:[function(require,module,exports){ +'use strict'; + +/** + * Representation a of zip file in js + * @constructor + */ +function JSZip() { + // if this constructor is used without `new`, it adds `new` before itself: + if(!(this instanceof JSZip)) { + return new JSZip(); + } + + if(arguments.length) { + throw new Error("The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide."); + } + + // object containing the files : + // { + // "folder/" : {...}, + // "folder/data.txt" : {...} + // } + // NOTE: we use a null prototype because we do not + // want filenames like "toString" coming from a zip file + // to overwrite methods and attributes in a normal Object. + this.files = Object.create(null); + + this.comment = null; + + // Where we are in the hierarchy + this.root = ""; + this.clone = function() { + var newObj = new JSZip(); + for (var i in this) { + if (typeof this[i] !== "function") { + newObj[i] = this[i]; + } + } + return newObj; + }; +} +JSZip.prototype = require('./object'); +JSZip.prototype.loadAsync = require('./load'); +JSZip.support = require('./support'); +JSZip.defaults = require('./defaults'); + +// TODO find a better way to handle this version, +// a require('package.json').version doesn't work with webpack, see #327 +JSZip.version = "3.7.1"; + +JSZip.loadAsync = function (content, options) { + return new JSZip().loadAsync(content, options); +}; + +JSZip.external = require("./external"); +module.exports = JSZip; + +},{"./defaults":5,"./external":6,"./load":11,"./object":15,"./support":30}],11:[function(require,module,exports){ +'use strict'; +var utils = require('./utils'); +var external = require("./external"); +var utf8 = require('./utf8'); +var ZipEntries = require('./zipEntries'); +var Crc32Probe = require('./stream/Crc32Probe'); +var nodejsUtils = require("./nodejsUtils"); + +/** + * Check the CRC32 of an entry. + * @param {ZipEntry} zipEntry the zip entry to check. + * @return {Promise} the result. + */ +function checkEntryCRC32(zipEntry) { + return new external.Promise(function (resolve, reject) { + var worker = zipEntry.decompressed.getContentWorker().pipe(new Crc32Probe()); + worker.on("error", function (e) { + reject(e); + }) + .on("end", function () { + if (worker.streamInfo.crc32 !== zipEntry.decompressed.crc32) { + reject(new Error("Corrupted zip : CRC32 mismatch")); + } else { + resolve(); + } + }) + .resume(); + }); +} + +module.exports = function (data, options) { + var zip = this; + options = utils.extend(options || {}, { + base64: false, + checkCRC32: false, + optimizedBinaryString: false, + createFolders: false, + decodeFileName: utf8.utf8decode + }); + + if (nodejsUtils.isNode && nodejsUtils.isStream(data)) { + return external.Promise.reject(new Error("JSZip can't accept a stream when loading a zip file.")); + } + + return utils.prepareContent("the loaded zip file", data, true, options.optimizedBinaryString, options.base64) + .then(function (data) { + var zipEntries = new ZipEntries(options); + zipEntries.load(data); + return zipEntries; + }).then(function checkCRC32(zipEntries) { + var promises = [external.Promise.resolve(zipEntries)]; + var files = zipEntries.files; + if (options.checkCRC32) { + for (var i = 0; i < files.length; i++) { + promises.push(checkEntryCRC32(files[i])); + } + } + return external.Promise.all(promises); + }).then(function addFiles(results) { + var zipEntries = results.shift(); + var files = zipEntries.files; + for (var i = 0; i < files.length; i++) { + var input = files[i]; + zip.file(input.fileNameStr, input.decompressed, { + binary: true, + optimizedBinaryString: true, + date: input.date, + dir: input.dir, + comment: input.fileCommentStr.length ? input.fileCommentStr : null, + unixPermissions: input.unixPermissions, + dosPermissions: input.dosPermissions, + createFolders: options.createFolders + }); + } + if (zipEntries.zipComment.length) { + zip.comment = zipEntries.zipComment; + } + + return zip; + }); +}; + +},{"./external":6,"./nodejsUtils":14,"./stream/Crc32Probe":25,"./utf8":31,"./utils":32,"./zipEntries":33}],12:[function(require,module,exports){ +"use strict"; + +var utils = require('../utils'); +var GenericWorker = require('../stream/GenericWorker'); + +/** + * A worker that use a nodejs stream as source. + * @constructor + * @param {String} filename the name of the file entry for this stream. + * @param {Readable} stream the nodejs stream. + */ +function NodejsStreamInputAdapter(filename, stream) { + GenericWorker.call(this, "Nodejs stream input adapter for " + filename); + this._upstreamEnded = false; + this._bindStream(stream); +} + +utils.inherits(NodejsStreamInputAdapter, GenericWorker); + +/** + * Prepare the stream and bind the callbacks on it. + * Do this ASAP on node 0.10 ! A lazy binding doesn't always work. + * @param {Stream} stream the nodejs stream to use. + */ +NodejsStreamInputAdapter.prototype._bindStream = function (stream) { + var self = this; + this._stream = stream; + stream.pause(); + stream + .on("data", function (chunk) { + self.push({ + data: chunk, + meta : { + percent : 0 + } + }); + }) + .on("error", function (e) { + if(self.isPaused) { + this.generatedError = e; + } else { + self.error(e); + } + }) + .on("end", function () { + if(self.isPaused) { + self._upstreamEnded = true; + } else { + self.end(); + } + }); +}; +NodejsStreamInputAdapter.prototype.pause = function () { + if(!GenericWorker.prototype.pause.call(this)) { + return false; + } + this._stream.pause(); + return true; +}; +NodejsStreamInputAdapter.prototype.resume = function () { + if(!GenericWorker.prototype.resume.call(this)) { + return false; + } + + if(this._upstreamEnded) { + this.end(); + } else { + this._stream.resume(); + } + + return true; +}; + +module.exports = NodejsStreamInputAdapter; + +},{"../stream/GenericWorker":28,"../utils":32}],13:[function(require,module,exports){ +'use strict'; + +var Readable = require('readable-stream').Readable; + +var utils = require('../utils'); +utils.inherits(NodejsStreamOutputAdapter, Readable); + +/** +* A nodejs stream using a worker as source. +* @see the SourceWrapper in http://nodejs.org/api/stream.html +* @constructor +* @param {StreamHelper} helper the helper wrapping the worker +* @param {Object} options the nodejs stream options +* @param {Function} updateCb the update callback. +*/ +function NodejsStreamOutputAdapter(helper, options, updateCb) { + Readable.call(this, options); + this._helper = helper; + + var self = this; + helper.on("data", function (data, meta) { + if (!self.push(data)) { + self._helper.pause(); + } + if(updateCb) { + updateCb(meta); + } + }) + .on("error", function(e) { + self.emit('error', e); + }) + .on("end", function () { + self.push(null); + }); +} + + +NodejsStreamOutputAdapter.prototype._read = function() { + this._helper.resume(); +}; + +module.exports = NodejsStreamOutputAdapter; + +},{"../utils":32,"readable-stream":16}],14:[function(require,module,exports){ +'use strict'; + +module.exports = { + /** + * True if this is running in Nodejs, will be undefined in a browser. + * In a browser, browserify won't include this file and the whole module + * will be resolved an empty object. + */ + isNode : typeof Buffer !== "undefined", + /** + * Create a new nodejs Buffer from an existing content. + * @param {Object} data the data to pass to the constructor. + * @param {String} encoding the encoding to use. + * @return {Buffer} a new Buffer. + */ + newBufferFrom: function(data, encoding) { + if (Buffer.from && Buffer.from !== Uint8Array.from) { + return Buffer.from(data, encoding); + } else { + if (typeof data === "number") { + // Safeguard for old Node.js versions. On newer versions, + // Buffer.from(number) / Buffer(number, encoding) already throw. + throw new Error("The \"data\" argument must not be a number"); + } + return new Buffer(data, encoding); + } + }, + /** + * Create a new nodejs Buffer with the specified size. + * @param {Integer} size the size of the buffer. + * @return {Buffer} a new Buffer. + */ + allocBuffer: function (size) { + if (Buffer.alloc) { + return Buffer.alloc(size); + } else { + var buf = new Buffer(size); + buf.fill(0); + return buf; + } + }, + /** + * Find out if an object is a Buffer. + * @param {Object} b the object to test. + * @return {Boolean} true if the object is a Buffer, false otherwise. + */ + isBuffer : function(b){ + return Buffer.isBuffer(b); + }, + + isStream : function (obj) { + return obj && + typeof obj.on === "function" && + typeof obj.pause === "function" && + typeof obj.resume === "function"; + } +}; + +},{}],15:[function(require,module,exports){ +'use strict'; +var utf8 = require('./utf8'); +var utils = require('./utils'); +var GenericWorker = require('./stream/GenericWorker'); +var StreamHelper = require('./stream/StreamHelper'); +var defaults = require('./defaults'); +var CompressedObject = require('./compressedObject'); +var ZipObject = require('./zipObject'); +var generate = require("./generate"); +var nodejsUtils = require("./nodejsUtils"); +var NodejsStreamInputAdapter = require("./nodejs/NodejsStreamInputAdapter"); + + +/** + * Add a file in the current folder. + * @private + * @param {string} name the name of the file + * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data of the file + * @param {Object} originalOptions the options of the file + * @return {Object} the new file. + */ +var fileAdd = function(name, data, originalOptions) { + // be sure sub folders exist + var dataType = utils.getTypeOf(data), + parent; + + + /* + * Correct options. + */ + + var o = utils.extend(originalOptions || {}, defaults); + o.date = o.date || new Date(); + if (o.compression !== null) { + o.compression = o.compression.toUpperCase(); + } + + if (typeof o.unixPermissions === "string") { + o.unixPermissions = parseInt(o.unixPermissions, 8); + } + + // UNX_IFDIR 0040000 see zipinfo.c + if (o.unixPermissions && (o.unixPermissions & 0x4000)) { + o.dir = true; + } + // Bit 4 Directory + if (o.dosPermissions && (o.dosPermissions & 0x0010)) { + o.dir = true; + } + + if (o.dir) { + name = forceTrailingSlash(name); + } + if (o.createFolders && (parent = parentFolder(name))) { + folderAdd.call(this, parent, true); + } + + var isUnicodeString = dataType === "string" && o.binary === false && o.base64 === false; + if (!originalOptions || typeof originalOptions.binary === "undefined") { + o.binary = !isUnicodeString; + } + + + var isCompressedEmpty = (data instanceof CompressedObject) && data.uncompressedSize === 0; + + if (isCompressedEmpty || o.dir || !data || data.length === 0) { + o.base64 = false; + o.binary = true; + data = ""; + o.compression = "STORE"; + dataType = "string"; + } + + /* + * Convert content to fit. + */ + + var zipObjectContent = null; + if (data instanceof CompressedObject || data instanceof GenericWorker) { + zipObjectContent = data; + } else if (nodejsUtils.isNode && nodejsUtils.isStream(data)) { + zipObjectContent = new NodejsStreamInputAdapter(name, data); + } else { + zipObjectContent = utils.prepareContent(name, data, o.binary, o.optimizedBinaryString, o.base64); + } + + var object = new ZipObject(name, zipObjectContent, o); + this.files[name] = object; + /* + TODO: we can't throw an exception because we have async promises + (we can have a promise of a Date() for example) but returning a + promise is useless because file(name, data) returns the JSZip + object for chaining. Should we break that to allow the user + to catch the error ? + + return external.Promise.resolve(zipObjectContent) + .then(function () { + return object; + }); + */ +}; + +/** + * Find the parent folder of the path. + * @private + * @param {string} path the path to use + * @return {string} the parent folder, or "" + */ +var parentFolder = function (path) { + if (path.slice(-1) === '/') { + path = path.substring(0, path.length - 1); + } + var lastSlash = path.lastIndexOf('/'); + return (lastSlash > 0) ? path.substring(0, lastSlash) : ""; +}; + +/** + * Returns the path with a slash at the end. + * @private + * @param {String} path the path to check. + * @return {String} the path with a trailing slash. + */ +var forceTrailingSlash = function(path) { + // Check the name ends with a / + if (path.slice(-1) !== "/") { + path += "/"; // IE doesn't like substr(-1) + } + return path; +}; + +/** + * Add a (sub) folder in the current folder. + * @private + * @param {string} name the folder's name + * @param {boolean=} [createFolders] If true, automatically create sub + * folders. Defaults to false. + * @return {Object} the new folder. + */ +var folderAdd = function(name, createFolders) { + createFolders = (typeof createFolders !== 'undefined') ? createFolders : defaults.createFolders; + + name = forceTrailingSlash(name); + + // Does this folder already exist? + if (!this.files[name]) { + fileAdd.call(this, name, null, { + dir: true, + createFolders: createFolders + }); + } + return this.files[name]; +}; + +/** +* Cross-window, cross-Node-context regular expression detection +* @param {Object} object Anything +* @return {Boolean} true if the object is a regular expression, +* false otherwise +*/ +function isRegExp(object) { + return Object.prototype.toString.call(object) === "[object RegExp]"; +} + +// return the actual prototype of JSZip +var out = { + /** + * @see loadAsync + */ + load: function() { + throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide."); + }, + + + /** + * Call a callback function for each entry at this folder level. + * @param {Function} cb the callback function: + * function (relativePath, file) {...} + * It takes 2 arguments : the relative path and the file. + */ + forEach: function(cb) { + var filename, relativePath, file; + /* jshint ignore:start */ + // ignore warning about unwanted properties because this.files is a null prototype object + for (filename in this.files) { + file = this.files[filename]; + relativePath = filename.slice(this.root.length, filename.length); + if (relativePath && filename.slice(0, this.root.length) === this.root) { // the file is in the current root + cb(relativePath, file); // TODO reverse the parameters ? need to be clean AND consistent with the filter search fn... + } + } + /* jshint ignore:end */ + }, + + /** + * Filter nested files/folders with the specified function. + * @param {Function} search the predicate to use : + * function (relativePath, file) {...} + * It takes 2 arguments : the relative path and the file. + * @return {Array} An array of matching elements. + */ + filter: function(search) { + var result = []; + this.forEach(function (relativePath, entry) { + if (search(relativePath, entry)) { // the file matches the function + result.push(entry); + } + + }); + return result; + }, + + /** + * Add a file to the zip file, or search a file. + * @param {string|RegExp} name The name of the file to add (if data is defined), + * the name of the file to find (if no data) or a regex to match files. + * @param {String|ArrayBuffer|Uint8Array|Buffer} data The file data, either raw or base64 encoded + * @param {Object} o File options + * @return {JSZip|Object|Array} this JSZip object (when adding a file), + * a file (when searching by string) or an array of files (when searching by regex). + */ + file: function(name, data, o) { + if (arguments.length === 1) { + if (isRegExp(name)) { + var regexp = name; + return this.filter(function(relativePath, file) { + return !file.dir && regexp.test(relativePath); + }); + } + else { // text + var obj = this.files[this.root + name]; + if (obj && !obj.dir) { + return obj; + } else { + return null; + } + } + } + else { // more than one argument : we have data ! + name = this.root + name; + fileAdd.call(this, name, data, o); + } + return this; + }, + + /** + * Add a directory to the zip file, or search. + * @param {String|RegExp} arg The name of the directory to add, or a regex to search folders. + * @return {JSZip} an object with the new directory as the root, or an array containing matching folders. + */ + folder: function(arg) { + if (!arg) { + return this; + } + + if (isRegExp(arg)) { + return this.filter(function(relativePath, file) { + return file.dir && arg.test(relativePath); + }); + } + + // else, name is a new folder + var name = this.root + arg; + var newFolder = folderAdd.call(this, name); + + // Allow chaining by returning a new object with this folder as the root + var ret = this.clone(); + ret.root = newFolder.name; + return ret; + }, + + /** + * Delete a file, or a directory and all sub-files, from the zip + * @param {string} name the name of the file to delete + * @return {JSZip} this JSZip object + */ + remove: function(name) { + name = this.root + name; + var file = this.files[name]; + if (!file) { + // Look for any folders + if (name.slice(-1) !== "/") { + name += "/"; + } + file = this.files[name]; + } + + if (file && !file.dir) { + // file + delete this.files[name]; + } else { + // maybe a folder, delete recursively + var kids = this.filter(function(relativePath, file) { + return file.name.slice(0, name.length) === name; + }); + for (var i = 0; i < kids.length; i++) { + delete this.files[kids[i].name]; + } + } + + return this; + }, + + /** + * Generate the complete zip file + * @param {Object} options the options to generate the zip file : + * - compression, "STORE" by default. + * - type, "base64" by default. Values are : string, base64, uint8array, arraybuffer, blob. + * @return {String|Uint8Array|ArrayBuffer|Buffer|Blob} the zip file + */ + generate: function(options) { + throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide."); + }, + + /** + * Generate the complete zip file as an internal stream. + * @param {Object} options the options to generate the zip file : + * - compression, "STORE" by default. + * - type, "base64" by default. Values are : string, base64, uint8array, arraybuffer, blob. + * @return {StreamHelper} the streamed zip file. + */ + generateInternalStream: function(options) { + var worker, opts = {}; + try { + opts = utils.extend(options || {}, { + streamFiles: false, + compression: "STORE", + compressionOptions : null, + type: "", + platform: "DOS", + comment: null, + mimeType: 'application/zip', + encodeFileName: utf8.utf8encode + }); + + opts.type = opts.type.toLowerCase(); + opts.compression = opts.compression.toUpperCase(); + + // "binarystring" is preferred but the internals use "string". + if(opts.type === "binarystring") { + opts.type = "string"; + } + + if (!opts.type) { + throw new Error("No output type specified."); + } + + utils.checkSupport(opts.type); + + // accept nodejs `process.platform` + if( + opts.platform === 'darwin' || + opts.platform === 'freebsd' || + opts.platform === 'linux' || + opts.platform === 'sunos' + ) { + opts.platform = "UNIX"; + } + if (opts.platform === 'win32') { + opts.platform = "DOS"; + } + + var comment = opts.comment || this.comment || ""; + worker = generate.generateWorker(this, opts, comment); + } catch (e) { + worker = new GenericWorker("error"); + worker.error(e); + } + return new StreamHelper(worker, opts.type || "string", opts.mimeType); + }, + /** + * Generate the complete zip file asynchronously. + * @see generateInternalStream + */ + generateAsync: function(options, onUpdate) { + return this.generateInternalStream(options).accumulate(onUpdate); + }, + /** + * Generate the complete zip file asynchronously. + * @see generateInternalStream + */ + generateNodeStream: function(options, onUpdate) { + options = options || {}; + if (!options.type) { + options.type = "nodebuffer"; + } + return this.generateInternalStream(options).toNodejsStream(onUpdate); + } +}; +module.exports = out; + +},{"./compressedObject":2,"./defaults":5,"./generate":9,"./nodejs/NodejsStreamInputAdapter":12,"./nodejsUtils":14,"./stream/GenericWorker":28,"./stream/StreamHelper":29,"./utf8":31,"./utils":32,"./zipObject":35}],16:[function(require,module,exports){ +/* + * This file is used by module bundlers (browserify/webpack/etc) when + * including a stream implementation. We use "readable-stream" to get a + * consistent behavior between nodejs versions but bundlers often have a shim + * for "stream". Using this shim greatly improve the compatibility and greatly + * reduce the final size of the bundle (only one stream implementation, not + * two). + */ +module.exports = require("stream"); + +},{"stream":undefined}],17:[function(require,module,exports){ +'use strict'; +var DataReader = require('./DataReader'); +var utils = require('../utils'); + +function ArrayReader(data) { + DataReader.call(this, data); + for(var i = 0; i < this.data.length; i++) { + data[i] = data[i] & 0xFF; + } +} +utils.inherits(ArrayReader, DataReader); +/** + * @see DataReader.byteAt + */ +ArrayReader.prototype.byteAt = function(i) { + return this.data[this.zero + i]; +}; +/** + * @see DataReader.lastIndexOfSignature + */ +ArrayReader.prototype.lastIndexOfSignature = function(sig) { + var sig0 = sig.charCodeAt(0), + sig1 = sig.charCodeAt(1), + sig2 = sig.charCodeAt(2), + sig3 = sig.charCodeAt(3); + for (var i = this.length - 4; i >= 0; --i) { + if (this.data[i] === sig0 && this.data[i + 1] === sig1 && this.data[i + 2] === sig2 && this.data[i + 3] === sig3) { + return i - this.zero; + } + } + + return -1; +}; +/** + * @see DataReader.readAndCheckSignature + */ +ArrayReader.prototype.readAndCheckSignature = function (sig) { + var sig0 = sig.charCodeAt(0), + sig1 = sig.charCodeAt(1), + sig2 = sig.charCodeAt(2), + sig3 = sig.charCodeAt(3), + data = this.readData(4); + return sig0 === data[0] && sig1 === data[1] && sig2 === data[2] && sig3 === data[3]; +}; +/** + * @see DataReader.readData + */ +ArrayReader.prototype.readData = function(size) { + this.checkOffset(size); + if(size === 0) { + return []; + } + var result = this.data.slice(this.zero + this.index, this.zero + this.index + size); + this.index += size; + return result; +}; +module.exports = ArrayReader; + +},{"../utils":32,"./DataReader":18}],18:[function(require,module,exports){ +'use strict'; +var utils = require('../utils'); + +function DataReader(data) { + this.data = data; // type : see implementation + this.length = data.length; + this.index = 0; + this.zero = 0; +} +DataReader.prototype = { + /** + * Check that the offset will not go too far. + * @param {string} offset the additional offset to check. + * @throws {Error} an Error if the offset is out of bounds. + */ + checkOffset: function(offset) { + this.checkIndex(this.index + offset); + }, + /** + * Check that the specified index will not be too far. + * @param {string} newIndex the index to check. + * @throws {Error} an Error if the index is out of bounds. + */ + checkIndex: function(newIndex) { + if (this.length < this.zero + newIndex || newIndex < 0) { + throw new Error("End of data reached (data length = " + this.length + ", asked index = " + (newIndex) + "). Corrupted zip ?"); + } + }, + /** + * Change the index. + * @param {number} newIndex The new index. + * @throws {Error} if the new index is out of the data. + */ + setIndex: function(newIndex) { + this.checkIndex(newIndex); + this.index = newIndex; + }, + /** + * Skip the next n bytes. + * @param {number} n the number of bytes to skip. + * @throws {Error} if the new index is out of the data. + */ + skip: function(n) { + this.setIndex(this.index + n); + }, + /** + * Get the byte at the specified index. + * @param {number} i the index to use. + * @return {number} a byte. + */ + byteAt: function(i) { + // see implementations + }, + /** + * Get the next number with a given byte size. + * @param {number} size the number of bytes to read. + * @return {number} the corresponding number. + */ + readInt: function(size) { + var result = 0, + i; + this.checkOffset(size); + for (i = this.index + size - 1; i >= this.index; i--) { + result = (result << 8) + this.byteAt(i); + } + this.index += size; + return result; + }, + /** + * Get the next string with a given byte size. + * @param {number} size the number of bytes to read. + * @return {string} the corresponding string. + */ + readString: function(size) { + return utils.transformTo("string", this.readData(size)); + }, + /** + * Get raw data without conversion, bytes. + * @param {number} size the number of bytes to read. + * @return {Object} the raw data, implementation specific. + */ + readData: function(size) { + // see implementations + }, + /** + * Find the last occurrence of a zip signature (4 bytes). + * @param {string} sig the signature to find. + * @return {number} the index of the last occurrence, -1 if not found. + */ + lastIndexOfSignature: function(sig) { + // see implementations + }, + /** + * Read the signature (4 bytes) at the current position and compare it with sig. + * @param {string} sig the expected signature + * @return {boolean} true if the signature matches, false otherwise. + */ + readAndCheckSignature: function(sig) { + // see implementations + }, + /** + * Get the next date. + * @return {Date} the date. + */ + readDate: function() { + var dostime = this.readInt(4); + return new Date(Date.UTC( + ((dostime >> 25) & 0x7f) + 1980, // year + ((dostime >> 21) & 0x0f) - 1, // month + (dostime >> 16) & 0x1f, // day + (dostime >> 11) & 0x1f, // hour + (dostime >> 5) & 0x3f, // minute + (dostime & 0x1f) << 1)); // second + } +}; +module.exports = DataReader; + +},{"../utils":32}],19:[function(require,module,exports){ +'use strict'; +var Uint8ArrayReader = require('./Uint8ArrayReader'); +var utils = require('../utils'); + +function NodeBufferReader(data) { + Uint8ArrayReader.call(this, data); +} +utils.inherits(NodeBufferReader, Uint8ArrayReader); + +/** + * @see DataReader.readData + */ +NodeBufferReader.prototype.readData = function(size) { + this.checkOffset(size); + var result = this.data.slice(this.zero + this.index, this.zero + this.index + size); + this.index += size; + return result; +}; +module.exports = NodeBufferReader; + +},{"../utils":32,"./Uint8ArrayReader":21}],20:[function(require,module,exports){ +'use strict'; +var DataReader = require('./DataReader'); +var utils = require('../utils'); + +function StringReader(data) { + DataReader.call(this, data); +} +utils.inherits(StringReader, DataReader); +/** + * @see DataReader.byteAt + */ +StringReader.prototype.byteAt = function(i) { + return this.data.charCodeAt(this.zero + i); +}; +/** + * @see DataReader.lastIndexOfSignature + */ +StringReader.prototype.lastIndexOfSignature = function(sig) { + return this.data.lastIndexOf(sig) - this.zero; +}; +/** + * @see DataReader.readAndCheckSignature + */ +StringReader.prototype.readAndCheckSignature = function (sig) { + var data = this.readData(4); + return sig === data; +}; +/** + * @see DataReader.readData + */ +StringReader.prototype.readData = function(size) { + this.checkOffset(size); + // this will work because the constructor applied the "& 0xff" mask. + var result = this.data.slice(this.zero + this.index, this.zero + this.index + size); + this.index += size; + return result; +}; +module.exports = StringReader; + +},{"../utils":32,"./DataReader":18}],21:[function(require,module,exports){ +'use strict'; +var ArrayReader = require('./ArrayReader'); +var utils = require('../utils'); + +function Uint8ArrayReader(data) { + ArrayReader.call(this, data); +} +utils.inherits(Uint8ArrayReader, ArrayReader); +/** + * @see DataReader.readData + */ +Uint8ArrayReader.prototype.readData = function(size) { + this.checkOffset(size); + if(size === 0) { + // in IE10, when using subarray(idx, idx), we get the array [0x00] instead of []. + return new Uint8Array(0); + } + var result = this.data.subarray(this.zero + this.index, this.zero + this.index + size); + this.index += size; + return result; +}; +module.exports = Uint8ArrayReader; + +},{"../utils":32,"./ArrayReader":17}],22:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var support = require('../support'); +var ArrayReader = require('./ArrayReader'); +var StringReader = require('./StringReader'); +var NodeBufferReader = require('./NodeBufferReader'); +var Uint8ArrayReader = require('./Uint8ArrayReader'); + +/** + * Create a reader adapted to the data. + * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data to read. + * @return {DataReader} the data reader. + */ +module.exports = function (data) { + var type = utils.getTypeOf(data); + utils.checkSupport(type); + if (type === "string" && !support.uint8array) { + return new StringReader(data); + } + if (type === "nodebuffer") { + return new NodeBufferReader(data); + } + if (support.uint8array) { + return new Uint8ArrayReader(utils.transformTo("uint8array", data)); + } + return new ArrayReader(utils.transformTo("array", data)); +}; + +},{"../support":30,"../utils":32,"./ArrayReader":17,"./NodeBufferReader":19,"./StringReader":20,"./Uint8ArrayReader":21}],23:[function(require,module,exports){ +'use strict'; +exports.LOCAL_FILE_HEADER = "PK\x03\x04"; +exports.CENTRAL_FILE_HEADER = "PK\x01\x02"; +exports.CENTRAL_DIRECTORY_END = "PK\x05\x06"; +exports.ZIP64_CENTRAL_DIRECTORY_LOCATOR = "PK\x06\x07"; +exports.ZIP64_CENTRAL_DIRECTORY_END = "PK\x06\x06"; +exports.DATA_DESCRIPTOR = "PK\x07\x08"; + +},{}],24:[function(require,module,exports){ +'use strict'; + +var GenericWorker = require('./GenericWorker'); +var utils = require('../utils'); + +/** + * A worker which convert chunks to a specified type. + * @constructor + * @param {String} destType the destination type. + */ +function ConvertWorker(destType) { + GenericWorker.call(this, "ConvertWorker to " + destType); + this.destType = destType; +} +utils.inherits(ConvertWorker, GenericWorker); + +/** + * @see GenericWorker.processChunk + */ +ConvertWorker.prototype.processChunk = function (chunk) { + this.push({ + data : utils.transformTo(this.destType, chunk.data), + meta : chunk.meta + }); +}; +module.exports = ConvertWorker; + +},{"../utils":32,"./GenericWorker":28}],25:[function(require,module,exports){ +'use strict'; + +var GenericWorker = require('./GenericWorker'); +var crc32 = require('../crc32'); +var utils = require('../utils'); + +/** + * A worker which calculate the crc32 of the data flowing through. + * @constructor + */ +function Crc32Probe() { + GenericWorker.call(this, "Crc32Probe"); + this.withStreamInfo("crc32", 0); +} +utils.inherits(Crc32Probe, GenericWorker); + +/** + * @see GenericWorker.processChunk + */ +Crc32Probe.prototype.processChunk = function (chunk) { + this.streamInfo.crc32 = crc32(chunk.data, this.streamInfo.crc32 || 0); + this.push(chunk); +}; +module.exports = Crc32Probe; + +},{"../crc32":4,"../utils":32,"./GenericWorker":28}],26:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var GenericWorker = require('./GenericWorker'); + +/** + * A worker which calculate the total length of the data flowing through. + * @constructor + * @param {String} propName the name used to expose the length + */ +function DataLengthProbe(propName) { + GenericWorker.call(this, "DataLengthProbe for " + propName); + this.propName = propName; + this.withStreamInfo(propName, 0); +} +utils.inherits(DataLengthProbe, GenericWorker); + +/** + * @see GenericWorker.processChunk + */ +DataLengthProbe.prototype.processChunk = function (chunk) { + if(chunk) { + var length = this.streamInfo[this.propName] || 0; + this.streamInfo[this.propName] = length + chunk.data.length; + } + GenericWorker.prototype.processChunk.call(this, chunk); +}; +module.exports = DataLengthProbe; + + +},{"../utils":32,"./GenericWorker":28}],27:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var GenericWorker = require('./GenericWorker'); + +// the size of the generated chunks +// TODO expose this as a public variable +var DEFAULT_BLOCK_SIZE = 16 * 1024; + +/** + * A worker that reads a content and emits chunks. + * @constructor + * @param {Promise} dataP the promise of the data to split + */ +function DataWorker(dataP) { + GenericWorker.call(this, "DataWorker"); + var self = this; + this.dataIsReady = false; + this.index = 0; + this.max = 0; + this.data = null; + this.type = ""; + + this._tickScheduled = false; + + dataP.then(function (data) { + self.dataIsReady = true; + self.data = data; + self.max = data && data.length || 0; + self.type = utils.getTypeOf(data); + if(!self.isPaused) { + self._tickAndRepeat(); + } + }, function (e) { + self.error(e); + }); +} + +utils.inherits(DataWorker, GenericWorker); + +/** + * @see GenericWorker.cleanUp + */ +DataWorker.prototype.cleanUp = function () { + GenericWorker.prototype.cleanUp.call(this); + this.data = null; +}; + +/** + * @see GenericWorker.resume + */ +DataWorker.prototype.resume = function () { + if(!GenericWorker.prototype.resume.call(this)) { + return false; + } + + if (!this._tickScheduled && this.dataIsReady) { + this._tickScheduled = true; + utils.delay(this._tickAndRepeat, [], this); + } + return true; +}; + +/** + * Trigger a tick a schedule an other call to this function. + */ +DataWorker.prototype._tickAndRepeat = function() { + this._tickScheduled = false; + if(this.isPaused || this.isFinished) { + return; + } + this._tick(); + if(!this.isFinished) { + utils.delay(this._tickAndRepeat, [], this); + this._tickScheduled = true; + } +}; + +/** + * Read and push a chunk. + */ +DataWorker.prototype._tick = function() { + + if(this.isPaused || this.isFinished) { + return false; + } + + var size = DEFAULT_BLOCK_SIZE; + var data = null, nextIndex = Math.min(this.max, this.index + size); + if (this.index >= this.max) { + // EOF + return this.end(); + } else { + switch(this.type) { + case "string": + data = this.data.substring(this.index, nextIndex); + break; + case "uint8array": + data = this.data.subarray(this.index, nextIndex); + break; + case "array": + case "nodebuffer": + data = this.data.slice(this.index, nextIndex); + break; + } + this.index = nextIndex; + return this.push({ + data : data, + meta : { + percent : this.max ? this.index / this.max * 100 : 0 + } + }); + } +}; + +module.exports = DataWorker; + +},{"../utils":32,"./GenericWorker":28}],28:[function(require,module,exports){ +'use strict'; + +/** + * A worker that does nothing but passing chunks to the next one. This is like + * a nodejs stream but with some differences. On the good side : + * - it works on IE 6-9 without any issue / polyfill + * - it weights less than the full dependencies bundled with browserify + * - it forwards errors (no need to declare an error handler EVERYWHERE) + * + * A chunk is an object with 2 attributes : `meta` and `data`. The former is an + * object containing anything (`percent` for example), see each worker for more + * details. The latter is the real data (String, Uint8Array, etc). + * + * @constructor + * @param {String} name the name of the stream (mainly used for debugging purposes) + */ +function GenericWorker(name) { + // the name of the worker + this.name = name || "default"; + // an object containing metadata about the workers chain + this.streamInfo = {}; + // an error which happened when the worker was paused + this.generatedError = null; + // an object containing metadata to be merged by this worker into the general metadata + this.extraStreamInfo = {}; + // true if the stream is paused (and should not do anything), false otherwise + this.isPaused = true; + // true if the stream is finished (and should not do anything), false otherwise + this.isFinished = false; + // true if the stream is locked to prevent further structure updates (pipe), false otherwise + this.isLocked = false; + // the event listeners + this._listeners = { + 'data':[], + 'end':[], + 'error':[] + }; + // the previous worker, if any + this.previous = null; +} + +GenericWorker.prototype = { + /** + * Push a chunk to the next workers. + * @param {Object} chunk the chunk to push + */ + push : function (chunk) { + this.emit("data", chunk); + }, + /** + * End the stream. + * @return {Boolean} true if this call ended the worker, false otherwise. + */ + end : function () { + if (this.isFinished) { + return false; + } + + this.flush(); + try { + this.emit("end"); + this.cleanUp(); + this.isFinished = true; + } catch (e) { + this.emit("error", e); + } + return true; + }, + /** + * End the stream with an error. + * @param {Error} e the error which caused the premature end. + * @return {Boolean} true if this call ended the worker with an error, false otherwise. + */ + error : function (e) { + if (this.isFinished) { + return false; + } + + if(this.isPaused) { + this.generatedError = e; + } else { + this.isFinished = true; + + this.emit("error", e); + + // in the workers chain exploded in the middle of the chain, + // the error event will go downward but we also need to notify + // workers upward that there has been an error. + if(this.previous) { + this.previous.error(e); + } + + this.cleanUp(); + } + return true; + }, + /** + * Add a callback on an event. + * @param {String} name the name of the event (data, end, error) + * @param {Function} listener the function to call when the event is triggered + * @return {GenericWorker} the current object for chainability + */ + on : function (name, listener) { + this._listeners[name].push(listener); + return this; + }, + /** + * Clean any references when a worker is ending. + */ + cleanUp : function () { + this.streamInfo = this.generatedError = this.extraStreamInfo = null; + this._listeners = []; + }, + /** + * Trigger an event. This will call registered callback with the provided arg. + * @param {String} name the name of the event (data, end, error) + * @param {Object} arg the argument to call the callback with. + */ + emit : function (name, arg) { + if (this._listeners[name]) { + for(var i = 0; i < this._listeners[name].length; i++) { + this._listeners[name][i].call(this, arg); + } + } + }, + /** + * Chain a worker with an other. + * @param {Worker} next the worker receiving events from the current one. + * @return {worker} the next worker for chainability + */ + pipe : function (next) { + return next.registerPrevious(this); + }, + /** + * Same as `pipe` in the other direction. + * Using an API with `pipe(next)` is very easy. + * Implementing the API with the point of view of the next one registering + * a source is easier, see the ZipFileWorker. + * @param {Worker} previous the previous worker, sending events to this one + * @return {Worker} the current worker for chainability + */ + registerPrevious : function (previous) { + if (this.isLocked) { + throw new Error("The stream '" + this + "' has already been used."); + } + + // sharing the streamInfo... + this.streamInfo = previous.streamInfo; + // ... and adding our own bits + this.mergeStreamInfo(); + this.previous = previous; + var self = this; + previous.on('data', function (chunk) { + self.processChunk(chunk); + }); + previous.on('end', function () { + self.end(); + }); + previous.on('error', function (e) { + self.error(e); + }); + return this; + }, + /** + * Pause the stream so it doesn't send events anymore. + * @return {Boolean} true if this call paused the worker, false otherwise. + */ + pause : function () { + if(this.isPaused || this.isFinished) { + return false; + } + this.isPaused = true; + + if(this.previous) { + this.previous.pause(); + } + return true; + }, + /** + * Resume a paused stream. + * @return {Boolean} true if this call resumed the worker, false otherwise. + */ + resume : function () { + if(!this.isPaused || this.isFinished) { + return false; + } + this.isPaused = false; + + // if true, the worker tried to resume but failed + var withError = false; + if(this.generatedError) { + this.error(this.generatedError); + withError = true; + } + if(this.previous) { + this.previous.resume(); + } + + return !withError; + }, + /** + * Flush any remaining bytes as the stream is ending. + */ + flush : function () {}, + /** + * Process a chunk. This is usually the method overridden. + * @param {Object} chunk the chunk to process. + */ + processChunk : function(chunk) { + this.push(chunk); + }, + /** + * Add a key/value to be added in the workers chain streamInfo once activated. + * @param {String} key the key to use + * @param {Object} value the associated value + * @return {Worker} the current worker for chainability + */ + withStreamInfo : function (key, value) { + this.extraStreamInfo[key] = value; + this.mergeStreamInfo(); + return this; + }, + /** + * Merge this worker's streamInfo into the chain's streamInfo. + */ + mergeStreamInfo : function () { + for(var key in this.extraStreamInfo) { + if (!this.extraStreamInfo.hasOwnProperty(key)) { + continue; + } + this.streamInfo[key] = this.extraStreamInfo[key]; + } + }, + + /** + * Lock the stream to prevent further updates on the workers chain. + * After calling this method, all calls to pipe will fail. + */ + lock: function () { + if (this.isLocked) { + throw new Error("The stream '" + this + "' has already been used."); + } + this.isLocked = true; + if (this.previous) { + this.previous.lock(); + } + }, + + /** + * + * Pretty print the workers chain. + */ + toString : function () { + var me = "Worker " + this.name; + if (this.previous) { + return this.previous + " -> " + me; + } else { + return me; + } + } +}; + +module.exports = GenericWorker; + +},{}],29:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var ConvertWorker = require('./ConvertWorker'); +var GenericWorker = require('./GenericWorker'); +var base64 = require('../base64'); +var support = require("../support"); +var external = require("../external"); + +var NodejsStreamOutputAdapter = null; +if (support.nodestream) { + try { + NodejsStreamOutputAdapter = require('../nodejs/NodejsStreamOutputAdapter'); + } catch(e) {} +} + +/** + * Apply the final transformation of the data. If the user wants a Blob for + * example, it's easier to work with an U8intArray and finally do the + * ArrayBuffer/Blob conversion. + * @param {String} type the name of the final type + * @param {String|Uint8Array|Buffer} content the content to transform + * @param {String} mimeType the mime type of the content, if applicable. + * @return {String|Uint8Array|ArrayBuffer|Buffer|Blob} the content in the right format. + */ +function transformZipOutput(type, content, mimeType) { + switch(type) { + case "blob" : + return utils.newBlob(utils.transformTo("arraybuffer", content), mimeType); + case "base64" : + return base64.encode(content); + default : + return utils.transformTo(type, content); + } +} + +/** + * Concatenate an array of data of the given type. + * @param {String} type the type of the data in the given array. + * @param {Array} dataArray the array containing the data chunks to concatenate + * @return {String|Uint8Array|Buffer} the concatenated data + * @throws Error if the asked type is unsupported + */ +function concat (type, dataArray) { + var i, index = 0, res = null, totalLength = 0; + for(i = 0; i < dataArray.length; i++) { + totalLength += dataArray[i].length; + } + switch(type) { + case "string": + return dataArray.join(""); + case "array": + return Array.prototype.concat.apply([], dataArray); + case "uint8array": + res = new Uint8Array(totalLength); + for(i = 0; i < dataArray.length; i++) { + res.set(dataArray[i], index); + index += dataArray[i].length; + } + return res; + case "nodebuffer": + return Buffer.concat(dataArray); + default: + throw new Error("concat : unsupported type '" + type + "'"); + } +} + +/** + * Listen a StreamHelper, accumulate its content and concatenate it into a + * complete block. + * @param {StreamHelper} helper the helper to use. + * @param {Function} updateCallback a callback called on each update. Called + * with one arg : + * - the metadata linked to the update received. + * @return Promise the promise for the accumulation. + */ +function accumulate(helper, updateCallback) { + return new external.Promise(function (resolve, reject){ + var dataArray = []; + var chunkType = helper._internalType, + resultType = helper._outputType, + mimeType = helper._mimeType; + helper + .on('data', function (data, meta) { + dataArray.push(data); + if(updateCallback) { + updateCallback(meta); + } + }) + .on('error', function(err) { + dataArray = []; + reject(err); + }) + .on('end', function (){ + try { + var result = transformZipOutput(resultType, concat(chunkType, dataArray), mimeType); + resolve(result); + } catch (e) { + reject(e); + } + dataArray = []; + }) + .resume(); + }); +} + +/** + * An helper to easily use workers outside of JSZip. + * @constructor + * @param {Worker} worker the worker to wrap + * @param {String} outputType the type of data expected by the use + * @param {String} mimeType the mime type of the content, if applicable. + */ +function StreamHelper(worker, outputType, mimeType) { + var internalType = outputType; + switch(outputType) { + case "blob": + case "arraybuffer": + internalType = "uint8array"; + break; + case "base64": + internalType = "string"; + break; + } + + try { + // the type used internally + this._internalType = internalType; + // the type used to output results + this._outputType = outputType; + // the mime type + this._mimeType = mimeType; + utils.checkSupport(internalType); + this._worker = worker.pipe(new ConvertWorker(internalType)); + // the last workers can be rewired without issues but we need to + // prevent any updates on previous workers. + worker.lock(); + } catch(e) { + this._worker = new GenericWorker("error"); + this._worker.error(e); + } +} + +StreamHelper.prototype = { + /** + * Listen a StreamHelper, accumulate its content and concatenate it into a + * complete block. + * @param {Function} updateCb the update callback. + * @return Promise the promise for the accumulation. + */ + accumulate : function (updateCb) { + return accumulate(this, updateCb); + }, + /** + * Add a listener on an event triggered on a stream. + * @param {String} evt the name of the event + * @param {Function} fn the listener + * @return {StreamHelper} the current helper. + */ + on : function (evt, fn) { + var self = this; + + if(evt === "data") { + this._worker.on(evt, function (chunk) { + fn.call(self, chunk.data, chunk.meta); + }); + } else { + this._worker.on(evt, function () { + utils.delay(fn, arguments, self); + }); + } + return this; + }, + /** + * Resume the flow of chunks. + * @return {StreamHelper} the current helper. + */ + resume : function () { + utils.delay(this._worker.resume, [], this._worker); + return this; + }, + /** + * Pause the flow of chunks. + * @return {StreamHelper} the current helper. + */ + pause : function () { + this._worker.pause(); + return this; + }, + /** + * Return a nodejs stream for this helper. + * @param {Function} updateCb the update callback. + * @return {NodejsStreamOutputAdapter} the nodejs stream. + */ + toNodejsStream : function (updateCb) { + utils.checkSupport("nodestream"); + if (this._outputType !== "nodebuffer") { + // an object stream containing blob/arraybuffer/uint8array/string + // is strange and I don't know if it would be useful. + // I you find this comment and have a good usecase, please open a + // bug report ! + throw new Error(this._outputType + " is not supported by this method"); + } + + return new NodejsStreamOutputAdapter(this, { + objectMode : this._outputType !== "nodebuffer" + }, updateCb); + } +}; + + +module.exports = StreamHelper; + +},{"../base64":1,"../external":6,"../nodejs/NodejsStreamOutputAdapter":13,"../support":30,"../utils":32,"./ConvertWorker":24,"./GenericWorker":28}],30:[function(require,module,exports){ +'use strict'; + +exports.base64 = true; +exports.array = true; +exports.string = true; +exports.arraybuffer = typeof ArrayBuffer !== "undefined" && typeof Uint8Array !== "undefined"; +exports.nodebuffer = typeof Buffer !== "undefined"; +// contains true if JSZip can read/generate Uint8Array, false otherwise. +exports.uint8array = typeof Uint8Array !== "undefined"; + +if (typeof ArrayBuffer === "undefined") { + exports.blob = false; +} +else { + var buffer = new ArrayBuffer(0); + try { + exports.blob = new Blob([buffer], { + type: "application/zip" + }).size === 0; + } + catch (e) { + try { + var Builder = self.BlobBuilder || self.WebKitBlobBuilder || self.MozBlobBuilder || self.MSBlobBuilder; + var builder = new Builder(); + builder.append(buffer); + exports.blob = builder.getBlob('application/zip').size === 0; + } + catch (e) { + exports.blob = false; + } + } +} + +try { + exports.nodestream = !!require('readable-stream').Readable; +} catch(e) { + exports.nodestream = false; +} + +},{"readable-stream":16}],31:[function(require,module,exports){ +'use strict'; + +var utils = require('./utils'); +var support = require('./support'); +var nodejsUtils = require('./nodejsUtils'); +var GenericWorker = require('./stream/GenericWorker'); + +/** + * The following functions come from pako, from pako/lib/utils/strings + * released under the MIT license, see pako https://github.com/nodeca/pako/ + */ + +// Table with utf8 lengths (calculated by first byte of sequence) +// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS, +// because max possible codepoint is 0x10ffff +var _utf8len = new Array(256); +for (var i=0; i<256; i++) { + _utf8len[i] = (i >= 252 ? 6 : i >= 248 ? 5 : i >= 240 ? 4 : i >= 224 ? 3 : i >= 192 ? 2 : 1); +} +_utf8len[254]=_utf8len[254]=1; // Invalid sequence start + +// convert string to array (typed, when possible) +var string2buf = function (str) { + var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0; + + // count binary size + for (m_pos = 0; m_pos < str_len; m_pos++) { + c = str.charCodeAt(m_pos); + if ((c & 0xfc00) === 0xd800 && (m_pos+1 < str_len)) { + c2 = str.charCodeAt(m_pos+1); + if ((c2 & 0xfc00) === 0xdc00) { + c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00); + m_pos++; + } + } + buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4; + } + + // allocate buffer + if (support.uint8array) { + buf = new Uint8Array(buf_len); + } else { + buf = new Array(buf_len); + } + + // convert + for (i=0, m_pos = 0; i < buf_len; m_pos++) { + c = str.charCodeAt(m_pos); + if ((c & 0xfc00) === 0xd800 && (m_pos+1 < str_len)) { + c2 = str.charCodeAt(m_pos+1); + if ((c2 & 0xfc00) === 0xdc00) { + c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00); + m_pos++; + } + } + if (c < 0x80) { + /* one byte */ + buf[i++] = c; + } else if (c < 0x800) { + /* two bytes */ + buf[i++] = 0xC0 | (c >>> 6); + buf[i++] = 0x80 | (c & 0x3f); + } else if (c < 0x10000) { + /* three bytes */ + buf[i++] = 0xE0 | (c >>> 12); + buf[i++] = 0x80 | (c >>> 6 & 0x3f); + buf[i++] = 0x80 | (c & 0x3f); + } else { + /* four bytes */ + buf[i++] = 0xf0 | (c >>> 18); + buf[i++] = 0x80 | (c >>> 12 & 0x3f); + buf[i++] = 0x80 | (c >>> 6 & 0x3f); + buf[i++] = 0x80 | (c & 0x3f); + } + } + + return buf; +}; + +// Calculate max possible position in utf8 buffer, +// that will not break sequence. If that's not possible +// - (very small limits) return max size as is. +// +// buf[] - utf8 bytes array +// max - length limit (mandatory); +var utf8border = function(buf, max) { + var pos; + + max = max || buf.length; + if (max > buf.length) { max = buf.length; } + + // go back from last position, until start of sequence found + pos = max-1; + while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; } + + // Fuckup - very small and broken sequence, + // return max, because we should return something anyway. + if (pos < 0) { return max; } + + // If we came to start of buffer - that means vuffer is too small, + // return max too. + if (pos === 0) { return max; } + + return (pos + _utf8len[buf[pos]] > max) ? pos : max; +}; + +// convert array to string +var buf2string = function (buf) { + var str, i, out, c, c_len; + var len = buf.length; + + // Reserve max possible length (2 words per char) + // NB: by unknown reasons, Array is significantly faster for + // String.fromCharCode.apply than Uint16Array. + var utf16buf = new Array(len*2); + + for (out=0, i=0; i 4) { utf16buf[out++] = 0xfffd; i += c_len-1; continue; } + + // apply mask on first byte + c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07; + // join the rest + while (c_len > 1 && i < len) { + c = (c << 6) | (buf[i++] & 0x3f); + c_len--; + } + + // terminated by end of string? + if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; } + + if (c < 0x10000) { + utf16buf[out++] = c; + } else { + c -= 0x10000; + utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff); + utf16buf[out++] = 0xdc00 | (c & 0x3ff); + } + } + + // shrinkBuf(utf16buf, out) + if (utf16buf.length !== out) { + if(utf16buf.subarray) { + utf16buf = utf16buf.subarray(0, out); + } else { + utf16buf.length = out; + } + } + + // return String.fromCharCode.apply(null, utf16buf); + return utils.applyFromCharCode(utf16buf); +}; + + +// That's all for the pako functions. + + +/** + * Transform a javascript string into an array (typed if possible) of bytes, + * UTF-8 encoded. + * @param {String} str the string to encode + * @return {Array|Uint8Array|Buffer} the UTF-8 encoded string. + */ +exports.utf8encode = function utf8encode(str) { + if (support.nodebuffer) { + return nodejsUtils.newBufferFrom(str, "utf-8"); + } + + return string2buf(str); +}; + + +/** + * Transform a bytes array (or a representation) representing an UTF-8 encoded + * string into a javascript string. + * @param {Array|Uint8Array|Buffer} buf the data de decode + * @return {String} the decoded string. + */ +exports.utf8decode = function utf8decode(buf) { + if (support.nodebuffer) { + return utils.transformTo("nodebuffer", buf).toString("utf-8"); + } + + buf = utils.transformTo(support.uint8array ? "uint8array" : "array", buf); + + return buf2string(buf); +}; + +/** + * A worker to decode utf8 encoded binary chunks into string chunks. + * @constructor + */ +function Utf8DecodeWorker() { + GenericWorker.call(this, "utf-8 decode"); + // the last bytes if a chunk didn't end with a complete codepoint. + this.leftOver = null; +} +utils.inherits(Utf8DecodeWorker, GenericWorker); + +/** + * @see GenericWorker.processChunk + */ +Utf8DecodeWorker.prototype.processChunk = function (chunk) { + + var data = utils.transformTo(support.uint8array ? "uint8array" : "array", chunk.data); + + // 1st step, re-use what's left of the previous chunk + if (this.leftOver && this.leftOver.length) { + if(support.uint8array) { + var previousData = data; + data = new Uint8Array(previousData.length + this.leftOver.length); + data.set(this.leftOver, 0); + data.set(previousData, this.leftOver.length); + } else { + data = this.leftOver.concat(data); + } + this.leftOver = null; + } + + var nextBoundary = utf8border(data); + var usableData = data; + if (nextBoundary !== data.length) { + if (support.uint8array) { + usableData = data.subarray(0, nextBoundary); + this.leftOver = data.subarray(nextBoundary, data.length); + } else { + usableData = data.slice(0, nextBoundary); + this.leftOver = data.slice(nextBoundary, data.length); + } + } + + this.push({ + data : exports.utf8decode(usableData), + meta : chunk.meta + }); +}; + +/** + * @see GenericWorker.flush + */ +Utf8DecodeWorker.prototype.flush = function () { + if(this.leftOver && this.leftOver.length) { + this.push({ + data : exports.utf8decode(this.leftOver), + meta : {} + }); + this.leftOver = null; + } +}; +exports.Utf8DecodeWorker = Utf8DecodeWorker; + +/** + * A worker to endcode string chunks into utf8 encoded binary chunks. + * @constructor + */ +function Utf8EncodeWorker() { + GenericWorker.call(this, "utf-8 encode"); +} +utils.inherits(Utf8EncodeWorker, GenericWorker); + +/** + * @see GenericWorker.processChunk + */ +Utf8EncodeWorker.prototype.processChunk = function (chunk) { + this.push({ + data : exports.utf8encode(chunk.data), + meta : chunk.meta + }); +}; +exports.Utf8EncodeWorker = Utf8EncodeWorker; + +},{"./nodejsUtils":14,"./stream/GenericWorker":28,"./support":30,"./utils":32}],32:[function(require,module,exports){ +'use strict'; + +var support = require('./support'); +var base64 = require('./base64'); +var nodejsUtils = require('./nodejsUtils'); +var setImmediate = require('set-immediate-shim'); +var external = require("./external"); + + +/** + * Convert a string that pass as a "binary string": it should represent a byte + * array but may have > 255 char codes. Be sure to take only the first byte + * and returns the byte array. + * @param {String} str the string to transform. + * @return {Array|Uint8Array} the string in a binary format. + */ +function string2binary(str) { + var result = null; + if (support.uint8array) { + result = new Uint8Array(str.length); + } else { + result = new Array(str.length); + } + return stringToArrayLike(str, result); +} + +/** + * Create a new blob with the given content and the given type. + * @param {String|ArrayBuffer} part the content to put in the blob. DO NOT use + * an Uint8Array because the stock browser of android 4 won't accept it (it + * will be silently converted to a string, "[object Uint8Array]"). + * + * Use only ONE part to build the blob to avoid a memory leak in IE11 / Edge: + * when a large amount of Array is used to create the Blob, the amount of + * memory consumed is nearly 100 times the original data amount. + * + * @param {String} type the mime type of the blob. + * @return {Blob} the created blob. + */ +exports.newBlob = function(part, type) { + exports.checkSupport("blob"); + + try { + // Blob constructor + return new Blob([part], { + type: type + }); + } + catch (e) { + + try { + // deprecated, browser only, old way + var Builder = self.BlobBuilder || self.WebKitBlobBuilder || self.MozBlobBuilder || self.MSBlobBuilder; + var builder = new Builder(); + builder.append(part); + return builder.getBlob(type); + } + catch (e) { + + // well, fuck ?! + throw new Error("Bug : can't construct the Blob."); + } + } + + +}; +/** + * The identity function. + * @param {Object} input the input. + * @return {Object} the same input. + */ +function identity(input) { + return input; +} + +/** + * Fill in an array with a string. + * @param {String} str the string to use. + * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to fill in (will be mutated). + * @return {Array|ArrayBuffer|Uint8Array|Buffer} the updated array. + */ +function stringToArrayLike(str, array) { + for (var i = 0; i < str.length; ++i) { + array[i] = str.charCodeAt(i) & 0xFF; + } + return array; +} + +/** + * An helper for the function arrayLikeToString. + * This contains static information and functions that + * can be optimized by the browser JIT compiler. + */ +var arrayToStringHelper = { + /** + * Transform an array of int into a string, chunk by chunk. + * See the performances notes on arrayLikeToString. + * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform. + * @param {String} type the type of the array. + * @param {Integer} chunk the chunk size. + * @return {String} the resulting string. + * @throws Error if the chunk is too big for the stack. + */ + stringifyByChunk: function(array, type, chunk) { + var result = [], k = 0, len = array.length; + // shortcut + if (len <= chunk) { + return String.fromCharCode.apply(null, array); + } + while (k < len) { + if (type === "array" || type === "nodebuffer") { + result.push(String.fromCharCode.apply(null, array.slice(k, Math.min(k + chunk, len)))); + } + else { + result.push(String.fromCharCode.apply(null, array.subarray(k, Math.min(k + chunk, len)))); + } + k += chunk; + } + return result.join(""); + }, + /** + * Call String.fromCharCode on every item in the array. + * This is the naive implementation, which generate A LOT of intermediate string. + * This should be used when everything else fail. + * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform. + * @return {String} the result. + */ + stringifyByChar: function(array){ + var resultStr = ""; + for(var i = 0; i < array.length; i++) { + resultStr += String.fromCharCode(array[i]); + } + return resultStr; + }, + applyCanBeUsed : { + /** + * true if the browser accepts to use String.fromCharCode on Uint8Array + */ + uint8array : (function () { + try { + return support.uint8array && String.fromCharCode.apply(null, new Uint8Array(1)).length === 1; + } catch (e) { + return false; + } + })(), + /** + * true if the browser accepts to use String.fromCharCode on nodejs Buffer. + */ + nodebuffer : (function () { + try { + return support.nodebuffer && String.fromCharCode.apply(null, nodejsUtils.allocBuffer(1)).length === 1; + } catch (e) { + return false; + } + })() + } +}; + +/** + * Transform an array-like object to a string. + * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform. + * @return {String} the result. + */ +function arrayLikeToString(array) { + // Performances notes : + // -------------------- + // String.fromCharCode.apply(null, array) is the fastest, see + // see http://jsperf.com/converting-a-uint8array-to-a-string/2 + // but the stack is limited (and we can get huge arrays !). + // + // result += String.fromCharCode(array[i]); generate too many strings ! + // + // This code is inspired by http://jsperf.com/arraybuffer-to-string-apply-performance/2 + // TODO : we now have workers that split the work. Do we still need that ? + var chunk = 65536, + type = exports.getTypeOf(array), + canUseApply = true; + if (type === "uint8array") { + canUseApply = arrayToStringHelper.applyCanBeUsed.uint8array; + } else if (type === "nodebuffer") { + canUseApply = arrayToStringHelper.applyCanBeUsed.nodebuffer; + } + + if (canUseApply) { + while (chunk > 1) { + try { + return arrayToStringHelper.stringifyByChunk(array, type, chunk); + } catch (e) { + chunk = Math.floor(chunk / 2); + } + } + } + + // no apply or chunk error : slow and painful algorithm + // default browser on android 4.* + return arrayToStringHelper.stringifyByChar(array); +} + +exports.applyFromCharCode = arrayLikeToString; + + +/** + * Copy the data from an array-like to an other array-like. + * @param {Array|ArrayBuffer|Uint8Array|Buffer} arrayFrom the origin array. + * @param {Array|ArrayBuffer|Uint8Array|Buffer} arrayTo the destination array which will be mutated. + * @return {Array|ArrayBuffer|Uint8Array|Buffer} the updated destination array. + */ +function arrayLikeToArrayLike(arrayFrom, arrayTo) { + for (var i = 0; i < arrayFrom.length; i++) { + arrayTo[i] = arrayFrom[i]; + } + return arrayTo; +} + +// a matrix containing functions to transform everything into everything. +var transform = {}; + +// string to ? +transform["string"] = { + "string": identity, + "array": function(input) { + return stringToArrayLike(input, new Array(input.length)); + }, + "arraybuffer": function(input) { + return transform["string"]["uint8array"](input).buffer; + }, + "uint8array": function(input) { + return stringToArrayLike(input, new Uint8Array(input.length)); + }, + "nodebuffer": function(input) { + return stringToArrayLike(input, nodejsUtils.allocBuffer(input.length)); + } +}; + +// array to ? +transform["array"] = { + "string": arrayLikeToString, + "array": identity, + "arraybuffer": function(input) { + return (new Uint8Array(input)).buffer; + }, + "uint8array": function(input) { + return new Uint8Array(input); + }, + "nodebuffer": function(input) { + return nodejsUtils.newBufferFrom(input); + } +}; + +// arraybuffer to ? +transform["arraybuffer"] = { + "string": function(input) { + return arrayLikeToString(new Uint8Array(input)); + }, + "array": function(input) { + return arrayLikeToArrayLike(new Uint8Array(input), new Array(input.byteLength)); + }, + "arraybuffer": identity, + "uint8array": function(input) { + return new Uint8Array(input); + }, + "nodebuffer": function(input) { + return nodejsUtils.newBufferFrom(new Uint8Array(input)); + } +}; + +// uint8array to ? +transform["uint8array"] = { + "string": arrayLikeToString, + "array": function(input) { + return arrayLikeToArrayLike(input, new Array(input.length)); + }, + "arraybuffer": function(input) { + return input.buffer; + }, + "uint8array": identity, + "nodebuffer": function(input) { + return nodejsUtils.newBufferFrom(input); + } +}; + +// nodebuffer to ? +transform["nodebuffer"] = { + "string": arrayLikeToString, + "array": function(input) { + return arrayLikeToArrayLike(input, new Array(input.length)); + }, + "arraybuffer": function(input) { + return transform["nodebuffer"]["uint8array"](input).buffer; + }, + "uint8array": function(input) { + return arrayLikeToArrayLike(input, new Uint8Array(input.length)); + }, + "nodebuffer": identity +}; + +/** + * Transform an input into any type. + * The supported output type are : string, array, uint8array, arraybuffer, nodebuffer. + * If no output type is specified, the unmodified input will be returned. + * @param {String} outputType the output type. + * @param {String|Array|ArrayBuffer|Uint8Array|Buffer} input the input to convert. + * @throws {Error} an Error if the browser doesn't support the requested output type. + */ +exports.transformTo = function(outputType, input) { + if (!input) { + // undefined, null, etc + // an empty string won't harm. + input = ""; + } + if (!outputType) { + return input; + } + exports.checkSupport(outputType); + var inputType = exports.getTypeOf(input); + var result = transform[inputType][outputType](input); + return result; +}; + +/** + * Return the type of the input. + * The type will be in a format valid for JSZip.utils.transformTo : string, array, uint8array, arraybuffer. + * @param {Object} input the input to identify. + * @return {String} the (lowercase) type of the input. + */ +exports.getTypeOf = function(input) { + if (typeof input === "string") { + return "string"; + } + if (Object.prototype.toString.call(input) === "[object Array]") { + return "array"; + } + if (support.nodebuffer && nodejsUtils.isBuffer(input)) { + return "nodebuffer"; + } + if (support.uint8array && input instanceof Uint8Array) { + return "uint8array"; + } + if (support.arraybuffer && input instanceof ArrayBuffer) { + return "arraybuffer"; + } +}; + +/** + * Throw an exception if the type is not supported. + * @param {String} type the type to check. + * @throws {Error} an Error if the browser doesn't support the requested type. + */ +exports.checkSupport = function(type) { + var supported = support[type.toLowerCase()]; + if (!supported) { + throw new Error(type + " is not supported by this platform"); + } +}; + +exports.MAX_VALUE_16BITS = 65535; +exports.MAX_VALUE_32BITS = -1; // well, "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF" is parsed as -1 + +/** + * Prettify a string read as binary. + * @param {string} str the string to prettify. + * @return {string} a pretty string. + */ +exports.pretty = function(str) { + var res = '', + code, i; + for (i = 0; i < (str || "").length; i++) { + code = str.charCodeAt(i); + res += '\\x' + (code < 16 ? "0" : "") + code.toString(16).toUpperCase(); + } + return res; +}; + +/** + * Defer the call of a function. + * @param {Function} callback the function to call asynchronously. + * @param {Array} args the arguments to give to the callback. + */ +exports.delay = function(callback, args, self) { + setImmediate(function () { + callback.apply(self || null, args || []); + }); +}; + +/** + * Extends a prototype with an other, without calling a constructor with + * side effects. Inspired by nodejs' `utils.inherits` + * @param {Function} ctor the constructor to augment + * @param {Function} superCtor the parent constructor to use + */ +exports.inherits = function (ctor, superCtor) { + var Obj = function() {}; + Obj.prototype = superCtor.prototype; + ctor.prototype = new Obj(); +}; + +/** + * Merge the objects passed as parameters into a new one. + * @private + * @param {...Object} var_args All objects to merge. + * @return {Object} a new object with the data of the others. + */ +exports.extend = function() { + var result = {}, i, attr; + for (i = 0; i < arguments.length; i++) { // arguments is not enumerable in some browsers + for (attr in arguments[i]) { + if (arguments[i].hasOwnProperty(attr) && typeof result[attr] === "undefined") { + result[attr] = arguments[i][attr]; + } + } + } + return result; +}; + +/** + * Transform arbitrary content into a Promise. + * @param {String} name a name for the content being processed. + * @param {Object} inputData the content to process. + * @param {Boolean} isBinary true if the content is not an unicode string + * @param {Boolean} isOptimizedBinaryString true if the string content only has one byte per character. + * @param {Boolean} isBase64 true if the string content is encoded with base64. + * @return {Promise} a promise in a format usable by JSZip. + */ +exports.prepareContent = function(name, inputData, isBinary, isOptimizedBinaryString, isBase64) { + + // if inputData is already a promise, this flatten it. + var promise = external.Promise.resolve(inputData).then(function(data) { + + + var isBlob = support.blob && (data instanceof Blob || ['[object File]', '[object Blob]'].indexOf(Object.prototype.toString.call(data)) !== -1); + + if (isBlob && typeof FileReader !== "undefined") { + return new external.Promise(function (resolve, reject) { + var reader = new FileReader(); + + reader.onload = function(e) { + resolve(e.target.result); + }; + reader.onerror = function(e) { + reject(e.target.error); + }; + reader.readAsArrayBuffer(data); + }); + } else { + return data; + } + }); + + return promise.then(function(data) { + var dataType = exports.getTypeOf(data); + + if (!dataType) { + return external.Promise.reject( + new Error("Can't read the data of '" + name + "'. Is it " + + "in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?") + ); + } + // special case : it's way easier to work with Uint8Array than with ArrayBuffer + if (dataType === "arraybuffer") { + data = exports.transformTo("uint8array", data); + } else if (dataType === "string") { + if (isBase64) { + data = base64.decode(data); + } + else if (isBinary) { + // optimizedBinaryString === true means that the file has already been filtered with a 0xFF mask + if (isOptimizedBinaryString !== true) { + // this is a string, not in a base64 format. + // Be sure that this is a correct "binary string" + data = string2binary(data); + } + } + } + return data; + }); +}; + +},{"./base64":1,"./external":6,"./nodejsUtils":14,"./support":30,"set-immediate-shim":54}],33:[function(require,module,exports){ +'use strict'; +var readerFor = require('./reader/readerFor'); +var utils = require('./utils'); +var sig = require('./signature'); +var ZipEntry = require('./zipEntry'); +var utf8 = require('./utf8'); +var support = require('./support'); +// class ZipEntries {{{ +/** + * All the entries in the zip file. + * @constructor + * @param {Object} loadOptions Options for loading the stream. + */ +function ZipEntries(loadOptions) { + this.files = []; + this.loadOptions = loadOptions; +} +ZipEntries.prototype = { + /** + * Check that the reader is on the specified signature. + * @param {string} expectedSignature the expected signature. + * @throws {Error} if it is an other signature. + */ + checkSignature: function(expectedSignature) { + if (!this.reader.readAndCheckSignature(expectedSignature)) { + this.reader.index -= 4; + var signature = this.reader.readString(4); + throw new Error("Corrupted zip or bug: unexpected signature " + "(" + utils.pretty(signature) + ", expected " + utils.pretty(expectedSignature) + ")"); + } + }, + /** + * Check if the given signature is at the given index. + * @param {number} askedIndex the index to check. + * @param {string} expectedSignature the signature to expect. + * @return {boolean} true if the signature is here, false otherwise. + */ + isSignature: function(askedIndex, expectedSignature) { + var currentIndex = this.reader.index; + this.reader.setIndex(askedIndex); + var signature = this.reader.readString(4); + var result = signature === expectedSignature; + this.reader.setIndex(currentIndex); + return result; + }, + /** + * Read the end of the central directory. + */ + readBlockEndOfCentral: function() { + this.diskNumber = this.reader.readInt(2); + this.diskWithCentralDirStart = this.reader.readInt(2); + this.centralDirRecordsOnThisDisk = this.reader.readInt(2); + this.centralDirRecords = this.reader.readInt(2); + this.centralDirSize = this.reader.readInt(4); + this.centralDirOffset = this.reader.readInt(4); + + this.zipCommentLength = this.reader.readInt(2); + // warning : the encoding depends of the system locale + // On a linux machine with LANG=en_US.utf8, this field is utf8 encoded. + // On a windows machine, this field is encoded with the localized windows code page. + var zipComment = this.reader.readData(this.zipCommentLength); + var decodeParamType = support.uint8array ? "uint8array" : "array"; + // To get consistent behavior with the generation part, we will assume that + // this is utf8 encoded unless specified otherwise. + var decodeContent = utils.transformTo(decodeParamType, zipComment); + this.zipComment = this.loadOptions.decodeFileName(decodeContent); + }, + /** + * Read the end of the Zip 64 central directory. + * Not merged with the method readEndOfCentral : + * The end of central can coexist with its Zip64 brother, + * I don't want to read the wrong number of bytes ! + */ + readBlockZip64EndOfCentral: function() { + this.zip64EndOfCentralSize = this.reader.readInt(8); + this.reader.skip(4); + // this.versionMadeBy = this.reader.readString(2); + // this.versionNeeded = this.reader.readInt(2); + this.diskNumber = this.reader.readInt(4); + this.diskWithCentralDirStart = this.reader.readInt(4); + this.centralDirRecordsOnThisDisk = this.reader.readInt(8); + this.centralDirRecords = this.reader.readInt(8); + this.centralDirSize = this.reader.readInt(8); + this.centralDirOffset = this.reader.readInt(8); + + this.zip64ExtensibleData = {}; + var extraDataSize = this.zip64EndOfCentralSize - 44, + index = 0, + extraFieldId, + extraFieldLength, + extraFieldValue; + while (index < extraDataSize) { + extraFieldId = this.reader.readInt(2); + extraFieldLength = this.reader.readInt(4); + extraFieldValue = this.reader.readData(extraFieldLength); + this.zip64ExtensibleData[extraFieldId] = { + id: extraFieldId, + length: extraFieldLength, + value: extraFieldValue + }; + } + }, + /** + * Read the end of the Zip 64 central directory locator. + */ + readBlockZip64EndOfCentralLocator: function() { + this.diskWithZip64CentralDirStart = this.reader.readInt(4); + this.relativeOffsetEndOfZip64CentralDir = this.reader.readInt(8); + this.disksCount = this.reader.readInt(4); + if (this.disksCount > 1) { + throw new Error("Multi-volumes zip are not supported"); + } + }, + /** + * Read the local files, based on the offset read in the central part. + */ + readLocalFiles: function() { + var i, file; + for (i = 0; i < this.files.length; i++) { + file = this.files[i]; + this.reader.setIndex(file.localHeaderOffset); + this.checkSignature(sig.LOCAL_FILE_HEADER); + file.readLocalPart(this.reader); + file.handleUTF8(); + file.processAttributes(); + } + }, + /** + * Read the central directory. + */ + readCentralDir: function() { + var file; + + this.reader.setIndex(this.centralDirOffset); + while (this.reader.readAndCheckSignature(sig.CENTRAL_FILE_HEADER)) { + file = new ZipEntry({ + zip64: this.zip64 + }, this.loadOptions); + file.readCentralPart(this.reader); + this.files.push(file); + } + + if (this.centralDirRecords !== this.files.length) { + if (this.centralDirRecords !== 0 && this.files.length === 0) { + // We expected some records but couldn't find ANY. + // This is really suspicious, as if something went wrong. + throw new Error("Corrupted zip or bug: expected " + this.centralDirRecords + " records in central dir, got " + this.files.length); + } else { + // We found some records but not all. + // Something is wrong but we got something for the user: no error here. + // console.warn("expected", this.centralDirRecords, "records in central dir, got", this.files.length); + } + } + }, + /** + * Read the end of central directory. + */ + readEndOfCentral: function() { + var offset = this.reader.lastIndexOfSignature(sig.CENTRAL_DIRECTORY_END); + if (offset < 0) { + // Check if the content is a truncated zip or complete garbage. + // A "LOCAL_FILE_HEADER" is not required at the beginning (auto + // extractible zip for example) but it can give a good hint. + // If an ajax request was used without responseType, we will also + // get unreadable data. + var isGarbage = !this.isSignature(0, sig.LOCAL_FILE_HEADER); + + if (isGarbage) { + throw new Error("Can't find end of central directory : is this a zip file ? " + + "If it is, see https://stuk.github.io/jszip/documentation/howto/read_zip.html"); + } else { + throw new Error("Corrupted zip: can't find end of central directory"); + } + + } + this.reader.setIndex(offset); + var endOfCentralDirOffset = offset; + this.checkSignature(sig.CENTRAL_DIRECTORY_END); + this.readBlockEndOfCentral(); + + + /* extract from the zip spec : + 4) If one of the fields in the end of central directory + record is too small to hold required data, the field + should be set to -1 (0xFFFF or 0xFFFFFFFF) and the + ZIP64 format record should be created. + 5) The end of central directory record and the + Zip64 end of central directory locator record must + reside on the same disk when splitting or spanning + an archive. + */ + if (this.diskNumber === utils.MAX_VALUE_16BITS || this.diskWithCentralDirStart === utils.MAX_VALUE_16BITS || this.centralDirRecordsOnThisDisk === utils.MAX_VALUE_16BITS || this.centralDirRecords === utils.MAX_VALUE_16BITS || this.centralDirSize === utils.MAX_VALUE_32BITS || this.centralDirOffset === utils.MAX_VALUE_32BITS) { + this.zip64 = true; + + /* + Warning : the zip64 extension is supported, but ONLY if the 64bits integer read from + the zip file can fit into a 32bits integer. This cannot be solved : JavaScript represents + all numbers as 64-bit double precision IEEE 754 floating point numbers. + So, we have 53bits for integers and bitwise operations treat everything as 32bits. + see https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Bitwise_Operators + and http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf section 8.5 + */ + + // should look for a zip64 EOCD locator + offset = this.reader.lastIndexOfSignature(sig.ZIP64_CENTRAL_DIRECTORY_LOCATOR); + if (offset < 0) { + throw new Error("Corrupted zip: can't find the ZIP64 end of central directory locator"); + } + this.reader.setIndex(offset); + this.checkSignature(sig.ZIP64_CENTRAL_DIRECTORY_LOCATOR); + this.readBlockZip64EndOfCentralLocator(); + + // now the zip64 EOCD record + if (!this.isSignature(this.relativeOffsetEndOfZip64CentralDir, sig.ZIP64_CENTRAL_DIRECTORY_END)) { + // console.warn("ZIP64 end of central directory not where expected."); + this.relativeOffsetEndOfZip64CentralDir = this.reader.lastIndexOfSignature(sig.ZIP64_CENTRAL_DIRECTORY_END); + if (this.relativeOffsetEndOfZip64CentralDir < 0) { + throw new Error("Corrupted zip: can't find the ZIP64 end of central directory"); + } + } + this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir); + this.checkSignature(sig.ZIP64_CENTRAL_DIRECTORY_END); + this.readBlockZip64EndOfCentral(); + } + + var expectedEndOfCentralDirOffset = this.centralDirOffset + this.centralDirSize; + if (this.zip64) { + expectedEndOfCentralDirOffset += 20; // end of central dir 64 locator + expectedEndOfCentralDirOffset += 12 /* should not include the leading 12 bytes */ + this.zip64EndOfCentralSize; + } + + var extraBytes = endOfCentralDirOffset - expectedEndOfCentralDirOffset; + + if (extraBytes > 0) { + // console.warn(extraBytes, "extra bytes at beginning or within zipfile"); + if (this.isSignature(endOfCentralDirOffset, sig.CENTRAL_FILE_HEADER)) { + // The offsets seem wrong, but we have something at the specified offset. + // So… we keep it. + } else { + // the offset is wrong, update the "zero" of the reader + // this happens if data has been prepended (crx files for example) + this.reader.zero = extraBytes; + } + } else if (extraBytes < 0) { + throw new Error("Corrupted zip: missing " + Math.abs(extraBytes) + " bytes."); + } + }, + prepareReader: function(data) { + this.reader = readerFor(data); + }, + /** + * Read a zip file and create ZipEntries. + * @param {String|ArrayBuffer|Uint8Array|Buffer} data the binary string representing a zip file. + */ + load: function(data) { + this.prepareReader(data); + this.readEndOfCentral(); + this.readCentralDir(); + this.readLocalFiles(); + } +}; +// }}} end of ZipEntries +module.exports = ZipEntries; + +},{"./reader/readerFor":22,"./signature":23,"./support":30,"./utf8":31,"./utils":32,"./zipEntry":34}],34:[function(require,module,exports){ +'use strict'; +var readerFor = require('./reader/readerFor'); +var utils = require('./utils'); +var CompressedObject = require('./compressedObject'); +var crc32fn = require('./crc32'); +var utf8 = require('./utf8'); +var compressions = require('./compressions'); +var support = require('./support'); + +var MADE_BY_DOS = 0x00; +var MADE_BY_UNIX = 0x03; + +/** + * Find a compression registered in JSZip. + * @param {string} compressionMethod the method magic to find. + * @return {Object|null} the JSZip compression object, null if none found. + */ +var findCompression = function(compressionMethod) { + for (var method in compressions) { + if (!compressions.hasOwnProperty(method)) { + continue; + } + if (compressions[method].magic === compressionMethod) { + return compressions[method]; + } + } + return null; +}; + +// class ZipEntry {{{ +/** + * An entry in the zip file. + * @constructor + * @param {Object} options Options of the current file. + * @param {Object} loadOptions Options for loading the stream. + */ +function ZipEntry(options, loadOptions) { + this.options = options; + this.loadOptions = loadOptions; +} +ZipEntry.prototype = { + /** + * say if the file is encrypted. + * @return {boolean} true if the file is encrypted, false otherwise. + */ + isEncrypted: function() { + // bit 1 is set + return (this.bitFlag & 0x0001) === 0x0001; + }, + /** + * say if the file has utf-8 filename/comment. + * @return {boolean} true if the filename/comment is in utf-8, false otherwise. + */ + useUTF8: function() { + // bit 11 is set + return (this.bitFlag & 0x0800) === 0x0800; + }, + /** + * Read the local part of a zip file and add the info in this object. + * @param {DataReader} reader the reader to use. + */ + readLocalPart: function(reader) { + var compression, localExtraFieldsLength; + + // we already know everything from the central dir ! + // If the central dir data are false, we are doomed. + // On the bright side, the local part is scary : zip64, data descriptors, both, etc. + // The less data we get here, the more reliable this should be. + // Let's skip the whole header and dash to the data ! + reader.skip(22); + // in some zip created on windows, the filename stored in the central dir contains \ instead of /. + // Strangely, the filename here is OK. + // I would love to treat these zip files as corrupted (see http://www.info-zip.org/FAQ.html#backslashes + // or APPNOTE#4.4.17.1, "All slashes MUST be forward slashes '/'") but there are a lot of bad zip generators... + // Search "unzip mismatching "local" filename continuing with "central" filename version" on + // the internet. + // + // I think I see the logic here : the central directory is used to display + // content and the local directory is used to extract the files. Mixing / and \ + // may be used to display \ to windows users and use / when extracting the files. + // Unfortunately, this lead also to some issues : http://seclists.org/fulldisclosure/2009/Sep/394 + this.fileNameLength = reader.readInt(2); + localExtraFieldsLength = reader.readInt(2); // can't be sure this will be the same as the central dir + // the fileName is stored as binary data, the handleUTF8 method will take care of the encoding. + this.fileName = reader.readData(this.fileNameLength); + reader.skip(localExtraFieldsLength); + + if (this.compressedSize === -1 || this.uncompressedSize === -1) { + throw new Error("Bug or corrupted zip : didn't get enough information from the central directory " + "(compressedSize === -1 || uncompressedSize === -1)"); + } + + compression = findCompression(this.compressionMethod); + if (compression === null) { // no compression found + throw new Error("Corrupted zip : compression " + utils.pretty(this.compressionMethod) + " unknown (inner file : " + utils.transformTo("string", this.fileName) + ")"); + } + this.decompressed = new CompressedObject(this.compressedSize, this.uncompressedSize, this.crc32, compression, reader.readData(this.compressedSize)); + }, + + /** + * Read the central part of a zip file and add the info in this object. + * @param {DataReader} reader the reader to use. + */ + readCentralPart: function(reader) { + this.versionMadeBy = reader.readInt(2); + reader.skip(2); + // this.versionNeeded = reader.readInt(2); + this.bitFlag = reader.readInt(2); + this.compressionMethod = reader.readString(2); + this.date = reader.readDate(); + this.crc32 = reader.readInt(4); + this.compressedSize = reader.readInt(4); + this.uncompressedSize = reader.readInt(4); + var fileNameLength = reader.readInt(2); + this.extraFieldsLength = reader.readInt(2); + this.fileCommentLength = reader.readInt(2); + this.diskNumberStart = reader.readInt(2); + this.internalFileAttributes = reader.readInt(2); + this.externalFileAttributes = reader.readInt(4); + this.localHeaderOffset = reader.readInt(4); + + if (this.isEncrypted()) { + throw new Error("Encrypted zip are not supported"); + } + + // will be read in the local part, see the comments there + reader.skip(fileNameLength); + this.readExtraFields(reader); + this.parseZIP64ExtraField(reader); + this.fileComment = reader.readData(this.fileCommentLength); + }, + + /** + * Parse the external file attributes and get the unix/dos permissions. + */ + processAttributes: function () { + this.unixPermissions = null; + this.dosPermissions = null; + var madeBy = this.versionMadeBy >> 8; + + // Check if we have the DOS directory flag set. + // We look for it in the DOS and UNIX permissions + // but some unknown platform could set it as a compatibility flag. + this.dir = this.externalFileAttributes & 0x0010 ? true : false; + + if(madeBy === MADE_BY_DOS) { + // first 6 bits (0 to 5) + this.dosPermissions = this.externalFileAttributes & 0x3F; + } + + if(madeBy === MADE_BY_UNIX) { + this.unixPermissions = (this.externalFileAttributes >> 16) & 0xFFFF; + // the octal permissions are in (this.unixPermissions & 0x01FF).toString(8); + } + + // fail safe : if the name ends with a / it probably means a folder + if (!this.dir && this.fileNameStr.slice(-1) === '/') { + this.dir = true; + } + }, + + /** + * Parse the ZIP64 extra field and merge the info in the current ZipEntry. + * @param {DataReader} reader the reader to use. + */ + parseZIP64ExtraField: function(reader) { + + if (!this.extraFields[0x0001]) { + return; + } + + // should be something, preparing the extra reader + var extraReader = readerFor(this.extraFields[0x0001].value); + + // I really hope that these 64bits integer can fit in 32 bits integer, because js + // won't let us have more. + if (this.uncompressedSize === utils.MAX_VALUE_32BITS) { + this.uncompressedSize = extraReader.readInt(8); + } + if (this.compressedSize === utils.MAX_VALUE_32BITS) { + this.compressedSize = extraReader.readInt(8); + } + if (this.localHeaderOffset === utils.MAX_VALUE_32BITS) { + this.localHeaderOffset = extraReader.readInt(8); + } + if (this.diskNumberStart === utils.MAX_VALUE_32BITS) { + this.diskNumberStart = extraReader.readInt(4); + } + }, + /** + * Read the central part of a zip file and add the info in this object. + * @param {DataReader} reader the reader to use. + */ + readExtraFields: function(reader) { + var end = reader.index + this.extraFieldsLength, + extraFieldId, + extraFieldLength, + extraFieldValue; + + if (!this.extraFields) { + this.extraFields = {}; + } + + while (reader.index + 4 < end) { + extraFieldId = reader.readInt(2); + extraFieldLength = reader.readInt(2); + extraFieldValue = reader.readData(extraFieldLength); + + this.extraFields[extraFieldId] = { + id: extraFieldId, + length: extraFieldLength, + value: extraFieldValue + }; + } + + reader.setIndex(end); + }, + /** + * Apply an UTF8 transformation if needed. + */ + handleUTF8: function() { + var decodeParamType = support.uint8array ? "uint8array" : "array"; + if (this.useUTF8()) { + this.fileNameStr = utf8.utf8decode(this.fileName); + this.fileCommentStr = utf8.utf8decode(this.fileComment); + } else { + var upath = this.findExtraFieldUnicodePath(); + if (upath !== null) { + this.fileNameStr = upath; + } else { + // ASCII text or unsupported code page + var fileNameByteArray = utils.transformTo(decodeParamType, this.fileName); + this.fileNameStr = this.loadOptions.decodeFileName(fileNameByteArray); + } + + var ucomment = this.findExtraFieldUnicodeComment(); + if (ucomment !== null) { + this.fileCommentStr = ucomment; + } else { + // ASCII text or unsupported code page + var commentByteArray = utils.transformTo(decodeParamType, this.fileComment); + this.fileCommentStr = this.loadOptions.decodeFileName(commentByteArray); + } + } + }, + + /** + * Find the unicode path declared in the extra field, if any. + * @return {String} the unicode path, null otherwise. + */ + findExtraFieldUnicodePath: function() { + var upathField = this.extraFields[0x7075]; + if (upathField) { + var extraReader = readerFor(upathField.value); + + // wrong version + if (extraReader.readInt(1) !== 1) { + return null; + } + + // the crc of the filename changed, this field is out of date. + if (crc32fn(this.fileName) !== extraReader.readInt(4)) { + return null; + } + + return utf8.utf8decode(extraReader.readData(upathField.length - 5)); + } + return null; + }, + + /** + * Find the unicode comment declared in the extra field, if any. + * @return {String} the unicode comment, null otherwise. + */ + findExtraFieldUnicodeComment: function() { + var ucommentField = this.extraFields[0x6375]; + if (ucommentField) { + var extraReader = readerFor(ucommentField.value); + + // wrong version + if (extraReader.readInt(1) !== 1) { + return null; + } + + // the crc of the comment changed, this field is out of date. + if (crc32fn(this.fileComment) !== extraReader.readInt(4)) { + return null; + } + + return utf8.utf8decode(extraReader.readData(ucommentField.length - 5)); + } + return null; + } +}; +module.exports = ZipEntry; + +},{"./compressedObject":2,"./compressions":3,"./crc32":4,"./reader/readerFor":22,"./support":30,"./utf8":31,"./utils":32}],35:[function(require,module,exports){ +'use strict'; + +var StreamHelper = require('./stream/StreamHelper'); +var DataWorker = require('./stream/DataWorker'); +var utf8 = require('./utf8'); +var CompressedObject = require('./compressedObject'); +var GenericWorker = require('./stream/GenericWorker'); + +/** + * A simple object representing a file in the zip file. + * @constructor + * @param {string} name the name of the file + * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data + * @param {Object} options the options of the file + */ +var ZipObject = function(name, data, options) { + this.name = name; + this.dir = options.dir; + this.date = options.date; + this.comment = options.comment; + this.unixPermissions = options.unixPermissions; + this.dosPermissions = options.dosPermissions; + + this._data = data; + this._dataBinary = options.binary; + // keep only the compression + this.options = { + compression : options.compression, + compressionOptions : options.compressionOptions + }; +}; + +ZipObject.prototype = { + /** + * Create an internal stream for the content of this object. + * @param {String} type the type of each chunk. + * @return StreamHelper the stream. + */ + internalStream: function (type) { + var result = null, outputType = "string"; + try { + if (!type) { + throw new Error("No output type specified."); + } + outputType = type.toLowerCase(); + var askUnicodeString = outputType === "string" || outputType === "text"; + if (outputType === "binarystring" || outputType === "text") { + outputType = "string"; + } + result = this._decompressWorker(); + + var isUnicodeString = !this._dataBinary; + + if (isUnicodeString && !askUnicodeString) { + result = result.pipe(new utf8.Utf8EncodeWorker()); + } + if (!isUnicodeString && askUnicodeString) { + result = result.pipe(new utf8.Utf8DecodeWorker()); + } + } catch (e) { + result = new GenericWorker("error"); + result.error(e); + } + + return new StreamHelper(result, outputType, ""); + }, + + /** + * Prepare the content in the asked type. + * @param {String} type the type of the result. + * @param {Function} onUpdate a function to call on each internal update. + * @return Promise the promise of the result. + */ + async: function (type, onUpdate) { + return this.internalStream(type).accumulate(onUpdate); + }, + + /** + * Prepare the content as a nodejs stream. + * @param {String} type the type of each chunk. + * @param {Function} onUpdate a function to call on each internal update. + * @return Stream the stream. + */ + nodeStream: function (type, onUpdate) { + return this.internalStream(type || "nodebuffer").toNodejsStream(onUpdate); + }, + + /** + * Return a worker for the compressed content. + * @private + * @param {Object} compression the compression object to use. + * @param {Object} compressionOptions the options to use when compressing. + * @return Worker the worker. + */ + _compressWorker: function (compression, compressionOptions) { + if ( + this._data instanceof CompressedObject && + this._data.compression.magic === compression.magic + ) { + return this._data.getCompressedWorker(); + } else { + var result = this._decompressWorker(); + if(!this._dataBinary) { + result = result.pipe(new utf8.Utf8EncodeWorker()); + } + return CompressedObject.createWorkerFrom(result, compression, compressionOptions); + } + }, + /** + * Return a worker for the decompressed content. + * @private + * @return Worker the worker. + */ + _decompressWorker : function () { + if (this._data instanceof CompressedObject) { + return this._data.getContentWorker(); + } else if (this._data instanceof GenericWorker) { + return this._data; + } else { + return new DataWorker(this._data); + } + } +}; + +var removedMethods = ["asText", "asBinary", "asNodeBuffer", "asUint8Array", "asArrayBuffer"]; +var removedFn = function () { + throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide."); +}; + +for(var i = 0; i < removedMethods.length; i++) { + ZipObject.prototype[removedMethods[i]] = removedFn; +} +module.exports = ZipObject; + +},{"./compressedObject":2,"./stream/DataWorker":27,"./stream/GenericWorker":28,"./stream/StreamHelper":29,"./utf8":31}],36:[function(require,module,exports){ +(function (global){ +'use strict'; +var Mutation = global.MutationObserver || global.WebKitMutationObserver; + +var scheduleDrain; + +{ + if (Mutation) { + var called = 0; + var observer = new Mutation(nextTick); + var element = global.document.createTextNode(''); + observer.observe(element, { + characterData: true + }); + scheduleDrain = function () { + element.data = (called = ++called % 2); + }; + } else if (!global.setImmediate && typeof global.MessageChannel !== 'undefined') { + var channel = new global.MessageChannel(); + channel.port1.onmessage = nextTick; + scheduleDrain = function () { + channel.port2.postMessage(0); + }; + } else if ('document' in global && 'onreadystatechange' in global.document.createElement('script')) { + scheduleDrain = function () { + + // Create a + + + + + + + + + +
+ +
+ +
+
+ +

Class GuacamoleClientBadTypeException

+
+
+ +
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    Serializable
    +
    +
    +
    public class GuacamoleClientBadTypeException
    +extends GuacamoleClientException
    +
    An exception which is thrown when data has been submitted with an unsupported + mimetype.
    +
    +
    See Also:
    +
    Serialized Form
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        GuacamoleClientBadTypeException

        +
        public GuacamoleClientBadTypeException​(String message,
        +                                       Throwable cause)
        +
        Creates a new GuacamoleClientBadTypeException with the given message and cause.
        +
        +
        Parameters:
        +
        message - A human readable description of the exception that + occurred.
        +
        cause - The cause of this exception.
        +
        +
      • +
      + + + +
        +
      • +

        GuacamoleClientBadTypeException

        +
        public GuacamoleClientBadTypeException​(String message)
        +
        Creates a new GuacamoleClientBadTypeException with the given message.
        +
        +
        Parameters:
        +
        message - A human readable description of the exception that + occurred.
        +
        +
      • +
      + + + +
        +
      • +

        GuacamoleClientBadTypeException

        +
        public GuacamoleClientBadTypeException​(Throwable cause)
        +
        Creates a new GuacamoleClientBadTypeException with the given cause.
        +
        +
        Parameters:
        +
        cause - The cause of this exception.
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getStatus

        +
        public GuacamoleStatus getStatus()
        +
        Description copied from class: GuacamoleException
        +
        Returns the Guacamole status associated with this exception. This status + can then be easily translated into an HTTP error code or Guacamole + protocol error code.
        +
        +
        Overrides:
        +
        getStatus in class GuacamoleClientException
        +
        Returns:
        +
        The corresponding Guacamole status.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ +
+ +

Copyright © 2024. All rights reserved.

+
+ + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleClientException.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleClientException.html new file mode 100644 index 000000000..2bf6d8fce --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleClientException.html @@ -0,0 +1,416 @@ + + + + + +GuacamoleClientException (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class GuacamoleClientException

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        GuacamoleClientException

        +
        public GuacamoleClientException​(String message,
        +                                Throwable cause)
        +
        Creates a new GuacamoleException with the given message and cause.
        +
        +
        Parameters:
        +
        message - A human readable description of the exception that + occurred.
        +
        cause - The cause of this exception.
        +
        +
      • +
      + + + +
        +
      • +

        GuacamoleClientException

        +
        public GuacamoleClientException​(String message)
        +
        Creates a new GuacamoleException with the given message.
        +
        +
        Parameters:
        +
        message - A human readable description of the exception that + occurred.
        +
        +
      • +
      + + + +
        +
      • +

        GuacamoleClientException

        +
        public GuacamoleClientException​(Throwable cause)
        +
        Creates a new GuacamoleException with the given cause.
        +
        +
        Parameters:
        +
        cause - The cause of this exception.
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getStatus

        +
        public GuacamoleStatus getStatus()
        +
        Description copied from class: GuacamoleException
        +
        Returns the Guacamole status associated with this exception. This status + can then be easily translated into an HTTP error code or Guacamole + protocol error code.
        +
        +
        Overrides:
        +
        getStatus in class GuacamoleException
        +
        Returns:
        +
        The corresponding Guacamole status.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ +
+ +

Copyright © 2024. All rights reserved.

+
+ + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleClientOverrunException.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleClientOverrunException.html new file mode 100644 index 000000000..fda9b8271 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleClientOverrunException.html @@ -0,0 +1,418 @@ + + + + + +GuacamoleClientOverrunException (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class GuacamoleClientOverrunException

+
+
+ +
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    Serializable
    +
    +
    +
    public class GuacamoleClientOverrunException
    +extends GuacamoleClientException
    +
    An exception which is thrown when the client has sent too much data. This + usually indicates that a server-side buffer is not large enough to + accommodate the data, or protocol specifications prohibit data of the size + received.
    +
    +
    See Also:
    +
    Serialized Form
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        GuacamoleClientOverrunException

        +
        public GuacamoleClientOverrunException​(String message,
        +                                       Throwable cause)
        +
        Creates a new GuacamoleClientOverrunException with the given message and cause.
        +
        +
        Parameters:
        +
        message - A human readable description of the exception that + occurred.
        +
        cause - The cause of this exception.
        +
        +
      • +
      + + + +
        +
      • +

        GuacamoleClientOverrunException

        +
        public GuacamoleClientOverrunException​(String message)
        +
        Creates a new GuacamoleClientOverrunException with the given message.
        +
        +
        Parameters:
        +
        message - A human readable description of the exception that + occurred.
        +
        +
      • +
      + + + +
        +
      • +

        GuacamoleClientOverrunException

        +
        public GuacamoleClientOverrunException​(Throwable cause)
        +
        Creates a new GuacamoleClientOverrunException with the given cause.
        +
        +
        Parameters:
        +
        cause - The cause of this exception.
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getStatus

        +
        public GuacamoleStatus getStatus()
        +
        Description copied from class: GuacamoleException
        +
        Returns the Guacamole status associated with this exception. This status + can then be easily translated into an HTTP error code or Guacamole + protocol error code.
        +
        +
        Overrides:
        +
        getStatus in class GuacamoleClientException
        +
        Returns:
        +
        The corresponding Guacamole status.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ +
+ +

Copyright © 2024. All rights reserved.

+
+ + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleClientTimeoutException.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleClientTimeoutException.html new file mode 100644 index 000000000..a1dea5c54 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleClientTimeoutException.html @@ -0,0 +1,415 @@ + + + + + +GuacamoleClientTimeoutException (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class GuacamoleClientTimeoutException

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        GuacamoleClientTimeoutException

        +
        public GuacamoleClientTimeoutException​(String message,
        +                                       Throwable cause)
        +
        Creates a new GuacamoleClientTimeoutException with the given message and cause.
        +
        +
        Parameters:
        +
        message - A human readable description of the exception that + occurred.
        +
        cause - The cause of this exception.
        +
        +
      • +
      + + + +
        +
      • +

        GuacamoleClientTimeoutException

        +
        public GuacamoleClientTimeoutException​(String message)
        +
        Creates a new GuacamoleClientTimeoutException with the given message.
        +
        +
        Parameters:
        +
        message - A human readable description of the exception that + occurred.
        +
        +
      • +
      + + + +
        +
      • +

        GuacamoleClientTimeoutException

        +
        public GuacamoleClientTimeoutException​(Throwable cause)
        +
        Creates a new GuacamoleClientTimeoutException with the given cause.
        +
        +
        Parameters:
        +
        cause - The cause of this exception.
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getStatus

        +
        public GuacamoleStatus getStatus()
        +
        Description copied from class: GuacamoleException
        +
        Returns the Guacamole status associated with this exception. This status + can then be easily translated into an HTTP error code or Guacamole + protocol error code.
        +
        +
        Overrides:
        +
        getStatus in class GuacamoleClientException
        +
        Returns:
        +
        The corresponding Guacamole status.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ +
+ +

Copyright © 2024. All rights reserved.

+
+ + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleClientTooManyException.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleClientTooManyException.html new file mode 100644 index 000000000..7ee60bd8e --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleClientTooManyException.html @@ -0,0 +1,417 @@ + + + + + +GuacamoleClientTooManyException (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class GuacamoleClientTooManyException

+
+
+ +
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    Serializable
    +
    +
    +
    public class GuacamoleClientTooManyException
    +extends GuacamoleClientException
    +
    An exception which is thrown when too many requests have been received + by the current client, and further requests are being rejected, either + temporarily or permanently.
    +
    +
    See Also:
    +
    Serialized Form
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        GuacamoleClientTooManyException

        +
        public GuacamoleClientTooManyException​(String message,
        +                                       Throwable cause)
        +
        Creates a new GuacamoleClientTooManyException with the given message and cause.
        +
        +
        Parameters:
        +
        message - A human readable description of the exception that + occurred.
        +
        cause - The cause of this exception.
        +
        +
      • +
      + + + +
        +
      • +

        GuacamoleClientTooManyException

        +
        public GuacamoleClientTooManyException​(String message)
        +
        Creates a new GuacamoleClientTooManyException with the given message.
        +
        +
        Parameters:
        +
        message - A human readable description of the exception that + occurred.
        +
        +
      • +
      + + + +
        +
      • +

        GuacamoleClientTooManyException

        +
        public GuacamoleClientTooManyException​(Throwable cause)
        +
        Creates a new GuacamoleClientTooManyException with the given cause.
        +
        +
        Parameters:
        +
        cause - The cause of this exception.
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getStatus

        +
        public GuacamoleStatus getStatus()
        +
        Description copied from class: GuacamoleException
        +
        Returns the Guacamole status associated with this exception. This status + can then be easily translated into an HTTP error code or Guacamole + protocol error code.
        +
        +
        Overrides:
        +
        getStatus in class GuacamoleClientException
        +
        Returns:
        +
        The corresponding Guacamole status.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ +
+ +

Copyright © 2024. All rights reserved.

+
+ + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleConnectionClosedException.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleConnectionClosedException.html new file mode 100644 index 000000000..c184e66aa --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleConnectionClosedException.html @@ -0,0 +1,418 @@ + + + + + +GuacamoleConnectionClosedException (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class GuacamoleConnectionClosedException

+
+
+ +
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    Serializable
    +
    +
    +
    public class GuacamoleConnectionClosedException
    +extends GuacamoleServerException
    +
    An exception which is thrown when an operation cannot be performed because + its corresponding connection is closed.
    +
    +
    See Also:
    +
    Serialized Form
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        GuacamoleConnectionClosedException

        +
        public GuacamoleConnectionClosedException​(String message,
        +                                          Throwable cause)
        +
        Creates a new GuacamoleConnectionClosedException with the given message + and cause.
        +
        +
        Parameters:
        +
        message - A human readable description of the exception that + occurred.
        +
        cause - The cause of this exception.
        +
        +
      • +
      + + + +
        +
      • +

        GuacamoleConnectionClosedException

        +
        public GuacamoleConnectionClosedException​(String message)
        +
        Creates a new GuacamoleConnectionClosedException with the given message.
        +
        +
        Parameters:
        +
        message - A human readable description of the exception that + occurred.
        +
        +
      • +
      + + + +
        +
      • +

        GuacamoleConnectionClosedException

        +
        public GuacamoleConnectionClosedException​(Throwable cause)
        +
        Creates a new GuacamoleConnectionClosedException with the given cause.
        +
        +
        Parameters:
        +
        cause - The cause of this exception.
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getStatus

        +
        public GuacamoleStatus getStatus()
        +
        Description copied from class: GuacamoleException
        +
        Returns the Guacamole status associated with this exception. This status + can then be easily translated into an HTTP error code or Guacamole + protocol error code.
        +
        +
        Overrides:
        +
        getStatus in class GuacamoleServerException
        +
        Returns:
        +
        The corresponding Guacamole status.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ +
+ +

Copyright © 2024. All rights reserved.

+
+ + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleException.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleException.html new file mode 100644 index 000000000..e0ddecc6c --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleException.html @@ -0,0 +1,448 @@ + + + + + +GuacamoleException (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class GuacamoleException

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        GuacamoleException

        +
        public GuacamoleException​(String message,
        +                          Throwable cause)
        +
        Creates a new GuacamoleException with the given message and cause.
        +
        +
        Parameters:
        +
        message - A human readable description of the exception that + occurred.
        +
        cause - The cause of this exception.
        +
        +
      • +
      + + + +
        +
      • +

        GuacamoleException

        +
        public GuacamoleException​(String message)
        +
        Creates a new GuacamoleException with the given message.
        +
        +
        Parameters:
        +
        message - A human readable description of the exception that + occurred.
        +
        +
      • +
      + + + +
        +
      • +

        GuacamoleException

        +
        public GuacamoleException​(Throwable cause)
        +
        Creates a new GuacamoleException with the given cause.
        +
        +
        Parameters:
        +
        cause - The cause of this exception.
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getStatus

        +
        public GuacamoleStatus getStatus()
        +
        Returns the Guacamole status associated with this exception. This status + can then be easily translated into an HTTP error code or Guacamole + protocol error code.
        +
        +
        Returns:
        +
        The corresponding Guacamole status.
        +
        +
      • +
      + + + +
        +
      • +

        getHttpStatusCode

        +
        public int getHttpStatusCode()
        +
        Returns the most applicable HTTP status code that can be associated + with this exception.
        +
        +
        Returns:
        +
        An integer representing the most applicable HTTP status code + associated with this exception.
        +
        +
      • +
      + + + +
        +
      • +

        getWebSocketCode

        +
        public int getWebSocketCode()
        +
        Returns the most applicable WebSocket status code that can be + associated with this exception.
        +
        +
        Returns:
        +
        An integer representing the most applicable WebSocket status + code associated with this exception.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ +
+ +

Copyright © 2024. All rights reserved.

+
+ + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleResourceClosedException.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleResourceClosedException.html new file mode 100644 index 000000000..821f59710 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleResourceClosedException.html @@ -0,0 +1,416 @@ + + + + + +GuacamoleResourceClosedException (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class GuacamoleResourceClosedException

+
+
+ +
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    Serializable
    +
    +
    +
    public class GuacamoleResourceClosedException
    +extends GuacamoleClientException
    +
    An exception which is thrown when a resource is no longer available because + it is closed.
    +
    +
    See Also:
    +
    Serialized Form
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        GuacamoleResourceClosedException

        +
        public GuacamoleResourceClosedException​(String message,
        +                                        Throwable cause)
        +
        Creates a new GuacamoleResourceClosedException with the given message + and cause.
        +
        +
        Parameters:
        +
        message - A human readable description of the exception that occurred.
        +
        cause - The cause of this exception.
        +
        +
      • +
      + + + +
        +
      • +

        GuacamoleResourceClosedException

        +
        public GuacamoleResourceClosedException​(String message)
        +
        Creates a new GuacamoleResourceClosedException with the given message.
        +
        +
        Parameters:
        +
        message - A human readable description of the exception that occurred.
        +
        +
      • +
      + + + +
        +
      • +

        GuacamoleResourceClosedException

        +
        public GuacamoleResourceClosedException​(Throwable cause)
        +
        Creates a new GuacamoleResourceClosedException with the given cause.
        +
        +
        Parameters:
        +
        cause - The cause of this exception.
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getStatus

        +
        public GuacamoleStatus getStatus()
        +
        Description copied from class: GuacamoleException
        +
        Returns the Guacamole status associated with this exception. This status + can then be easily translated into an HTTP error code or Guacamole + protocol error code.
        +
        +
        Overrides:
        +
        getStatus in class GuacamoleClientException
        +
        Returns:
        +
        The corresponding Guacamole status.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ +
+ +

Copyright © 2024. All rights reserved.

+
+ + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleResourceConflictException.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleResourceConflictException.html new file mode 100644 index 000000000..5080763a8 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleResourceConflictException.html @@ -0,0 +1,417 @@ + + + + + +GuacamoleResourceConflictException (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class GuacamoleResourceConflictException

+
+
+ +
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    Serializable
    +
    +
    +
    public class GuacamoleResourceConflictException
    +extends GuacamoleClientException
    +
    An exception which is thrown when a resource has been requested, but that + resource is locked or currently in use, and cannot be accessed by the + current user.
    +
    +
    See Also:
    +
    Serialized Form
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        GuacamoleResourceConflictException

        +
        public GuacamoleResourceConflictException​(String message,
        +                                          Throwable cause)
        +
        Creates a new GuacamoleResourceConflictException with the given message and cause.
        +
        +
        Parameters:
        +
        message - A human readable description of the exception that + occurred.
        +
        cause - The cause of this exception.
        +
        +
      • +
      + + + +
        +
      • +

        GuacamoleResourceConflictException

        +
        public GuacamoleResourceConflictException​(String message)
        +
        Creates a new GuacamoleResourceConflictException with the given message.
        +
        +
        Parameters:
        +
        message - A human readable description of the exception that + occurred.
        +
        +
      • +
      + + + +
        +
      • +

        GuacamoleResourceConflictException

        +
        public GuacamoleResourceConflictException​(Throwable cause)
        +
        Creates a new GuacamoleResourceConflictException with the given cause.
        +
        +
        Parameters:
        +
        cause - The cause of this exception.
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getStatus

        +
        public GuacamoleStatus getStatus()
        +
        Description copied from class: GuacamoleException
        +
        Returns the Guacamole status associated with this exception. This status + can then be easily translated into an HTTP error code or Guacamole + protocol error code.
        +
        +
        Overrides:
        +
        getStatus in class GuacamoleClientException
        +
        Returns:
        +
        The corresponding Guacamole status.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ +
+ +

Copyright © 2024. All rights reserved.

+
+ + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleResourceNotFoundException.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleResourceNotFoundException.html new file mode 100644 index 000000000..6c4d0bb46 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleResourceNotFoundException.html @@ -0,0 +1,418 @@ + + + + + +GuacamoleResourceNotFoundException (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class GuacamoleResourceNotFoundException

+
+
+ +
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    Serializable
    +
    +
    +
    public class GuacamoleResourceNotFoundException
    +extends GuacamoleClientException
    +
    A generic exception thrown when part of the Guacamole API fails to find + a requested resource, such as a configuration or tunnel.
    +
    +
    See Also:
    +
    Serialized Form
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        GuacamoleResourceNotFoundException

        +
        public GuacamoleResourceNotFoundException​(String message,
        +                                          Throwable cause)
        +
        Creates a new GuacamoleResourceNotFoundException with the given message + and cause.
        +
        +
        Parameters:
        +
        message - A human readable description of the exception that + occurred.
        +
        cause - The cause of this exception.
        +
        +
      • +
      + + + +
        +
      • +

        GuacamoleResourceNotFoundException

        +
        public GuacamoleResourceNotFoundException​(String message)
        +
        Creates a new GuacamoleResourceNotFoundException with the given message.
        +
        +
        Parameters:
        +
        message - A human readable description of the exception that + occurred.
        +
        +
      • +
      + + + +
        +
      • +

        GuacamoleResourceNotFoundException

        +
        public GuacamoleResourceNotFoundException​(Throwable cause)
        +
        Creates a new GuacamoleResourceNotFoundException with the given cause.
        +
        +
        Parameters:
        +
        cause - The cause of this exception.
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getStatus

        +
        public GuacamoleStatus getStatus()
        +
        Description copied from class: GuacamoleException
        +
        Returns the Guacamole status associated with this exception. This status + can then be easily translated into an HTTP error code or Guacamole + protocol error code.
        +
        +
        Overrides:
        +
        getStatus in class GuacamoleClientException
        +
        Returns:
        +
        The corresponding Guacamole status.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ +
+ +

Copyright © 2024. All rights reserved.

+
+ + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleSecurityException.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleSecurityException.html new file mode 100644 index 000000000..a43d933c7 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleSecurityException.html @@ -0,0 +1,420 @@ + + + + + +GuacamoleSecurityException (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class GuacamoleSecurityException

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        GuacamoleSecurityException

        +
        public GuacamoleSecurityException​(String message,
        +                                  Throwable cause)
        +
        Creates a new GuacamoleSecurityException with the given message and cause.
        +
        +
        Parameters:
        +
        message - A human readable description of the exception that + occurred.
        +
        cause - The cause of this exception.
        +
        +
      • +
      + + + +
        +
      • +

        GuacamoleSecurityException

        +
        public GuacamoleSecurityException​(String message)
        +
        Creates a new GuacamoleSecurityException with the given message.
        +
        +
        Parameters:
        +
        message - A human readable description of the exception that + occurred.
        +
        +
      • +
      + + + +
        +
      • +

        GuacamoleSecurityException

        +
        public GuacamoleSecurityException​(Throwable cause)
        +
        Creates a new GuacamoleSecurityException with the given cause.
        +
        +
        Parameters:
        +
        cause - The cause of this exception.
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getStatus

        +
        public GuacamoleStatus getStatus()
        +
        Description copied from class: GuacamoleException
        +
        Returns the Guacamole status associated with this exception. This status + can then be easily translated into an HTTP error code or Guacamole + protocol error code.
        +
        +
        Overrides:
        +
        getStatus in class GuacamoleClientException
        +
        Returns:
        +
        The corresponding Guacamole status.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ +
+ +

Copyright © 2024. All rights reserved.

+
+ + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleServerBusyException.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleServerBusyException.html new file mode 100644 index 000000000..8ebb8354f --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleServerBusyException.html @@ -0,0 +1,416 @@ + + + + + +GuacamoleServerBusyException (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class GuacamoleServerBusyException

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        GuacamoleServerBusyException

        +
        public GuacamoleServerBusyException​(String message,
        +                                    Throwable cause)
        +
        Creates a new GuacamoleServerBusyException with the given message and cause.
        +
        +
        Parameters:
        +
        message - A human readable description of the exception that + occurred.
        +
        cause - The cause of this exception.
        +
        +
      • +
      + + + +
        +
      • +

        GuacamoleServerBusyException

        +
        public GuacamoleServerBusyException​(String message)
        +
        Creates a new GuacamoleServerBusyException with the given message.
        +
        +
        Parameters:
        +
        message - A human readable description of the exception that + occurred.
        +
        +
      • +
      + + + +
        +
      • +

        GuacamoleServerBusyException

        +
        public GuacamoleServerBusyException​(Throwable cause)
        +
        Creates a new GuacamoleServerBusyException with the given cause.
        +
        +
        Parameters:
        +
        cause - The cause of this exception.
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getStatus

        +
        public GuacamoleStatus getStatus()
        +
        Description copied from class: GuacamoleException
        +
        Returns the Guacamole status associated with this exception. This status + can then be easily translated into an HTTP error code or Guacamole + protocol error code.
        +
        +
        Overrides:
        +
        getStatus in class GuacamoleServerException
        +
        Returns:
        +
        The corresponding Guacamole status.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ +
+ +

Copyright © 2024. All rights reserved.

+
+ + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleServerException.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleServerException.html new file mode 100644 index 000000000..51272f64f --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleServerException.html @@ -0,0 +1,416 @@ + + + + + +GuacamoleServerException (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class GuacamoleServerException

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        GuacamoleServerException

        +
        public GuacamoleServerException​(String message,
        +                                Throwable cause)
        +
        Creates a new GuacamoleServerException with the given message and cause.
        +
        +
        Parameters:
        +
        message - A human readable description of the exception that + occurred.
        +
        cause - The cause of this exception.
        +
        +
      • +
      + + + +
        +
      • +

        GuacamoleServerException

        +
        public GuacamoleServerException​(String message)
        +
        Creates a new GuacamoleServerException with the given message.
        +
        +
        Parameters:
        +
        message - A human readable description of the exception that + occurred.
        +
        +
      • +
      + + + +
        +
      • +

        GuacamoleServerException

        +
        public GuacamoleServerException​(Throwable cause)
        +
        Creates a new GuacamoleServerException with the given cause.
        +
        +
        Parameters:
        +
        cause - The cause of this exception.
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getStatus

        +
        public GuacamoleStatus getStatus()
        +
        Description copied from class: GuacamoleException
        +
        Returns the Guacamole status associated with this exception. This status + can then be easily translated into an HTTP error code or Guacamole + protocol error code.
        +
        +
        Overrides:
        +
        getStatus in class GuacamoleException
        +
        Returns:
        +
        The corresponding Guacamole status.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ +
+ +

Copyright © 2024. All rights reserved.

+
+ + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleSessionClosedException.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleSessionClosedException.html new file mode 100644 index 000000000..4a18f2595 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleSessionClosedException.html @@ -0,0 +1,416 @@ + + + + + +GuacamoleSessionClosedException (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class GuacamoleSessionClosedException

+
+
+ +
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    Serializable
    +
    +
    +
    public class GuacamoleSessionClosedException
    +extends GuacamoleUpstreamException
    +
    An exception which indicates that a session within an upstream server (such + as the remote desktop) has been forcibly terminated.
    +
    +
    See Also:
    +
    Serialized Form
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        GuacamoleSessionClosedException

        +
        public GuacamoleSessionClosedException​(String message,
        +                                       Throwable cause)
        +
        Creates a new GuacamoleSessionClosedException with the given message and + cause.
        +
        +
        Parameters:
        +
        message - A human readable description of the exception that occurred.
        +
        cause - The cause of this exception.
        +
        +
      • +
      + + + +
        +
      • +

        GuacamoleSessionClosedException

        +
        public GuacamoleSessionClosedException​(String message)
        +
        Creates a new GuacamoleSessionClosedException with the given message.
        +
        +
        Parameters:
        +
        message - A human readable description of the exception that occurred.
        +
        +
      • +
      + + + +
        +
      • +

        GuacamoleSessionClosedException

        +
        public GuacamoleSessionClosedException​(Throwable cause)
        +
        Creates a new GuacamoleSessionClosedException with the given cause.
        +
        +
        Parameters:
        +
        cause - The cause of this exception.
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getStatus

        +
        public GuacamoleStatus getStatus()
        +
        Description copied from class: GuacamoleException
        +
        Returns the Guacamole status associated with this exception. This status + can then be easily translated into an HTTP error code or Guacamole + protocol error code.
        +
        +
        Overrides:
        +
        getStatus in class GuacamoleUpstreamException
        +
        Returns:
        +
        The corresponding Guacamole status.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ +
+ +

Copyright © 2024. All rights reserved.

+
+ + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleSessionConflictException.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleSessionConflictException.html new file mode 100644 index 000000000..027588b6f --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleSessionConflictException.html @@ -0,0 +1,416 @@ + + + + + +GuacamoleSessionConflictException (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class GuacamoleSessionConflictException

+
+
+ +
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    Serializable
    +
    +
    +
    public class GuacamoleSessionConflictException
    +extends GuacamoleUpstreamException
    +
    An exception which indicates that a session within an upstream server (such + as the remote desktop) has ended because it conflicted with another session.
    +
    +
    See Also:
    +
    Serialized Form
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        GuacamoleSessionConflictException

        +
        public GuacamoleSessionConflictException​(String message,
        +                                         Throwable cause)
        +
        Creates a new GuacamoleSessionConflictException with the given message + and cause.
        +
        +
        Parameters:
        +
        message - A human readable description of the exception that occurred.
        +
        cause - The cause of this exception.
        +
        +
      • +
      + + + +
        +
      • +

        GuacamoleSessionConflictException

        +
        public GuacamoleSessionConflictException​(String message)
        +
        Creates a new GuacamoleSessionConflictException with the given message.
        +
        +
        Parameters:
        +
        message - A human readable description of the exception that occurred.
        +
        +
      • +
      + + + +
        +
      • +

        GuacamoleSessionConflictException

        +
        public GuacamoleSessionConflictException​(Throwable cause)
        +
        Creates a new GuacamoleSessionConflictException with the given cause.
        +
        +
        Parameters:
        +
        cause - The cause of this exception.
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getStatus

        +
        public GuacamoleStatus getStatus()
        +
        Description copied from class: GuacamoleException
        +
        Returns the Guacamole status associated with this exception. This status + can then be easily translated into an HTTP error code or Guacamole + protocol error code.
        +
        +
        Overrides:
        +
        getStatus in class GuacamoleUpstreamException
        +
        Returns:
        +
        The corresponding Guacamole status.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ +
+ +

Copyright © 2024. All rights reserved.

+
+ + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleSessionTimeoutException.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleSessionTimeoutException.html new file mode 100644 index 000000000..d02242fb2 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleSessionTimeoutException.html @@ -0,0 +1,416 @@ + + + + + +GuacamoleSessionTimeoutException (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class GuacamoleSessionTimeoutException

+
+
+ +
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    Serializable
    +
    +
    +
    public class GuacamoleSessionTimeoutException
    +extends GuacamoleUpstreamException
    +
    An exception which indicates that a session within an upstream server (such + as the remote desktop) has ended because it appeared to be inactive.
    +
    +
    See Also:
    +
    Serialized Form
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        GuacamoleSessionTimeoutException

        +
        public GuacamoleSessionTimeoutException​(String message,
        +                                        Throwable cause)
        +
        Creates a new GuacamoleSessionTimeoutException with the given message + and cause.
        +
        +
        Parameters:
        +
        message - A human readable description of the exception that occurred.
        +
        cause - The cause of this exception.
        +
        +
      • +
      + + + +
        +
      • +

        GuacamoleSessionTimeoutException

        +
        public GuacamoleSessionTimeoutException​(String message)
        +
        Creates a new GuacamoleSessionTimeoutException with the given message.
        +
        +
        Parameters:
        +
        message - A human readable description of the exception that occurred.
        +
        +
      • +
      + + + +
        +
      • +

        GuacamoleSessionTimeoutException

        +
        public GuacamoleSessionTimeoutException​(Throwable cause)
        +
        Creates a new GuacamoleSessionTimeoutException with the given cause.
        +
        +
        Parameters:
        +
        cause - The cause of this exception.
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getStatus

        +
        public GuacamoleStatus getStatus()
        +
        Description copied from class: GuacamoleException
        +
        Returns the Guacamole status associated with this exception. This status + can then be easily translated into an HTTP error code or Guacamole + protocol error code.
        +
        +
        Overrides:
        +
        getStatus in class GuacamoleUpstreamException
        +
        Returns:
        +
        The corresponding Guacamole status.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ +
+ +

Copyright © 2024. All rights reserved.

+
+ + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleUnauthorizedException.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleUnauthorizedException.html new file mode 100644 index 000000000..12498e844 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleUnauthorizedException.html @@ -0,0 +1,422 @@ + + + + + +GuacamoleUnauthorizedException (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class GuacamoleUnauthorizedException

+
+
+ +
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    Serializable
    +
    +
    +
    public class GuacamoleUnauthorizedException
    +extends GuacamoleSecurityException
    +
    A security-related exception thrown when parts of the Guacamole API is + denying access to a resource, but access MAY be granted were the user + authorized (logged in).
    +
    +
    See Also:
    +
    Serialized Form
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        GuacamoleUnauthorizedException

        +
        public GuacamoleUnauthorizedException​(String message,
        +                                      Throwable cause)
        +
        Creates a new GuacamoleUnauthorizedException with the given message and cause.
        +
        +
        Parameters:
        +
        message - A human readable description of the exception that + occurred.
        +
        cause - The cause of this exception.
        +
        +
      • +
      + + + +
        +
      • +

        GuacamoleUnauthorizedException

        +
        public GuacamoleUnauthorizedException​(String message)
        +
        Creates a new GuacamoleUnauthorizedException with the given message.
        +
        +
        Parameters:
        +
        message - A human readable description of the exception that + occurred.
        +
        +
      • +
      + + + +
        +
      • +

        GuacamoleUnauthorizedException

        +
        public GuacamoleUnauthorizedException​(Throwable cause)
        +
        Creates a new GuacamoleUnauthorizedException with the given cause.
        +
        +
        Parameters:
        +
        cause - The cause of this exception.
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getStatus

        +
        public GuacamoleStatus getStatus()
        +
        Description copied from class: GuacamoleException
        +
        Returns the Guacamole status associated with this exception. This status + can then be easily translated into an HTTP error code or Guacamole + protocol error code.
        +
        +
        Overrides:
        +
        getStatus in class GuacamoleSecurityException
        +
        Returns:
        +
        The corresponding Guacamole status.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ +
+ +

Copyright © 2024. All rights reserved.

+
+ + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleUnsupportedException.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleUnsupportedException.html new file mode 100644 index 000000000..85e5e31ef --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleUnsupportedException.html @@ -0,0 +1,416 @@ + + + + + +GuacamoleUnsupportedException (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class GuacamoleUnsupportedException

+
+
+ +
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    Serializable
    +
    +
    +
    public class GuacamoleUnsupportedException
    +extends GuacamoleServerException
    +
    An exception which is thrown when the requested operation is unsupported + or unimplemented.
    +
    +
    See Also:
    +
    Serialized Form
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        GuacamoleUnsupportedException

        +
        public GuacamoleUnsupportedException​(String message,
        +                                     Throwable cause)
        +
        Creates a new GuacamoleUnsupportedException with the given message and cause.
        +
        +
        Parameters:
        +
        message - A human readable description of the exception that + occurred.
        +
        cause - The cause of this exception.
        +
        +
      • +
      + + + +
        +
      • +

        GuacamoleUnsupportedException

        +
        public GuacamoleUnsupportedException​(String message)
        +
        Creates a new GuacamoleUnsupportedException with the given message.
        +
        +
        Parameters:
        +
        message - A human readable description of the exception that + occurred.
        +
        +
      • +
      + + + +
        +
      • +

        GuacamoleUnsupportedException

        +
        public GuacamoleUnsupportedException​(Throwable cause)
        +
        Creates a new GuacamoleUnsupportedException with the given cause.
        +
        +
        Parameters:
        +
        cause - The cause of this exception.
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getStatus

        +
        public GuacamoleStatus getStatus()
        +
        Description copied from class: GuacamoleException
        +
        Returns the Guacamole status associated with this exception. This status + can then be easily translated into an HTTP error code or Guacamole + protocol error code.
        +
        +
        Overrides:
        +
        getStatus in class GuacamoleServerException
        +
        Returns:
        +
        The corresponding Guacamole status.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ +
+ +

Copyright © 2024. All rights reserved.

+
+ + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleUpstreamException.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleUpstreamException.html new file mode 100644 index 000000000..cbac6f0a6 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleUpstreamException.html @@ -0,0 +1,417 @@ + + + + + +GuacamoleUpstreamException (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class GuacamoleUpstreamException

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        GuacamoleUpstreamException

        +
        public GuacamoleUpstreamException​(String message,
        +                                  Throwable cause)
        +
        Creates a new GuacamoleUpstreamException with the given message and + cause.
        +
        +
        Parameters:
        +
        message - A human readable description of the exception that + occurred.
        +
        cause - The cause of this exception.
        +
        +
      • +
      + + + +
        +
      • +

        GuacamoleUpstreamException

        +
        public GuacamoleUpstreamException​(String message)
        +
        Creates a new GuacamoleUpstreamException with the given message.
        +
        +
        Parameters:
        +
        message - A human readable description of the exception that + occurred.
        +
        +
      • +
      + + + +
        +
      • +

        GuacamoleUpstreamException

        +
        public GuacamoleUpstreamException​(Throwable cause)
        +
        Creates a new GuacamoleUpstreamException with the given cause.
        +
        +
        Parameters:
        +
        cause - The cause of this exception.
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getStatus

        +
        public GuacamoleStatus getStatus()
        +
        Description copied from class: GuacamoleException
        +
        Returns the Guacamole status associated with this exception. This status + can then be easily translated into an HTTP error code or Guacamole + protocol error code.
        +
        +
        Overrides:
        +
        getStatus in class GuacamoleException
        +
        Returns:
        +
        The corresponding Guacamole status.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ +
+ +

Copyright © 2024. All rights reserved.

+
+ + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleUpstreamNotFoundException.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleUpstreamNotFoundException.html new file mode 100644 index 000000000..fc77c2e06 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleUpstreamNotFoundException.html @@ -0,0 +1,416 @@ + + + + + +GuacamoleUpstreamNotFoundException (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class GuacamoleUpstreamNotFoundException

+
+
+ +
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    Serializable
    +
    +
    +
    public class GuacamoleUpstreamNotFoundException
    +extends GuacamoleUpstreamException
    +
    An exception which indicates that an upstream server (such as the remote + desktop) does not appear to exist.
    +
    +
    See Also:
    +
    Serialized Form
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        GuacamoleUpstreamNotFoundException

        +
        public GuacamoleUpstreamNotFoundException​(String message,
        +                                          Throwable cause)
        +
        Creates a new GuacamoleUpstreamNotFoundException with the given message + and cause.
        +
        +
        Parameters:
        +
        message - A human readable description of the exception that occurred.
        +
        cause - The cause of this exception.
        +
        +
      • +
      + + + +
        +
      • +

        GuacamoleUpstreamNotFoundException

        +
        public GuacamoleUpstreamNotFoundException​(String message)
        +
        Creates a new GuacamoleUpstreamNotFoundException with the given message.
        +
        +
        Parameters:
        +
        message - A human readable description of the exception that occurred.
        +
        +
      • +
      + + + +
        +
      • +

        GuacamoleUpstreamNotFoundException

        +
        public GuacamoleUpstreamNotFoundException​(Throwable cause)
        +
        Creates a new GuacamoleUpstreamNotFoundException with the given cause.
        +
        +
        Parameters:
        +
        cause - The cause of this exception.
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getStatus

        +
        public GuacamoleStatus getStatus()
        +
        Description copied from class: GuacamoleException
        +
        Returns the Guacamole status associated with this exception. This status + can then be easily translated into an HTTP error code or Guacamole + protocol error code.
        +
        +
        Overrides:
        +
        getStatus in class GuacamoleUpstreamException
        +
        Returns:
        +
        The corresponding Guacamole status.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ +
+ +

Copyright © 2024. All rights reserved.

+
+ + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleUpstreamTimeoutException.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleUpstreamTimeoutException.html new file mode 100644 index 000000000..9cf9b429b --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleUpstreamTimeoutException.html @@ -0,0 +1,418 @@ + + + + + +GuacamoleUpstreamTimeoutException (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class GuacamoleUpstreamTimeoutException

+
+
+ +
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    Serializable
    +
    +
    +
    public class GuacamoleUpstreamTimeoutException
    +extends GuacamoleUpstreamException
    +
    An exception which indicates than an upstream server (such as the remote + desktop) is taking too long to respond.
    +
    +
    See Also:
    +
    Serialized Form
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        GuacamoleUpstreamTimeoutException

        +
        public GuacamoleUpstreamTimeoutException​(String message,
        +                                         Throwable cause)
        +
        Creates a new GuacamoleUpstreamException with the given message and + cause.
        +
        +
        Parameters:
        +
        message - A human readable description of the exception that + occurred.
        +
        cause - The cause of this exception.
        +
        +
      • +
      + + + +
        +
      • +

        GuacamoleUpstreamTimeoutException

        +
        public GuacamoleUpstreamTimeoutException​(String message)
        +
        Creates a new GuacamoleUpstreamException with the given message.
        +
        +
        Parameters:
        +
        message - A human readable description of the exception that + occurred.
        +
        +
      • +
      + + + +
        +
      • +

        GuacamoleUpstreamTimeoutException

        +
        public GuacamoleUpstreamTimeoutException​(Throwable cause)
        +
        Creates a new GuacamoleUpstreamException with the given cause.
        +
        +
        Parameters:
        +
        cause - The cause of this exception.
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getStatus

        +
        public GuacamoleStatus getStatus()
        +
        Description copied from class: GuacamoleException
        +
        Returns the Guacamole status associated with this exception. This status + can then be easily translated into an HTTP error code or Guacamole + protocol error code.
        +
        +
        Overrides:
        +
        getStatus in class GuacamoleUpstreamException
        +
        Returns:
        +
        The corresponding Guacamole status.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ +
+ +

Copyright © 2024. All rights reserved.

+
+ + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleUpstreamUnavailableException.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleUpstreamUnavailableException.html new file mode 100644 index 000000000..a1bb7809b --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/GuacamoleUpstreamUnavailableException.html @@ -0,0 +1,420 @@ + + + + + +GuacamoleUpstreamUnavailableException (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class GuacamoleUpstreamUnavailableException

+
+
+ +
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    Serializable
    +
    +
    +
    public class GuacamoleUpstreamUnavailableException
    +extends GuacamoleUpstreamException
    +
    An exception which indicates that an upstream server (such as the remote + desktop) is not available to service the request.
    +
    +
    See Also:
    +
    Serialized Form
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        GuacamoleUpstreamUnavailableException

        +
        public GuacamoleUpstreamUnavailableException​(String message,
        +                                             Throwable cause)
        +
        Creates a new GuacamoleUpstreamUnavailableException with the given + message and cause.
        +
        +
        Parameters:
        +
        message - A human readable description of the exception that occurred.
        +
        cause - The cause of this exception.
        +
        +
      • +
      + + + +
        +
      • +

        GuacamoleUpstreamUnavailableException

        +
        public GuacamoleUpstreamUnavailableException​(String message)
        +
        Creates a new GuacamoleUpstreamUnavailableException with the given + message.
        +
        +
        Parameters:
        +
        message - A human readable description of the exception that occurred.
        +
        +
      • +
      + + + +
        +
      • +

        GuacamoleUpstreamUnavailableException

        +
        public GuacamoleUpstreamUnavailableException​(Throwable cause)
        +
        Creates a new GuacamoleUpstreamUnavailableException with the given + cause.
        +
        +
        Parameters:
        +
        cause - The cause of this exception.
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getStatus

        +
        public GuacamoleStatus getStatus()
        +
        Description copied from class: GuacamoleException
        +
        Returns the Guacamole status associated with this exception. This status + can then be easily translated into an HTTP error code or Guacamole + protocol error code.
        +
        +
        Overrides:
        +
        getStatus in class GuacamoleUpstreamException
        +
        Returns:
        +
        The corresponding Guacamole status.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ +
+ +

Copyright © 2024. All rights reserved.

+
+ + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleClientBadTypeException.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleClientBadTypeException.html new file mode 100644 index 000000000..3cc44f84d --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleClientBadTypeException.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.GuacamoleClientBadTypeException (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.guacamole.GuacamoleClientBadTypeException

+
+
No usage of org.apache.guacamole.GuacamoleClientBadTypeException
+
+ + + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleClientException.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleClientException.html new file mode 100644 index 000000000..bfcf4a36e --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleClientException.html @@ -0,0 +1,266 @@ + + + + + +Uses of Class org.apache.guacamole.GuacamoleClientException (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.guacamole.GuacamoleClientException

+
+
+ +
+
+ + + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleClientOverrunException.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleClientOverrunException.html new file mode 100644 index 000000000..0ee34e0dd --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleClientOverrunException.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.GuacamoleClientOverrunException (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.guacamole.GuacamoleClientOverrunException

+
+
No usage of org.apache.guacamole.GuacamoleClientOverrunException
+
+ + + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleClientTimeoutException.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleClientTimeoutException.html new file mode 100644 index 000000000..575cbe629 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleClientTimeoutException.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.GuacamoleClientTimeoutException (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.guacamole.GuacamoleClientTimeoutException

+
+
No usage of org.apache.guacamole.GuacamoleClientTimeoutException
+
+ + + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleClientTooManyException.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleClientTooManyException.html new file mode 100644 index 000000000..994d49d79 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleClientTooManyException.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.GuacamoleClientTooManyException (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.guacamole.GuacamoleClientTooManyException

+
+
No usage of org.apache.guacamole.GuacamoleClientTooManyException
+
+ + + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleConnectionClosedException.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleConnectionClosedException.html new file mode 100644 index 000000000..f2762e9fd --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleConnectionClosedException.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.GuacamoleConnectionClosedException (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.guacamole.GuacamoleConnectionClosedException

+
+
No usage of org.apache.guacamole.GuacamoleConnectionClosedException
+
+ + + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleException.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleException.html new file mode 100644 index 000000000..8031f6186 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleException.html @@ -0,0 +1,789 @@ + + + + + +Uses of Class org.apache.guacamole.GuacamoleException (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.guacamole.GuacamoleException

+
+
+ +
+
+ + + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleResourceClosedException.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleResourceClosedException.html new file mode 100644 index 000000000..c2cb097de --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleResourceClosedException.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.GuacamoleResourceClosedException (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.guacamole.GuacamoleResourceClosedException

+
+
No usage of org.apache.guacamole.GuacamoleResourceClosedException
+
+ + + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleResourceConflictException.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleResourceConflictException.html new file mode 100644 index 000000000..93a7299f7 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleResourceConflictException.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.GuacamoleResourceConflictException (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.guacamole.GuacamoleResourceConflictException

+
+
No usage of org.apache.guacamole.GuacamoleResourceConflictException
+
+ + + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleResourceNotFoundException.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleResourceNotFoundException.html new file mode 100644 index 000000000..e977eb435 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleResourceNotFoundException.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.GuacamoleResourceNotFoundException (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.guacamole.GuacamoleResourceNotFoundException

+
+
No usage of org.apache.guacamole.GuacamoleResourceNotFoundException
+
+ + + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleSecurityException.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleSecurityException.html new file mode 100644 index 000000000..60a90bfed --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleSecurityException.html @@ -0,0 +1,202 @@ + + + + + +Uses of Class org.apache.guacamole.GuacamoleSecurityException (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.guacamole.GuacamoleSecurityException

+
+
+ +
+
+ + + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleServerBusyException.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleServerBusyException.html new file mode 100644 index 000000000..b6cebb43c --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleServerBusyException.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.GuacamoleServerBusyException (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.guacamole.GuacamoleServerBusyException

+
+
No usage of org.apache.guacamole.GuacamoleServerBusyException
+
+ + + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleServerException.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleServerException.html new file mode 100644 index 000000000..9ffa300d3 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleServerException.html @@ -0,0 +1,217 @@ + + + + + +Uses of Class org.apache.guacamole.GuacamoleServerException (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.guacamole.GuacamoleServerException

+
+
+ +
+
+ + + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleSessionClosedException.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleSessionClosedException.html new file mode 100644 index 000000000..448d459ad --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleSessionClosedException.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.GuacamoleSessionClosedException (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.guacamole.GuacamoleSessionClosedException

+
+
No usage of org.apache.guacamole.GuacamoleSessionClosedException
+
+ + + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleSessionConflictException.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleSessionConflictException.html new file mode 100644 index 000000000..f7013ecb0 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleSessionConflictException.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.GuacamoleSessionConflictException (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.guacamole.GuacamoleSessionConflictException

+
+
No usage of org.apache.guacamole.GuacamoleSessionConflictException
+
+ + + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleSessionTimeoutException.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleSessionTimeoutException.html new file mode 100644 index 000000000..425865980 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleSessionTimeoutException.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.GuacamoleSessionTimeoutException (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.guacamole.GuacamoleSessionTimeoutException

+
+
No usage of org.apache.guacamole.GuacamoleSessionTimeoutException
+
+ + + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleUnauthorizedException.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleUnauthorizedException.html new file mode 100644 index 000000000..d8d547b10 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleUnauthorizedException.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.GuacamoleUnauthorizedException (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.guacamole.GuacamoleUnauthorizedException

+
+
No usage of org.apache.guacamole.GuacamoleUnauthorizedException
+
+ + + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleUnsupportedException.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleUnsupportedException.html new file mode 100644 index 000000000..b5aa0bdea --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleUnsupportedException.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.GuacamoleUnsupportedException (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.guacamole.GuacamoleUnsupportedException

+
+
No usage of org.apache.guacamole.GuacamoleUnsupportedException
+
+ + + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleUpstreamException.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleUpstreamException.html new file mode 100644 index 000000000..2930fbd14 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleUpstreamException.html @@ -0,0 +1,280 @@ + + + + + +Uses of Class org.apache.guacamole.GuacamoleUpstreamException (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.guacamole.GuacamoleUpstreamException

+
+
+ +
+
+ + + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleUpstreamNotFoundException.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleUpstreamNotFoundException.html new file mode 100644 index 000000000..64aba7298 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleUpstreamNotFoundException.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.GuacamoleUpstreamNotFoundException (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.guacamole.GuacamoleUpstreamNotFoundException

+
+
No usage of org.apache.guacamole.GuacamoleUpstreamNotFoundException
+
+ + + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleUpstreamTimeoutException.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleUpstreamTimeoutException.html new file mode 100644 index 000000000..6146ef9f4 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleUpstreamTimeoutException.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.GuacamoleUpstreamTimeoutException (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.guacamole.GuacamoleUpstreamTimeoutException

+
+
No usage of org.apache.guacamole.GuacamoleUpstreamTimeoutException
+
+ + + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleUpstreamUnavailableException.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleUpstreamUnavailableException.html new file mode 100644 index 000000000..1cc552b41 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/class-use/GuacamoleUpstreamUnavailableException.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.GuacamoleUpstreamUnavailableException (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.guacamole.GuacamoleUpstreamUnavailableException

+
+
No usage of org.apache.guacamole.GuacamoleUpstreamUnavailableException
+
+ + + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/io/GuacamoleReader.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/io/GuacamoleReader.html new file mode 100644 index 000000000..7ef4920b7 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/io/GuacamoleReader.html @@ -0,0 +1,333 @@ + + + + + +GuacamoleReader (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Interface GuacamoleReader

+
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Instance Methods Abstract Methods 
      Modifier and TypeMethodDescription
      booleanavailable() +
      Returns whether instruction data is available for reading.
      +
      char[]read() +
      Reads at least one complete Guacamole instruction, returning a buffer + containing one or more complete Guacamole instructions and no + incomplete Guacamole instructions.
      +
      GuacamoleInstructionreadInstruction() +
      Reads exactly one complete Guacamole instruction and returns the fully + parsed instruction.
      +
      +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        available

        +
        boolean available()
        +           throws GuacamoleException
        +
        Returns whether instruction data is available for reading. Note that + this does not guarantee an entire instruction is available. If a full + instruction is not available, this function can return true, and a call + to read() will still block.
        +
        +
        Returns:
        +
        true if instruction data is available for reading, false + otherwise.
        +
        Throws:
        +
        GuacamoleException - If an error occurs while checking for + available data.
        +
        +
      • +
      + + + +
        +
      • +

        read

        +
        char[] read()
        +     throws GuacamoleException
        +
        Reads at least one complete Guacamole instruction, returning a buffer + containing one or more complete Guacamole instructions and no + incomplete Guacamole instructions. This function will block until at + least one complete instruction is available.
        +
        +
        Returns:
        +
        A buffer containing at least one complete Guacamole instruction, + or null if no more instructions are available for reading.
        +
        Throws:
        +
        GuacamoleException - If an error occurs while reading from the + stream.
        +
        +
      • +
      + + + +
        +
      • +

        readInstruction

        +
        GuacamoleInstruction readInstruction()
        +                              throws GuacamoleException
        +
        Reads exactly one complete Guacamole instruction and returns the fully + parsed instruction.
        +
        +
        Returns:
        +
        The next complete instruction from the stream, fully parsed, or + null if no more instructions are available for reading.
        +
        Throws:
        +
        GuacamoleException - If an error occurs while reading from the + stream, or if the instruction cannot be + parsed.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ +
+ +

Copyright © 2024. All rights reserved.

+
+ + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/io/GuacamoleWriter.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/io/GuacamoleWriter.html new file mode 100644 index 000000000..ab2d1a8a5 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/io/GuacamoleWriter.html @@ -0,0 +1,333 @@ + + + + + +GuacamoleWriter (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Interface GuacamoleWriter

+
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Instance Methods Abstract Methods 
      Modifier and TypeMethodDescription
      voidwrite​(char[] chunk) +
      Writes the entire given array of characters to the Guacamole instruction + stream.
      +
      voidwrite​(char[] chunk, + int off, + int len) +
      Writes a portion of the given array of characters to the Guacamole + instruction stream.
      +
      voidwriteInstruction​(GuacamoleInstruction instruction) +
      Writes the given fully parsed instruction to the Guacamole instruction + stream.
      +
      +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        write

        +
        void write​(char[] chunk,
        +           int off,
        +           int len)
        +    throws GuacamoleException
        +
        Writes a portion of the given array of characters to the Guacamole + instruction stream. The portion must contain only complete Guacamole + instructions.
        +
        +
        Parameters:
        +
        chunk - An array of characters containing Guacamole instructions.
        +
        off - The start offset of the portion of the array to write.
        +
        len - The length of the portion of the array to write.
        +
        Throws:
        +
        GuacamoleException - If an error occurred while writing the + portion of the array specified.
        +
        +
      • +
      + + + +
        +
      • +

        write

        +
        void write​(char[] chunk)
        +    throws GuacamoleException
        +
        Writes the entire given array of characters to the Guacamole instruction + stream. The array must consist only of complete Guacamole instructions.
        +
        +
        Parameters:
        +
        chunk - An array of characters consisting only of complete + Guacamole instructions.
        +
        Throws:
        +
        GuacamoleException - If an error occurred while writing the + the specified array.
        +
        +
      • +
      + + + +
        +
      • +

        writeInstruction

        +
        void writeInstruction​(GuacamoleInstruction instruction)
        +               throws GuacamoleException
        +
        Writes the given fully parsed instruction to the Guacamole instruction + stream.
        +
        +
        Parameters:
        +
        instruction - The Guacamole instruction to write.
        +
        Throws:
        +
        GuacamoleException - If an error occurred while writing the + instruction.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ +
+ +

Copyright © 2024. All rights reserved.

+
+ + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/io/ReaderGuacamoleReader.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/io/ReaderGuacamoleReader.html new file mode 100644 index 000000000..31e3e7b9e --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/io/ReaderGuacamoleReader.html @@ -0,0 +1,408 @@ + + + + + +ReaderGuacamoleReader (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class ReaderGuacamoleReader

+
+
+ +
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    GuacamoleReader
    +
    +
    +
    public class ReaderGuacamoleReader
    +extends Object
    +implements GuacamoleReader
    +
    A GuacamoleReader which wraps a standard Java Reader, using that Reader as + the Guacamole instruction stream.
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        ReaderGuacamoleReader

        +
        public ReaderGuacamoleReader​(Reader input)
        +
        Creates a new ReaderGuacamoleReader which will use the given Reader as + the Guacamole instruction stream.
        +
        +
        Parameters:
        +
        input - The Reader to use as the Guacamole instruction stream.
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        available

        +
        public boolean available()
        +                  throws GuacamoleException
        +
        Description copied from interface: GuacamoleReader
        +
        Returns whether instruction data is available for reading. Note that + this does not guarantee an entire instruction is available. If a full + instruction is not available, this function can return true, and a call + to read() will still block.
        +
        +
        Specified by:
        +
        available in interface GuacamoleReader
        +
        Returns:
        +
        true if instruction data is available for reading, false + otherwise.
        +
        Throws:
        +
        GuacamoleException - If an error occurs while checking for + available data.
        +
        +
      • +
      + + + +
        +
      • +

        read

        +
        public char[] read()
        +            throws GuacamoleException
        +
        Description copied from interface: GuacamoleReader
        +
        Reads at least one complete Guacamole instruction, returning a buffer + containing one or more complete Guacamole instructions and no + incomplete Guacamole instructions. This function will block until at + least one complete instruction is available.
        +
        +
        Specified by:
        +
        read in interface GuacamoleReader
        +
        Returns:
        +
        A buffer containing at least one complete Guacamole instruction, + or null if no more instructions are available for reading.
        +
        Throws:
        +
        GuacamoleException - If an error occurs while reading from the + stream.
        +
        +
      • +
      + + + +
        +
      • +

        readInstruction

        +
        public GuacamoleInstruction readInstruction()
        +                                     throws GuacamoleException
        +
        Description copied from interface: GuacamoleReader
        +
        Reads exactly one complete Guacamole instruction and returns the fully + parsed instruction.
        +
        +
        Specified by:
        +
        readInstruction in interface GuacamoleReader
        +
        Returns:
        +
        The next complete instruction from the stream, fully parsed, or + null if no more instructions are available for reading.
        +
        Throws:
        +
        GuacamoleException - If an error occurs while reading from the + stream, or if the instruction cannot be + parsed.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ +
+ +

Copyright © 2024. All rights reserved.

+
+ + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/io/WriterGuacamoleWriter.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/io/WriterGuacamoleWriter.html new file mode 100644 index 000000000..cf0a590be --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/io/WriterGuacamoleWriter.html @@ -0,0 +1,408 @@ + + + + + +WriterGuacamoleWriter (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class WriterGuacamoleWriter

+
+
+ +
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    GuacamoleWriter
    +
    +
    +
    public class WriterGuacamoleWriter
    +extends Object
    +implements GuacamoleWriter
    +
    A GuacamoleWriter which wraps a standard Java Writer, using that Writer as + the Guacamole instruction stream.
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        WriterGuacamoleWriter

        +
        public WriterGuacamoleWriter​(Writer output)
        +
        Creates a new WriterGuacamoleWriter which will use the given Writer as + the Guacamole instruction stream.
        +
        +
        Parameters:
        +
        output - The Writer to use as the Guacamole instruction stream.
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        write

        +
        public void write​(char[] chunk,
        +                  int off,
        +                  int len)
        +           throws GuacamoleException
        +
        Description copied from interface: GuacamoleWriter
        +
        Writes a portion of the given array of characters to the Guacamole + instruction stream. The portion must contain only complete Guacamole + instructions.
        +
        +
        Specified by:
        +
        write in interface GuacamoleWriter
        +
        Parameters:
        +
        chunk - An array of characters containing Guacamole instructions.
        +
        off - The start offset of the portion of the array to write.
        +
        len - The length of the portion of the array to write.
        +
        Throws:
        +
        GuacamoleException - If an error occurred while writing the + portion of the array specified.
        +
        +
      • +
      + + + +
        +
      • +

        write

        +
        public void write​(char[] chunk)
        +           throws GuacamoleException
        +
        Description copied from interface: GuacamoleWriter
        +
        Writes the entire given array of characters to the Guacamole instruction + stream. The array must consist only of complete Guacamole instructions.
        +
        +
        Specified by:
        +
        write in interface GuacamoleWriter
        +
        Parameters:
        +
        chunk - An array of characters consisting only of complete + Guacamole instructions.
        +
        Throws:
        +
        GuacamoleException - If an error occurred while writing the + the specified array.
        +
        +
      • +
      + + + + +
    • +
    +
    +
  • +
+
+
+
+ +
+ +

Copyright © 2024. All rights reserved.

+
+ + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/io/class-use/GuacamoleReader.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/io/class-use/GuacamoleReader.html new file mode 100644 index 000000000..d0b5368b6 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/io/class-use/GuacamoleReader.html @@ -0,0 +1,336 @@ + + + + + +Uses of Interface org.apache.guacamole.io.GuacamoleReader (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Interface
org.apache.guacamole.io.GuacamoleReader

+
+
+ +
+
+ + + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/io/class-use/GuacamoleWriter.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/io/class-use/GuacamoleWriter.html new file mode 100644 index 000000000..37951e6f7 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/io/class-use/GuacamoleWriter.html @@ -0,0 +1,331 @@ + + + + + +Uses of Interface org.apache.guacamole.io.GuacamoleWriter (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Interface
org.apache.guacamole.io.GuacamoleWriter

+
+
+ +
+
+ + + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/io/class-use/ReaderGuacamoleReader.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/io/class-use/ReaderGuacamoleReader.html new file mode 100644 index 000000000..835a0a008 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/io/class-use/ReaderGuacamoleReader.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.io.ReaderGuacamoleReader (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.guacamole.io.ReaderGuacamoleReader

+
+
No usage of org.apache.guacamole.io.ReaderGuacamoleReader
+
+ + + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/io/class-use/WriterGuacamoleWriter.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/io/class-use/WriterGuacamoleWriter.html new file mode 100644 index 000000000..adea59824 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/io/class-use/WriterGuacamoleWriter.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.io.WriterGuacamoleWriter (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.guacamole.io.WriterGuacamoleWriter

+
+
No usage of org.apache.guacamole.io.WriterGuacamoleWriter
+
+ + + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/io/package-summary.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/io/package-summary.html new file mode 100644 index 000000000..3c18ae037 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/io/package-summary.html @@ -0,0 +1,208 @@ + + + + + +org.apache.guacamole.io (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Package org.apache.guacamole.io

+
+
+
+ + +
All classes relating directly to data input or output.
+
+
    +
  • + + + + + + + + + + + + + + + + +
    Interface Summary 
    InterfaceDescription
    GuacamoleReader +
    Provides abstract and raw character read access to a stream of Guacamole + instructions.
    +
    GuacamoleWriter +
    Provides abstract and raw character write access to a stream of Guacamole + instructions.
    +
    +
  • +
  • + + + + + + + + + + + + + + + + +
    Class Summary 
    ClassDescription
    ReaderGuacamoleReader +
    A GuacamoleReader which wraps a standard Java Reader, using that Reader as + the Guacamole instruction stream.
    +
    WriterGuacamoleWriter +
    A GuacamoleWriter which wraps a standard Java Writer, using that Writer as + the Guacamole instruction stream.
    +
    +
  • +
+
+
+
+ +

Copyright © 2024. All rights reserved.

+
+ + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/io/package-tree.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/io/package-tree.html new file mode 100644 index 000000000..c76eee578 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/io/package-tree.html @@ -0,0 +1,173 @@ + + + + + +org.apache.guacamole.io Class Hierarchy (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package org.apache.guacamole.io

+Package Hierarchies: + +
+
+
+

Class Hierarchy

+ +
+
+

Interface Hierarchy

+ +
+
+
+
+ +

Copyright © 2024. All rights reserved.

+
+ + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/io/package-use.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/io/package-use.html new file mode 100644 index 000000000..7a9cb8e7e --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/io/package-use.html @@ -0,0 +1,264 @@ + + + + + +Uses of Package org.apache.guacamole.io (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
org.apache.guacamole.io

+
+
+ +
+
+
+ +

Copyright © 2024. All rights reserved.

+
+ + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/net/AbstractGuacamoleTunnel.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/net/AbstractGuacamoleTunnel.html new file mode 100644 index 000000000..988d03b27 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/net/AbstractGuacamoleTunnel.html @@ -0,0 +1,540 @@ + + + + + +AbstractGuacamoleTunnel (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class AbstractGuacamoleTunnel

+
+
+ +
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    GuacamoleTunnel
    +
    +
    +
    Direct Known Subclasses:
    +
    SimpleGuacamoleTunnel
    +
    +
    +
    public abstract class AbstractGuacamoleTunnel
    +extends Object
    +implements GuacamoleTunnel
    +
    Base GuacamoleTunnel implementation which synchronizes access to the + underlying reader and writer with reentrant locks. Implementations need only + provide the tunnel's UUID and socket.
    +
  • +
+
+
+
    +
  • + +
    + +
    + +
    +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      AbstractGuacamoleTunnel() +
      Creates a new GuacamoleTunnel which synchronizes access to the + Guacamole instruction stream associated with the underlying + GuacamoleSocket.
      +
      +
    • +
    +
    + +
    + +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        AbstractGuacamoleTunnel

        +
        public AbstractGuacamoleTunnel()
        +
        Creates a new GuacamoleTunnel which synchronizes access to the + Guacamole instruction stream associated with the underlying + GuacamoleSocket.
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        acquireReader

        +
        public GuacamoleReader acquireReader()
        +
        Acquires exclusive read access to the Guacamole instruction stream + and returns a GuacamoleReader for reading from that stream.
        +
        +
        Specified by:
        +
        acquireReader in interface GuacamoleTunnel
        +
        Returns:
        +
        A GuacamoleReader for reading from the Guacamole instruction + stream.
        +
        +
      • +
      + + + +
        +
      • +

        releaseReader

        +
        public void releaseReader()
        +
        Relinquishes exclusive read access to the Guacamole instruction + stream. This function should be called whenever a thread finishes using + a GuacamoleTunnel's GuacamoleReader.
        +
        +
        Specified by:
        +
        releaseReader in interface GuacamoleTunnel
        +
        +
      • +
      + + + +
        +
      • +

        hasQueuedReaderThreads

        +
        public boolean hasQueuedReaderThreads()
        +
        Returns whether there are threads waiting for read access to the + Guacamole instruction stream.
        +
        +
        Specified by:
        +
        hasQueuedReaderThreads in interface GuacamoleTunnel
        +
        Returns:
        +
        true if threads are waiting for read access the Guacamole + instruction stream, false otherwise.
        +
        +
      • +
      + + + +
        +
      • +

        acquireWriter

        +
        public GuacamoleWriter acquireWriter()
        +
        Acquires exclusive write access to the Guacamole instruction stream + and returns a GuacamoleWriter for writing to that stream.
        +
        +
        Specified by:
        +
        acquireWriter in interface GuacamoleTunnel
        +
        Returns:
        +
        A GuacamoleWriter for writing to the Guacamole instruction + stream.
        +
        +
      • +
      + + + +
        +
      • +

        releaseWriter

        +
        public void releaseWriter()
        +
        Relinquishes exclusive write access to the Guacamole instruction + stream. This function should be called whenever a thread finishes using + a GuacamoleTunnel's GuacamoleWriter.
        +
        +
        Specified by:
        +
        releaseWriter in interface GuacamoleTunnel
        +
        +
      • +
      + + + +
        +
      • +

        hasQueuedWriterThreads

        +
        public boolean hasQueuedWriterThreads()
        +
        Description copied from interface: GuacamoleTunnel
        +
        Returns whether there are threads waiting for write access to the + Guacamole instruction stream.
        +
        +
        Specified by:
        +
        hasQueuedWriterThreads in interface GuacamoleTunnel
        +
        Returns:
        +
        true if threads are waiting for write access the Guacamole + instruction stream, false otherwise.
        +
        +
      • +
      + + + + + + + +
        +
      • +

        isOpen

        +
        public boolean isOpen()
        +
        Description copied from interface: GuacamoleTunnel
        +
        Returns whether this GuacamoleTunnel is open, or has been closed.
        +
        +
        Specified by:
        +
        isOpen in interface GuacamoleTunnel
        +
        Returns:
        +
        true if this GuacamoleTunnel is open, false if it is closed.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/net/DelegatingGuacamoleSocket.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/net/DelegatingGuacamoleSocket.html new file mode 100644 index 000000000..58124995d --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/net/DelegatingGuacamoleSocket.html @@ -0,0 +1,480 @@ + + + + + +DelegatingGuacamoleSocket (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class DelegatingGuacamoleSocket

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.guacamole.net.DelegatingGuacamoleSocket
    • +
    +
  • +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      DelegatingGuacamoleSocket​(GuacamoleSocket socket) +
      Wraps the given GuacamoleSocket such that all function calls against + this DelegatingGuacamoleSocket will be delegated to it.
      +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Instance Methods Concrete Methods 
      Modifier and TypeMethodDescription
      voidclose() +
      Releases all resources in use by the connection represented by this + GuacamoleSocket.
      +
      protected GuacamoleSocketgetDelegateSocket() +
      Returns the underlying GuacamoleSocket wrapped by this + DelegatingGuacamoleSocket.
      +
      StringgetProtocol() +
      Returns the name of the protocol to be used.
      +
      GuacamoleReadergetReader() +
      Returns a GuacamoleReader which can be used to read from the + Guacamole instruction stream associated with the connection + represented by this GuacamoleSocket.
      +
      GuacamoleWritergetWriter() +
      Returns a GuacamoleWriter which can be used to write to the + Guacamole instruction stream associated with the connection + represented by this GuacamoleSocket.
      +
      booleanisOpen() +
      Returns whether this GuacamoleSocket is open and can be used for reading + and writing.
      +
      + +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        DelegatingGuacamoleSocket

        +
        public DelegatingGuacamoleSocket​(GuacamoleSocket socket)
        +
        Wraps the given GuacamoleSocket such that all function calls against + this DelegatingGuacamoleSocket will be delegated to it.
        +
        +
        Parameters:
        +
        socket - The GuacamoleSocket to wrap.
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getDelegateSocket

        +
        protected GuacamoleSocket getDelegateSocket()
        +
        Returns the underlying GuacamoleSocket wrapped by this + DelegatingGuacamoleSocket.
        +
        +
        Returns:
        +
        The GuacamoleSocket wrapped by this DelegatingGuacamoleSocket.
        +
        +
      • +
      + + + +
        +
      • +

        getProtocol

        +
        public String getProtocol()
        +
        Description copied from interface: GuacamoleSocket
        +
        Returns the name of the protocol to be used. If the protocol is not + known or the implementation refuses to reveal the underlying protocol, + null is returned. + +

        Implementations should aim to expose the name of the + underlying protocol, such that protocol-specific responses like the + "required" and "argv" instructions can be handled correctly by code + consuming the GuacamoleSocket.

        +
        +
        Specified by:
        +
        getProtocol in interface GuacamoleSocket
        +
        Returns:
        +
        The name of the protocol to be used, or null if this information is + not available.
        +
        +
      • +
      + + + +
        +
      • +

        getReader

        +
        public GuacamoleReader getReader()
        +
        Description copied from interface: GuacamoleSocket
        +
        Returns a GuacamoleReader which can be used to read from the + Guacamole instruction stream associated with the connection + represented by this GuacamoleSocket.
        +
        +
        Specified by:
        +
        getReader in interface GuacamoleSocket
        +
        Returns:
        +
        A GuacamoleReader which can be used to read from the + Guacamole instruction stream.
        +
        +
      • +
      + + + +
        +
      • +

        getWriter

        +
        public GuacamoleWriter getWriter()
        +
        Description copied from interface: GuacamoleSocket
        +
        Returns a GuacamoleWriter which can be used to write to the + Guacamole instruction stream associated with the connection + represented by this GuacamoleSocket.
        +
        +
        Specified by:
        +
        getWriter in interface GuacamoleSocket
        +
        Returns:
        +
        A GuacamoleWriter which can be used to write to the + Guacamole instruction stream.
        +
        +
      • +
      + + + + + + + +
        +
      • +

        isOpen

        +
        public boolean isOpen()
        +
        Description copied from interface: GuacamoleSocket
        +
        Returns whether this GuacamoleSocket is open and can be used for reading + and writing.
        +
        +
        Specified by:
        +
        isOpen in interface GuacamoleSocket
        +
        Returns:
        +
        true if this GuacamoleSocket is open, false otherwise.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ +
+ +

Copyright © 2024. All rights reserved.

+
+ + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/net/DelegatingGuacamoleTunnel.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/net/DelegatingGuacamoleTunnel.html new file mode 100644 index 000000000..32f7040d9 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/net/DelegatingGuacamoleTunnel.html @@ -0,0 +1,585 @@ + + + + + +DelegatingGuacamoleTunnel (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class DelegatingGuacamoleTunnel

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.guacamole.net.DelegatingGuacamoleTunnel
    • +
    +
  • +
+
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    GuacamoleTunnel
    +
    +
    +
    public class DelegatingGuacamoleTunnel
    +extends Object
    +implements GuacamoleTunnel
    +
    GuacamoleTunnel implementation which simply delegates all function calls to + an underlying GuacamoleTunnel.
    +
  • +
+
+
+
    +
  • + +
    + +
    + +
    +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      DelegatingGuacamoleTunnel​(GuacamoleTunnel tunnel) +
      Wraps the given tunnel such that all function calls against this tunnel + will be delegated to it.
      +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Instance Methods Concrete Methods 
      Modifier and TypeMethodDescription
      GuacamoleReaderacquireReader() +
      Acquires exclusive read access to the Guacamole instruction stream + and returns a GuacamoleReader for reading from that stream.
      +
      GuacamoleWriteracquireWriter() +
      Acquires exclusive write access to the Guacamole instruction stream + and returns a GuacamoleWriter for writing to that stream.
      +
      voidclose() +
      Release all resources allocated to this GuacamoleTunnel.
      +
      GuacamoleSocketgetSocket() +
      Returns the GuacamoleSocket used by this GuacamoleTunnel for reading + and writing.
      +
      UUIDgetUUID() +
      Returns the unique identifier associated with this GuacamoleTunnel.
      +
      booleanhasQueuedReaderThreads() +
      Returns whether there are threads waiting for read access to the + Guacamole instruction stream.
      +
      booleanhasQueuedWriterThreads() +
      Returns whether there are threads waiting for write access to the + Guacamole instruction stream.
      +
      booleanisOpen() +
      Returns whether this GuacamoleTunnel is open, or has been closed.
      +
      voidreleaseReader() +
      Relinquishes exclusive read access to the Guacamole instruction + stream.
      +
      voidreleaseWriter() +
      Relinquishes exclusive write access to the Guacamole instruction + stream.
      +
      + +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        DelegatingGuacamoleTunnel

        +
        public DelegatingGuacamoleTunnel​(GuacamoleTunnel tunnel)
        +
        Wraps the given tunnel such that all function calls against this tunnel + will be delegated to it.
        +
        +
        Parameters:
        +
        tunnel - The GuacamoleTunnel to wrap.
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        acquireReader

        +
        public GuacamoleReader acquireReader()
        +
        Description copied from interface: GuacamoleTunnel
        +
        Acquires exclusive read access to the Guacamole instruction stream + and returns a GuacamoleReader for reading from that stream.
        +
        +
        Specified by:
        +
        acquireReader in interface GuacamoleTunnel
        +
        Returns:
        +
        A GuacamoleReader for reading from the Guacamole instruction + stream.
        +
        +
      • +
      + + + +
        +
      • +

        releaseReader

        +
        public void releaseReader()
        +
        Description copied from interface: GuacamoleTunnel
        +
        Relinquishes exclusive read access to the Guacamole instruction + stream. This function should be called whenever a thread finishes using + a GuacamoleTunnel's GuacamoleReader.
        +
        +
        Specified by:
        +
        releaseReader in interface GuacamoleTunnel
        +
        +
      • +
      + + + +
        +
      • +

        hasQueuedReaderThreads

        +
        public boolean hasQueuedReaderThreads()
        +
        Description copied from interface: GuacamoleTunnel
        +
        Returns whether there are threads waiting for read access to the + Guacamole instruction stream.
        +
        +
        Specified by:
        +
        hasQueuedReaderThreads in interface GuacamoleTunnel
        +
        Returns:
        +
        true if threads are waiting for read access the Guacamole + instruction stream, false otherwise.
        +
        +
      • +
      + + + +
        +
      • +

        acquireWriter

        +
        public GuacamoleWriter acquireWriter()
        +
        Description copied from interface: GuacamoleTunnel
        +
        Acquires exclusive write access to the Guacamole instruction stream + and returns a GuacamoleWriter for writing to that stream.
        +
        +
        Specified by:
        +
        acquireWriter in interface GuacamoleTunnel
        +
        Returns:
        +
        A GuacamoleWriter for writing to the Guacamole instruction + stream.
        +
        +
      • +
      + + + +
        +
      • +

        releaseWriter

        +
        public void releaseWriter()
        +
        Description copied from interface: GuacamoleTunnel
        +
        Relinquishes exclusive write access to the Guacamole instruction + stream. This function should be called whenever a thread finishes using + a GuacamoleTunnel's GuacamoleWriter.
        +
        +
        Specified by:
        +
        releaseWriter in interface GuacamoleTunnel
        +
        +
      • +
      + + + +
        +
      • +

        hasQueuedWriterThreads

        +
        public boolean hasQueuedWriterThreads()
        +
        Description copied from interface: GuacamoleTunnel
        +
        Returns whether there are threads waiting for write access to the + Guacamole instruction stream.
        +
        +
        Specified by:
        +
        hasQueuedWriterThreads in interface GuacamoleTunnel
        +
        Returns:
        +
        true if threads are waiting for write access the Guacamole + instruction stream, false otherwise.
        +
        +
      • +
      + + + +
        +
      • +

        getUUID

        +
        public UUID getUUID()
        +
        Description copied from interface: GuacamoleTunnel
        +
        Returns the unique identifier associated with this GuacamoleTunnel.
        +
        +
        Specified by:
        +
        getUUID in interface GuacamoleTunnel
        +
        Returns:
        +
        The unique identifier associated with this GuacamoleTunnel.
        +
        +
      • +
      + + + +
        +
      • +

        getSocket

        +
        public GuacamoleSocket getSocket()
        +
        Description copied from interface: GuacamoleTunnel
        +
        Returns the GuacamoleSocket used by this GuacamoleTunnel for reading + and writing.
        +
        +
        Specified by:
        +
        getSocket in interface GuacamoleTunnel
        +
        Returns:
        +
        The GuacamoleSocket used by this GuacamoleTunnel.
        +
        +
      • +
      + + + + + + + +
        +
      • +

        isOpen

        +
        public boolean isOpen()
        +
        Description copied from interface: GuacamoleTunnel
        +
        Returns whether this GuacamoleTunnel is open, or has been closed.
        +
        +
        Specified by:
        +
        isOpen in interface GuacamoleTunnel
        +
        Returns:
        +
        true if this GuacamoleTunnel is open, false if it is closed.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/net/GuacamoleSocket.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/net/GuacamoleSocket.html new file mode 100644 index 000000000..8740813d7 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/net/GuacamoleSocket.html @@ -0,0 +1,371 @@ + + + + + +GuacamoleSocket (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Interface GuacamoleSocket

+
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Instance Methods Abstract Methods Default Methods 
      Modifier and TypeMethodDescription
      voidclose() +
      Releases all resources in use by the connection represented by this + GuacamoleSocket.
      +
      default StringgetProtocol() +
      Returns the name of the protocol to be used.
      +
      GuacamoleReadergetReader() +
      Returns a GuacamoleReader which can be used to read from the + Guacamole instruction stream associated with the connection + represented by this GuacamoleSocket.
      +
      GuacamoleWritergetWriter() +
      Returns a GuacamoleWriter which can be used to write to the + Guacamole instruction stream associated with the connection + represented by this GuacamoleSocket.
      +
      booleanisOpen() +
      Returns whether this GuacamoleSocket is open and can be used for reading + and writing.
      +
      +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getProtocol

        +
        default String getProtocol()
        +
        Returns the name of the protocol to be used. If the protocol is not + known or the implementation refuses to reveal the underlying protocol, + null is returned. + +

        Implementations should aim to expose the name of the + underlying protocol, such that protocol-specific responses like the + "required" and "argv" instructions can be handled correctly by code + consuming the GuacamoleSocket.

        +
        +
        Returns:
        +
        The name of the protocol to be used, or null if this information is + not available.
        +
        +
      • +
      + + + +
        +
      • +

        getReader

        +
        GuacamoleReader getReader()
        +
        Returns a GuacamoleReader which can be used to read from the + Guacamole instruction stream associated with the connection + represented by this GuacamoleSocket.
        +
        +
        Returns:
        +
        A GuacamoleReader which can be used to read from the + Guacamole instruction stream.
        +
        +
      • +
      + + + +
        +
      • +

        getWriter

        +
        GuacamoleWriter getWriter()
        +
        Returns a GuacamoleWriter which can be used to write to the + Guacamole instruction stream associated with the connection + represented by this GuacamoleSocket.
        +
        +
        Returns:
        +
        A GuacamoleWriter which can be used to write to the + Guacamole instruction stream.
        +
        +
      • +
      + + + +
        +
      • +

        close

        +
        void close()
        +    throws GuacamoleException
        +
        Releases all resources in use by the connection represented by this + GuacamoleSocket.
        +
        +
        Throws:
        +
        GuacamoleException - If an error occurs while releasing resources.
        +
        +
      • +
      + + + +
        +
      • +

        isOpen

        +
        boolean isOpen()
        +
        Returns whether this GuacamoleSocket is open and can be used for reading + and writing.
        +
        +
        Returns:
        +
        true if this GuacamoleSocket is open, false otherwise.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ +
+ +

Copyright © 2024. All rights reserved.

+
+ + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/net/GuacamoleTunnel.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/net/GuacamoleTunnel.html new file mode 100644 index 000000000..7e933b17e --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/net/GuacamoleTunnel.html @@ -0,0 +1,523 @@ + + + + + +GuacamoleTunnel (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Interface GuacamoleTunnel

+
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Field Summary

      + + + + + + + + + + + + +
      Fields 
      Modifier and TypeFieldDescription
      static StringINTERNAL_DATA_OPCODE +
      The Guacamole protocol instruction opcode reserved for arbitrary + internal use by tunnel implementations.
      +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Instance Methods Abstract Methods 
      Modifier and TypeMethodDescription
      GuacamoleReaderacquireReader() +
      Acquires exclusive read access to the Guacamole instruction stream + and returns a GuacamoleReader for reading from that stream.
      +
      GuacamoleWriteracquireWriter() +
      Acquires exclusive write access to the Guacamole instruction stream + and returns a GuacamoleWriter for writing to that stream.
      +
      voidclose() +
      Release all resources allocated to this GuacamoleTunnel.
      +
      GuacamoleSocketgetSocket() +
      Returns the GuacamoleSocket used by this GuacamoleTunnel for reading + and writing.
      +
      UUIDgetUUID() +
      Returns the unique identifier associated with this GuacamoleTunnel.
      +
      booleanhasQueuedReaderThreads() +
      Returns whether there are threads waiting for read access to the + Guacamole instruction stream.
      +
      booleanhasQueuedWriterThreads() +
      Returns whether there are threads waiting for write access to the + Guacamole instruction stream.
      +
      booleanisOpen() +
      Returns whether this GuacamoleTunnel is open, or has been closed.
      +
      voidreleaseReader() +
      Relinquishes exclusive read access to the Guacamole instruction + stream.
      +
      voidreleaseWriter() +
      Relinquishes exclusive write access to the Guacamole instruction + stream.
      +
      +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        INTERNAL_DATA_OPCODE

        +
        static final String INTERNAL_DATA_OPCODE
        +
        The Guacamole protocol instruction opcode reserved for arbitrary + internal use by tunnel implementations. The value of this opcode is + guaranteed to be the empty string (""). Tunnel implementations may use + this opcode for any purpose. It is currently used by the HTTP tunnel to + mark the end of the HTTP response, and by the WebSocket tunnel to + transmit the tunnel UUID.
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        acquireReader

        +
        GuacamoleReader acquireReader()
        +
        Acquires exclusive read access to the Guacamole instruction stream + and returns a GuacamoleReader for reading from that stream.
        +
        +
        Returns:
        +
        A GuacamoleReader for reading from the Guacamole instruction + stream.
        +
        +
      • +
      + + + +
        +
      • +

        releaseReader

        +
        void releaseReader()
        +
        Relinquishes exclusive read access to the Guacamole instruction + stream. This function should be called whenever a thread finishes using + a GuacamoleTunnel's GuacamoleReader.
        +
      • +
      + + + +
        +
      • +

        hasQueuedReaderThreads

        +
        boolean hasQueuedReaderThreads()
        +
        Returns whether there are threads waiting for read access to the + Guacamole instruction stream.
        +
        +
        Returns:
        +
        true if threads are waiting for read access the Guacamole + instruction stream, false otherwise.
        +
        +
      • +
      + + + +
        +
      • +

        acquireWriter

        +
        GuacamoleWriter acquireWriter()
        +
        Acquires exclusive write access to the Guacamole instruction stream + and returns a GuacamoleWriter for writing to that stream.
        +
        +
        Returns:
        +
        A GuacamoleWriter for writing to the Guacamole instruction + stream.
        +
        +
      • +
      + + + +
        +
      • +

        releaseWriter

        +
        void releaseWriter()
        +
        Relinquishes exclusive write access to the Guacamole instruction + stream. This function should be called whenever a thread finishes using + a GuacamoleTunnel's GuacamoleWriter.
        +
      • +
      + + + +
        +
      • +

        hasQueuedWriterThreads

        +
        boolean hasQueuedWriterThreads()
        +
        Returns whether there are threads waiting for write access to the + Guacamole instruction stream.
        +
        +
        Returns:
        +
        true if threads are waiting for write access the Guacamole + instruction stream, false otherwise.
        +
        +
      • +
      + + + +
        +
      • +

        getUUID

        +
        UUID getUUID()
        +
        Returns the unique identifier associated with this GuacamoleTunnel.
        +
        +
        Returns:
        +
        The unique identifier associated with this GuacamoleTunnel.
        +
        +
      • +
      + + + +
        +
      • +

        getSocket

        +
        GuacamoleSocket getSocket()
        +
        Returns the GuacamoleSocket used by this GuacamoleTunnel for reading + and writing.
        +
        +
        Returns:
        +
        The GuacamoleSocket used by this GuacamoleTunnel.
        +
        +
      • +
      + + + +
        +
      • +

        close

        +
        void close()
        +    throws GuacamoleException
        +
        Release all resources allocated to this GuacamoleTunnel.
        +
        +
        Throws:
        +
        GuacamoleException - if an error occurs while releasing + resources.
        +
        +
      • +
      + + + +
        +
      • +

        isOpen

        +
        boolean isOpen()
        +
        Returns whether this GuacamoleTunnel is open, or has been closed.
        +
        +
        Returns:
        +
        true if this GuacamoleTunnel is open, false if it is closed.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ +
+ +

Copyright © 2024. All rights reserved.

+
+ + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/net/InetGuacamoleSocket.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/net/InetGuacamoleSocket.html new file mode 100644 index 000000000..204ac0b10 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/net/InetGuacamoleSocket.html @@ -0,0 +1,437 @@ + + + + + +InetGuacamoleSocket (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class InetGuacamoleSocket

+
+
+ +
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    GuacamoleSocket
    +
    +
    +
    public class InetGuacamoleSocket
    +extends Object
    +implements GuacamoleSocket
    +
    Provides abstract socket-like access to a Guacamole connection over a given + hostname and port.
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      InetGuacamoleSocket​(String hostname, + int port) +
      Creates a new InetGuacamoleSocket which reads and writes instructions + to the Guacamole instruction stream of the Guacamole proxy server + running at the given hostname and port.
      +
      +
    • +
    +
    + +
    + +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        InetGuacamoleSocket

        +
        public InetGuacamoleSocket​(String hostname,
        +                           int port)
        +                    throws GuacamoleException
        +
        Creates a new InetGuacamoleSocket which reads and writes instructions + to the Guacamole instruction stream of the Guacamole proxy server + running at the given hostname and port.
        +
        +
        Parameters:
        +
        hostname - The hostname of the Guacamole proxy server to connect to.
        +
        port - The port of the Guacamole proxy server to connect to.
        +
        Throws:
        +
        GuacamoleException - If an error occurs while connecting to the + Guacamole proxy server.
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + + + + + +
        +
      • +

        getReader

        +
        public GuacamoleReader getReader()
        +
        Description copied from interface: GuacamoleSocket
        +
        Returns a GuacamoleReader which can be used to read from the + Guacamole instruction stream associated with the connection + represented by this GuacamoleSocket.
        +
        +
        Specified by:
        +
        getReader in interface GuacamoleSocket
        +
        Returns:
        +
        A GuacamoleReader which can be used to read from the + Guacamole instruction stream.
        +
        +
      • +
      + + + +
        +
      • +

        getWriter

        +
        public GuacamoleWriter getWriter()
        +
        Description copied from interface: GuacamoleSocket
        +
        Returns a GuacamoleWriter which can be used to write to the + Guacamole instruction stream associated with the connection + represented by this GuacamoleSocket.
        +
        +
        Specified by:
        +
        getWriter in interface GuacamoleSocket
        +
        Returns:
        +
        A GuacamoleWriter which can be used to write to the + Guacamole instruction stream.
        +
        +
      • +
      + + + +
        +
      • +

        isOpen

        +
        public boolean isOpen()
        +
        Description copied from interface: GuacamoleSocket
        +
        Returns whether this GuacamoleSocket is open and can be used for reading + and writing.
        +
        +
        Specified by:
        +
        isOpen in interface GuacamoleSocket
        +
        Returns:
        +
        true if this GuacamoleSocket is open, false otherwise.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ +
+ +

Copyright © 2024. All rights reserved.

+
+ + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/net/SSLGuacamoleSocket.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/net/SSLGuacamoleSocket.html new file mode 100644 index 000000000..45a39d09c --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/net/SSLGuacamoleSocket.html @@ -0,0 +1,437 @@ + + + + + +SSLGuacamoleSocket (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class SSLGuacamoleSocket

+
+
+ +
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    GuacamoleSocket
    +
    +
    +
    public class SSLGuacamoleSocket
    +extends Object
    +implements GuacamoleSocket
    +
    Provides abstract socket-like access to a Guacamole connection over SSL to + a given hostname and port.
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      SSLGuacamoleSocket​(String hostname, + int port) +
      Creates a new SSLGuacamoleSocket which reads and writes instructions + to the Guacamole instruction stream of the Guacamole proxy server + running at the given hostname and port using SSL.
      +
      +
    • +
    +
    + +
    + +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        SSLGuacamoleSocket

        +
        public SSLGuacamoleSocket​(String hostname,
        +                          int port)
        +                   throws GuacamoleException
        +
        Creates a new SSLGuacamoleSocket which reads and writes instructions + to the Guacamole instruction stream of the Guacamole proxy server + running at the given hostname and port using SSL.
        +
        +
        Parameters:
        +
        hostname - The hostname of the Guacamole proxy server to connect to.
        +
        port - The port of the Guacamole proxy server to connect to.
        +
        Throws:
        +
        GuacamoleException - If an error occurs while connecting to the + Guacamole proxy server.
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + + + + + +
        +
      • +

        getReader

        +
        public GuacamoleReader getReader()
        +
        Description copied from interface: GuacamoleSocket
        +
        Returns a GuacamoleReader which can be used to read from the + Guacamole instruction stream associated with the connection + represented by this GuacamoleSocket.
        +
        +
        Specified by:
        +
        getReader in interface GuacamoleSocket
        +
        Returns:
        +
        A GuacamoleReader which can be used to read from the + Guacamole instruction stream.
        +
        +
      • +
      + + + +
        +
      • +

        getWriter

        +
        public GuacamoleWriter getWriter()
        +
        Description copied from interface: GuacamoleSocket
        +
        Returns a GuacamoleWriter which can be used to write to the + Guacamole instruction stream associated with the connection + represented by this GuacamoleSocket.
        +
        +
        Specified by:
        +
        getWriter in interface GuacamoleSocket
        +
        Returns:
        +
        A GuacamoleWriter which can be used to write to the + Guacamole instruction stream.
        +
        +
      • +
      + + + +
        +
      • +

        isOpen

        +
        public boolean isOpen()
        +
        Description copied from interface: GuacamoleSocket
        +
        Returns whether this GuacamoleSocket is open and can be used for reading + and writing.
        +
        +
        Specified by:
        +
        isOpen in interface GuacamoleSocket
        +
        Returns:
        +
        true if this GuacamoleSocket is open, false otherwise.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ +
+ +

Copyright © 2024. All rights reserved.

+
+ + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/net/SimpleGuacamoleTunnel.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/net/SimpleGuacamoleTunnel.html new file mode 100644 index 000000000..3a1de7288 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/net/SimpleGuacamoleTunnel.html @@ -0,0 +1,384 @@ + + + + + +SimpleGuacamoleTunnel (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class SimpleGuacamoleTunnel

+
+
+ +
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    GuacamoleTunnel
    +
    +
    +
    public class SimpleGuacamoleTunnel
    +extends AbstractGuacamoleTunnel
    +
    GuacamoleTunnel implementation which uses a provided socket. The UUID of + the tunnel will be randomly generated.
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        SimpleGuacamoleTunnel

        +
        public SimpleGuacamoleTunnel​(GuacamoleSocket socket)
        +
        Creates a new GuacamoleTunnel which synchronizes access to the + Guacamole instruction stream associated with the given GuacamoleSocket.
        +
        +
        Parameters:
        +
        socket - The GuacamoleSocket to provide synchronized access for.
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getUUID

        +
        public UUID getUUID()
        +
        Description copied from interface: GuacamoleTunnel
        +
        Returns the unique identifier associated with this GuacamoleTunnel.
        +
        +
        Returns:
        +
        The unique identifier associated with this GuacamoleTunnel.
        +
        +
      • +
      + + + +
        +
      • +

        getSocket

        +
        public GuacamoleSocket getSocket()
        +
        Description copied from interface: GuacamoleTunnel
        +
        Returns the GuacamoleSocket used by this GuacamoleTunnel for reading + and writing.
        +
        +
        Returns:
        +
        The GuacamoleSocket used by this GuacamoleTunnel.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/net/class-use/AbstractGuacamoleTunnel.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/net/class-use/AbstractGuacamoleTunnel.html new file mode 100644 index 000000000..2fb31847d --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/net/class-use/AbstractGuacamoleTunnel.html @@ -0,0 +1,199 @@ + + + + + +Uses of Class org.apache.guacamole.net.AbstractGuacamoleTunnel (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.guacamole.net.AbstractGuacamoleTunnel

+
+
+ +
+
+ + + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/net/class-use/DelegatingGuacamoleSocket.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/net/class-use/DelegatingGuacamoleSocket.html new file mode 100644 index 000000000..07ae58b49 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/net/class-use/DelegatingGuacamoleSocket.html @@ -0,0 +1,216 @@ + + + + + +Uses of Class org.apache.guacamole.net.DelegatingGuacamoleSocket (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.guacamole.net.DelegatingGuacamoleSocket

+
+
+ +
+
+ + + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/net/class-use/DelegatingGuacamoleTunnel.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/net/class-use/DelegatingGuacamoleTunnel.html new file mode 100644 index 000000000..53ed1af75 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/net/class-use/DelegatingGuacamoleTunnel.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.net.DelegatingGuacamoleTunnel (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.guacamole.net.DelegatingGuacamoleTunnel

+
+
No usage of org.apache.guacamole.net.DelegatingGuacamoleTunnel
+
+ + + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/net/class-use/GuacamoleSocket.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/net/class-use/GuacamoleSocket.html new file mode 100644 index 000000000..982894e39 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/net/class-use/GuacamoleSocket.html @@ -0,0 +1,378 @@ + + + + + +Uses of Interface org.apache.guacamole.net.GuacamoleSocket (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Interface
org.apache.guacamole.net.GuacamoleSocket

+
+
+ +
+
+ + + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/net/class-use/GuacamoleTunnel.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/net/class-use/GuacamoleTunnel.html new file mode 100644 index 000000000..6cab81f40 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/net/class-use/GuacamoleTunnel.html @@ -0,0 +1,343 @@ + + + + + +Uses of Interface org.apache.guacamole.net.GuacamoleTunnel (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Interface
org.apache.guacamole.net.GuacamoleTunnel

+
+
+ +
+
+ + + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/net/class-use/InetGuacamoleSocket.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/net/class-use/InetGuacamoleSocket.html new file mode 100644 index 000000000..9883c359b --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/net/class-use/InetGuacamoleSocket.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.net.InetGuacamoleSocket (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.guacamole.net.InetGuacamoleSocket

+
+
No usage of org.apache.guacamole.net.InetGuacamoleSocket
+
+ + + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/net/class-use/SSLGuacamoleSocket.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/net/class-use/SSLGuacamoleSocket.html new file mode 100644 index 000000000..7eab40cbe --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/net/class-use/SSLGuacamoleSocket.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.net.SSLGuacamoleSocket (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.guacamole.net.SSLGuacamoleSocket

+
+
No usage of org.apache.guacamole.net.SSLGuacamoleSocket
+
+ + + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/net/class-use/SimpleGuacamoleTunnel.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/net/class-use/SimpleGuacamoleTunnel.html new file mode 100644 index 000000000..0528f5a5f --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/net/class-use/SimpleGuacamoleTunnel.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.net.SimpleGuacamoleTunnel (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.guacamole.net.SimpleGuacamoleTunnel

+
+
No usage of org.apache.guacamole.net.SimpleGuacamoleTunnel
+
+ + + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/net/package-summary.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/net/package-summary.html new file mode 100644 index 000000000..d58c34098 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/net/package-summary.html @@ -0,0 +1,235 @@ + + + + + +org.apache.guacamole.net (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Package org.apache.guacamole.net

+
+
+
+ + +
Classes which apply to network-specific concepts, such as low-level sockets + and tunnels.
+
+
    +
  • + + + + + + + + + + + + + + + + +
    Interface Summary 
    InterfaceDescription
    GuacamoleSocket +
    Provides abstract socket-like access to a Guacamole connection.
    +
    GuacamoleTunnel +
    Provides a unique identifier and synchronized access to the GuacamoleReader + and GuacamoleWriter associated with a GuacamoleSocket.
    +
    +
  • +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Class Summary 
    ClassDescription
    AbstractGuacamoleTunnel +
    Base GuacamoleTunnel implementation which synchronizes access to the + underlying reader and writer with reentrant locks.
    +
    DelegatingGuacamoleSocket +
    GuacamoleSocket implementation which simply delegates all function calls to + an underlying GuacamoleSocket.
    +
    DelegatingGuacamoleTunnel +
    GuacamoleTunnel implementation which simply delegates all function calls to + an underlying GuacamoleTunnel.
    +
    InetGuacamoleSocket +
    Provides abstract socket-like access to a Guacamole connection over a given + hostname and port.
    +
    SimpleGuacamoleTunnel +
    GuacamoleTunnel implementation which uses a provided socket.
    +
    SSLGuacamoleSocket +
    Provides abstract socket-like access to a Guacamole connection over SSL to + a given hostname and port.
    +
    +
  • +
+
+
+
+ +

Copyright © 2024. All rights reserved.

+
+ + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/net/package-tree.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/net/package-tree.html new file mode 100644 index 000000000..571afc6fc --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/net/package-tree.html @@ -0,0 +1,180 @@ + + + + + +org.apache.guacamole.net Class Hierarchy (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package org.apache.guacamole.net

+Package Hierarchies: + +
+
+
+

Class Hierarchy

+ +
+
+

Interface Hierarchy

+ +
+
+
+
+ +

Copyright © 2024. All rights reserved.

+
+ + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/net/package-use.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/net/package-use.html new file mode 100644 index 000000000..3dcddb5aa --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/net/package-use.html @@ -0,0 +1,287 @@ + + + + + +Uses of Package org.apache.guacamole.net (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
org.apache.guacamole.net

+
+
+ +
+
+
+ +

Copyright © 2024. All rights reserved.

+
+ + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/package-summary.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/package-summary.html new file mode 100644 index 000000000..8baf16a54 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/package-summary.html @@ -0,0 +1,326 @@ + + + + + +org.apache.guacamole (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Package org.apache.guacamole

+
+
+
+ + +
All classes which apply generally across the Guacamole web application + and all other web applications which use the API provided by the + Guacamole project.
+
+
    +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Exception Summary 
    ExceptionDescription
    GuacamoleClientBadTypeException +
    An exception which is thrown when data has been submitted with an unsupported + mimetype.
    +
    GuacamoleClientException +
    A generic exception thrown when part of the Guacamole API encounters + an error in the client's request.
    +
    GuacamoleClientOverrunException +
    An exception which is thrown when the client has sent too much data.
    +
    GuacamoleClientTimeoutException +
    An exception which is thrown when the client is taking too long to respond.
    +
    GuacamoleClientTooManyException +
    An exception which is thrown when too many requests have been received + by the current client, and further requests are being rejected, either + temporarily or permanently.
    +
    GuacamoleConnectionClosedException +
    An exception which is thrown when an operation cannot be performed because + its corresponding connection is closed.
    +
    GuacamoleException +
    A generic exception thrown when parts of the Guacamole API encounter + errors.
    +
    GuacamoleResourceClosedException +
    An exception which is thrown when a resource is no longer available because + it is closed.
    +
    GuacamoleResourceConflictException +
    An exception which is thrown when a resource has been requested, but that + resource is locked or currently in use, and cannot be accessed by the + current user.
    +
    GuacamoleResourceNotFoundException +
    A generic exception thrown when part of the Guacamole API fails to find + a requested resource, such as a configuration or tunnel.
    +
    GuacamoleSecurityException +
    A security-related exception thrown when parts of the Guacamole API is + denying access to a resource.
    +
    GuacamoleServerBusyException +
    An exception which is thrown when the server is too busy to service the + request.
    +
    GuacamoleServerException +
    A generic exception thrown when part of the Guacamole API encounters + an unexpected, internal error.
    +
    GuacamoleSessionClosedException +
    An exception which indicates that a session within an upstream server (such + as the remote desktop) has been forcibly terminated.
    +
    GuacamoleSessionConflictException +
    An exception which indicates that a session within an upstream server (such + as the remote desktop) has ended because it conflicted with another session.
    +
    GuacamoleSessionTimeoutException +
    An exception which indicates that a session within an upstream server (such + as the remote desktop) has ended because it appeared to be inactive.
    +
    GuacamoleUnauthorizedException +
    A security-related exception thrown when parts of the Guacamole API is + denying access to a resource, but access MAY be granted were the user + authorized (logged in).
    +
    GuacamoleUnsupportedException +
    An exception which is thrown when the requested operation is unsupported + or unimplemented.
    +
    GuacamoleUpstreamException +
    An exception which indicates than an upstream server (such as the remote + desktop) is returning an error or is otherwise unreachable.
    +
    GuacamoleUpstreamNotFoundException +
    An exception which indicates that an upstream server (such as the remote + desktop) does not appear to exist.
    +
    GuacamoleUpstreamTimeoutException +
    An exception which indicates than an upstream server (such as the remote + desktop) is taking too long to respond.
    +
    GuacamoleUpstreamUnavailableException +
    An exception which indicates that an upstream server (such as the remote + desktop) is not available to service the request.
    +
    +
  • +
+
+
+
+ +

Copyright © 2024. All rights reserved.

+
+ + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/package-tree.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/package-tree.html new file mode 100644 index 000000000..c52d1f818 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/package-tree.html @@ -0,0 +1,209 @@ + + + + + +org.apache.guacamole Class Hierarchy (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package org.apache.guacamole

+Package Hierarchies: + +
+
+
+

Class Hierarchy

+ +
+
+
+
+ +

Copyright © 2024. All rights reserved.

+
+ + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/package-use.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/package-use.html new file mode 100644 index 000000000..feb9fa5ce --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/package-use.html @@ -0,0 +1,357 @@ + + + + + +Uses of Package org.apache.guacamole (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
org.apache.guacamole

+
+
+ +
+
+
+ +

Copyright © 2024. All rights reserved.

+
+ + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/ConfiguredGuacamoleSocket.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/ConfiguredGuacamoleSocket.html new file mode 100644 index 000000000..615f47865 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/ConfiguredGuacamoleSocket.html @@ -0,0 +1,482 @@ + + + + + +ConfiguredGuacamoleSocket (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class ConfiguredGuacamoleSocket

+
+
+ +
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    GuacamoleSocket
    +
    +
    +
    public class ConfiguredGuacamoleSocket
    +extends DelegatingGuacamoleSocket
    +
    A GuacamoleSocket which pre-configures the connection based on a given + GuacamoleConfiguration, completing the initial protocol handshake before + accepting data for read or write. + + This is useful for forcing a connection to the Guacamole proxy server with + a specific configuration while disallowing the client that will be using + this GuacamoleSocket from manually controlling the initial protocol + handshake.
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        ConfiguredGuacamoleSocket

        +
        public ConfiguredGuacamoleSocket​(GuacamoleSocket socket,
        +                                 GuacamoleConfiguration config)
        +                          throws GuacamoleException
        +
        Creates a new ConfiguredGuacamoleSocket which uses the given + GuacamoleConfiguration to complete the initial protocol handshake over + the given GuacamoleSocket. A default GuacamoleClientInformation object + is used to provide basic client information.
        +
        +
        Parameters:
        +
        socket - The GuacamoleSocket to wrap.
        +
        config - The GuacamoleConfiguration to use to complete the initial + protocol handshake.
        +
        Throws:
        +
        GuacamoleException - If an error occurs while completing the + initial protocol handshake.
        +
        +
      • +
      + + + +
        +
      • +

        ConfiguredGuacamoleSocket

        +
        public ConfiguredGuacamoleSocket​(GuacamoleSocket socket,
        +                                 GuacamoleConfiguration config,
        +                                 GuacamoleClientInformation info)
        +                          throws GuacamoleException
        +
        Creates a new ConfiguredGuacamoleSocket which uses the given + GuacamoleConfiguration and GuacamoleClientInformation to complete the + initial protocol handshake over the given GuacamoleSocket.
        +
        +
        Parameters:
        +
        socket - The GuacamoleSocket to wrap.
        +
        config - The GuacamoleConfiguration to use to complete the initial + protocol handshake.
        +
        info - The GuacamoleClientInformation to use to complete the initial + protocol handshake.
        +
        Throws:
        +
        GuacamoleException - If an error occurs while completing the + initial protocol handshake.
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getConfiguration

        +
        public GuacamoleConfiguration getConfiguration()
        +
        Returns the GuacamoleConfiguration used to configure this + ConfiguredGuacamoleSocket.
        +
        +
        Returns:
        +
        The GuacamoleConfiguration used to configure this + ConfiguredGuacamoleSocket.
        +
        +
      • +
      + + + +
        +
      • +

        getConnectionID

        +
        public String getConnectionID()
        +
        Returns the unique ID associated with the Guacamole connection + negotiated by this ConfiguredGuacamoleSocket. The ID is provided by + the "ready" instruction returned by the Guacamole proxy.
        +
        +
        Returns:
        +
        The ID of the negotiated Guacamole connection.
        +
        +
      • +
      + + + +
        +
      • +

        getProtocolVersion

        +
        public GuacamoleProtocolVersion getProtocolVersion()
        +
        Returns the version of the Guacamole protocol associated with the + Guacamole connection negotiated by this ConfiguredGuacamoleSocket. This + version is the lowest version common to both ConfiguredGuacamoleSocket + and the relevant Guacamole proxy instance (guacd).
        +
        +
        Returns:
        +
        The protocol version that this ConfiguredGuacamoleSocket will use to + communicate with guacd.
        +
        +
      • +
      + + + +
        +
      • +

        getProtocol

        +
        public String getProtocol()
        +
        Description copied from interface: GuacamoleSocket
        +
        Returns the name of the protocol to be used. If the protocol is not + known or the implementation refuses to reveal the underlying protocol, + null is returned. + +

        Implementations should aim to expose the name of the + underlying protocol, such that protocol-specific responses like the + "required" and "argv" instructions can be handled correctly by code + consuming the GuacamoleSocket.

        +
        +
        Specified by:
        +
        getProtocol in interface GuacamoleSocket
        +
        Overrides:
        +
        getProtocol in class DelegatingGuacamoleSocket
        +
        Returns:
        +
        The name of the protocol to be used, or null if this information is + not available.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ +
+ +

Copyright © 2024. All rights reserved.

+
+ + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/FailoverGuacamoleSocket.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/FailoverGuacamoleSocket.html new file mode 100644 index 000000000..288fbabf8 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/FailoverGuacamoleSocket.html @@ -0,0 +1,412 @@ + + + + + +FailoverGuacamoleSocket (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class FailoverGuacamoleSocket

+
+
+ +
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    GuacamoleSocket
    +
    +
    +
    public class FailoverGuacamoleSocket
    +extends DelegatingGuacamoleSocket
    +
    GuacamoleSocket which intercepts errors received early in the Guacamole + session. Upstream errors which are intercepted early enough result in + exceptions thrown immediately within the FailoverGuacamoleSocket's + constructor, allowing a different socket to be substituted prior to + fulfilling the connection.
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        FailoverGuacamoleSocket

        +
        public FailoverGuacamoleSocket​(GuacamoleSocket socket,
        +                               int instructionQueueLimit)
        +                        throws GuacamoleException,
        +                               GuacamoleUpstreamException
        +
        Creates a new FailoverGuacamoleSocket which reads Guacamole instructions + from the given socket, searching for errors from the upstream remote + desktop until the given instruction queue limit is reached. If an + upstream error is encountered, it is thrown as a + GuacamoleUpstreamException. This constructor will block until an error + is encountered, until insufficient space remains in the instruction + queue, or until the connection appears to have been successful. + Once the FailoverGuacamoleSocket has been created, all reads, writes, + etc. will be delegated to the provided socket.
        +
        +
        Parameters:
        +
        socket - The GuacamoleSocket of the Guacamole connection this + FailoverGuacamoleSocket should handle.
        +
        instructionQueueLimit - The maximum number of characters of Guacamole instruction data to + store within the instruction queue while searching for errors. Once + this limit is exceeded, the connection is assumed to be successful.
        +
        Throws:
        +
        GuacamoleException - If an error occurs while reading data from the provided socket.
        +
        GuacamoleUpstreamException - If the connection to guacd succeeded, but an error occurred while + connecting to the remote desktop.
        +
        +
      • +
      + + + +
        +
      • +

        FailoverGuacamoleSocket

        +
        public FailoverGuacamoleSocket​(GuacamoleSocket socket)
        +                        throws GuacamoleException,
        +                               GuacamoleUpstreamException
        +
        Creates a new FailoverGuacamoleSocket which reads Guacamole instructions + from the given socket, searching for errors from the upstream remote + desktop until a maximum of 128KB of instruction data has been queued. If + an upstream error is encountered, it is thrown as a + GuacamoleUpstreamException. This constructor will block until an error + is encountered, until insufficient space remains in the instruction + queue, or until the connection appears to have been successful. + Once the FailoverGuacamoleSocket has been created, all reads, writes, + etc. will be delegated to the provided socket.
        +
        +
        Parameters:
        +
        socket - The GuacamoleSocket of the Guacamole connection this + FailoverGuacamoleSocket should handle.
        +
        Throws:
        +
        GuacamoleException - If an error occurs while reading data from the provided socket.
        +
        GuacamoleUpstreamException - If the connection to guacd succeeded, but an error occurred while + connecting to the remote desktop.
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getReader

        +
        public GuacamoleReader getReader()
        +
        Description copied from interface: GuacamoleSocket
        +
        Returns a GuacamoleReader which can be used to read from the + Guacamole instruction stream associated with the connection + represented by this GuacamoleSocket.
        +
        +
        Specified by:
        +
        getReader in interface GuacamoleSocket
        +
        Overrides:
        +
        getReader in class DelegatingGuacamoleSocket
        +
        Returns:
        +
        A GuacamoleReader which can be used to read from the + Guacamole instruction stream.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ +
+ +

Copyright © 2024. All rights reserved.

+
+ + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/FilteredGuacamoleReader.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/FilteredGuacamoleReader.html new file mode 100644 index 000000000..0be09e968 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/FilteredGuacamoleReader.html @@ -0,0 +1,413 @@ + + + + + +FilteredGuacamoleReader (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class FilteredGuacamoleReader

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.guacamole.protocol.FilteredGuacamoleReader
    • +
    +
  • +
+
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    GuacamoleReader
    +
    +
    +
    public class FilteredGuacamoleReader
    +extends Object
    +implements GuacamoleReader
    +
    GuacamoleReader which applies a given GuacamoleFilter to observe or alter all + read instructions. Instructions may also be dropped or denied by the filter.
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        FilteredGuacamoleReader

        +
        public FilteredGuacamoleReader​(GuacamoleReader reader,
        +                               GuacamoleFilter filter)
        +
        Wraps the given GuacamoleReader, applying the given filter to all read + instructions. Future reads will return only instructions which pass + the filter.
        +
        +
        Parameters:
        +
        reader - The GuacamoleReader to wrap.
        +
        filter - The filter which dictates which instructions are read, and + how.
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        available

        +
        public boolean available()
        +                  throws GuacamoleException
        +
        Description copied from interface: GuacamoleReader
        +
        Returns whether instruction data is available for reading. Note that + this does not guarantee an entire instruction is available. If a full + instruction is not available, this function can return true, and a call + to read() will still block.
        +
        +
        Specified by:
        +
        available in interface GuacamoleReader
        +
        Returns:
        +
        true if instruction data is available for reading, false + otherwise.
        +
        Throws:
        +
        GuacamoleException - If an error occurs while checking for + available data.
        +
        +
      • +
      + + + +
        +
      • +

        read

        +
        public char[] read()
        +            throws GuacamoleException
        +
        Description copied from interface: GuacamoleReader
        +
        Reads at least one complete Guacamole instruction, returning a buffer + containing one or more complete Guacamole instructions and no + incomplete Guacamole instructions. This function will block until at + least one complete instruction is available.
        +
        +
        Specified by:
        +
        read in interface GuacamoleReader
        +
        Returns:
        +
        A buffer containing at least one complete Guacamole instruction, + or null if no more instructions are available for reading.
        +
        Throws:
        +
        GuacamoleException - If an error occurs while reading from the + stream.
        +
        +
      • +
      + + + +
        +
      • +

        readInstruction

        +
        public GuacamoleInstruction readInstruction()
        +                                     throws GuacamoleException
        +
        Description copied from interface: GuacamoleReader
        +
        Reads exactly one complete Guacamole instruction and returns the fully + parsed instruction.
        +
        +
        Specified by:
        +
        readInstruction in interface GuacamoleReader
        +
        Returns:
        +
        The next complete instruction from the stream, fully parsed, or + null if no more instructions are available for reading.
        +
        Throws:
        +
        GuacamoleException - If an error occurs while reading from the + stream, or if the instruction cannot be + parsed.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ +
+ +

Copyright © 2024. All rights reserved.

+
+ + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/FilteredGuacamoleSocket.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/FilteredGuacamoleSocket.html new file mode 100644 index 000000000..bc222c40c --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/FilteredGuacamoleSocket.html @@ -0,0 +1,394 @@ + + + + + +FilteredGuacamoleSocket (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class FilteredGuacamoleSocket

+
+
+ +
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    GuacamoleSocket
    +
    +
    +
    public class FilteredGuacamoleSocket
    +extends DelegatingGuacamoleSocket
    +
    Implementation of GuacamoleSocket which allows individual instructions to be + intercepted, overridden, etc.
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        FilteredGuacamoleSocket

        +
        public FilteredGuacamoleSocket​(GuacamoleSocket socket,
        +                               GuacamoleFilter readFilter,
        +                               GuacamoleFilter writeFilter)
        +
        Creates a new FilteredGuacamoleSocket which uses the given filters to + determine whether instructions read/written are allowed through, + modified, etc. If reads or writes should be unfiltered, simply specify + null rather than a particular filter.
        +
        +
        Parameters:
        +
        socket - The GuacamoleSocket to wrap.
        +
        readFilter - The GuacamoleFilter to apply to all read instructions, + if any.
        +
        writeFilter - The GuacamoleFilter to apply to all written + instructions, if any.
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getReader

        +
        public GuacamoleReader getReader()
        +
        Description copied from interface: GuacamoleSocket
        +
        Returns a GuacamoleReader which can be used to read from the + Guacamole instruction stream associated with the connection + represented by this GuacamoleSocket.
        +
        +
        Specified by:
        +
        getReader in interface GuacamoleSocket
        +
        Overrides:
        +
        getReader in class DelegatingGuacamoleSocket
        +
        Returns:
        +
        A GuacamoleReader which can be used to read from the + Guacamole instruction stream.
        +
        +
      • +
      + + + +
        +
      • +

        getWriter

        +
        public GuacamoleWriter getWriter()
        +
        Description copied from interface: GuacamoleSocket
        +
        Returns a GuacamoleWriter which can be used to write to the + Guacamole instruction stream associated with the connection + represented by this GuacamoleSocket.
        +
        +
        Specified by:
        +
        getWriter in interface GuacamoleSocket
        +
        Overrides:
        +
        getWriter in class DelegatingGuacamoleSocket
        +
        Returns:
        +
        A GuacamoleWriter which can be used to write to the + Guacamole instruction stream.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ +
+ +

Copyright © 2024. All rights reserved.

+
+ + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/FilteredGuacamoleWriter.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/FilteredGuacamoleWriter.html new file mode 100644 index 000000000..426dc8510 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/FilteredGuacamoleWriter.html @@ -0,0 +1,414 @@ + + + + + +FilteredGuacamoleWriter (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class FilteredGuacamoleWriter

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.guacamole.protocol.FilteredGuacamoleWriter
    • +
    +
  • +
+
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    GuacamoleWriter
    +
    +
    +
    public class FilteredGuacamoleWriter
    +extends Object
    +implements GuacamoleWriter
    +
    GuacamoleWriter which applies a given GuacamoleFilter to observe or alter + all written instructions. Instructions may also be dropped or denied by + the filter.
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        FilteredGuacamoleWriter

        +
        public FilteredGuacamoleWriter​(GuacamoleWriter writer,
        +                               GuacamoleFilter filter)
        +
        Wraps the given GuacamoleWriter, applying the given filter to all written + instructions. Future writes will only write instructions which pass + the filter.
        +
        +
        Parameters:
        +
        writer - The GuacamoleWriter to wrap.
        +
        filter - The filter which dictates which instructions are written, + and how.
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        write

        +
        public void write​(char[] chunk,
        +                  int offset,
        +                  int length)
        +           throws GuacamoleException
        +
        Description copied from interface: GuacamoleWriter
        +
        Writes a portion of the given array of characters to the Guacamole + instruction stream. The portion must contain only complete Guacamole + instructions.
        +
        +
        Specified by:
        +
        write in interface GuacamoleWriter
        +
        Parameters:
        +
        chunk - An array of characters containing Guacamole instructions.
        +
        offset - The start offset of the portion of the array to write.
        +
        length - The length of the portion of the array to write.
        +
        Throws:
        +
        GuacamoleException - If an error occurred while writing the + portion of the array specified.
        +
        +
      • +
      + + + +
        +
      • +

        write

        +
        public void write​(char[] chunk)
        +           throws GuacamoleException
        +
        Description copied from interface: GuacamoleWriter
        +
        Writes the entire given array of characters to the Guacamole instruction + stream. The array must consist only of complete Guacamole instructions.
        +
        +
        Specified by:
        +
        write in interface GuacamoleWriter
        +
        Parameters:
        +
        chunk - An array of characters consisting only of complete + Guacamole instructions.
        +
        Throws:
        +
        GuacamoleException - If an error occurred while writing the + the specified array.
        +
        +
      • +
      + + + + +
    • +
    +
    +
  • +
+
+
+
+ +
+ +

Copyright © 2024. All rights reserved.

+
+ + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/GuacamoleClientInformation.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/GuacamoleClientInformation.html new file mode 100644 index 000000000..44e4c2111 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/GuacamoleClientInformation.html @@ -0,0 +1,589 @@ + + + + + +GuacamoleClientInformation (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class GuacamoleClientInformation

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.guacamole.protocol.GuacamoleClientInformation
    • +
    +
  • +
+
+
    +
  • +
    +
    public class GuacamoleClientInformation
    +extends Object
    +
    An abstract representation of Guacamole client information, including all + information required by the Guacamole protocol during the preamble.
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        GuacamoleClientInformation

        +
        public GuacamoleClientInformation()
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getOptimalScreenWidth

        +
        public int getOptimalScreenWidth()
        +
        Returns the optimal screen width requested by the client, in pixels.
        +
        +
        Returns:
        +
        The optimal screen width requested by the client, in pixels.
        +
        +
      • +
      + + + +
        +
      • +

        setOptimalScreenWidth

        +
        public void setOptimalScreenWidth​(int optimalScreenWidth)
        +
        Sets the client's optimal screen width.
        +
        +
        Parameters:
        +
        optimalScreenWidth - The optimal screen width of the client.
        +
        +
      • +
      + + + +
        +
      • +

        getOptimalScreenHeight

        +
        public int getOptimalScreenHeight()
        +
        Returns the optimal screen height requested by the client, in pixels.
        +
        +
        Returns:
        +
        The optimal screen height requested by the client, in pixels.
        +
        +
      • +
      + + + +
        +
      • +

        setOptimalScreenHeight

        +
        public void setOptimalScreenHeight​(int optimalScreenHeight)
        +
        Sets the client's optimal screen height.
        +
        +
        Parameters:
        +
        optimalScreenHeight - The optimal screen height of the client.
        +
        +
      • +
      + + + +
        +
      • +

        getOptimalResolution

        +
        public int getOptimalResolution()
        +
        Returns the resolution of the screen if the optimal width and height are + used, in DPI.
        +
        +
        Returns:
        +
        The optimal screen resolution.
        +
        +
      • +
      + + + +
        +
      • +

        setOptimalResolution

        +
        public void setOptimalResolution​(int optimalResolution)
        +
        Sets the resolution of the screen if the optimal width and height are + used, in DPI.
        +
        +
        Parameters:
        +
        optimalResolution - The optimal screen resolution in DPI.
        +
        +
      • +
      + + + +
        +
      • +

        getAudioMimetypes

        +
        public List<String> getAudioMimetypes()
        +
        Returns the list of audio mimetypes supported by the client. To add or + removed supported mimetypes, the list returned by this function can be + modified.
        +
        +
        Returns:
        +
        The set of audio mimetypes supported by the client.
        +
        +
      • +
      + + + +
        +
      • +

        getVideoMimetypes

        +
        public List<String> getVideoMimetypes()
        +
        Returns the list of video mimetypes supported by the client. To add or + removed supported mimetypes, the list returned by this function can be + modified.
        +
        +
        Returns:
        +
        The set of video mimetypes supported by the client.
        +
        +
      • +
      + + + +
        +
      • +

        getImageMimetypes

        +
        public List<String> getImageMimetypes()
        +
        Returns the list of image mimetypes supported by the client. To add or + removed supported mimetypes, the list returned by this function can be + modified.
        +
        +
        Returns:
        +
        The set of image mimetypes supported by the client.
        +
        +
      • +
      + + + +
        +
      • +

        getName

        +
        public String getName()
        +
        Returns the name of the Guacamole user as reported by the client, or null + if the user name is not set.
        +
        +
        Returns:
        +
        A string value of the human-readable name reported by the client.
        +
        +
      • +
      + + + +
        +
      • +

        getTimezone

        +
        public String getTimezone()
        +
        Return the timezone as reported by the client, or null if the timezone + is not set. Valid timezones are specified in IANA zone key format, + also known as Olson time zone database or TZ Database.
        +
        +
        Returns:
        +
        A string value of the timezone reported by the client.
        +
        +
      • +
      + + + +
        +
      • +

        setName

        +
        public void setName​(String name)
        +
        Set the human-readable name of the user associated with this client.
        +
        +
        Parameters:
        +
        name - The human-readable name of the user associated with this client.
        +
        +
      • +
      + + + +
        +
      • +

        setTimezone

        +
        public void setTimezone​(String timezone)
        +
        Set the string value of the timezone, or null if the timezone will not + be provided by the client. Valid timezones are specified in IANA zone + key format (aka Olson time zone database or tz database).
        +
        +
        Parameters:
        +
        timezone - The string value of the timezone reported by the client, in tz + database format, or null if the timezone is not provided by the + client.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ +
+ +

Copyright © 2024. All rights reserved.

+
+ + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/GuacamoleConfiguration.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/GuacamoleConfiguration.html new file mode 100644 index 000000000..8e20908b8 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/GuacamoleConfiguration.html @@ -0,0 +1,578 @@ + + + + + +GuacamoleConfiguration (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class GuacamoleConfiguration

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.guacamole.protocol.GuacamoleConfiguration
    • +
    +
  • +
+
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    Serializable
    +
    +
    +
    public class GuacamoleConfiguration
    +extends Object
    +implements Serializable
    +
    All information necessary to complete the initial protocol handshake of a + Guacamole session.
    +
    +
    See Also:
    +
    Serialized Form
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        GuacamoleConfiguration

        +
        public GuacamoleConfiguration()
        +
        Creates a new, blank GuacamoleConfiguration with its protocol, connection + ID, and parameters unset.
        +
      • +
      + + + +
        +
      • +

        GuacamoleConfiguration

        +
        public GuacamoleConfiguration​(GuacamoleConfiguration config)
        +
        Copies the given GuacamoleConfiguration, creating a new, indepedent + GuacamoleConfiguration containing the same protocol, connection ID, + and parameter values, if any.
        +
        +
        Parameters:
        +
        config - The GuacamoleConfiguration to copy.
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getConnectionID

        +
        public String getConnectionID()
        +
        Returns the ID of the connection being joined, if any. If no connection + is being joined, this returns null, and the protocol must be set.
        +
        +
        Returns:
        +
        The ID of the connection being joined, or null if no connection + is being joined.
        +
        +
      • +
      + + + +
        +
      • +

        setConnectionID

        +
        public void setConnectionID​(String connectionID)
        +
        Sets the ID of the connection being joined, if any. If no connection + is being joined, this value must be omitted.
        +
        +
        Parameters:
        +
        connectionID - The ID of the connection being joined.
        +
        +
      • +
      + + + +
        +
      • +

        getProtocol

        +
        public String getProtocol()
        +
        Returns the name of the protocol to be used.
        +
        +
        Returns:
        +
        The name of the protocol to be used.
        +
        +
      • +
      + + + +
        +
      • +

        setProtocol

        +
        public void setProtocol​(String protocol)
        +
        Sets the name of the protocol to be used. If no connection is being + joined (a new connection is being established), this value must be set. + +

        If a connection is being joined, this value should still be + set to ensure that protocol-specific responses like the + "required" and "argv" instructions can be understood in their proper + context by other code that may consume this GuacamoleConfiguration like + ConfiguredGuacamoleSocket. + +

        If this value is unavailable or remains unset, it is still possible + to join an established connection using + setConnectionID(java.lang.String), however protocol-specific + responses like the "required" and "argv" instructions might not be + possible to handle correctly if the underlying protocol is not made + available through some other means to the client receiving those + responses.

        +
        +
        Parameters:
        +
        protocol - The name of the protocol to be used.
        +
        +
      • +
      + + + +
        +
      • +

        getParameter

        +
        public String getParameter​(String name)
        +
        Returns the value set for the parameter with the given name, if any.
        +
        +
        Parameters:
        +
        name - The name of the parameter to return the value for.
        +
        Returns:
        +
        The value of the parameter with the given name, or null if + that parameter has not been set.
        +
        +
      • +
      + + + +
        +
      • +

        setParameter

        +
        public void setParameter​(String name,
        +                         String value)
        +
        Sets the value for the parameter with the given name.
        +
        +
        Parameters:
        +
        name - The name of the parameter to set the value for.
        +
        value - The value to set for the parameter with the given name.
        +
        +
      • +
      + + + +
        +
      • +

        unsetParameter

        +
        public void unsetParameter​(String name)
        +
        Removes the value set for the parameter with the given name.
        +
        +
        Parameters:
        +
        name - The name of the parameter to remove the value of.
        +
        +
      • +
      + + + +
        +
      • +

        getParameterNames

        +
        public Set<String> getParameterNames()
        +
        Returns a set of all currently defined parameter names. Each name + corresponds to a parameter that has a value set on this + GuacamoleConfiguration via setParameter().
        +
        +
        Returns:
        +
        A set of all currently defined parameter names.
        +
        +
      • +
      + + + +
        +
      • +

        getParameters

        +
        public Map<String,​String> getParameters()
        +
        Returns a map which contains parameter name/value pairs as key/value + pairs. Changes to this map will affect the parameters stored within + this configuration.
        +
        +
        Returns:
        +
        A map which contains all parameter name/value pairs as key/value + pairs.
        +
        +
      • +
      + + + +
        +
      • +

        setParameters

        +
        public void setParameters​(Map<String,​String> parameters)
        +
        Replaces all current parameters with the parameters defined within the + given map. Key/value pairs within the map represent parameter name/value + pairs.
        +
        +
        Parameters:
        +
        parameters - A map which contains all parameter name/value pairs as key/value + pairs.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ +
+ +

Copyright © 2024. All rights reserved.

+
+ + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/GuacamoleFilter.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/GuacamoleFilter.html new file mode 100644 index 000000000..caa3e0e72 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/GuacamoleFilter.html @@ -0,0 +1,275 @@ + + + + + +GuacamoleFilter (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Interface GuacamoleFilter

+
+
+
+
    +
  • +
    +
    public interface GuacamoleFilter
    +
    Interface which provides for the filtering of individual instructions. Each + filtered instruction may be allowed through untouched, modified, replaced, + dropped, or explicitly denied.
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        filter

        +
        GuacamoleInstruction filter​(GuacamoleInstruction instruction)
        +                     throws GuacamoleException
        +
        Applies the filter to the given instruction, returning the original + instruction, a modified version of the original, or null, depending + on the implementation.
        +
        +
        Parameters:
        +
        instruction - The instruction to filter.
        +
        Returns:
        +
        The original instruction, if the instruction is to be allowed, + a modified version of the instruction, if the instruction is + to be overridden, or null, if the instruction is to be dropped.
        +
        Throws:
        +
        GuacamoleException - If an error occurs filtering the instruction, + or if the instruction must be explicitly + denied.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ +
+ +

Copyright © 2024. All rights reserved.

+
+ + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/GuacamoleInstruction.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/GuacamoleInstruction.html new file mode 100644 index 000000000..c581efff6 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/GuacamoleInstruction.html @@ -0,0 +1,408 @@ + + + + + +GuacamoleInstruction (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class GuacamoleInstruction

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.guacamole.protocol.GuacamoleInstruction
    • +
    +
  • +
+
+
    +
  • +
    +
    public class GuacamoleInstruction
    +extends Object
    +
    An abstract representation of a Guacamole instruction, as defined by the + Guacamole protocol.
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        GuacamoleInstruction

        +
        public GuacamoleInstruction​(String opcode,
        +                            String... args)
        +
        Creates a new GuacamoleInstruction having the given Operation and + list of arguments values.
        +
        +
        Parameters:
        +
        opcode - The opcode of the instruction to create.
        +
        args - The list of argument values to provide in the new + instruction if any.
        +
        +
      • +
      + + + +
        +
      • +

        GuacamoleInstruction

        +
        public GuacamoleInstruction​(String opcode,
        +                            List<String> args)
        +
        Creates a new GuacamoleInstruction having the given Operation and + list of arguments values. The list given will be used to back the + internal list of arguments and the list returned by getArgs().
        +
        +
        Parameters:
        +
        opcode - The opcode of the instruction to create.
        +
        args - The list of argument values to provide in the new + instruction if any.
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getOpcode

        +
        public String getOpcode()
        +
        Returns the opcode associated with this GuacamoleInstruction.
        +
        +
        Returns:
        +
        The opcode associated with this GuacamoleInstruction.
        +
        +
      • +
      + + + +
        +
      • +

        getArgs

        +
        public List<String> getArgs()
        +
        Returns a List of all argument values specified for this + GuacamoleInstruction. Note that the List returned is immutable. + Attempts to modify the list will result in exceptions.
        +
        +
        Returns:
        +
        A List of all argument values specified for this + GuacamoleInstruction.
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public String toString()
        +
        Returns this GuacamoleInstruction in the form it would be sent over the + Guacamole protocol.
        +
        +
        Overrides:
        +
        toString in class Object
        +
        Returns:
        +
        This GuacamoleInstruction in the form it would be sent over the + Guacamole protocol.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ +
+ +

Copyright © 2024. All rights reserved.

+
+ + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/GuacamoleParser.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/GuacamoleParser.html new file mode 100644 index 000000000..a34e9453a --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/GuacamoleParser.html @@ -0,0 +1,516 @@ + + + + + +GuacamoleParser (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class GuacamoleParser

+
+
+ +
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    Iterator<GuacamoleInstruction>
    +
    +
    +
    public class GuacamoleParser
    +extends Object
    +implements Iterator<GuacamoleInstruction>
    +
    Parser for the Guacamole protocol. Arbitrary instruction data is appended, + and instructions are returned as a result. Invalid instructions result in + exceptions.
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        INSTRUCTION_MAX_LENGTH

        +
        public static final int INSTRUCTION_MAX_LENGTH
        +
        The maximum number of characters per instruction.
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        INSTRUCTION_MAX_DIGITS

        +
        public static final int INSTRUCTION_MAX_DIGITS
        +
        The maximum number of digits to allow per length prefix.
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        INSTRUCTION_MAX_ELEMENTS

        +
        public static final int INSTRUCTION_MAX_ELEMENTS
        +
        The maximum number of elements per instruction, including the opcode.
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        GuacamoleParser

        +
        public GuacamoleParser()
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        append

        +
        public int append​(char[] chunk,
        +                  int offset,
        +                  int length)
        +           throws GuacamoleException
        +
        Appends data from the given buffer to the current instruction.
        +
        +
        Parameters:
        +
        chunk - The buffer containing the data to append.
        +
        offset - The offset within the buffer where the data begins.
        +
        length - The length of the data to append.
        +
        Returns:
        +
        The number of characters appended, or 0 if complete instructions + have already been parsed and must be read via next() before more + data can be appended.
        +
        Throws:
        +
        GuacamoleException - If an error occurs while parsing the new data.
        +
        +
      • +
      + + + +
        +
      • +

        append

        +
        public int append​(char[] chunk)
        +           throws GuacamoleException
        +
        Appends data from the given buffer to the current instruction.
        +
        +
        Parameters:
        +
        chunk - The data to append.
        +
        Returns:
        +
        The number of characters appended, or 0 if complete instructions + have already been parsed and must be read via next() before + more data can be appended.
        +
        Throws:
        +
        GuacamoleException - If an error occurs while parsing the new data.
        +
        +
      • +
      + + + + + + + + + + + + +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/GuacamoleProtocolCapability.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/GuacamoleProtocolCapability.html new file mode 100644 index 000000000..4e34fb8ae --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/GuacamoleProtocolCapability.html @@ -0,0 +1,501 @@ + + + + + +GuacamoleProtocolCapability (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Enum GuacamoleProtocolCapability

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Enum Constant Detail

      + + + +
        +
      • +

        ARBITRARY_HANDSHAKE_ORDER

        +
        public static final GuacamoleProtocolCapability ARBITRARY_HANDSHAKE_ORDER
        +
        The protocol does not require handshake instructions to be sent in a + specific order, nor that all handshake instructions be sent. Arbitrary + handshake order was introduced in + GuacamoleProtocolVersion.VERSION_1_1_0.
        +
      • +
      + + + + + + + +
        +
      • +

        NAME_HANDSHAKE

        +
        public static final GuacamoleProtocolCapability NAME_HANDSHAKE
        +
        Support for the "name" handshake instruction, allowing clients to send + the name of the Guacamole user to be passed to guacd and associated with + connections. Support for this instruction was introduced in + GuacamoleProtocolVersion.VERSION_1_5_0.
        +
      • +
      + + + + + + + +
        +
      • +

        REQUIRED_INSTRUCTION

        +
        public static final GuacamoleProtocolCapability REQUIRED_INSTRUCTION
        +
        Support for the "required" instruction. The "required" instruction + allows the server to explicitly request connection parameters from the + client without which the connection cannot continue, such as user + credentials. Support for this instruction was introduced in + GuacamoleProtocolVersion.VERSION_1_3_0.
        +
      • +
      + + + +
        +
      • +

        TIMEZONE_HANDSHAKE

        +
        public static final GuacamoleProtocolCapability TIMEZONE_HANDSHAKE
        +
        Support for the "timezone" handshake instruction. The "timezone" + instruction allows the client to request that the server forward their + local timezone for use within the remote desktop session. Support for + forwarding the client timezone was introduced in + GuacamoleProtocolVersion.VERSION_1_1_0.
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        values

        +
        public static GuacamoleProtocolCapability[] values()
        +
        Returns an array containing the constants of this enum type, in +the order they are declared. This method may be used to iterate +over the constants as follows: +
        +for (GuacamoleProtocolCapability c : GuacamoleProtocolCapability.values())
        +    System.out.println(c);
        +
        +
        +
        Returns:
        +
        an array containing the constants of this enum type, in the order they are declared
        +
        +
      • +
      + + + +
        +
      • +

        valueOf

        +
        public static GuacamoleProtocolCapability valueOf​(String name)
        +
        Returns the enum constant of this type with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this type. (Extraneous whitespace characters are +not permitted.)
        +
        +
        Parameters:
        +
        name - the name of the enum constant to be returned.
        +
        Returns:
        +
        the enum constant with the specified name
        +
        Throws:
        +
        IllegalArgumentException - if this enum type has no constant with the specified name
        +
        NullPointerException - if the argument is null
        +
        +
      • +
      + + + +
        +
      • +

        isSupported

        +
        public boolean isSupported​(GuacamoleProtocolVersion version)
        +
        Returns whether this capability is supported in the given Guacamole + protocol version.
        +
        +
        Parameters:
        +
        version - The Guacamole protocol version to check.
        +
        Returns:
        +
        true if this capability is supported by the given protocol version, + false otherwise.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/GuacamoleProtocolVersion.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/GuacamoleProtocolVersion.html new file mode 100644 index 000000000..48a4fcf38 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/GuacamoleProtocolVersion.html @@ -0,0 +1,616 @@ + + + + + +GuacamoleProtocolVersion (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class GuacamoleProtocolVersion

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • org.apache.guacamole.protocol.GuacamoleProtocolVersion
    • +
    +
  • +
+
+
    +
  • +
    +
    public class GuacamoleProtocolVersion
    +extends Object
    +
    Representation of a Guacamole protocol version. Convenience methods are + provided for parsing and comparing versions, as is necessary when + determining the version of the Guacamole protocol common to guacd and a + client.
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Field Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Fields 
      Modifier and TypeFieldDescription
      static GuacamoleProtocolVersionLATEST +
      The most recent version of the Guacamole protocol at the time this + version of GuacamoleProtocolVersion was built.
      +
      static GuacamoleProtocolVersionVERSION_1_0_0 +
      Protocol version 1.0.0 and older.
      +
      static GuacamoleProtocolVersionVERSION_1_1_0 +
      Protocol version 1.1.0, which introduces Client-Server version + detection, arbitrary handshake instruction order, and support + for passing the client timezone to the server during the handshake.
      +
      static GuacamoleProtocolVersionVERSION_1_3_0 +
      Protocol version 1.3.0, which introduces the "required" instruction + allowing the server to explicitly request connection parameters from the + client.
      +
      static GuacamoleProtocolVersionVERSION_1_5_0 +
      Protocol version 1.5.0, which introduces the "msg" instruction, allowing + the server to send message notifications that will be displayed on the + client.
      +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      GuacamoleProtocolVersion​(int major, + int minor, + int patch) +
      Generate a new GuacamoleProtocolVersion object with the given + major version, minor version, and patch version.
      +
      +
    • +
    +
    + +
    + +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        VERSION_1_0_0

        +
        public static final GuacamoleProtocolVersion VERSION_1_0_0
        +
        Protocol version 1.0.0 and older. Any client that doesn't explicitly + set the protocol version will negotiate down to this protocol version. + This requires that handshake instructions be ordered correctly, and + lacks support for certain protocol-related features introduced in later + versions.
        +
      • +
      + + + +
        +
      • +

        VERSION_1_1_0

        +
        public static final GuacamoleProtocolVersion VERSION_1_1_0
        +
        Protocol version 1.1.0, which introduces Client-Server version + detection, arbitrary handshake instruction order, and support + for passing the client timezone to the server during the handshake.
        +
      • +
      + + + +
        +
      • +

        VERSION_1_3_0

        +
        public static final GuacamoleProtocolVersion VERSION_1_3_0
        +
        Protocol version 1.3.0, which introduces the "required" instruction + allowing the server to explicitly request connection parameters from the + client.
        +
      • +
      + + + +
        +
      • +

        VERSION_1_5_0

        +
        public static final GuacamoleProtocolVersion VERSION_1_5_0
        +
        Protocol version 1.5.0, which introduces the "msg" instruction, allowing + the server to send message notifications that will be displayed on the + client. The version also adds support for the "name" handshake + instruction, allowing guacd to store the name of the user who is + accessing the connection.
        +
      • +
      + + + +
        +
      • +

        LATEST

        +
        public static final GuacamoleProtocolVersion LATEST
        +
        The most recent version of the Guacamole protocol at the time this + version of GuacamoleProtocolVersion was built.
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        GuacamoleProtocolVersion

        +
        public GuacamoleProtocolVersion​(int major,
        +                                int minor,
        +                                int patch)
        +
        Generate a new GuacamoleProtocolVersion object with the given + major version, minor version, and patch version.
        +
        +
        Parameters:
        +
        major - The integer representation of the major version component.
        +
        minor - The integer representation of the minor version component.
        +
        patch - The integer representation of the patch version component.
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getMajor

        +
        public int getMajor()
        +
        Return the major version component of the protocol version.
        +
        +
        Returns:
        +
        The integer major version component.
        +
        +
      • +
      + + + +
        +
      • +

        getMinor

        +
        public int getMinor()
        +
        Return the minor version component of the protocol version.
        +
        +
        Returns:
        +
        The integer minor version component.
        +
        +
      • +
      + + + +
        +
      • +

        getPatch

        +
        public int getPatch()
        +
        Return the patch version component of the protocol version.
        +
        +
        Returns:
        +
        The integer patch version component.
        +
        +
      • +
      + + + +
        +
      • +

        atLeast

        +
        public boolean atLeast​(GuacamoleProtocolVersion otherVersion)
        +
        Returns whether this GuacamoleProtocolVersion is at least as recent as + (greater than or equal to) the given version.
        +
        +
        Parameters:
        +
        otherVersion - The version to which this GuacamoleProtocolVersion should be compared.
        +
        Returns:
        +
        true if this object is at least as recent as the given version, + false if the given version is newer.
        +
        +
      • +
      + + + +
        +
      • +

        parseVersion

        +
        public static GuacamoleProtocolVersion parseVersion​(String version)
        +
        Parse the String format of the version provided and return the + the enum value matching that version. If no value is provided, return + null.
        +
        +
        Parameters:
        +
        version - The String format of the version to parse.
        +
        Returns:
        +
        The enum value that matches the specified version, VERSION_1_0_0 + if no match is found, or null if no comparison version is provided.
        +
        +
      • +
      + + + +
        +
      • +

        hashCode

        +
        public int hashCode()
        +
        +
        Overrides:
        +
        hashCode in class Object
        +
        +
      • +
      + + + +
        +
      • +

        equals

        +
        public boolean equals​(Object obj)
        +
        +
        Overrides:
        +
        equals in class Object
        +
        +
      • +
      + + + + +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/GuacamoleStatus.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/GuacamoleStatus.html new file mode 100644 index 000000000..f5de5ffe9 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/GuacamoleStatus.html @@ -0,0 +1,842 @@ + + + + + +GuacamoleStatus (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Enum GuacamoleStatus

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Enum Constant Detail

      + + + +
        +
      • +

        SUCCESS

        +
        public static final GuacamoleStatus SUCCESS
        +
        The operation succeeded.
        +
      • +
      + + + +
        +
      • +

        UNSUPPORTED

        +
        public static final GuacamoleStatus UNSUPPORTED
        +
        The requested operation is unsupported.
        +
      • +
      + + + +
        +
      • +

        SERVER_ERROR

        +
        public static final GuacamoleStatus SERVER_ERROR
        +
        The operation could not be performed due to an internal failure.
        +
      • +
      + + + +
        +
      • +

        SERVER_BUSY

        +
        public static final GuacamoleStatus SERVER_BUSY
        +
        The operation could not be performed as the server is busy.
        +
      • +
      + + + +
        +
      • +

        UPSTREAM_TIMEOUT

        +
        public static final GuacamoleStatus UPSTREAM_TIMEOUT
        +
        The operation could not be performed because the upstream server is not + responding.
        +
      • +
      + + + +
        +
      • +

        UPSTREAM_ERROR

        +
        public static final GuacamoleStatus UPSTREAM_ERROR
        +
        The operation was unsuccessful due to an error or otherwise unexpected + condition of the upstream server.
        +
      • +
      + + + +
        +
      • +

        RESOURCE_NOT_FOUND

        +
        public static final GuacamoleStatus RESOURCE_NOT_FOUND
        +
        The operation could not be performed as the requested resource does not + exist.
        +
      • +
      + + + +
        +
      • +

        RESOURCE_CONFLICT

        +
        public static final GuacamoleStatus RESOURCE_CONFLICT
        +
        The operation could not be performed as the requested resource is already + in use.
        +
      • +
      + + + +
        +
      • +

        RESOURCE_CLOSED

        +
        public static final GuacamoleStatus RESOURCE_CLOSED
        +
        The operation could not be performed as the requested resource is now + closed.
        +
      • +
      + + + +
        +
      • +

        UPSTREAM_NOT_FOUND

        +
        public static final GuacamoleStatus UPSTREAM_NOT_FOUND
        +
        The operation could not be performed because the upstream server does + not appear to exist.
        +
      • +
      + + + +
        +
      • +

        UPSTREAM_UNAVAILABLE

        +
        public static final GuacamoleStatus UPSTREAM_UNAVAILABLE
        +
        The operation could not be performed because the upstream server is not + available to service the request.
        +
      • +
      + + + +
        +
      • +

        SESSION_CONFLICT

        +
        public static final GuacamoleStatus SESSION_CONFLICT
        +
        The session within the upstream server has ended because it conflicted + with another session.
        +
      • +
      + + + +
        +
      • +

        SESSION_TIMEOUT

        +
        public static final GuacamoleStatus SESSION_TIMEOUT
        +
        The session within the upstream server has ended because it appeared to + be inactive.
        +
      • +
      + + + +
        +
      • +

        SESSION_CLOSED

        +
        public static final GuacamoleStatus SESSION_CLOSED
        +
        The session within the upstream server has been forcibly terminated.
        +
      • +
      + + + +
        +
      • +

        CLIENT_BAD_REQUEST

        +
        public static final GuacamoleStatus CLIENT_BAD_REQUEST
        +
        The operation could not be performed because bad parameters were given.
        +
      • +
      + + + +
        +
      • +

        CLIENT_UNAUTHORIZED

        +
        public static final GuacamoleStatus CLIENT_UNAUTHORIZED
        +
        Permission was denied to perform the operation, as the user is not yet + authorized (not yet logged in, for example). As HTTP 401 has implications + for HTTP-specific authorization schemes, this status continues to map to + HTTP 403 ("Forbidden"). To do otherwise would risk unintended effects.
        +
      • +
      + + + +
        +
      • +

        CLIENT_FORBIDDEN

        +
        public static final GuacamoleStatus CLIENT_FORBIDDEN
        +
        Permission was denied to perform the operation, and this operation will + not be granted even if the user is authorized.
        +
      • +
      + + + +
        +
      • +

        CLIENT_TIMEOUT

        +
        public static final GuacamoleStatus CLIENT_TIMEOUT
        +
        The client took too long to respond.
        +
      • +
      + + + +
        +
      • +

        CLIENT_OVERRUN

        +
        public static final GuacamoleStatus CLIENT_OVERRUN
        +
        The client sent too much data.
        +
      • +
      + + + +
        +
      • +

        CLIENT_BAD_TYPE

        +
        public static final GuacamoleStatus CLIENT_BAD_TYPE
        +
        The client sent data of an unsupported or unexpected type.
        +
      • +
      + + + +
        +
      • +

        CLIENT_TOO_MANY

        +
        public static final GuacamoleStatus CLIENT_TOO_MANY
        +
        The operation failed because the current client is already using too + many resources.
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        values

        +
        public static GuacamoleStatus[] values()
        +
        Returns an array containing the constants of this enum type, in +the order they are declared. This method may be used to iterate +over the constants as follows: +
        +for (GuacamoleStatus c : GuacamoleStatus.values())
        +    System.out.println(c);
        +
        +
        +
        Returns:
        +
        an array containing the constants of this enum type, in the order they are declared
        +
        +
      • +
      + + + +
        +
      • +

        valueOf

        +
        public static GuacamoleStatus valueOf​(String name)
        +
        Returns the enum constant of this type with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this type. (Extraneous whitespace characters are +not permitted.)
        +
        +
        Parameters:
        +
        name - the name of the enum constant to be returned.
        +
        Returns:
        +
        the enum constant with the specified name
        +
        Throws:
        +
        IllegalArgumentException - if this enum type has no constant with the specified name
        +
        NullPointerException - if the argument is null
        +
        +
      • +
      + + + +
        +
      • +

        getHttpStatusCode

        +
        public int getHttpStatusCode()
        +
        Returns the most applicable HTTP error code.
        +
        +
        Returns:
        +
        The most applicable HTTP error code.
        +
        +
      • +
      + + + +
        +
      • +

        getWebSocketCode

        +
        public int getWebSocketCode()
        +
        Returns the most applicable HTTP error code.
        +
        +
        Returns:
        +
        The most applicable HTTP error code.
        +
        +
      • +
      + + + +
        +
      • +

        getGuacamoleStatusCode

        +
        public int getGuacamoleStatusCode()
        +
        Returns the corresponding Guacamole protocol status code.
        +
        +
        Returns:
        +
        The corresponding Guacamole protocol status code.
        +
        +
      • +
      + + + +
        +
      • +

        fromGuacamoleStatusCode

        +
        public static GuacamoleStatus fromGuacamoleStatusCode​(int code)
        +
        Returns the GuacamoleStatus corresponding to the given Guacamole + protocol status code. If no such GuacamoleStatus is defined, null is + returned.
        +
        +
        Parameters:
        +
        code - The Guacamole protocol status code to translate into a + GuacamoleStatus.
        +
        Returns:
        +
        The GuacamoleStatus corresponding to the given Guacamole protocol + status code, or null if no such GuacamoleStatus is defined.
        +
        +
      • +
      + + + +
        +
      • +

        toException

        +
        public abstract GuacamoleException toException​(String message)
        +
        Returns an instance of the GuacamoleException subclass + corresponding to this Guacamole protocol status code. All status codes + have a corresponding GuacamoleException except for SUCCESS. The + returned GuacamoleException will have the provided human-readable + message.
        +
        +
        Parameters:
        +
        message - A human readable description of the error that occurred.
        +
        Returns:
        +
        An instance of the GuacamoleException subclass that + corresponds to this status code and has the provided human-readable + message.
        +
        Throws:
        +
        IllegalStateException - If invoked on SUCCESS, which has no corresponding + GuacamoleException.
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/class-use/ConfiguredGuacamoleSocket.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/class-use/ConfiguredGuacamoleSocket.html new file mode 100644 index 000000000..c252d3685 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/class-use/ConfiguredGuacamoleSocket.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.protocol.ConfiguredGuacamoleSocket (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.guacamole.protocol.ConfiguredGuacamoleSocket

+
+
No usage of org.apache.guacamole.protocol.ConfiguredGuacamoleSocket
+
+ + + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/class-use/FailoverGuacamoleSocket.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/class-use/FailoverGuacamoleSocket.html new file mode 100644 index 000000000..3f8492679 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/class-use/FailoverGuacamoleSocket.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.protocol.FailoverGuacamoleSocket (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.guacamole.protocol.FailoverGuacamoleSocket

+
+
No usage of org.apache.guacamole.protocol.FailoverGuacamoleSocket
+
+ + + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/class-use/FilteredGuacamoleReader.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/class-use/FilteredGuacamoleReader.html new file mode 100644 index 000000000..6e8426302 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/class-use/FilteredGuacamoleReader.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.protocol.FilteredGuacamoleReader (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.guacamole.protocol.FilteredGuacamoleReader

+
+
No usage of org.apache.guacamole.protocol.FilteredGuacamoleReader
+
+ + + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/class-use/FilteredGuacamoleSocket.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/class-use/FilteredGuacamoleSocket.html new file mode 100644 index 000000000..3c4a55920 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/class-use/FilteredGuacamoleSocket.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.protocol.FilteredGuacamoleSocket (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.guacamole.protocol.FilteredGuacamoleSocket

+
+
No usage of org.apache.guacamole.protocol.FilteredGuacamoleSocket
+
+ + + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/class-use/FilteredGuacamoleWriter.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/class-use/FilteredGuacamoleWriter.html new file mode 100644 index 000000000..7aac6f807 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/class-use/FilteredGuacamoleWriter.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.protocol.FilteredGuacamoleWriter (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.guacamole.protocol.FilteredGuacamoleWriter

+
+
No usage of org.apache.guacamole.protocol.FilteredGuacamoleWriter
+
+ + + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/class-use/GuacamoleClientInformation.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/class-use/GuacamoleClientInformation.html new file mode 100644 index 000000000..8757e49e5 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/class-use/GuacamoleClientInformation.html @@ -0,0 +1,200 @@ + + + + + +Uses of Class org.apache.guacamole.protocol.GuacamoleClientInformation (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.guacamole.protocol.GuacamoleClientInformation

+
+
+ +
+
+ + + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/class-use/GuacamoleConfiguration.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/class-use/GuacamoleConfiguration.html new file mode 100644 index 000000000..36badee20 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/class-use/GuacamoleConfiguration.html @@ -0,0 +1,235 @@ + + + + + +Uses of Class org.apache.guacamole.protocol.GuacamoleConfiguration (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.guacamole.protocol.GuacamoleConfiguration

+
+
+ +
+
+ + + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/class-use/GuacamoleFilter.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/class-use/GuacamoleFilter.html new file mode 100644 index 000000000..cf43c7fd2 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/class-use/GuacamoleFilter.html @@ -0,0 +1,216 @@ + + + + + +Uses of Interface org.apache.guacamole.protocol.GuacamoleFilter (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Interface
org.apache.guacamole.protocol.GuacamoleFilter

+
+
+ +
+
+ + + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/class-use/GuacamoleInstruction.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/class-use/GuacamoleInstruction.html new file mode 100644 index 000000000..b5e0b050f --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/class-use/GuacamoleInstruction.html @@ -0,0 +1,293 @@ + + + + + +Uses of Class org.apache.guacamole.protocol.GuacamoleInstruction (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.guacamole.protocol.GuacamoleInstruction

+
+
+ +
+
+ + + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/class-use/GuacamoleParser.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/class-use/GuacamoleParser.html new file mode 100644 index 000000000..203297f66 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/class-use/GuacamoleParser.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.protocol.GuacamoleParser (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.guacamole.protocol.GuacamoleParser

+
+
No usage of org.apache.guacamole.protocol.GuacamoleParser
+
+ + + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/class-use/GuacamoleProtocolCapability.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/class-use/GuacamoleProtocolCapability.html new file mode 100644 index 000000000..7ff2afcc0 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/class-use/GuacamoleProtocolCapability.html @@ -0,0 +1,206 @@ + + + + + +Uses of Class org.apache.guacamole.protocol.GuacamoleProtocolCapability (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.guacamole.protocol.GuacamoleProtocolCapability

+
+
+ +
+
+ + + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/class-use/GuacamoleProtocolVersion.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/class-use/GuacamoleProtocolVersion.html new file mode 100644 index 000000000..a3ac69685 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/class-use/GuacamoleProtocolVersion.html @@ -0,0 +1,285 @@ + + + + + +Uses of Class org.apache.guacamole.protocol.GuacamoleProtocolVersion (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.guacamole.protocol.GuacamoleProtocolVersion

+
+
+ +
+
+ + + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/class-use/GuacamoleStatus.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/class-use/GuacamoleStatus.html new file mode 100644 index 000000000..fa00fc512 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/class-use/GuacamoleStatus.html @@ -0,0 +1,351 @@ + + + + + +Uses of Class org.apache.guacamole.protocol.GuacamoleStatus (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.guacamole.protocol.GuacamoleStatus

+
+
+ +
+
+ + + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/package-summary.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/package-summary.html new file mode 100644 index 000000000..30ebef87b --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/package-summary.html @@ -0,0 +1,280 @@ + + + + + +org.apache.guacamole.protocol (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Package org.apache.guacamole.protocol

+
+
+
+ + +
Classes relating directly to the Guacamole protocol.
+
+
    +
  • + + + + + + + + + + + + +
    Interface Summary 
    InterfaceDescription
    GuacamoleFilter +
    Interface which provides for the filtering of individual instructions.
    +
    +
  • +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Class Summary 
    ClassDescription
    ConfiguredGuacamoleSocket +
    A GuacamoleSocket which pre-configures the connection based on a given + GuacamoleConfiguration, completing the initial protocol handshake before + accepting data for read or write.
    +
    FailoverGuacamoleSocket +
    GuacamoleSocket which intercepts errors received early in the Guacamole + session.
    +
    FilteredGuacamoleReader +
    GuacamoleReader which applies a given GuacamoleFilter to observe or alter all + read instructions.
    +
    FilteredGuacamoleSocket +
    Implementation of GuacamoleSocket which allows individual instructions to be + intercepted, overridden, etc.
    +
    FilteredGuacamoleWriter +
    GuacamoleWriter which applies a given GuacamoleFilter to observe or alter + all written instructions.
    +
    GuacamoleClientInformation +
    An abstract representation of Guacamole client information, including all + information required by the Guacamole protocol during the preamble.
    +
    GuacamoleConfiguration +
    All information necessary to complete the initial protocol handshake of a + Guacamole session.
    +
    GuacamoleInstruction +
    An abstract representation of a Guacamole instruction, as defined by the + Guacamole protocol.
    +
    GuacamoleParser +
    Parser for the Guacamole protocol.
    +
    GuacamoleProtocolVersion +
    Representation of a Guacamole protocol version.
    +
    +
  • +
  • + + + + + + + + + + + + + + + + +
    Enum Summary 
    EnumDescription
    GuacamoleProtocolCapability +
    Capabilities which may not be present in all versions of the Guacamole + protocol.
    +
    GuacamoleStatus +
    All possible statuses returned by various Guacamole instructions, each having + a corresponding code.
    +
    +
  • +
+
+
+
+ +

Copyright © 2024. All rights reserved.

+
+ + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/package-tree.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/package-tree.html new file mode 100644 index 000000000..766117fdd --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/package-tree.html @@ -0,0 +1,199 @@ + + + + + +org.apache.guacamole.protocol Class Hierarchy (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package org.apache.guacamole.protocol

+Package Hierarchies: + +
+
+
+

Class Hierarchy

+ +
+
+

Interface Hierarchy

+ +
+
+

Enum Hierarchy

+ +
+
+
+
+ +

Copyright © 2024. All rights reserved.

+
+ + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/package-use.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/package-use.html new file mode 100644 index 000000000..f7d6e6200 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/protocol/package-use.html @@ -0,0 +1,284 @@ + + + + + +Uses of Package org.apache.guacamole.protocol (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
org.apache.guacamole.protocol

+
+
+ +
+
+
+ +

Copyright © 2024. All rights reserved.

+
+ + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/servlet/GuacamoleHTTPTunnelServlet.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/servlet/GuacamoleHTTPTunnelServlet.html new file mode 100644 index 000000000..f21ecc611 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/servlet/GuacamoleHTTPTunnelServlet.html @@ -0,0 +1,745 @@ + + + + + +GuacamoleHTTPTunnelServlet (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class GuacamoleHTTPTunnelServlet

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • javax.servlet.GenericServlet
    • +
    • +
        +
      • javax.servlet.http.HttpServlet
      • +
      • +
          +
        • org.apache.guacamole.servlet.GuacamoleHTTPTunnelServlet
        • +
        +
      • +
      +
    • +
    +
  • +
+
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    Serializable, javax.servlet.Servlet, javax.servlet.ServletConfig
    +
    +
    +
    public abstract class GuacamoleHTTPTunnelServlet
    +extends javax.servlet.http.HttpServlet
    +
    A HttpServlet implementing and abstracting the operations required by the + HTTP implementation of the JavaScript Guacamole client's tunnel.
    +
    +
    See Also:
    +
    Serialized Form
    +
    +
  • +
+
+
+
    +
  • + +
    + +
    + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Instance Methods Abstract Methods Concrete Methods Deprecated Methods 
      Modifier and TypeMethodDescription
      protected voidderegisterTunnel​(String tunnelSessionToken) +
      Deregisters the HTTP tunnel associated with the given tunnel-specific + session token such that future read/write requests to that tunnel will + be rejected.
      +
      protected voidderegisterTunnel​(GuacamoleTunnel tunnel) +
      Deprecated. +
      This function has been deprecated in favor of deregisterTunnel(java.lang.String), + which decouples identification of HTTP tunnel sessions from the + tunnel UUID.
      +
      +
      voiddestroy() 
      protected abstract GuacamoleTunneldoConnect​(javax.servlet.http.HttpServletRequest request) +
      Called whenever the JavaScript Guacamole client makes a connection + request via HTTP.
      +
      protected voiddoGet​(javax.servlet.http.HttpServletRequest request, + javax.servlet.http.HttpServletResponse response) 
      protected voiddoPost​(javax.servlet.http.HttpServletRequest request, + javax.servlet.http.HttpServletResponse response) 
      protected voiddoRead​(javax.servlet.http.HttpServletRequest request, + javax.servlet.http.HttpServletResponse response, + String tunnelSessionToken) +
      Called whenever the JavaScript Guacamole client makes a read request.
      +
      protected voiddoWrite​(javax.servlet.http.HttpServletRequest request, + javax.servlet.http.HttpServletResponse response, + String tunnelSessionToken) +
      Called whenever the JavaScript Guacamole client makes a write request.
      +
      protected StringgenerateToken() +
      Generates a new, securely-random session token that may be used to + represent the ongoing communication session of a distinct HTTP tunnel + connection.
      +
      protected GuacamoleTunnelgetTunnel​(String tunnelSessionToken) +
      Returns the tunnel associated with the given tunnel-specific session + token, if it has been registered with registerTunnel(java.lang.String, org.apache.guacamole.net.GuacamoleTunnel) + and not yet deregistered with deregisterTunnel(java.lang.String).
      +
      protected voidhandleTunnelRequest​(javax.servlet.http.HttpServletRequest request, + javax.servlet.http.HttpServletResponse response) +
      Dispatches every HTTP GET and POST request to the appropriate handler + function based on the query string.
      +
      protected voidregisterTunnel​(String tunnelSessionToken, + GuacamoleTunnel tunnel) +
      Registers the given HTTP tunnel such that future read/write requests + including the given tunnel-specific session token will be properly + directed.
      +
      protected voidregisterTunnel​(GuacamoleTunnel tunnel) +
      Deprecated. +
      This function has been deprecated in favor of registerTunnel(java.lang.String, org.apache.guacamole.net.GuacamoleTunnel), + which decouples identification of HTTP tunnel sessions from the + tunnel UUID.
      +
      +
      protected voidsendError​(javax.servlet.http.HttpServletResponse response, + int guacamoleStatusCode, + int guacamoleHttpCode, + String message) +
      Sends an error on the given HTTP response using the information within + the given GuacamoleStatus.
      +
      +
        +
      • + + +

        Methods inherited from class javax.servlet.http.HttpServlet

        +doDelete, doHead, doOptions, doPut, doTrace, getLastModified, service, service
      • +
      +
        +
      • + + +

        Methods inherited from class javax.servlet.GenericServlet

        +getInitParameter, getInitParameterNames, getServletConfig, getServletContext, getServletInfo, getServletName, init, init, log, log
      • +
      + +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        GuacamoleHTTPTunnelServlet

        +
        public GuacamoleHTTPTunnelServlet()
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        generateToken

        +
        protected String generateToken()
        +
        Generates a new, securely-random session token that may be used to + represent the ongoing communication session of a distinct HTTP tunnel + connection.
        +
        +
        Returns:
        +
        A new, securely-random session token.
        +
        +
      • +
      + + + + + + + +
        +
      • +

        registerTunnel

        +
        protected void registerTunnel​(String tunnelSessionToken,
        +                              GuacamoleTunnel tunnel)
        +
        Registers the given HTTP tunnel such that future read/write requests + including the given tunnel-specific session token will be properly + directed. The session token must be unpredictable (securely-random) and + unique across all active HTTP tunnels. It is recommended that each HTTP + tunnel session token be obtained through calling generateToken().
        +
        +
        Parameters:
        +
        tunnelSessionToken - The tunnel-specific session token to associate with the HTTP tunnel + being registered.
        +
        tunnel - The tunnel to register.
        +
        +
      • +
      + + + +
        +
      • +

        deregisterTunnel

        +
        @Deprecated
        +protected void deregisterTunnel​(GuacamoleTunnel tunnel)
        +
        Deprecated. +
        This function has been deprecated in favor of deregisterTunnel(java.lang.String), + which decouples identification of HTTP tunnel sessions from the + tunnel UUID.
        +
        +
        Deregisters the given tunnel such that future read/write requests to + that tunnel will be rejected.
        +
        +
        Parameters:
        +
        tunnel - The tunnel to deregister.
        +
        +
      • +
      + + + +
        +
      • +

        deregisterTunnel

        +
        protected void deregisterTunnel​(String tunnelSessionToken)
        +
        Deregisters the HTTP tunnel associated with the given tunnel-specific + session token such that future read/write requests to that tunnel will + be rejected. Each HTTP tunnel must be associated with a session token + unique to that tunnel via a call registerTunnel(java.lang.String, org.apache.guacamole.net.GuacamoleTunnel).
        +
        +
        Parameters:
        +
        tunnelSessionToken - The tunnel-specific session token associated with the HTTP tunnel + being deregistered.
        +
        +
      • +
      + + + + + + + +
        +
      • +

        doGet

        +
        protected void doGet​(javax.servlet.http.HttpServletRequest request,
        +                     javax.servlet.http.HttpServletResponse response)
        +              throws javax.servlet.ServletException
        +
        +
        Overrides:
        +
        doGet in class javax.servlet.http.HttpServlet
        +
        Throws:
        +
        javax.servlet.ServletException
        +
        +
      • +
      + + + +
        +
      • +

        doPost

        +
        protected void doPost​(javax.servlet.http.HttpServletRequest request,
        +                      javax.servlet.http.HttpServletResponse response)
        +               throws javax.servlet.ServletException
        +
        +
        Overrides:
        +
        doPost in class javax.servlet.http.HttpServlet
        +
        Throws:
        +
        javax.servlet.ServletException
        +
        +
      • +
      + + + +
        +
      • +

        sendError

        +
        protected void sendError​(javax.servlet.http.HttpServletResponse response,
        +                         int guacamoleStatusCode,
        +                         int guacamoleHttpCode,
        +                         String message)
        +                  throws javax.servlet.ServletException
        +
        Sends an error on the given HTTP response using the information within + the given GuacamoleStatus.
        +
        +
        Parameters:
        +
        response - The HTTP response to use to send the error.
        +
        guacamoleStatusCode - The GuacamoleStatus code to send.
        +
        guacamoleHttpCode - The numeric HTTP code to send.
        +
        message - The human-readable error message to send.
        +
        Throws:
        +
        javax.servlet.ServletException - If an error prevents sending of the error code.
        +
        +
      • +
      + + + +
        +
      • +

        handleTunnelRequest

        +
        protected void handleTunnelRequest​(javax.servlet.http.HttpServletRequest request,
        +                                   javax.servlet.http.HttpServletResponse response)
        +                            throws javax.servlet.ServletException
        +
        Dispatches every HTTP GET and POST request to the appropriate handler + function based on the query string.
        +
        +
        Parameters:
        +
        request - The HttpServletRequest associated with the GET or POST request + received.
        +
        response - The HttpServletResponse associated with the GET or POST request + received.
        +
        Throws:
        +
        javax.servlet.ServletException - If an error occurs while servicing the request.
        +
        +
      • +
      + + + +
        +
      • +

        doConnect

        +
        protected abstract GuacamoleTunnel doConnect​(javax.servlet.http.HttpServletRequest request)
        +                                      throws GuacamoleException
        +
        Called whenever the JavaScript Guacamole client makes a connection + request via HTTP. It it up to the implementor of this function to define + what conditions must be met for a tunnel to be configured and returned + as a result of this connection request (whether some sort of credentials + must be specified, for example).
        +
        +
        Parameters:
        +
        request - The HttpServletRequest associated with the connection request + received. Any parameters specified along with the connection request + can be read from this object.
        +
        Returns:
        +
        A newly constructed GuacamoleTunnel if successful, null otherwise.
        +
        Throws:
        +
        GuacamoleException - If an error occurs while constructing the GuacamoleTunnel, or if the + conditions required for connection are not met.
        +
        +
      • +
      + + + +
        +
      • +

        doRead

        +
        protected void doRead​(javax.servlet.http.HttpServletRequest request,
        +                      javax.servlet.http.HttpServletResponse response,
        +                      String tunnelSessionToken)
        +               throws GuacamoleException
        +
        Called whenever the JavaScript Guacamole client makes a read request. + This function should in general not be overridden, as it already + contains a proper implementation of the read operation.
        +
        +
        Parameters:
        +
        request - The HttpServletRequest associated with the read request received.
        +
        response - The HttpServletResponse associated with the write request received. + Any data to be sent to the client in response to the write request + should be written to the response body of this HttpServletResponse.
        +
        tunnelSessionToken - The tunnel-specific session token of the HTTP tunnel to read from, + as specified in the read request. This tunnel must have been created + by a previous call to doConnect().
        +
        Throws:
        +
        GuacamoleException - If an error occurs while handling the read request.
        +
        +
      • +
      + + + +
        +
      • +

        doWrite

        +
        protected void doWrite​(javax.servlet.http.HttpServletRequest request,
        +                       javax.servlet.http.HttpServletResponse response,
        +                       String tunnelSessionToken)
        +                throws GuacamoleException
        +
        Called whenever the JavaScript Guacamole client makes a write request. + This function should in general not be overridden, as it already + contains a proper implementation of the write operation.
        +
        +
        Parameters:
        +
        request - The HttpServletRequest associated with the write request received. + Any data to be written will be specified within the body of this + request.
        +
        response - The HttpServletResponse associated with the write request received.
        +
        tunnelSessionToken - The tunnel-specific session token of the HTTP tunnel to write to, + as specified in the write request. This tunnel must have been created + by a previous call to doConnect().
        +
        Throws:
        +
        GuacamoleException - If an error occurs while handling the write request.
        +
        +
      • +
      + + + +
        +
      • +

        destroy

        +
        public void destroy()
        +
        +
        Specified by:
        +
        destroy in interface javax.servlet.Servlet
        +
        Overrides:
        +
        destroy in class javax.servlet.GenericServlet
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ +
+ +

Copyright © 2024. All rights reserved.

+
+ + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/servlet/class-use/GuacamoleHTTPTunnelServlet.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/servlet/class-use/GuacamoleHTTPTunnelServlet.html new file mode 100644 index 000000000..ea0ca4310 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/servlet/class-use/GuacamoleHTTPTunnelServlet.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.servlet.GuacamoleHTTPTunnelServlet (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.guacamole.servlet.GuacamoleHTTPTunnelServlet

+
+
No usage of org.apache.guacamole.servlet.GuacamoleHTTPTunnelServlet
+
+ + + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/servlet/package-summary.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/servlet/package-summary.html new file mode 100644 index 000000000..f8823aeec --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/servlet/package-summary.html @@ -0,0 +1,177 @@ + + + + + +org.apache.guacamole.servlet (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Package org.apache.guacamole.servlet

+
+
+
+ + +
Classes which build upon the Java Servlet API, providing an HTTP-based + tunnel and session management.
+
+
    +
  • + + + + + + + + + + + + +
    Class Summary 
    ClassDescription
    GuacamoleHTTPTunnelServlet +
    A HttpServlet implementing and abstracting the operations required by the + HTTP implementation of the JavaScript Guacamole client's tunnel.
    +
    +
  • +
+
+
+
+ +

Copyright © 2024. All rights reserved.

+
+ + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/servlet/package-tree.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/servlet/package-tree.html new file mode 100644 index 000000000..4bc91f7d4 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/servlet/package-tree.html @@ -0,0 +1,173 @@ + + + + + +org.apache.guacamole.servlet Class Hierarchy (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package org.apache.guacamole.servlet

+Package Hierarchies: + +
+
+
+

Class Hierarchy

+ +
+
+
+
+ +

Copyright © 2024. All rights reserved.

+
+ + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/servlet/package-use.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/servlet/package-use.html new file mode 100644 index 000000000..f028db4c5 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/servlet/package-use.html @@ -0,0 +1,150 @@ + + + + + +Uses of Package org.apache.guacamole.servlet (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
org.apache.guacamole.servlet

+
+
No usage of org.apache.guacamole.servlet
+
+
+ +

Copyright © 2024. All rights reserved.

+
+ + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/websocket/GuacamoleWebSocketTunnelEndpoint.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/websocket/GuacamoleWebSocketTunnelEndpoint.html new file mode 100644 index 000000000..675c4e0c5 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/websocket/GuacamoleWebSocketTunnelEndpoint.html @@ -0,0 +1,397 @@ + + + + + +GuacamoleWebSocketTunnelEndpoint (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class GuacamoleWebSocketTunnelEndpoint

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • javax.websocket.Endpoint
    • +
    • +
        +
      • org.apache.guacamole.websocket.GuacamoleWebSocketTunnelEndpoint
      • +
      +
    • +
    +
  • +
+
+
    +
  • +
    +
    public abstract class GuacamoleWebSocketTunnelEndpoint
    +extends javax.websocket.Endpoint
    +
    A WebSocket implementation of GuacamoleTunnel functionality, compatible with + the Guacamole.WebSocketTunnel object included with the JavaScript API. + Messages sent/received are simply chunks of the Guacamole protocol + instruction stream.
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        GuacamoleWebSocketTunnelEndpoint

        +
        public GuacamoleWebSocketTunnelEndpoint()
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        createTunnel

        +
        protected abstract GuacamoleTunnel createTunnel​(javax.websocket.Session session,
        +                                                javax.websocket.EndpointConfig config)
        +                                         throws GuacamoleException
        +
        Returns a new tunnel for the given session. How this tunnel is created + or retrieved is implementation-dependent.
        +
        +
        Parameters:
        +
        session - The session associated with the active WebSocket + connection.
        +
        config - Configuration information associated with the instance of + the endpoint created for handling this single connection.
        +
        Returns:
        +
        A connected tunnel, or null if no such tunnel exists.
        +
        Throws:
        +
        GuacamoleException - If an error occurs while retrieving the + tunnel, or if access to the tunnel is denied.
        +
        +
      • +
      + + + +
        +
      • +

        onOpen

        +
        public void onOpen​(javax.websocket.Session session,
        +                   javax.websocket.EndpointConfig config)
        +
        +
        Specified by:
        +
        onOpen in class javax.websocket.Endpoint
        +
        +
      • +
      + + + +
        +
      • +

        onMessage

        +
        public void onMessage​(String message)
        +
      • +
      + + + +
        +
      • +

        onClose

        +
        public void onClose​(javax.websocket.Session session,
        +                    javax.websocket.CloseReason closeReason)
        +
        +
        Overrides:
        +
        onClose in class javax.websocket.Endpoint
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ +
+ +

Copyright © 2024. All rights reserved.

+
+ + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/websocket/class-use/GuacamoleWebSocketTunnelEndpoint.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/websocket/class-use/GuacamoleWebSocketTunnelEndpoint.html new file mode 100644 index 000000000..78525d2da --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/websocket/class-use/GuacamoleWebSocketTunnelEndpoint.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.websocket.GuacamoleWebSocketTunnelEndpoint (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
org.apache.guacamole.websocket.GuacamoleWebSocketTunnelEndpoint

+
+
No usage of org.apache.guacamole.websocket.GuacamoleWebSocketTunnelEndpoint
+
+ + + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/websocket/package-summary.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/websocket/package-summary.html new file mode 100644 index 000000000..4cd95b082 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/websocket/package-summary.html @@ -0,0 +1,171 @@ + + + + + +org.apache.guacamole.websocket (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Package org.apache.guacamole.websocket

+
+
+
    +
  • + + + + + + + + + + + + +
    Class Summary 
    ClassDescription
    GuacamoleWebSocketTunnelEndpoint +
    A WebSocket implementation of GuacamoleTunnel functionality, compatible with + the Guacamole.WebSocketTunnel object included with the JavaScript API.
    +
    +
  • +
+
+
+
+ +

Copyright © 2024. All rights reserved.

+
+ + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/websocket/package-tree.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/websocket/package-tree.html new file mode 100644 index 000000000..dbc84baf4 --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/websocket/package-tree.html @@ -0,0 +1,169 @@ + + + + + +org.apache.guacamole.websocket Class Hierarchy (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package org.apache.guacamole.websocket

+Package Hierarchies: + +
+
+
+

Class Hierarchy

+ +
+
+
+
+ +

Copyright © 2024. All rights reserved.

+
+ + diff --git a/doc/1.5.5/guacamole-common/org/apache/guacamole/websocket/package-use.html b/doc/1.5.5/guacamole-common/org/apache/guacamole/websocket/package-use.html new file mode 100644 index 000000000..e03af890b --- /dev/null +++ b/doc/1.5.5/guacamole-common/org/apache/guacamole/websocket/package-use.html @@ -0,0 +1,150 @@ + + + + + +Uses of Package org.apache.guacamole.websocket (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
org.apache.guacamole.websocket

+
+
No usage of org.apache.guacamole.websocket
+
+
+ +

Copyright © 2024. All rights reserved.

+
+ + diff --git a/doc/1.5.5/guacamole-common/overview-summary.html b/doc/1.5.5/guacamole-common/overview-summary.html new file mode 100644 index 000000000..33afb0ae9 --- /dev/null +++ b/doc/1.5.5/guacamole-common/overview-summary.html @@ -0,0 +1,23 @@ + + + + + +guacamole-common 1.5.5 API + + + + + + + +
+ +

index.html

+
+ + diff --git a/doc/1.5.5/guacamole-common/overview-tree.html b/doc/1.5.5/guacamole-common/overview-tree.html new file mode 100644 index 000000000..fc0a92bbd --- /dev/null +++ b/doc/1.5.5/guacamole-common/overview-tree.html @@ -0,0 +1,277 @@ + + + + + +Class Hierarchy (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+

Class Hierarchy

+ +
+
+

Interface Hierarchy

+ +
+
+

Enum Hierarchy

+ +
+
+
+
+ +

Copyright © 2024. All rights reserved.

+
+ + diff --git a/doc/1.5.5/guacamole-common/package-search-index.js b/doc/1.5.5/guacamole-common/package-search-index.js new file mode 100644 index 000000000..e882394e7 --- /dev/null +++ b/doc/1.5.5/guacamole-common/package-search-index.js @@ -0,0 +1 @@ +packageSearchIndex = [{"l":"All Packages","url":"allpackages-index.html"},{"l":"org.apache.guacamole"},{"l":"org.apache.guacamole.io"},{"l":"org.apache.guacamole.net"},{"l":"org.apache.guacamole.protocol"},{"l":"org.apache.guacamole.servlet"},{"l":"org.apache.guacamole.websocket"}] \ No newline at end of file diff --git a/doc/1.5.5/guacamole-common/package-search-index.zip b/doc/1.5.5/guacamole-common/package-search-index.zip new file mode 100644 index 0000000000000000000000000000000000000000..4a2990a34bc3eb37a9923489e6200a9c0f650eda GIT binary patch literal 270 zcmWIWW@Zs#;Nak3a9>>;!GHuLf$W0BR3-ORj{)C#?<;{3eUK5sq; z2LYG$N_&^_Cp>5SmUPiAy<=HwT8&U)dCS)u*Q!HTzG7&U;hMNa#dtz0zoyPRPS2Eo zo7T*ay0?*g@qwB9WJ|?fidnhsp0F^mb+JHo@8?eEm>F}~Or`!e%)6^qA1rMiclJZZ zSJnV;c8+Jl4Ek9>=ddy|Fa&rrGKnxCoQy07axyBw>45-mRyL4QMj&(t(i_400E)y; Ar2qf` literal 0 HcmV?d00001 diff --git a/doc/1.5.5/guacamole-common/resources/glass.png b/doc/1.5.5/guacamole-common/resources/glass.png new file mode 100644 index 0000000000000000000000000000000000000000..a7f591f467a1c0c949bbc510156a0c1afb860a6e GIT binary patch literal 499 zcmVJoRsvExf%rEN>jUL}qZ_~k#FbE+Q;{`;0FZwVNX2n-^JoI; zP;4#$8DIy*Yk-P>VN(DUKmPse7mx+ExD4O|;?E5D0Z5($mjO3`*anwQU^s{ZDK#Lz zj>~{qyaIx5K!t%=G&2IJNzg!ChRpyLkO7}Ry!QaotAHAMpbB3AF(}|_f!G-oI|uK6 z`id_dumai5K%C3Y$;tKS_iqMPHg<*|-@e`liWLAggVM!zAP#@l;=c>S03;{#04Z~5 zN_+ss=Yg6*hTr59mzMwZ@+l~q!+?ft!fF66AXT#wWavHt30bZWFCK%!BNk}LN?0Hg z1VF_nfs`Lm^DjYZ1(1uD0u4CSIr)XAaqW6IT{!St5~1{i=i}zAy76p%_|w8rh@@c0Axr!ns=D-X+|*sY6!@wacG9%)Qn*O zl0sa739kT-&_?#oVxXF6tOnqTD)cZ}2vi$`ZU8RLAlo8=_z#*P3xI~i!lEh+Pdu-L zx{d*wgjtXbnGX_Yf@Tc7Q3YhLhPvc8noGJs2DA~1DySiA&6V{5JzFt ojAY1KXm~va;tU{v7C?Xj0BHw!K;2aXV*mgE07*qoM6N<$f;4TDA^-pY literal 0 HcmV?d00001 diff --git a/doc/1.5.5/guacamole-common/script.js b/doc/1.5.5/guacamole-common/script.js new file mode 100644 index 000000000..7dc93c48e --- /dev/null +++ b/doc/1.5.5/guacamole-common/script.js @@ -0,0 +1,149 @@ +/* + * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +var moduleSearchIndex; +var packageSearchIndex; +var typeSearchIndex; +var memberSearchIndex; +var tagSearchIndex; +function loadScripts(doc, tag) { + createElem(doc, tag, 'jquery/jszip/dist/jszip.js'); + createElem(doc, tag, 'jquery/jszip-utils/dist/jszip-utils.js'); + if (window.navigator.userAgent.indexOf('MSIE ') > 0 || window.navigator.userAgent.indexOf('Trident/') > 0 || + window.navigator.userAgent.indexOf('Edge/') > 0) { + createElem(doc, tag, 'jquery/jszip-utils/dist/jszip-utils-ie.js'); + } + createElem(doc, tag, 'search.js'); + + $.get(pathtoroot + "module-search-index.zip") + .done(function() { + JSZipUtils.getBinaryContent(pathtoroot + "module-search-index.zip", function(e, data) { + JSZip.loadAsync(data).then(function(zip){ + zip.file("module-search-index.json").async("text").then(function(content){ + moduleSearchIndex = JSON.parse(content); + }); + }); + }); + }); + $.get(pathtoroot + "package-search-index.zip") + .done(function() { + JSZipUtils.getBinaryContent(pathtoroot + "package-search-index.zip", function(e, data) { + JSZip.loadAsync(data).then(function(zip){ + zip.file("package-search-index.json").async("text").then(function(content){ + packageSearchIndex = JSON.parse(content); + }); + }); + }); + }); + $.get(pathtoroot + "type-search-index.zip") + .done(function() { + JSZipUtils.getBinaryContent(pathtoroot + "type-search-index.zip", function(e, data) { + JSZip.loadAsync(data).then(function(zip){ + zip.file("type-search-index.json").async("text").then(function(content){ + typeSearchIndex = JSON.parse(content); + }); + }); + }); + }); + $.get(pathtoroot + "member-search-index.zip") + .done(function() { + JSZipUtils.getBinaryContent(pathtoroot + "member-search-index.zip", function(e, data) { + JSZip.loadAsync(data).then(function(zip){ + zip.file("member-search-index.json").async("text").then(function(content){ + memberSearchIndex = JSON.parse(content); + }); + }); + }); + }); + $.get(pathtoroot + "tag-search-index.zip") + .done(function() { + JSZipUtils.getBinaryContent(pathtoroot + "tag-search-index.zip", function(e, data) { + JSZip.loadAsync(data).then(function(zip){ + zip.file("tag-search-index.json").async("text").then(function(content){ + tagSearchIndex = JSON.parse(content); + }); + }); + }); + }); + if (!moduleSearchIndex) { + createElem(doc, tag, 'module-search-index.js'); + } + if (!packageSearchIndex) { + createElem(doc, tag, 'package-search-index.js'); + } + if (!typeSearchIndex) { + createElem(doc, tag, 'type-search-index.js'); + } + if (!memberSearchIndex) { + createElem(doc, tag, 'member-search-index.js'); + } + if (!tagSearchIndex) { + createElem(doc, tag, 'tag-search-index.js'); + } + $(window).resize(function() { + $('.navPadding').css('padding-top', $('.fixedNav').css("height")); + }); +} + +function createElem(doc, tag, path) { + var script = doc.createElement(tag); + var scriptElement = doc.getElementsByTagName(tag)[0]; + script.src = pathtoroot + path; + scriptElement.parentNode.insertBefore(script, scriptElement); +} + +function show(type) { + count = 0; + for (var key in data) { + var row = document.getElementById(key); + if ((data[key] & type) !== 0) { + row.style.display = ''; + row.className = (count++ % 2) ? rowColor : altColor; + } + else + row.style.display = 'none'; + } + updateTabs(type); +} + +function updateTabs(type) { + for (var value in tabs) { + var sNode = document.getElementById(tabs[value][0]); + var spanNode = sNode.firstChild; + if (value == type) { + sNode.className = activeTableTab; + spanNode.innerHTML = tabs[value][1]; + } + else { + sNode.className = tableTab; + spanNode.innerHTML = "" + tabs[value][1] + ""; + } + } +} + +function updateModuleFrame(pFrame, cFrame) { + top.packageFrame.location = pFrame; + top.classFrame.location = cFrame; +} diff --git a/doc/1.5.5/guacamole-common/search.js b/doc/1.5.5/guacamole-common/search.js new file mode 100644 index 000000000..8492271e7 --- /dev/null +++ b/doc/1.5.5/guacamole-common/search.js @@ -0,0 +1,326 @@ +/* + * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +var noResult = {l: "No results found"}; +var catModules = "Modules"; +var catPackages = "Packages"; +var catTypes = "Types"; +var catMembers = "Members"; +var catSearchTags = "SearchTags"; +var highlight = "$&"; +var camelCaseRegexp = ""; +var secondaryMatcher = ""; +function getHighlightedText(item) { + var ccMatcher = new RegExp(camelCaseRegexp); + var label = item.replace(ccMatcher, highlight); + if (label === item) { + label = item.replace(secondaryMatcher, highlight); + } + return label; +} +function getURLPrefix(ui) { + var urlPrefix=""; + if (useModuleDirectories) { + var slash = "/"; + if (ui.item.category === catModules) { + return ui.item.l + slash; + } else if (ui.item.category === catPackages && ui.item.m) { + return ui.item.m + slash; + } else if ((ui.item.category === catTypes && ui.item.p) || ui.item.category === catMembers) { + $.each(packageSearchIndex, function(index, item) { + if (item.m && ui.item.p == item.l) { + urlPrefix = item.m + slash; + } + }); + return urlPrefix; + } else { + return urlPrefix; + } + } + return urlPrefix; +} +var watermark = 'Search'; +$(function() { + $("#search").val(''); + $("#search").prop("disabled", false); + $("#reset").prop("disabled", false); + $("#search").val(watermark).addClass('watermark'); + $("#search").blur(function() { + if ($(this).val().length == 0) { + $(this).val(watermark).addClass('watermark'); + } + }); + $("#search").on('click keydown', function() { + if ($(this).val() == watermark) { + $(this).val('').removeClass('watermark'); + } + }); + $("#reset").click(function() { + $("#search").val(''); + $("#search").focus(); + }); + $("#search").focus(); + $("#search")[0].setSelectionRange(0, 0); +}); +$.widget("custom.catcomplete", $.ui.autocomplete, { + _create: function() { + this._super(); + this.widget().menu("option", "items", "> :not(.ui-autocomplete-category)"); + }, + _renderMenu: function(ul, items) { + var rMenu = this, + currentCategory = ""; + rMenu.menu.bindings = $(); + $.each(items, function(index, item) { + var li; + if (item.l !== noResult.l && item.category !== currentCategory) { + ul.append("
  • " + item.category + "
  • "); + currentCategory = item.category; + } + li = rMenu._renderItemData(ul, item); + if (item.category) { + li.attr("aria-label", item.category + " : " + item.l); + li.attr("class", "resultItem"); + } else { + li.attr("aria-label", item.l); + li.attr("class", "resultItem"); + } + }); + }, + _renderItem: function(ul, item) { + var label = ""; + if (item.category === catModules) { + label = getHighlightedText(item.l); + } else if (item.category === catPackages) { + label = (item.m) + ? getHighlightedText(item.m + "/" + item.l) + : getHighlightedText(item.l); + } else if (item.category === catTypes) { + label = (item.p) + ? getHighlightedText(item.p + "." + item.l) + : getHighlightedText(item.l); + } else if (item.category === catMembers) { + label = getHighlightedText(item.p + "." + (item.c + "." + item.l)); + } else if (item.category === catSearchTags) { + label = getHighlightedText(item.l); + } else { + label = item.l; + } + var li = $("
  • ").appendTo(ul); + var div = $("
    ").appendTo(li); + if (item.category === catSearchTags) { + if (item.d) { + div.html(label + " (" + item.h + ")
    " + + item.d + "
    "); + } else { + div.html(label + " (" + item.h + ")"); + } + } else { + div.html(label); + } + return li; + } +}); +$(function() { + $("#search").catcomplete({ + minLength: 1, + delay: 100, + source: function(request, response) { + var result = new Array(); + var presult = new Array(); + var tresult = new Array(); + var mresult = new Array(); + var tgresult = new Array(); + var secondaryresult = new Array(); + var displayCount = 0; + var exactMatcher = new RegExp("^" + $.ui.autocomplete.escapeRegex(request.term) + "$", "i"); + camelCaseRegexp = ($.ui.autocomplete.escapeRegex(request.term)).split(/(?=[A-Z])/).join("([a-z0-9_$]*?)"); + var camelCaseMatcher = new RegExp("^" + camelCaseRegexp); + secondaryMatcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), "i"); + + // Return the nested innermost name from the specified object + function nestedName(e) { + return e.l.substring(e.l.lastIndexOf(".") + 1); + } + + function concatResults(a1, a2) { + a1 = a1.concat(a2); + a2.length = 0; + return a1; + } + + if (moduleSearchIndex) { + var mdleCount = 0; + $.each(moduleSearchIndex, function(index, item) { + item.category = catModules; + if (exactMatcher.test(item.l)) { + result.push(item); + mdleCount++; + } else if (camelCaseMatcher.test(item.l)) { + result.push(item); + } else if (secondaryMatcher.test(item.l)) { + secondaryresult.push(item); + } + }); + displayCount = mdleCount; + result = concatResults(result, secondaryresult); + } + if (packageSearchIndex) { + var pCount = 0; + var pkg = ""; + $.each(packageSearchIndex, function(index, item) { + item.category = catPackages; + pkg = (item.m) + ? (item.m + "/" + item.l) + : item.l; + if (exactMatcher.test(item.l)) { + presult.push(item); + pCount++; + } else if (camelCaseMatcher.test(pkg)) { + presult.push(item); + } else if (secondaryMatcher.test(pkg)) { + secondaryresult.push(item); + } + }); + result = result.concat(concatResults(presult, secondaryresult)); + displayCount = (pCount > displayCount) ? pCount : displayCount; + } + if (typeSearchIndex) { + var tCount = 0; + $.each(typeSearchIndex, function(index, item) { + item.category = catTypes; + var s = nestedName(item); + if (exactMatcher.test(s)) { + tresult.push(item); + tCount++; + } else if (camelCaseMatcher.test(s)) { + tresult.push(item); + } else if (secondaryMatcher.test(item.p + "." + item.l)) { + secondaryresult.push(item); + } + }); + result = result.concat(concatResults(tresult, secondaryresult)); + displayCount = (tCount > displayCount) ? tCount : displayCount; + } + if (memberSearchIndex) { + var mCount = 0; + $.each(memberSearchIndex, function(index, item) { + item.category = catMembers; + var s = nestedName(item); + if (exactMatcher.test(s)) { + mresult.push(item); + mCount++; + } else if (camelCaseMatcher.test(s)) { + mresult.push(item); + } else if (secondaryMatcher.test(item.c + "." + item.l)) { + secondaryresult.push(item); + } + }); + result = result.concat(concatResults(mresult, secondaryresult)); + displayCount = (mCount > displayCount) ? mCount : displayCount; + } + if (tagSearchIndex) { + var tgCount = 0; + $.each(tagSearchIndex, function(index, item) { + item.category = catSearchTags; + if (exactMatcher.test(item.l)) { + tgresult.push(item); + tgCount++; + } else if (secondaryMatcher.test(item.l)) { + secondaryresult.push(item); + } + }); + result = result.concat(concatResults(tgresult, secondaryresult)); + displayCount = (tgCount > displayCount) ? tgCount : displayCount; + } + displayCount = (displayCount > 500) ? displayCount : 500; + var counter = function() { + var count = {Modules: 0, Packages: 0, Types: 0, Members: 0, SearchTags: 0}; + var f = function(item) { + count[item.category] += 1; + return (count[item.category] <= displayCount); + }; + return f; + }(); + response(result.filter(counter)); + }, + response: function(event, ui) { + if (!ui.content.length) { + ui.content.push(noResult); + } else { + $("#search").empty(); + } + }, + autoFocus: true, + position: { + collision: "flip" + }, + select: function(event, ui) { + if (ui.item.l !== noResult.l) { + var url = getURLPrefix(ui); + if (ui.item.category === catModules) { + if (useModuleDirectories) { + url += "module-summary.html"; + } else { + url = ui.item.l + "-summary.html"; + } + } else if (ui.item.category === catPackages) { + if (ui.item.url) { + url = ui.item.url; + } else { + url += ui.item.l.replace(/\./g, '/') + "/package-summary.html"; + } + } else if (ui.item.category === catTypes) { + if (ui.item.url) { + url = ui.item.url; + } else if (ui.item.p === "") { + url += ui.item.l + ".html"; + } else { + url += ui.item.p.replace(/\./g, '/') + "/" + ui.item.l + ".html"; + } + } else if (ui.item.category === catMembers) { + if (ui.item.p === "") { + url += ui.item.c + ".html" + "#"; + } else { + url += ui.item.p.replace(/\./g, '/') + "/" + ui.item.c + ".html" + "#"; + } + if (ui.item.url) { + url += ui.item.url; + } else { + url += ui.item.l; + } + } else if (ui.item.category === catSearchTags) { + url += ui.item.u; + } + if (top !== window) { + parent.classFrame.location = pathtoroot + url; + } else { + window.location.href = pathtoroot + url; + } + $("#search").focus(); + } + } + }); +}); diff --git a/doc/1.5.5/guacamole-common/serialized-form.html b/doc/1.5.5/guacamole-common/serialized-form.html new file mode 100644 index 000000000..7f21eb6f8 --- /dev/null +++ b/doc/1.5.5/guacamole-common/serialized-form.html @@ -0,0 +1,351 @@ + + + + + +Serialized Form (guacamole-common 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Serialized Form

    +
    +
    + +
    +
    +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-common/stylesheet.css b/doc/1.5.5/guacamole-common/stylesheet.css new file mode 100644 index 000000000..de945eda2 --- /dev/null +++ b/doc/1.5.5/guacamole-common/stylesheet.css @@ -0,0 +1,910 @@ +/* + * Javadoc style sheet + */ + +@import url('resources/fonts/dejavu.css'); + +/* + * Styles for individual HTML elements. + * + * These are styles that are specific to individual HTML elements. Changing them affects the style of a particular + * HTML element throughout the page. + */ + +body { + background-color:#ffffff; + color:#353833; + font-family:'DejaVu Sans', Arial, Helvetica, sans-serif; + font-size:14px; + margin:0; + padding:0; + height:100%; + width:100%; +} +iframe { + margin:0; + padding:0; + height:100%; + width:100%; + overflow-y:scroll; + border:none; +} +a:link, a:visited { + text-decoration:none; + color:#4A6782; +} +a[href]:hover, a[href]:focus { + text-decoration:none; + color:#bb7a2a; +} +a[name] { + color:#353833; +} +a[name]:before, a[name]:target, a[id]:before, a[id]:target { + content:""; + display:inline-block; + position:relative; + padding-top:129px; + margin-top:-129px; +} +pre { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; +} +h1 { + font-size:20px; +} +h2 { + font-size:18px; +} +h3 { + font-size:16px; + font-style:italic; +} +h4 { + font-size:13px; +} +h5 { + font-size:12px; +} +h6 { + font-size:11px; +} +ul { + list-style-type:disc; +} +code, tt { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + padding-top:4px; + margin-top:8px; + line-height:1.4em; +} +dt code { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + padding-top:4px; +} +table tr td dt code { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + vertical-align:top; + padding-top:4px; +} +sup { + font-size:8px; +} + +/* + * Styles for HTML generated by javadoc. + * + * These are style classes that are used by the standard doclet to generate HTML documentation. + */ + +/* + * Styles for document title and copyright. + */ +.clear { + clear:both; + height:0px; + overflow:hidden; +} +.aboutLanguage { + float:right; + padding:0px 21px; + font-size:11px; + z-index:200; + margin-top:-9px; +} +.legalCopy { + margin-left:.5em; +} +.bar a, .bar a:link, .bar a:visited, .bar a:active { + color:#FFFFFF; + text-decoration:none; +} +.bar a:hover, .bar a:focus { + color:#bb7a2a; +} +.tab { + background-color:#0066FF; + color:#ffffff; + padding:8px; + width:5em; + font-weight:bold; +} +/* + * Styles for navigation bar. + */ +.bar { + background-color:#4D7A97; + color:#FFFFFF; + padding:.8em .5em .4em .8em; + height:auto;/*height:1.8em;*/ + font-size:11px; + margin:0; +} +.navPadding { + padding-top: 107px; +} +.fixedNav { + position:fixed; + width:100%; + z-index:999; + background-color:#ffffff; +} +.topNav { + background-color:#4D7A97; + color:#FFFFFF; + float:left; + padding:0; + width:100%; + clear:right; + height:2.8em; + padding-top:10px; + overflow:hidden; + font-size:12px; +} +.bottomNav { + margin-top:10px; + background-color:#4D7A97; + color:#FFFFFF; + float:left; + padding:0; + width:100%; + clear:right; + height:2.8em; + padding-top:10px; + overflow:hidden; + font-size:12px; +} +.subNav { + background-color:#dee3e9; + float:left; + width:100%; + overflow:hidden; + font-size:12px; +} +.subNav div { + clear:left; + float:left; + padding:0 0 5px 6px; + text-transform:uppercase; +} +ul.navList, ul.subNavList { + float:left; + margin:0 25px 0 0; + padding:0; +} +ul.navList li{ + list-style:none; + float:left; + padding: 5px 6px; + text-transform:uppercase; +} +ul.navListSearch { + float:right; + margin:0 0 0 0; + padding:0; +} +ul.navListSearch li { + list-style:none; + float:right; + padding: 5px 6px; + text-transform:uppercase; +} +ul.navListSearch li label { + position:relative; + right:-16px; +} +ul.subNavList li { + list-style:none; + float:left; +} +.topNav a:link, .topNav a:active, .topNav a:visited, .bottomNav a:link, .bottomNav a:active, .bottomNav a:visited { + color:#FFFFFF; + text-decoration:none; + text-transform:uppercase; +} +.topNav a:hover, .bottomNav a:hover { + text-decoration:none; + color:#bb7a2a; + text-transform:uppercase; +} +.navBarCell1Rev { + background-color:#F8981D; + color:#253441; + margin: auto 5px; +} +.skipNav { + position:absolute; + top:auto; + left:-9999px; + overflow:hidden; +} +/* + * Styles for page header and footer. + */ +.header, .footer { + clear:both; + margin:0 20px; + padding:5px 0 0 0; +} +.indexNav { + position:relative; + font-size:12px; + background-color:#dee3e9; +} +.indexNav ul { + margin-top:0; + padding:5px; +} +.indexNav ul li { + display:inline; + list-style-type:none; + padding-right:10px; + text-transform:uppercase; +} +.indexNav h1 { + font-size:13px; +} +.title { + color:#2c4557; + margin:10px 0; +} +.subTitle { + margin:5px 0 0 0; +} +.header ul { + margin:0 0 15px 0; + padding:0; +} +.footer ul { + margin:20px 0 5px 0; +} +.header ul li, .footer ul li { + list-style:none; + font-size:13px; +} +/* + * Styles for headings. + */ +div.details ul.blockList ul.blockList ul.blockList li.blockList h4, div.details ul.blockList ul.blockList ul.blockListLast li.blockList h4 { + background-color:#dee3e9; + border:1px solid #d0d9e0; + margin:0 0 6px -8px; + padding:7px 5px; +} +ul.blockList ul.blockList ul.blockList li.blockList h3 { + background-color:#dee3e9; + border:1px solid #d0d9e0; + margin:0 0 6px -8px; + padding:7px 5px; +} +ul.blockList ul.blockList li.blockList h3 { + padding:0; + margin:15px 0; +} +ul.blockList li.blockList h2 { + padding:0px 0 20px 0; +} +/* + * Styles for page layout containers. + */ +.contentContainer, .sourceContainer, .classUseContainer, .serializedFormContainer, .constantValuesContainer, +.allClassesContainer, .allPackagesContainer { + clear:both; + padding:10px 20px; + position:relative; +} +.indexContainer { + margin:10px; + position:relative; + font-size:12px; +} +.indexContainer h2 { + font-size:13px; + padding:0 0 3px 0; +} +.indexContainer ul { + margin:0; + padding:0; +} +.indexContainer ul li { + list-style:none; + padding-top:2px; +} +.contentContainer .description dl dt, .contentContainer .details dl dt, .serializedFormContainer dl dt { + font-size:12px; + font-weight:bold; + margin:10px 0 0 0; + color:#4E4E4E; +} +.contentContainer .description dl dd, .contentContainer .details dl dd, .serializedFormContainer dl dd { + margin:5px 0 10px 0px; + font-size:14px; + font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; +} +.serializedFormContainer dl.nameValue dt { + margin-left:1px; + font-size:1.1em; + display:inline; + font-weight:bold; +} +.serializedFormContainer dl.nameValue dd { + margin:0 0 0 1px; + font-size:1.1em; + display:inline; +} +/* + * Styles for lists. + */ +li.circle { + list-style:circle; +} +ul.horizontal li { + display:inline; + font-size:0.9em; +} +ul.inheritance { + margin:0; + padding:0; +} +ul.inheritance li { + display:inline; + list-style:none; +} +ul.inheritance li ul.inheritance { + margin-left:15px; + padding-left:15px; + padding-top:1px; +} +ul.blockList, ul.blockListLast { + margin:10px 0 10px 0; + padding:0; +} +ul.blockList li.blockList, ul.blockListLast li.blockList { + list-style:none; + margin-bottom:15px; + line-height:1.4; +} +ul.blockList ul.blockList li.blockList, ul.blockList ul.blockListLast li.blockList { + padding:0px 20px 5px 10px; + border:1px solid #ededed; + background-color:#f8f8f8; +} +ul.blockList ul.blockList ul.blockList li.blockList, ul.blockList ul.blockList ul.blockListLast li.blockList { + padding:0 0 5px 8px; + background-color:#ffffff; + border:none; +} +ul.blockList ul.blockList ul.blockList ul.blockList li.blockList { + margin-left:0; + padding-left:0; + padding-bottom:15px; + border:none; +} +ul.blockList ul.blockList ul.blockList ul.blockList li.blockListLast { + list-style:none; + border-bottom:none; + padding-bottom:0; +} +table tr td dl, table tr td dl dt, table tr td dl dd { + margin-top:0; + margin-bottom:1px; +} +/* + * Styles for tables. + */ +.overviewSummary, .memberSummary, .typeSummary, .useSummary, .constantsSummary, .deprecatedSummary, +.requiresSummary, .packagesSummary, .providesSummary, .usesSummary { + width:100%; + border-spacing:0; + border-left:1px solid #EEE; + border-right:1px solid #EEE; + border-bottom:1px solid #EEE; +} +.overviewSummary, .memberSummary, .requiresSummary, .packagesSummary, .providesSummary, .usesSummary { + padding:0px; +} +.overviewSummary caption, .memberSummary caption, .typeSummary caption, +.useSummary caption, .constantsSummary caption, .deprecatedSummary caption, +.requiresSummary caption, .packagesSummary caption, .providesSummary caption, .usesSummary caption { + position:relative; + text-align:left; + background-repeat:no-repeat; + color:#253441; + font-weight:bold; + clear:none; + overflow:hidden; + padding:0px; + padding-top:10px; + padding-left:1px; + margin:0px; + white-space:pre; +} +.constantsSummary caption a:link, .constantsSummary caption a:visited, +.useSummary caption a:link, .useSummary caption a:visited { + color:#1f389c; +} +.overviewSummary caption a:link, .memberSummary caption a:link, .typeSummary caption a:link, +.deprecatedSummary caption a:link, +.requiresSummary caption a:link, .packagesSummary caption a:link, .providesSummary caption a:link, +.usesSummary caption a:link, +.overviewSummary caption a:hover, .memberSummary caption a:hover, .typeSummary caption a:hover, +.useSummary caption a:hover, .constantsSummary caption a:hover, .deprecatedSummary caption a:hover, +.requiresSummary caption a:hover, .packagesSummary caption a:hover, .providesSummary caption a:hover, +.usesSummary caption a:hover, +.overviewSummary caption a:active, .memberSummary caption a:active, .typeSummary caption a:active, +.useSummary caption a:active, .constantsSummary caption a:active, .deprecatedSummary caption a:active, +.requiresSummary caption a:active, .packagesSummary caption a:active, .providesSummary caption a:active, +.usesSummary caption a:active, +.overviewSummary caption a:visited, .memberSummary caption a:visited, .typeSummary caption a:visited, +.deprecatedSummary caption a:visited, +.requiresSummary caption a:visited, .packagesSummary caption a:visited, .providesSummary caption a:visited, +.usesSummary caption a:visited { + color:#FFFFFF; +} +.overviewSummary caption span, .memberSummary caption span, .typeSummary caption span, +.useSummary caption span, .constantsSummary caption span, .deprecatedSummary caption span, +.requiresSummary caption span, .packagesSummary caption span, .providesSummary caption span, +.usesSummary caption span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + padding-bottom:7px; + display:inline-block; + float:left; + background-color:#F8981D; + border: none; + height:16px; +} +.memberSummary caption span.activeTableTab span, .packagesSummary caption span.activeTableTab span, +.overviewSummary caption span.activeTableTab span, .typeSummary caption span.activeTableTab span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + margin-right:3px; + display:inline-block; + float:left; + background-color:#F8981D; + height:16px; +} +.memberSummary caption span.tableTab span, .packagesSummary caption span.tableTab span, +.overviewSummary caption span.tableTab span, .typeSummary caption span.tableTab span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + margin-right:3px; + display:inline-block; + float:left; + background-color:#4D7A97; + height:16px; +} +.memberSummary caption span.tableTab, .memberSummary caption span.activeTableTab, +.packagesSummary caption span.tableTab, .packagesSummary caption span.activeTableTab, +.overviewSummary caption span.tableTab, .overviewSummary caption span.activeTableTab, +.typeSummary caption span.tableTab, .typeSummary caption span.activeTableTab { + padding-top:0px; + padding-left:0px; + padding-right:0px; + background-image:none; + float:none; + display:inline; +} +.overviewSummary .tabEnd, .memberSummary .tabEnd, .typeSummary .tabEnd, +.useSummary .tabEnd, .constantsSummary .tabEnd, .deprecatedSummary .tabEnd, +.requiresSummary .tabEnd, .packagesSummary .tabEnd, .providesSummary .tabEnd, .usesSummary .tabEnd { + display:none; + width:5px; + position:relative; + float:left; + background-color:#F8981D; +} +.memberSummary .activeTableTab .tabEnd, .packagesSummary .activeTableTab .tabEnd, +.overviewSummary .activeTableTab .tabEnd, .typeSummary .activeTableTab .tabEnd { + display:none; + width:5px; + margin-right:3px; + position:relative; + float:left; + background-color:#F8981D; +} +.memberSummary .tableTab .tabEnd, .packagesSummary .tableTab .tabEnd, +.overviewSummary .tableTab .tabEnd, .typeSummary .tableTab .tabEnd { + display:none; + width:5px; + margin-right:3px; + position:relative; + background-color:#4D7A97; + float:left; +} +.rowColor th, .altColor th { + font-weight:normal; +} +.overviewSummary td, .memberSummary td, .typeSummary td, +.useSummary td, .constantsSummary td, .deprecatedSummary td, +.requiresSummary td, .packagesSummary td, .providesSummary td, .usesSummary td { + text-align:left; + padding:0px 0px 12px 10px; +} +th.colFirst, th.colSecond, th.colLast, th.colConstructorName, th.colDeprecatedItemName, .useSummary th, +.constantsSummary th, .packagesSummary th, td.colFirst, td.colSecond, td.colLast, .useSummary td, +.constantsSummary td { + vertical-align:top; + padding-right:0px; + padding-top:8px; + padding-bottom:3px; +} +th.colFirst, th.colSecond, th.colLast, th.colConstructorName, th.colDeprecatedItemName, .constantsSummary th, +.packagesSummary th { + background:#dee3e9; + text-align:left; + padding:8px 3px 3px 7px; +} +td.colFirst, th.colFirst { + font-size:13px; +} +td.colSecond, th.colSecond, td.colLast, th.colConstructorName, th.colDeprecatedItemName, th.colLast { + font-size:13px; +} +.constantsSummary th, .packagesSummary th { + font-size:13px; +} +.providesSummary th.colFirst, .providesSummary th.colLast, .providesSummary td.colFirst, +.providesSummary td.colLast { + white-space:normal; + font-size:13px; +} +.overviewSummary td.colFirst, .overviewSummary th.colFirst, +.requiresSummary td.colFirst, .requiresSummary th.colFirst, +.packagesSummary td.colFirst, .packagesSummary td.colSecond, .packagesSummary th.colFirst, .packagesSummary th, +.usesSummary td.colFirst, .usesSummary th.colFirst, +.providesSummary td.colFirst, .providesSummary th.colFirst, +.memberSummary td.colFirst, .memberSummary th.colFirst, +.memberSummary td.colSecond, .memberSummary th.colSecond, .memberSummary th.colConstructorName, +.typeSummary td.colFirst, .typeSummary th.colFirst { + vertical-align:top; +} +.packagesSummary th.colLast, .packagesSummary td.colLast { + white-space:normal; +} +td.colFirst a:link, td.colFirst a:visited, +td.colSecond a:link, td.colSecond a:visited, +th.colFirst a:link, th.colFirst a:visited, +th.colSecond a:link, th.colSecond a:visited, +th.colConstructorName a:link, th.colConstructorName a:visited, +th.colDeprecatedItemName a:link, th.colDeprecatedItemName a:visited, +.constantValuesContainer td a:link, .constantValuesContainer td a:visited, +.allClassesContainer td a:link, .allClassesContainer td a:visited, +.allPackagesContainer td a:link, .allPackagesContainer td a:visited { + font-weight:bold; +} +.tableSubHeadingColor { + background-color:#EEEEFF; +} +.altColor, .altColor th { + background-color:#FFFFFF; +} +.rowColor, .rowColor th { + background-color:#EEEEEF; +} +/* + * Styles for contents. + */ +.description pre { + margin-top:0; +} +.deprecatedContent { + margin:0; + padding:10px 0; +} +.docSummary { + padding:0; +} +ul.blockList ul.blockList ul.blockList li.blockList h3 { + font-style:normal; +} +div.block { + font-size:14px; + font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; +} +td.colLast div { + padding-top:0px; +} +td.colLast a { + padding-bottom:3px; +} +/* + * Styles for formatting effect. + */ +.sourceLineNo { + color:green; + padding:0 30px 0 0; +} +h1.hidden { + visibility:hidden; + overflow:hidden; + font-size:10px; +} +.block { + display:block; + margin:3px 10px 2px 0px; + color:#474747; +} +.deprecatedLabel, .descfrmTypeLabel, .implementationLabel, .memberNameLabel, .memberNameLink, +.moduleLabelInPackage, .moduleLabelInType, .overrideSpecifyLabel, .packageLabelInType, +.packageHierarchyLabel, .paramLabel, .returnLabel, .seeLabel, .simpleTagLabel, +.throwsLabel, .typeNameLabel, .typeNameLink, .searchTagLink { + font-weight:bold; +} +.deprecationComment, .emphasizedPhrase, .interfaceName { + font-style:italic; +} +.deprecationBlock { + font-size:14px; + font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; + border-style:solid; + border-width:thin; + border-radius:10px; + padding:10px; + margin-bottom:10px; + margin-right:10px; + display:inline-block; +} +div.block div.deprecationComment, div.block div.block span.emphasizedPhrase, +div.block div.block span.interfaceName { + font-style:normal; +} +div.contentContainer ul.blockList li.blockList h2 { + padding-bottom:0px; +} +/* + * Styles for IFRAME. + */ +.mainContainer { + margin:0 auto; + padding:0; + height:100%; + width:100%; + position:fixed; + top:0; + left:0; +} +.leftContainer { + height:100%; + position:fixed; + width:320px; +} +.leftTop { + position:relative; + float:left; + width:315px; + top:0; + left:0; + height:30%; + border-right:6px solid #ccc; + border-bottom:6px solid #ccc; +} +.leftBottom { + position:relative; + float:left; + width:315px; + bottom:0; + left:0; + height:70%; + border-right:6px solid #ccc; + border-top:1px solid #000; +} +.rightContainer { + position:absolute; + left:320px; + top:0; + bottom:0; + height:100%; + right:0; + border-left:1px solid #000; +} +.rightIframe { + margin:0; + padding:0; + height:100%; + right:30px; + width:100%; + overflow:visible; + margin-bottom:30px; +} +/* + * Styles specific to HTML5 elements. + */ +main, nav, header, footer, section { + display:block; +} +/* + * Styles for javadoc search. + */ +.ui-autocomplete-category { + font-weight:bold; + font-size:15px; + padding:7px 0 7px 3px; + background-color:#4D7A97; + color:#FFFFFF; +} +.resultItem { + font-size:13px; +} +.ui-autocomplete { + max-height:85%; + max-width:65%; + overflow-y:scroll; + overflow-x:scroll; + white-space:nowrap; + box-shadow: 0 3px 6px rgba(0,0,0,0.16), 0 3px 6px rgba(0,0,0,0.23); +} +ul.ui-autocomplete { + position:fixed; + z-index:999999; + background-color: #FFFFFF; +} +ul.ui-autocomplete li { + float:left; + clear:both; + width:100%; +} +.resultHighlight { + font-weight:bold; +} +.ui-autocomplete .result-item { + font-size: inherit; +} +#search { + background-image:url('resources/glass.png'); + background-size:13px; + background-repeat:no-repeat; + background-position:2px 3px; + padding-left:20px; + position:relative; + right:-18px; +} +#reset { + background-color: rgb(255,255,255); + background-image:url('resources/x.png'); + background-position:center; + background-repeat:no-repeat; + background-size:12px; + border:0 none; + width:16px; + height:17px; + position:relative; + left:-4px; + top:-4px; + font-size:0px; +} +.watermark { + color:#545454; +} +.searchTagDescResult { + font-style:italic; + font-size:11px; +} +.searchTagHolderResult { + font-style:italic; + font-size:12px; +} +.searchTagResult:before, .searchTagResult:target { + color:red; +} +.moduleGraph span { + display:none; + position:absolute; +} +.moduleGraph:hover span { + display:block; + margin: -100px 0 0 100px; + z-index: 1; +} +.methodSignature { + white-space:normal; +} + +/* + * Styles for user-provided tables. + * + * borderless: + * No borders, vertical margins, styled caption. + * This style is provided for use with existing doc comments. + * In general, borderless tables should not be used for layout purposes. + * + * plain: + * Plain borders around table and cells, vertical margins, styled caption. + * Best for small tables or for complex tables for tables with cells that span + * rows and columns, when the "striped" style does not work well. + * + * striped: + * Borders around the table and vertical borders between cells, striped rows, + * vertical margins, styled caption. + * Best for tables that have a header row, and a body containing a series of simple rows. + */ + +table.borderless, +table.plain, +table.striped { + margin-top: 10px; + margin-bottom: 10px; +} +table.borderless > caption, +table.plain > caption, +table.striped > caption { + font-weight: bold; + font-size: smaller; +} +table.borderless th, table.borderless td, +table.plain th, table.plain td, +table.striped th, table.striped td { + padding: 2px 5px; +} +table.borderless, +table.borderless > thead > tr > th, table.borderless > tbody > tr > th, table.borderless > tr > th, +table.borderless > thead > tr > td, table.borderless > tbody > tr > td, table.borderless > tr > td { + border: none; +} +table.borderless > thead > tr, table.borderless > tbody > tr, table.borderless > tr { + background-color: transparent; +} +table.plain { + border-collapse: collapse; + border: 1px solid black; +} +table.plain > thead > tr, table.plain > tbody tr, table.plain > tr { + background-color: transparent; +} +table.plain > thead > tr > th, table.plain > tbody > tr > th, table.plain > tr > th, +table.plain > thead > tr > td, table.plain > tbody > tr > td, table.plain > tr > td { + border: 1px solid black; +} +table.striped { + border-collapse: collapse; + border: 1px solid black; +} +table.striped > thead { + background-color: #E3E3E3; +} +table.striped > thead > tr > th, table.striped > thead > tr > td { + border: 1px solid black; +} +table.striped > tbody > tr:nth-child(even) { + background-color: #EEE +} +table.striped > tbody > tr:nth-child(odd) { + background-color: #FFF +} +table.striped > tbody > tr > th, table.striped > tbody > tr > td { + border-left: 1px solid black; + border-right: 1px solid black; +} +table.striped > tbody > tr > th { + font-weight: normal; +} diff --git a/doc/1.5.5/guacamole-common/type-search-index.js b/doc/1.5.5/guacamole-common/type-search-index.js new file mode 100644 index 000000000..cd9140ccd --- /dev/null +++ b/doc/1.5.5/guacamole-common/type-search-index.js @@ -0,0 +1 @@ +typeSearchIndex = [{"p":"org.apache.guacamole.net","l":"AbstractGuacamoleTunnel"},{"l":"All Classes","url":"allclasses-index.html"},{"p":"org.apache.guacamole.protocol","l":"ConfiguredGuacamoleSocket"},{"p":"org.apache.guacamole.net","l":"DelegatingGuacamoleSocket"},{"p":"org.apache.guacamole.net","l":"DelegatingGuacamoleTunnel"},{"p":"org.apache.guacamole.protocol","l":"FailoverGuacamoleSocket"},{"p":"org.apache.guacamole.protocol","l":"FilteredGuacamoleReader"},{"p":"org.apache.guacamole.protocol","l":"FilteredGuacamoleSocket"},{"p":"org.apache.guacamole.protocol","l":"FilteredGuacamoleWriter"},{"p":"org.apache.guacamole","l":"GuacamoleClientBadTypeException"},{"p":"org.apache.guacamole","l":"GuacamoleClientException"},{"p":"org.apache.guacamole.protocol","l":"GuacamoleClientInformation"},{"p":"org.apache.guacamole","l":"GuacamoleClientOverrunException"},{"p":"org.apache.guacamole","l":"GuacamoleClientTimeoutException"},{"p":"org.apache.guacamole","l":"GuacamoleClientTooManyException"},{"p":"org.apache.guacamole.protocol","l":"GuacamoleConfiguration"},{"p":"org.apache.guacamole","l":"GuacamoleConnectionClosedException"},{"p":"org.apache.guacamole","l":"GuacamoleException"},{"p":"org.apache.guacamole.protocol","l":"GuacamoleFilter"},{"p":"org.apache.guacamole.servlet","l":"GuacamoleHTTPTunnelServlet"},{"p":"org.apache.guacamole.protocol","l":"GuacamoleInstruction"},{"p":"org.apache.guacamole.protocol","l":"GuacamoleParser"},{"p":"org.apache.guacamole.protocol","l":"GuacamoleProtocolCapability"},{"p":"org.apache.guacamole.protocol","l":"GuacamoleProtocolVersion"},{"p":"org.apache.guacamole.io","l":"GuacamoleReader"},{"p":"org.apache.guacamole","l":"GuacamoleResourceClosedException"},{"p":"org.apache.guacamole","l":"GuacamoleResourceConflictException"},{"p":"org.apache.guacamole","l":"GuacamoleResourceNotFoundException"},{"p":"org.apache.guacamole","l":"GuacamoleSecurityException"},{"p":"org.apache.guacamole","l":"GuacamoleServerBusyException"},{"p":"org.apache.guacamole","l":"GuacamoleServerException"},{"p":"org.apache.guacamole","l":"GuacamoleSessionClosedException"},{"p":"org.apache.guacamole","l":"GuacamoleSessionConflictException"},{"p":"org.apache.guacamole","l":"GuacamoleSessionTimeoutException"},{"p":"org.apache.guacamole.net","l":"GuacamoleSocket"},{"p":"org.apache.guacamole.protocol","l":"GuacamoleStatus"},{"p":"org.apache.guacamole.net","l":"GuacamoleTunnel"},{"p":"org.apache.guacamole","l":"GuacamoleUnauthorizedException"},{"p":"org.apache.guacamole","l":"GuacamoleUnsupportedException"},{"p":"org.apache.guacamole","l":"GuacamoleUpstreamException"},{"p":"org.apache.guacamole","l":"GuacamoleUpstreamNotFoundException"},{"p":"org.apache.guacamole","l":"GuacamoleUpstreamTimeoutException"},{"p":"org.apache.guacamole","l":"GuacamoleUpstreamUnavailableException"},{"p":"org.apache.guacamole.websocket","l":"GuacamoleWebSocketTunnelEndpoint"},{"p":"org.apache.guacamole.io","l":"GuacamoleWriter"},{"p":"org.apache.guacamole.net","l":"InetGuacamoleSocket"},{"p":"org.apache.guacamole.io","l":"ReaderGuacamoleReader"},{"p":"org.apache.guacamole.net","l":"SimpleGuacamoleTunnel"},{"p":"org.apache.guacamole.net","l":"SSLGuacamoleSocket"},{"p":"org.apache.guacamole.io","l":"WriterGuacamoleWriter"}] \ No newline at end of file diff --git a/doc/1.5.5/guacamole-common/type-search-index.zip b/doc/1.5.5/guacamole-common/type-search-index.zip new file mode 100644 index 0000000000000000000000000000000000000000..a911c2b9bc96c40cd12ef80e00f3c79bc512e349 GIT binary patch literal 654 zcmWIWW@Zs#;Nak3a9>>;!GHwBfb5dWf>hn&)Wo9X4BgDUl++5ntm6E-(@D=KDKIA2@!cw^1YO$z_^y7_Gi4BOCoHag|`982SQx93my zNsTwYbe2nG1MfO1cAhAq9g{LPU-tR&dh@9W-ZORY-+QU6cD?!fMfDDM;UsPYwqAFO zzh!Jr8w$R(o|c*)CViXj$Zoc&YTi9A>89#GPe?D{DECI}$iJ#k`Au(9>zx~UBlKpU zSC*)>yWa2pplRC*@y;1V1&M_+o$(x|uT1*RUnpF^({|C~X1)nA1yjDsyeeA$;Zf(p zO>d>7}gIB-goxCfkD9?#N{ywAy^*NzdN|uAP$~ylFG3@8kV7 z*ThfrlG!YWpXXXHEL(W_)UtHXS?#u+{V%Vrj}160r~Q9}kz%aclY;srH#-OK w*${&dj0_BOc^DW1ycwB97!aujSq_wHPyzNd6yVLu22#fegf2kZgbBn00O|M?hX4Qo literal 0 HcmV?d00001 diff --git a/doc/1.5.5/guacamole-ext/allclasses-index.html b/doc/1.5.5/guacamole-ext/allclasses-index.html new file mode 100644 index 000000000..2f908d354 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/allclasses-index.html @@ -0,0 +1,1301 @@ + + + + + +All Classes (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    All Classes

    +
    +
    +
      +
    • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Classes Interface Summary Class Summary Enum Summary Exception Summary Annotation Types Summary 
      ClassDescription
      AbstractActiveConnection +
      Base implementation of an ActiveConnection, providing storage and simply + getters/setters for its main properties.
      +
      AbstractActivityLog +
      Base implementation of an ActivityLog, providing storage and simple + getters/setters for its main properties.
      +
      AbstractAuthenticatedUser +
      Basic implementation of an AuthenticatedUser which uses the username to + determine equality.
      +
      AbstractAuthenticationProvider +
      Base implementation of AuthenticationProvider which provides default + implementations of most functions.
      +
      AbstractConnection +
      Basic implementation of a Guacamole connection.
      +
      AbstractConnectionGroup +
      Basic implementation of a Guacamole connection group.
      +
      AbstractIdentifiable +
      Abstract implementation of Identifiable which provides equals() and + hashCode() implementations which use the identifier to determine equality.
      +
      AbstractSharingProfile +
      Base implementation of a sharing profile which can be used to share a + Guacamole connection.
      +
      AbstractUser +
      Base implementation of User which provides default implementations of + most functions.
      +
      AbstractUserContext +
      Base implementation of UserContext which provides default implementations of + most functions.
      +
      AbstractUserGroup +
      Base implementation of UserGroup which provides default implementations of + most functions.
      +
      ActiveConnection +
      A pairing of username and GuacamoleTunnel representing an active usage of a + particular connection.
      +
      ActivityLog +
      An arbitrary log of an activity whose content may be exposed to a user with + sufficient privileges.
      +
      ActivityLog.Type +
      All possible types of ActivityLog.
      +
      ActivityRecord +
      A logging record describing when a user started and ended a particular + activity.
      +
      ActivityRecordSet<RecordType extends ActivityRecord> +
      A set of all available records related to a type of activity which has a + defined start and end time, such as a user being logged in or connected, or a + subset of those records.
      +
      ActivityRecordSet.SortableProperty +
      All properties of activity records which can be used as sorting + criteria.
      +
      Attributes +
      An object which is associated with a set of arbitrary attributes that may + be modifiable, defined as name/value pairs.
      +
      AuthenticatedUser +
      A user of the Guacamole web application who has been authenticated by an + AuthenticationProvider.
      +
      AuthenticationFailureEvent +
      An event which is triggered whenever a user's credentials fail to be + authenticated.
      +
      AuthenticationFailureListenerDeprecated. +
      Listeners should instead implement the Listener interface.
      +
      AuthenticationProvider +
      Provides means of authorizing users and for accessing and managing data + associated with those users.
      +
      AuthenticationSuccessEvent +
      An event which is triggered whenever a user's credentials pass + authentication.
      +
      AuthenticationSuccessListenerDeprecated. +
      Listeners should instead implement the Listener interface.
      +
      BooleanField +
      Represents a field with strictly one possible value.
      +
      BooleanGuacamoleProperty +
      A GuacamoleProperty whose value is an boolean.
      +
      ByteArrayProperty +
      A GuacamoleProperty whose value is a byte array.
      +
      Connectable +
      An object which Guacamole can connect to.
      +
      Connection +
      Represents a pairing of a GuacamoleConfiguration with a unique, + human-readable identifier, and abstracts the connection process.
      +
      ConnectionGroup +
      Represents a connection group, which can contain both other connection groups + as well as connections.
      +
      ConnectionGroup.Type +
      All legal types of connection group.
      +
      ConnectionRecord +
      A logging record describing when a user started and ended usage of a + particular connection.
      +
      ConnectionRecordSetDeprecated. + +
      CredentialEvent +
      Abstract basis for events which may have associated user credentials when + triggered.
      +
      Credentials +
      Simple arbitrary set of credentials, including a username/password pair, + the HttpServletRequest associated with the request for authorization + (if any) and the HttpSession associated with that request.
      +
      CredentialsInfo +
      Information which describes a set of valid credentials.
      +
      DateField +
      Represents a date field.
      +
      DecoratingActivityRecordSet<RecordType extends ActivityRecord> +
      ActivityRecordSet implementation which simplifies decorating the records + within an underlying ActivityRecordSet.
      +
      DecoratingDirectory<ObjectType extends Identifiable> +
      Directory implementation which simplifies decorating the objects within an + underlying Directory.
      +
      DelegatingActivityRecord +
      ActivityRecord implementation which simply delegates all function calls to an + underlying ActivityRecord.
      +
      DelegatingActivityRecordSet<RecordType extends ActivityRecord> +
      ActivityRecordSet implementation which simply delegates all function calls + to an underlying ActivityRecordSet.
      +
      DelegatingConnection +
      Connection implementation which simply delegates all function calls to an + underlying Connection.
      +
      DelegatingConnectionGroup +
      ConnectionGroup implementation which simply delegates all function calls to + an underlying ConnectionGroup.
      +
      DelegatingConnectionRecord +
      ConnectionRecord implementation which simply delegates all function calls to + an underlying ConnectionRecord.
      +
      DelegatingDirectory<ObjectType extends Identifiable> +
      Directory implementation which simply delegates all function calls to an + underlying Directory.
      +
      DelegatingEnvironment +
      Environment implementation which simply delegates all function calls to a + wrapped Environment instance.
      +
      DelegatingSharingProfile +
      SharingProfile implementation which simply delegates all function calls to an + underlying SharingProfile.
      +
      DelegatingUser +
      User implementation which simply delegates all function calls to an + underlying User.
      +
      DelegatingUserContext +
      UserContext implementation which simply delegates all function calls to + an underlying UserContext.
      +
      DelegatingUserGroup +
      UserGroup implementation which simply delegates all function calls to an + underlying UserGroup.
      +
      Directory<ObjectType extends Identifiable> +
      Provides access to a collection of all objects with associated identifiers, + and allows user manipulation and removal.
      +
      DocumentHandler +
      A simple ContentHandler implementation which digests SAX document events and + produces simpler tag-level events, maintaining its own stack for the + convenience of the tag handlers.
      +
      EmailField +
      Represents a text field which may contain an email address.
      +
      EnumField +
      Represents an arbitrary field with a finite, enumerated set of possible + values.
      +
      EnumGuacamoleProperty<T extends Enum<T>> +
      A GuacamoleProperty whose possible values are defined by an enum.
      +
      EnumGuacamoleProperty.PropertyValue +
      Defines the string value which should be accepted and parsed into the + annotated enum constant.
      +
      Environment +
      The environment of an arbitrary Guacamole instance, describing available + protocols, configuration parameters, and the GUACAMOLE_HOME directory.
      +
      Field +
      Represents an arbitrary field, such as an HTTP parameter, the parameter of a + remote desktop protocol, or an input field within a form.
      +
      Field.Type +
      All types of fields which are available by default.
      +
      FieldOption +
      Describes an available legal value for an enumerated field.
      +
      FileActivityLog +
      ActivityLog implementation that exposes the content of a local file.
      +
      FileGuacamoleProperties +
      GuacamoleProperties implementation which reads all properties from a + standard Java properties file.
      +
      FileGuacamoleProperty +
      A GuacamoleProperty whose value is a filename.
      +
      Form +
      Information which describes logical set of fields.
      +
      GuacamoleCredentialsException +
      A security-related exception thrown when access is denied to a user because + of a problem related to the provided credentials.
      +
      GuacamoleInsufficientCredentialsException +
      A security-related exception thrown when access is denied to a user because + the provided credentials are not sufficient for authentication to succeed.
      +
      GuacamoleInvalidCredentialsException +
      A security-related exception thrown when access is denied to a user because + the provided credentials are invalid.
      +
      GuacamoleProperties +
      An arbitrary set of Guacamole configuration property name/value pairs.
      +
      GuacamoleProperty<Type> +
      An abstract representation of a property in the guacamole.properties file, + which parses into a specific type.
      +
      GuacamoleProxyConfiguration +
      Information which describes how the connection to guacd should be + established.
      +
      GuacamoleProxyConfiguration.EncryptionMethod +
      All possible types of encryption used by guacd.
      +
      GuacamoleTokenUndefinedException +
      An exception thrown when a token cannot be substituted because it has no + corresponding value.
      +
      Identifiable +
      An object which has a deterministic, unique identifier, which may not be + null.
      +
      IntegerGuacamoleProperty +
      A GuacamoleProperty whose value is an integer.
      +
      LanguageField +
      Represents a language field.
      +
      Listener +
      A listener for events that occur in handing various Guacamole requests + such as authentication, tunnel connect/close, etc.
      +
      LocalEnvironment +
      The environment of the locally-running Guacamole instance, describing + available protocols, configuration parameters, and the GUACAMOLE_HOME + directory.
      +
      LongGuacamoleProperty +
      A GuacamoleProperty whose value is an long.
      +
      MultilineField +
      Represents a field which can contain multiple lines of text.
      +
      NumericField +
      Represents a field which may contain only integer values.
      +
      ObjectPermission +
      A permission which affects a specific object, rather than the system as a + whole.
      +
      ObjectPermission.Type +
      Specific types of object-level permissions.
      +
      ObjectPermissionSet +
      A set of permissions which affect arbitrary objects, where each object has + an associated unique identifier.
      +
      PasswordField +
      Represents a field which contains sensitive text information related to + authenticating a user.
      +
      Permission<Type extends Enum> +
      A permission which affects a specific type of operation, where all available + operation types are defined by an enumeration.
      +
      Permissions +
      An object which may be granted permissions to access/manipulate various + other objects or aspects of the system.
      +
      PermissionSet<PermissionType extends Permission> +
      An arbitrary set of permissions.
      +
      PropertiesGuacamoleProperties +
      GuacamoleProperties implementation which reads all properties from a + Properties object.
      +
      ProtocolInfo +
      Describes a protocol and all parameters associated with it, as required by + a protocol plugin for guacd.
      +
      ReadableAttributes +
      An object which is associated with a set of arbitrary attributes, defined + as name/value pairs.
      +
      RedirectField +
      A Guacamole field that redirects a user to another page.
      +
      RelatedObjectSet +
      An arbitrary set of existing objects sharing some common relation.
      +
      Shareable<T> +
      An object which can be shared with others via specially-generated sets of + credentials.
      +
      SharingProfile +
      Represents the semantics which apply to an existing connection when shared, + along with a human-readable name and unique identifier.
      +
      SimpleActivityRecordSet<RecordType extends ActivityRecord> +
      An immutable and empty ActivityRecordSet.
      +
      SimpleAuthenticationProvider +
      Provides means of retrieving a set of named GuacamoleConfigurations for a + given Credentials object.
      +
      SimpleConnection +
      A Connection implementation which establishes the underlying connection to + guacd using the configuration information provided in guacamole.properties.
      +
      SimpleConnectionDirectoryDeprecated. +
      Use SimpleDirectory instead.
      +
      SimpleConnectionGroup +
      An extremely simple read-only implementation of a ConnectionGroup which + returns the connection and connection group identifiers it was constructed + with.
      +
      SimpleConnectionGroupDirectoryDeprecated. +
      Use SimpleDirectory instead.
      +
      SimpleConnectionRecordSetDeprecated. + +
      SimpleDirectory<ObjectType extends Identifiable> +
      An extremely simple read-only implementation of a Directory which provides + access to a pre-defined Map of arbitrary objects.
      +
      SimpleObjectPermissionSet +
      A read-only implementation of ObjectPermissionSet which uses a backing Set + of Permissions to determine which permissions are present.
      +
      SimpleRelatedObjectSet +
      A read-only implementation of RelatedObjectSet which uses a backing Set + of identifiers to determine which objects are present.
      +
      SimpleSystemPermissionSet +
      A read-only implementation of SystemPermissionSet which uses a backing Set + of Permissions to determine which permissions are present.
      +
      SimpleUser +
      A read-only User implementation which has no permissions.
      +
      SimpleUserContext +
      An extremely simple UserContext implementation which provides access to + a defined and restricted set of GuacamoleConfigurations.
      +
      SimpleUserDirectoryDeprecated. +
      Use SimpleDirectory instead.
      +
      SimpleUserGroup +
      A read-only UserGroup implementation which has no members and no + permissions.
      +
      StandardTokensDeprecated. +
      Standard tokens are now supplied by default to the connect() + functions of connections and connection groups.
      +
      StringGuacamoleProperty +
      A GuacamoleProperty whose value is a simple string.
      +
      StringListProperty +
      A GuacamoleProperty whose value is a List of Strings.
      +
      SystemPermission +
      A permission which affects the system as a whole, rather than an individual + object.
      +
      SystemPermission.Type +
      Specific types of system-level permissions.
      +
      SystemPermissionSet +
      A set of permissions which affects the system as a whole.
      +
      TagHandler +
      A simple element-level event handler for events triggered by the + SAX-driven DocumentHandler parser.
      +
      TerminalColorSchemeField +
      Represents a terminal color scheme field.
      +
      TextField +
      Represents a basic text field.
      +
      TimeField +
      Represents a time field.
      +
      TimeZoneField +
      Represents a time zone field.
      +
      TimeZoneGuacamoleProperty +
      A GuacamoleProperty whose value is a TimeZone.
      +
      TokenFilter +
      Filtering object which replaces tokens of the form "${TOKEN_NAME}" with + their corresponding values.
      +
      TokenInjectingConnection +
      Connection implementation which overrides the connect() function of an + underlying Connection, adding a given set of parameter tokens to the tokens + already supplied.
      +
      TokenInjectingConnectionGroup +
      ConnectionGroup implementation which overrides the connect() function of an + underlying ConnectionGroup, adding a given set of parameter tokens to the + tokens already supplied.
      +
      TokenInjectingUserContext +
      UserContext implementation which decorates a given UserContext, + automatically applying additional parameter tokens during the connection + process of any retrieved Connections and ConnectionGroups.
      +
      TokenName +
      Utility class for generating parameter token names.
      +
      Translatable +
      An object which is associated with a translatable message that can be passed + through an arbitrary translation service, producing a human-readable message + in the user's native language.
      +
      TranslatableGuacamoleClientBadTypeException +
      A GuacamoleClientBadTypeException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
      +
      TranslatableGuacamoleClientException +
      A GuacamoleClientException whose associated message is translatable + and can be passed through an arbitrary translation service, producing a + human-readable message in the user's native language.
      +
      TranslatableGuacamoleClientOverrunException +
      A GuacamoleClientOverrunException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
      +
      TranslatableGuacamoleClientTimeoutException +
      A GuacamoleClientTimeoutException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
      +
      TranslatableGuacamoleClientTooManyException +
      A GuacamoleClientTooManyException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
      +
      TranslatableGuacamoleConnectionClosedException +
      A GuacamoleConnectionClosedException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
      +
      TranslatableGuacamoleCredentialsException +
      A GuacamoleCredentialsException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
      +
      TranslatableGuacamoleInsufficientCredentialsException +
      A GuacamoleInsufficientCredentialsException whose associated message + is translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
      +
      TranslatableGuacamoleInvalidCredentialsException +
      A GuacamoleInvalidCredentialsException whose associated message + is translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
      +
      TranslatableGuacamoleResourceClosedException +
      A GuacamoleResourceClosedException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
      +
      TranslatableGuacamoleResourceConflictException +
      A GuacamoleResourceConflictException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
      +
      TranslatableGuacamoleResourceNotFoundException +
      A GuacamoleResourceNotFoundException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
      +
      TranslatableGuacamoleSecurityException +
      A GuacamoleSecurityException whose associated message is translatable + and can be passed through an arbitrary translation service, producing a + human-readable message in the user's native language.
      +
      TranslatableGuacamoleServerBusyException +
      A GuacamoleServerBusyException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
      +
      TranslatableGuacamoleServerException +
      A GuacamoleServerException whose associated message is translatable + and can be passed through an arbitrary translation service, producing a + human-readable message in the user's native language.
      +
      TranslatableGuacamoleSessionClosedException +
      A GuacamoleSessionClosedException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
      +
      TranslatableGuacamoleSessionConflictException +
      A GuacamoleSessionConflictException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
      +
      TranslatableGuacamoleSessionTimeoutException +
      A GuacamoleSessionTimeoutException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
      +
      TranslatableGuacamoleUnauthorizedException +
      A GuacamoleUnauthorizedException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
      +
      TranslatableGuacamoleUnsupportedException +
      A GuacamoleUnsupportedException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
      +
      TranslatableGuacamoleUpstreamException +
      A GuacamoleUpstreamException whose associated message is translatable + and can be passed through an arbitrary translation service, producing a + human-readable message in the user's native language.
      +
      TranslatableGuacamoleUpstreamNotFoundException +
      A GuacamoleUpstreamNotFoundException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
      +
      TranslatableGuacamoleUpstreamTimeoutException +
      A GuacamoleUpstreamTimeoutException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
      +
      TranslatableGuacamoleUpstreamUnavailableException +
      A GuacamoleUpstreamUnavailableException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
      +
      TranslatableMessage +
      A message which can be translated using a translation service, providing a + translation key and optional set of values to be substituted into the + translation string associated with that key.
      +
      TunnelCloseEvent +
      An event which is triggered whenever a tunnel is being closed.
      +
      TunnelCloseListenerDeprecated. +
      Listeners should instead implement the Listener interface.
      +
      TunnelConnectEvent +
      An event which is triggered whenever a tunnel is being connected.
      +
      TunnelConnectListenerDeprecated. +
      Listeners should instead implement the Listener interface.
      +
      TunnelEvent +
      Abstract basis for events associated with tunnels.
      +
      URIGuacamoleProperty +
      A GuacamoleProperty whose value is a URI.
      +
      User +
      A user of the Guacamole web application.
      +
      User.Attribute +
      All standard attribute names with semantics defined by the Guacamole web + application.
      +
      UserContext +
      The context of an active user.
      +
      UserCredentials +
      A fully-valid set of credentials and associated values.
      +
      UserEvent +
      Abstract basis for events which may have an associated AuthenticatedUser when + triggered.
      +
      UserGroup +
      A user group of the Guacamole web application.
      +
      UsernameField +
      Represents a text field which will contain the uniquely-identifying name of + a user.
      +
      +
    • +
    +
    +
    +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/allclasses.html b/doc/1.5.5/guacamole-ext/allclasses.html new file mode 100644 index 000000000..6ca2b7a0b --- /dev/null +++ b/doc/1.5.5/guacamole-ext/allclasses.html @@ -0,0 +1,195 @@ + + + + + +All Classes (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + +
    +

    All Classes

    +
    + +
    +
    + + diff --git a/doc/1.5.5/guacamole-ext/allpackages-index.html b/doc/1.5.5/guacamole-ext/allpackages-index.html new file mode 100644 index 000000000..44e610665 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/allpackages-index.html @@ -0,0 +1,241 @@ + + + + + +All Packages (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    All Packages

    +
    +
    + +
    +
    +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/constant-values.html b/doc/1.5.5/guacamole-ext/constant-values.html new file mode 100644 index 000000000..08ddfc964 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/constant-values.html @@ -0,0 +1,434 @@ + + + + + +Constant Field Values (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Constant Field Values

    +
    +

    Contents

    + +
    +
    +
    + + +
    +

    org.apache.*

    + + + +
    +
    +
    +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/deprecated-list.html b/doc/1.5.5/guacamole-ext/deprecated-list.html new file mode 100644 index 000000000..c97c97aa6 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/deprecated-list.html @@ -0,0 +1,360 @@ + + + + + +Deprecated List (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Deprecated API

    +

    Contents

    + +
    +
    + + + + + + + + + + + + + + + +
    +
    +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/element-list b/doc/1.5.5/guacamole-ext/element-list new file mode 100644 index 000000000..c4b215c13 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/element-list @@ -0,0 +1,13 @@ +org.apache.guacamole.environment +org.apache.guacamole.form +org.apache.guacamole.language +org.apache.guacamole.net.auth +org.apache.guacamole.net.auth.credentials +org.apache.guacamole.net.auth.permission +org.apache.guacamole.net.auth.simple +org.apache.guacamole.net.event +org.apache.guacamole.net.event.listener +org.apache.guacamole.properties +org.apache.guacamole.protocols +org.apache.guacamole.token +org.apache.guacamole.xml diff --git a/doc/1.5.5/guacamole-ext/help-doc.html b/doc/1.5.5/guacamole-ext/help-doc.html new file mode 100644 index 000000000..4ca3405ed --- /dev/null +++ b/doc/1.5.5/guacamole-ext/help-doc.html @@ -0,0 +1,282 @@ + + + + + +API Help (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    How This API Document Is Organized

    +
    This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.
    +
    +
    +
      +
    • +
      +

      Overview

      +

      The Overview page is the front page of this API document and provides a list of all packages with a summary for each. This page can also contain an overall description of the set of packages.

      +
      +
    • +
    • +
      +

      Package

      +

      Each package has a page that contains a list of its classes and interfaces, with a summary for each. These pages may contain six categories:

      +
        +
      • Interfaces
      • +
      • Classes
      • +
      • Enums
      • +
      • Exceptions
      • +
      • Errors
      • +
      • Annotation Types
      • +
      +
      +
    • +
    • +
      +

      Class or Interface

      +

      Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:

      +
        +
      • Class Inheritance Diagram
      • +
      • Direct Subclasses
      • +
      • All Known Subinterfaces
      • +
      • All Known Implementing Classes
      • +
      • Class or Interface Declaration
      • +
      • Class or Interface Description
      • +
      +
      +
        +
      • Nested Class Summary
      • +
      • Field Summary
      • +
      • Property Summary
      • +
      • Constructor Summary
      • +
      • Method Summary
      • +
      +
      +
        +
      • Field Detail
      • +
      • Property Detail
      • +
      • Constructor Detail
      • +
      • Method Detail
      • +
      +

      Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.

      +
      +
    • +
    • +
      +

      Annotation Type

      +

      Each annotation type has its own separate page with the following sections:

      +
        +
      • Annotation Type Declaration
      • +
      • Annotation Type Description
      • +
      • Required Element Summary
      • +
      • Optional Element Summary
      • +
      • Element Detail
      • +
      +
      +
    • +
    • +
      +

      Enum

      +

      Each enum has its own separate page with the following sections:

      +
        +
      • Enum Declaration
      • +
      • Enum Description
      • +
      • Enum Constant Summary
      • +
      • Enum Constant Detail
      • +
      +
      +
    • +
    • +
      +

      Use

      +

      Each documented package, class and interface has its own Use page. This page describes what packages, classes, methods, constructors and fields use any part of the given class or package. Given a class or interface A, its "Use" page includes subclasses of A, fields declared as A, methods that return A, and methods and constructors with parameters of type A. You can access this page by first going to the package, class or interface, then clicking on the "Use" link in the navigation bar.

      +
      +
    • +
    • +
      +

      Tree (Class Hierarchy)

      +

      There is a Class Hierarchy page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. Classes are organized by inheritance structure starting with java.lang.Object. Interfaces do not inherit from java.lang.Object.

      +
        +
      • When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.
      • +
      • When viewing a particular package, class or interface page, clicking on "Tree" displays the hierarchy for only that package.
      • +
      +
      +
    • +
    • +
      +

      Deprecated API

      +

      The Deprecated API page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.

      +
      +
    • +
    • +
      +

      Index

      +

      The Index contains an alphabetic index of all classes, interfaces, constructors, methods, and fields, as well as lists of all packages and all classes.

      +
      +
    • +
    • +
      +

      All Classes

      +

      The All Classes link shows all classes and interfaces except non-static nested types.

      +
      +
    • +
    • +
      +

      Serialized Form

      +

      Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description.

      +
      +
    • +
    • +
      +

      Constant Field Values

      +

      The Constant Field Values page lists the static final fields and their values.

      +
      +
    • +
    • +
      +

      Search

      +

      You can search for definitions of modules, packages, types, fields, methods and other terms defined in the API, using some or all of the name. "Camel-case" abbreviations are supported: for example, "InpStr" will find "InputStream" and "InputStreamReader".

      +
      +
    • +
    +
    +This help file applies to API documentation generated by the standard doclet.
    +
    +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/index-all.html b/doc/1.5.5/guacamole-ext/index-all.html new file mode 100644 index 000000000..1ae156087 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/index-all.html @@ -0,0 +1,4693 @@ + + + + + +Index (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I L M N O P Q R S T U V 
    All Classes All Packages + + +

    A

    +
    +
    AbstractActiveConnection - Class in org.apache.guacamole.net.auth
    +
    +
    Base implementation of an ActiveConnection, providing storage and simply + getters/setters for its main properties.
    +
    +
    AbstractActiveConnection() - Constructor for class org.apache.guacamole.net.auth.AbstractActiveConnection
    +
     
    +
    AbstractActivityLog - Class in org.apache.guacamole.net.auth
    +
    +
    Base implementation of an ActivityLog, providing storage and simple + getters/setters for its main properties.
    +
    +
    AbstractActivityLog(ActivityLog.Type, TranslatableMessage) - Constructor for class org.apache.guacamole.net.auth.AbstractActivityLog
    +
    +
    Creates a new AbstractActivityLog having the given type and + human-readable description.
    +
    +
    AbstractAuthenticatedUser - Class in org.apache.guacamole.net.auth
    +
    +
    Basic implementation of an AuthenticatedUser which uses the username to + determine equality.
    +
    +
    AbstractAuthenticatedUser() - Constructor for class org.apache.guacamole.net.auth.AbstractAuthenticatedUser
    +
     
    +
    AbstractAuthenticationProvider - Class in org.apache.guacamole.net.auth
    +
    +
    Base implementation of AuthenticationProvider which provides default + implementations of most functions.
    +
    +
    AbstractAuthenticationProvider() - Constructor for class org.apache.guacamole.net.auth.AbstractAuthenticationProvider
    +
     
    +
    AbstractConnection - Class in org.apache.guacamole.net.auth
    +
    +
    Basic implementation of a Guacamole connection.
    +
    +
    AbstractConnection() - Constructor for class org.apache.guacamole.net.auth.AbstractConnection
    +
     
    +
    AbstractConnectionGroup - Class in org.apache.guacamole.net.auth
    +
    +
    Basic implementation of a Guacamole connection group.
    +
    +
    AbstractConnectionGroup() - Constructor for class org.apache.guacamole.net.auth.AbstractConnectionGroup
    +
     
    +
    AbstractIdentifiable - Class in org.apache.guacamole.net.auth
    +
    +
    Abstract implementation of Identifiable which provides equals() and + hashCode() implementations which use the identifier to determine equality.
    +
    +
    AbstractIdentifiable() - Constructor for class org.apache.guacamole.net.auth.AbstractIdentifiable
    +
     
    +
    AbstractSharingProfile - Class in org.apache.guacamole.net.auth
    +
    +
    Base implementation of a sharing profile which can be used to share a + Guacamole connection.
    +
    +
    AbstractSharingProfile() - Constructor for class org.apache.guacamole.net.auth.AbstractSharingProfile
    +
     
    +
    AbstractUser - Class in org.apache.guacamole.net.auth
    +
    +
    Base implementation of User which provides default implementations of + most functions.
    +
    +
    AbstractUser() - Constructor for class org.apache.guacamole.net.auth.AbstractUser
    +
     
    +
    AbstractUserContext - Class in org.apache.guacamole.net.auth
    +
    +
    Base implementation of UserContext which provides default implementations of + most functions.
    +
    +
    AbstractUserContext() - Constructor for class org.apache.guacamole.net.auth.AbstractUserContext
    +
     
    +
    AbstractUserGroup - Class in org.apache.guacamole.net.auth
    +
    +
    Base implementation of UserGroup which provides default implementations of + most functions.
    +
    +
    AbstractUserGroup() - Constructor for class org.apache.guacamole.net.auth.AbstractUserGroup
    +
     
    +
    ActiveConnection - Interface in org.apache.guacamole.net.auth
    +
    +
    A pairing of username and GuacamoleTunnel representing an active usage of a + particular connection.
    +
    +
    ActivityLog - Interface in org.apache.guacamole.net.auth
    +
    +
    An arbitrary log of an activity whose content may be exposed to a user with + sufficient privileges.
    +
    +
    ActivityLog.Type - Enum in org.apache.guacamole.net.auth
    +
    +
    All possible types of ActivityLog.
    +
    +
    ActivityRecord - Interface in org.apache.guacamole.net.auth
    +
    +
    A logging record describing when a user started and ended a particular + activity.
    +
    +
    ActivityRecordSet<RecordType extends ActivityRecord> - Interface in org.apache.guacamole.net.auth
    +
    +
    A set of all available records related to a type of activity which has a + defined start and end time, such as a user being logged in or connected, or a + subset of those records.
    +
    +
    ActivityRecordSet.SortableProperty - Enum in org.apache.guacamole.net.auth
    +
    +
    All properties of activity records which can be used as sorting + criteria.
    +
    +
    add(ObjectType) - Method in class org.apache.guacamole.net.auth.DecoratingDirectory
    +
     
    +
    add(ObjectType) - Method in class org.apache.guacamole.net.auth.DelegatingDirectory
    +
     
    +
    add(ObjectType) - Method in interface org.apache.guacamole.net.auth.Directory
    +
    +
    Adds the given object to the overall set.
    +
    +
    add(ObjectType) - Method in class org.apache.guacamole.net.auth.simple.SimpleDirectory
    +
     
    +
    addGuacamoleProperties(GuacamoleProperties) - Method in class org.apache.guacamole.environment.DelegatingEnvironment
    +
     
    +
    addGuacamoleProperties(GuacamoleProperties) - Method in interface org.apache.guacamole.environment.Environment
    +
    +
    Adds another possible source of Guacamole configuration properties to + this Environment.
    +
    +
    addGuacamoleProperties(GuacamoleProperties) - Method in class org.apache.guacamole.environment.LocalEnvironment
    +
     
    +
    addObjects(Set<String>) - Method in interface org.apache.guacamole.net.auth.RelatedObjectSet
    +
    +
    Adds the objects having the given identifiers, if not already present.
    +
    +
    addObjects(Set<String>) - Method in class org.apache.guacamole.net.auth.simple.SimpleRelatedObjectSet
    +
     
    +
    addPermission(ObjectPermission.Type, String) - Method in interface org.apache.guacamole.net.auth.permission.ObjectPermissionSet
    +
    +
    Adds the specified permission for the object having the given + identifier.
    +
    +
    addPermission(ObjectPermission.Type, String) - Method in class org.apache.guacamole.net.auth.simple.SimpleObjectPermissionSet
    +
     
    +
    addPermission(SystemPermission.Type) - Method in interface org.apache.guacamole.net.auth.permission.SystemPermissionSet
    +
    +
    Adds the specified permission.
    +
    +
    addPermission(SystemPermission.Type) - Method in class org.apache.guacamole.net.auth.simple.SimpleSystemPermissionSet
    +
     
    +
    addPermissions(Set<ObjectPermission>) - Method in interface org.apache.guacamole.net.auth.permission.ObjectPermissionSet
    +
     
    +
    addPermissions(Set<ObjectPermission>) - Method in class org.apache.guacamole.net.auth.simple.SimpleObjectPermissionSet
    +
     
    +
    addPermissions(Set<SystemPermission>) - Method in interface org.apache.guacamole.net.auth.permission.SystemPermissionSet
    +
     
    +
    addPermissions(Set<SystemPermission>) - Method in class org.apache.guacamole.net.auth.simple.SimpleSystemPermissionSet
    +
     
    +
    addPermissions(Set<PermissionType>) - Method in interface org.apache.guacamole.net.auth.permission.PermissionSet
    +
    +
    Adds the specified permissions, if not already granted.
    +
    +
    addStandardTokens(TokenFilter) - Static method in class org.apache.guacamole.token.StandardTokens
    +
    +
    Deprecated.
    +
    Adds tokens which are standardized by guacamole-ext to the given + TokenFilter and which do not require a corresponding Credentials object.
    +
    +
    addStandardTokens(TokenFilter, AuthenticatedUser) - Static method in class org.apache.guacamole.token.StandardTokens
    +
    +
    Deprecated.
    +
    Adds tokens which are standardized by guacamole-ext to the given + TokenFilter using the values from the given AuthenticatedUser object, + including any associated credentials.
    +
    +
    addStandardTokens(TokenFilter, Credentials) - Static method in class org.apache.guacamole.token.StandardTokens
    +
    +
    Deprecated.
    +
    Adds tokens which are standardized by guacamole-ext to the given + TokenFilter using the values from the given Credentials object.
    +
    +
    addTokens(Map<String, String>) - Method in class org.apache.guacamole.net.auth.TokenInjectingConnection
    +
    +
    Adds tokens to an in-progress call to connect().
    +
    +
    addTokens(Map<String, String>) - Method in class org.apache.guacamole.net.auth.TokenInjectingConnectionGroup
    +
    +
    Adds tokens to an in-progress call to connect().
    +
    +
    addTokens(ConnectionGroup, Map<String, String>) - Method in class org.apache.guacamole.net.auth.TokenInjectingUserContext
    +
    +
    Adds tokens to an in-progress call to connect() for the given + ConnectionGroup.
    +
    +
    addTokens(Connection, Map<String, String>) - Method in class org.apache.guacamole.net.auth.TokenInjectingUserContext
    +
    +
    Adds tokens to an in-progress call to connect() for the given + Connection.
    +
    +
    ADMINISTER - org.apache.guacamole.net.auth.permission.ObjectPermission.Type
    +
    +
    Change who has access to an object.
    +
    +
    ADMINISTER - org.apache.guacamole.net.auth.permission.SystemPermission.Type
    +
    +
    Administer the system in general, including adding permissions + which affect the system (like user creation, connection creation, + and system administration).
    +
    +
    ANONYMOUS_IDENTIFIER - Static variable in interface org.apache.guacamole.net.auth.AuthenticatedUser
    +
    +
    The identifier reserved for representing a user that has authenticated + anonymously.
    +
    +
    asCollection() - Method in interface org.apache.guacamole.net.auth.ActivityRecordSet
    +
    +
    Returns all records within this set as a standard Collection.
    +
    +
    asCollection() - Method in class org.apache.guacamole.net.auth.DecoratingActivityRecordSet
    +
     
    +
    asCollection() - Method in class org.apache.guacamole.net.auth.DelegatingActivityRecordSet
    +
     
    +
    asCollection() - Method in class org.apache.guacamole.net.auth.simple.SimpleActivityRecordSet
    +
     
    +
    asCollection() - Method in class org.apache.guacamole.net.auth.simple.SimpleConnectionRecordSet
    +
    +
    Deprecated.
    +
    Attribute() - Constructor for class org.apache.guacamole.net.auth.User.Attribute
    +
     
    +
    Attributes - Interface in org.apache.guacamole.net.auth
    +
    +
    An object which is associated with a set of arbitrary attributes that may + be modifiable, defined as name/value pairs.
    +
    +
    AuthenticatedUser - Interface in org.apache.guacamole.net.auth
    +
    +
    A user of the Guacamole web application who has been authenticated by an + AuthenticationProvider.
    +
    +
    authenticateUser(Credentials) - Method in class org.apache.guacamole.net.auth.AbstractAuthenticationProvider
    +
    +
    Returns an AuthenticatedUser representing the user authenticated by the + given credentials, if any.
    +
    +
    authenticateUser(Credentials) - Method in interface org.apache.guacamole.net.auth.AuthenticationProvider
    +
    +
    Returns an AuthenticatedUser representing the user authenticated by the + given credentials, if any.
    +
    +
    authenticateUser(Credentials) - Method in class org.apache.guacamole.net.auth.simple.SimpleAuthenticationProvider
    +
     
    +
    authenticationFailed(AuthenticationFailureEvent) - Method in interface org.apache.guacamole.net.event.listener.AuthenticationFailureListener
    +
    +
    Deprecated.
    +
    Event hook which fires immediately after a user's authentication attempt + fails.
    +
    +
    AuthenticationFailureEvent - Class in org.apache.guacamole.net.event
    +
    +
    An event which is triggered whenever a user's credentials fail to be + authenticated.
    +
    +
    AuthenticationFailureEvent(Credentials) - Constructor for class org.apache.guacamole.net.event.AuthenticationFailureEvent
    +
    +
    Creates a new AuthenticationFailureEvent which represents the failure + to authenticate the given credentials.
    +
    +
    AuthenticationFailureListener - Interface in org.apache.guacamole.net.event.listener
    +
    +
    Deprecated. +
    Listeners should instead implement the Listener interface.
    +
    +
    +
    AuthenticationProvider - Interface in org.apache.guacamole.net.auth
    +
    +
    Provides means of authorizing users and for accessing and managing data + associated with those users.
    +
    +
    authenticationSucceeded(AuthenticationSuccessEvent) - Method in interface org.apache.guacamole.net.event.listener.AuthenticationSuccessListener
    +
    +
    Deprecated.
    +
    Event hook which fires immediately after a user's authentication attempt + succeeds.
    +
    +
    AuthenticationSuccessEvent - Class in org.apache.guacamole.net.event
    +
    +
    An event which is triggered whenever a user's credentials pass + authentication.
    +
    +
    AuthenticationSuccessEvent(AuthenticatedUser) - Constructor for class org.apache.guacamole.net.event.AuthenticationSuccessEvent
    +
    +
    Creates a new AuthenticationSuccessEvent which represents a successful + authentication attempt by the user identified by the given + AuthenticatedUser object.
    +
    +
    AuthenticationSuccessListener - Interface in org.apache.guacamole.net.event.listener
    +
    +
    Deprecated. +
    Listeners should instead implement the Listener interface.
    +
    +
    +
    + + + +

    B

    +
    +
    BALANCING - org.apache.guacamole.net.auth.ConnectionGroup.Type
    +
    +
    A connection group that acts as a load balancer.
    +
    +
    BOOLEAN - Static variable in class org.apache.guacamole.form.Field.Type
    +
    +
    A boolean field, whose value is either blank or "true".
    +
    +
    BooleanField - Class in org.apache.guacamole.form
    +
    +
    Represents a field with strictly one possible value.
    +
    +
    BooleanField(String, String) - Constructor for class org.apache.guacamole.form.BooleanField
    +
    +
    Creates a new BooleanField with the given name and truth value.
    +
    +
    BooleanGuacamoleProperty - Class in org.apache.guacamole.properties
    +
    +
    A GuacamoleProperty whose value is an boolean.
    +
    +
    BooleanGuacamoleProperty() - Constructor for class org.apache.guacamole.properties.BooleanGuacamoleProperty
    +
     
    +
    ByteArrayProperty - Class in org.apache.guacamole.properties
    +
    +
    A GuacamoleProperty whose value is a byte array.
    +
    +
    ByteArrayProperty() - Constructor for class org.apache.guacamole.properties.ByteArrayProperty
    +
     
    +
    + + + +

    C

    +
    +
    canonicalize(String) - Static method in class org.apache.guacamole.token.TokenName
    +
    +
    Generate the name of a parameter token from the given string, with no + added prefix, such that the token name will simply be the transformed + version of the string.
    +
    +
    canonicalize(String, String) - Static method in class org.apache.guacamole.token.TokenName
    +
    +
    Generates the name of the parameter token that should be populated with + the given string.
    +
    +
    characters(char[], int, int) - Method in class org.apache.guacamole.xml.DocumentHandler
    +
     
    +
    childElement(String) - Method in interface org.apache.guacamole.xml.TagHandler
    +
    +
    Called when a child element of the current element is parsed.
    +
    +
    CLIENT_ADDRESS_TOKEN - Static variable in class org.apache.guacamole.token.StandardTokens
    +
    +
    Deprecated.
    +
    The name of the client address token added via addStandardTokens().
    +
    +
    CLIENT_HOSTNAME_TOKEN - Static variable in class org.apache.guacamole.token.StandardTokens
    +
    +
    Deprecated.
    +
    The name of the client hostname token added via addStandardTokens().
    +
    +
    complete(String) - Method in interface org.apache.guacamole.xml.TagHandler
    +
    +
    Called when this element, and all child elements, have been fully parsed, + and the entire text content of this element (if any) is available.
    +
    +
    connect(GuacamoleClientInformation) - Method in interface org.apache.guacamole.net.auth.Connectable
    +
    +
    Deprecated. +
    This function has been deprecated in favor of + Connectable.connect(org.apache.guacamole.protocol.GuacamoleClientInformation, java.util.Map), + which allows for connection parameter tokens to be injected and + applied by cooperating extensions, replacing the functionality + previously provided through the StandardTokens + class. It continues to be defined on this interface for + compatibility. New implementations should instead implement + Connectable.connect(org.apache.guacamole.protocol.GuacamoleClientInformation, java.util.Map).
    +
    +
    +
    connect(GuacamoleClientInformation) - Method in class org.apache.guacamole.net.auth.DelegatingConnection
    +
    +
    Deprecated.
    +
    +
    connect(GuacamoleClientInformation) - Method in class org.apache.guacamole.net.auth.DelegatingConnectionGroup
    +
    +
    Deprecated.
    +
    +
    connect(GuacamoleClientInformation) - Method in class org.apache.guacamole.net.auth.simple.SimpleConnection
    +
    +
    Deprecated.
    +
    +
    connect(GuacamoleClientInformation) - Method in class org.apache.guacamole.net.auth.simple.SimpleConnectionGroup
    +
    +
    Deprecated.
    +
    +
    connect(GuacamoleClientInformation, Map<String, String>) - Method in interface org.apache.guacamole.net.auth.ActiveConnection
    +
     
    +
    connect(GuacamoleClientInformation, Map<String, String>) - Method in interface org.apache.guacamole.net.auth.Connectable
    +
    +
    Establishes a connection to guacd using the information associated with + this object.
    +
    +
    connect(GuacamoleClientInformation, Map<String, String>) - Method in class org.apache.guacamole.net.auth.DelegatingConnection
    +
     
    +
    connect(GuacamoleClientInformation, Map<String, String>) - Method in class org.apache.guacamole.net.auth.DelegatingConnectionGroup
    +
     
    +
    connect(GuacamoleClientInformation, Map<String, String>) - Method in class org.apache.guacamole.net.auth.simple.SimpleConnection
    +
    +
    Establishes a connection to guacd using the information associated with + this object.
    +
    +
    connect(GuacamoleClientInformation, Map<String, String>) - Method in class org.apache.guacamole.net.auth.simple.SimpleConnectionGroup
    +
     
    +
    connect(GuacamoleClientInformation, Map<String, String>) - Method in class org.apache.guacamole.net.auth.TokenInjectingConnection
    +
     
    +
    connect(GuacamoleClientInformation, Map<String, String>) - Method in class org.apache.guacamole.net.auth.TokenInjectingConnectionGroup
    +
     
    +
    Connectable - Interface in org.apache.guacamole.net.auth
    +
    +
    An object which Guacamole can connect to.
    +
    +
    Connection - Interface in org.apache.guacamole.net.auth
    +
    +
    Represents a pairing of a GuacamoleConfiguration with a unique, + human-readable identifier, and abstracts the connection process.
    +
    +
    ConnectionGroup - Interface in org.apache.guacamole.net.auth
    +
    +
    Represents a connection group, which can contain both other connection groups + as well as connections.
    +
    +
    ConnectionGroup.Type - Enum in org.apache.guacamole.net.auth
    +
    +
    All legal types of connection group.
    +
    +
    ConnectionRecord - Interface in org.apache.guacamole.net.auth
    +
    +
    A logging record describing when a user started and ended usage of a + particular connection.
    +
    +
    ConnectionRecordSet - Interface in org.apache.guacamole.net.auth
    +
    +
    Deprecated. + +
    +
    +
    contains(String) - Method in interface org.apache.guacamole.net.auth.ActivityRecordSet
    +
    +
    Returns the subset of records which contain the given value.
    +
    +
    contains(String) - Method in class org.apache.guacamole.net.auth.DecoratingActivityRecordSet
    +
     
    +
    contains(String) - Method in class org.apache.guacamole.net.auth.DelegatingActivityRecordSet
    +
     
    +
    contains(String) - Method in class org.apache.guacamole.net.auth.simple.SimpleActivityRecordSet
    +
     
    +
    contains(String) - Method in class org.apache.guacamole.net.auth.simple.SimpleConnectionRecordSet
    +
    +
    Deprecated.
    +
    CREATE_CONNECTION - org.apache.guacamole.net.auth.permission.SystemPermission.Type
    +
    +
    Create connections.
    +
    +
    CREATE_CONNECTION_GROUP - org.apache.guacamole.net.auth.permission.SystemPermission.Type
    +
    +
    Create connection groups.
    +
    +
    CREATE_SHARING_PROFILE - org.apache.guacamole.net.auth.permission.SystemPermission.Type
    +
    +
    Create sharing profiles.
    +
    +
    CREATE_USER - org.apache.guacamole.net.auth.permission.SystemPermission.Type
    +
    +
    Create users.
    +
    +
    CREATE_USER_GROUP - org.apache.guacamole.net.auth.permission.SystemPermission.Type
    +
    +
    Create user groups.
    +
    +
    CredentialEvent - Interface in org.apache.guacamole.net.event
    +
    +
    Abstract basis for events which may have associated user credentials when + triggered.
    +
    +
    Credentials - Class in org.apache.guacamole.net.auth
    +
    +
    Simple arbitrary set of credentials, including a username/password pair, + the HttpServletRequest associated with the request for authorization + (if any) and the HttpSession associated with that request.
    +
    +
    Credentials(String, String, HttpServletRequest) - Constructor for class org.apache.guacamole.net.auth.Credentials
    +
    +
    Construct a Credentials object with the given username, password, + and HTTP request.
    +
    +
    CredentialsInfo - Class in org.apache.guacamole.net.auth.credentials
    +
    +
    Information which describes a set of valid credentials.
    +
    +
    CredentialsInfo(Collection<Field>) - Constructor for class org.apache.guacamole.net.auth.credentials.CredentialsInfo
    +
    +
    Creates a new CredentialsInfo object which requires the given fields for + any conforming credentials.
    +
    +
    + + + +

    D

    +
    +
    DATE - Static variable in class org.apache.guacamole.form.Field.Type
    +
    +
    A date field whose legal values conform to the pattern "YYYY-MM-DD", + zero-padded.
    +
    +
    DATE_TOKEN - Static variable in class org.apache.guacamole.token.StandardTokens
    +
    +
    Deprecated.
    +
    The name of the date token (server-local time) added via + addStandardTokens().
    +
    +
    DateField - Class in org.apache.guacamole.form
    +
    +
    Represents a date field.
    +
    +
    DateField(String) - Constructor for class org.apache.guacamole.form.DateField
    +
    +
    Creates a new DateField with the given name.
    +
    +
    decorate(ObjectType) - Method in class org.apache.guacamole.net.auth.DecoratingDirectory
    +
    +
    Given an object retrieved from a Directory which originates from a + different AuthenticationProvider, returns an identical type of object + optionally wrapped with additional information, functionality, etc.
    +
    +
    decorate(ActivityRecordSet<RecordType>) - Method in class org.apache.guacamole.net.auth.DecoratingActivityRecordSet
    +
    +
    Given an ActivityRecordSet which originates from a different + AuthenticationProvider, returns an identical type of record set + optionally wrapped with additional information, functionality, etc.
    +
    +
    decorate(UserContext, AuthenticatedUser, Credentials) - Method in class org.apache.guacamole.net.auth.AbstractAuthenticationProvider
    +
    +
    Given a UserContext returned from getUserContext() of a different + AuthenticationProvider, returns a UserContext instance which decorates + (wraps) that UserContext, delegating and overriding implemented + functions as necessary.
    +
    +
    decorate(UserContext, AuthenticatedUser, Credentials) - Method in interface org.apache.guacamole.net.auth.AuthenticationProvider
    +
    +
    Given a UserContext returned from getUserContext() of a different + AuthenticationProvider, returns a UserContext instance which decorates + (wraps) that UserContext, delegating and overriding implemented + functions as necessary.
    +
    +
    decorate(RecordType) - Method in class org.apache.guacamole.net.auth.DecoratingActivityRecordSet
    +
    +
    Given a record retrieved from a ActivityRecordSet which originates from + a different AuthenticationProvider, returns an identical type of record + optionally wrapped with additional information, functionality, etc.
    +
    +
    DecoratingActivityRecordSet<RecordType extends ActivityRecord> - Class in org.apache.guacamole.net.auth
    +
    +
    ActivityRecordSet implementation which simplifies decorating the records + within an underlying ActivityRecordSet.
    +
    +
    DecoratingActivityRecordSet(ActivityRecordSet<RecordType>) - Constructor for class org.apache.guacamole.net.auth.DecoratingActivityRecordSet
    +
    +
    Creates a new DecoratingActivityRecordSet which decorates the records + within the given set.
    +
    +
    DecoratingDirectory<ObjectType extends Identifiable> - Class in org.apache.guacamole.net.auth
    +
    +
    Directory implementation which simplifies decorating the objects within an + underlying Directory.
    +
    +
    DecoratingDirectory(Directory<ObjectType>) - Constructor for class org.apache.guacamole.net.auth.DecoratingDirectory
    +
    +
    Creates a new DecoratingDirectory which decorates the objects within + the given directory.
    +
    +
    DEFAULT_ROOT_CONNECTION_GROUP - Static variable in class org.apache.guacamole.net.auth.AbstractUserContext
    +
    +
    The unique identifier that will be used for the root connection group if + AbstractUserContext.getRootConnectionGroup() is not overridden.
    +
    +
    DelegatingActivityRecord - Class in org.apache.guacamole.net.auth
    +
    +
    ActivityRecord implementation which simply delegates all function calls to an + underlying ActivityRecord.
    +
    +
    DelegatingActivityRecord(ActivityRecord) - Constructor for class org.apache.guacamole.net.auth.DelegatingActivityRecord
    +
    +
    Wraps the given ActivityRecord such that all function calls against this + DelegatingActivityRecord will be delegated to it.
    +
    +
    DelegatingActivityRecordSet<RecordType extends ActivityRecord> - Class in org.apache.guacamole.net.auth
    +
    +
    ActivityRecordSet implementation which simply delegates all function calls + to an underlying ActivityRecordSet.
    +
    +
    DelegatingActivityRecordSet(ActivityRecordSet<RecordType>) - Constructor for class org.apache.guacamole.net.auth.DelegatingActivityRecordSet
    +
    +
    Wraps the given ActivityRecordSet such that all function calls against this + DelegatingActivityRecordSet will be delegated to it.
    +
    +
    DelegatingConnection - Class in org.apache.guacamole.net.auth
    +
    +
    Connection implementation which simply delegates all function calls to an + underlying Connection.
    +
    +
    DelegatingConnection(Connection) - Constructor for class org.apache.guacamole.net.auth.DelegatingConnection
    +
    +
    Wraps the given Connection such that all function calls against this + DelegatingConnection will be delegated to it.
    +
    +
    DelegatingConnectionGroup - Class in org.apache.guacamole.net.auth
    +
    +
    ConnectionGroup implementation which simply delegates all function calls to + an underlying ConnectionGroup.
    +
    +
    DelegatingConnectionGroup(ConnectionGroup) - Constructor for class org.apache.guacamole.net.auth.DelegatingConnectionGroup
    +
    +
    Wraps the given ConnectionGroup such that all function calls against this + DelegatingConnectionGroup will be delegated to it.
    +
    +
    DelegatingConnectionRecord - Class in org.apache.guacamole.net.auth
    +
    +
    ConnectionRecord implementation which simply delegates all function calls to + an underlying ConnectionRecord.
    +
    +
    DelegatingConnectionRecord(ConnectionRecord) - Constructor for class org.apache.guacamole.net.auth.DelegatingConnectionRecord
    +
    +
    Wraps the given ConnectionRecord such that all function calls against + this DelegatingConnectionRecord will be delegated to it.
    +
    +
    DelegatingDirectory<ObjectType extends Identifiable> - Class in org.apache.guacamole.net.auth
    +
    +
    Directory implementation which simply delegates all function calls to an + underlying Directory.
    +
    +
    DelegatingDirectory(Directory<ObjectType>) - Constructor for class org.apache.guacamole.net.auth.DelegatingDirectory
    +
    +
    Wraps the given Directory such that all function calls against this + DelegatingDirectory will be delegated to it.
    +
    +
    DelegatingEnvironment - Class in org.apache.guacamole.environment
    +
    +
    Environment implementation which simply delegates all function calls to a + wrapped Environment instance.
    +
    +
    DelegatingEnvironment(Environment) - Constructor for class org.apache.guacamole.environment.DelegatingEnvironment
    +
    +
    Creates a new DelegatingEnvironment which delegates all function calls + to the given Environment.
    +
    +
    DelegatingSharingProfile - Class in org.apache.guacamole.net.auth
    +
    +
    SharingProfile implementation which simply delegates all function calls to an + underlying SharingProfile.
    +
    +
    DelegatingSharingProfile(SharingProfile) - Constructor for class org.apache.guacamole.net.auth.DelegatingSharingProfile
    +
    +
    Wraps the given SharingProfile such that all function calls against this + DelegatingSharingProfile will be delegated to it.
    +
    +
    DelegatingUser - Class in org.apache.guacamole.net.auth
    +
    +
    User implementation which simply delegates all function calls to an + underlying User.
    +
    +
    DelegatingUser(User) - Constructor for class org.apache.guacamole.net.auth.DelegatingUser
    +
    +
    Wraps the given User such that all function calls against this + DelegatingUser will be delegated to it.
    +
    +
    DelegatingUserContext - Class in org.apache.guacamole.net.auth
    +
    +
    UserContext implementation which simply delegates all function calls to + an underlying UserContext.
    +
    +
    DelegatingUserContext(UserContext) - Constructor for class org.apache.guacamole.net.auth.DelegatingUserContext
    +
    +
    Wraps the given UserContext such that all function calls against this + DelegatingUserContext will be delegated to it.
    +
    +
    DelegatingUserGroup - Class in org.apache.guacamole.net.auth
    +
    +
    UserGroup implementation which simply delegates all function calls to an + underlying UserGroup.
    +
    +
    DelegatingUserGroup(UserGroup) - Constructor for class org.apache.guacamole.net.auth.DelegatingUserGroup
    +
    +
    Wraps the given UserGroup such that all function calls against this + DelegatingUserGroup will be delegated to it.
    +
    +
    DELETE - org.apache.guacamole.net.auth.permission.ObjectPermission.Type
    +
    +
    Delete an object.
    +
    +
    Directory<ObjectType extends Identifiable> - Interface in org.apache.guacamole.net.auth
    +
    +
    Provides access to a collection of all objects with associated identifiers, + and allows user manipulation and removal.
    +
    +
    DocumentHandler - Class in org.apache.guacamole.xml
    +
    +
    A simple ContentHandler implementation which digests SAX document events and + produces simpler tag-level events, maintaining its own stack for the + convenience of the tag handlers.
    +
    +
    DocumentHandler(String, TagHandler) - Constructor for class org.apache.guacamole.xml.DocumentHandler
    +
    +
    Creates a new DocumentHandler which will use the given TagHandler + to handle the root element.
    +
    +
    + + + +

    E

    +
    +
    EMAIL - Static variable in class org.apache.guacamole.form.Field.Type
    +
    +
    An email address field.
    +
    +
    EMAIL_ADDRESS - Static variable in class org.apache.guacamole.net.auth.User.Attribute
    +
    +
    The email address of the user.
    +
    +
    EmailField - Class in org.apache.guacamole.form
    +
    +
    Represents a text field which may contain an email address.
    +
    +
    EmailField(String) - Constructor for class org.apache.guacamole.form.EmailField
    +
    +
    Creates a new EmailField with the given name.
    +
    +
    EMPTY - Static variable in class org.apache.guacamole.net.auth.credentials.CredentialsInfo
    +
    +
    CredentialsInfo object which describes empty credentials.
    +
    +
    EMPTY_SET - Static variable in interface org.apache.guacamole.net.auth.permission.ObjectPermissionSet
    +
    +
    An immutable instance of ObjectPermissionSet which contains no + permissions.
    +
    +
    EMPTY_SET - Static variable in interface org.apache.guacamole.net.auth.permission.SystemPermissionSet
    +
    +
    An immutable instance of SystemPermissionSet which contains no + permissions.
    +
    +
    EMPTY_SET - Static variable in interface org.apache.guacamole.net.auth.RelatedObjectSet
    +
    +
    An immutable instance of RelatedObjectSEt which contains no objects.
    +
    +
    endElement(String, String, String) - Method in class org.apache.guacamole.xml.DocumentHandler
    +
     
    +
    ENUM - Static variable in class org.apache.guacamole.form.Field.Type
    +
    +
    An enumerated field, whose legal values are fully enumerated by a + provided, finite list.
    +
    +
    EnumField - Class in org.apache.guacamole.form
    +
    +
    Represents an arbitrary field with a finite, enumerated set of possible + values.
    +
    +
    EnumField(String, Collection<String>) - Constructor for class org.apache.guacamole.form.EnumField
    +
    +
    Creates a new EnumField with the given name and possible values.
    +
    +
    EnumGuacamoleProperty<T extends Enum<T>> - Class in org.apache.guacamole.properties
    +
    +
    A GuacamoleProperty whose possible values are defined by an enum.
    +
    +
    EnumGuacamoleProperty(Class<T>) - Constructor for class org.apache.guacamole.properties.EnumGuacamoleProperty
    +
    +
    Creates a new EnumGuacamoleProperty which parses String property values + into corresponding enum constants as defined by the + EnumGuacamoleProperty.PropertyValue annotations associated with those constants.
    +
    +
    EnumGuacamoleProperty(String, T, Object...) - Constructor for class org.apache.guacamole.properties.EnumGuacamoleProperty
    +
    +
    Creates a new EnumGuacamoleProperty which parses the given String + property values into the given corresponding enum constants.
    +
    +
    EnumGuacamoleProperty(Map<String, T>) - Constructor for class org.apache.guacamole.properties.EnumGuacamoleProperty
    +
    +
    Creates a new EnumGuacamoleProperty which parses String property values + into corresponding enum constants as defined by the given Map.
    +
    +
    EnumGuacamoleProperty.PropertyValue - Annotation Type in org.apache.guacamole.properties
    +
    +
    Defines the string value which should be accepted and parsed into the + annotated enum constant.
    +
    +
    Environment - Interface in org.apache.guacamole.environment
    +
    +
    The environment of an arbitrary Guacamole instance, describing available + protocols, configuration parameters, and the GUACAMOLE_HOME directory.
    +
    +
    equals(Object) - Method in class org.apache.guacamole.net.auth.AbstractIdentifiable
    +
     
    +
    equals(Object) - Method in class org.apache.guacamole.net.auth.AbstractSharingProfile
    +
     
    +
    equals(Object) - Method in class org.apache.guacamole.net.auth.permission.ObjectPermission
    +
     
    +
    equals(Object) - Method in class org.apache.guacamole.net.auth.permission.SystemPermission
    +
     
    +
    + + + +

    F

    +
    +
    Field - Class in org.apache.guacamole.form
    +
    +
    Represents an arbitrary field, such as an HTTP parameter, the parameter of a + remote desktop protocol, or an input field within a form.
    +
    +
    Field() - Constructor for class org.apache.guacamole.form.Field
    +
    +
    Creates a new Parameter with no associated name or type.
    +
    +
    Field(String, String) - Constructor for class org.apache.guacamole.form.Field
    +
    +
    Creates a new Field with the given name and type.
    +
    +
    Field(String, String, Collection<String>) - Constructor for class org.apache.guacamole.form.Field
    +
    +
    Creates a new Field with the given name, type, and possible values.
    +
    +
    Field.Type - Class in org.apache.guacamole.form
    +
    +
    All types of fields which are available by default.
    +
    +
    FieldOption - Class in org.apache.guacamole.form
    +
    +
    Describes an available legal value for an enumerated field.
    +
    +
    FieldOption() - Constructor for class org.apache.guacamole.form.FieldOption
    +
    +
    Creates a new FieldOption with no associated value or title.
    +
    +
    FieldOption(String, String) - Constructor for class org.apache.guacamole.form.FieldOption
    +
    +
    Creates a new FieldOption having the given value and title.
    +
    +
    FileActivityLog - Class in org.apache.guacamole.net.auth
    +
    +
    ActivityLog implementation that exposes the content of a local file.
    +
    +
    FileActivityLog(ActivityLog.Type, TranslatableMessage, File) - Constructor for class org.apache.guacamole.net.auth.FileActivityLog
    +
    +
    Creates a new FileActivityLog that exposes the content of the given + local file as an ActivityLog.
    +
    +
    FileGuacamoleProperties - Class in org.apache.guacamole.properties
    +
    +
    GuacamoleProperties implementation which reads all properties from a + standard Java properties file.
    +
    +
    FileGuacamoleProperties(File) - Constructor for class org.apache.guacamole.properties.FileGuacamoleProperties
    +
    +
    Creates a new FileGuacamoleProperties which reads all properties from + the given standard Java properties file.
    +
    +
    FileGuacamoleProperty - Class in org.apache.guacamole.properties
    +
    +
    A GuacamoleProperty whose value is a filename.
    +
    +
    FileGuacamoleProperty() - Constructor for class org.apache.guacamole.properties.FileGuacamoleProperty
    +
     
    +
    filter(String) - Method in class org.apache.guacamole.token.TokenFilter
    +
    +
    Filters the given string, replacing any tokens with their corresponding + values.
    +
    +
    filterStrict(String) - Method in class org.apache.guacamole.token.TokenFilter
    +
    +
    Filters the given string, replacing any tokens with their corresponding + values.
    +
    +
    filterValues(Map<?, String>) - Method in class org.apache.guacamole.token.TokenFilter
    +
    +
    Given an arbitrary map containing String values, replace each non-null + value with the corresponding filtered value.
    +
    +
    filterValuesStrict(Map<?, String>) - Method in class org.apache.guacamole.token.TokenFilter
    +
    +
    Given an arbitrary map containing String values, replace each non-null + value with the corresponding filtered value.
    +
    +
    Form - Class in org.apache.guacamole.form
    +
    +
    Information which describes logical set of fields.
    +
    +
    Form() - Constructor for class org.apache.guacamole.form.Form
    +
    +
    Creates a new Form object with no associated fields.
    +
    +
    Form(String, Collection<Field>) - Constructor for class org.apache.guacamole.form.Form
    +
    +
    Creates a new Form object having the given name and containing the given + fields.
    +
    +
    format(Integer) - Static method in class org.apache.guacamole.form.NumericField
    +
    +
    Formats the given integer in the format required by a numeric field.
    +
    +
    format(Date) - Static method in class org.apache.guacamole.form.DateField
    +
    +
    Converts the given date into a string which follows the format used by + date fields.
    +
    +
    format(Date) - Static method in class org.apache.guacamole.form.TimeField
    +
    +
    Converts the given time into a string which follows the format used by + time fields.
    +
    +
    FORMAT - Static variable in class org.apache.guacamole.form.DateField
    +
    +
    The date format used by date fields, compatible with SimpleDateFormat.
    +
    +
    FORMAT - Static variable in class org.apache.guacamole.form.TimeField
    +
    +
    The time format used by time fields, compatible with SimpleDateFormat.
    +
    +
    FULL_NAME - Static variable in class org.apache.guacamole.net.auth.User.Attribute
    +
    +
    The user's full name.
    +
    +
    + + + +

    G

    +
    +
    get(String) - Method in interface org.apache.guacamole.net.auth.ActivityRecordSet
    +
    +
    Returns the record having the given unique identifier, if records within + this set have unique identifiers.
    +
    +
    get(String) - Method in class org.apache.guacamole.net.auth.DecoratingActivityRecordSet
    +
     
    +
    get(String) - Method in class org.apache.guacamole.net.auth.DecoratingDirectory
    +
     
    +
    get(String) - Method in class org.apache.guacamole.net.auth.DelegatingActivityRecordSet
    +
     
    +
    get(String) - Method in class org.apache.guacamole.net.auth.DelegatingDirectory
    +
     
    +
    get(String) - Method in interface org.apache.guacamole.net.auth.Directory
    +
    +
    Returns the object having the given identifier.
    +
    +
    get(String) - Method in class org.apache.guacamole.net.auth.simple.SimpleDirectory
    +
     
    +
    getAccessibleObjects(Collection<ObjectPermission.Type>, Collection<String>) - Method in interface org.apache.guacamole.net.auth.permission.ObjectPermissionSet
    +
    +
    Tests whether this user has the specified permissions for the objects + having the given identifiers.
    +
    +
    getAccessibleObjects(Collection<ObjectPermission.Type>, Collection<String>) - Method in class org.apache.guacamole.net.auth.simple.SimpleObjectPermissionSet
    +
     
    +
    getActiveConnectionDirectory() - Method in class org.apache.guacamole.net.auth.AbstractUserContext
    +
    +
    Retrieves a Directory which can be used to view and manipulate + active connections, but only as allowed by the permissions given to the + user.
    +
    +
    getActiveConnectionDirectory() - Method in class org.apache.guacamole.net.auth.DelegatingUserContext
    +
     
    +
    getActiveConnectionDirectory() - Method in interface org.apache.guacamole.net.auth.UserContext
    +
    +
    Retrieves a Directory which can be used to view and manipulate + active connections, but only as allowed by the permissions given to the + user.
    +
    +
    getActiveConnectionPermissions() - Method in class org.apache.guacamole.net.auth.AbstractUser
    +
    +
    Returns all permissions given to this object regarding currently-active + connections.
    +
    +
    getActiveConnectionPermissions() - Method in class org.apache.guacamole.net.auth.AbstractUserGroup
    +
    +
    Returns all permissions given to this object regarding currently-active + connections.
    +
    +
    getActiveConnectionPermissions() - Method in class org.apache.guacamole.net.auth.DelegatingUser
    +
     
    +
    getActiveConnectionPermissions() - Method in class org.apache.guacamole.net.auth.DelegatingUserGroup
    +
     
    +
    getActiveConnectionPermissions() - Method in interface org.apache.guacamole.net.auth.Permissions
    +
    +
    Returns all permissions given to this object regarding currently-active + connections.
    +
    +
    getActiveConnections() - Method in interface org.apache.guacamole.net.auth.ActiveConnection
    +
     
    +
    getActiveConnections() - Method in interface org.apache.guacamole.net.auth.Connectable
    +
    +
    Returns the number of active connections associated with this object.
    +
    +
    getActiveConnections() - Method in class org.apache.guacamole.net.auth.DelegatingConnection
    +
     
    +
    getActiveConnections() - Method in class org.apache.guacamole.net.auth.DelegatingConnectionGroup
    +
     
    +
    getActiveConnections() - Method in class org.apache.guacamole.net.auth.simple.SimpleConnection
    +
     
    +
    getActiveConnections() - Method in class org.apache.guacamole.net.auth.simple.SimpleConnectionGroup
    +
     
    +
    getAll(Collection<String>) - Method in class org.apache.guacamole.net.auth.DecoratingDirectory
    +
     
    +
    getAll(Collection<String>) - Method in class org.apache.guacamole.net.auth.DelegatingDirectory
    +
     
    +
    getAll(Collection<String>) - Method in interface org.apache.guacamole.net.auth.Directory
    +
    +
    Returns the objects having the given identifiers.
    +
    +
    getAll(Collection<String>) - Method in class org.apache.guacamole.net.auth.simple.SimpleDirectory
    +
     
    +
    getAttributes() - Method in class org.apache.guacamole.net.auth.AbstractUser
    +
    +
    Returns all attributes associated with this object.
    +
    +
    getAttributes() - Method in class org.apache.guacamole.net.auth.AbstractUserGroup
    +
    +
    Returns all attributes associated with this object.
    +
    +
    getAttributes() - Method in interface org.apache.guacamole.net.auth.ActivityRecord
    +
     
    +
    getAttributes() - Method in class org.apache.guacamole.net.auth.DelegatingActivityRecord
    +
     
    +
    getAttributes() - Method in class org.apache.guacamole.net.auth.DelegatingConnection
    +
     
    +
    getAttributes() - Method in class org.apache.guacamole.net.auth.DelegatingConnectionGroup
    +
     
    +
    getAttributes() - Method in class org.apache.guacamole.net.auth.DelegatingSharingProfile
    +
     
    +
    getAttributes() - Method in class org.apache.guacamole.net.auth.DelegatingUser
    +
     
    +
    getAttributes() - Method in class org.apache.guacamole.net.auth.DelegatingUserGroup
    +
     
    +
    getAttributes() - Method in interface org.apache.guacamole.net.auth.ReadableAttributes
    +
    +
    Returns all attributes associated with this object.
    +
    +
    getAttributes() - Method in class org.apache.guacamole.net.auth.simple.SimpleConnection
    +
     
    +
    getAttributes() - Method in class org.apache.guacamole.net.auth.simple.SimpleConnectionGroup
    +
     
    +
    getAuthenticatedUser() - Method in class org.apache.guacamole.net.event.AuthenticationSuccessEvent
    +
     
    +
    getAuthenticatedUser() - Method in class org.apache.guacamole.net.event.TunnelCloseEvent
    +
     
    +
    getAuthenticatedUser() - Method in class org.apache.guacamole.net.event.TunnelConnectEvent
    +
     
    +
    getAuthenticatedUser() - Method in interface org.apache.guacamole.net.event.UserEvent
    +
    +
    Returns the AuthenticatedUser identifying the user triggering the event, + if any.
    +
    +
    getAuthenticationProvider() - Method in interface org.apache.guacamole.net.auth.AuthenticatedUser
    +
    +
    Returns the AuthenticationProvider that authenticated this user.
    +
    +
    getAuthenticationProvider() - Method in class org.apache.guacamole.net.auth.DelegatingUserContext
    +
     
    +
    getAuthenticationProvider() - Method in class org.apache.guacamole.net.auth.simple.SimpleUserContext
    +
     
    +
    getAuthenticationProvider() - Method in interface org.apache.guacamole.net.auth.UserContext
    +
    +
    Returns the AuthenticationProvider which created this UserContext, which + may not be the same AuthenticationProvider that authenticated the user + associated with this UserContext.
    +
    +
    getAuthorizedConfigurations(Credentials) - Method in class org.apache.guacamole.net.auth.simple.SimpleAuthenticationProvider
    +
    +
    Given an arbitrary credentials object, returns a Map containing all + configurations authorized by those credentials.
    +
    +
    getConfiguration() - Method in class org.apache.guacamole.net.auth.AbstractConnection
    +
     
    +
    getConfiguration() - Method in interface org.apache.guacamole.net.auth.Connection
    +
    +
    Returns the GuacamoleConfiguration associated with this Connection.
    +
    +
    getConfiguration() - Method in class org.apache.guacamole.net.auth.DelegatingConnection
    +
     
    +
    getConnectionAttributes() - Method in class org.apache.guacamole.net.auth.AbstractUserContext
    +
    +
    Retrieves a collection of all attributes applicable to connections.
    +
    +
    getConnectionAttributes() - Method in class org.apache.guacamole.net.auth.DelegatingUserContext
    +
     
    +
    getConnectionAttributes() - Method in interface org.apache.guacamole.net.auth.UserContext
    +
    +
    Retrieves a collection of all attributes applicable to connections.
    +
    +
    getConnectionDirectory() - Method in class org.apache.guacamole.net.auth.AbstractUserContext
    +
    +
    Retrieves a Directory which can be used to view and manipulate + connections and their configurations, but only as allowed by the + permissions given to the user.
    +
    +
    getConnectionDirectory() - Method in class org.apache.guacamole.net.auth.DelegatingUserContext
    +
     
    +
    getConnectionDirectory() - Method in class org.apache.guacamole.net.auth.simple.SimpleUserContext
    +
     
    +
    getConnectionDirectory() - Method in class org.apache.guacamole.net.auth.TokenInjectingUserContext
    +
     
    +
    getConnectionDirectory() - Method in interface org.apache.guacamole.net.auth.UserContext
    +
    +
    Retrieves a Directory which can be used to view and manipulate + connections and their configurations, but only as allowed by the + permissions given to the user.
    +
    +
    getConnectionForms() - Method in class org.apache.guacamole.protocols.ProtocolInfo
    +
    +
    Returns a mutable collection of forms describing all known parameters for + a connection using this protocol.
    +
    +
    getConnectionGroupAttributes() - Method in class org.apache.guacamole.net.auth.AbstractUserContext
    +
    +
    Retrieves a collection of all attributes applicable to connection + groups.
    +
    +
    getConnectionGroupAttributes() - Method in class org.apache.guacamole.net.auth.DelegatingUserContext
    +
     
    +
    getConnectionGroupAttributes() - Method in interface org.apache.guacamole.net.auth.UserContext
    +
    +
    Retrieves a collection of all attributes applicable to connection + groups.
    +
    +
    getConnectionGroupDirectory() - Method in class org.apache.guacamole.net.auth.AbstractUserContext
    +
    +
    Retrieves a Directory which can be used to view and manipulate + connection groups and their members, but only as allowed by the + permissions given to the user.
    +
    +
    getConnectionGroupDirectory() - Method in class org.apache.guacamole.net.auth.DelegatingUserContext
    +
     
    +
    getConnectionGroupDirectory() - Method in class org.apache.guacamole.net.auth.TokenInjectingUserContext
    +
     
    +
    getConnectionGroupDirectory() - Method in interface org.apache.guacamole.net.auth.UserContext
    +
    +
    Retrieves a Directory which can be used to view and manipulate + connection groups and their members, but only as allowed by the + permissions given to the user.
    +
    +
    getConnectionGroupIdentifiers() - Method in interface org.apache.guacamole.net.auth.ConnectionGroup
    +
    +
    Returns the identifiers of all readable connection groups that are + children of this connection group.
    +
    +
    getConnectionGroupIdentifiers() - Method in class org.apache.guacamole.net.auth.DelegatingConnectionGroup
    +
     
    +
    getConnectionGroupIdentifiers() - Method in class org.apache.guacamole.net.auth.simple.SimpleConnectionGroup
    +
     
    +
    getConnectionGroupPermissions() - Method in class org.apache.guacamole.net.auth.AbstractUser
    +
    +
    Returns all connection group permissions given to this object.
    +
    +
    getConnectionGroupPermissions() - Method in class org.apache.guacamole.net.auth.AbstractUserGroup
    +
    +
    Returns all connection group permissions given to this object.
    +
    +
    getConnectionGroupPermissions() - Method in class org.apache.guacamole.net.auth.DelegatingUser
    +
     
    +
    getConnectionGroupPermissions() - Method in class org.apache.guacamole.net.auth.DelegatingUserGroup
    +
     
    +
    getConnectionGroupPermissions() - Method in interface org.apache.guacamole.net.auth.Permissions
    +
    +
    Returns all connection group permissions given to this object.
    +
    +
    getConnectionGroupPermissions() - Method in class org.apache.guacamole.net.auth.simple.SimpleUser
    +
     
    +
    getConnectionHistory() - Method in class org.apache.guacamole.net.auth.AbstractUserContext
    +
    +
    Retrieves all connection records visible to current user.
    +
    +
    getConnectionHistory() - Method in interface org.apache.guacamole.net.auth.Connection
    +
    +
    Returns an ActivityRecordSet containing ConnectionRecords that + represent the usage history of this Connection, including any active + users.
    +
    +
    getConnectionHistory() - Method in class org.apache.guacamole.net.auth.DelegatingConnection
    +
     
    +
    getConnectionHistory() - Method in class org.apache.guacamole.net.auth.DelegatingUserContext
    +
     
    +
    getConnectionHistory() - Method in class org.apache.guacamole.net.auth.simple.SimpleConnection
    +
     
    +
    getConnectionHistory() - Method in interface org.apache.guacamole.net.auth.UserContext
    +
    +
    Retrieves all connection records visible to current user.
    +
    +
    getConnectionIdentifier() - Method in class org.apache.guacamole.net.auth.AbstractActiveConnection
    +
     
    +
    getConnectionIdentifier() - Method in interface org.apache.guacamole.net.auth.ActiveConnection
    +
    +
    Returns the identifier of the connection being actively used.
    +
    +
    getConnectionIdentifier() - Method in interface org.apache.guacamole.net.auth.ConnectionRecord
    +
    +
    Returns the identifier of the connection associated with this + connection record.
    +
    +
    getConnectionIdentifier() - Method in class org.apache.guacamole.net.auth.DelegatingConnectionRecord
    +
     
    +
    getConnectionIdentifiers() - Method in interface org.apache.guacamole.net.auth.ConnectionGroup
    +
    +
    Returns the identifiers of all readable connections that are children + of this connection group.
    +
    +
    getConnectionIdentifiers() - Method in class org.apache.guacamole.net.auth.DelegatingConnectionGroup
    +
     
    +
    getConnectionIdentifiers() - Method in class org.apache.guacamole.net.auth.simple.SimpleConnectionGroup
    +
     
    +
    getConnectionName() - Method in interface org.apache.guacamole.net.auth.ConnectionRecord
    +
    +
    Returns the name of the connection associated with this connection + record.
    +
    +
    getConnectionName() - Method in class org.apache.guacamole.net.auth.DelegatingConnectionRecord
    +
     
    +
    getConnectionPermissions() - Method in class org.apache.guacamole.net.auth.AbstractUser
    +
    +
    Returns all connection permissions given to this object.
    +
    +
    getConnectionPermissions() - Method in class org.apache.guacamole.net.auth.AbstractUserGroup
    +
    +
    Returns all connection permissions given to this object.
    +
    +
    getConnectionPermissions() - Method in class org.apache.guacamole.net.auth.DelegatingUser
    +
     
    +
    getConnectionPermissions() - Method in class org.apache.guacamole.net.auth.DelegatingUserGroup
    +
     
    +
    getConnectionPermissions() - Method in interface org.apache.guacamole.net.auth.Permissions
    +
    +
    Returns all connection permissions given to this object.
    +
    +
    getConnectionPermissions() - Method in class org.apache.guacamole.net.auth.simple.SimpleUser
    +
     
    +
    getContent() - Method in interface org.apache.guacamole.net.auth.ActivityLog
    +
    +
    Returns an InputStream that allows the content of this log to be read.
    +
    +
    getContent() - Method in class org.apache.guacamole.net.auth.FileActivityLog
    +
     
    +
    getContentType() - Method in enum org.apache.guacamole.net.auth.ActivityLog.Type
    +
    +
    Returns the MIME type of the content of an activity log of this + type, as might be sent via the HTTP "Content-Type" header.
    +
    +
    getCredentials() - Method in interface org.apache.guacamole.net.auth.AuthenticatedUser
    +
    +
    Returns the credentials that the user provided when they successfully + authenticated.
    +
    +
    getCredentials() - Method in class org.apache.guacamole.net.event.AuthenticationFailureEvent
    +
     
    +
    getCredentials() - Method in class org.apache.guacamole.net.event.AuthenticationSuccessEvent
    +
     
    +
    getCredentials() - Method in interface org.apache.guacamole.net.event.CredentialEvent
    +
    +
    Returns the current credentials of the user triggering the event, if any.
    +
    +
    getCredentials() - Method in class org.apache.guacamole.net.event.TunnelCloseEvent
    +
     
    +
    getCredentials() - Method in class org.apache.guacamole.net.event.TunnelConnectEvent
    +
     
    +
    getCredentialsInfo() - Method in exception org.apache.guacamole.net.auth.credentials.GuacamoleCredentialsException
    +
    +
    Returns information describing the form of valid credentials.
    +
    +
    getDefaultGuacamoleProxyConfiguration() - Method in class org.apache.guacamole.environment.DelegatingEnvironment
    +
     
    +
    getDefaultGuacamoleProxyConfiguration() - Method in interface org.apache.guacamole.environment.Environment
    +
    +
    Returns the connection information which should be used, by default, to + connect to guacd when establishing a remote desktop connection.
    +
    +
    getDefaultGuacamoleProxyConfiguration() - Method in class org.apache.guacamole.environment.LocalEnvironment
    +
     
    +
    getDelegateActivityRecord() - Method in class org.apache.guacamole.net.auth.DelegatingActivityRecord
    +
    +
    Returns the underlying ActivityRecord wrapped by this + DelegatingActivityRecord.
    +
    +
    getDelegateActivityRecordSet() - Method in class org.apache.guacamole.net.auth.DelegatingActivityRecordSet
    +
    +
    Returns the underlying ActivityRecordSet wrapped by this + DelegatingActivityRecordSet.
    +
    +
    getDelegateConnection() - Method in class org.apache.guacamole.net.auth.DelegatingConnection
    +
    +
    Returns the underlying Connection wrapped by this DelegatingConnection.
    +
    +
    getDelegateConnectionGroup() - Method in class org.apache.guacamole.net.auth.DelegatingConnectionGroup
    +
    +
    Returns the underlying ConnectionGroup wrapped by this + DelegatingConnectionGroup.
    +
    +
    getDelegateConnectionRecord() - Method in class org.apache.guacamole.net.auth.DelegatingConnectionRecord
    +
    +
    Returns the underlying ConnectionRecord wrapped by this + DelegatingConnectionRecord.
    +
    +
    getDelegateDirectory() - Method in class org.apache.guacamole.net.auth.DelegatingDirectory
    +
    +
    Returns the underlying Directory wrapped by this DelegatingDirectory.
    +
    +
    getDelegateSharingProfile() - Method in class org.apache.guacamole.net.auth.DelegatingSharingProfile
    +
    +
    Returns the underlying SharingProfile wrapped by this + DelegatingSharingProfile.
    +
    +
    getDelegateUser() - Method in class org.apache.guacamole.net.auth.DelegatingUser
    +
    +
    Returns the underlying User wrapped by this DelegatingUser.
    +
    +
    getDelegateUserContext() - Method in class org.apache.guacamole.net.auth.DelegatingUserContext
    +
    +
    Returns the underlying UserContext wrapped by this + DelegatingUserContext.
    +
    +
    getDelegateUserGroupGroup() - Method in class org.apache.guacamole.net.auth.DelegatingUserGroup
    +
    +
    Returns the underlying UserGroup wrapped by this DelegatingUserGroup.
    +
    +
    getDescription() - Method in class org.apache.guacamole.net.auth.AbstractActivityLog
    +
     
    +
    getDescription() - Method in interface org.apache.guacamole.net.auth.ActivityLog
    +
    +
    Returns a human-readable message that describes this log.
    +
    +
    getEffectivePermissions() - Method in class org.apache.guacamole.net.auth.AbstractUser
    +
    +
    Returns a read-only view of all permissions granted to this user.
    +
    +
    getEffectivePermissions() - Method in class org.apache.guacamole.net.auth.DelegatingUser
    +
     
    +
    getEffectivePermissions() - Method in interface org.apache.guacamole.net.auth.User
    +
    +
    Returns a read-only view of all permissions granted to this user.
    +
    +
    getEffectiveUserGroups() - Method in class org.apache.guacamole.net.auth.AbstractAuthenticatedUser
    +
     
    +
    getEffectiveUserGroups() - Method in interface org.apache.guacamole.net.auth.AuthenticatedUser
    +
    +
    Returns a read-only set of the identifiers of all user groups which + apply to this authenticated user.
    +
    +
    getEncryptionMethod() - Method in class org.apache.guacamole.net.auth.GuacamoleProxyConfiguration
    +
    +
    Returns the type of encryption required by guacd.
    +
    +
    getEndDate() - Method in interface org.apache.guacamole.net.auth.ActivityRecord
    +
    +
    Returns the date and time the activity ended, if applicable.
    +
    +
    getEndDate() - Method in class org.apache.guacamole.net.auth.DelegatingActivityRecord
    +
     
    +
    getFields() - Method in class org.apache.guacamole.form.Form
    +
    +
    Returns a mutable collection of the fields associated with this form.
    +
    +
    getFields() - Method in class org.apache.guacamole.net.auth.credentials.CredentialsInfo
    +
    +
    Returns all fields required for valid credentials as described by this + object.
    +
    +
    getFullConfiguration() - Method in class org.apache.guacamole.net.auth.simple.SimpleConnection
    +
    +
    Returns the GuacamoleConfiguration describing how to connect to this + connection.
    +
    +
    getGuacamoleHome() - Method in class org.apache.guacamole.environment.DelegatingEnvironment
    +
     
    +
    getGuacamoleHome() - Method in interface org.apache.guacamole.environment.Environment
    +
    +
    Returns the Guacamole home directory as determined when this Environment + object was created.
    +
    +
    getGuacamoleHome() - Method in class org.apache.guacamole.environment.LocalEnvironment
    +
     
    +
    getHistory() - Method in interface org.apache.guacamole.net.auth.Connection
    +
    +
    Deprecated. +
    This function has been deprecated in favor of + Connection.getConnectionHistory(), which returns the connection history + as an ActivityRecordSet that can be easily sorted and filtered. + While the getHistory() method is provided for API compatibility, + new implementations should avoid use of this method and, instead, + implement the getConnectionHistory() method.
    +
    +
    +
    getHistory() - Method in class org.apache.guacamole.net.auth.DelegatingConnection
    +
    +
    Deprecated.
    +
    +
    getHistory() - Method in class org.apache.guacamole.net.auth.DelegatingUser
    +
    +
    Deprecated.
    +
    +
    getHistory() - Method in interface org.apache.guacamole.net.auth.User
    +
    +
    Deprecated. +
    This function is deprecated in favor of User.getUserHistory(), which + returns the login history as an ActivityRecordSet which supports + various sort and filter functions. While this continues to be defined + for API compatibility, new implementation should avoid this function + and use getUserHistory(), instead.
    +
    +
    +
    getHostname() - Method in class org.apache.guacamole.net.auth.GuacamoleProxyConfiguration
    +
    +
    Returns the hostname or address of the machine where guacd is running.
    +
    +
    getIdentifier() - Method in class org.apache.guacamole.net.auth.AbstractIdentifiable
    +
     
    +
    getIdentifier() - Method in class org.apache.guacamole.net.auth.AbstractSharingProfile
    +
     
    +
    getIdentifier() - Method in interface org.apache.guacamole.net.auth.ActivityRecord
    +
    +
    Returns the unique identifier assigned to this record, if any.
    +
    +
    getIdentifier() - Method in interface org.apache.guacamole.net.auth.AuthenticationProvider
    +
    +
    Returns the identifier which uniquely and consistently identifies this + AuthenticationProvider implementation.
    +
    +
    getIdentifier() - Method in class org.apache.guacamole.net.auth.DelegatingActivityRecord
    +
     
    +
    getIdentifier() - Method in class org.apache.guacamole.net.auth.DelegatingConnection
    +
     
    +
    getIdentifier() - Method in class org.apache.guacamole.net.auth.DelegatingConnectionGroup
    +
     
    +
    getIdentifier() - Method in class org.apache.guacamole.net.auth.DelegatingSharingProfile
    +
     
    +
    getIdentifier() - Method in class org.apache.guacamole.net.auth.DelegatingUser
    +
     
    +
    getIdentifier() - Method in class org.apache.guacamole.net.auth.DelegatingUserGroup
    +
     
    +
    getIdentifier() - Method in interface org.apache.guacamole.net.auth.Identifiable
    +
    +
    Returns the unique identifier assigned to this object.
    +
    +
    getIdentifiers() - Method in class org.apache.guacamole.net.auth.DelegatingDirectory
    +
     
    +
    getIdentifiers() - Method in interface org.apache.guacamole.net.auth.Directory
    +
    +
    Returns a Set containing all identifiers for all objects within this + Directory.
    +
    +
    getIdentifiers() - Method in class org.apache.guacamole.net.auth.simple.SimpleDirectory
    +
     
    +
    getInstance() - Static method in class org.apache.guacamole.environment.LocalEnvironment
    +
    +
    Returns a singleton instance of LocalEnvironment which may be shared by + the Guacamole web application and all extensions.
    +
    +
    getKey() - Method in class org.apache.guacamole.language.TranslatableMessage
    +
    +
    Returns the arbitrary key which can be used to look up the message to be + displayed in the user's native language.
    +
    +
    getLastActive() - Method in class org.apache.guacamole.net.auth.AbstractUser
    +
    +
    Returns the date and time that this user was last active.
    +
    +
    getLastActive() - Method in interface org.apache.guacamole.net.auth.Connection
    +
    +
    Returns the date and time that this connection was last used.
    +
    +
    getLastActive() - Method in class org.apache.guacamole.net.auth.DelegatingConnection
    +
     
    +
    getLastActive() - Method in class org.apache.guacamole.net.auth.DelegatingUser
    +
     
    +
    getLastActive() - Method in class org.apache.guacamole.net.auth.simple.SimpleConnection
    +
     
    +
    getLastActive() - Method in interface org.apache.guacamole.net.auth.User
    +
    +
    Returns the date and time that this user was last active.
    +
    +
    getLogs() - Method in interface org.apache.guacamole.net.auth.ActivityRecord
    +
    +
    Returns a Map of logs related to this record and accessible by the + current user, such as Guacamole session recordings.
    +
    +
    getLogs() - Method in class org.apache.guacamole.net.auth.DelegatingActivityRecord
    +
     
    +
    getMemberUserGroups() - Method in class org.apache.guacamole.net.auth.AbstractUserGroup
    +
    +
    Returns a set of all readable user groups that are members of this user + group.
    +
    +
    getMemberUserGroups() - Method in class org.apache.guacamole.net.auth.DelegatingUserGroup
    +
     
    +
    getMemberUserGroups() - Method in interface org.apache.guacamole.net.auth.UserGroup
    +
    +
    Returns a set of all readable user groups that are members of this user + group.
    +
    +
    getMemberUsers() - Method in class org.apache.guacamole.net.auth.AbstractUserGroup
    +
    +
    Returns a set of all readable users that are members of this user group.
    +
    +
    getMemberUsers() - Method in class org.apache.guacamole.net.auth.DelegatingUserGroup
    +
     
    +
    getMemberUsers() - Method in interface org.apache.guacamole.net.auth.UserGroup
    +
    +
    Returns a set of all readable users that are members of this user group.
    +
    +
    getName() - Method in class org.apache.guacamole.form.Field
    +
    +
    Returns the unique name associated with this field.
    +
    +
    getName() - Method in class org.apache.guacamole.form.Form
    +
    +
    Returns the name of this form.
    +
    +
    getName() - Method in class org.apache.guacamole.net.auth.AbstractConnection
    +
     
    +
    getName() - Method in class org.apache.guacamole.net.auth.AbstractConnectionGroup
    +
     
    +
    getName() - Method in class org.apache.guacamole.net.auth.AbstractSharingProfile
    +
     
    +
    getName() - Method in interface org.apache.guacamole.net.auth.Connection
    +
    +
    Returns the name assigned to this Connection.
    +
    +
    getName() - Method in interface org.apache.guacamole.net.auth.ConnectionGroup
    +
    +
    Returns the name assigned to this ConnectionGroup.
    +
    +
    getName() - Method in class org.apache.guacamole.net.auth.DelegatingConnection
    +
     
    +
    getName() - Method in class org.apache.guacamole.net.auth.DelegatingConnectionGroup
    +
     
    +
    getName() - Method in class org.apache.guacamole.net.auth.DelegatingSharingProfile
    +
     
    +
    getName() - Method in interface org.apache.guacamole.net.auth.SharingProfile
    +
    +
    Returns the human-readable name assigned to this SharingProfile.
    +
    +
    getName() - Method in interface org.apache.guacamole.properties.GuacamoleProperty
    +
    +
    Returns the name of the property in guacamole.properties that this + GuacamoleProperty will parse.
    +
    +
    getName() - Method in class org.apache.guacamole.protocols.ProtocolInfo
    +
    +
    Returns the unique name of this protocol.
    +
    +
    getObjectIdentifier() - Method in class org.apache.guacamole.net.auth.permission.ObjectPermission
    +
    +
    Returns the identifier of the specific object affected by this + permission.
    +
    +
    getObjects() - Method in interface org.apache.guacamole.net.auth.RelatedObjectSet
    +
    +
    Returns a Set which contains the identifiers of all objects contained + within this RelatedObjectSet.
    +
    +
    getObjects() - Method in class org.apache.guacamole.net.auth.simple.SimpleDirectory
    +
    +
    Returns the Map which currently backs this SimpleDirectory.
    +
    +
    getObjects() - Method in class org.apache.guacamole.net.auth.simple.SimpleRelatedObjectSet
    +
     
    +
    getOptions() - Method in class org.apache.guacamole.form.Field
    +
    +
    Returns a mutable collection of field options.
    +
    +
    getParameters() - Method in class org.apache.guacamole.net.auth.AbstractSharingProfile
    +
     
    +
    getParameters() - Method in class org.apache.guacamole.net.auth.DelegatingSharingProfile
    +
     
    +
    getParameters() - Method in interface org.apache.guacamole.net.auth.SharingProfile
    +
    +
    Returns a map which contains connection parameter name/value pairs as + key/value pairs.
    +
    +
    getParentIdentifier() - Method in class org.apache.guacamole.net.auth.AbstractConnection
    +
     
    +
    getParentIdentifier() - Method in class org.apache.guacamole.net.auth.AbstractConnectionGroup
    +
     
    +
    getParentIdentifier() - Method in interface org.apache.guacamole.net.auth.Connection
    +
    +
    Returns the unique identifier of the parent ConnectionGroup for + this Connection.
    +
    +
    getParentIdentifier() - Method in interface org.apache.guacamole.net.auth.ConnectionGroup
    +
    +
    Returns the unique identifier of the parent ConnectionGroup for + this ConnectionGroup.
    +
    +
    getParentIdentifier() - Method in class org.apache.guacamole.net.auth.DelegatingConnection
    +
     
    +
    getParentIdentifier() - Method in class org.apache.guacamole.net.auth.DelegatingConnectionGroup
    +
     
    +
    getPassword() - Method in class org.apache.guacamole.net.auth.AbstractUser
    +
     
    +
    getPassword() - Method in class org.apache.guacamole.net.auth.Credentials
    +
    +
    Returns the password associated with this set of credentials.
    +
    +
    getPassword() - Method in class org.apache.guacamole.net.auth.DelegatingUser
    +
     
    +
    getPassword() - Method in interface org.apache.guacamole.net.auth.User
    +
    +
    Returns this user's password.
    +
    +
    getPermissions() - Method in interface org.apache.guacamole.net.auth.permission.ObjectPermissionSet
    +
     
    +
    getPermissions() - Method in interface org.apache.guacamole.net.auth.permission.PermissionSet
    +
    +
    Returns a Set which contains all permissions granted within this + permission set.
    +
    +
    getPermissions() - Method in interface org.apache.guacamole.net.auth.permission.SystemPermissionSet
    +
     
    +
    getPermissions() - Method in class org.apache.guacamole.net.auth.simple.SimpleObjectPermissionSet
    +
     
    +
    getPermissions() - Method in class org.apache.guacamole.net.auth.simple.SimpleSystemPermissionSet
    +
     
    +
    getPort() - Method in class org.apache.guacamole.net.auth.GuacamoleProxyConfiguration
    +
    +
    Returns the port that guacd is listening on.
    +
    +
    getPrimaryConnectionIdentifier() - Method in class org.apache.guacamole.net.auth.AbstractSharingProfile
    +
     
    +
    getPrimaryConnectionIdentifier() - Method in class org.apache.guacamole.net.auth.DelegatingSharingProfile
    +
     
    +
    getPrimaryConnectionIdentifier() - Method in interface org.apache.guacamole.net.auth.SharingProfile
    +
    +
    Returns the identifier of the primary connection associated with this + connection.
    +
    +
    getPrivileged() - Method in class org.apache.guacamole.net.auth.AbstractUserContext
    +
    +
    Returns a user context which provides privileged access.
    +
    +
    getPrivileged() - Method in class org.apache.guacamole.net.auth.DelegatingUserContext
    +
     
    +
    getPrivileged() - Method in interface org.apache.guacamole.net.auth.UserContext
    +
    +
    Returns a user context which provides privileged access.
    +
    +
    getProperty(String) - Method in interface org.apache.guacamole.properties.GuacamoleProperties
    +
    +
    Returns the value of the property having the given name, if defined.
    +
    +
    getProperty(String) - Method in class org.apache.guacamole.properties.PropertiesGuacamoleProperties
    +
     
    +
    getProperty(GuacamoleProperty<Type>) - Method in class org.apache.guacamole.environment.DelegatingEnvironment
    +
     
    +
    getProperty(GuacamoleProperty<Type>) - Method in interface org.apache.guacamole.environment.Environment
    +
    +
    Given a GuacamoleProperty, parses and returns the value set for that + property in guacamole.properties, if any.
    +
    +
    getProperty(GuacamoleProperty<Type>) - Method in class org.apache.guacamole.environment.LocalEnvironment
    +
     
    +
    getProperty(GuacamoleProperty<Type>, Type) - Method in class org.apache.guacamole.environment.DelegatingEnvironment
    +
     
    +
    getProperty(GuacamoleProperty<Type>, Type) - Method in interface org.apache.guacamole.environment.Environment
    +
    +
    Given a GuacamoleProperty, parses and returns the value set for that + property in guacamole.properties, if any.
    +
    +
    getProperty(GuacamoleProperty<Type>, Type) - Method in class org.apache.guacamole.environment.LocalEnvironment
    +
     
    +
    getProtocol(String) - Method in class org.apache.guacamole.environment.DelegatingEnvironment
    +
     
    +
    getProtocol(String) - Method in interface org.apache.guacamole.environment.Environment
    +
    +
    Returns the protocol having the given name.
    +
    +
    getProtocol(String) - Method in class org.apache.guacamole.environment.LocalEnvironment
    +
     
    +
    getProtocols() - Method in class org.apache.guacamole.environment.DelegatingEnvironment
    +
     
    +
    getProtocols() - Method in interface org.apache.guacamole.environment.Environment
    +
    +
    Returns a map of all available protocols, where each key is the name of + that protocol as would be passed to guacd during connection.
    +
    +
    getProtocols() - Method in class org.apache.guacamole.environment.LocalEnvironment
    +
     
    +
    getRedirectUrl() - Method in class org.apache.guacamole.form.RedirectField
    +
    +
    Returns the URL to which the user should be redirected.
    +
    +
    getRemoteAddress() - Method in class org.apache.guacamole.net.auth.Credentials
    +
    +
    Returns the address of the client end of the connection which provided + these credentials, if known.
    +
    +
    getRemoteHost() - Method in class org.apache.guacamole.net.auth.AbstractActiveConnection
    +
     
    +
    getRemoteHost() - Method in interface org.apache.guacamole.net.auth.ActiveConnection
    +
    +
    Returns the hostname or IP address of the remote host that initiated the + connection, if known.
    +
    +
    getRemoteHost() - Method in interface org.apache.guacamole.net.auth.ActivityRecord
    +
    +
    Returns the hostname or IP address of the remote host that performed the + activity associated with this record, if known.
    +
    +
    getRemoteHost() - Method in class org.apache.guacamole.net.auth.DelegatingActivityRecord
    +
     
    +
    getRemoteHostname() - Method in class org.apache.guacamole.net.auth.Credentials
    +
    +
    Returns the hostname of the client end of the connection which provided + these credentials, if known.
    +
    +
    getRequest() - Method in class org.apache.guacamole.net.auth.Credentials
    +
    +
    Returns the HttpServletRequest associated with this set of credentials.
    +
    +
    getRequiredProperty(GuacamoleProperty<Type>) - Method in class org.apache.guacamole.environment.DelegatingEnvironment
    +
     
    +
    getRequiredProperty(GuacamoleProperty<Type>) - Method in interface org.apache.guacamole.environment.Environment
    +
    +
    Given a GuacamoleProperty, parses and returns the value set for that + property in guacamole.properties.
    +
    +
    getRequiredProperty(GuacamoleProperty<Type>) - Method in class org.apache.guacamole.environment.LocalEnvironment
    +
     
    +
    getResource() - Method in class org.apache.guacamole.net.auth.AbstractAuthenticationProvider
    +
    +
    Returns an arbitrary REST resource representing this + AuthenticationProvider.
    +
    +
    getResource() - Method in class org.apache.guacamole.net.auth.AbstractUserContext
    +
    +
    Returns an arbitrary REST resource representing this UserContext.
    +
    +
    getResource() - Method in interface org.apache.guacamole.net.auth.AuthenticationProvider
    +
    +
    Returns an arbitrary REST resource representing this + AuthenticationProvider.
    +
    +
    getResource() - Method in class org.apache.guacamole.net.auth.DelegatingUserContext
    +
     
    +
    getResource() - Method in class org.apache.guacamole.net.auth.simple.SimpleUserContext
    +
     
    +
    getResource() - Method in interface org.apache.guacamole.net.auth.UserContext
    +
    +
    Returns an arbitrary REST resource representing this UserContext.
    +
    +
    getRootConnectionGroup() - Method in class org.apache.guacamole.net.auth.AbstractUserContext
    +
    +
    Retrieves a connection group which can be used to view and manipulate + connections, but only as allowed by the permissions given to the user of + this UserContext.
    +
    +
    getRootConnectionGroup() - Method in class org.apache.guacamole.net.auth.DelegatingUserContext
    +
     
    +
    getRootConnectionGroup() - Method in interface org.apache.guacamole.net.auth.UserContext
    +
    +
    Retrieves a connection group which can be used to view and manipulate + connections, but only as allowed by the permissions given to the user of + this UserContext.
    +
    +
    getSession() - Method in class org.apache.guacamole.net.auth.Credentials
    +
    +
    Returns the HttpSession associated with this set of credentials.
    +
    +
    getSharingCredentials(String) - Method in interface org.apache.guacamole.net.auth.Shareable
    +
    +
    Returns a full set of credentials which can be used to authenticate as a + user with access strictly to this object.
    +
    +
    getSharingProfileAttributes() - Method in class org.apache.guacamole.net.auth.AbstractUserContext
    +
    +
    Retrieves a collection of all attributes applicable to sharing profiles.
    +
    +
    getSharingProfileAttributes() - Method in class org.apache.guacamole.net.auth.DelegatingUserContext
    +
     
    +
    getSharingProfileAttributes() - Method in interface org.apache.guacamole.net.auth.UserContext
    +
    +
    Retrieves a collection of all attributes applicable to sharing profiles.
    +
    +
    getSharingProfileDirectory() - Method in class org.apache.guacamole.net.auth.AbstractUserContext
    +
    +
    Retrieves a Directory which can be used to view and manipulate + sharing profiles and their configurations, but only as allowed by the + permissions given to the user.
    +
    +
    getSharingProfileDirectory() - Method in class org.apache.guacamole.net.auth.DelegatingUserContext
    +
     
    +
    getSharingProfileDirectory() - Method in interface org.apache.guacamole.net.auth.UserContext
    +
    +
    Retrieves a Directory which can be used to view and manipulate + sharing profiles and their configurations, but only as allowed by the + permissions given to the user.
    +
    +
    getSharingProfileForms() - Method in class org.apache.guacamole.protocols.ProtocolInfo
    +
    +
    Returns a mutable collection of forms describing all known parameters + relevant to a sharing profile whose primary connection uses this + protocol.
    +
    +
    getSharingProfileIdentifier() - Method in class org.apache.guacamole.net.auth.AbstractActiveConnection
    +
     
    +
    getSharingProfileIdentifier() - Method in interface org.apache.guacamole.net.auth.ActiveConnection
    +
    +
    Returns the identifier of the sharing profile being actively used.
    +
    +
    getSharingProfileIdentifier() - Method in interface org.apache.guacamole.net.auth.ConnectionRecord
    +
    +
    Returns the identifier of the sharing profile that was used to access the + connection associated with this connection record.
    +
    +
    getSharingProfileIdentifier() - Method in class org.apache.guacamole.net.auth.DelegatingConnectionRecord
    +
     
    +
    getSharingProfileIdentifiers() - Method in class org.apache.guacamole.net.auth.AbstractConnection
    +
     
    +
    getSharingProfileIdentifiers() - Method in interface org.apache.guacamole.net.auth.Connection
    +
    +
    Returns identifiers of all readable sharing profiles that can be used to + join this connection when it is active.
    +
    +
    getSharingProfileIdentifiers() - Method in class org.apache.guacamole.net.auth.DelegatingConnection
    +
     
    +
    getSharingProfileName() - Method in interface org.apache.guacamole.net.auth.ConnectionRecord
    +
    +
    Returns the name of the sharing profile that was used to access the + connection associated with this connection record.
    +
    +
    getSharingProfileName() - Method in class org.apache.guacamole.net.auth.DelegatingConnectionRecord
    +
     
    +
    getSharingProfilePermissions() - Method in class org.apache.guacamole.net.auth.AbstractUser
    +
    +
    Returns all sharing profile permissions given to this object.
    +
    +
    getSharingProfilePermissions() - Method in class org.apache.guacamole.net.auth.AbstractUserGroup
    +
    +
    Returns all sharing profile permissions given to this object.
    +
    +
    getSharingProfilePermissions() - Method in class org.apache.guacamole.net.auth.DelegatingUser
    +
     
    +
    getSharingProfilePermissions() - Method in class org.apache.guacamole.net.auth.DelegatingUserGroup
    +
     
    +
    getSharingProfilePermissions() - Method in interface org.apache.guacamole.net.auth.Permissions
    +
    +
    Returns all sharing profile permissions given to this object.
    +
    +
    getSize() - Method in interface org.apache.guacamole.net.auth.ActivityLog
    +
    +
    Returns the number of bytes available for reading within the content of + this log.
    +
    +
    getSize() - Method in class org.apache.guacamole.net.auth.FileActivityLog
    +
     
    +
    getStartDate() - Method in class org.apache.guacamole.net.auth.AbstractActiveConnection
    +
     
    +
    getStartDate() - Method in interface org.apache.guacamole.net.auth.ActiveConnection
    +
    +
    Returns the date and time the connection began.
    +
    +
    getStartDate() - Method in interface org.apache.guacamole.net.auth.ActivityRecord
    +
    +
    Returns the date and time the activity began.
    +
    +
    getStartDate() - Method in class org.apache.guacamole.net.auth.DelegatingActivityRecord
    +
     
    +
    getSystemPermissions() - Method in class org.apache.guacamole.net.auth.AbstractUser
    +
    +
    Returns all system-level permissions given to this object.
    +
    +
    getSystemPermissions() - Method in class org.apache.guacamole.net.auth.AbstractUserGroup
    +
    +
    Returns all system-level permissions given to this object.
    +
    +
    getSystemPermissions() - Method in class org.apache.guacamole.net.auth.DelegatingUser
    +
     
    +
    getSystemPermissions() - Method in class org.apache.guacamole.net.auth.DelegatingUserGroup
    +
     
    +
    getSystemPermissions() - Method in interface org.apache.guacamole.net.auth.Permissions
    +
    +
    Returns all system-level permissions given to this object.
    +
    +
    getTitle() - Method in class org.apache.guacamole.form.FieldOption
    +
    +
    Returns the human-readable title describing the effect of this option.
    +
    +
    getToken(String) - Method in class org.apache.guacamole.token.TokenFilter
    +
    +
    Returns the value of the token with the given name, or null if no such + token has been set.
    +
    +
    getTokenName() - Method in exception org.apache.guacamole.token.GuacamoleTokenUndefinedException
    +
    +
    Returns the name of the token which has no defined value, causing this + exception to be thrown.
    +
    +
    getTokens() - Method in class org.apache.guacamole.net.auth.TokenInjectingConnection
    +
    +
    Returns the tokens which should be added to an in-progress call to + connect().
    +
    +
    getTokens() - Method in class org.apache.guacamole.net.auth.TokenInjectingConnectionGroup
    +
    +
    Returns the tokens which should be added to an in-progress call to + connect().
    +
    +
    getTokens() - Method in class org.apache.guacamole.token.TokenFilter
    +
    +
    Returns a map of all tokens, with each key being a token name, and each + value being the corresponding token value.
    +
    +
    getTokens(Connection) - Method in class org.apache.guacamole.net.auth.TokenInjectingUserContext
    +
    +
    Returns the tokens which should be added to an in-progress call to + connect() for the given Connection.
    +
    +
    getTokens(ConnectionGroup) - Method in class org.apache.guacamole.net.auth.TokenInjectingUserContext
    +
    +
    Returns the tokens which should be added to an in-progress call to + connect() for the given ConnectionGroup.
    +
    +
    getTranslatableMessage() - Method in class org.apache.guacamole.form.RedirectField
    +
     
    +
    getTranslatableMessage() - Method in interface org.apache.guacamole.language.Translatable
    +
    +
    Returns a message which can be translated using a translation service, + consisting of a translation key and optional set of substitution + variables.
    +
    +
    getTranslatableMessage() - Method in exception org.apache.guacamole.language.TranslatableGuacamoleClientBadTypeException
    +
     
    +
    getTranslatableMessage() - Method in exception org.apache.guacamole.language.TranslatableGuacamoleClientException
    +
     
    +
    getTranslatableMessage() - Method in exception org.apache.guacamole.language.TranslatableGuacamoleClientOverrunException
    +
     
    +
    getTranslatableMessage() - Method in exception org.apache.guacamole.language.TranslatableGuacamoleClientTimeoutException
    +
     
    +
    getTranslatableMessage() - Method in exception org.apache.guacamole.language.TranslatableGuacamoleClientTooManyException
    +
     
    +
    getTranslatableMessage() - Method in exception org.apache.guacamole.language.TranslatableGuacamoleConnectionClosedException
    +
     
    +
    getTranslatableMessage() - Method in exception org.apache.guacamole.language.TranslatableGuacamoleCredentialsException
    +
     
    +
    getTranslatableMessage() - Method in exception org.apache.guacamole.language.TranslatableGuacamoleInsufficientCredentialsException
    +
     
    +
    getTranslatableMessage() - Method in exception org.apache.guacamole.language.TranslatableGuacamoleInvalidCredentialsException
    +
     
    +
    getTranslatableMessage() - Method in exception org.apache.guacamole.language.TranslatableGuacamoleResourceClosedException
    +
     
    +
    getTranslatableMessage() - Method in exception org.apache.guacamole.language.TranslatableGuacamoleResourceConflictException
    +
     
    +
    getTranslatableMessage() - Method in exception org.apache.guacamole.language.TranslatableGuacamoleResourceNotFoundException
    +
     
    +
    getTranslatableMessage() - Method in exception org.apache.guacamole.language.TranslatableGuacamoleSecurityException
    +
     
    +
    getTranslatableMessage() - Method in exception org.apache.guacamole.language.TranslatableGuacamoleServerBusyException
    +
     
    +
    getTranslatableMessage() - Method in exception org.apache.guacamole.language.TranslatableGuacamoleServerException
    +
     
    +
    getTranslatableMessage() - Method in exception org.apache.guacamole.language.TranslatableGuacamoleSessionClosedException
    +
     
    +
    getTranslatableMessage() - Method in exception org.apache.guacamole.language.TranslatableGuacamoleSessionConflictException
    +
     
    +
    getTranslatableMessage() - Method in exception org.apache.guacamole.language.TranslatableGuacamoleSessionTimeoutException
    +
     
    +
    getTranslatableMessage() - Method in exception org.apache.guacamole.language.TranslatableGuacamoleUnauthorizedException
    +
     
    +
    getTranslatableMessage() - Method in exception org.apache.guacamole.language.TranslatableGuacamoleUnsupportedException
    +
     
    +
    getTranslatableMessage() - Method in exception org.apache.guacamole.language.TranslatableGuacamoleUpstreamException
    +
     
    +
    getTranslatableMessage() - Method in exception org.apache.guacamole.language.TranslatableGuacamoleUpstreamNotFoundException
    +
     
    +
    getTranslatableMessage() - Method in exception org.apache.guacamole.language.TranslatableGuacamoleUpstreamTimeoutException
    +
     
    +
    getTranslatableMessage() - Method in exception org.apache.guacamole.language.TranslatableGuacamoleUpstreamUnavailableException
    +
     
    +
    getTunnel() - Method in class org.apache.guacamole.net.auth.AbstractActiveConnection
    +
     
    +
    getTunnel() - Method in interface org.apache.guacamole.net.auth.ActiveConnection
    +
    +
    Returns the connected GuacamoleTunnel being used.
    +
    +
    getTunnel() - Method in class org.apache.guacamole.net.event.TunnelCloseEvent
    +
     
    +
    getTunnel() - Method in class org.apache.guacamole.net.event.TunnelConnectEvent
    +
     
    +
    getTunnel() - Method in interface org.apache.guacamole.net.event.TunnelEvent
    +
    +
    Returns the tunnel associated with this event, if any.
    +
    +
    getType() - Method in class org.apache.guacamole.form.Field
    +
    +
    Returns the type of this field.
    +
    +
    getType() - Method in class org.apache.guacamole.net.auth.AbstractActivityLog
    +
     
    +
    getType() - Method in class org.apache.guacamole.net.auth.AbstractConnectionGroup
    +
     
    +
    getType() - Method in interface org.apache.guacamole.net.auth.ActivityLog
    +
    +
    Returns the type of this activity log.
    +
    +
    getType() - Method in interface org.apache.guacamole.net.auth.ConnectionGroup
    +
    +
    Returns the type of this connection.
    +
    +
    getType() - Method in class org.apache.guacamole.net.auth.DelegatingConnectionGroup
    +
     
    +
    getType() - Method in class org.apache.guacamole.net.auth.permission.ObjectPermission
    +
     
    +
    getType() - Method in interface org.apache.guacamole.net.auth.permission.Permission
    +
    +
    Returns the type of operation affected by this permission.
    +
    +
    getType() - Method in class org.apache.guacamole.net.auth.permission.SystemPermission
    +
     
    +
    getUserAttributes() - Method in class org.apache.guacamole.net.auth.AbstractUserContext
    +
    +
    Retrieves a collection of all attributes applicable to users.
    +
    +
    getUserAttributes() - Method in class org.apache.guacamole.net.auth.DelegatingUserContext
    +
     
    +
    getUserAttributes() - Method in interface org.apache.guacamole.net.auth.UserContext
    +
    +
    Retrieves a collection of all attributes applicable to users.
    +
    +
    getUserContext(AuthenticatedUser) - Method in class org.apache.guacamole.net.auth.AbstractAuthenticationProvider
    +
    +
    Returns the UserContext of the user authenticated by the given + credentials.
    +
    +
    getUserContext(AuthenticatedUser) - Method in interface org.apache.guacamole.net.auth.AuthenticationProvider
    +
    +
    Returns the UserContext of the user authenticated by the given + credentials.
    +
    +
    getUserContext(AuthenticatedUser) - Method in class org.apache.guacamole.net.auth.simple.SimpleAuthenticationProvider
    +
     
    +
    getUserDirectory() - Method in class org.apache.guacamole.net.auth.AbstractUserContext
    +
    +
    Retrieves a Directory which can be used to view and manipulate other + users, but only as allowed by the permissions given to the user of this + UserContext.
    +
    +
    getUserDirectory() - Method in class org.apache.guacamole.net.auth.DelegatingUserContext
    +
     
    +
    getUserDirectory() - Method in interface org.apache.guacamole.net.auth.UserContext
    +
    +
    Retrieves a Directory which can be used to view and manipulate other + users, but only as allowed by the permissions given to the user of this + UserContext.
    +
    +
    getUserGroupAttributes() - Method in class org.apache.guacamole.net.auth.AbstractUserContext
    +
    +
    Retrieves a collection of all attributes applicable to user groups.
    +
    +
    getUserGroupAttributes() - Method in class org.apache.guacamole.net.auth.DelegatingUserContext
    +
     
    +
    getUserGroupAttributes() - Method in interface org.apache.guacamole.net.auth.UserContext
    +
    +
    Retrieves a collection of all attributes applicable to user groups.
    +
    +
    getUserGroupDirectory() - Method in class org.apache.guacamole.net.auth.AbstractUserContext
    +
    +
    Retrieves a Directory which can be used to view and manipulate user + groups, but only as allowed by the permissions given to the user of this + UserContext.
    +
    +
    getUserGroupDirectory() - Method in class org.apache.guacamole.net.auth.DelegatingUserContext
    +
     
    +
    getUserGroupDirectory() - Method in interface org.apache.guacamole.net.auth.UserContext
    +
    +
    Retrieves a Directory which can be used to view and manipulate user + groups, but only as allowed by the permissions given to the user of this + UserContext.
    +
    +
    getUserGroupPermissions() - Method in class org.apache.guacamole.net.auth.AbstractUser
    +
    +
    Returns all user group permissions given to this object.
    +
    +
    getUserGroupPermissions() - Method in class org.apache.guacamole.net.auth.AbstractUserGroup
    +
    +
    Returns all user group permissions given to this object.
    +
    +
    getUserGroupPermissions() - Method in class org.apache.guacamole.net.auth.DelegatingUser
    +
     
    +
    getUserGroupPermissions() - Method in class org.apache.guacamole.net.auth.DelegatingUserGroup
    +
     
    +
    getUserGroupPermissions() - Method in interface org.apache.guacamole.net.auth.Permissions
    +
    +
    Returns all user group permissions given to this object.
    +
    +
    getUserGroups() - Method in class org.apache.guacamole.net.auth.AbstractUser
    +
    +
    Returns a set of all readable user groups of which this user is a member.
    +
    +
    getUserGroups() - Method in class org.apache.guacamole.net.auth.AbstractUserGroup
    +
    +
    Returns a set of all readable user groups of which this user group is a + member.
    +
    +
    getUserGroups() - Method in class org.apache.guacamole.net.auth.DelegatingUser
    +
     
    +
    getUserGroups() - Method in class org.apache.guacamole.net.auth.DelegatingUserGroup
    +
     
    +
    getUserGroups() - Method in interface org.apache.guacamole.net.auth.User
    +
    +
    Returns a set of all readable user groups of which this user is a member.
    +
    +
    getUserGroups() - Method in interface org.apache.guacamole.net.auth.UserGroup
    +
    +
    Returns a set of all readable user groups of which this user group is a + member.
    +
    +
    getUserHistory() - Method in class org.apache.guacamole.net.auth.AbstractUserContext
    +
    +
    Retrieves all user history records visible to current user.
    +
    +
    getUserHistory() - Method in class org.apache.guacamole.net.auth.DelegatingUser
    +
     
    +
    getUserHistory() - Method in class org.apache.guacamole.net.auth.DelegatingUserContext
    +
     
    +
    getUserHistory() - Method in interface org.apache.guacamole.net.auth.User
    +
    +
    Returns an ActivityRecordSet containing ActivityRecords representing + the login history for this user, including any active sessions.
    +
    +
    getUserHistory() - Method in interface org.apache.guacamole.net.auth.UserContext
    +
    +
    Retrieves all user history records visible to current user.
    +
    +
    getUsername() - Method in class org.apache.guacamole.net.auth.AbstractActiveConnection
    +
     
    +
    getUsername() - Method in interface org.apache.guacamole.net.auth.ActiveConnection
    +
    +
    Returns the name of the user who is using this connection.
    +
    +
    getUsername() - Method in interface org.apache.guacamole.net.auth.ActivityRecord
    +
    +
    Returns the name of the user who performed or is performing the activity + at the times given by this record.
    +
    +
    getUsername() - Method in class org.apache.guacamole.net.auth.Credentials
    +
    +
    Returns the username associated with this set of credentials.
    +
    +
    getUsername() - Method in class org.apache.guacamole.net.auth.DelegatingActivityRecord
    +
     
    +
    getUserPermissions() - Method in class org.apache.guacamole.net.auth.AbstractUser
    +
    +
    Returns all user permissions given to this object.
    +
    +
    getUserPermissions() - Method in class org.apache.guacamole.net.auth.AbstractUserGroup
    +
    +
    Returns all user permissions given to this object.
    +
    +
    getUserPermissions() - Method in class org.apache.guacamole.net.auth.DelegatingUser
    +
     
    +
    getUserPermissions() - Method in class org.apache.guacamole.net.auth.DelegatingUserGroup
    +
     
    +
    getUserPermissions() - Method in interface org.apache.guacamole.net.auth.Permissions
    +
    +
    Returns all user permissions given to this object.
    +
    +
    getUserPermissions() - Method in class org.apache.guacamole.net.auth.simple.SimpleUser
    +
     
    +
    getUUID() - Method in interface org.apache.guacamole.net.auth.ActivityRecord
    +
    +
    Returns a UUID that uniquely identifies this record.
    +
    +
    getUUID() - Method in interface org.apache.guacamole.net.auth.ConnectionRecord
    +
    +
    Returns a UUID that uniquely identifies this record.
    +
    +
    getUUID() - Method in class org.apache.guacamole.net.auth.DelegatingActivityRecord
    +
     
    +
    getValue() - Method in class org.apache.guacamole.form.FieldOption
    +
    +
    Returns the value that will be assigned if this option is chosen.
    +
    +
    getValue(String) - Method in class org.apache.guacamole.net.auth.credentials.UserCredentials
    +
    +
    Returns the value defined by this UserCrendentials object for the field + having the given name.
    +
    +
    getValue(Field) - Method in class org.apache.guacamole.net.auth.credentials.UserCredentials
    +
    +
    Returns the value defined by this UserCrendentials object for the given + field.
    +
    +
    getValues() - Method in class org.apache.guacamole.net.auth.credentials.UserCredentials
    +
    +
    Returns a map of field names to values which backs this UserCredentials + object.
    +
    +
    getVariables() - Method in class org.apache.guacamole.language.TranslatableMessage
    +
    +
    Returns an arbitrary object whose properties should be substituted for + the corresponding placeholders within the string associated with the key.
    +
    +
    GMT_REGEX - Static variable in class org.apache.guacamole.properties.TimeZoneGuacamoleProperty
    +
    +
    A regex that matches valid variants of GMT timezones.
    +
    +
    GUACAMOLE_SESSION_RECORDING - org.apache.guacamole.net.auth.ActivityLog.Type
    +
    +
    A Guacamole session recording in the form of a Guacamole protocol + dump.
    +
    +
    GuacamoleCredentialsException - Exception in org.apache.guacamole.net.auth.credentials
    +
    +
    A security-related exception thrown when access is denied to a user because + of a problem related to the provided credentials.
    +
    +
    GuacamoleCredentialsException(String, Throwable, CredentialsInfo) - Constructor for exception org.apache.guacamole.net.auth.credentials.GuacamoleCredentialsException
    +
    +
    Creates a new GuacamoleInvalidCredentialsException with the given + message, cause, and associated credential information.
    +
    +
    GuacamoleCredentialsException(String, CredentialsInfo) - Constructor for exception org.apache.guacamole.net.auth.credentials.GuacamoleCredentialsException
    +
    +
    Creates a new GuacamoleInvalidCredentialsException with the given + message and associated credential information.
    +
    +
    GuacamoleCredentialsException(Throwable, CredentialsInfo) - Constructor for exception org.apache.guacamole.net.auth.credentials.GuacamoleCredentialsException
    +
    +
    Creates a new GuacamoleInvalidCredentialsException with the given cause + and associated credential information.
    +
    +
    GuacamoleInsufficientCredentialsException - Exception in org.apache.guacamole.net.auth.credentials
    +
    +
    A security-related exception thrown when access is denied to a user because + the provided credentials are not sufficient for authentication to succeed.
    +
    +
    GuacamoleInsufficientCredentialsException(String, Throwable, CredentialsInfo) - Constructor for exception org.apache.guacamole.net.auth.credentials.GuacamoleInsufficientCredentialsException
    +
    +
    Creates a new GuacamoleInsufficientCredentialsException with the given + message, cause, and associated credential information.
    +
    +
    GuacamoleInsufficientCredentialsException(String, CredentialsInfo) - Constructor for exception org.apache.guacamole.net.auth.credentials.GuacamoleInsufficientCredentialsException
    +
    +
    Creates a new GuacamoleInsufficientCredentialsException with the given + message and associated credential information.
    +
    +
    GuacamoleInsufficientCredentialsException(Throwable, CredentialsInfo) - Constructor for exception org.apache.guacamole.net.auth.credentials.GuacamoleInsufficientCredentialsException
    +
    +
    Creates a new GuacamoleInsufficientCredentialsException with the given + cause and associated credential information.
    +
    +
    GuacamoleInvalidCredentialsException - Exception in org.apache.guacamole.net.auth.credentials
    +
    +
    A security-related exception thrown when access is denied to a user because + the provided credentials are invalid.
    +
    +
    GuacamoleInvalidCredentialsException(String, Throwable, CredentialsInfo) - Constructor for exception org.apache.guacamole.net.auth.credentials.GuacamoleInvalidCredentialsException
    +
    +
    Creates a new GuacamoleInvalidCredentialsException with the given + message, cause, and associated credential information.
    +
    +
    GuacamoleInvalidCredentialsException(String, CredentialsInfo) - Constructor for exception org.apache.guacamole.net.auth.credentials.GuacamoleInvalidCredentialsException
    +
    +
    Creates a new GuacamoleInvalidCredentialsException with the given + message and associated credential information.
    +
    +
    GuacamoleInvalidCredentialsException(Throwable, CredentialsInfo) - Constructor for exception org.apache.guacamole.net.auth.credentials.GuacamoleInvalidCredentialsException
    +
    +
    Creates a new GuacamoleInvalidCredentialsException with the given cause + and associated credential information.
    +
    +
    GuacamoleProperties - Interface in org.apache.guacamole.properties
    +
    +
    An arbitrary set of Guacamole configuration property name/value pairs.
    +
    +
    GuacamoleProperty<Type> - Interface in org.apache.guacamole.properties
    +
    +
    An abstract representation of a property in the guacamole.properties file, + which parses into a specific type.
    +
    +
    GuacamoleProxyConfiguration - Class in org.apache.guacamole.net.auth
    +
    +
    Information which describes how the connection to guacd should be + established.
    +
    +
    GuacamoleProxyConfiguration(String, int, boolean) - Constructor for class org.apache.guacamole.net.auth.GuacamoleProxyConfiguration
    +
    +
    Creates a new GuacamoleProxyConfiguration having the given hostname and + port, with encryption method being restricted to either NONE or SSL.
    +
    +
    GuacamoleProxyConfiguration(String, int, GuacamoleProxyConfiguration.EncryptionMethod) - Constructor for class org.apache.guacamole.net.auth.GuacamoleProxyConfiguration
    +
    +
    Creates a new GuacamoleProxyConfiguration having the given hostname, + port, and encryption method.
    +
    +
    GuacamoleProxyConfiguration.EncryptionMethod - Enum in org.apache.guacamole.net.auth
    +
    +
    All possible types of encryption used by guacd.
    +
    +
    GuacamoleTokenUndefinedException - Exception in org.apache.guacamole.token
    +
    +
    An exception thrown when a token cannot be substituted because it has no + corresponding value.
    +
    +
    GuacamoleTokenUndefinedException(String, String) - Constructor for exception org.apache.guacamole.token.GuacamoleTokenUndefinedException
    +
    +
    Creates a new GuacamoleTokenUndefinedException with the given + message and associated undefined token name.
    +
    +
    GuacamoleTokenUndefinedException(String, Throwable, String) - Constructor for exception org.apache.guacamole.token.GuacamoleTokenUndefinedException
    +
    +
    Creates a new GuacamoleTokenUndefinedException with the given message, + cause, and associated undefined token name.
    +
    +
    GuacamoleTokenUndefinedException(Throwable, String) - Constructor for exception org.apache.guacamole.token.GuacamoleTokenUndefinedException
    +
    +
    Creates a new GuacamoleTokenUndefinedException with the given cause + and associated undefined token name.
    +
    +
    GUACD_HOSTNAME - Static variable in interface org.apache.guacamole.environment.Environment
    +
    +
    The hostname of the server where guacd (the Guacamole proxy server) is + running.
    +
    +
    GUACD_PORT - Static variable in interface org.apache.guacamole.environment.Environment
    +
    +
    The port that guacd (the Guacamole proxy server) is listening on.
    +
    +
    GUACD_SSL - Static variable in interface org.apache.guacamole.environment.Environment
    +
    +
    Whether guacd requires SSL/TLS on connections.
    +
    +
    + + + +

    H

    +
    +
    handleEvent(Object) - Method in interface org.apache.guacamole.net.event.listener.Listener
    +
    +
    Notifies the recipient that an event has occurred.
    +
    +
    hashCode() - Method in class org.apache.guacamole.net.auth.AbstractIdentifiable
    +
     
    +
    hashCode() - Method in class org.apache.guacamole.net.auth.AbstractSharingProfile
    +
     
    +
    hashCode() - Method in class org.apache.guacamole.net.auth.permission.ObjectPermission
    +
     
    +
    hashCode() - Method in class org.apache.guacamole.net.auth.permission.SystemPermission
    +
     
    +
    hasPermission(ObjectPermission.Type, String) - Method in interface org.apache.guacamole.net.auth.permission.ObjectPermissionSet
    +
    +
    Tests whether the permission of the given type is granted for the + object having the given identifier.
    +
    +
    hasPermission(ObjectPermission.Type, String) - Method in class org.apache.guacamole.net.auth.simple.SimpleObjectPermissionSet
    +
     
    +
    hasPermission(SystemPermission.Type) - Method in interface org.apache.guacamole.net.auth.permission.SystemPermissionSet
    +
    +
    Tests whether the permission of the given type is granted.
    +
    +
    hasPermission(SystemPermission.Type) - Method in class org.apache.guacamole.net.auth.simple.SimpleSystemPermissionSet
    +
     
    +
    + + + +

    I

    +
    +
    Identifiable - Interface in org.apache.guacamole.net.auth
    +
    +
    An object which has a deterministic, unique identifier, which may not be + null.
    +
    +
    init(Attributes) - Method in interface org.apache.guacamole.xml.TagHandler
    +
    +
    Called when the element corresponding to this TagHandler is first seen, + just after an instance is created.
    +
    +
    IntegerGuacamoleProperty - Class in org.apache.guacamole.properties
    +
    +
    A GuacamoleProperty whose value is an integer.
    +
    +
    IntegerGuacamoleProperty() - Constructor for class org.apache.guacamole.properties.IntegerGuacamoleProperty
    +
     
    +
    invalidate() - Method in class org.apache.guacamole.net.auth.AbstractAuthenticatedUser
    +
     
    +
    invalidate() - Method in class org.apache.guacamole.net.auth.AbstractUserContext
    +
    +
    Invalidates this user context, releasing all associated resources.
    +
    +
    invalidate() - Method in interface org.apache.guacamole.net.auth.AuthenticatedUser
    +
    +
    Invalidates this authenticated user and their associated token such that + they are no longer logged in.
    +
    +
    invalidate() - Method in class org.apache.guacamole.net.auth.DelegatingUserContext
    +
     
    +
    invalidate() - Method in interface org.apache.guacamole.net.auth.UserContext
    +
    +
    Invalidates this user context, releasing all associated resources.
    +
    +
    isActive() - Method in interface org.apache.guacamole.net.auth.ActivityRecord
    +
    +
    Returns whether the activity associated with this record is still + ongoing.
    +
    +
    isActive() - Method in class org.apache.guacamole.net.auth.DelegatingActivityRecord
    +
     
    +
    isConnectable() - Method in interface org.apache.guacamole.net.auth.ActiveConnection
    +
    +
    Returns whether this ActiveConnection may be joined through a call to + ActiveConnection.connect(org.apache.guacamole.protocol.GuacamoleClientInformation, java.util.Map) + by the user that retrieved this ActiveConnection.
    +
    +
    + + + +

    L

    +
    +
    LANGUAGE - Static variable in class org.apache.guacamole.form.Field.Type
    +
    +
    Field type which allows selection of languages.
    +
    +
    LanguageField - Class in org.apache.guacamole.form
    +
    +
    Represents a language field.
    +
    +
    LanguageField(String) - Constructor for class org.apache.guacamole.form.LanguageField
    +
    +
    Creates a new LanguageField with the given name.
    +
    +
    limit(int) - Method in interface org.apache.guacamole.net.auth.ActivityRecordSet
    +
    +
    Returns the subset of records containing only the first + limit records.
    +
    +
    limit(int) - Method in class org.apache.guacamole.net.auth.DecoratingActivityRecordSet
    +
     
    +
    limit(int) - Method in class org.apache.guacamole.net.auth.DelegatingActivityRecordSet
    +
     
    +
    limit(int) - Method in class org.apache.guacamole.net.auth.simple.SimpleActivityRecordSet
    +
     
    +
    limit(int) - Method in class org.apache.guacamole.net.auth.simple.SimpleConnectionRecordSet
    +
    +
    Deprecated.
    +
    Listener - Interface in org.apache.guacamole.net.event.listener
    +
    +
    A listener for events that occur in handing various Guacamole requests + such as authentication, tunnel connect/close, etc.
    +
    +
    LocalEnvironment - Class in org.apache.guacamole.environment
    +
    +
    The environment of the locally-running Guacamole instance, describing + available protocols, configuration parameters, and the GUACAMOLE_HOME + directory.
    +
    +
    LocalEnvironment() - Constructor for class org.apache.guacamole.environment.LocalEnvironment
    +
    +
    Deprecated. +
    Extensions leveraging LocalEnvironment should instead use + LocalEnvironment.getInstance() to obtain a singleton instance of the + environment.
    +
    +
    +
    LongGuacamoleProperty - Class in org.apache.guacamole.properties
    +
    +
    A GuacamoleProperty whose value is an long.
    +
    +
    LongGuacamoleProperty() - Constructor for class org.apache.guacamole.properties.LongGuacamoleProperty
    +
     
    +
    + + + +

    M

    +
    +
    MULTILINE - Static variable in class org.apache.guacamole.form.Field.Type
    +
    +
    A text field that can span more than one line.
    +
    +
    MultilineField - Class in org.apache.guacamole.form
    +
    +
    Represents a field which can contain multiple lines of text.
    +
    +
    MultilineField(String) - Constructor for class org.apache.guacamole.form.MultilineField
    +
    +
    Creates a new MultilineField with the given name.
    +
    +
    + + + +

    N

    +
    +
    NONE - org.apache.guacamole.net.auth.GuacamoleProxyConfiguration.EncryptionMethod
    +
    +
    Unencrypted (plaintext).
    +
    +
    NUMERIC - Static variable in class org.apache.guacamole.form.Field.Type
    +
    +
    A numeric field, whose value must contain only digits.
    +
    +
    NumericField - Class in org.apache.guacamole.form
    +
    +
    Represents a field which may contain only integer values.
    +
    +
    NumericField(String) - Constructor for class org.apache.guacamole.form.NumericField
    +
    +
    Creates a new NumericField with the given name.
    +
    +
    + + + +

    O

    +
    +
    ObjectPermission - Class in org.apache.guacamole.net.auth.permission
    +
    +
    A permission which affects a specific object, rather than the system as a + whole.
    +
    +
    ObjectPermission(ObjectPermission.Type, String) - Constructor for class org.apache.guacamole.net.auth.permission.ObjectPermission
    +
    +
    Creates a new ObjectPermission having the given type and identifier.
    +
    +
    ObjectPermission.Type - Enum in org.apache.guacamole.net.auth.permission
    +
    +
    Specific types of object-level permissions.
    +
    +
    ObjectPermissionSet - Interface in org.apache.guacamole.net.auth.permission
    +
    +
    A set of permissions which affect arbitrary objects, where each object has + an associated unique identifier.
    +
    +
    org.apache.guacamole.environment - package org.apache.guacamole.environment
    +
     
    +
    org.apache.guacamole.form - package org.apache.guacamole.form
    +
    +
    Provides classes which describe the contents and semantics of forms which + may be presented to the user.
    +
    +
    org.apache.guacamole.language - package org.apache.guacamole.language
    +
     
    +
    org.apache.guacamole.net.auth - package org.apache.guacamole.net.auth
    +
    +
    Provides classes which can be used to extend or replace the authentication + functionality of the Guacamole web application.
    +
    +
    org.apache.guacamole.net.auth.credentials - package org.apache.guacamole.net.auth.credentials
    +
     
    +
    org.apache.guacamole.net.auth.permission - package org.apache.guacamole.net.auth.permission
    +
    +
    Provides classes which describe the various permissions a Guacamole user + can be granted.
    +
    +
    org.apache.guacamole.net.auth.simple - package org.apache.guacamole.net.auth.simple
    +
    +
    Provides a basic AuthenticationProvider base class that can be used to create + simple AuthenticationProviders in the same way allowed by the old + authentication API.
    +
    +
    org.apache.guacamole.net.event - package org.apache.guacamole.net.event
    +
    +
    Provides classes for storing information about events that are + triggered when users log into and use the Guacamole web application.
    +
    +
    org.apache.guacamole.net.event.listener - package org.apache.guacamole.net.event.listener
    +
    +
    Provides classes for hooking into various events that take place as + users log into and use the Guacamole web application.
    +
    +
    org.apache.guacamole.properties - package org.apache.guacamole.properties
    +
    +
    Provides classes for reading properties from the web-application-wide + guacamole.properties file.
    +
    +
    org.apache.guacamole.protocols - package org.apache.guacamole.protocols
    +
     
    +
    org.apache.guacamole.token - package org.apache.guacamole.token
    +
     
    +
    org.apache.guacamole.xml - package org.apache.guacamole.xml
    +
    +
    Classes driving the SAX-based XML parser used by the Guacamole web + application.
    +
    +
    ORGANIZATION - Static variable in class org.apache.guacamole.net.auth.User.Attribute
    +
    +
    The organization, company, group, etc.
    +
    +
    ORGANIZATIONAL - org.apache.guacamole.net.auth.ConnectionGroup.Type
    +
    +
    A connection group that purely organizes other connections or + connection groups, serving only as a container.
    +
    +
    ORGANIZATIONAL_ROLE - Static variable in class org.apache.guacamole.net.auth.User.Attribute
    +
    +
    The role that the user has at the organization, company, group, etc.
    +
    +
    + + + +

    P

    +
    +
    parse(String) - Static method in class org.apache.guacamole.form.DateField
    +
    +
    Parses the given string into a corresponding date.
    +
    +
    parse(String) - Static method in class org.apache.guacamole.form.LanguageField
    +
    +
    Parses the given string into a language ID string.
    +
    +
    parse(String) - Static method in class org.apache.guacamole.form.NumericField
    +
    +
    Parses the given string as an integer, where the given string is in the + format required by a numeric field.
    +
    +
    parse(String) - Static method in class org.apache.guacamole.form.TextField
    +
    +
    Parses the given string, interpreting empty strings as equivalent to + null.
    +
    +
    parse(String) - Static method in class org.apache.guacamole.form.TimeField
    +
    +
    Parses the given string into a corresponding time.
    +
    +
    parse(String) - Static method in class org.apache.guacamole.form.TimeZoneField
    +
    +
    Parses the given string into a time zone ID string.
    +
    +
    parseValue(String) - Method in class org.apache.guacamole.properties.BooleanGuacamoleProperty
    +
     
    +
    parseValue(String) - Method in class org.apache.guacamole.properties.ByteArrayProperty
    +
     
    +
    parseValue(String) - Method in class org.apache.guacamole.properties.EnumGuacamoleProperty
    +
     
    +
    parseValue(String) - Method in class org.apache.guacamole.properties.FileGuacamoleProperty
    +
     
    +
    parseValue(String) - Method in interface org.apache.guacamole.properties.GuacamoleProperty
    +
    +
    Parses the given string value into the type associated with this + GuacamoleProperty.
    +
    +
    parseValue(String) - Method in class org.apache.guacamole.properties.IntegerGuacamoleProperty
    +
     
    +
    parseValue(String) - Method in class org.apache.guacamole.properties.LongGuacamoleProperty
    +
     
    +
    parseValue(String) - Method in class org.apache.guacamole.properties.StringGuacamoleProperty
    +
     
    +
    parseValue(String) - Method in class org.apache.guacamole.properties.StringListProperty
    +
     
    +
    parseValue(String) - Method in class org.apache.guacamole.properties.TimeZoneGuacamoleProperty
    +
     
    +
    parseValue(String) - Method in class org.apache.guacamole.properties.URIGuacamoleProperty
    +
     
    +
    PASSWORD - Static variable in class org.apache.guacamole.form.Field.Type
    +
    +
    A password field, whose value is sensitive and must be hidden.
    +
    +
    PASSWORD - Static variable in class org.apache.guacamole.net.auth.credentials.CredentialsInfo
    +
    +
    A field describing the password HTTP parameter expected by Guacamole + during login, if passwords are being used.
    +
    +
    PASSWORD_TOKEN - Static variable in class org.apache.guacamole.token.StandardTokens
    +
    +
    Deprecated.
    +
    The name of the password token added via addStandardTokens().
    +
    +
    PasswordField - Class in org.apache.guacamole.form
    +
    +
    Represents a field which contains sensitive text information related to + authenticating a user.
    +
    +
    PasswordField(String) - Constructor for class org.apache.guacamole.form.PasswordField
    +
    +
    Creates a new PasswordField with the given name.
    +
    +
    Permission<Type extends Enum> - Interface in org.apache.guacamole.net.auth.permission
    +
    +
    A permission which affects a specific type of operation, where all available + operation types are defined by an enumeration.
    +
    +
    Permissions - Interface in org.apache.guacamole.net.auth
    +
    +
    An object which may be granted permissions to access/manipulate various + other objects or aspects of the system.
    +
    +
    PermissionSet<PermissionType extends Permission> - Interface in org.apache.guacamole.net.auth.permission
    +
    +
    An arbitrary set of permissions.
    +
    +
    PropertiesGuacamoleProperties - Class in org.apache.guacamole.properties
    +
    +
    GuacamoleProperties implementation which reads all properties from a + Properties object.
    +
    +
    PropertiesGuacamoleProperties(Properties) - Constructor for class org.apache.guacamole.properties.PropertiesGuacamoleProperties
    +
    +
    Creates a new PropertiesGuacamoleProperties which wraps the given + Properties, providing access to the values of any properties + defined therein.
    +
    +
    ProtocolInfo - Class in org.apache.guacamole.protocols
    +
    +
    Describes a protocol and all parameters associated with it, as required by + a protocol plugin for guacd.
    +
    +
    ProtocolInfo() - Constructor for class org.apache.guacamole.protocols.ProtocolInfo
    +
    +
    Creates a new ProtocolInfo with no associated name or forms.
    +
    +
    ProtocolInfo(String) - Constructor for class org.apache.guacamole.protocols.ProtocolInfo
    +
    +
    Creates a new ProtocolInfo having the given name, but without any forms.
    +
    +
    ProtocolInfo(String, Collection<Form>) - Constructor for class org.apache.guacamole.protocols.ProtocolInfo
    +
    +
    Creates a new ProtocolInfo having the given name and forms.
    +
    +
    ProtocolInfo(String, Collection<Form>, Collection<Form>) - Constructor for class org.apache.guacamole.protocols.ProtocolInfo
    +
    +
    Creates a new ProtocolInfo having the given name and forms.
    +
    +
    putConnection(Connection) - Method in class org.apache.guacamole.net.auth.simple.SimpleConnectionDirectory
    +
    +
    Deprecated.
    +
    An internal method for modifying the Connections in this Directory.
    +
    +
    putConnectionGroup(ConnectionGroup) - Method in class org.apache.guacamole.net.auth.simple.SimpleConnectionGroupDirectory
    +
    +
    Deprecated.
    +
    An internal method for modifying the ConnectionGroups in this Directory.
    +
    +
    + + + +

    Q

    +
    +
    QUERY_PARAMETER - Static variable in class org.apache.guacamole.form.Field.Type
    +
    +
    An HTTP query parameter which is expected to be embedded in the URL + given to a user.
    +
    +
    + + + +

    R

    +
    +
    READ - org.apache.guacamole.net.auth.permission.ObjectPermission.Type
    +
    +
    Read data within an object.
    +
    +
    ReadableAttributes - Interface in org.apache.guacamole.net.auth
    +
    +
    An object which is associated with a set of arbitrary attributes, defined + as name/value pairs.
    +
    +
    redecorate(UserContext, UserContext, AuthenticatedUser, Credentials) - Method in class org.apache.guacamole.net.auth.AbstractAuthenticationProvider
    +
    +
    Given a UserContext returned by updateUserContext() of a different + AuthenticationProvider, returns a UserContext instance which decorates + (wraps) that UserContext, delegating and overriding implemented + functions as necessary.
    +
    +
    redecorate(UserContext, UserContext, AuthenticatedUser, Credentials) - Method in interface org.apache.guacamole.net.auth.AuthenticationProvider
    +
    +
    Given a UserContext returned by updateUserContext() of a different + AuthenticationProvider, returns a UserContext instance which decorates + (wraps) that UserContext, delegating and overriding implemented + functions as necessary.
    +
    +
    REDIRECT - Static variable in class org.apache.guacamole.form.Field.Type
    +
    +
    A redirect field whose value is an encoded URL to which the user + will be redirected.
    +
    +
    RedirectField - Class in org.apache.guacamole.form
    +
    +
    A Guacamole field that redirects a user to another page.
    +
    +
    RedirectField(String, URI, TranslatableMessage) - Constructor for class org.apache.guacamole.form.RedirectField
    +
    +
    Creates a new field which facilitates redirection of the user + to another page.
    +
    +
    RelatedObjectSet - Interface in org.apache.guacamole.net.auth
    +
    +
    An arbitrary set of existing objects sharing some common relation.
    +
    +
    remove(String) - Method in class org.apache.guacamole.net.auth.DelegatingDirectory
    +
     
    +
    remove(String) - Method in interface org.apache.guacamole.net.auth.Directory
    +
    +
    Removes the object with the given identifier from the overall set.
    +
    +
    remove(String) - Method in class org.apache.guacamole.net.auth.simple.SimpleDirectory
    +
     
    +
    removeConnection(String) - Method in class org.apache.guacamole.net.auth.simple.SimpleConnectionDirectory
    +
    +
    Deprecated.
    +
    An internal method for removing a Connection from this Directory.
    +
    +
    removeConnectionGroup(String) - Method in class org.apache.guacamole.net.auth.simple.SimpleConnectionGroupDirectory
    +
    +
    Deprecated.
    +
    An internal method for removing a ConnectionGroup from this Directory.
    +
    +
    removeObjects(Set<String>) - Method in interface org.apache.guacamole.net.auth.RelatedObjectSet
    +
    +
    Removes each of the objects having the specified identifiers, if + present.
    +
    +
    removeObjects(Set<String>) - Method in class org.apache.guacamole.net.auth.simple.SimpleRelatedObjectSet
    +
     
    +
    removePermission(ObjectPermission.Type, String) - Method in interface org.apache.guacamole.net.auth.permission.ObjectPermissionSet
    +
    +
    Removes the specified permission for the object having the given + identifier.
    +
    +
    removePermission(ObjectPermission.Type, String) - Method in class org.apache.guacamole.net.auth.simple.SimpleObjectPermissionSet
    +
     
    +
    removePermission(SystemPermission.Type) - Method in interface org.apache.guacamole.net.auth.permission.SystemPermissionSet
    +
    +
    Removes the specified permission.
    +
    +
    removePermission(SystemPermission.Type) - Method in class org.apache.guacamole.net.auth.simple.SimpleSystemPermissionSet
    +
     
    +
    removePermissions(Set<ObjectPermission>) - Method in interface org.apache.guacamole.net.auth.permission.ObjectPermissionSet
    +
     
    +
    removePermissions(Set<ObjectPermission>) - Method in class org.apache.guacamole.net.auth.simple.SimpleObjectPermissionSet
    +
     
    +
    removePermissions(Set<SystemPermission>) - Method in interface org.apache.guacamole.net.auth.permission.SystemPermissionSet
    +
     
    +
    removePermissions(Set<SystemPermission>) - Method in class org.apache.guacamole.net.auth.simple.SimpleSystemPermissionSet
    +
     
    +
    removePermissions(Set<PermissionType>) - Method in interface org.apache.guacamole.net.auth.permission.PermissionSet
    +
    +
    Removes each of the specified permissions, if granted.
    +
    +
    removeValue(String) - Method in class org.apache.guacamole.net.auth.credentials.UserCredentials
    +
    +
    Removes (undefines) the value of the field having the given name, + returning its previous value.
    +
    +
    removeValue(Field) - Method in class org.apache.guacamole.net.auth.credentials.UserCredentials
    +
    +
    Removes (undefines) the value of the given field returning its previous + value.
    +
    +
    + + + +

    S

    +
    +
    self() - Method in class org.apache.guacamole.net.auth.DelegatingUserContext
    +
     
    +
    self() - Method in class org.apache.guacamole.net.auth.simple.SimpleUserContext
    +
     
    +
    self() - Method in interface org.apache.guacamole.net.auth.UserContext
    +
    +
    Returns the User whose access rights control the operations of this + UserContext.
    +
    +
    SERVER_LOG - org.apache.guacamole.net.auth.ActivityLog.Type
    +
    +
    A text log from a server-side process, such as the Guacamole web + application or guacd.
    +
    +
    setAttributes(Map<String, String>) - Method in class org.apache.guacamole.net.auth.AbstractUser
    +
    +
    Sets the given attributes.
    +
    +
    setAttributes(Map<String, String>) - Method in class org.apache.guacamole.net.auth.AbstractUserGroup
    +
    +
    Sets the given attributes.
    +
    +
    setAttributes(Map<String, String>) - Method in interface org.apache.guacamole.net.auth.Attributes
    +
    +
    Sets the given attributes.
    +
    +
    setAttributes(Map<String, String>) - Method in class org.apache.guacamole.net.auth.DelegatingConnection
    +
     
    +
    setAttributes(Map<String, String>) - Method in class org.apache.guacamole.net.auth.DelegatingConnectionGroup
    +
     
    +
    setAttributes(Map<String, String>) - Method in class org.apache.guacamole.net.auth.DelegatingSharingProfile
    +
     
    +
    setAttributes(Map<String, String>) - Method in class org.apache.guacamole.net.auth.DelegatingUser
    +
     
    +
    setAttributes(Map<String, String>) - Method in class org.apache.guacamole.net.auth.DelegatingUserGroup
    +
     
    +
    setAttributes(Map<String, String>) - Method in class org.apache.guacamole.net.auth.simple.SimpleConnection
    +
     
    +
    setAttributes(Map<String, String>) - Method in class org.apache.guacamole.net.auth.simple.SimpleConnectionGroup
    +
     
    +
    setConfiguration(GuacamoleConfiguration) - Method in class org.apache.guacamole.net.auth.AbstractConnection
    +
     
    +
    setConfiguration(GuacamoleConfiguration) - Method in interface org.apache.guacamole.net.auth.Connection
    +
    +
    Sets the GuacamoleConfiguration associated with this Connection.
    +
    +
    setConfiguration(GuacamoleConfiguration) - Method in class org.apache.guacamole.net.auth.DelegatingConnection
    +
     
    +
    setConfiguration(GuacamoleConfiguration) - Method in class org.apache.guacamole.net.auth.simple.SimpleConnection
    +
     
    +
    setConnectionForms(Collection<Form>) - Method in class org.apache.guacamole.protocols.ProtocolInfo
    +
    +
    Sets the collection of forms describing all known parameters for a + connection using this protocol.
    +
    +
    setConnectionIdentifier(String) - Method in class org.apache.guacamole.net.auth.AbstractActiveConnection
    +
     
    +
    setConnectionIdentifier(String) - Method in interface org.apache.guacamole.net.auth.ActiveConnection
    +
    +
    Sets the identifier of the connection being actively used.
    +
    +
    setFields(Collection<Field>) - Method in class org.apache.guacamole.form.Form
    +
    +
    Sets the collection of fields associated with this form.
    +
    +
    setIdentifier(String) - Method in class org.apache.guacamole.net.auth.AbstractIdentifiable
    +
     
    +
    setIdentifier(String) - Method in class org.apache.guacamole.net.auth.AbstractSharingProfile
    +
     
    +
    setIdentifier(String) - Method in class org.apache.guacamole.net.auth.DelegatingConnection
    +
     
    +
    setIdentifier(String) - Method in class org.apache.guacamole.net.auth.DelegatingConnectionGroup
    +
     
    +
    setIdentifier(String) - Method in class org.apache.guacamole.net.auth.DelegatingSharingProfile
    +
     
    +
    setIdentifier(String) - Method in class org.apache.guacamole.net.auth.DelegatingUser
    +
     
    +
    setIdentifier(String) - Method in class org.apache.guacamole.net.auth.DelegatingUserGroup
    +
     
    +
    setIdentifier(String) - Method in interface org.apache.guacamole.net.auth.Identifiable
    +
    +
    Sets the identifier assigned to this object.
    +
    +
    setName(String) - Method in class org.apache.guacamole.form.Field
    +
    +
    Sets the unique name associated with this field.
    +
    +
    setName(String) - Method in class org.apache.guacamole.form.Form
    +
    +
    Sets the name of this form.
    +
    +
    setName(String) - Method in class org.apache.guacamole.net.auth.AbstractConnection
    +
     
    +
    setName(String) - Method in class org.apache.guacamole.net.auth.AbstractConnectionGroup
    +
     
    +
    setName(String) - Method in class org.apache.guacamole.net.auth.AbstractSharingProfile
    +
     
    +
    setName(String) - Method in interface org.apache.guacamole.net.auth.Connection
    +
    +
    Sets the name assigned to this Connection.
    +
    +
    setName(String) - Method in interface org.apache.guacamole.net.auth.ConnectionGroup
    +
    +
    Sets the name assigned to this ConnectionGroup.
    +
    +
    setName(String) - Method in class org.apache.guacamole.net.auth.DelegatingConnection
    +
     
    +
    setName(String) - Method in class org.apache.guacamole.net.auth.DelegatingConnectionGroup
    +
     
    +
    setName(String) - Method in class org.apache.guacamole.net.auth.DelegatingSharingProfile
    +
     
    +
    setName(String) - Method in interface org.apache.guacamole.net.auth.SharingProfile
    +
    +
    Sets the human-readable name assigned to this SharingProfile.
    +
    +
    setName(String) - Method in class org.apache.guacamole.protocols.ProtocolInfo
    +
    +
    Sets the unique name of this protocol.
    +
    +
    setObjects(Map<String, ObjectType>) - Method in class org.apache.guacamole.net.auth.simple.SimpleDirectory
    +
    +
    Sets the Map which backs this SimpleDirectory.
    +
    +
    setObjects(Set<String>) - Method in class org.apache.guacamole.net.auth.simple.SimpleRelatedObjectSet
    +
    +
    Replaces the Set of object identifiers which backs this + SimpleRelatedObjectSet.
    +
    +
    setOptions(Collection<String>) - Method in class org.apache.guacamole.form.Field
    +
    +
    Sets the options available as possible values of this field.
    +
    +
    setParameters(Map<String, String>) - Method in class org.apache.guacamole.net.auth.AbstractSharingProfile
    +
     
    +
    setParameters(Map<String, String>) - Method in class org.apache.guacamole.net.auth.DelegatingSharingProfile
    +
     
    +
    setParameters(Map<String, String>) - Method in interface org.apache.guacamole.net.auth.SharingProfile
    +
    +
    Replaces all current parameters with the parameters defined within the + given map.
    +
    +
    setParentIdentifier(String) - Method in class org.apache.guacamole.net.auth.AbstractConnection
    +
     
    +
    setParentIdentifier(String) - Method in class org.apache.guacamole.net.auth.AbstractConnectionGroup
    +
     
    +
    setParentIdentifier(String) - Method in interface org.apache.guacamole.net.auth.Connection
    +
    +
    Sets the unique identifier of the parent ConnectionGroup for + this Connection.
    +
    +
    setParentIdentifier(String) - Method in interface org.apache.guacamole.net.auth.ConnectionGroup
    +
    +
    Sets the unique identifier of the parent ConnectionGroup for + this ConnectionGroup.
    +
    +
    setParentIdentifier(String) - Method in class org.apache.guacamole.net.auth.DelegatingConnection
    +
     
    +
    setParentIdentifier(String) - Method in class org.apache.guacamole.net.auth.DelegatingConnectionGroup
    +
     
    +
    setPassword(String) - Method in class org.apache.guacamole.net.auth.AbstractUser
    +
     
    +
    setPassword(String) - Method in class org.apache.guacamole.net.auth.Credentials
    +
    +
    Sets the password associated with this set of credentials.
    +
    +
    setPassword(String) - Method in class org.apache.guacamole.net.auth.DelegatingUser
    +
     
    +
    setPassword(String) - Method in interface org.apache.guacamole.net.auth.User
    +
    +
    Sets this user's password.
    +
    +
    setPermissions(Set<ObjectPermission>) - Method in class org.apache.guacamole.net.auth.simple.SimpleObjectPermissionSet
    +
    +
    Sets the Set which backs this SimpleObjectPermissionSet.
    +
    +
    setPermissions(Set<SystemPermission>) - Method in class org.apache.guacamole.net.auth.simple.SimpleSystemPermissionSet
    +
    +
    Sets the Set which backs this SimpleSystemPermissionSet.
    +
    +
    setPrimaryConnectionIdentifier(String) - Method in class org.apache.guacamole.net.auth.AbstractSharingProfile
    +
     
    +
    setPrimaryConnectionIdentifier(String) - Method in class org.apache.guacamole.net.auth.DelegatingSharingProfile
    +
     
    +
    setPrimaryConnectionIdentifier(String) - Method in interface org.apache.guacamole.net.auth.SharingProfile
    +
    +
    Sets the identifier of the primary connection associated with this + connection.
    +
    +
    setRemoteAddress(String) - Method in class org.apache.guacamole.net.auth.Credentials
    +
    +
    Sets the address of the client end of the connection which provided + these credentials.
    +
    +
    setRemoteHost(String) - Method in class org.apache.guacamole.net.auth.AbstractActiveConnection
    +
     
    +
    setRemoteHost(String) - Method in interface org.apache.guacamole.net.auth.ActiveConnection
    +
    +
    Sets the hostname or IP address of the remote host that initiated the + connection.
    +
    +
    setRemoteHostname(String) - Method in class org.apache.guacamole.net.auth.Credentials
    +
    +
    Sets the hostname of the client end of the connection which provided + these credentials, if known.
    +
    +
    setRequest(HttpServletRequest) - Method in class org.apache.guacamole.net.auth.Credentials
    +
    +
    Sets the HttpServletRequest associated with this set of credentials.
    +
    +
    setSession(HttpSession) - Method in class org.apache.guacamole.net.auth.Credentials
    +
    +
    Sets the HttpSession associated with this set of credentials.
    +
    +
    setSharingProfileForms(Collection<Form>) - Method in class org.apache.guacamole.protocols.ProtocolInfo
    +
    +
    Sets the collection of forms describing all known parameters relevant to + a sharing profile whose primary connection uses this protocol.
    +
    +
    setSharingProfileIdentifier(String) - Method in class org.apache.guacamole.net.auth.AbstractActiveConnection
    +
     
    +
    setSharingProfileIdentifier(String) - Method in interface org.apache.guacamole.net.auth.ActiveConnection
    +
    +
    Sets the identifier of the sharing profile being actively used.
    +
    +
    setStartDate(Date) - Method in class org.apache.guacamole.net.auth.AbstractActiveConnection
    +
     
    +
    setStartDate(Date) - Method in interface org.apache.guacamole.net.auth.ActiveConnection
    +
    +
    Sets the date and time the connection began.
    +
    +
    setTitle(String) - Method in class org.apache.guacamole.form.FieldOption
    +
    +
    Sets the human-readable title describing the effect of this option.
    +
    +
    setToken(String, String) - Method in class org.apache.guacamole.token.TokenFilter
    +
    +
    Sets the token having the given name to the given value.
    +
    +
    setTokens(Map<String, String>) - Method in class org.apache.guacamole.token.TokenFilter
    +
    +
    Replaces all current token values with the contents of the given map, + where each map key represents a token name, and each map value + represents a token value.
    +
    +
    setTunnel(GuacamoleTunnel) - Method in class org.apache.guacamole.net.auth.AbstractActiveConnection
    +
     
    +
    setTunnel(GuacamoleTunnel) - Method in interface org.apache.guacamole.net.auth.ActiveConnection
    +
    +
    Sets the connected GuacamoleTunnel being used.
    +
    +
    setType(String) - Method in class org.apache.guacamole.form.Field
    +
    +
    Sets the type of this field.
    +
    +
    setType(ConnectionGroup.Type) - Method in class org.apache.guacamole.net.auth.AbstractConnectionGroup
    +
     
    +
    setType(ConnectionGroup.Type) - Method in interface org.apache.guacamole.net.auth.ConnectionGroup
    +
    +
    Set the type of this ConnectionGroup.
    +
    +
    setType(ConnectionGroup.Type) - Method in class org.apache.guacamole.net.auth.DelegatingConnectionGroup
    +
     
    +
    setUsername(String) - Method in class org.apache.guacamole.net.auth.AbstractActiveConnection
    +
     
    +
    setUsername(String) - Method in interface org.apache.guacamole.net.auth.ActiveConnection
    +
    +
    Sets the name of the user who is using this connection.
    +
    +
    setUsername(String) - Method in class org.apache.guacamole.net.auth.Credentials
    +
    +
    Sets the username associated with this set of credentials.
    +
    +
    setValue(String) - Method in class org.apache.guacamole.form.FieldOption
    +
    +
    Sets the value that will be assigned if this option is chosen.
    +
    +
    setValue(String, String) - Method in class org.apache.guacamole.net.auth.credentials.UserCredentials
    +
    +
    Sets the value of the field having the given name.
    +
    +
    setValue(Field, String) - Method in class org.apache.guacamole.net.auth.credentials.UserCredentials
    +
    +
    Sets the value of the given field.
    +
    +
    setValues(Map<String, String>) - Method in class org.apache.guacamole.net.auth.credentials.UserCredentials
    +
    +
    Replaces the map backing this UserCredentials object with the given map.
    +
    +
    Shareable<T> - Interface in org.apache.guacamole.net.auth
    +
    +
    An object which can be shared with others via specially-generated sets of + credentials.
    +
    +
    SharingProfile - Interface in org.apache.guacamole.net.auth
    +
    +
    Represents the semantics which apply to an existing connection when shared, + along with a human-readable name and unique identifier.
    +
    +
    shutdown() - Method in class org.apache.guacamole.net.auth.AbstractAuthenticationProvider
    +
    +
    Frees all resources associated with this AuthenticationProvider.
    +
    +
    shutdown() - Method in interface org.apache.guacamole.net.auth.AuthenticationProvider
    +
    +
    Frees all resources associated with this AuthenticationProvider.
    +
    +
    SimpleActivityRecordSet<RecordType extends ActivityRecord> - Class in org.apache.guacamole.net.auth.simple
    +
    +
    An immutable and empty ActivityRecordSet.
    +
    +
    SimpleActivityRecordSet() - Constructor for class org.apache.guacamole.net.auth.simple.SimpleActivityRecordSet
    +
    +
    Create a new SimpleActivityRecordSet that contains an empty set of + records.
    +
    +
    SimpleActivityRecordSet(Collection<? extends RecordType>) - Constructor for class org.apache.guacamole.net.auth.simple.SimpleActivityRecordSet
    +
    +
    Create a new SimpleActivityRecordSet that contains the provided records + which will back this record set.
    +
    +
    SimpleAuthenticationProvider - Class in org.apache.guacamole.net.auth.simple
    +
    +
    Provides means of retrieving a set of named GuacamoleConfigurations for a + given Credentials object.
    +
    +
    SimpleAuthenticationProvider() - Constructor for class org.apache.guacamole.net.auth.simple.SimpleAuthenticationProvider
    +
     
    +
    SimpleConnection - Class in org.apache.guacamole.net.auth.simple
    +
    +
    A Connection implementation which establishes the underlying connection to + guacd using the configuration information provided in guacamole.properties.
    +
    +
    SimpleConnection() - Constructor for class org.apache.guacamole.net.auth.simple.SimpleConnection
    +
    +
    Creates a completely uninitialized SimpleConnection.
    +
    +
    SimpleConnection(boolean) - Constructor for class org.apache.guacamole.net.auth.simple.SimpleConnection
    +
    +
    Creates a completely uninitialized SimpleConnection.
    +
    +
    SimpleConnection(String, String, GuacamoleConfiguration) - Constructor for class org.apache.guacamole.net.auth.simple.SimpleConnection
    +
    +
    Creates a new SimpleConnection having the given identifier and + GuacamoleConfiguration.
    +
    +
    SimpleConnection(String, String, GuacamoleConfiguration, boolean) - Constructor for class org.apache.guacamole.net.auth.simple.SimpleConnection
    +
    +
    Creates a new SimpleConnection having the given identifier and + GuacamoleConfiguration.
    +
    +
    SimpleConnectionDirectory - Class in org.apache.guacamole.net.auth.simple
    +
    +
    Deprecated. +
    Use SimpleDirectory instead.
    +
    +
    +
    SimpleConnectionDirectory(Collection<Connection>) - Constructor for class org.apache.guacamole.net.auth.simple.SimpleConnectionDirectory
    +
    +
    Deprecated.
    +
    Creates a new SimpleConnectionDirectory which provides access to the + connections contained within the given Map.
    +
    +
    SimpleConnectionGroup - Class in org.apache.guacamole.net.auth.simple
    +
    +
    An extremely simple read-only implementation of a ConnectionGroup which + returns the connection and connection group identifiers it was constructed + with.
    +
    +
    SimpleConnectionGroup(String, String, Collection<String>, Collection<String>) - Constructor for class org.apache.guacamole.net.auth.simple.SimpleConnectionGroup
    +
    +
    Creates a new SimpleConnectionGroup having the given name and identifier + which will expose the given contents.
    +
    +
    SimpleConnectionGroupDirectory - Class in org.apache.guacamole.net.auth.simple
    +
    +
    Deprecated. +
    Use SimpleDirectory instead.
    +
    +
    +
    SimpleConnectionGroupDirectory(Collection<ConnectionGroup>) - Constructor for class org.apache.guacamole.net.auth.simple.SimpleConnectionGroupDirectory
    +
    +
    Deprecated.
    +
    Creates a new SimpleConnectionGroupDirectory which contains the given + groups.
    +
    +
    SimpleConnectionRecordSet - Class in org.apache.guacamole.net.auth.simple
    +
    +
    Deprecated. + +
    +
    +
    SimpleConnectionRecordSet() - Constructor for class org.apache.guacamole.net.auth.simple.SimpleConnectionRecordSet
    +
    +
    Deprecated.
    +
    SimpleDirectory<ObjectType extends Identifiable> - Class in org.apache.guacamole.net.auth.simple
    +
    +
    An extremely simple read-only implementation of a Directory which provides + access to a pre-defined Map of arbitrary objects.
    +
    +
    SimpleDirectory() - Constructor for class org.apache.guacamole.net.auth.simple.SimpleDirectory
    +
    +
    Creates a new empty SimpleDirectory which does not provide access to + any objects.
    +
    +
    SimpleDirectory(Collection<ObjectType>) - Constructor for class org.apache.guacamole.net.auth.simple.SimpleDirectory
    +
    +
    Creates a new SimpleDirectory which provides access to the + objects contained within the Collection.
    +
    +
    SimpleDirectory(Map<String, ObjectType>) - Constructor for class org.apache.guacamole.net.auth.simple.SimpleDirectory
    +
    +
    Creates a new SimpleDirectory which provides access to the objects + contained within the given Map.
    +
    +
    SimpleDirectory(ObjectType) - Constructor for class org.apache.guacamole.net.auth.simple.SimpleDirectory
    +
    +
    Creates a new SimpleDirectory which provides access to the given object.
    +
    +
    SimpleDirectory(ObjectType...) - Constructor for class org.apache.guacamole.net.auth.simple.SimpleDirectory
    +
    +
    Creates a new SimpleDirectory which provides access to the given + objects.
    +
    +
    SimpleObjectPermissionSet - Class in org.apache.guacamole.net.auth.simple
    +
    +
    A read-only implementation of ObjectPermissionSet which uses a backing Set + of Permissions to determine which permissions are present.
    +
    +
    SimpleObjectPermissionSet() - Constructor for class org.apache.guacamole.net.auth.simple.SimpleObjectPermissionSet
    +
    +
    Creates a new empty SimpleObjectPermissionSet.
    +
    +
    SimpleObjectPermissionSet(Collection<String>) - Constructor for class org.apache.guacamole.net.auth.simple.SimpleObjectPermissionSet
    +
    +
    Creates a new SimpleObjectPermissionSet which contains only READ + permissions for each of the given identifiers.
    +
    +
    SimpleObjectPermissionSet(Collection<String>, Collection<ObjectPermission.Type>) - Constructor for class org.apache.guacamole.net.auth.simple.SimpleObjectPermissionSet
    +
    +
    Creates a new SimpleObjectPermissionSet which contains permissions for + all possible unique combinations of the given identifiers and permission + types.
    +
    +
    SimpleObjectPermissionSet(Set<ObjectPermission>) - Constructor for class org.apache.guacamole.net.auth.simple.SimpleObjectPermissionSet
    +
    +
    Creates a new SimpleObjectPermissionSet which contains the permissions + within the given Set.
    +
    +
    SimpleRelatedObjectSet - Class in org.apache.guacamole.net.auth.simple
    +
    +
    A read-only implementation of RelatedObjectSet which uses a backing Set + of identifiers to determine which objects are present.
    +
    +
    SimpleRelatedObjectSet() - Constructor for class org.apache.guacamole.net.auth.simple.SimpleRelatedObjectSet
    +
    +
    Creates a new empty SimpleRelatedObjectSet.
    +
    +
    SimpleRelatedObjectSet(Set<String>) - Constructor for class org.apache.guacamole.net.auth.simple.SimpleRelatedObjectSet
    +
    +
    Creates a new SimpleRelatedObjectSet which contains the objects having + the identifiers within the given Set.
    +
    +
    SimpleSystemPermissionSet - Class in org.apache.guacamole.net.auth.simple
    +
    +
    A read-only implementation of SystemPermissionSet which uses a backing Set + of Permissions to determine which permissions are present.
    +
    +
    SimpleSystemPermissionSet() - Constructor for class org.apache.guacamole.net.auth.simple.SimpleSystemPermissionSet
    +
    +
    Creates a new empty SimpleSystemPermissionSet.
    +
    +
    SimpleSystemPermissionSet(Set<SystemPermission>) - Constructor for class org.apache.guacamole.net.auth.simple.SimpleSystemPermissionSet
    +
    +
    Creates a new SimpleSystemPermissionSet which contains the permissions + within the given Set.
    +
    +
    SimpleUser - Class in org.apache.guacamole.net.auth.simple
    +
    +
    A read-only User implementation which has no permissions.
    +
    +
    SimpleUser() - Constructor for class org.apache.guacamole.net.auth.simple.SimpleUser
    +
    +
    Creates a completely uninitialized SimpleUser.
    +
    +
    SimpleUser(String) - Constructor for class org.apache.guacamole.net.auth.simple.SimpleUser
    +
    +
    Creates a new SimpleUser having the given username.
    +
    +
    SimpleUser(String, Collection<String>, Collection<String>) - Constructor for class org.apache.guacamole.net.auth.simple.SimpleUser
    +
    +
    Deprecated. +
    Extend and override the applicable permission set getters instead, + relying on SimpleUser to expose no permissions by default for all + permission sets that aren't overridden. See SimpleObjectPermissionSet + for convenient methods of providing a read-only permission set with + specific permissions.
    +
    +
    +
    SimpleUser(String, Collection<String>, Collection<String>, Collection<String>) - Constructor for class org.apache.guacamole.net.auth.simple.SimpleUser
    +
    +
    Deprecated. +
    Extend and override the applicable permission set getters instead, + relying on SimpleUser to expose no permissions by default for all + permission sets that aren't overridden. See SimpleObjectPermissionSet + for convenient methods of providing a read-only permission set with + specific permissions.
    +
    +
    +
    SimpleUserContext - Class in org.apache.guacamole.net.auth.simple
    +
    +
    An extremely simple UserContext implementation which provides access to + a defined and restricted set of GuacamoleConfigurations.
    +
    +
    SimpleUserContext(AuthenticationProvider, String, Map<String, GuacamoleConfiguration>) - Constructor for class org.apache.guacamole.net.auth.simple.SimpleUserContext
    +
    +
    Creates a new SimpleUserContext for the user with the given username + which provides access to only those configurations within the given Map.
    +
    +
    SimpleUserContext(AuthenticationProvider, String, Map<String, GuacamoleConfiguration>, boolean) - Constructor for class org.apache.guacamole.net.auth.simple.SimpleUserContext
    +
    +
    Creates a new SimpleUserContext for the user with the given username + which provides access to only those configurations within the given Map.
    +
    +
    SimpleUserContext(AuthenticationProvider, Map<String, GuacamoleConfiguration>) - Constructor for class org.apache.guacamole.net.auth.simple.SimpleUserContext
    +
    +
    Creates a new SimpleUserContext which provides access to only those + configurations within the given Map.
    +
    +
    SimpleUserDirectory - Class in org.apache.guacamole.net.auth.simple
    +
    +
    Deprecated. +
    Use SimpleDirectory instead.
    +
    +
    +
    SimpleUserDirectory(User) - Constructor for class org.apache.guacamole.net.auth.simple.SimpleUserDirectory
    +
    +
    Deprecated.
    +
    Creates a new SimpleUserDirectory which provides access to the single + user provided.
    +
    +
    SimpleUserGroup - Class in org.apache.guacamole.net.auth.simple
    +
    +
    A read-only UserGroup implementation which has no members and no + permissions.
    +
    +
    SimpleUserGroup() - Constructor for class org.apache.guacamole.net.auth.simple.SimpleUserGroup
    +
    +
    Creates a completely uninitialized SimpleUserGroup.
    +
    +
    SimpleUserGroup(String) - Constructor for class org.apache.guacamole.net.auth.simple.SimpleUserGroup
    +
    +
    Creates a new SimpleUserGroup having the given identifier.
    +
    +
    sort(ActivityRecordSet.SortableProperty, boolean) - Method in interface org.apache.guacamole.net.auth.ActivityRecordSet
    +
    +
    Returns a ActivityRecordSet containing identically the records within + this set, sorted according to the specified criteria.
    +
    +
    sort(ActivityRecordSet.SortableProperty, boolean) - Method in class org.apache.guacamole.net.auth.DecoratingActivityRecordSet
    +
     
    +
    sort(ActivityRecordSet.SortableProperty, boolean) - Method in class org.apache.guacamole.net.auth.DelegatingActivityRecordSet
    +
     
    +
    sort(ActivityRecordSet.SortableProperty, boolean) - Method in class org.apache.guacamole.net.auth.simple.SimpleActivityRecordSet
    +
     
    +
    sort(ActivityRecordSet.SortableProperty, boolean) - Method in class org.apache.guacamole.net.auth.simple.SimpleConnectionRecordSet
    +
    +
    Deprecated.
    +
    SSL - org.apache.guacamole.net.auth.GuacamoleProxyConfiguration.EncryptionMethod
    +
    +
    Encrypted with SSL or TLS.
    +
    +
    StandardTokens - Class in org.apache.guacamole.token
    +
    +
    Deprecated. +
    Standard tokens are now supplied by default to the connect() + functions of connections and connection groups. Manually generating the + standard tokens is not necessary.
    +
    +
    +
    START_DATE - org.apache.guacamole.net.auth.ActivityRecordSet.SortableProperty
    +
    +
    The date and time when the activity associated with the record + began.
    +
    +
    startElement(String, String, String, Attributes) - Method in class org.apache.guacamole.xml.DocumentHandler
    +
     
    +
    StringGuacamoleProperty - Class in org.apache.guacamole.properties
    +
    +
    A GuacamoleProperty whose value is a simple string.
    +
    +
    StringGuacamoleProperty() - Constructor for class org.apache.guacamole.properties.StringGuacamoleProperty
    +
     
    +
    StringListProperty - Class in org.apache.guacamole.properties
    +
    +
    A GuacamoleProperty whose value is a List of Strings.
    +
    +
    StringListProperty() - Constructor for class org.apache.guacamole.properties.StringListProperty
    +
     
    +
    SystemPermission - Class in org.apache.guacamole.net.auth.permission
    +
    +
    A permission which affects the system as a whole, rather than an individual + object.
    +
    +
    SystemPermission(SystemPermission.Type) - Constructor for class org.apache.guacamole.net.auth.permission.SystemPermission
    +
    +
    Creates a new SystemPermission with the given + type.
    +
    +
    SystemPermission.Type - Enum in org.apache.guacamole.net.auth.permission
    +
    +
    Specific types of system-level permissions.
    +
    +
    SystemPermissionSet - Interface in org.apache.guacamole.net.auth.permission
    +
    +
    A set of permissions which affects the system as a whole.
    +
    +
    + + + +

    T

    +
    +
    TagHandler - Interface in org.apache.guacamole.xml
    +
    +
    A simple element-level event handler for events triggered by the + SAX-driven DocumentHandler parser.
    +
    +
    TERMINAL_COLOR_SCHEME - Static variable in class org.apache.guacamole.form.Field.Type
    +
    +
    A color scheme accepted by the Guacamole server terminal emulator + and protocols which leverage it.
    +
    +
    TerminalColorSchemeField - Class in org.apache.guacamole.form
    +
    +
    Represents a terminal color scheme field.
    +
    +
    TerminalColorSchemeField(String) - Constructor for class org.apache.guacamole.form.TerminalColorSchemeField
    +
    +
    Creates a new TerminalColorSchemeField with the given name.
    +
    +
    TEXT - Static variable in class org.apache.guacamole.form.Field.Type
    +
    +
    A text field, accepting arbitrary values.
    +
    +
    TextField - Class in org.apache.guacamole.form
    +
    +
    Represents a basic text field.
    +
    +
    TextField(String) - Constructor for class org.apache.guacamole.form.TextField
    +
    +
    Creates a new TextField with the given name.
    +
    +
    TextField(String, Collection<String>) - Constructor for class org.apache.guacamole.form.TextField
    +
    +
    Creates a new TextField with the given name and possible values.
    +
    +
    TIME - Static variable in class org.apache.guacamole.form.Field.Type
    +
    +
    A time field whose legal values conform to the pattern "HH:MM:SS", + zero-padded, 24-hour.
    +
    +
    TIME_TOKEN - Static variable in class org.apache.guacamole.token.StandardTokens
    +
    +
    Deprecated.
    +
    The name of the time token (server-local time) added via + addStandardTokens().
    +
    +
    TimeField - Class in org.apache.guacamole.form
    +
    +
    Represents a time field.
    +
    +
    TimeField(String) - Constructor for class org.apache.guacamole.form.TimeField
    +
    +
    Creates a new TimeField with the given name.
    +
    +
    TIMEZONE - Static variable in class org.apache.guacamole.form.Field.Type
    +
    +
    A time zone field whose legal values are only valid time zone IDs, + as dictated by Java within TimeZone.getAvailableIDs().
    +
    +
    TimeZoneField - Class in org.apache.guacamole.form
    +
    +
    Represents a time zone field.
    +
    +
    TimeZoneField(String) - Constructor for class org.apache.guacamole.form.TimeZoneField
    +
    +
    Creates a new TimeZoneField with the given name.
    +
    +
    TimeZoneGuacamoleProperty - Class in org.apache.guacamole.properties
    +
    +
    A GuacamoleProperty whose value is a TimeZone.
    +
    +
    TimeZoneGuacamoleProperty() - Constructor for class org.apache.guacamole.properties.TimeZoneGuacamoleProperty
    +
     
    +
    TokenFilter - Class in org.apache.guacamole.token
    +
    +
    Filtering object which replaces tokens of the form "${TOKEN_NAME}" with + their corresponding values.
    +
    +
    TokenFilter() - Constructor for class org.apache.guacamole.token.TokenFilter
    +
    +
    Creates a new TokenFilter which has no associated tokens.
    +
    +
    TokenFilter(Map<String, String>) - Constructor for class org.apache.guacamole.token.TokenFilter
    +
    +
    Creates a new TokenFilter which is initialized with the given token + name/value pairs.
    +
    +
    TokenInjectingConnection - Class in org.apache.guacamole.net.auth
    +
    +
    Connection implementation which overrides the connect() function of an + underlying Connection, adding a given set of parameter tokens to the tokens + already supplied.
    +
    +
    TokenInjectingConnection(Connection) - Constructor for class org.apache.guacamole.net.auth.TokenInjectingConnection
    +
    +
    Wraps the given Connection such that the additional parameter tokens + added by TokenInjectingConnection.addTokens(java.util.Map) or returned by + TokenInjectingConnection.getTokens() are included with each invocation of connect().
    +
    +
    TokenInjectingConnection(Connection, Map<String, String>) - Constructor for class org.apache.guacamole.net.auth.TokenInjectingConnection
    +
    +
    Wraps the given Connection, automatically adding the given tokens to + each invocation of connect().
    +
    +
    TokenInjectingConnectionGroup - Class in org.apache.guacamole.net.auth
    +
    +
    ConnectionGroup implementation which overrides the connect() function of an + underlying ConnectionGroup, adding a given set of parameter tokens to the + tokens already supplied.
    +
    +
    TokenInjectingConnectionGroup(ConnectionGroup) - Constructor for class org.apache.guacamole.net.auth.TokenInjectingConnectionGroup
    +
    +
    Wraps the given ConnectionGroup such that the additional parameter + tokens added by TokenInjectingConnectionGroup.addTokens(java.util.Map) or returned by + TokenInjectingConnectionGroup.getTokens() are included with each invocation of connect().
    +
    +
    TokenInjectingConnectionGroup(ConnectionGroup, Map<String, String>) - Constructor for class org.apache.guacamole.net.auth.TokenInjectingConnectionGroup
    +
    +
    Wraps the given ConnectionGroup, automatically adding the given tokens + to each invocation of connect().
    +
    +
    TokenInjectingUserContext - Class in org.apache.guacamole.net.auth
    +
    +
    UserContext implementation which decorates a given UserContext, + automatically applying additional parameter tokens during the connection + process of any retrieved Connections and ConnectionGroups.
    +
    +
    TokenInjectingUserContext(UserContext) - Constructor for class org.apache.guacamole.net.auth.TokenInjectingUserContext
    +
    +
    Wraps the given UserContext, overriding the connect() function of each + retrieved Connection and ConnectionGroup such that the additional + parameter tokens added by addTokens() or returned by getTokens() are + included.
    +
    +
    TokenInjectingUserContext(UserContext, Map<String, String>) - Constructor for class org.apache.guacamole.net.auth.TokenInjectingUserContext
    +
    +
    Wraps the given UserContext, overriding the connect() function of each + retrieved Connection and ConnectionGroup such that the given additional + parameter tokens are included.
    +
    +
    TokenName - Class in org.apache.guacamole.token
    +
    +
    Utility class for generating parameter token names.
    +
    +
    Translatable - Interface in org.apache.guacamole.language
    +
    +
    An object which is associated with a translatable message that can be passed + through an arbitrary translation service, producing a human-readable message + in the user's native language.
    +
    +
    TranslatableGuacamoleClientBadTypeException - Exception in org.apache.guacamole.language
    +
    +
    A GuacamoleClientBadTypeException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
    +
    +
    TranslatableGuacamoleClientBadTypeException(String, String) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleClientBadTypeException
    +
    +
    Creates a new TranslatableGuacamoleClientBadTypeException with the given + message.
    +
    +
    TranslatableGuacamoleClientBadTypeException(String, String, Throwable) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleClientBadTypeException
    +
    +
    Creates a new TranslatableGuacamoleClientBadTypeException with the given + message and cause.
    +
    +
    TranslatableGuacamoleClientBadTypeException(String, TranslatableMessage) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleClientBadTypeException
    +
    +
    Creates a new TranslatableGuacamoleClientBadTypeException with the given + message.
    +
    +
    TranslatableGuacamoleClientBadTypeException(String, TranslatableMessage, Throwable) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleClientBadTypeException
    +
    +
    Creates a new TranslatableGuacamoleClientBadTypeException with the given + message and cause.
    +
    +
    TranslatableGuacamoleClientException - Exception in org.apache.guacamole.language
    +
    +
    A GuacamoleClientException whose associated message is translatable + and can be passed through an arbitrary translation service, producing a + human-readable message in the user's native language.
    +
    +
    TranslatableGuacamoleClientException(String, String) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleClientException
    +
    +
    Creates a new TranslatableGuacamoleClientException with the given + message.
    +
    +
    TranslatableGuacamoleClientException(String, String, Throwable) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleClientException
    +
    +
    Creates a new TranslatableGuacamoleClientException with the given + message and cause.
    +
    +
    TranslatableGuacamoleClientException(String, TranslatableMessage) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleClientException
    +
    +
    Creates a new TranslatableGuacamoleClientException with the given + message.
    +
    +
    TranslatableGuacamoleClientException(String, TranslatableMessage, Throwable) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleClientException
    +
    +
    Creates a new TranslatableGuacamoleClientException with the given + message and cause.
    +
    +
    TranslatableGuacamoleClientOverrunException - Exception in org.apache.guacamole.language
    +
    +
    A GuacamoleClientOverrunException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
    +
    +
    TranslatableGuacamoleClientOverrunException(String, String) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleClientOverrunException
    +
    +
    Creates a new TranslatableGuacamoleClientOverrunException with the given + message.
    +
    +
    TranslatableGuacamoleClientOverrunException(String, String, Throwable) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleClientOverrunException
    +
    +
    Creates a new TranslatableGuacamoleClientOverrunException with the given + message and cause.
    +
    +
    TranslatableGuacamoleClientOverrunException(String, TranslatableMessage) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleClientOverrunException
    +
    +
    Creates a new TranslatableGuacamoleClientOverrunException with the given + message.
    +
    +
    TranslatableGuacamoleClientOverrunException(String, TranslatableMessage, Throwable) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleClientOverrunException
    +
    +
    Creates a new TranslatableGuacamoleClientOverrunException with the given + message and cause.
    +
    +
    TranslatableGuacamoleClientTimeoutException - Exception in org.apache.guacamole.language
    +
    +
    A GuacamoleClientTimeoutException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
    +
    +
    TranslatableGuacamoleClientTimeoutException(String, String) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleClientTimeoutException
    +
    +
    Creates a new TranslatableGuacamoleClientTimeoutException with the given + message.
    +
    +
    TranslatableGuacamoleClientTimeoutException(String, String, Throwable) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleClientTimeoutException
    +
    +
    Creates a new TranslatableGuacamoleClientTimeoutException with the given + message and cause.
    +
    +
    TranslatableGuacamoleClientTimeoutException(String, TranslatableMessage) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleClientTimeoutException
    +
    +
    Creates a new TranslatableGuacamoleClientTimeoutException with the given + message.
    +
    +
    TranslatableGuacamoleClientTimeoutException(String, TranslatableMessage, Throwable) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleClientTimeoutException
    +
    +
    Creates a new TranslatableGuacamoleClientTimeoutException with the given + message and cause.
    +
    +
    TranslatableGuacamoleClientTooManyException - Exception in org.apache.guacamole.language
    +
    +
    A GuacamoleClientTooManyException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
    +
    +
    TranslatableGuacamoleClientTooManyException(String, String) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleClientTooManyException
    +
    +
    Creates a new TranslatableGuacamoleClientTooManyException with the given + message.
    +
    +
    TranslatableGuacamoleClientTooManyException(String, String, Throwable) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleClientTooManyException
    +
    +
    Creates a new TranslatableGuacamoleClientTooManyException with the given + message and cause.
    +
    +
    TranslatableGuacamoleClientTooManyException(String, TranslatableMessage) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleClientTooManyException
    +
    +
    Creates a new TranslatableGuacamoleClientTooManyException with the given + message.
    +
    +
    TranslatableGuacamoleClientTooManyException(String, TranslatableMessage, Throwable) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleClientTooManyException
    +
    +
    Creates a new TranslatableGuacamoleClientTooManyException with the given + message and cause.
    +
    +
    TranslatableGuacamoleConnectionClosedException - Exception in org.apache.guacamole.language
    +
    +
    A GuacamoleConnectionClosedException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
    +
    +
    TranslatableGuacamoleConnectionClosedException(String, String) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleConnectionClosedException
    +
    +
    Creates a new TranslatableGuacamoleConnectionClosedException with the + given message.
    +
    +
    TranslatableGuacamoleConnectionClosedException(String, String, Throwable) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleConnectionClosedException
    +
    +
    Creates a new TranslatableGuacamoleConnectionClosedException with the + given message and cause.
    +
    +
    TranslatableGuacamoleConnectionClosedException(String, TranslatableMessage) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleConnectionClosedException
    +
    +
    Creates a new TranslatableGuacamoleConnectionClosedException with the + given message.
    +
    +
    TranslatableGuacamoleConnectionClosedException(String, TranslatableMessage, Throwable) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleConnectionClosedException
    +
    +
    Creates a new TranslatableGuacamoleConnectionClosedException with the + given message and cause.
    +
    +
    TranslatableGuacamoleCredentialsException - Exception in org.apache.guacamole.language
    +
    +
    A GuacamoleCredentialsException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
    +
    +
    TranslatableGuacamoleCredentialsException(String, String, Throwable, CredentialsInfo) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleCredentialsException
    +
    +
    Creates a new TranslatableGuacamoleCredentialsException with the given + message, cause, and associated credential information.
    +
    +
    TranslatableGuacamoleCredentialsException(String, String, CredentialsInfo) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleCredentialsException
    +
    +
    Creates a new TranslatableGuacamoleCredentialsException with the given + message, and associated credential information.
    +
    +
    TranslatableGuacamoleCredentialsException(String, TranslatableMessage, Throwable, CredentialsInfo) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleCredentialsException
    +
    +
    Creates a new TranslatableGuacamoleCredentialsException with the given + message, cause, and associated credential information.
    +
    +
    TranslatableGuacamoleCredentialsException(String, TranslatableMessage, CredentialsInfo) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleCredentialsException
    +
    +
    Creates a new TranslatableGuacamoleCredentialsException with the given + message, and associated credential information.
    +
    +
    TranslatableGuacamoleInsufficientCredentialsException - Exception in org.apache.guacamole.language
    +
    +
    A GuacamoleInsufficientCredentialsException whose associated message + is translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
    +
    +
    TranslatableGuacamoleInsufficientCredentialsException(String, String, Throwable, CredentialsInfo) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleInsufficientCredentialsException
    +
    +
    Creates a new TranslatableGuacamoleInsufficientCredentialsException with + the given message, cause, and associated credential information.
    +
    +
    TranslatableGuacamoleInsufficientCredentialsException(String, String, CredentialsInfo) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleInsufficientCredentialsException
    +
    +
    Creates a new TranslatableGuacamoleInsufficientCredentialsException with + the given message, and associated credential information.
    +
    +
    TranslatableGuacamoleInsufficientCredentialsException(String, TranslatableMessage, Throwable, CredentialsInfo) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleInsufficientCredentialsException
    +
    +
    Creates a new TranslatableGuacamoleInsufficientCredentialsException with + the given message, cause, and associated credential information.
    +
    +
    TranslatableGuacamoleInsufficientCredentialsException(String, TranslatableMessage, CredentialsInfo) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleInsufficientCredentialsException
    +
    +
    Creates a new TranslatableGuacamoleInsufficientCredentialsException with + the given message, and associated credential information.
    +
    +
    TranslatableGuacamoleInvalidCredentialsException - Exception in org.apache.guacamole.language
    +
    +
    A GuacamoleInvalidCredentialsException whose associated message + is translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
    +
    +
    TranslatableGuacamoleInvalidCredentialsException(String, String, Throwable, CredentialsInfo) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleInvalidCredentialsException
    +
    +
    Creates a new TranslatableGuacamoleInvalidCredentialsException with + the given message, cause, and associated credential information.
    +
    +
    TranslatableGuacamoleInvalidCredentialsException(String, String, CredentialsInfo) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleInvalidCredentialsException
    +
    +
    Creates a new TranslatableGuacamoleInvalidCredentialsException with + the given message, and associated credential information.
    +
    +
    TranslatableGuacamoleInvalidCredentialsException(String, TranslatableMessage, Throwable, CredentialsInfo) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleInvalidCredentialsException
    +
    +
    Creates a new TranslatableGuacamoleInvalidCredentialsException with + the given message, cause, and associated credential information.
    +
    +
    TranslatableGuacamoleInvalidCredentialsException(String, TranslatableMessage, CredentialsInfo) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleInvalidCredentialsException
    +
    +
    Creates a new TranslatableGuacamoleInvalidCredentialsException with + the given message, and associated credential information.
    +
    +
    TranslatableGuacamoleResourceClosedException - Exception in org.apache.guacamole.language
    +
    +
    A GuacamoleResourceClosedException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
    +
    +
    TranslatableGuacamoleResourceClosedException(String, String) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleResourceClosedException
    +
    +
    Creates a new TranslatableGuacamoleResourceClosedException with the given + message.
    +
    +
    TranslatableGuacamoleResourceClosedException(String, String, Throwable) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleResourceClosedException
    +
    +
    Creates a new TranslatableGuacamoleResourceClosedException with the given + message and cause.
    +
    +
    TranslatableGuacamoleResourceClosedException(String, TranslatableMessage) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleResourceClosedException
    +
    +
    Creates a new TranslatableGuacamoleResourceClosedException with the given + message.
    +
    +
    TranslatableGuacamoleResourceClosedException(String, TranslatableMessage, Throwable) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleResourceClosedException
    +
    +
    Creates a new TranslatableGuacamoleResourceClosedException with the given + message and cause.
    +
    +
    TranslatableGuacamoleResourceConflictException - Exception in org.apache.guacamole.language
    +
    +
    A GuacamoleResourceConflictException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
    +
    +
    TranslatableGuacamoleResourceConflictException(String, String) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleResourceConflictException
    +
    +
    Creates a new TranslatableGuacamoleResourceConflictException with the + given message.
    +
    +
    TranslatableGuacamoleResourceConflictException(String, String, Throwable) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleResourceConflictException
    +
    +
    Creates a new TranslatableGuacamoleResourceConflictException with the + given message and cause.
    +
    +
    TranslatableGuacamoleResourceConflictException(String, TranslatableMessage) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleResourceConflictException
    +
    +
    Creates a new TranslatableGuacamoleResourceConflictException with the + given message.
    +
    +
    TranslatableGuacamoleResourceConflictException(String, TranslatableMessage, Throwable) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleResourceConflictException
    +
    +
    Creates a new TranslatableGuacamoleResourceConflictException with the + given message and cause.
    +
    +
    TranslatableGuacamoleResourceNotFoundException - Exception in org.apache.guacamole.language
    +
    +
    A GuacamoleResourceNotFoundException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
    +
    +
    TranslatableGuacamoleResourceNotFoundException(String, String) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleResourceNotFoundException
    +
    +
    Creates a new TranslatableGuacamoleResourceNotFoundException with the + given message.
    +
    +
    TranslatableGuacamoleResourceNotFoundException(String, String, Throwable) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleResourceNotFoundException
    +
    +
    Creates a new TranslatableGuacamoleResourceNotFoundException with the + given message and cause.
    +
    +
    TranslatableGuacamoleResourceNotFoundException(String, TranslatableMessage) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleResourceNotFoundException
    +
    +
    Creates a new TranslatableGuacamoleResourceNotFoundException with the + given message.
    +
    +
    TranslatableGuacamoleResourceNotFoundException(String, TranslatableMessage, Throwable) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleResourceNotFoundException
    +
    +
    Creates a new TranslatableGuacamoleResourceNotFoundException with the + given message and cause.
    +
    +
    TranslatableGuacamoleSecurityException - Exception in org.apache.guacamole.language
    +
    +
    A GuacamoleSecurityException whose associated message is translatable + and can be passed through an arbitrary translation service, producing a + human-readable message in the user's native language.
    +
    +
    TranslatableGuacamoleSecurityException(String, String) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleSecurityException
    +
    +
    Creates a new TranslatableGuacamoleSecurityException with the given + message.
    +
    +
    TranslatableGuacamoleSecurityException(String, String, Throwable) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleSecurityException
    +
    +
    Creates a new TranslatableGuacamoleSecurityException with the given + message and cause.
    +
    +
    TranslatableGuacamoleSecurityException(String, TranslatableMessage) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleSecurityException
    +
    +
    Creates a new TranslatableGuacamoleSecurityException with the given + message.
    +
    +
    TranslatableGuacamoleSecurityException(String, TranslatableMessage, Throwable) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleSecurityException
    +
    +
    Creates a new TranslatableGuacamoleSecurityException with the given + message and cause.
    +
    +
    TranslatableGuacamoleServerBusyException - Exception in org.apache.guacamole.language
    +
    +
    A GuacamoleServerBusyException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
    +
    +
    TranslatableGuacamoleServerBusyException(String, String) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleServerBusyException
    +
    +
    Creates a new TranslatableGuacamoleServerBusyException with the given + message.
    +
    +
    TranslatableGuacamoleServerBusyException(String, String, Throwable) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleServerBusyException
    +
    +
    Creates a new TranslatableGuacamoleServerBusyException with the given + message and cause.
    +
    +
    TranslatableGuacamoleServerBusyException(String, TranslatableMessage) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleServerBusyException
    +
    +
    Creates a new TranslatableGuacamoleServerBusyException with the given + message.
    +
    +
    TranslatableGuacamoleServerBusyException(String, TranslatableMessage, Throwable) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleServerBusyException
    +
    +
    Creates a new TranslatableGuacamoleServerBusyException with the given + message and cause.
    +
    +
    TranslatableGuacamoleServerException - Exception in org.apache.guacamole.language
    +
    +
    A GuacamoleServerException whose associated message is translatable + and can be passed through an arbitrary translation service, producing a + human-readable message in the user's native language.
    +
    +
    TranslatableGuacamoleServerException(String, String) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleServerException
    +
    +
    Creates a new TranslatableGuacamoleServerException with the given + message.
    +
    +
    TranslatableGuacamoleServerException(String, String, Throwable) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleServerException
    +
    +
    Creates a new TranslatableGuacamoleServerException with the given + message and cause.
    +
    +
    TranslatableGuacamoleServerException(String, TranslatableMessage) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleServerException
    +
    +
    Creates a new TranslatableGuacamoleServerException with the given + message.
    +
    +
    TranslatableGuacamoleServerException(String, TranslatableMessage, Throwable) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleServerException
    +
    +
    Creates a new TranslatableGuacamoleServerException with the given + message and cause.
    +
    +
    TranslatableGuacamoleSessionClosedException - Exception in org.apache.guacamole.language
    +
    +
    A GuacamoleSessionClosedException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
    +
    +
    TranslatableGuacamoleSessionClosedException(String, String) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleSessionClosedException
    +
    +
    Creates a new TranslatableGuacamoleSessionClosedException with the given + message.
    +
    +
    TranslatableGuacamoleSessionClosedException(String, String, Throwable) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleSessionClosedException
    +
    +
    Creates a new TranslatableGuacamoleSessionClosedException with the given + message and cause.
    +
    +
    TranslatableGuacamoleSessionClosedException(String, TranslatableMessage) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleSessionClosedException
    +
    +
    Creates a new TranslatableGuacamoleSessionClosedException with the given + message.
    +
    +
    TranslatableGuacamoleSessionClosedException(String, TranslatableMessage, Throwable) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleSessionClosedException
    +
    +
    Creates a new TranslatableGuacamoleSessionClosedException with the given + message and cause.
    +
    +
    TranslatableGuacamoleSessionConflictException - Exception in org.apache.guacamole.language
    +
    +
    A GuacamoleSessionConflictException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
    +
    +
    TranslatableGuacamoleSessionConflictException(String, String) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleSessionConflictException
    +
    +
    Creates a new TranslatableGuacamoleSessionConflictException with the + given message.
    +
    +
    TranslatableGuacamoleSessionConflictException(String, String, Throwable) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleSessionConflictException
    +
    +
    Creates a new TranslatableGuacamoleSessionConflictException with the + given message and cause.
    +
    +
    TranslatableGuacamoleSessionConflictException(String, TranslatableMessage) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleSessionConflictException
    +
    +
    Creates a new TranslatableGuacamoleSessionConflictException with the + given message.
    +
    +
    TranslatableGuacamoleSessionConflictException(String, TranslatableMessage, Throwable) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleSessionConflictException
    +
    +
    Creates a new TranslatableGuacamoleSessionConflictException with the + given message and cause.
    +
    +
    TranslatableGuacamoleSessionTimeoutException - Exception in org.apache.guacamole.language
    +
    +
    A GuacamoleSessionTimeoutException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
    +
    +
    TranslatableGuacamoleSessionTimeoutException(String, String) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleSessionTimeoutException
    +
    +
    Creates a new TranslatableGuacamoleSessionTimeoutException with the given + message.
    +
    +
    TranslatableGuacamoleSessionTimeoutException(String, String, Throwable) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleSessionTimeoutException
    +
    +
    Creates a new TranslatableGuacamoleSessionTimeoutException with the given + message and cause.
    +
    +
    TranslatableGuacamoleSessionTimeoutException(String, TranslatableMessage) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleSessionTimeoutException
    +
    +
    Creates a new TranslatableGuacamoleSessionTimeoutException with the given + message.
    +
    +
    TranslatableGuacamoleSessionTimeoutException(String, TranslatableMessage, Throwable) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleSessionTimeoutException
    +
    +
    Creates a new TranslatableGuacamoleSessionTimeoutException with the given + message and cause.
    +
    +
    TranslatableGuacamoleUnauthorizedException - Exception in org.apache.guacamole.language
    +
    +
    A GuacamoleUnauthorizedException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
    +
    +
    TranslatableGuacamoleUnauthorizedException(String, String) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleUnauthorizedException
    +
    +
    Creates a new TranslatableGuacamoleUnauthorizedException with the given + message.
    +
    +
    TranslatableGuacamoleUnauthorizedException(String, String, Throwable) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleUnauthorizedException
    +
    +
    Creates a new TranslatableGuacamoleUnauthorizedException with the given + message and cause.
    +
    +
    TranslatableGuacamoleUnauthorizedException(String, TranslatableMessage) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleUnauthorizedException
    +
    +
    Creates a new TranslatableGuacamoleUnauthorizedException with the given + message.
    +
    +
    TranslatableGuacamoleUnauthorizedException(String, TranslatableMessage, Throwable) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleUnauthorizedException
    +
    +
    Creates a new TranslatableGuacamoleUnauthorizedException with the given + message and cause.
    +
    +
    TranslatableGuacamoleUnsupportedException - Exception in org.apache.guacamole.language
    +
    +
    A GuacamoleUnsupportedException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
    +
    +
    TranslatableGuacamoleUnsupportedException(String, String) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleUnsupportedException
    +
    +
    Creates a new TranslatableGuacamoleUnsupportedException with the given + message.
    +
    +
    TranslatableGuacamoleUnsupportedException(String, String, Throwable) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleUnsupportedException
    +
    +
    Creates a new TranslatableGuacamoleUnsupportedException with the given + message and cause.
    +
    +
    TranslatableGuacamoleUnsupportedException(String, TranslatableMessage) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleUnsupportedException
    +
    +
    Creates a new TranslatableGuacamoleUnsupportedException with the given + message.
    +
    +
    TranslatableGuacamoleUnsupportedException(String, TranslatableMessage, Throwable) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleUnsupportedException
    +
    +
    Creates a new TranslatableGuacamoleUnsupportedException with the given + message and cause.
    +
    +
    TranslatableGuacamoleUpstreamException - Exception in org.apache.guacamole.language
    +
    +
    A GuacamoleUpstreamException whose associated message is translatable + and can be passed through an arbitrary translation service, producing a + human-readable message in the user's native language.
    +
    +
    TranslatableGuacamoleUpstreamException(String, String) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleUpstreamException
    +
    +
    Creates a new TranslatableGuacamoleUpstreamException with the given + message.
    +
    +
    TranslatableGuacamoleUpstreamException(String, String, Throwable) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleUpstreamException
    +
    +
    Creates a new TranslatableGuacamoleUpstreamException with the given + message and cause.
    +
    +
    TranslatableGuacamoleUpstreamException(String, TranslatableMessage) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleUpstreamException
    +
    +
    Creates a new TranslatableGuacamoleUpstreamException with the given + message.
    +
    +
    TranslatableGuacamoleUpstreamException(String, TranslatableMessage, Throwable) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleUpstreamException
    +
    +
    Creates a new TranslatableGuacamoleUpstreamException with the given + message and cause.
    +
    +
    TranslatableGuacamoleUpstreamNotFoundException - Exception in org.apache.guacamole.language
    +
    +
    A GuacamoleUpstreamNotFoundException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
    +
    +
    TranslatableGuacamoleUpstreamNotFoundException(String, String) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleUpstreamNotFoundException
    +
    +
    Creates a new TranslatableGuacamoleUpstreamNotFoundException with the + given message.
    +
    +
    TranslatableGuacamoleUpstreamNotFoundException(String, String, Throwable) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleUpstreamNotFoundException
    +
    +
    Creates a new TranslatableGuacamoleUpstreamNotFoundException with the + given message and cause.
    +
    +
    TranslatableGuacamoleUpstreamNotFoundException(String, TranslatableMessage) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleUpstreamNotFoundException
    +
    +
    Creates a new TranslatableGuacamoleUpstreamNotFoundException with the + given message.
    +
    +
    TranslatableGuacamoleUpstreamNotFoundException(String, TranslatableMessage, Throwable) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleUpstreamNotFoundException
    +
    +
    Creates a new TranslatableGuacamoleUpstreamNotFoundException with the + given message and cause.
    +
    +
    TranslatableGuacamoleUpstreamTimeoutException - Exception in org.apache.guacamole.language
    +
    +
    A GuacamoleUpstreamTimeoutException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
    +
    +
    TranslatableGuacamoleUpstreamTimeoutException(String, String) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleUpstreamTimeoutException
    +
    +
    Creates a new TranslatableGuacamoleUpstreamTimeoutException with the + given message.
    +
    +
    TranslatableGuacamoleUpstreamTimeoutException(String, String, Throwable) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleUpstreamTimeoutException
    +
    +
    Creates a new TranslatableGuacamoleUpstreamTimeoutException with the + given message and cause.
    +
    +
    TranslatableGuacamoleUpstreamTimeoutException(String, TranslatableMessage) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleUpstreamTimeoutException
    +
    +
    Creates a new TranslatableGuacamoleUpstreamTimeoutException with the + given message.
    +
    +
    TranslatableGuacamoleUpstreamTimeoutException(String, TranslatableMessage, Throwable) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleUpstreamTimeoutException
    +
    +
    Creates a new TranslatableGuacamoleUpstreamTimeoutException with the + given message and cause.
    +
    +
    TranslatableGuacamoleUpstreamUnavailableException - Exception in org.apache.guacamole.language
    +
    +
    A GuacamoleUpstreamUnavailableException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
    +
    +
    TranslatableGuacamoleUpstreamUnavailableException(String, String) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleUpstreamUnavailableException
    +
    +
    Creates a new TranslatableGuacamoleUpstreamUnavailableException with the + given message.
    +
    +
    TranslatableGuacamoleUpstreamUnavailableException(String, String, Throwable) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleUpstreamUnavailableException
    +
    +
    Creates a new TranslatableGuacamoleUpstreamUnavailableException with the + given message and cause.
    +
    +
    TranslatableGuacamoleUpstreamUnavailableException(String, TranslatableMessage) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleUpstreamUnavailableException
    +
    +
    Creates a new TranslatableGuacamoleUpstreamUnavailableException with the + given message.
    +
    +
    TranslatableGuacamoleUpstreamUnavailableException(String, TranslatableMessage, Throwable) - Constructor for exception org.apache.guacamole.language.TranslatableGuacamoleUpstreamUnavailableException
    +
    +
    Creates a new TranslatableGuacamoleUpstreamUnavailableException with the + given message and cause.
    +
    +
    TranslatableMessage - Class in org.apache.guacamole.language
    +
    +
    A message which can be translated using a translation service, providing a + translation key and optional set of values to be substituted into the + translation string associated with that key.
    +
    +
    TranslatableMessage(String) - Constructor for class org.apache.guacamole.language.TranslatableMessage
    +
    +
    Creates a new TranslatableMessage associated with the given translation + key, without any associated variables.
    +
    +
    TranslatableMessage(String, Object) - Constructor for class org.apache.guacamole.language.TranslatableMessage
    +
    +
    Creates a new TranslatableMessage associated with the given translation + key and associated variables.
    +
    +
    tunnelClosed(TunnelCloseEvent) - Method in interface org.apache.guacamole.net.event.listener.TunnelCloseListener
    +
    +
    Deprecated.
    +
    Event hook which fires immediately before an existing tunnel is closed.
    +
    +
    TunnelCloseEvent - Class in org.apache.guacamole.net.event
    +
    +
    An event which is triggered whenever a tunnel is being closed.
    +
    +
    TunnelCloseEvent(AuthenticatedUser, Credentials, GuacamoleTunnel) - Constructor for class org.apache.guacamole.net.event.TunnelCloseEvent
    +
    +
    Creates a new TunnelCloseEvent which represents the closing of the + given tunnel via a request associated with the given credentials.
    +
    +
    TunnelCloseListener - Interface in org.apache.guacamole.net.event.listener
    +
    +
    Deprecated. +
    Listeners should instead implement the Listener interface.
    +
    +
    +
    tunnelConnected(TunnelConnectEvent) - Method in interface org.apache.guacamole.net.event.listener.TunnelConnectListener
    +
    +
    Deprecated.
    +
    Event hook which fires immediately after a new tunnel is connected.
    +
    +
    TunnelConnectEvent - Class in org.apache.guacamole.net.event
    +
    +
    An event which is triggered whenever a tunnel is being connected.
    +
    +
    TunnelConnectEvent(AuthenticatedUser, Credentials, GuacamoleTunnel) - Constructor for class org.apache.guacamole.net.event.TunnelConnectEvent
    +
    +
    Creates a new TunnelConnectEvent which represents the connecting of the + given tunnel via a request associated with the given credentials.
    +
    +
    TunnelConnectListener - Interface in org.apache.guacamole.net.event.listener
    +
    +
    Deprecated. +
    Listeners should instead implement the Listener interface.
    +
    +
    +
    TunnelEvent - Interface in org.apache.guacamole.net.event
    +
    +
    Abstract basis for events associated with tunnels.
    +
    +
    Type() - Constructor for class org.apache.guacamole.form.Field.Type
    +
     
    +
    TYPESCRIPT - org.apache.guacamole.net.auth.ActivityLog.Type
    +
    +
    A text session recording in the form of a standard typescript.
    +
    +
    TYPESCRIPT_TIMING - org.apache.guacamole.net.auth.ActivityLog.Type
    +
    +
    The timing file related to a typescript.
    +
    +
    + + + +

    U

    +
    +
    undecorate(ObjectType) - Method in class org.apache.guacamole.net.auth.DecoratingDirectory
    +
    +
    Given an object originally returned from a call to this + DecoratingDirectory's decorate() function, reverses the decoration + operation, returning the original object.
    +
    +
    UNKNOWN_SIZE - Static variable in interface org.apache.guacamole.net.auth.ActivityLog
    +
    +
    The value returned by ActivityLog.getSize() if the number of available + bytes within ActivityLog.getContent() is unknown.
    +
    +
    unsetToken(String) - Method in class org.apache.guacamole.token.TokenFilter
    +
    +
    Removes the value of the token with the given name.
    +
    +
    update(ObjectType) - Method in class org.apache.guacamole.net.auth.DecoratingDirectory
    +
     
    +
    update(ObjectType) - Method in class org.apache.guacamole.net.auth.DelegatingDirectory
    +
     
    +
    update(ObjectType) - Method in interface org.apache.guacamole.net.auth.Directory
    +
    +
    Updates the stored object with the data contained in the given object.
    +
    +
    update(ObjectType) - Method in class org.apache.guacamole.net.auth.simple.SimpleDirectory
    +
     
    +
    UPDATE - org.apache.guacamole.net.auth.permission.ObjectPermission.Type
    +
    +
    Update data within an object.
    +
    +
    updateAuthenticatedUser(AuthenticatedUser, Credentials) - Method in class org.apache.guacamole.net.auth.AbstractAuthenticationProvider
    +
    +
    Returns a new or updated AuthenticatedUser for the given credentials + already having produced the given AuthenticatedUser.
    +
    +
    updateAuthenticatedUser(AuthenticatedUser, Credentials) - Method in interface org.apache.guacamole.net.auth.AuthenticationProvider
    +
    +
    Returns a new or updated AuthenticatedUser for the given credentials + already having produced the given AuthenticatedUser.
    +
    +
    updateUserContext(UserContext, AuthenticatedUser, Credentials) - Method in class org.apache.guacamole.net.auth.AbstractAuthenticationProvider
    +
    +
    Returns a new or updated UserContext for the given AuthenticatedUser + already having the given UserContext.
    +
    +
    updateUserContext(UserContext, AuthenticatedUser, Credentials) - Method in interface org.apache.guacamole.net.auth.AuthenticationProvider
    +
    +
    Returns a new or updated UserContext for the given AuthenticatedUser + already having the given UserContext.
    +
    +
    URIGuacamoleProperty - Class in org.apache.guacamole.properties
    +
    +
    A GuacamoleProperty whose value is a URI.
    +
    +
    URIGuacamoleProperty() - Constructor for class org.apache.guacamole.properties.URIGuacamoleProperty
    +
     
    +
    User - Interface in org.apache.guacamole.net.auth
    +
    +
    A user of the Guacamole web application.
    +
    +
    User.Attribute - Class in org.apache.guacamole.net.auth
    +
    +
    All standard attribute names with semantics defined by the Guacamole web + application.
    +
    +
    UserContext - Interface in org.apache.guacamole.net.auth
    +
    +
    The context of an active user.
    +
    +
    UserCredentials - Class in org.apache.guacamole.net.auth.credentials
    +
    +
    A fully-valid set of credentials and associated values.
    +
    +
    UserCredentials(Collection<Field>) - Constructor for class org.apache.guacamole.net.auth.credentials.UserCredentials
    +
    +
    Creates a new UserCredentials object which requires the given fields but + does not yet have any defined values.
    +
    +
    UserCredentials(Collection<Field>, Map<String, String>) - Constructor for class org.apache.guacamole.net.auth.credentials.UserCredentials
    +
    +
    Creates a new UserCredentials object which requires the given fields and + values.
    +
    +
    UserCredentials(CredentialsInfo) - Constructor for class org.apache.guacamole.net.auth.credentials.UserCredentials
    +
    +
    Creates a new UserCredentials object which requires fields described by + the given CredentialsInfo but does not yet have any defined values.
    +
    +
    UserCredentials(CredentialsInfo, Map<String, String>) - Constructor for class org.apache.guacamole.net.auth.credentials.UserCredentials
    +
    +
    Creates a new UserCredentials object which requires fields described by + the given CredentialsInfo.
    +
    +
    UserEvent - Interface in org.apache.guacamole.net.event
    +
    +
    Abstract basis for events which may have an associated AuthenticatedUser when + triggered.
    +
    +
    UserGroup - Interface in org.apache.guacamole.net.auth
    +
    +
    A user group of the Guacamole web application.
    +
    +
    USERNAME - Static variable in class org.apache.guacamole.form.Field.Type
    +
    +
    A username field.
    +
    +
    USERNAME - Static variable in class org.apache.guacamole.net.auth.credentials.CredentialsInfo
    +
    +
    A field describing the username HTTP parameter expected by Guacamole + during login, if usernames are being used.
    +
    +
    USERNAME_PASSWORD - Static variable in class org.apache.guacamole.net.auth.credentials.CredentialsInfo
    +
    +
    CredentialsInfo object which describes standard username/password + credentials.
    +
    +
    USERNAME_TOKEN - Static variable in class org.apache.guacamole.token.StandardTokens
    +
    +
    Deprecated.
    +
    The name of the username token added via addStandardTokens().
    +
    +
    UsernameField - Class in org.apache.guacamole.form
    +
    +
    Represents a text field which will contain the uniquely-identifying name of + a user.
    +
    +
    UsernameField(String) - Constructor for class org.apache.guacamole.form.UsernameField
    +
    +
    Creates a new UsernameField with the given name.
    +
    +
    + + + +

    V

    +
    +
    value() - Method in annotation type org.apache.guacamole.properties.EnumGuacamoleProperty.PropertyValue
    +
    +
    Returns the String value that should produce the annotated enum + constant when parsed.
    +
    +
    valueOf(String) - Static method in enum org.apache.guacamole.net.auth.ActivityLog.Type
    +
    +
    Returns the enum constant of this type with the specified name.
    +
    +
    valueOf(String) - Static method in enum org.apache.guacamole.net.auth.ActivityRecordSet.SortableProperty
    +
    +
    Returns the enum constant of this type with the specified name.
    +
    +
    valueOf(String) - Static method in enum org.apache.guacamole.net.auth.ConnectionGroup.Type
    +
    +
    Returns the enum constant of this type with the specified name.
    +
    +
    valueOf(String) - Static method in enum org.apache.guacamole.net.auth.GuacamoleProxyConfiguration.EncryptionMethod
    +
    +
    Returns the enum constant of this type with the specified name.
    +
    +
    valueOf(String) - Static method in enum org.apache.guacamole.net.auth.permission.ObjectPermission.Type
    +
    +
    Returns the enum constant of this type with the specified name.
    +
    +
    valueOf(String) - Static method in enum org.apache.guacamole.net.auth.permission.SystemPermission.Type
    +
    +
    Returns the enum constant of this type with the specified name.
    +
    +
    values() - Static method in enum org.apache.guacamole.net.auth.ActivityLog.Type
    +
    +
    Returns an array containing the constants of this enum type, in +the order they are declared.
    +
    +
    values() - Static method in enum org.apache.guacamole.net.auth.ActivityRecordSet.SortableProperty
    +
    +
    Returns an array containing the constants of this enum type, in +the order they are declared.
    +
    +
    values() - Static method in enum org.apache.guacamole.net.auth.ConnectionGroup.Type
    +
    +
    Returns an array containing the constants of this enum type, in +the order they are declared.
    +
    +
    values() - Static method in enum org.apache.guacamole.net.auth.GuacamoleProxyConfiguration.EncryptionMethod
    +
    +
    Returns an array containing the constants of this enum type, in +the order they are declared.
    +
    +
    values() - Static method in enum org.apache.guacamole.net.auth.permission.ObjectPermission.Type
    +
    +
    Returns an array containing the constants of this enum type, in +the order they are declared.
    +
    +
    values() - Static method in enum org.apache.guacamole.net.auth.permission.SystemPermission.Type
    +
    +
    Returns an array containing the constants of this enum type, in +the order they are declared.
    +
    +
    +A B C D E F G H I L M N O P Q R S T U V 
    All Classes All Packages
    +
    +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/index.html b/doc/1.5.5/guacamole-ext/index.html new file mode 100644 index 000000000..90c87c152 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/index.html @@ -0,0 +1,237 @@ + + + + + +Overview (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    guacamole-ext 1.5.5 API

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Packages 
    PackageDescription
    org.apache.guacamole.environment 
    org.apache.guacamole.form +
    Provides classes which describe the contents and semantics of forms which + may be presented to the user.
    +
    org.apache.guacamole.language 
    org.apache.guacamole.net.auth +
    Provides classes which can be used to extend or replace the authentication + functionality of the Guacamole web application.
    +
    org.apache.guacamole.net.auth.credentials 
    org.apache.guacamole.net.auth.permission +
    Provides classes which describe the various permissions a Guacamole user + can be granted.
    +
    org.apache.guacamole.net.auth.simple +
    Provides a basic AuthenticationProvider base class that can be used to create + simple AuthenticationProviders in the same way allowed by the old + authentication API.
    +
    org.apache.guacamole.net.event +
    Provides classes for storing information about events that are + triggered when users log into and use the Guacamole web application.
    +
    org.apache.guacamole.net.event.listener +
    Provides classes for hooking into various events that take place as + users log into and use the Guacamole web application.
    +
    org.apache.guacamole.properties +
    Provides classes for reading properties from the web-application-wide + guacamole.properties file.
    +
    org.apache.guacamole.protocols 
    org.apache.guacamole.token 
    org.apache.guacamole.xml +
    Classes driving the SAX-based XML parser used by the Guacamole web + application.
    +
    +
    +
    +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/jquery-ui.overrides.css b/doc/1.5.5/guacamole-ext/jquery-ui.overrides.css new file mode 100644 index 000000000..facf852c2 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/jquery-ui.overrides.css @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2020, 2022, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +.ui-state-active, +.ui-widget-content .ui-state-active, +.ui-widget-header .ui-state-active, +a.ui-button:active, +.ui-button:active, +.ui-button.ui-state-active:hover { + /* Overrides the color of selection used in jQuery UI */ + background: #F8981D; + border: 1px solid #F8981D; +} diff --git a/doc/1.5.5/guacamole-ext/jquery/external/jquery/jquery.js b/doc/1.5.5/guacamole-ext/jquery/external/jquery/jquery.js new file mode 100644 index 000000000..50937333b --- /dev/null +++ b/doc/1.5.5/guacamole-ext/jquery/external/jquery/jquery.js @@ -0,0 +1,10872 @@ +/*! + * jQuery JavaScript Library v3.5.1 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2020-05-04T22:49Z + */ +( function( global, factory ) { + + "use strict"; + + if ( typeof module === "object" && typeof module.exports === "object" ) { + + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 +// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode +// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common +// enough that all such attempts are guarded in a try block. +"use strict"; + +var arr = []; + +var getProto = Object.getPrototypeOf; + +var slice = arr.slice; + +var flat = arr.flat ? function( array ) { + return arr.flat.call( array ); +} : function( array ) { + return arr.concat.apply( [], array ); +}; + + +var push = arr.push; + +var indexOf = arr.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var fnToString = hasOwn.toString; + +var ObjectFunctionString = fnToString.call( Object ); + +var support = {}; + +var isFunction = function isFunction( obj ) { + + // Support: Chrome <=57, Firefox <=52 + // In some browsers, typeof returns "function" for HTML elements + // (i.e., `typeof document.createElement( "object" ) === "function"`). + // We don't want to classify *any* DOM node as a function. + return typeof obj === "function" && typeof obj.nodeType !== "number"; + }; + + +var isWindow = function isWindow( obj ) { + return obj != null && obj === obj.window; + }; + + +var document = window.document; + + + + var preservedScriptAttributes = { + type: true, + src: true, + nonce: true, + noModule: true + }; + + function DOMEval( code, node, doc ) { + doc = doc || document; + + var i, val, + script = doc.createElement( "script" ); + + script.text = code; + if ( node ) { + for ( i in preservedScriptAttributes ) { + + // Support: Firefox 64+, Edge 18+ + // Some browsers don't support the "nonce" property on scripts. + // On the other hand, just using `getAttribute` is not enough as + // the `nonce` attribute is reset to an empty string whenever it + // becomes browsing-context connected. + // See https://github.com/whatwg/html/issues/2369 + // See https://html.spec.whatwg.org/#nonce-attributes + // The `node.getAttribute` check was added for the sake of + // `jQuery.globalEval` so that it can fake a nonce-containing node + // via an object. + val = node[ i ] || node.getAttribute && node.getAttribute( i ); + if ( val ) { + script.setAttribute( i, val ); + } + } + } + doc.head.appendChild( script ).parentNode.removeChild( script ); + } + + +function toType( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; +} +/* global Symbol */ +// Defining this global in .eslintrc.json would create a danger of using the global +// unguarded in another place, it seems safer to define global only for this module + + + +var + version = "3.5.1", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + + // Return all the elements in a clean array + if ( num == null ) { + return slice.call( this ); + } + + // Return just the one element from the set + return num < 0 ? this[ num + this.length ] : this[ num ]; + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + even: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return ( i + 1 ) % 2; + } ) ); + }, + + odd: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return i % 2; + } ) ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + copy = options[ name ]; + + // Prevent Object.prototype pollution + // Prevent never-ending loop + if ( name === "__proto__" || target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = Array.isArray( copy ) ) ) ) { + src = target[ name ]; + + // Ensure proper type for the source value + if ( copyIsArray && !Array.isArray( src ) ) { + clone = []; + } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { + clone = {}; + } else { + clone = src; + } + copyIsArray = false; + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + // Evaluates a script in a provided context; falls back to the global one + // if not specified. + globalEval: function( code, options, doc ) { + DOMEval( code, { nonce: options && options.nonce }, doc ); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return flat( ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), +function( _i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +} ); + +function isArrayLike( obj ) { + + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = toType( obj ); + + if ( isFunction( obj ) || isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.3.5 + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://js.foundation/ + * + * Date: 2020-03-14 + */ +( function( window ) { +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + nonnativeSelectorCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // Instance methods + hasOwn = ( {} ).hasOwnProperty, + arr = [], + pop = arr.pop, + pushNative = arr.push, + push = arr.push, + slice = arr.slice, + + // Use a stripped-down indexOf as it's faster than native + // https://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[ i ] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" + + "ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram + identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + + // "Attribute values must be CSS identifiers [capture 5] + // or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + + whitespace + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + + "*" ), + rdescend = new RegExp( whitespace + "|>" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rhtml = /HTML$/i, + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + + // CSS escapes + // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ), + funescape = function( escape, nonHex ) { + var high = "0x" + escape.slice( 1 ) - 0x10000; + + return nonHex ? + + // Strip the backslash prefix from a non-hex escape sequence + nonHex : + + // Replace a hexadecimal escape sequence with the encoded Unicode code point + // Support: IE <=11+ + // For values outside the Basic Multilingual Plane (BMP), manually construct a + // surrogate pair + high < 0 ? + String.fromCharCode( high + 0x10000 ) : + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // CSS string/identifier serialization + // https://drafts.csswg.org/cssom/#common-serializing-idioms + rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, + fcssescape = function( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }, + + inDisabledFieldset = addCombinator( + function( elem ) { + return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; + }, + { dir: "parentNode", next: "legend" } + ); + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + ( arr = slice.call( preferredDoc.childNodes ) ), + preferredDoc.childNodes + ); + + // Support: Android<4.0 + // Detect silently failing push.apply + // eslint-disable-next-line no-unused-expressions + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + pushNative.apply( target, slice.call( els ) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + + // Can't trust NodeList.length + while ( ( target[ j++ ] = els[ i++ ] ) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + setDocument( context ); + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { + + // ID selector + if ( ( m = match[ 1 ] ) ) { + + // Document context + if ( nodeType === 9 ) { + if ( ( elem = context.getElementById( m ) ) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && ( elem = newContext.getElementById( m ) ) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[ 2 ] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( ( m = match[ 3 ] ) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !nonnativeSelectorCache[ selector + " " ] && + ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) && + + // Support: IE 8 only + // Exclude object elements + ( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) { + + newSelector = selector; + newContext = context; + + // qSA considers elements outside a scoping root when evaluating child or + // descendant combinators, which is not what we want. + // In such cases, we work around the behavior by prefixing every selector in the + // list with an ID selector referencing the scope context. + // The technique has to be used as well when a leading combinator is used + // as such selectors are not recognized by querySelectorAll. + // Thanks to Andrew Dupont for this technique. + if ( nodeType === 1 && + ( rdescend.test( selector ) || rcombinators.test( selector ) ) ) { + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + + // We can use :scope instead of the ID hack if the browser + // supports it & if we're not changing the context. + if ( newContext !== context || !support.scope ) { + + // Capture the context ID, setting it first if necessary + if ( ( nid = context.getAttribute( "id" ) ) ) { + nid = nid.replace( rcssescape, fcssescape ); + } else { + context.setAttribute( "id", ( nid = expando ) ); + } + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + + toSelector( groups[ i ] ); + } + newSelector = groups.join( "," ); + } + + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + nonnativeSelectorCache( selector, true ); + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return ( cache[ key + " " ] = value ); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created element and returns a boolean result + */ +function assert( fn ) { + var el = document.createElement( "fieldset" ); + + try { + return !!fn( el ); + } catch ( e ) { + return false; + } finally { + + // Remove from its parent by default + if ( el.parentNode ) { + el.parentNode.removeChild( el ); + } + + // release memory in IE + el = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split( "|" ), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[ i ] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + a.sourceIndex - b.sourceIndex; + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( ( cur = cur.nextSibling ) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return ( name === "input" || name === "button" ) && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for :enabled/:disabled + * @param {Boolean} disabled true for :disabled; false for :enabled + */ +function createDisabledPseudo( disabled ) { + + // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Only certain elements can match :enabled or :disabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled + if ( "form" in elem ) { + + // Check for inherited disabledness on relevant non-disabled elements: + // * listed form-associated elements in a disabled fieldset + // https://html.spec.whatwg.org/multipage/forms.html#category-listed + // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled + // * option elements in a disabled optgroup + // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled + // All such elements have a "form" property. + if ( elem.parentNode && elem.disabled === false ) { + + // Option elements defer to a parent optgroup if present + if ( "label" in elem ) { + if ( "label" in elem.parentNode ) { + return elem.parentNode.disabled === disabled; + } else { + return elem.disabled === disabled; + } + } + + // Support: IE 6 - 11 + // Use the isDisabled shortcut property to check for disabled fieldset ancestors + return elem.isDisabled === disabled || + + // Where there is no isDisabled, check manually + /* jshint -W018 */ + elem.isDisabled !== !disabled && + inDisabledFieldset( elem ) === disabled; + } + + return elem.disabled === disabled; + + // Try to winnow out elements that can't be disabled before trusting the disabled property. + // Some victims get caught in our net (label, legend, menu, track), but it shouldn't + // even exist on them, let alone have a boolean value. + } else if ( "label" in elem ) { + return elem.disabled === disabled; + } + + // Remaining elements are neither :enabled nor :disabled + return false; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction( function( argument ) { + argument = +argument; + return markFunction( function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ ( j = matchIndexes[ i ] ) ] ) { + seed[ j ] = !( matches[ j ] = seed[ j ] ); + } + } + } ); + } ); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + var namespace = elem.namespaceURI, + docElem = ( elem.ownerDocument || elem ).documentElement; + + // Support: IE <=8 + // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes + // https://bugs.jquery.com/ticket/4833 + return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, subWindow, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9 - 11+, Edge 12 - 18+ + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( preferredDoc != document && + ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { + + // Support: IE 11, Edge + if ( subWindow.addEventListener ) { + subWindow.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( subWindow.attachEvent ) { + subWindow.attachEvent( "onunload", unloadHandler ); + } + } + + // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only, + // Safari 4 - 5 only, Opera <=11.6 - 12.x only + // IE/Edge & older browsers don't support the :scope pseudo-class. + // Support: Safari 6.0 only + // Safari 6.0 supports :scope but it's an alias of :root there. + support.scope = assert( function( el ) { + docElem.appendChild( el ).appendChild( document.createElement( "div" ) ); + return typeof el.querySelectorAll !== "undefined" && + !el.querySelectorAll( ":scope fieldset div" ).length; + } ); + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert( function( el ) { + el.className = "i"; + return !el.getAttribute( "className" ); + } ); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert( function( el ) { + el.appendChild( document.createComment( "" ) ); + return !el.getElementsByTagName( "*" ).length; + } ); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programmatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert( function( el ) { + docElem.appendChild( el ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + } ); + + // ID filter and find + if ( support.getById ) { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute( "id" ) === attrId; + }; + }; + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var elem = context.getElementById( id ); + return elem ? [ elem ] : []; + } + }; + } else { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode( "id" ); + return node && node.value === attrId; + }; + }; + + // Support: IE 6 - 7 only + // getElementById is not reliable as a find shortcut + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var node, i, elems, + elem = context.getElementById( id ); + + if ( elem ) { + + // Verify the id attribute + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + + // Fall back on getElementsByName + elems = context.getElementsByName( id ); + i = 0; + while ( ( elem = elems[ i++ ] ) ) { + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + } + } + + return []; + } + }; + } + + // Tag + Expr.find[ "TAG" ] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See https://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) { + + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert( function( el ) { + + var input; + + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // https://bugs.jquery.com/ticket/12359 + docElem.appendChild( el ).innerHTML = "" + + ""; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !el.querySelectorAll( "[selected]" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push( "~=" ); + } + + // Support: IE 11+, Edge 15 - 18+ + // IE 11/Edge don't find elements on a `[name='']` query in some cases. + // Adding a temporary attribute to the document before the selection works + // around the issue. + // Interestingly, IE 10 & older don't seem to have the issue. + input = document.createElement( "input" ); + input.setAttribute( "name", "" ); + el.appendChild( input ); + if ( !el.querySelectorAll( "[name='']" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + + whitespace + "*(?:''|\"\")" ); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !el.querySelectorAll( ":checked" ).length ) { + rbuggyQSA.push( ":checked" ); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibling-combinator selector` fails + if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push( ".#.+[+~]" ); + } + + // Support: Firefox <=3.6 - 5 only + // Old Firefox doesn't throw on a badly-escaped identifier. + el.querySelectorAll( "\\\f" ); + rbuggyQSA.push( "[\\r\\n\\f]" ); + } ); + + assert( function( el ) { + el.innerHTML = "" + + ""; + + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement( "input" ); + input.setAttribute( "type", "hidden" ); + el.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( el.querySelectorAll( "[name=d]" ).length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( el.querySelectorAll( ":enabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: IE9-11+ + // IE's :disabled selector does not pick up the children of disabled fieldsets + docElem.appendChild( el ).disabled = true; + if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: Opera 10 - 11 only + // Opera 10-11 does not throw on post-comma invalid pseudos + el.querySelectorAll( "*,:x" ); + rbuggyQSA.push( ",.*:" ); + } ); + } + + if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector ) ) ) ) { + + assert( function( el ) { + + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( el, "*" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( el, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + } ); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully self-exclusive + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + ) ); + } : + function( a, b ) { + if ( b ) { + while ( ( b = b.parentNode ) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { + + // Choose the first element that is related to our preferred document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( a == document || a.ownerDocument == preferredDoc && + contains( preferredDoc, a ) ) { + return -1; + } + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( b == document || b.ownerDocument == preferredDoc && + contains( preferredDoc, b ) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + return a == document ? -1 : + b == document ? 1 : + /* eslint-enable eqeqeq */ + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( ( cur = cur.parentNode ) ) { + ap.unshift( cur ); + } + cur = b; + while ( ( cur = cur.parentNode ) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[ i ] === bp[ i ] ) { + i++; + } + + return i ? + + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[ i ], bp[ i ] ) : + + // Otherwise nodes in our document sort first + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + ap[ i ] == preferredDoc ? -1 : + bp[ i ] == preferredDoc ? 1 : + /* eslint-enable eqeqeq */ + 0; + }; + + return document; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + setDocument( elem ); + + if ( support.matchesSelector && documentIsHTML && + !nonnativeSelectorCache[ expr + " " ] && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch ( e ) { + nonnativeSelectorCache( expr, true ); + } + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( context.ownerDocument || context ) != document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( elem.ownerDocument || elem ) != document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + ( val = elem.getAttributeNode( name ) ) && val.specified ? + val.value : + null; +}; + +Sizzle.escape = function( sel ) { + return ( sel + "" ).replace( rcssescape, fcssescape ); +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + + // If no nodeType, this is expected to be an array + while ( ( node = elem[ i++ ] ) ) { + + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[ 1 ] = match[ 1 ].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[ 3 ] = ( match[ 3 ] || match[ 4 ] || + match[ 5 ] || "" ).replace( runescape, funescape ); + + if ( match[ 2 ] === "~=" ) { + match[ 3 ] = " " + match[ 3 ] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[ 1 ] = match[ 1 ].toLowerCase(); + + if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { + + // nth-* requires argument + if ( !match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[ 4 ] = +( match[ 4 ] ? + match[ 5 ] + ( match[ 6 ] || 1 ) : + 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) ); + match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); + + // other types prohibit arguments + } else if ( match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[ 6 ] && match[ 2 ]; + + if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[ 3 ] ) { + match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + + // Get excess from tokenize (recursively) + ( excess = tokenize( unquoted, true ) ) && + + // advance to the next closing parenthesis + ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { + + // excess is a negative index + match[ 0 ] = match[ 0 ].slice( 0, excess ); + match[ 2 ] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { + return true; + } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + ( pattern = new RegExp( "(^|" + whitespace + + ")" + className + "(" + whitespace + "|$)" ) ) && classCache( + className, function( elem ) { + return pattern.test( + typeof elem.className === "string" && elem.className || + typeof elem.getAttribute !== "undefined" && + elem.getAttribute( "class" ) || + "" + ); + } ); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + /* eslint-disable max-len */ + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + /* eslint-enable max-len */ + + }; + }, + + "CHILD": function( type, what, _argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, _context, xml ) { + var cache, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( ( node = node[ dir ] ) ) { + if ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) { + + return false; + } + } + + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( ( node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + + // Use previously-cached element index if available + if ( useCache ) { + + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + + // Use the same loop as above to seek `elem` from the start + while ( ( node = ++nodeIndex && node && node[ dir ] || + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + if ( ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || + ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + uniqueCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction( function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[ i ] ); + seed[ idx ] = !( matches[ idx ] = matched[ i ] ); + } + } ) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + + // Potentially complex pseudos + "not": markFunction( function( selector ) { + + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction( function( seed, matches, _context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( ( elem = unmatched[ i ] ) ) { + seed[ i ] = !( matches[ i ] = elem ); + } + } + } ) : + function( elem, _context, xml ) { + input[ 0 ] = elem; + matcher( input, null, xml, results ); + + // Don't keep the element (issue #299) + input[ 0 ] = null; + return !results.pop(); + }; + } ), + + "has": markFunction( function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + } ), + + "contains": markFunction( function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1; + }; + } ), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + + // lang value must be a valid identifier + if ( !ridentifier.test( lang || "" ) ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( ( elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); + return false; + }; + } ), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && + ( !document.hasFocus || document.hasFocus() ) && + !!( elem.type || elem.href || ~elem.tabIndex ); + }, + + // Boolean properties + "enabled": createDisabledPseudo( false ), + "disabled": createDisabledPseudo( true ), + + "checked": function( elem ) { + + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return ( nodeName === "input" && !!elem.checked ) || + ( nodeName === "option" && !!elem.selected ); + }, + + "selected": function( elem ) { + + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + // eslint-disable-next-line no-unused-expressions + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos[ "empty" ]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( ( attr = elem.getAttribute( "type" ) ) == null || + attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo( function() { + return [ 0 ]; + } ), + + "last": createPositionalPseudo( function( _matchIndexes, length ) { + return [ length - 1 ]; + } ), + + "eq": createPositionalPseudo( function( _matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + } ), + + "even": createPositionalPseudo( function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "odd": createPositionalPseudo( function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "lt": createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? + argument + length : + argument > length ? + length : + argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "gt": createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ) + } +}; + +Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || ( match = rcomma.exec( soFar ) ) ) { + if ( match ) { + + // Don't consume trailing commas as valid + soFar = soFar.slice( match[ 0 ].length ) || soFar; + } + groups.push( ( tokens = [] ) ); + } + + matched = false; + + // Combinators + if ( ( match = rcombinators.exec( soFar ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + + // Cast descendant combinators to space + type: match[ 0 ].replace( rtrim, " " ) + } ); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || + ( match = preFilters[ type ]( match ) ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + type: type, + matches: match + } ); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +}; + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[ i ].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + skip = combinator.next, + key = skip || dir, + checkNonElements = base && key === "parentNode", + doneName = done++; + + return combinator.first ? + + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + return false; + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || ( elem[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || + ( outerCache[ elem.uniqueID ] = {} ); + + if ( skip && skip === elem.nodeName.toLowerCase() ) { + elem = elem[ dir ] || elem; + } else if ( ( oldCache = uniqueCache[ key ] ) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return ( newCache[ 2 ] = oldCache[ 2 ] ); + } else { + + // Reuse newcache so results back-propagate to previous elements + uniqueCache[ key ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { + return true; + } + } + } + } + } + return false; + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[ i ]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[ 0 ]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[ i ], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( ( elem = unmatched[ i ] ) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction( function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( + selector || "*", + context.nodeType ? [ context ] : context, + [] + ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( ( elem = temp[ i ] ) ) { + matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) ) { + + // Restore matcherIn since elem is not yet a final match + temp.push( ( matcherIn[ i ] = elem ) ); + } + } + postFinder( null, ( matcherOut = [] ), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) && + ( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) { + + seed[ temp ] = !( results[ temp ] = elem ); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + } ); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[ 0 ].type ], + implicitRelative = leadingRelative || Expr.relative[ " " ], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + ( checkContext = context ).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { + matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; + } else { + matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[ j ].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens + .slice( 0, i - 1 ) + .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ), + + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), + len = elems.length; + + if ( outermost ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + outermostContext = context == document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id + for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( !context && elem.ownerDocument != document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( ( matcher = elementMatchers[ j++ ] ) ) { + if ( matcher( elem, context || document, xml ) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + + // They will have gone through all possible matchers + if ( ( elem = !matcher && elem ) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + if ( bySet && i !== matchedCount ) { + j = 0; + while ( ( matcher = setMatchers[ j++ ] ) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !( unmatched[ i ] || setMatched[ i ] ) ) { + setMatched[ i ] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[ i ] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( + selector, + matcherFromGroupMatchers( elementMatchers, setMatchers ) + ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( ( selector = compiled.selector || selector ) ); + + results = results || []; + + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[ 0 ] = match[ 0 ].slice( 0 ); + if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && + context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { + + context = ( Expr.find[ "ID" ]( token.matches[ 0 ] + .replace( runescape, funescape ), context ) || [] )[ 0 ]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[ i ]; + + // Abort if we hit a combinator + if ( Expr.relative[ ( type = token.type ) ] ) { + break; + } + if ( ( find = Expr.find[ type ] ) ) { + + // Search, expanding context for leading sibling combinators + if ( ( seed = find( + token.matches[ 0 ].replace( runescape, funescape ), + rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) || + context + ) ) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + +// One-time assignments + +// Sort stability +support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; + +// Support: Chrome 14-35+ +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = !!hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert( function( el ) { + + // Should return 1, but returns 4 (following) + return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; +} ); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert( function( el ) { + el.innerHTML = ""; + return el.firstChild.getAttribute( "href" ) === "#"; +} ) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + } ); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert( function( el ) { + el.innerHTML = ""; + el.firstChild.setAttribute( "value", "" ); + return el.firstChild.getAttribute( "value" ) === ""; +} ) ) { + addHandle( "value", function( elem, _name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + } ); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert( function( el ) { + return el.getAttribute( "disabled" ) == null; +} ) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + ( val = elem.getAttributeNode( name ) ) && val.specified ? + val.value : + null; + } + } ); +} + +return Sizzle; + +} )( window ); + + + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; + +// Deprecated +jQuery.expr[ ":" ] = jQuery.expr.pseudos; +jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; +jQuery.escapeSelector = Sizzle.escape; + + + + +var dir = function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; +}; + + +var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; +}; + + +var rneedsContext = jQuery.expr.match.needsContext; + + + +function nodeName( elem, name ) { + + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + +}; +var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); + + + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + return !!qualifier.call( elem, i, elem ) !== not; + } ); + } + + // Single element + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + } + + // Arraylike of elements (jQuery, arguments, Array) + if ( typeof qualifier !== "string" ) { + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + } ); + } + + // Filtered directly for both simple and complex selectors + return jQuery.filter( qualifier, elements, not ); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + if ( elems.length === 1 && elem.nodeType === 1 ) { + return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; + } + + return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); +}; + +jQuery.fn.extend( { + find: function( selector ) { + var i, ret, + len = this.length, + self = this; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter( function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + } ) ); + } + + ret = this.pushStack( [] ); + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + return len > 1 ? jQuery.uniqueSort( ret ) : ret; + }, + filter: function( selector ) { + return this.pushStack( winnow( this, selector || [], false ) ); + }, + not: function( selector ) { + return this.pushStack( winnow( this, selector || [], true ) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +} ); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + // Shortcut simple #id case for speed + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Method init() accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[ 0 ] === "<" && + selector[ selector.length - 1 ] === ">" && + selector.length >= 3 ) { + + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && ( match[ 1 ] || !context ) ) { + + // HANDLE: $(html) -> $(array) + if ( match[ 1 ] ) { + context = context instanceof jQuery ? context[ 0 ] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[ 1 ], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + + // Properties of context are called as methods if possible + if ( isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[ 2 ] ); + + if ( elem ) { + + // Inject the element directly into the jQuery object + this[ 0 ] = elem; + this.length = 1; + } + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + + // Methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend( { + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter( function() { + var i = 0; + for ( ; i < l; i++ ) { + if ( jQuery.contains( this, targets[ i ] ) ) { + return true; + } + } + } ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + targets = typeof selectors !== "string" && jQuery( selectors ); + + // Positional selectors never match, since there's no _selection_ context + if ( !rneedsContext.test( selectors ) ) { + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( targets ? + targets.index( cur ) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector( cur, selectors ) ) ) { + + matched.push( cur ); + break; + } + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.uniqueSort( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + } +} ); + +function sibling( cur, dir ) { + while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} + return cur; +} + +jQuery.each( { + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, _i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, _i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, _i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + if ( elem.contentDocument != null && + + // Support: IE 11+ + // elements with no `data` attribute has an object + // `contentDocument` with a `null` prototype. + getProto( elem.contentDocument ) ) { + + return elem.contentDocument; + } + + // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only + // Treat the template element as a regular one in browsers that + // don't support it. + if ( nodeName( elem, "template" ) ) { + elem = elem.content || elem; + } + + return jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +} ); +var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); + + + +// Convert String-formatted options into Object-formatted ones +function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { + object[ flag ] = true; + } ); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + createOptions( options ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + + // Last fire value for non-forgettable lists + memory, + + // Flag to know if list was already fired + fired, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = locked || options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && toType( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; + } + } + } ); + return this; + }, + + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? + jQuery.inArray( fn, list ) > -1 : + list.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory && !firing ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + return this; + }, + + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +function Identity( v ) { + return v; +} +function Thrower( ex ) { + throw ex; +} + +function adoptValue( value, resolve, reject, noValue ) { + var method; + + try { + + // Check for promise aspect first to privilege synchronous behavior + if ( value && isFunction( ( method = value.promise ) ) ) { + method.call( value ).done( resolve ).fail( reject ); + + // Other thenables + } else if ( value && isFunction( ( method = value.then ) ) ) { + method.call( value, resolve, reject ); + + // Other non-thenables + } else { + + // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: + // * false: [ value ].slice( 0 ) => resolve( value ) + // * true: [ value ].slice( 1 ) => resolve() + resolve.apply( undefined, [ value ].slice( noValue ) ); + } + + // For Promises/A+, convert exceptions into rejections + // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in + // Deferred#then to conditionally suppress rejection. + } catch ( value ) { + + // Support: Android 4.0 only + // Strict mode functions invoked without .call/.apply get global-object context + reject.apply( undefined, [ value ] ); + } +} + +jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, callbacks, + // ... .then handlers, argument index, [final state] + [ "notify", "progress", jQuery.Callbacks( "memory" ), + jQuery.Callbacks( "memory" ), 2 ], + [ "resolve", "done", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 0, "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 1, "rejected" ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + "catch": function( fn ) { + return promise.then( null, fn ); + }, + + // Keep pipe for back-compat + pipe: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( _i, tuple ) { + + // Map tuples (progress, done, fail) to arguments (done, fail, progress) + var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; + + // deferred.progress(function() { bind to newDefer or newDefer.notify }) + // deferred.done(function() { bind to newDefer or newDefer.resolve }) + // deferred.fail(function() { bind to newDefer or newDefer.reject }) + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + then: function( onFulfilled, onRejected, onProgress ) { + var maxDepth = 0; + function resolve( depth, deferred, handler, special ) { + return function() { + var that = this, + args = arguments, + mightThrow = function() { + var returned, then; + + // Support: Promises/A+ section 2.3.3.3.3 + // https://promisesaplus.com/#point-59 + // Ignore double-resolution attempts + if ( depth < maxDepth ) { + return; + } + + returned = handler.apply( that, args ); + + // Support: Promises/A+ section 2.3.1 + // https://promisesaplus.com/#point-48 + if ( returned === deferred.promise() ) { + throw new TypeError( "Thenable self-resolution" ); + } + + // Support: Promises/A+ sections 2.3.3.1, 3.5 + // https://promisesaplus.com/#point-54 + // https://promisesaplus.com/#point-75 + // Retrieve `then` only once + then = returned && + + // Support: Promises/A+ section 2.3.4 + // https://promisesaplus.com/#point-64 + // Only check objects and functions for thenability + ( typeof returned === "object" || + typeof returned === "function" ) && + returned.then; + + // Handle a returned thenable + if ( isFunction( then ) ) { + + // Special processors (notify) just wait for resolution + if ( special ) { + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ) + ); + + // Normal processors (resolve) also hook into progress + } else { + + // ...and disregard older resolution values + maxDepth++; + + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ), + resolve( maxDepth, deferred, Identity, + deferred.notifyWith ) + ); + } + + // Handle all other returned values + } else { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Identity ) { + that = undefined; + args = [ returned ]; + } + + // Process the value(s) + // Default process is resolve + ( special || deferred.resolveWith )( that, args ); + } + }, + + // Only normal processors (resolve) catch and reject exceptions + process = special ? + mightThrow : + function() { + try { + mightThrow(); + } catch ( e ) { + + if ( jQuery.Deferred.exceptionHook ) { + jQuery.Deferred.exceptionHook( e, + process.stackTrace ); + } + + // Support: Promises/A+ section 2.3.3.3.4.1 + // https://promisesaplus.com/#point-61 + // Ignore post-resolution exceptions + if ( depth + 1 >= maxDepth ) { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Thrower ) { + that = undefined; + args = [ e ]; + } + + deferred.rejectWith( that, args ); + } + } + }; + + // Support: Promises/A+ section 2.3.3.3.1 + // https://promisesaplus.com/#point-57 + // Re-resolve promises immediately to dodge false rejection from + // subsequent errors + if ( depth ) { + process(); + } else { + + // Call an optional hook to record the stack, in case of exception + // since it's otherwise lost when execution goes async + if ( jQuery.Deferred.getStackHook ) { + process.stackTrace = jQuery.Deferred.getStackHook(); + } + window.setTimeout( process ); + } + }; + } + + return jQuery.Deferred( function( newDefer ) { + + // progress_handlers.add( ... ) + tuples[ 0 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onProgress ) ? + onProgress : + Identity, + newDefer.notifyWith + ) + ); + + // fulfilled_handlers.add( ... ) + tuples[ 1 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onFulfilled ) ? + onFulfilled : + Identity + ) + ); + + // rejected_handlers.add( ... ) + tuples[ 2 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onRejected ) ? + onRejected : + Thrower + ) + ); + } ).promise(); + }, + + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 5 ]; + + // promise.progress = list.add + // promise.done = list.add + // promise.fail = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( + function() { + + // state = "resolved" (i.e., fulfilled) + // state = "rejected" + state = stateString; + }, + + // rejected_callbacks.disable + // fulfilled_callbacks.disable + tuples[ 3 - i ][ 2 ].disable, + + // rejected_handlers.disable + // fulfilled_handlers.disable + tuples[ 3 - i ][ 3 ].disable, + + // progress_callbacks.lock + tuples[ 0 ][ 2 ].lock, + + // progress_handlers.lock + tuples[ 0 ][ 3 ].lock + ); + } + + // progress_handlers.fire + // fulfilled_handlers.fire + // rejected_handlers.fire + list.add( tuple[ 3 ].fire ); + + // deferred.notify = function() { deferred.notifyWith(...) } + // deferred.resolve = function() { deferred.resolveWith(...) } + // deferred.reject = function() { deferred.rejectWith(...) } + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); + return this; + }; + + // deferred.notifyWith = list.fireWith + // deferred.resolveWith = list.fireWith + // deferred.rejectWith = list.fireWith + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( singleValue ) { + var + + // count of uncompleted subordinates + remaining = arguments.length, + + // count of unprocessed arguments + i = remaining, + + // subordinate fulfillment data + resolveContexts = Array( i ), + resolveValues = slice.call( arguments ), + + // the master Deferred + master = jQuery.Deferred(), + + // subordinate callback factory + updateFunc = function( i ) { + return function( value ) { + resolveContexts[ i ] = this; + resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( !( --remaining ) ) { + master.resolveWith( resolveContexts, resolveValues ); + } + }; + }; + + // Single- and empty arguments are adopted like Promise.resolve + if ( remaining <= 1 ) { + adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, + !remaining ); + + // Use .then() to unwrap secondary thenables (cf. gh-3000) + if ( master.state() === "pending" || + isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { + + return master.then(); + } + } + + // Multiple arguments are aggregated like Promise.all array elements + while ( i-- ) { + adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); + } + + return master.promise(); + } +} ); + + +// These usually indicate a programmer mistake during development, +// warn about them ASAP rather than swallowing them by default. +var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; + +jQuery.Deferred.exceptionHook = function( error, stack ) { + + // Support: IE 8 - 9 only + // Console exists when dev tools are open, which can happen at any time + if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { + window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); + } +}; + + + + +jQuery.readyException = function( error ) { + window.setTimeout( function() { + throw error; + } ); +}; + + + + +// The deferred used on DOM ready +var readyList = jQuery.Deferred(); + +jQuery.fn.ready = function( fn ) { + + readyList + .then( fn ) + + // Wrap jQuery.readyException in a function so that the lookup + // happens at the time of error handling instead of callback + // registration. + .catch( function( error ) { + jQuery.readyException( error ); + } ); + + return this; +}; + +jQuery.extend( { + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + } +} ); + +jQuery.ready.then = readyList.then; + +// The ready event handler and self cleanup method +function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); +} + +// Catch cases where $(document).ready() is called +// after the browser event has already occurred. +// Support: IE <=9 - 10 only +// Older IE sometimes signals "interactive" too soon +if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + +} else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); +} + + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( toType( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, _key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < len; i++ ) { + fn( + elems[ i ], key, raw ? + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); + } + } + } + + if ( chainable ) { + return elems; + } + + // Gets + if ( bulk ) { + return fn.call( elems ); + } + + return len ? fn( elems[ 0 ], key ) : emptyGet; +}; + + +// Matches dashed string for camelizing +var rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g; + +// Used by camelCase as callback to replace() +function fcamelCase( _all, letter ) { + return letter.toUpperCase(); +} + +// Convert dashed to camelCase; used by the css and data modules +// Support: IE <=9 - 11, Edge 12 - 15 +// Microsoft forgot to hump their vendor prefix (#9572) +function camelCase( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); +} +var acceptData = function( owner ) { + + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); +}; + + + + +function Data() { + this.expando = jQuery.expando + Data.uid++; +} + +Data.uid = 1; + +Data.prototype = { + + cache: function( owner ) { + + // Check if the owner object already has a cache + var value = owner[ this.expando ]; + + // If not, create one + if ( !value ) { + value = {}; + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( acceptData( owner ) ) { + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable property + // configurable must be true to allow the property to be + // deleted when data is removed + } else { + Object.defineProperty( owner, this.expando, { + value: value, + configurable: true + } ); + } + } + } + + return value; + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + // Always use camelCase key (gh-2257) + if ( typeof data === "string" ) { + cache[ camelCase( data ) ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ camelCase( prop ) ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + return key === undefined ? + this.cache( owner ) : + + // Always use camelCase key (gh-2257) + owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; + }, + access: function( owner, key, value ) { + + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ( ( key && typeof key === "string" ) && value === undefined ) ) { + + return this.get( owner, key ); + } + + // When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key !== undefined ) { + + // Support array or space separated string of keys + if ( Array.isArray( key ) ) { + + // If key is an array of keys... + // We always set camelCase keys, so remove that. + key = key.map( camelCase ); + } else { + key = camelCase( key ); + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + key = key in cache ? + [ key ] : + ( key.match( rnothtmlwhite ) || [] ); + } + + i = key.length; + + while ( i-- ) { + delete cache[ key[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + + // Support: Chrome <=35 - 45 + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) + if ( owner.nodeType ) { + owner[ this.expando ] = undefined; + } else { + delete owner[ this.expando ]; + } + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } +}; +var dataPriv = new Data(); + +var dataUser = new Data(); + + + +// Implementation Summary +// +// 1. Enforce API surface and semantic compatibility with 1.9.x branch +// 2. Improve the module's maintainability by reducing the storage +// paths to a single mechanism. +// 3. Use the same single mechanism to support "private" and "user" data. +// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) +// 5. Avoid exposing implementation details on user objects (eg. expando properties) +// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /[A-Z]/g; + +function getData( data ) { + if ( data === "true" ) { + return true; + } + + if ( data === "false" ) { + return false; + } + + if ( data === "null" ) { + return null; + } + + // Only convert to a number if it doesn't change the string + if ( data === +data + "" ) { + return +data; + } + + if ( rbrace.test( data ) ) { + return JSON.parse( data ); + } + + return data; +} + +function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = getData( data ); + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; +} + +jQuery.extend( { + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.remove( elem, name ); + } +} ); + +jQuery.fn.extend( { + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE 11 only + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + dataUser.set( this, key ); + } ); + } + + return access( this, function( value ) { + var data; + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + + // Attempt to get data from the cache + // The key will always be camelCased in Data + data = dataUser.get( elem, key ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, key ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + this.each( function() { + + // We always store the camelCased key + dataUser.set( this, key, value ); + } ); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each( function() { + dataUser.remove( this, key ); + } ); + } +} ); + + +jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || Array.isArray( data ) ) { + queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.remove( elem, [ type + "queue", key ] ); + } ) + } ); + } +} ); + +jQuery.fn.extend( { + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[ 0 ], type ); + } + + return data === undefined ? + this : + this.each( function() { + var queue = jQuery.queue( this, type, data ); + + // Ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + } ); + }, + dequeue: function( type ) { + return this.each( function() { + jQuery.dequeue( this, type ); + } ); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +} ); +var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; + +var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var documentElement = document.documentElement; + + + + var isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ); + }, + composed = { composed: true }; + + // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only + // Check attachment across shadow DOM boundaries when possible (gh-3504) + // Support: iOS 10.0-10.2 only + // Early iOS 10 versions support `attachShadow` but not `getRootNode`, + // leading to errors. We need to check for `getRootNode`. + if ( documentElement.getRootNode ) { + isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ) || + elem.getRootNode( composed ) === elem.ownerDocument; + }; + } +var isHiddenWithinTree = function( elem, el ) { + + // isHiddenWithinTree might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + + // Inline style trumps all + return elem.style.display === "none" || + elem.style.display === "" && + + // Otherwise, check computed style + // Support: Firefox <=43 - 45 + // Disconnected elements can have computed display: none, so first confirm that elem is + // in the document. + isAttached( elem ) && + + jQuery.css( elem, "display" ) === "none"; + }; + + + +function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, scale, + maxIterations = 20, + currentValue = tween ? + function() { + return tween.cur(); + } : + function() { + return jQuery.css( elem, prop, "" ); + }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = elem.nodeType && + ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Support: Firefox <=54 + // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) + initial = initial / 2; + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + while ( maxIterations-- ) { + + // Evaluate and update our best guess (doubling guesses that zero out). + // Finish if the scale equals or crosses 1 (making the old*new product non-positive). + jQuery.style( elem, prop, initialInUnit + unit ); + if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { + maxIterations = 0; + } + initialInUnit = initialInUnit / scale; + + } + + initialInUnit = initialInUnit * 2; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; +} + + +var defaultDisplayMap = {}; + +function getDefaultDisplay( elem ) { + var temp, + doc = elem.ownerDocument, + nodeName = elem.nodeName, + display = defaultDisplayMap[ nodeName ]; + + if ( display ) { + return display; + } + + temp = doc.body.appendChild( doc.createElement( nodeName ) ); + display = jQuery.css( temp, "display" ); + + temp.parentNode.removeChild( temp ); + + if ( display === "none" ) { + display = "block"; + } + defaultDisplayMap[ nodeName ] = display; + + return display; +} + +function showHide( elements, show ) { + var display, elem, + values = [], + index = 0, + length = elements.length; + + // Determine new display value for elements that need to change + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + display = elem.style.display; + if ( show ) { + + // Since we force visibility upon cascade-hidden elements, an immediate (and slow) + // check is required in this first loop unless we have a nonempty display value (either + // inline or about-to-be-restored) + if ( display === "none" ) { + values[ index ] = dataPriv.get( elem, "display" ) || null; + if ( !values[ index ] ) { + elem.style.display = ""; + } + } + if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { + values[ index ] = getDefaultDisplay( elem ); + } + } else { + if ( display !== "none" ) { + values[ index ] = "none"; + + // Remember what we're overwriting + dataPriv.set( elem, "display", display ); + } + } + } + + // Set the display of the elements in a second loop to avoid constant reflow + for ( index = 0; index < length; index++ ) { + if ( values[ index ] != null ) { + elements[ index ].style.display = values[ index ]; + } + } + + return elements; +} + +jQuery.fn.extend( { + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + if ( typeof state === "boolean" ) { + return state ? this.show() : this.hide(); + } + + return this.each( function() { + if ( isHiddenWithinTree( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + } ); + } +} ); +var rcheckableType = ( /^(?:checkbox|radio)$/i ); + +var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); + +var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); + + + +( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0 - 4.3 only + // Check state lost if the name is set (#11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Android <=4.1 only + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE <=11 only + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; + + // Support: IE <=9 only + // IE <=9 replaces "; + support.option = !!div.lastChild; +} )(); + + +// We have to close these tags to support XHTML (#13200) +var wrapMap = { + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting or other required elements. + thead: [ 1, "", "
    " ], + col: [ 2, "", "
    " ], + tr: [ 2, "", "
    " ], + td: [ 3, "", "
    " ], + + _default: [ 0, "", "" ] +}; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// Support: IE <=9 only +if ( !support.option ) { + wrapMap.optgroup = wrapMap.option = [ 1, "" ]; +} + + +function getAll( context, tag ) { + + // Support: IE <=9 - 11 only + // Use typeof to avoid zero-argument method invocation on host objects (#15151) + var ret; + + if ( typeof context.getElementsByTagName !== "undefined" ) { + ret = context.getElementsByTagName( tag || "*" ); + + } else if ( typeof context.querySelectorAll !== "undefined" ) { + ret = context.querySelectorAll( tag || "*" ); + + } else { + ret = []; + } + + if ( tag === undefined || tag && nodeName( context, tag ) ) { + return jQuery.merge( [ context ], ret ); + } + + return ret; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/; + +function buildFragment( elems, context, scripts, selection, ignored ) { + var elem, tmp, tag, wrap, attached, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( toType( elem ) === "object" ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (#12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + continue; + } + + attached = isAttached( elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( attached ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; +} + + +var + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +// Support: IE <=9 - 11+ +// focus() and blur() are asynchronous, except when they are no-op. +// So expect focus to be synchronous when the element is already active, +// and blur to be synchronous when the element is not already active. +// (focus and blur are always synchronous in other supported browsers, +// this just defines when we can count on it). +function expectSync( elem, type ) { + return ( elem === safeActiveElement() ) === ( type === "focus" ); +} + +// Support: IE <=9 only +// Accessing document.activeElement can throw unexpectedly +// https://bugs.jquery.com/ticket/13393 +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.get( elem ); + + // Only attach events to objects that accept data + if ( !acceptData( elem ) ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Ensure that invalid selectors throw exceptions at attach time + // Evaluate against documentElement in case elem is a non-element node (e.g., document) + if ( selector ) { + jQuery.find.matchesSelector( documentElement, selector ); + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = Object.create( null ); + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = function( e ) { + + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend( { + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( nativeEvent ) { + + var i, j, ret, matched, handleObj, handlerQueue, + args = new Array( arguments.length ), + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( nativeEvent ), + + handlers = ( + dataPriv.get( this, "events" ) || Object.create( null ) + )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[ 0 ] = event; + + for ( i = 1; i < arguments.length; i++ ) { + args[ i ] = arguments[ i ]; + } + + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // If the event is namespaced, then each handler is only invoked if it is + // specially universal or its namespaces are a superset of the event's. + if ( !event.rnamespace || handleObj.namespace === false || + event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, handleObj, sel, matchedHandlers, matchedSelectors, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + if ( delegateCount && + + // Support: IE <=9 + // Black-hole SVG instance trees (trac-13180) + cur.nodeType && + + // Support: Firefox <=42 + // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) + // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click + // Support: IE 11 only + // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) + !( event.type === "click" && event.button >= 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { + matchedHandlers = []; + matchedSelectors = {}; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matchedSelectors[ sel ] === undefined ) { + matchedSelectors[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matchedSelectors[ sel ] ) { + matchedHandlers.push( handleObj ); + } + } + if ( matchedHandlers.length ) { + handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + cur = this; + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + addProp: function( name, hook ) { + Object.defineProperty( jQuery.Event.prototype, name, { + enumerable: true, + configurable: true, + + get: isFunction( hook ) ? + function() { + if ( this.originalEvent ) { + return hook( this.originalEvent ); + } + } : + function() { + if ( this.originalEvent ) { + return this.originalEvent[ name ]; + } + }, + + set: function( value ) { + Object.defineProperty( this, name, { + enumerable: true, + configurable: true, + writable: true, + value: value + } ); + } + } ); + }, + + fix: function( originalEvent ) { + return originalEvent[ jQuery.expando ] ? + originalEvent : + new jQuery.Event( originalEvent ); + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + click: { + + // Utilize native event to ensure correct state for checkable inputs + setup: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Claim the first handler + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + // dataPriv.set( el, "click", ... ) + leverageNative( el, "click", returnTrue ); + } + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Force setup before triggering a click + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + leverageNative( el, "click" ); + } + + // Return non-false to allow normal event-path propagation + return true; + }, + + // For cross-browser consistency, suppress native .click() on links + // Also prevent it if we're currently inside a leveraged native-event stack + _default: function( event ) { + var target = event.target; + return rcheckableType.test( target.type ) && + target.click && nodeName( target, "input" ) && + dataPriv.get( target, "click" ) || + nodeName( target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + } +}; + +// Ensure the presence of an event listener that handles manually-triggered +// synthetic events by interrupting progress until reinvoked in response to +// *native* events that it fires directly, ensuring that state changes have +// already occurred before other listeners are invoked. +function leverageNative( el, type, expectSync ) { + + // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add + if ( !expectSync ) { + if ( dataPriv.get( el, type ) === undefined ) { + jQuery.event.add( el, type, returnTrue ); + } + return; + } + + // Register the controller as a special universal handler for all event namespaces + dataPriv.set( el, type, false ); + jQuery.event.add( el, type, { + namespace: false, + handler: function( event ) { + var notAsync, result, + saved = dataPriv.get( this, type ); + + if ( ( event.isTrigger & 1 ) && this[ type ] ) { + + // Interrupt processing of the outer synthetic .trigger()ed event + // Saved data should be false in such cases, but might be a leftover capture object + // from an async native handler (gh-4350) + if ( !saved.length ) { + + // Store arguments for use when handling the inner native event + // There will always be at least one argument (an event object), so this array + // will not be confused with a leftover capture object. + saved = slice.call( arguments ); + dataPriv.set( this, type, saved ); + + // Trigger the native event and capture its result + // Support: IE <=9 - 11+ + // focus() and blur() are asynchronous + notAsync = expectSync( this, type ); + this[ type ](); + result = dataPriv.get( this, type ); + if ( saved !== result || notAsync ) { + dataPriv.set( this, type, false ); + } else { + result = {}; + } + if ( saved !== result ) { + + // Cancel the outer synthetic event + event.stopImmediatePropagation(); + event.preventDefault(); + return result.value; + } + + // If this is an inner synthetic event for an event with a bubbling surrogate + // (focus or blur), assume that the surrogate already propagated from triggering the + // native event and prevent that from happening again here. + // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the + // bubbling surrogate propagates *after* the non-bubbling base), but that seems + // less bad than duplication. + } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { + event.stopPropagation(); + } + + // If this is a native event triggered above, everything is now in order + // Fire an inner synthetic event with the original arguments + } else if ( saved.length ) { + + // ...and capture the result + dataPriv.set( this, type, { + value: jQuery.event.trigger( + + // Support: IE <=9 - 11+ + // Extend with the prototype to reset the above stopImmediatePropagation() + jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), + saved.slice( 1 ), + this + ) + } ); + + // Abort handling of the native event + event.stopImmediatePropagation(); + } + } + } ); +} + +jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } +}; + +jQuery.Event = function( src, props ) { + + // Allow instantiation without the 'new' keyword + if ( !( this instanceof jQuery.Event ) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + + // Support: Android <=2.3 only + src.returnValue === false ? + returnTrue : + returnFalse; + + // Create target properties + // Support: Safari <=6 - 7 only + // Target should not be a text node (#504, #13143) + this.target = ( src.target && src.target.nodeType === 3 ) ? + src.target.parentNode : + src.target; + + this.currentTarget = src.currentTarget; + this.relatedTarget = src.relatedTarget; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || Date.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + isSimulated: false, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && !this.isSimulated ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Includes all common event props including KeyEvent and MouseEvent specific props +jQuery.each( { + altKey: true, + bubbles: true, + cancelable: true, + changedTouches: true, + ctrlKey: true, + detail: true, + eventPhase: true, + metaKey: true, + pageX: true, + pageY: true, + shiftKey: true, + view: true, + "char": true, + code: true, + charCode: true, + key: true, + keyCode: true, + button: true, + buttons: true, + clientX: true, + clientY: true, + offsetX: true, + offsetY: true, + pointerId: true, + pointerType: true, + screenX: true, + screenY: true, + targetTouches: true, + toElement: true, + touches: true, + + which: function( event ) { + var button = event.button; + + // Add which for key events + if ( event.which == null && rkeyEvent.test( event.type ) ) { + return event.charCode != null ? event.charCode : event.keyCode; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { + if ( button & 1 ) { + return 1; + } + + if ( button & 2 ) { + return 3; + } + + if ( button & 4 ) { + return 2; + } + + return 0; + } + + return event.which; + } +}, jQuery.event.addProp ); + +jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { + jQuery.event.special[ type ] = { + + // Utilize native event if possible so blur/focus sequence is correct + setup: function() { + + // Claim the first handler + // dataPriv.set( this, "focus", ... ) + // dataPriv.set( this, "blur", ... ) + leverageNative( this, type, expectSync ); + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function() { + + // Force setup before trigger + leverageNative( this, type ); + + // Return non-false to allow normal event-path propagation + return true; + }, + + delegateType: delegateType + }; +} ); + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +jQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +} ); + +jQuery.fn.extend( { + + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each( function() { + jQuery.event.remove( this, types, fn, selector ); + } ); + } +} ); + + +var + + // Support: IE <=10 - 11, Edge 12 - 13 only + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /\s*$/g; + +// Prefer a tbody over its parent table for containing new rows +function manipulationTarget( elem, content ) { + if ( nodeName( elem, "table" ) && + nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { + + return jQuery( elem ).children( "tbody" )[ 0 ] || elem; + } + + return elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { + elem.type = elem.type.slice( 5 ); + } else { + elem.removeAttribute( "type" ); + } + + return elem; +} + +function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.get( src ); + events = pdataOld.events; + + if ( events ) { + dataPriv.remove( dest, "handle events" ); + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } +} + +// Fix IE bugs, see support tests +function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = flat( args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + valueIsFunction = isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( valueIsFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( valueIsFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl && !node.noModule ) { + jQuery._evalUrl( node.src, { + nonce: node.nonce || node.getAttribute( "nonce" ) + }, doc ); + } + } else { + DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); + } + } + } + } + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && isAttached( node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html; + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = isAttached( elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } +} ); + +jQuery.fn.extend( { + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each( function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + } ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +} ); + +jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: Android <=4.0 only, PhantomJS 1 only + // .get() because push.apply(_, arraylike) throws on ancient WebKit + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +} ); +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + +var getStyles = function( elem ) { + + // Support: IE <=11 only, Firefox <=30 (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view || !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + +var swap = function( elem, options, callback ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.call( elem ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; +}; + + +var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); + + + +( function() { + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + + // This is a singleton, we need to execute it only once + if ( !div ) { + return; + } + + container.style.cssText = "position:absolute;left:-11111px;width:60px;" + + "margin-top:1px;padding:0;border:0"; + div.style.cssText = + "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + + "margin:auto;border:1px;padding:1px;" + + "width:60%;top:1%"; + documentElement.appendChild( container ).appendChild( div ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + + // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 + reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; + + // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 + // Some styles come back with percentage values, even though they shouldn't + div.style.right = "60%"; + pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; + + // Support: IE 9 - 11 only + // Detect misreporting of content dimensions for box-sizing:border-box elements + boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; + + // Support: IE 9 only + // Detect overflow:scroll screwiness (gh-3699) + // Support: Chrome <=64 + // Don't get tricked when zoom affects offsetWidth (gh-4029) + div.style.position = "absolute"; + scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; + + documentElement.removeChild( container ); + + // Nullify the div so it wouldn't be stored in the memory and + // it will also be a sign that checks already performed + div = null; + } + + function roundPixelMeasures( measure ) { + return Math.round( parseFloat( measure ) ); + } + + var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, + reliableTrDimensionsVal, reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE <=9 - 11 only + // Style of cloned element affects source element cloned (#8908) + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + jQuery.extend( support, { + boxSizingReliable: function() { + computeStyleTests(); + return boxSizingReliableVal; + }, + pixelBoxStyles: function() { + computeStyleTests(); + return pixelBoxStylesVal; + }, + pixelPosition: function() { + computeStyleTests(); + return pixelPositionVal; + }, + reliableMarginLeft: function() { + computeStyleTests(); + return reliableMarginLeftVal; + }, + scrollboxSize: function() { + computeStyleTests(); + return scrollboxSizeVal; + }, + + // Support: IE 9 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Behavior in IE 9 is more subtle than in newer versions & it passes + // some versions of this test; make sure not to make it pass there! + reliableTrDimensions: function() { + var table, tr, trChild, trStyle; + if ( reliableTrDimensionsVal == null ) { + table = document.createElement( "table" ); + tr = document.createElement( "tr" ); + trChild = document.createElement( "div" ); + + table.style.cssText = "position:absolute;left:-11111px"; + tr.style.height = "1px"; + trChild.style.height = "9px"; + + documentElement + .appendChild( table ) + .appendChild( tr ) + .appendChild( trChild ); + + trStyle = window.getComputedStyle( tr ); + reliableTrDimensionsVal = parseInt( trStyle.height ) > 3; + + documentElement.removeChild( table ); + } + return reliableTrDimensionsVal; + } + } ); +} )(); + + +function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + + // Support: Firefox 51+ + // Retrieving style before computed somehow + // fixes an issue with getting wrong values + // on detached elements + style = elem.style; + + computed = computed || getStyles( elem ); + + // getPropertyValue is needed for: + // .css('filter') (IE 9 only, #12537) + // .css('--customProperty) (#3144) + if ( computed ) { + ret = computed.getPropertyValue( name ) || computed[ name ]; + + if ( ret === "" && !isAttached( elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // https://drafts.csswg.org/cssom/#resolved-values + if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret !== undefined ? + + // Support: IE <=9 - 11 only + // IE returns zIndex value as an integer. + ret + "" : + ret; +} + + +function addGetHookIf( conditionFn, hookFn ) { + + // Define the hook, we'll check on the first run if it's really needed. + return { + get: function() { + if ( conditionFn() ) { + + // Hook not needed (or it's not possible to use it due + // to missing dependency), remove it. + delete this.get; + return; + } + + // Hook needed; redefine it so that the support test is not executed again. + return ( this.get = hookFn ).apply( this, arguments ); + } + }; +} + + +var cssPrefixes = [ "Webkit", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style, + vendorProps = {}; + +// Return a vendor-prefixed property or undefined +function vendorPropName( name ) { + + // Check for vendor prefixed names + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } +} + +// Return a potentially-mapped jQuery.cssProps or vendor prefixed property +function finalPropName( name ) { + var final = jQuery.cssProps[ name ] || vendorProps[ name ]; + + if ( final ) { + return final; + } + if ( name in emptyStyle ) { + return name; + } + return vendorProps[ name ] = vendorPropName( name ) || name; +} + + +var + + // Swappable if display is none or starts with table + // except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rcustomProp = /^--/, + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }; + +function setPositiveNumber( _elem, value, subtract ) { + + // Any relative (+/-) values have already been + // normalized at this point + var matches = rcssNum.exec( value ); + return matches ? + + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : + value; +} + +function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { + var i = dimension === "width" ? 1 : 0, + extra = 0, + delta = 0; + + // Adjustment may not be necessary + if ( box === ( isBorderBox ? "border" : "content" ) ) { + return 0; + } + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin + if ( box === "margin" ) { + delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); + } + + // If we get here with a content-box, we're seeking "padding" or "border" or "margin" + if ( !isBorderBox ) { + + // Add padding + delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // For "border" or "margin", add border + if ( box !== "padding" ) { + delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + + // But still keep track of it otherwise + } else { + extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + + // If we get here with a border-box (content + padding + border), we're seeking "content" or + // "padding" or "margin" + } else { + + // For "content", subtract padding + if ( box === "content" ) { + delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // For "content" or "padding", subtract border + if ( box !== "margin" ) { + delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + // Account for positive content-box scroll gutter when requested by providing computedVal + if ( !isBorderBox && computedVal >= 0 ) { + + // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border + // Assuming integer scroll gutter, subtract the rest and round down + delta += Math.max( 0, Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + computedVal - + delta - + extra - + 0.5 + + // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter + // Use an explicit zero to avoid NaN (gh-3964) + ) ) || 0; + } + + return delta; +} + +function getWidthOrHeight( elem, dimension, extra ) { + + // Start with computed style + var styles = getStyles( elem ), + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). + // Fake content-box until we know it's needed to know the true value. + boxSizingNeeded = !support.boxSizingReliable() || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + valueIsBorderBox = isBorderBox, + + val = curCSS( elem, dimension, styles ), + offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); + + // Support: Firefox <=54 + // Return a confounding non-pixel value or feign ignorance, as appropriate. + if ( rnumnonpx.test( val ) ) { + if ( !extra ) { + return val; + } + val = "auto"; + } + + + // Support: IE 9 - 11 only + // Use offsetWidth/offsetHeight for when box sizing is unreliable. + // In those cases, the computed value can be trusted to be border-box. + if ( ( !support.boxSizingReliable() && isBorderBox || + + // Support: IE 10 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Interestingly, in some cases IE 9 doesn't suffer from this issue. + !support.reliableTrDimensions() && nodeName( elem, "tr" ) || + + // Fall back to offsetWidth/offsetHeight when value is "auto" + // This happens for inline elements with no explicit setting (gh-3571) + val === "auto" || + + // Support: Android <=4.1 - 4.3 only + // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) + !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && + + // Make sure the element is visible & connected + elem.getClientRects().length ) { + + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // Where available, offsetWidth/offsetHeight approximate border box dimensions. + // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the + // retrieved value as a content box dimension. + valueIsBorderBox = offsetProp in elem; + if ( valueIsBorderBox ) { + val = elem[ offsetProp ]; + } + } + + // Normalize "" and auto + val = parseFloat( val ) || 0; + + // Adjust for the element's box model + return ( val + + boxModelAdjustment( + elem, + dimension, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles, + + // Provide the current computed size to request scroll gutter calculation (gh-3589) + val + ) + ) + "px"; +} + +jQuery.extend( { + + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + "animationIterationCount": true, + "columnCount": true, + "fillOpacity": true, + "flexGrow": true, + "flexShrink": true, + "fontWeight": true, + "gridArea": true, + "gridColumn": true, + "gridColumnEnd": true, + "gridColumnStart": true, + "gridRow": true, + "gridRowEnd": true, + "gridRowStart": true, + "lineHeight": true, + "opacity": true, + "order": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: {}, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ), + style = elem.style; + + // Make sure that we're working with the right name. We don't + // want to query the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Gets hook for the prefixed version, then unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // Convert "+=" or "-=" to relative numbers (#7345) + if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + + // Fixes bug #9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set (#7116) + if ( value == null || value !== value ) { + return; + } + + // If a number was passed in, add the unit (except for certain CSS properties) + // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append + // "px" to a few hardcoded values. + if ( type === "number" && !isCustomProp ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // background-* props affect original clone's values + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !( "set" in hooks ) || + ( value = hooks.set( elem, value, extra ) ) !== undefined ) { + + if ( isCustomProp ) { + style.setProperty( name, value ); + } else { + style[ name ] = value; + } + } + + } else { + + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && + ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { + + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var val, num, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ); + + // Make sure that we're working with the right name. We don't + // want to modify the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Try prefixed name followed by the unprefixed name + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + // Convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Make numeric if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || isFinite( num ) ? num || 0 : val; + } + + return val; + } +} ); + +jQuery.each( [ "height", "width" ], function( _i, dimension ) { + jQuery.cssHooks[ dimension ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + + // Certain elements can have dimension info if we invisibly show them + // but it must have a current display style that would benefit + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && + + // Support: Safari 8+ + // Table columns in Safari have non-zero offsetWidth & zero + // getBoundingClientRect().width unless display is changed. + // Support: IE <=11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, dimension, extra ); + } ) : + getWidthOrHeight( elem, dimension, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = getStyles( elem ), + + // Only read styles.position if the test has a chance to fail + // to avoid forcing a reflow. + scrollboxSizeBuggy = !support.scrollboxSize() && + styles.position === "absolute", + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) + boxSizingNeeded = scrollboxSizeBuggy || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + subtract = extra ? + boxModelAdjustment( + elem, + dimension, + extra, + isBorderBox, + styles + ) : + 0; + + // Account for unreliable border-box dimensions by comparing offset* to computed and + // faking a content-box to get border and padding (gh-3699) + if ( isBorderBox && scrollboxSizeBuggy ) { + subtract -= Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + parseFloat( styles[ dimension ] ) - + boxModelAdjustment( elem, dimension, "border", false, styles ) - + 0.5 + ); + } + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ dimension ] = value; + value = jQuery.css( elem, dimension ); + } + + return setPositiveNumber( elem, value, subtract ); + } + }; +} ); + +jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, + function( elem, computed ) { + if ( computed ) { + return ( parseFloat( curCSS( elem, "marginLeft" ) ) || + elem.getBoundingClientRect().left - + swap( elem, { marginLeft: 0 }, function() { + return elem.getBoundingClientRect().left; + } ) + ) + "px"; + } + } +); + +// These hooks are used by animate to expand properties +jQuery.each( { + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // Assumes a single number if not a string + parts = typeof value === "string" ? value.split( " " ) : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( prefix !== "margin" ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } +} ); + +jQuery.fn.extend( { + css: function( name, value ) { + return access( this, function( elem, name, value ) { + var styles, len, + map = {}, + i = 0; + + if ( Array.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + } +} ); + + +function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); +} +jQuery.Tween = Tween; + +Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || jQuery.easing._default; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } +}; + +Tween.prototype.init.prototype = Tween.prototype; + +Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { + return tween.elem[ tween.prop ]; + } + + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); + + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.nodeType === 1 && ( + jQuery.cssHooks[ tween.prop ] || + tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; + +// Support: IE <=9 only +// Panic based approach to setting things on disconnected nodes +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } +}; + +jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p * Math.PI ) / 2; + }, + _default: "swing" +}; + +jQuery.fx = Tween.prototype.init; + +// Back compat <1.8 extension point +jQuery.fx.step = {}; + + + + +var + fxNow, inProgress, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + +function schedule() { + if ( inProgress ) { + if ( document.hidden === false && window.requestAnimationFrame ) { + window.requestAnimationFrame( schedule ); + } else { + window.setTimeout( schedule, jQuery.fx.interval ); + } + + jQuery.fx.tick(); + } +} + +// Animations created synchronously will run synchronously +function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = Date.now() ); +} + +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + includeWidth = includeWidth ? 1 : 0; + for ( ; i < 4; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; +} + +function createTween( value, prop, animation ) { + var tween, + collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { + + // We're done with this property + return tween; + } + } +} + +function defaultPrefilter( elem, props, opts ) { + var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, + isBox = "width" in props || "height" in props, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHiddenWithinTree( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Queue-skipping animations hijack the fx hooks + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always( function() { + + // Ensure the complete handler is called before this completes + anim.always( function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + } ); + } ); + } + + // Detect show/hide animations + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.test( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // Pretend to be hidden if this is a "show" and + // there is still data from a stopped show/hide + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + + // Ignore all other no-op show/hide data + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + } + } + + // Bail out if this is a no-op like .hide().hide() + propTween = !jQuery.isEmptyObject( props ); + if ( !propTween && jQuery.isEmptyObject( orig ) ) { + return; + } + + // Restrict "overflow" and "display" styles during box animations + if ( isBox && elem.nodeType === 1 ) { + + // Support: IE <=9 - 11, Edge 12 - 15 + // Record all 3 overflow attributes because IE does not infer the shorthand + // from identically-valued overflowX and overflowY and Edge just mirrors + // the overflowX value there. + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Identify a display type, preferring old show/hide data over the CSS cascade + restoreDisplay = dataShow && dataShow.display; + if ( restoreDisplay == null ) { + restoreDisplay = dataPriv.get( elem, "display" ); + } + display = jQuery.css( elem, "display" ); + if ( display === "none" ) { + if ( restoreDisplay ) { + display = restoreDisplay; + } else { + + // Get nonempty value(s) by temporarily forcing visibility + showHide( [ elem ], true ); + restoreDisplay = elem.style.display || restoreDisplay; + display = jQuery.css( elem, "display" ); + showHide( [ elem ] ); + } + } + + // Animate inline elements as inline-block + if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { + if ( jQuery.css( elem, "float" ) === "none" ) { + + // Restore the original display value at the end of pure show/hide animations + if ( !propTween ) { + anim.done( function() { + style.display = restoreDisplay; + } ); + if ( restoreDisplay == null ) { + display = style.display; + restoreDisplay = display === "none" ? "" : display; + } + } + style.display = "inline-block"; + } + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always( function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + } ); + } + + // Implement show/hide animations + propTween = false; + for ( prop in orig ) { + + // General show/hide setup for this element animation + if ( !propTween ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); + } + + // Store hidden/visible for toggle so `.stop().toggle()` "reverses" + if ( toggle ) { + dataShow.hidden = !hidden; + } + + // Show elements before animating them + if ( hidden ) { + showHide( [ elem ], true ); + } + + /* eslint-disable no-loop-func */ + + anim.done( function() { + + /* eslint-enable no-loop-func */ + + // The final step of a "hide" animation is actually hiding the element + if ( !hidden ) { + showHide( [ elem ] ); + } + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + } + + // Per-property setup + propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = propTween.start; + if ( hidden ) { + propTween.end = propTween.start; + propTween.start = 0; + } + } + } +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( Array.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } +} + +function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = Animation.prefilters.length, + deferred = jQuery.Deferred().always( function() { + + // Don't match elem in the :animated selector + delete tick.elem; + } ), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + + // Support: Android 2.3 only + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ] ); + + // If there's more to do, yield + if ( percent < 1 && length ) { + return remaining; + } + + // If this was an empty animation, synthesize a final progress notification + if ( !length ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + } + + // Resolve the animation and report its conclusion + deferred.resolveWith( elem, [ animation ] ); + return false; + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // Resolve when we played the last frame; otherwise, reject + if ( gotoEnd ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + } ), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length; index++ ) { + result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + result.stop.bind( result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + // Attach callbacks from options + animation + .progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + return animation; +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnothtmlwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } +} ); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !isFunction( easing ) && easing + }; + + // Go to the end state if fx are off + if ( jQuery.fx.off ) { + opt.duration = 0; + + } else { + if ( typeof opt.duration !== "number" ) { + if ( opt.duration in jQuery.fx.speeds ) { + opt.duration = jQuery.fx.speeds[ opt.duration ]; + + } else { + opt.duration = jQuery.fx.speeds._default; + } + } + } + + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; +}; + +jQuery.fn.extend( { + fadeTo: function( speed, to, easing, callback ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() + + // Animate to the value specified + .end().animate( { opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || dataPriv.get( this, "finish" ) ) { + anim.stop( true ); + } + }; + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue ) { + this.queue( type || "fx", [] ); + } + + return this.each( function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = dataPriv.get( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && + ( type == null || timers[ index ].queue === type ) ) { + + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + } ); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each( function() { + var index, + data = dataPriv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + delete data.finish; + } ); + } +} ); + +jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; +} ); + +// Generate shortcuts for custom animations +jQuery.each( { + slideDown: genFx( "show" ), + slideUp: genFx( "hide" ), + slideToggle: genFx( "toggle" ), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } +}, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; +} ); + +jQuery.timers = []; +jQuery.fx.tick = function() { + var timer, + i = 0, + timers = jQuery.timers; + + fxNow = Date.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + + // Run the timer and safely remove it when done (allowing for external removal) + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; +}; + +jQuery.fx.timer = function( timer ) { + jQuery.timers.push( timer ); + jQuery.fx.start(); +}; + +jQuery.fx.interval = 13; +jQuery.fx.start = function() { + if ( inProgress ) { + return; + } + + inProgress = true; + schedule(); +}; + +jQuery.fx.stop = function() { + inProgress = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 +}; + + +// Based off of the plugin by Clint Helfers, with permission. +// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ +jQuery.fn.delay = function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); +}; + + +( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: Android <=4.3 only + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE <=11 only + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: IE <=11 only + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; +} )(); + + +var boolHook, + attrHandle = jQuery.expr.attrHandle; + +jQuery.fn.extend( { + attr: function( name, value ) { + return access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each( function() { + jQuery.removeAttr( this, name ); + } ); + } +} ); + +jQuery.extend( { + attr: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // Attribute hooks are determined by the lowercase version + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + hooks = jQuery.attrHooks[ name.toLowerCase() ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, + i = 0, + + // Attribute names can contain non-HTML whitespace characters + // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 + attrNames = value && value.match( rnothtmlwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + elem.removeAttribute( name ); + } + } + } +} ); + +// Hooks for boolean attributes +boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } +}; + +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle, + lowercaseName = name.toLowerCase(); + + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ lowercaseName ]; + attrHandle[ lowercaseName ] = ret; + ret = getter( elem, name, isXML ) != null ? + lowercaseName : + null; + attrHandle[ lowercaseName ] = handle; + } + return ret; + }; +} ); + + + + +var rfocusable = /^(?:input|select|textarea|button)$/i, + rclickable = /^(?:a|area)$/i; + +jQuery.fn.extend( { + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } +} ); + +jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // Support: IE <=9 - 11 only + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + // Use proper attribute retrieval(#12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + if ( tabindex ) { + return parseInt( tabindex, 10 ); + } + + if ( + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && + elem.href + ) { + return 0; + } + + return -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } +} ); + +// Support: IE <=11 only +// Accessing the selectedIndex property +// forces the browser to respect setting selected +// on the option +// The getter ensures a default option is selected +// when in an optgroup +// eslint rule "no-unused-expressions" is disabled for this code +// since it considers such accessions noop +if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; +} + +jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +} ); + + + + + // Strip and collapse whitespace according to HTML spec + // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace + function stripAndCollapse( value ) { + var tokens = value.match( rnothtmlwhite ) || []; + return tokens.join( " " ); + } + + +function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; +} + +function classesToArray( value ) { + if ( Array.isArray( value ) ) { + return value; + } + if ( typeof value === "string" ) { + return value.match( rnothtmlwhite ) || []; + } + return []; +} + +jQuery.fn.extend( { + addClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) > -1 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isValidValue = type === "string" || Array.isArray( value ); + + if ( typeof stateVal === "boolean" && isValidValue ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + return this.each( function() { + var className, i, self, classNames; + + if ( isValidValue ) { + + // Toggle individual class names + i = 0; + self = jQuery( this ); + classNames = classesToArray( value ); + + while ( ( className = classNames[ i++ ] ) ) { + + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { + return true; + } + } + + return false; + } +} ); + + + + +var rreturn = /\r/g; + +jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, valueIsFunction, + elem = this[ 0 ]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || + jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && + "get" in hooks && + ( ret = hooks.get( elem, "value" ) ) !== undefined + ) { + return ret; + } + + ret = elem.value; + + // Handle most common string cases + if ( typeof ret === "string" ) { + return ret.replace( rreturn, "" ); + } + + // Handle cases where value is null/undef or number + return ret == null ? "" : ret; + } + + return; + } + + valueIsFunction = isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( valueIsFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + + } else if ( typeof val === "number" ) { + val += ""; + + } else if ( Array.isArray( val ) ) { + val = jQuery.map( val, function( value ) { + return value == null ? "" : value + ""; + } ); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + } ); + } +} ); + +jQuery.extend( { + valHooks: { + option: { + get: function( elem ) { + + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + + // Support: IE <=10 - 11 only + // option.text throws exceptions (#14686, #14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + stripAndCollapse( jQuery.text( elem ) ); + } + }, + select: { + get: function( elem ) { + var value, option, i, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one", + values = one ? null : [], + max = one ? index + 1 : options.length; + + if ( index < 0 ) { + i = max; + + } else { + i = one ? index : 0; + } + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Support: IE <=9 only + // IE8-9 doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + + // Don't return options that are disabled or in a disabled optgroup + !option.disabled && + ( !option.parentNode.disabled || + !nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + + /* eslint-disable no-cond-assign */ + + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + + /* eslint-enable no-cond-assign */ + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } +} ); + +// Radios and checkboxes getter/setter +jQuery.each( [ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( Array.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } +} ); + + + + +// Return jQuery for attributes-only inclusion + + +support.focusin = "onfocusin" in window; + + +var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + stopPropagationCallback = function( e ) { + e.stopPropagation(); + }; + +jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = lastElement = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "." ) > -1 ) { + + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split( "." ); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf( ":" ) < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === ( elem.ownerDocument || document ) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { + lastElement = cur; + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( + dataPriv.get( cur, "events" ) || Object.create( null ) + )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( ( !special._default || + special._default.apply( eventPath.pop(), data ) === false ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + + if ( event.isPropagationStopped() ) { + lastElement.addEventListener( type, stopPropagationCallback ); + } + + elem[ type ](); + + if ( event.isPropagationStopped() ) { + lastElement.removeEventListener( type, stopPropagationCallback ); + } + + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + // Used only for `focus(in | out)` events + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + } + ); + + jQuery.event.trigger( e, null, elem ); + } + +} ); + +jQuery.fn.extend( { + + trigger: function( type, data ) { + return this.each( function() { + jQuery.event.trigger( type, data, this ); + } ); + }, + triggerHandler: function( type, data ) { + var elem = this[ 0 ]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +} ); + + +// Support: Firefox <=44 +// Firefox doesn't have focus(in | out) events +// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 +// +// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 +// focus(in | out) events fire after focus & blur events, +// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order +// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 +if ( !support.focusin ) { + jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + + // Handle: regular nodes (via `this.ownerDocument`), window + // (via `this.document`) & document (via `this`). + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + dataPriv.remove( doc, fix ); + + } else { + dataPriv.access( doc, fix, attaches ); + } + } + }; + } ); +} +var location = window.location; + +var nonce = { guid: Date.now() }; + +var rquery = ( /\?/ ); + + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE 9 - 11 only + // IE throws on parseFromString with invalid input. + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) { + xml = undefined; + } + + if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; +}; + + +var + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + +function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( Array.isArray( obj ) ) { + + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + + // Item is non-scalar (array or object), encode its numeric index. + buildParams( + prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && toType( obj ) === "object" ) { + + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + + // Serialize scalar item. + add( prefix, obj ); + } +} + +// Serialize an array of form elements or a set of +// key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, valueOrFunction ) { + + // If value is a function, invoke it and use its return value + var value = isFunction( valueOrFunction ) ? + valueOrFunction() : + valueOrFunction; + + s[ s.length ] = encodeURIComponent( key ) + "=" + + encodeURIComponent( value == null ? "" : value ); + }; + + if ( a == null ) { + return ""; + } + + // If an array was passed in, assume that it is an array of form elements. + if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + } ); + + } else { + + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ); +}; + +jQuery.fn.extend( { + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map( function() { + + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + } ) + .filter( function() { + var type = this.type; + + // Use .is( ":disabled" ) so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !rcheckableType.test( type ) ); + } ) + .map( function( _i, elem ) { + var val = jQuery( this ).val(); + + if ( val == null ) { + return null; + } + + if ( Array.isArray( val ) ) { + return jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ); + } + + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } +} ); + + +var + r20 = /%20/g, + rhash = /#.*$/, + rantiCache = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + originAnchor.href = location.href; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; + + if ( isFunction( func ) ) { + + // For each dataType in the dataTypeExpression + while ( ( dataType = dataTypes[ i++ ] ) ) { + + // Prepend if requested + if ( dataType[ 0 ] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); + + // Otherwise append + } else { + ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); + } + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if ( typeof dataTypeOrTransport === "string" && + !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + } ); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes #9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; +} + +/* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} + +/* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ +function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s.throws ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { + state: "parsererror", + error: conv ? e : "No conversion from " + prev + " to " + current + }; + } + } + } + } + } + } + + return { state: "success", data: response }; +} + +jQuery.extend( { + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": JSON.parse, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var transport, + + // URL without anti-cache param + cacheURL, + + // Response headers + responseHeadersString, + responseHeaders, + + // timeout handle + timeoutTimer, + + // Url cleanup var + urlAnchor, + + // Request state (becomes false upon send and true upon completion) + completed, + + // To know if global events are to be dispatched + fireGlobals, + + // Loop variable + i, + + // uncached part of the url + uncached, + + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + + // Callbacks context + callbackContext = s.context || s, + + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && + ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + + // Status-dependent callbacks + statusCode = s.statusCode || {}, + + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + + // Default abort message + strAbort = "canceled", + + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( completed ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[ 1 ].toLowerCase() + " " ] = + ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) + .concat( match[ 2 ] ); + } + } + match = responseHeaders[ key.toLowerCase() + " " ]; + } + return match == null ? null : match.join( ", " ); + }, + + // Raw string + getAllResponseHeaders: function() { + return completed ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( completed == null ) { + name = requestHeadersNames[ name.toLowerCase() ] = + requestHeadersNames[ name.toLowerCase() ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( completed == null ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( completed ) { + + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } else { + + // Lazy-add the new callbacks in a way that preserves old ones + for ( code in map ) { + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ); + + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (#10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || location.href ) + "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE <=8 - 11, Edge 12 - 15 + // IE throws exception on accessing the href property if url is malformed, + // e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE <=8 - 11 only + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( completed ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) + fireGlobals = jQuery.event && s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + // Remove hash to simplify url manipulation + cacheURL = s.url.replace( rhash, "" ); + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // Remember the hash so we can put it back + uncached = s.url.slice( cacheURL.length ); + + // If data is available and should be processed, append data to url + if ( s.data && ( s.processData || typeof s.data === "string" ) ) { + cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; + + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add or update anti-cache param if needed + if ( s.cache === false ) { + cacheURL = cacheURL.replace( rantiCache, "$1" ); + uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + + uncached; + } + + // Put hash and anti-cache on the URL that will be requested (gh-1732) + s.url = cacheURL + uncached; + + // Change '%20' to '+' if this is encoded form body content (gh-2658) + } else if ( s.data && s.processData && + ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { + s.data = s.data.replace( r20, "+" ); + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? + s.accepts[ s.dataTypes[ 0 ] ] + + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && + ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + completeDeferred.add( s.complete ); + jqXHR.done( s.success ); + jqXHR.fail( s.error ); + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( completed ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + completed = false; + transport.send( requestHeaders, done ); + } catch ( e ) { + + // Rethrow post-completion exceptions + if ( completed ) { + throw e; + } + + // Propagate others as results + done( -1, e ); + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Ignore repeat invocations + if ( completed ) { + return; + } + + completed = true; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // Use a noop converter for missing script + if ( !isSuccess && jQuery.inArray( "script", s.dataTypes ) > -1 ) { + s.converters[ "text script" ] = function() {}; + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader( "Last-Modified" ); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader( "etag" ); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + return jqXHR; + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } +} ); + +jQuery.each( [ "get", "post" ], function( _i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + + // Shift arguments if data argument was omitted + if ( isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; +} ); + +jQuery.ajaxPrefilter( function( s ) { + var i; + for ( i in s.headers ) { + if ( i.toLowerCase() === "content-type" ) { + s.contentType = s.headers[ i ] || ""; + } + } +} ); + + +jQuery._evalUrl = function( url, options, doc ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (#11264) + type: "GET", + dataType: "script", + cache: true, + async: false, + global: false, + + // Only evaluate the response if it is successful (gh-4126) + // dataFilter is not invoked for failure responses, so using it instead + // of the default converter is kludgy but it works. + converters: { + "text script": function() {} + }, + dataFilter: function( response ) { + jQuery.globalEval( response, options, doc ); + } + } ); +}; + + +jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( this[ 0 ] ) { + if ( isFunction( html ) ) { + html = html.call( this[ 0 ] ); + } + + // The elements to wrap the target around + wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); + + if ( this[ 0 ].parentNode ) { + wrap.insertBefore( this[ 0 ] ); + } + + wrap.map( function() { + var elem = this; + + while ( elem.firstElementChild ) { + elem = elem.firstElementChild; + } + + return elem; + } ).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapInner( html.call( this, i ) ); + } ); + } + + return this.each( function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + } ); + }, + + wrap: function( html ) { + var htmlIsFunction = isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); + } ); + }, + + unwrap: function( selector ) { + this.parent( selector ).not( "body" ).each( function() { + jQuery( this ).replaceWith( this.childNodes ); + } ); + return this; + } +} ); + + +jQuery.expr.pseudos.hidden = function( elem ) { + return !jQuery.expr.pseudos.visible( elem ); +}; +jQuery.expr.pseudos.visible = function( elem ) { + return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); +}; + + + + +jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} +}; + +var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE <=9 only + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +support.ajax = xhrSupported = !!xhrSupported; + +jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + xhr.open( + options.type, + options.url, + options.async, + options.username, + options.password + ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.ontimeout = + xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE <=9 only + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE <=9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); + + // Support: IE 9 only + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = callback( "abort" ); + + try { + + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + + // #14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +} ); + + + + +// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) +jQuery.ajaxPrefilter( function( s ) { + if ( s.crossDomain ) { + s.contents.script = false; + } +} ); + +// Install script dataType +jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +} ); + +// Handle cache's special case and crossDomain +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } +} ); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function( s ) { + + // This transport only deals with cross domain or forced-by-attrs requests + if ( s.crossDomain || s.scriptAttrs ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery( "\r\n"; + +// inject VBScript +document.write(IEBinaryToArray_ByteStr_Script); + +global.JSZipUtils._getBinaryFromXHR = function (xhr) { + var binary = xhr.responseBody; + var byteMapping = {}; + for ( var i = 0; i < 256; i++ ) { + for ( var j = 0; j < 256; j++ ) { + byteMapping[ String.fromCharCode( i + (j << 8) ) ] = + String.fromCharCode(i) + String.fromCharCode(j); + } + } + var rawBytes = IEBinaryToArray_ByteStr(binary); + var lastChr = IEBinaryToArray_ByteStr_Last(binary); + return rawBytes.replace(/[\s\S]/g, function( match ) { + return byteMapping[match]; + }) + lastChr; +}; + +// enforcing Stuk's coding style +// vim: set shiftwidth=4 softtabstop=4: + +},{}]},{},[1]) +; diff --git a/doc/1.5.5/guacamole-ext/jquery/jszip-utils/dist/jszip-utils-ie.min.js b/doc/1.5.5/guacamole-ext/jquery/jszip-utils/dist/jszip-utils-ie.min.js new file mode 100644 index 000000000..93d8bc8ef --- /dev/null +++ b/doc/1.5.5/guacamole-ext/jquery/jszip-utils/dist/jszip-utils-ie.min.js @@ -0,0 +1,10 @@ +/*! + +JSZipUtils - A collection of cross-browser utilities to go along with JSZip. + + +(c) 2014 Stuart Knightley, David Duponchel +Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip-utils/master/LICENSE.markdown. + +*/ +!function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);throw new Error("Cannot find module '"+g+"'")}var j=c[g]={exports:{}};b[g][0].call(j.exports,function(a){var c=b[g][1][a];return e(c?c:a)},j,j.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g\r\n";document.write(b),a.JSZipUtils._getBinaryFromXHR=function(a){for(var b=a.responseBody,c={},d=0;256>d;d++)for(var e=0;256>e;e++)c[String.fromCharCode(d+(e<<8))]=String.fromCharCode(d)+String.fromCharCode(e);var f=IEBinaryToArray_ByteStr(b),g=IEBinaryToArray_ByteStr_Last(b);return f.replace(/[\s\S]/g,function(a){return c[a]})+g}},{}]},{},[1]); diff --git a/doc/1.5.5/guacamole-ext/jquery/jszip-utils/dist/jszip-utils.js b/doc/1.5.5/guacamole-ext/jquery/jszip-utils/dist/jszip-utils.js new file mode 100644 index 000000000..775895ec9 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/jquery/jszip-utils/dist/jszip-utils.js @@ -0,0 +1,118 @@ +/*! + +JSZipUtils - A collection of cross-browser utilities to go along with JSZip. + + +(c) 2014 Stuart Knightley, David Duponchel +Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip-utils/master/LICENSE.markdown. + +*/ +!function(e){"object"==typeof exports?module.exports=e():"function"==typeof define&&define.amd?define(e):"undefined"!=typeof window?window.JSZipUtils=e():"undefined"!=typeof global?global.JSZipUtils=e():"undefined"!=typeof self&&(self.JSZipUtils=e())}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o + +(c) 2014 Stuart Knightley, David Duponchel +Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip-utils/master/LICENSE.markdown. + +*/ +!function(a){"object"==typeof exports?module.exports=a():"function"==typeof define&&define.amd?define(a):"undefined"!=typeof window?window.JSZipUtils=a():"undefined"!=typeof global?global.JSZipUtils=a():"undefined"!=typeof self&&(self.JSZipUtils=a())}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);throw new Error("Cannot find module '"+g+"'")}var j=c[g]={exports:{}};b[g][0].call(j.exports,function(a){var c=b[g][1][a];return e(c?c:a)},j,j.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g + +(c) 2009-2016 Stuart Knightley +Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/master/LICENSE.markdown. + +JSZip uses the library pako released under the MIT license : +https://github.com/nodeca/pako/blob/master/LICENSE +*/ + +(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.JSZip = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o> 2; + enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); + enc3 = remainingBytes > 1 ? (((chr2 & 15) << 2) | (chr3 >> 6)) : 64; + enc4 = remainingBytes > 2 ? (chr3 & 63) : 64; + + output.push(_keyStr.charAt(enc1) + _keyStr.charAt(enc2) + _keyStr.charAt(enc3) + _keyStr.charAt(enc4)); + + } + + return output.join(""); +}; + +// public method for decoding +exports.decode = function(input) { + var chr1, chr2, chr3; + var enc1, enc2, enc3, enc4; + var i = 0, resultIndex = 0; + + var dataUrlPrefix = "data:"; + + if (input.substr(0, dataUrlPrefix.length) === dataUrlPrefix) { + // This is a common error: people give a data url + // (data:image/png;base64,iVBOR...) with a {base64: true} and + // wonders why things don't work. + // We can detect that the string input looks like a data url but we + // *can't* be sure it is one: removing everything up to the comma would + // be too dangerous. + throw new Error("Invalid base64 input, it looks like a data url."); + } + + input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); + + var totalLength = input.length * 3 / 4; + if(input.charAt(input.length - 1) === _keyStr.charAt(64)) { + totalLength--; + } + if(input.charAt(input.length - 2) === _keyStr.charAt(64)) { + totalLength--; + } + if (totalLength % 1 !== 0) { + // totalLength is not an integer, the length does not match a valid + // base64 content. That can happen if: + // - the input is not a base64 content + // - the input is *almost* a base64 content, with a extra chars at the + // beginning or at the end + // - the input uses a base64 variant (base64url for example) + throw new Error("Invalid base64 input, bad content length."); + } + var output; + if (support.uint8array) { + output = new Uint8Array(totalLength|0); + } else { + output = new Array(totalLength|0); + } + + while (i < input.length) { + + enc1 = _keyStr.indexOf(input.charAt(i++)); + enc2 = _keyStr.indexOf(input.charAt(i++)); + enc3 = _keyStr.indexOf(input.charAt(i++)); + enc4 = _keyStr.indexOf(input.charAt(i++)); + + chr1 = (enc1 << 2) | (enc2 >> 4); + chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); + chr3 = ((enc3 & 3) << 6) | enc4; + + output[resultIndex++] = chr1; + + if (enc3 !== 64) { + output[resultIndex++] = chr2; + } + if (enc4 !== 64) { + output[resultIndex++] = chr3; + } + + } + + return output; +}; + +},{"./support":30,"./utils":32}],2:[function(require,module,exports){ +'use strict'; + +var external = require("./external"); +var DataWorker = require('./stream/DataWorker'); +var Crc32Probe = require('./stream/Crc32Probe'); +var DataLengthProbe = require('./stream/DataLengthProbe'); + +/** + * Represent a compressed object, with everything needed to decompress it. + * @constructor + * @param {number} compressedSize the size of the data compressed. + * @param {number} uncompressedSize the size of the data after decompression. + * @param {number} crc32 the crc32 of the decompressed file. + * @param {object} compression the type of compression, see lib/compressions.js. + * @param {String|ArrayBuffer|Uint8Array|Buffer} data the compressed data. + */ +function CompressedObject(compressedSize, uncompressedSize, crc32, compression, data) { + this.compressedSize = compressedSize; + this.uncompressedSize = uncompressedSize; + this.crc32 = crc32; + this.compression = compression; + this.compressedContent = data; +} + +CompressedObject.prototype = { + /** + * Create a worker to get the uncompressed content. + * @return {GenericWorker} the worker. + */ + getContentWorker: function () { + var worker = new DataWorker(external.Promise.resolve(this.compressedContent)) + .pipe(this.compression.uncompressWorker()) + .pipe(new DataLengthProbe("data_length")); + + var that = this; + worker.on("end", function () { + if (this.streamInfo['data_length'] !== that.uncompressedSize) { + throw new Error("Bug : uncompressed data size mismatch"); + } + }); + return worker; + }, + /** + * Create a worker to get the compressed content. + * @return {GenericWorker} the worker. + */ + getCompressedWorker: function () { + return new DataWorker(external.Promise.resolve(this.compressedContent)) + .withStreamInfo("compressedSize", this.compressedSize) + .withStreamInfo("uncompressedSize", this.uncompressedSize) + .withStreamInfo("crc32", this.crc32) + .withStreamInfo("compression", this.compression) + ; + } +}; + +/** + * Chain the given worker with other workers to compress the content with the + * given compression. + * @param {GenericWorker} uncompressedWorker the worker to pipe. + * @param {Object} compression the compression object. + * @param {Object} compressionOptions the options to use when compressing. + * @return {GenericWorker} the new worker compressing the content. + */ +CompressedObject.createWorkerFrom = function (uncompressedWorker, compression, compressionOptions) { + return uncompressedWorker + .pipe(new Crc32Probe()) + .pipe(new DataLengthProbe("uncompressedSize")) + .pipe(compression.compressWorker(compressionOptions)) + .pipe(new DataLengthProbe("compressedSize")) + .withStreamInfo("compression", compression); +}; + +module.exports = CompressedObject; + +},{"./external":6,"./stream/Crc32Probe":25,"./stream/DataLengthProbe":26,"./stream/DataWorker":27}],3:[function(require,module,exports){ +'use strict'; + +var GenericWorker = require("./stream/GenericWorker"); + +exports.STORE = { + magic: "\x00\x00", + compressWorker : function (compressionOptions) { + return new GenericWorker("STORE compression"); + }, + uncompressWorker : function () { + return new GenericWorker("STORE decompression"); + } +}; +exports.DEFLATE = require('./flate'); + +},{"./flate":7,"./stream/GenericWorker":28}],4:[function(require,module,exports){ +'use strict'; + +var utils = require('./utils'); + +/** + * The following functions come from pako, from pako/lib/zlib/crc32.js + * released under the MIT license, see pako https://github.com/nodeca/pako/ + */ + +// Use ordinary array, since untyped makes no boost here +function makeTable() { + var c, table = []; + + for(var n =0; n < 256; n++){ + c = n; + for(var k =0; k < 8; k++){ + c = ((c&1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1)); + } + table[n] = c; + } + + return table; +} + +// Create table on load. Just 255 signed longs. Not a problem. +var crcTable = makeTable(); + + +function crc32(crc, buf, len, pos) { + var t = crcTable, end = pos + len; + + crc = crc ^ (-1); + + for (var i = pos; i < end; i++ ) { + crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF]; + } + + return (crc ^ (-1)); // >>> 0; +} + +// That's all for the pako functions. + +/** + * Compute the crc32 of a string. + * This is almost the same as the function crc32, but for strings. Using the + * same function for the two use cases leads to horrible performances. + * @param {Number} crc the starting value of the crc. + * @param {String} str the string to use. + * @param {Number} len the length of the string. + * @param {Number} pos the starting position for the crc32 computation. + * @return {Number} the computed crc32. + */ +function crc32str(crc, str, len, pos) { + var t = crcTable, end = pos + len; + + crc = crc ^ (-1); + + for (var i = pos; i < end; i++ ) { + crc = (crc >>> 8) ^ t[(crc ^ str.charCodeAt(i)) & 0xFF]; + } + + return (crc ^ (-1)); // >>> 0; +} + +module.exports = function crc32wrapper(input, crc) { + if (typeof input === "undefined" || !input.length) { + return 0; + } + + var isArray = utils.getTypeOf(input) !== "string"; + + if(isArray) { + return crc32(crc|0, input, input.length, 0); + } else { + return crc32str(crc|0, input, input.length, 0); + } +}; + +},{"./utils":32}],5:[function(require,module,exports){ +'use strict'; +exports.base64 = false; +exports.binary = false; +exports.dir = false; +exports.createFolders = true; +exports.date = null; +exports.compression = null; +exports.compressionOptions = null; +exports.comment = null; +exports.unixPermissions = null; +exports.dosPermissions = null; + +},{}],6:[function(require,module,exports){ +/* global Promise */ +'use strict'; + +// load the global object first: +// - it should be better integrated in the system (unhandledRejection in node) +// - the environment may have a custom Promise implementation (see zone.js) +var ES6Promise = null; +if (typeof Promise !== "undefined") { + ES6Promise = Promise; +} else { + ES6Promise = require("lie"); +} + +/** + * Let the user use/change some implementations. + */ +module.exports = { + Promise: ES6Promise +}; + +},{"lie":37}],7:[function(require,module,exports){ +'use strict'; +var USE_TYPEDARRAY = (typeof Uint8Array !== 'undefined') && (typeof Uint16Array !== 'undefined') && (typeof Uint32Array !== 'undefined'); + +var pako = require("pako"); +var utils = require("./utils"); +var GenericWorker = require("./stream/GenericWorker"); + +var ARRAY_TYPE = USE_TYPEDARRAY ? "uint8array" : "array"; + +exports.magic = "\x08\x00"; + +/** + * Create a worker that uses pako to inflate/deflate. + * @constructor + * @param {String} action the name of the pako function to call : either "Deflate" or "Inflate". + * @param {Object} options the options to use when (de)compressing. + */ +function FlateWorker(action, options) { + GenericWorker.call(this, "FlateWorker/" + action); + + this._pako = null; + this._pakoAction = action; + this._pakoOptions = options; + // the `meta` object from the last chunk received + // this allow this worker to pass around metadata + this.meta = {}; +} + +utils.inherits(FlateWorker, GenericWorker); + +/** + * @see GenericWorker.processChunk + */ +FlateWorker.prototype.processChunk = function (chunk) { + this.meta = chunk.meta; + if (this._pako === null) { + this._createPako(); + } + this._pako.push(utils.transformTo(ARRAY_TYPE, chunk.data), false); +}; + +/** + * @see GenericWorker.flush + */ +FlateWorker.prototype.flush = function () { + GenericWorker.prototype.flush.call(this); + if (this._pako === null) { + this._createPako(); + } + this._pako.push([], true); +}; +/** + * @see GenericWorker.cleanUp + */ +FlateWorker.prototype.cleanUp = function () { + GenericWorker.prototype.cleanUp.call(this); + this._pako = null; +}; + +/** + * Create the _pako object. + * TODO: lazy-loading this object isn't the best solution but it's the + * quickest. The best solution is to lazy-load the worker list. See also the + * issue #446. + */ +FlateWorker.prototype._createPako = function () { + this._pako = new pako[this._pakoAction]({ + raw: true, + level: this._pakoOptions.level || -1 // default compression + }); + var self = this; + this._pako.onData = function(data) { + self.push({ + data : data, + meta : self.meta + }); + }; +}; + +exports.compressWorker = function (compressionOptions) { + return new FlateWorker("Deflate", compressionOptions); +}; +exports.uncompressWorker = function () { + return new FlateWorker("Inflate", {}); +}; + +},{"./stream/GenericWorker":28,"./utils":32,"pako":38}],8:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var GenericWorker = require('../stream/GenericWorker'); +var utf8 = require('../utf8'); +var crc32 = require('../crc32'); +var signature = require('../signature'); + +/** + * Transform an integer into a string in hexadecimal. + * @private + * @param {number} dec the number to convert. + * @param {number} bytes the number of bytes to generate. + * @returns {string} the result. + */ +var decToHex = function(dec, bytes) { + var hex = "", i; + for (i = 0; i < bytes; i++) { + hex += String.fromCharCode(dec & 0xff); + dec = dec >>> 8; + } + return hex; +}; + +/** + * Generate the UNIX part of the external file attributes. + * @param {Object} unixPermissions the unix permissions or null. + * @param {Boolean} isDir true if the entry is a directory, false otherwise. + * @return {Number} a 32 bit integer. + * + * adapted from http://unix.stackexchange.com/questions/14705/the-zip-formats-external-file-attribute : + * + * TTTTsstrwxrwxrwx0000000000ADVSHR + * ^^^^____________________________ file type, see zipinfo.c (UNX_*) + * ^^^_________________________ setuid, setgid, sticky + * ^^^^^^^^^________________ permissions + * ^^^^^^^^^^______ not used ? + * ^^^^^^ DOS attribute bits : Archive, Directory, Volume label, System file, Hidden, Read only + */ +var generateUnixExternalFileAttr = function (unixPermissions, isDir) { + + var result = unixPermissions; + if (!unixPermissions) { + // I can't use octal values in strict mode, hence the hexa. + // 040775 => 0x41fd + // 0100664 => 0x81b4 + result = isDir ? 0x41fd : 0x81b4; + } + return (result & 0xFFFF) << 16; +}; + +/** + * Generate the DOS part of the external file attributes. + * @param {Object} dosPermissions the dos permissions or null. + * @param {Boolean} isDir true if the entry is a directory, false otherwise. + * @return {Number} a 32 bit integer. + * + * Bit 0 Read-Only + * Bit 1 Hidden + * Bit 2 System + * Bit 3 Volume Label + * Bit 4 Directory + * Bit 5 Archive + */ +var generateDosExternalFileAttr = function (dosPermissions, isDir) { + + // the dir flag is already set for compatibility + return (dosPermissions || 0) & 0x3F; +}; + +/** + * Generate the various parts used in the construction of the final zip file. + * @param {Object} streamInfo the hash with information about the compressed file. + * @param {Boolean} streamedContent is the content streamed ? + * @param {Boolean} streamingEnded is the stream finished ? + * @param {number} offset the current offset from the start of the zip file. + * @param {String} platform let's pretend we are this platform (change platform dependents fields) + * @param {Function} encodeFileName the function to encode the file name / comment. + * @return {Object} the zip parts. + */ +var generateZipParts = function(streamInfo, streamedContent, streamingEnded, offset, platform, encodeFileName) { + var file = streamInfo['file'], + compression = streamInfo['compression'], + useCustomEncoding = encodeFileName !== utf8.utf8encode, + encodedFileName = utils.transformTo("string", encodeFileName(file.name)), + utfEncodedFileName = utils.transformTo("string", utf8.utf8encode(file.name)), + comment = file.comment, + encodedComment = utils.transformTo("string", encodeFileName(comment)), + utfEncodedComment = utils.transformTo("string", utf8.utf8encode(comment)), + useUTF8ForFileName = utfEncodedFileName.length !== file.name.length, + useUTF8ForComment = utfEncodedComment.length !== comment.length, + dosTime, + dosDate, + extraFields = "", + unicodePathExtraField = "", + unicodeCommentExtraField = "", + dir = file.dir, + date = file.date; + + + var dataInfo = { + crc32 : 0, + compressedSize : 0, + uncompressedSize : 0 + }; + + // if the content is streamed, the sizes/crc32 are only available AFTER + // the end of the stream. + if (!streamedContent || streamingEnded) { + dataInfo.crc32 = streamInfo['crc32']; + dataInfo.compressedSize = streamInfo['compressedSize']; + dataInfo.uncompressedSize = streamInfo['uncompressedSize']; + } + + var bitflag = 0; + if (streamedContent) { + // Bit 3: the sizes/crc32 are set to zero in the local header. + // The correct values are put in the data descriptor immediately + // following the compressed data. + bitflag |= 0x0008; + } + if (!useCustomEncoding && (useUTF8ForFileName || useUTF8ForComment)) { + // Bit 11: Language encoding flag (EFS). + bitflag |= 0x0800; + } + + + var extFileAttr = 0; + var versionMadeBy = 0; + if (dir) { + // dos or unix, we set the dos dir flag + extFileAttr |= 0x00010; + } + if(platform === "UNIX") { + versionMadeBy = 0x031E; // UNIX, version 3.0 + extFileAttr |= generateUnixExternalFileAttr(file.unixPermissions, dir); + } else { // DOS or other, fallback to DOS + versionMadeBy = 0x0014; // DOS, version 2.0 + extFileAttr |= generateDosExternalFileAttr(file.dosPermissions, dir); + } + + // date + // @see http://www.delorie.com/djgpp/doc/rbinter/it/52/13.html + // @see http://www.delorie.com/djgpp/doc/rbinter/it/65/16.html + // @see http://www.delorie.com/djgpp/doc/rbinter/it/66/16.html + + dosTime = date.getUTCHours(); + dosTime = dosTime << 6; + dosTime = dosTime | date.getUTCMinutes(); + dosTime = dosTime << 5; + dosTime = dosTime | date.getUTCSeconds() / 2; + + dosDate = date.getUTCFullYear() - 1980; + dosDate = dosDate << 4; + dosDate = dosDate | (date.getUTCMonth() + 1); + dosDate = dosDate << 5; + dosDate = dosDate | date.getUTCDate(); + + if (useUTF8ForFileName) { + // set the unicode path extra field. unzip needs at least one extra + // field to correctly handle unicode path, so using the path is as good + // as any other information. This could improve the situation with + // other archive managers too. + // This field is usually used without the utf8 flag, with a non + // unicode path in the header (winrar, winzip). This helps (a bit) + // with the messy Windows' default compressed folders feature but + // breaks on p7zip which doesn't seek the unicode path extra field. + // So for now, UTF-8 everywhere ! + unicodePathExtraField = + // Version + decToHex(1, 1) + + // NameCRC32 + decToHex(crc32(encodedFileName), 4) + + // UnicodeName + utfEncodedFileName; + + extraFields += + // Info-ZIP Unicode Path Extra Field + "\x75\x70" + + // size + decToHex(unicodePathExtraField.length, 2) + + // content + unicodePathExtraField; + } + + if(useUTF8ForComment) { + + unicodeCommentExtraField = + // Version + decToHex(1, 1) + + // CommentCRC32 + decToHex(crc32(encodedComment), 4) + + // UnicodeName + utfEncodedComment; + + extraFields += + // Info-ZIP Unicode Path Extra Field + "\x75\x63" + + // size + decToHex(unicodeCommentExtraField.length, 2) + + // content + unicodeCommentExtraField; + } + + var header = ""; + + // version needed to extract + header += "\x0A\x00"; + // general purpose bit flag + header += decToHex(bitflag, 2); + // compression method + header += compression.magic; + // last mod file time + header += decToHex(dosTime, 2); + // last mod file date + header += decToHex(dosDate, 2); + // crc-32 + header += decToHex(dataInfo.crc32, 4); + // compressed size + header += decToHex(dataInfo.compressedSize, 4); + // uncompressed size + header += decToHex(dataInfo.uncompressedSize, 4); + // file name length + header += decToHex(encodedFileName.length, 2); + // extra field length + header += decToHex(extraFields.length, 2); + + + var fileRecord = signature.LOCAL_FILE_HEADER + header + encodedFileName + extraFields; + + var dirRecord = signature.CENTRAL_FILE_HEADER + + // version made by (00: DOS) + decToHex(versionMadeBy, 2) + + // file header (common to file and central directory) + header + + // file comment length + decToHex(encodedComment.length, 2) + + // disk number start + "\x00\x00" + + // internal file attributes TODO + "\x00\x00" + + // external file attributes + decToHex(extFileAttr, 4) + + // relative offset of local header + decToHex(offset, 4) + + // file name + encodedFileName + + // extra field + extraFields + + // file comment + encodedComment; + + return { + fileRecord: fileRecord, + dirRecord: dirRecord + }; +}; + +/** + * Generate the EOCD record. + * @param {Number} entriesCount the number of entries in the zip file. + * @param {Number} centralDirLength the length (in bytes) of the central dir. + * @param {Number} localDirLength the length (in bytes) of the local dir. + * @param {String} comment the zip file comment as a binary string. + * @param {Function} encodeFileName the function to encode the comment. + * @return {String} the EOCD record. + */ +var generateCentralDirectoryEnd = function (entriesCount, centralDirLength, localDirLength, comment, encodeFileName) { + var dirEnd = ""; + var encodedComment = utils.transformTo("string", encodeFileName(comment)); + + // end of central dir signature + dirEnd = signature.CENTRAL_DIRECTORY_END + + // number of this disk + "\x00\x00" + + // number of the disk with the start of the central directory + "\x00\x00" + + // total number of entries in the central directory on this disk + decToHex(entriesCount, 2) + + // total number of entries in the central directory + decToHex(entriesCount, 2) + + // size of the central directory 4 bytes + decToHex(centralDirLength, 4) + + // offset of start of central directory with respect to the starting disk number + decToHex(localDirLength, 4) + + // .ZIP file comment length + decToHex(encodedComment.length, 2) + + // .ZIP file comment + encodedComment; + + return dirEnd; +}; + +/** + * Generate data descriptors for a file entry. + * @param {Object} streamInfo the hash generated by a worker, containing information + * on the file entry. + * @return {String} the data descriptors. + */ +var generateDataDescriptors = function (streamInfo) { + var descriptor = ""; + descriptor = signature.DATA_DESCRIPTOR + + // crc-32 4 bytes + decToHex(streamInfo['crc32'], 4) + + // compressed size 4 bytes + decToHex(streamInfo['compressedSize'], 4) + + // uncompressed size 4 bytes + decToHex(streamInfo['uncompressedSize'], 4); + + return descriptor; +}; + + +/** + * A worker to concatenate other workers to create a zip file. + * @param {Boolean} streamFiles `true` to stream the content of the files, + * `false` to accumulate it. + * @param {String} comment the comment to use. + * @param {String} platform the platform to use, "UNIX" or "DOS". + * @param {Function} encodeFileName the function to encode file names and comments. + */ +function ZipFileWorker(streamFiles, comment, platform, encodeFileName) { + GenericWorker.call(this, "ZipFileWorker"); + // The number of bytes written so far. This doesn't count accumulated chunks. + this.bytesWritten = 0; + // The comment of the zip file + this.zipComment = comment; + // The platform "generating" the zip file. + this.zipPlatform = platform; + // the function to encode file names and comments. + this.encodeFileName = encodeFileName; + // Should we stream the content of the files ? + this.streamFiles = streamFiles; + // If `streamFiles` is false, we will need to accumulate the content of the + // files to calculate sizes / crc32 (and write them *before* the content). + // This boolean indicates if we are accumulating chunks (it will change a lot + // during the lifetime of this worker). + this.accumulate = false; + // The buffer receiving chunks when accumulating content. + this.contentBuffer = []; + // The list of generated directory records. + this.dirRecords = []; + // The offset (in bytes) from the beginning of the zip file for the current source. + this.currentSourceOffset = 0; + // The total number of entries in this zip file. + this.entriesCount = 0; + // the name of the file currently being added, null when handling the end of the zip file. + // Used for the emitted metadata. + this.currentFile = null; + + + + this._sources = []; +} +utils.inherits(ZipFileWorker, GenericWorker); + +/** + * @see GenericWorker.push + */ +ZipFileWorker.prototype.push = function (chunk) { + + var currentFilePercent = chunk.meta.percent || 0; + var entriesCount = this.entriesCount; + var remainingFiles = this._sources.length; + + if(this.accumulate) { + this.contentBuffer.push(chunk); + } else { + this.bytesWritten += chunk.data.length; + + GenericWorker.prototype.push.call(this, { + data : chunk.data, + meta : { + currentFile : this.currentFile, + percent : entriesCount ? (currentFilePercent + 100 * (entriesCount - remainingFiles - 1)) / entriesCount : 100 + } + }); + } +}; + +/** + * The worker started a new source (an other worker). + * @param {Object} streamInfo the streamInfo object from the new source. + */ +ZipFileWorker.prototype.openedSource = function (streamInfo) { + this.currentSourceOffset = this.bytesWritten; + this.currentFile = streamInfo['file'].name; + + var streamedContent = this.streamFiles && !streamInfo['file'].dir; + + // don't stream folders (because they don't have any content) + if(streamedContent) { + var record = generateZipParts(streamInfo, streamedContent, false, this.currentSourceOffset, this.zipPlatform, this.encodeFileName); + this.push({ + data : record.fileRecord, + meta : {percent:0} + }); + } else { + // we need to wait for the whole file before pushing anything + this.accumulate = true; + } +}; + +/** + * The worker finished a source (an other worker). + * @param {Object} streamInfo the streamInfo object from the finished source. + */ +ZipFileWorker.prototype.closedSource = function (streamInfo) { + this.accumulate = false; + var streamedContent = this.streamFiles && !streamInfo['file'].dir; + var record = generateZipParts(streamInfo, streamedContent, true, this.currentSourceOffset, this.zipPlatform, this.encodeFileName); + + this.dirRecords.push(record.dirRecord); + if(streamedContent) { + // after the streamed file, we put data descriptors + this.push({ + data : generateDataDescriptors(streamInfo), + meta : {percent:100} + }); + } else { + // the content wasn't streamed, we need to push everything now + // first the file record, then the content + this.push({ + data : record.fileRecord, + meta : {percent:0} + }); + while(this.contentBuffer.length) { + this.push(this.contentBuffer.shift()); + } + } + this.currentFile = null; +}; + +/** + * @see GenericWorker.flush + */ +ZipFileWorker.prototype.flush = function () { + + var localDirLength = this.bytesWritten; + for(var i = 0; i < this.dirRecords.length; i++) { + this.push({ + data : this.dirRecords[i], + meta : {percent:100} + }); + } + var centralDirLength = this.bytesWritten - localDirLength; + + var dirEnd = generateCentralDirectoryEnd(this.dirRecords.length, centralDirLength, localDirLength, this.zipComment, this.encodeFileName); + + this.push({ + data : dirEnd, + meta : {percent:100} + }); +}; + +/** + * Prepare the next source to be read. + */ +ZipFileWorker.prototype.prepareNextSource = function () { + this.previous = this._sources.shift(); + this.openedSource(this.previous.streamInfo); + if (this.isPaused) { + this.previous.pause(); + } else { + this.previous.resume(); + } +}; + +/** + * @see GenericWorker.registerPrevious + */ +ZipFileWorker.prototype.registerPrevious = function (previous) { + this._sources.push(previous); + var self = this; + + previous.on('data', function (chunk) { + self.processChunk(chunk); + }); + previous.on('end', function () { + self.closedSource(self.previous.streamInfo); + if(self._sources.length) { + self.prepareNextSource(); + } else { + self.end(); + } + }); + previous.on('error', function (e) { + self.error(e); + }); + return this; +}; + +/** + * @see GenericWorker.resume + */ +ZipFileWorker.prototype.resume = function () { + if(!GenericWorker.prototype.resume.call(this)) { + return false; + } + + if (!this.previous && this._sources.length) { + this.prepareNextSource(); + return true; + } + if (!this.previous && !this._sources.length && !this.generatedError) { + this.end(); + return true; + } +}; + +/** + * @see GenericWorker.error + */ +ZipFileWorker.prototype.error = function (e) { + var sources = this._sources; + if(!GenericWorker.prototype.error.call(this, e)) { + return false; + } + for(var i = 0; i < sources.length; i++) { + try { + sources[i].error(e); + } catch(e) { + // the `error` exploded, nothing to do + } + } + return true; +}; + +/** + * @see GenericWorker.lock + */ +ZipFileWorker.prototype.lock = function () { + GenericWorker.prototype.lock.call(this); + var sources = this._sources; + for(var i = 0; i < sources.length; i++) { + sources[i].lock(); + } +}; + +module.exports = ZipFileWorker; + +},{"../crc32":4,"../signature":23,"../stream/GenericWorker":28,"../utf8":31,"../utils":32}],9:[function(require,module,exports){ +'use strict'; + +var compressions = require('../compressions'); +var ZipFileWorker = require('./ZipFileWorker'); + +/** + * Find the compression to use. + * @param {String} fileCompression the compression defined at the file level, if any. + * @param {String} zipCompression the compression defined at the load() level. + * @return {Object} the compression object to use. + */ +var getCompression = function (fileCompression, zipCompression) { + + var compressionName = fileCompression || zipCompression; + var compression = compressions[compressionName]; + if (!compression) { + throw new Error(compressionName + " is not a valid compression method !"); + } + return compression; +}; + +/** + * Create a worker to generate a zip file. + * @param {JSZip} zip the JSZip instance at the right root level. + * @param {Object} options to generate the zip file. + * @param {String} comment the comment to use. + */ +exports.generateWorker = function (zip, options, comment) { + + var zipFileWorker = new ZipFileWorker(options.streamFiles, comment, options.platform, options.encodeFileName); + var entriesCount = 0; + try { + + zip.forEach(function (relativePath, file) { + entriesCount++; + var compression = getCompression(file.options.compression, options.compression); + var compressionOptions = file.options.compressionOptions || options.compressionOptions || {}; + var dir = file.dir, date = file.date; + + file._compressWorker(compression, compressionOptions) + .withStreamInfo("file", { + name : relativePath, + dir : dir, + date : date, + comment : file.comment || "", + unixPermissions : file.unixPermissions, + dosPermissions : file.dosPermissions + }) + .pipe(zipFileWorker); + }); + zipFileWorker.entriesCount = entriesCount; + } catch (e) { + zipFileWorker.error(e); + } + + return zipFileWorker; +}; + +},{"../compressions":3,"./ZipFileWorker":8}],10:[function(require,module,exports){ +'use strict'; + +/** + * Representation a of zip file in js + * @constructor + */ +function JSZip() { + // if this constructor is used without `new`, it adds `new` before itself: + if(!(this instanceof JSZip)) { + return new JSZip(); + } + + if(arguments.length) { + throw new Error("The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide."); + } + + // object containing the files : + // { + // "folder/" : {...}, + // "folder/data.txt" : {...} + // } + // NOTE: we use a null prototype because we do not + // want filenames like "toString" coming from a zip file + // to overwrite methods and attributes in a normal Object. + this.files = Object.create(null); + + this.comment = null; + + // Where we are in the hierarchy + this.root = ""; + this.clone = function() { + var newObj = new JSZip(); + for (var i in this) { + if (typeof this[i] !== "function") { + newObj[i] = this[i]; + } + } + return newObj; + }; +} +JSZip.prototype = require('./object'); +JSZip.prototype.loadAsync = require('./load'); +JSZip.support = require('./support'); +JSZip.defaults = require('./defaults'); + +// TODO find a better way to handle this version, +// a require('package.json').version doesn't work with webpack, see #327 +JSZip.version = "3.7.1"; + +JSZip.loadAsync = function (content, options) { + return new JSZip().loadAsync(content, options); +}; + +JSZip.external = require("./external"); +module.exports = JSZip; + +},{"./defaults":5,"./external":6,"./load":11,"./object":15,"./support":30}],11:[function(require,module,exports){ +'use strict'; +var utils = require('./utils'); +var external = require("./external"); +var utf8 = require('./utf8'); +var ZipEntries = require('./zipEntries'); +var Crc32Probe = require('./stream/Crc32Probe'); +var nodejsUtils = require("./nodejsUtils"); + +/** + * Check the CRC32 of an entry. + * @param {ZipEntry} zipEntry the zip entry to check. + * @return {Promise} the result. + */ +function checkEntryCRC32(zipEntry) { + return new external.Promise(function (resolve, reject) { + var worker = zipEntry.decompressed.getContentWorker().pipe(new Crc32Probe()); + worker.on("error", function (e) { + reject(e); + }) + .on("end", function () { + if (worker.streamInfo.crc32 !== zipEntry.decompressed.crc32) { + reject(new Error("Corrupted zip : CRC32 mismatch")); + } else { + resolve(); + } + }) + .resume(); + }); +} + +module.exports = function (data, options) { + var zip = this; + options = utils.extend(options || {}, { + base64: false, + checkCRC32: false, + optimizedBinaryString: false, + createFolders: false, + decodeFileName: utf8.utf8decode + }); + + if (nodejsUtils.isNode && nodejsUtils.isStream(data)) { + return external.Promise.reject(new Error("JSZip can't accept a stream when loading a zip file.")); + } + + return utils.prepareContent("the loaded zip file", data, true, options.optimizedBinaryString, options.base64) + .then(function (data) { + var zipEntries = new ZipEntries(options); + zipEntries.load(data); + return zipEntries; + }).then(function checkCRC32(zipEntries) { + var promises = [external.Promise.resolve(zipEntries)]; + var files = zipEntries.files; + if (options.checkCRC32) { + for (var i = 0; i < files.length; i++) { + promises.push(checkEntryCRC32(files[i])); + } + } + return external.Promise.all(promises); + }).then(function addFiles(results) { + var zipEntries = results.shift(); + var files = zipEntries.files; + for (var i = 0; i < files.length; i++) { + var input = files[i]; + zip.file(input.fileNameStr, input.decompressed, { + binary: true, + optimizedBinaryString: true, + date: input.date, + dir: input.dir, + comment: input.fileCommentStr.length ? input.fileCommentStr : null, + unixPermissions: input.unixPermissions, + dosPermissions: input.dosPermissions, + createFolders: options.createFolders + }); + } + if (zipEntries.zipComment.length) { + zip.comment = zipEntries.zipComment; + } + + return zip; + }); +}; + +},{"./external":6,"./nodejsUtils":14,"./stream/Crc32Probe":25,"./utf8":31,"./utils":32,"./zipEntries":33}],12:[function(require,module,exports){ +"use strict"; + +var utils = require('../utils'); +var GenericWorker = require('../stream/GenericWorker'); + +/** + * A worker that use a nodejs stream as source. + * @constructor + * @param {String} filename the name of the file entry for this stream. + * @param {Readable} stream the nodejs stream. + */ +function NodejsStreamInputAdapter(filename, stream) { + GenericWorker.call(this, "Nodejs stream input adapter for " + filename); + this._upstreamEnded = false; + this._bindStream(stream); +} + +utils.inherits(NodejsStreamInputAdapter, GenericWorker); + +/** + * Prepare the stream and bind the callbacks on it. + * Do this ASAP on node 0.10 ! A lazy binding doesn't always work. + * @param {Stream} stream the nodejs stream to use. + */ +NodejsStreamInputAdapter.prototype._bindStream = function (stream) { + var self = this; + this._stream = stream; + stream.pause(); + stream + .on("data", function (chunk) { + self.push({ + data: chunk, + meta : { + percent : 0 + } + }); + }) + .on("error", function (e) { + if(self.isPaused) { + this.generatedError = e; + } else { + self.error(e); + } + }) + .on("end", function () { + if(self.isPaused) { + self._upstreamEnded = true; + } else { + self.end(); + } + }); +}; +NodejsStreamInputAdapter.prototype.pause = function () { + if(!GenericWorker.prototype.pause.call(this)) { + return false; + } + this._stream.pause(); + return true; +}; +NodejsStreamInputAdapter.prototype.resume = function () { + if(!GenericWorker.prototype.resume.call(this)) { + return false; + } + + if(this._upstreamEnded) { + this.end(); + } else { + this._stream.resume(); + } + + return true; +}; + +module.exports = NodejsStreamInputAdapter; + +},{"../stream/GenericWorker":28,"../utils":32}],13:[function(require,module,exports){ +'use strict'; + +var Readable = require('readable-stream').Readable; + +var utils = require('../utils'); +utils.inherits(NodejsStreamOutputAdapter, Readable); + +/** +* A nodejs stream using a worker as source. +* @see the SourceWrapper in http://nodejs.org/api/stream.html +* @constructor +* @param {StreamHelper} helper the helper wrapping the worker +* @param {Object} options the nodejs stream options +* @param {Function} updateCb the update callback. +*/ +function NodejsStreamOutputAdapter(helper, options, updateCb) { + Readable.call(this, options); + this._helper = helper; + + var self = this; + helper.on("data", function (data, meta) { + if (!self.push(data)) { + self._helper.pause(); + } + if(updateCb) { + updateCb(meta); + } + }) + .on("error", function(e) { + self.emit('error', e); + }) + .on("end", function () { + self.push(null); + }); +} + + +NodejsStreamOutputAdapter.prototype._read = function() { + this._helper.resume(); +}; + +module.exports = NodejsStreamOutputAdapter; + +},{"../utils":32,"readable-stream":16}],14:[function(require,module,exports){ +'use strict'; + +module.exports = { + /** + * True if this is running in Nodejs, will be undefined in a browser. + * In a browser, browserify won't include this file and the whole module + * will be resolved an empty object. + */ + isNode : typeof Buffer !== "undefined", + /** + * Create a new nodejs Buffer from an existing content. + * @param {Object} data the data to pass to the constructor. + * @param {String} encoding the encoding to use. + * @return {Buffer} a new Buffer. + */ + newBufferFrom: function(data, encoding) { + if (Buffer.from && Buffer.from !== Uint8Array.from) { + return Buffer.from(data, encoding); + } else { + if (typeof data === "number") { + // Safeguard for old Node.js versions. On newer versions, + // Buffer.from(number) / Buffer(number, encoding) already throw. + throw new Error("The \"data\" argument must not be a number"); + } + return new Buffer(data, encoding); + } + }, + /** + * Create a new nodejs Buffer with the specified size. + * @param {Integer} size the size of the buffer. + * @return {Buffer} a new Buffer. + */ + allocBuffer: function (size) { + if (Buffer.alloc) { + return Buffer.alloc(size); + } else { + var buf = new Buffer(size); + buf.fill(0); + return buf; + } + }, + /** + * Find out if an object is a Buffer. + * @param {Object} b the object to test. + * @return {Boolean} true if the object is a Buffer, false otherwise. + */ + isBuffer : function(b){ + return Buffer.isBuffer(b); + }, + + isStream : function (obj) { + return obj && + typeof obj.on === "function" && + typeof obj.pause === "function" && + typeof obj.resume === "function"; + } +}; + +},{}],15:[function(require,module,exports){ +'use strict'; +var utf8 = require('./utf8'); +var utils = require('./utils'); +var GenericWorker = require('./stream/GenericWorker'); +var StreamHelper = require('./stream/StreamHelper'); +var defaults = require('./defaults'); +var CompressedObject = require('./compressedObject'); +var ZipObject = require('./zipObject'); +var generate = require("./generate"); +var nodejsUtils = require("./nodejsUtils"); +var NodejsStreamInputAdapter = require("./nodejs/NodejsStreamInputAdapter"); + + +/** + * Add a file in the current folder. + * @private + * @param {string} name the name of the file + * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data of the file + * @param {Object} originalOptions the options of the file + * @return {Object} the new file. + */ +var fileAdd = function(name, data, originalOptions) { + // be sure sub folders exist + var dataType = utils.getTypeOf(data), + parent; + + + /* + * Correct options. + */ + + var o = utils.extend(originalOptions || {}, defaults); + o.date = o.date || new Date(); + if (o.compression !== null) { + o.compression = o.compression.toUpperCase(); + } + + if (typeof o.unixPermissions === "string") { + o.unixPermissions = parseInt(o.unixPermissions, 8); + } + + // UNX_IFDIR 0040000 see zipinfo.c + if (o.unixPermissions && (o.unixPermissions & 0x4000)) { + o.dir = true; + } + // Bit 4 Directory + if (o.dosPermissions && (o.dosPermissions & 0x0010)) { + o.dir = true; + } + + if (o.dir) { + name = forceTrailingSlash(name); + } + if (o.createFolders && (parent = parentFolder(name))) { + folderAdd.call(this, parent, true); + } + + var isUnicodeString = dataType === "string" && o.binary === false && o.base64 === false; + if (!originalOptions || typeof originalOptions.binary === "undefined") { + o.binary = !isUnicodeString; + } + + + var isCompressedEmpty = (data instanceof CompressedObject) && data.uncompressedSize === 0; + + if (isCompressedEmpty || o.dir || !data || data.length === 0) { + o.base64 = false; + o.binary = true; + data = ""; + o.compression = "STORE"; + dataType = "string"; + } + + /* + * Convert content to fit. + */ + + var zipObjectContent = null; + if (data instanceof CompressedObject || data instanceof GenericWorker) { + zipObjectContent = data; + } else if (nodejsUtils.isNode && nodejsUtils.isStream(data)) { + zipObjectContent = new NodejsStreamInputAdapter(name, data); + } else { + zipObjectContent = utils.prepareContent(name, data, o.binary, o.optimizedBinaryString, o.base64); + } + + var object = new ZipObject(name, zipObjectContent, o); + this.files[name] = object; + /* + TODO: we can't throw an exception because we have async promises + (we can have a promise of a Date() for example) but returning a + promise is useless because file(name, data) returns the JSZip + object for chaining. Should we break that to allow the user + to catch the error ? + + return external.Promise.resolve(zipObjectContent) + .then(function () { + return object; + }); + */ +}; + +/** + * Find the parent folder of the path. + * @private + * @param {string} path the path to use + * @return {string} the parent folder, or "" + */ +var parentFolder = function (path) { + if (path.slice(-1) === '/') { + path = path.substring(0, path.length - 1); + } + var lastSlash = path.lastIndexOf('/'); + return (lastSlash > 0) ? path.substring(0, lastSlash) : ""; +}; + +/** + * Returns the path with a slash at the end. + * @private + * @param {String} path the path to check. + * @return {String} the path with a trailing slash. + */ +var forceTrailingSlash = function(path) { + // Check the name ends with a / + if (path.slice(-1) !== "/") { + path += "/"; // IE doesn't like substr(-1) + } + return path; +}; + +/** + * Add a (sub) folder in the current folder. + * @private + * @param {string} name the folder's name + * @param {boolean=} [createFolders] If true, automatically create sub + * folders. Defaults to false. + * @return {Object} the new folder. + */ +var folderAdd = function(name, createFolders) { + createFolders = (typeof createFolders !== 'undefined') ? createFolders : defaults.createFolders; + + name = forceTrailingSlash(name); + + // Does this folder already exist? + if (!this.files[name]) { + fileAdd.call(this, name, null, { + dir: true, + createFolders: createFolders + }); + } + return this.files[name]; +}; + +/** +* Cross-window, cross-Node-context regular expression detection +* @param {Object} object Anything +* @return {Boolean} true if the object is a regular expression, +* false otherwise +*/ +function isRegExp(object) { + return Object.prototype.toString.call(object) === "[object RegExp]"; +} + +// return the actual prototype of JSZip +var out = { + /** + * @see loadAsync + */ + load: function() { + throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide."); + }, + + + /** + * Call a callback function for each entry at this folder level. + * @param {Function} cb the callback function: + * function (relativePath, file) {...} + * It takes 2 arguments : the relative path and the file. + */ + forEach: function(cb) { + var filename, relativePath, file; + /* jshint ignore:start */ + // ignore warning about unwanted properties because this.files is a null prototype object + for (filename in this.files) { + file = this.files[filename]; + relativePath = filename.slice(this.root.length, filename.length); + if (relativePath && filename.slice(0, this.root.length) === this.root) { // the file is in the current root + cb(relativePath, file); // TODO reverse the parameters ? need to be clean AND consistent with the filter search fn... + } + } + /* jshint ignore:end */ + }, + + /** + * Filter nested files/folders with the specified function. + * @param {Function} search the predicate to use : + * function (relativePath, file) {...} + * It takes 2 arguments : the relative path and the file. + * @return {Array} An array of matching elements. + */ + filter: function(search) { + var result = []; + this.forEach(function (relativePath, entry) { + if (search(relativePath, entry)) { // the file matches the function + result.push(entry); + } + + }); + return result; + }, + + /** + * Add a file to the zip file, or search a file. + * @param {string|RegExp} name The name of the file to add (if data is defined), + * the name of the file to find (if no data) or a regex to match files. + * @param {String|ArrayBuffer|Uint8Array|Buffer} data The file data, either raw or base64 encoded + * @param {Object} o File options + * @return {JSZip|Object|Array} this JSZip object (when adding a file), + * a file (when searching by string) or an array of files (when searching by regex). + */ + file: function(name, data, o) { + if (arguments.length === 1) { + if (isRegExp(name)) { + var regexp = name; + return this.filter(function(relativePath, file) { + return !file.dir && regexp.test(relativePath); + }); + } + else { // text + var obj = this.files[this.root + name]; + if (obj && !obj.dir) { + return obj; + } else { + return null; + } + } + } + else { // more than one argument : we have data ! + name = this.root + name; + fileAdd.call(this, name, data, o); + } + return this; + }, + + /** + * Add a directory to the zip file, or search. + * @param {String|RegExp} arg The name of the directory to add, or a regex to search folders. + * @return {JSZip} an object with the new directory as the root, or an array containing matching folders. + */ + folder: function(arg) { + if (!arg) { + return this; + } + + if (isRegExp(arg)) { + return this.filter(function(relativePath, file) { + return file.dir && arg.test(relativePath); + }); + } + + // else, name is a new folder + var name = this.root + arg; + var newFolder = folderAdd.call(this, name); + + // Allow chaining by returning a new object with this folder as the root + var ret = this.clone(); + ret.root = newFolder.name; + return ret; + }, + + /** + * Delete a file, or a directory and all sub-files, from the zip + * @param {string} name the name of the file to delete + * @return {JSZip} this JSZip object + */ + remove: function(name) { + name = this.root + name; + var file = this.files[name]; + if (!file) { + // Look for any folders + if (name.slice(-1) !== "/") { + name += "/"; + } + file = this.files[name]; + } + + if (file && !file.dir) { + // file + delete this.files[name]; + } else { + // maybe a folder, delete recursively + var kids = this.filter(function(relativePath, file) { + return file.name.slice(0, name.length) === name; + }); + for (var i = 0; i < kids.length; i++) { + delete this.files[kids[i].name]; + } + } + + return this; + }, + + /** + * Generate the complete zip file + * @param {Object} options the options to generate the zip file : + * - compression, "STORE" by default. + * - type, "base64" by default. Values are : string, base64, uint8array, arraybuffer, blob. + * @return {String|Uint8Array|ArrayBuffer|Buffer|Blob} the zip file + */ + generate: function(options) { + throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide."); + }, + + /** + * Generate the complete zip file as an internal stream. + * @param {Object} options the options to generate the zip file : + * - compression, "STORE" by default. + * - type, "base64" by default. Values are : string, base64, uint8array, arraybuffer, blob. + * @return {StreamHelper} the streamed zip file. + */ + generateInternalStream: function(options) { + var worker, opts = {}; + try { + opts = utils.extend(options || {}, { + streamFiles: false, + compression: "STORE", + compressionOptions : null, + type: "", + platform: "DOS", + comment: null, + mimeType: 'application/zip', + encodeFileName: utf8.utf8encode + }); + + opts.type = opts.type.toLowerCase(); + opts.compression = opts.compression.toUpperCase(); + + // "binarystring" is preferred but the internals use "string". + if(opts.type === "binarystring") { + opts.type = "string"; + } + + if (!opts.type) { + throw new Error("No output type specified."); + } + + utils.checkSupport(opts.type); + + // accept nodejs `process.platform` + if( + opts.platform === 'darwin' || + opts.platform === 'freebsd' || + opts.platform === 'linux' || + opts.platform === 'sunos' + ) { + opts.platform = "UNIX"; + } + if (opts.platform === 'win32') { + opts.platform = "DOS"; + } + + var comment = opts.comment || this.comment || ""; + worker = generate.generateWorker(this, opts, comment); + } catch (e) { + worker = new GenericWorker("error"); + worker.error(e); + } + return new StreamHelper(worker, opts.type || "string", opts.mimeType); + }, + /** + * Generate the complete zip file asynchronously. + * @see generateInternalStream + */ + generateAsync: function(options, onUpdate) { + return this.generateInternalStream(options).accumulate(onUpdate); + }, + /** + * Generate the complete zip file asynchronously. + * @see generateInternalStream + */ + generateNodeStream: function(options, onUpdate) { + options = options || {}; + if (!options.type) { + options.type = "nodebuffer"; + } + return this.generateInternalStream(options).toNodejsStream(onUpdate); + } +}; +module.exports = out; + +},{"./compressedObject":2,"./defaults":5,"./generate":9,"./nodejs/NodejsStreamInputAdapter":12,"./nodejsUtils":14,"./stream/GenericWorker":28,"./stream/StreamHelper":29,"./utf8":31,"./utils":32,"./zipObject":35}],16:[function(require,module,exports){ +/* + * This file is used by module bundlers (browserify/webpack/etc) when + * including a stream implementation. We use "readable-stream" to get a + * consistent behavior between nodejs versions but bundlers often have a shim + * for "stream". Using this shim greatly improve the compatibility and greatly + * reduce the final size of the bundle (only one stream implementation, not + * two). + */ +module.exports = require("stream"); + +},{"stream":undefined}],17:[function(require,module,exports){ +'use strict'; +var DataReader = require('./DataReader'); +var utils = require('../utils'); + +function ArrayReader(data) { + DataReader.call(this, data); + for(var i = 0; i < this.data.length; i++) { + data[i] = data[i] & 0xFF; + } +} +utils.inherits(ArrayReader, DataReader); +/** + * @see DataReader.byteAt + */ +ArrayReader.prototype.byteAt = function(i) { + return this.data[this.zero + i]; +}; +/** + * @see DataReader.lastIndexOfSignature + */ +ArrayReader.prototype.lastIndexOfSignature = function(sig) { + var sig0 = sig.charCodeAt(0), + sig1 = sig.charCodeAt(1), + sig2 = sig.charCodeAt(2), + sig3 = sig.charCodeAt(3); + for (var i = this.length - 4; i >= 0; --i) { + if (this.data[i] === sig0 && this.data[i + 1] === sig1 && this.data[i + 2] === sig2 && this.data[i + 3] === sig3) { + return i - this.zero; + } + } + + return -1; +}; +/** + * @see DataReader.readAndCheckSignature + */ +ArrayReader.prototype.readAndCheckSignature = function (sig) { + var sig0 = sig.charCodeAt(0), + sig1 = sig.charCodeAt(1), + sig2 = sig.charCodeAt(2), + sig3 = sig.charCodeAt(3), + data = this.readData(4); + return sig0 === data[0] && sig1 === data[1] && sig2 === data[2] && sig3 === data[3]; +}; +/** + * @see DataReader.readData + */ +ArrayReader.prototype.readData = function(size) { + this.checkOffset(size); + if(size === 0) { + return []; + } + var result = this.data.slice(this.zero + this.index, this.zero + this.index + size); + this.index += size; + return result; +}; +module.exports = ArrayReader; + +},{"../utils":32,"./DataReader":18}],18:[function(require,module,exports){ +'use strict'; +var utils = require('../utils'); + +function DataReader(data) { + this.data = data; // type : see implementation + this.length = data.length; + this.index = 0; + this.zero = 0; +} +DataReader.prototype = { + /** + * Check that the offset will not go too far. + * @param {string} offset the additional offset to check. + * @throws {Error} an Error if the offset is out of bounds. + */ + checkOffset: function(offset) { + this.checkIndex(this.index + offset); + }, + /** + * Check that the specified index will not be too far. + * @param {string} newIndex the index to check. + * @throws {Error} an Error if the index is out of bounds. + */ + checkIndex: function(newIndex) { + if (this.length < this.zero + newIndex || newIndex < 0) { + throw new Error("End of data reached (data length = " + this.length + ", asked index = " + (newIndex) + "). Corrupted zip ?"); + } + }, + /** + * Change the index. + * @param {number} newIndex The new index. + * @throws {Error} if the new index is out of the data. + */ + setIndex: function(newIndex) { + this.checkIndex(newIndex); + this.index = newIndex; + }, + /** + * Skip the next n bytes. + * @param {number} n the number of bytes to skip. + * @throws {Error} if the new index is out of the data. + */ + skip: function(n) { + this.setIndex(this.index + n); + }, + /** + * Get the byte at the specified index. + * @param {number} i the index to use. + * @return {number} a byte. + */ + byteAt: function(i) { + // see implementations + }, + /** + * Get the next number with a given byte size. + * @param {number} size the number of bytes to read. + * @return {number} the corresponding number. + */ + readInt: function(size) { + var result = 0, + i; + this.checkOffset(size); + for (i = this.index + size - 1; i >= this.index; i--) { + result = (result << 8) + this.byteAt(i); + } + this.index += size; + return result; + }, + /** + * Get the next string with a given byte size. + * @param {number} size the number of bytes to read. + * @return {string} the corresponding string. + */ + readString: function(size) { + return utils.transformTo("string", this.readData(size)); + }, + /** + * Get raw data without conversion, bytes. + * @param {number} size the number of bytes to read. + * @return {Object} the raw data, implementation specific. + */ + readData: function(size) { + // see implementations + }, + /** + * Find the last occurrence of a zip signature (4 bytes). + * @param {string} sig the signature to find. + * @return {number} the index of the last occurrence, -1 if not found. + */ + lastIndexOfSignature: function(sig) { + // see implementations + }, + /** + * Read the signature (4 bytes) at the current position and compare it with sig. + * @param {string} sig the expected signature + * @return {boolean} true if the signature matches, false otherwise. + */ + readAndCheckSignature: function(sig) { + // see implementations + }, + /** + * Get the next date. + * @return {Date} the date. + */ + readDate: function() { + var dostime = this.readInt(4); + return new Date(Date.UTC( + ((dostime >> 25) & 0x7f) + 1980, // year + ((dostime >> 21) & 0x0f) - 1, // month + (dostime >> 16) & 0x1f, // day + (dostime >> 11) & 0x1f, // hour + (dostime >> 5) & 0x3f, // minute + (dostime & 0x1f) << 1)); // second + } +}; +module.exports = DataReader; + +},{"../utils":32}],19:[function(require,module,exports){ +'use strict'; +var Uint8ArrayReader = require('./Uint8ArrayReader'); +var utils = require('../utils'); + +function NodeBufferReader(data) { + Uint8ArrayReader.call(this, data); +} +utils.inherits(NodeBufferReader, Uint8ArrayReader); + +/** + * @see DataReader.readData + */ +NodeBufferReader.prototype.readData = function(size) { + this.checkOffset(size); + var result = this.data.slice(this.zero + this.index, this.zero + this.index + size); + this.index += size; + return result; +}; +module.exports = NodeBufferReader; + +},{"../utils":32,"./Uint8ArrayReader":21}],20:[function(require,module,exports){ +'use strict'; +var DataReader = require('./DataReader'); +var utils = require('../utils'); + +function StringReader(data) { + DataReader.call(this, data); +} +utils.inherits(StringReader, DataReader); +/** + * @see DataReader.byteAt + */ +StringReader.prototype.byteAt = function(i) { + return this.data.charCodeAt(this.zero + i); +}; +/** + * @see DataReader.lastIndexOfSignature + */ +StringReader.prototype.lastIndexOfSignature = function(sig) { + return this.data.lastIndexOf(sig) - this.zero; +}; +/** + * @see DataReader.readAndCheckSignature + */ +StringReader.prototype.readAndCheckSignature = function (sig) { + var data = this.readData(4); + return sig === data; +}; +/** + * @see DataReader.readData + */ +StringReader.prototype.readData = function(size) { + this.checkOffset(size); + // this will work because the constructor applied the "& 0xff" mask. + var result = this.data.slice(this.zero + this.index, this.zero + this.index + size); + this.index += size; + return result; +}; +module.exports = StringReader; + +},{"../utils":32,"./DataReader":18}],21:[function(require,module,exports){ +'use strict'; +var ArrayReader = require('./ArrayReader'); +var utils = require('../utils'); + +function Uint8ArrayReader(data) { + ArrayReader.call(this, data); +} +utils.inherits(Uint8ArrayReader, ArrayReader); +/** + * @see DataReader.readData + */ +Uint8ArrayReader.prototype.readData = function(size) { + this.checkOffset(size); + if(size === 0) { + // in IE10, when using subarray(idx, idx), we get the array [0x00] instead of []. + return new Uint8Array(0); + } + var result = this.data.subarray(this.zero + this.index, this.zero + this.index + size); + this.index += size; + return result; +}; +module.exports = Uint8ArrayReader; + +},{"../utils":32,"./ArrayReader":17}],22:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var support = require('../support'); +var ArrayReader = require('./ArrayReader'); +var StringReader = require('./StringReader'); +var NodeBufferReader = require('./NodeBufferReader'); +var Uint8ArrayReader = require('./Uint8ArrayReader'); + +/** + * Create a reader adapted to the data. + * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data to read. + * @return {DataReader} the data reader. + */ +module.exports = function (data) { + var type = utils.getTypeOf(data); + utils.checkSupport(type); + if (type === "string" && !support.uint8array) { + return new StringReader(data); + } + if (type === "nodebuffer") { + return new NodeBufferReader(data); + } + if (support.uint8array) { + return new Uint8ArrayReader(utils.transformTo("uint8array", data)); + } + return new ArrayReader(utils.transformTo("array", data)); +}; + +},{"../support":30,"../utils":32,"./ArrayReader":17,"./NodeBufferReader":19,"./StringReader":20,"./Uint8ArrayReader":21}],23:[function(require,module,exports){ +'use strict'; +exports.LOCAL_FILE_HEADER = "PK\x03\x04"; +exports.CENTRAL_FILE_HEADER = "PK\x01\x02"; +exports.CENTRAL_DIRECTORY_END = "PK\x05\x06"; +exports.ZIP64_CENTRAL_DIRECTORY_LOCATOR = "PK\x06\x07"; +exports.ZIP64_CENTRAL_DIRECTORY_END = "PK\x06\x06"; +exports.DATA_DESCRIPTOR = "PK\x07\x08"; + +},{}],24:[function(require,module,exports){ +'use strict'; + +var GenericWorker = require('./GenericWorker'); +var utils = require('../utils'); + +/** + * A worker which convert chunks to a specified type. + * @constructor + * @param {String} destType the destination type. + */ +function ConvertWorker(destType) { + GenericWorker.call(this, "ConvertWorker to " + destType); + this.destType = destType; +} +utils.inherits(ConvertWorker, GenericWorker); + +/** + * @see GenericWorker.processChunk + */ +ConvertWorker.prototype.processChunk = function (chunk) { + this.push({ + data : utils.transformTo(this.destType, chunk.data), + meta : chunk.meta + }); +}; +module.exports = ConvertWorker; + +},{"../utils":32,"./GenericWorker":28}],25:[function(require,module,exports){ +'use strict'; + +var GenericWorker = require('./GenericWorker'); +var crc32 = require('../crc32'); +var utils = require('../utils'); + +/** + * A worker which calculate the crc32 of the data flowing through. + * @constructor + */ +function Crc32Probe() { + GenericWorker.call(this, "Crc32Probe"); + this.withStreamInfo("crc32", 0); +} +utils.inherits(Crc32Probe, GenericWorker); + +/** + * @see GenericWorker.processChunk + */ +Crc32Probe.prototype.processChunk = function (chunk) { + this.streamInfo.crc32 = crc32(chunk.data, this.streamInfo.crc32 || 0); + this.push(chunk); +}; +module.exports = Crc32Probe; + +},{"../crc32":4,"../utils":32,"./GenericWorker":28}],26:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var GenericWorker = require('./GenericWorker'); + +/** + * A worker which calculate the total length of the data flowing through. + * @constructor + * @param {String} propName the name used to expose the length + */ +function DataLengthProbe(propName) { + GenericWorker.call(this, "DataLengthProbe for " + propName); + this.propName = propName; + this.withStreamInfo(propName, 0); +} +utils.inherits(DataLengthProbe, GenericWorker); + +/** + * @see GenericWorker.processChunk + */ +DataLengthProbe.prototype.processChunk = function (chunk) { + if(chunk) { + var length = this.streamInfo[this.propName] || 0; + this.streamInfo[this.propName] = length + chunk.data.length; + } + GenericWorker.prototype.processChunk.call(this, chunk); +}; +module.exports = DataLengthProbe; + + +},{"../utils":32,"./GenericWorker":28}],27:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var GenericWorker = require('./GenericWorker'); + +// the size of the generated chunks +// TODO expose this as a public variable +var DEFAULT_BLOCK_SIZE = 16 * 1024; + +/** + * A worker that reads a content and emits chunks. + * @constructor + * @param {Promise} dataP the promise of the data to split + */ +function DataWorker(dataP) { + GenericWorker.call(this, "DataWorker"); + var self = this; + this.dataIsReady = false; + this.index = 0; + this.max = 0; + this.data = null; + this.type = ""; + + this._tickScheduled = false; + + dataP.then(function (data) { + self.dataIsReady = true; + self.data = data; + self.max = data && data.length || 0; + self.type = utils.getTypeOf(data); + if(!self.isPaused) { + self._tickAndRepeat(); + } + }, function (e) { + self.error(e); + }); +} + +utils.inherits(DataWorker, GenericWorker); + +/** + * @see GenericWorker.cleanUp + */ +DataWorker.prototype.cleanUp = function () { + GenericWorker.prototype.cleanUp.call(this); + this.data = null; +}; + +/** + * @see GenericWorker.resume + */ +DataWorker.prototype.resume = function () { + if(!GenericWorker.prototype.resume.call(this)) { + return false; + } + + if (!this._tickScheduled && this.dataIsReady) { + this._tickScheduled = true; + utils.delay(this._tickAndRepeat, [], this); + } + return true; +}; + +/** + * Trigger a tick a schedule an other call to this function. + */ +DataWorker.prototype._tickAndRepeat = function() { + this._tickScheduled = false; + if(this.isPaused || this.isFinished) { + return; + } + this._tick(); + if(!this.isFinished) { + utils.delay(this._tickAndRepeat, [], this); + this._tickScheduled = true; + } +}; + +/** + * Read and push a chunk. + */ +DataWorker.prototype._tick = function() { + + if(this.isPaused || this.isFinished) { + return false; + } + + var size = DEFAULT_BLOCK_SIZE; + var data = null, nextIndex = Math.min(this.max, this.index + size); + if (this.index >= this.max) { + // EOF + return this.end(); + } else { + switch(this.type) { + case "string": + data = this.data.substring(this.index, nextIndex); + break; + case "uint8array": + data = this.data.subarray(this.index, nextIndex); + break; + case "array": + case "nodebuffer": + data = this.data.slice(this.index, nextIndex); + break; + } + this.index = nextIndex; + return this.push({ + data : data, + meta : { + percent : this.max ? this.index / this.max * 100 : 0 + } + }); + } +}; + +module.exports = DataWorker; + +},{"../utils":32,"./GenericWorker":28}],28:[function(require,module,exports){ +'use strict'; + +/** + * A worker that does nothing but passing chunks to the next one. This is like + * a nodejs stream but with some differences. On the good side : + * - it works on IE 6-9 without any issue / polyfill + * - it weights less than the full dependencies bundled with browserify + * - it forwards errors (no need to declare an error handler EVERYWHERE) + * + * A chunk is an object with 2 attributes : `meta` and `data`. The former is an + * object containing anything (`percent` for example), see each worker for more + * details. The latter is the real data (String, Uint8Array, etc). + * + * @constructor + * @param {String} name the name of the stream (mainly used for debugging purposes) + */ +function GenericWorker(name) { + // the name of the worker + this.name = name || "default"; + // an object containing metadata about the workers chain + this.streamInfo = {}; + // an error which happened when the worker was paused + this.generatedError = null; + // an object containing metadata to be merged by this worker into the general metadata + this.extraStreamInfo = {}; + // true if the stream is paused (and should not do anything), false otherwise + this.isPaused = true; + // true if the stream is finished (and should not do anything), false otherwise + this.isFinished = false; + // true if the stream is locked to prevent further structure updates (pipe), false otherwise + this.isLocked = false; + // the event listeners + this._listeners = { + 'data':[], + 'end':[], + 'error':[] + }; + // the previous worker, if any + this.previous = null; +} + +GenericWorker.prototype = { + /** + * Push a chunk to the next workers. + * @param {Object} chunk the chunk to push + */ + push : function (chunk) { + this.emit("data", chunk); + }, + /** + * End the stream. + * @return {Boolean} true if this call ended the worker, false otherwise. + */ + end : function () { + if (this.isFinished) { + return false; + } + + this.flush(); + try { + this.emit("end"); + this.cleanUp(); + this.isFinished = true; + } catch (e) { + this.emit("error", e); + } + return true; + }, + /** + * End the stream with an error. + * @param {Error} e the error which caused the premature end. + * @return {Boolean} true if this call ended the worker with an error, false otherwise. + */ + error : function (e) { + if (this.isFinished) { + return false; + } + + if(this.isPaused) { + this.generatedError = e; + } else { + this.isFinished = true; + + this.emit("error", e); + + // in the workers chain exploded in the middle of the chain, + // the error event will go downward but we also need to notify + // workers upward that there has been an error. + if(this.previous) { + this.previous.error(e); + } + + this.cleanUp(); + } + return true; + }, + /** + * Add a callback on an event. + * @param {String} name the name of the event (data, end, error) + * @param {Function} listener the function to call when the event is triggered + * @return {GenericWorker} the current object for chainability + */ + on : function (name, listener) { + this._listeners[name].push(listener); + return this; + }, + /** + * Clean any references when a worker is ending. + */ + cleanUp : function () { + this.streamInfo = this.generatedError = this.extraStreamInfo = null; + this._listeners = []; + }, + /** + * Trigger an event. This will call registered callback with the provided arg. + * @param {String} name the name of the event (data, end, error) + * @param {Object} arg the argument to call the callback with. + */ + emit : function (name, arg) { + if (this._listeners[name]) { + for(var i = 0; i < this._listeners[name].length; i++) { + this._listeners[name][i].call(this, arg); + } + } + }, + /** + * Chain a worker with an other. + * @param {Worker} next the worker receiving events from the current one. + * @return {worker} the next worker for chainability + */ + pipe : function (next) { + return next.registerPrevious(this); + }, + /** + * Same as `pipe` in the other direction. + * Using an API with `pipe(next)` is very easy. + * Implementing the API with the point of view of the next one registering + * a source is easier, see the ZipFileWorker. + * @param {Worker} previous the previous worker, sending events to this one + * @return {Worker} the current worker for chainability + */ + registerPrevious : function (previous) { + if (this.isLocked) { + throw new Error("The stream '" + this + "' has already been used."); + } + + // sharing the streamInfo... + this.streamInfo = previous.streamInfo; + // ... and adding our own bits + this.mergeStreamInfo(); + this.previous = previous; + var self = this; + previous.on('data', function (chunk) { + self.processChunk(chunk); + }); + previous.on('end', function () { + self.end(); + }); + previous.on('error', function (e) { + self.error(e); + }); + return this; + }, + /** + * Pause the stream so it doesn't send events anymore. + * @return {Boolean} true if this call paused the worker, false otherwise. + */ + pause : function () { + if(this.isPaused || this.isFinished) { + return false; + } + this.isPaused = true; + + if(this.previous) { + this.previous.pause(); + } + return true; + }, + /** + * Resume a paused stream. + * @return {Boolean} true if this call resumed the worker, false otherwise. + */ + resume : function () { + if(!this.isPaused || this.isFinished) { + return false; + } + this.isPaused = false; + + // if true, the worker tried to resume but failed + var withError = false; + if(this.generatedError) { + this.error(this.generatedError); + withError = true; + } + if(this.previous) { + this.previous.resume(); + } + + return !withError; + }, + /** + * Flush any remaining bytes as the stream is ending. + */ + flush : function () {}, + /** + * Process a chunk. This is usually the method overridden. + * @param {Object} chunk the chunk to process. + */ + processChunk : function(chunk) { + this.push(chunk); + }, + /** + * Add a key/value to be added in the workers chain streamInfo once activated. + * @param {String} key the key to use + * @param {Object} value the associated value + * @return {Worker} the current worker for chainability + */ + withStreamInfo : function (key, value) { + this.extraStreamInfo[key] = value; + this.mergeStreamInfo(); + return this; + }, + /** + * Merge this worker's streamInfo into the chain's streamInfo. + */ + mergeStreamInfo : function () { + for(var key in this.extraStreamInfo) { + if (!this.extraStreamInfo.hasOwnProperty(key)) { + continue; + } + this.streamInfo[key] = this.extraStreamInfo[key]; + } + }, + + /** + * Lock the stream to prevent further updates on the workers chain. + * After calling this method, all calls to pipe will fail. + */ + lock: function () { + if (this.isLocked) { + throw new Error("The stream '" + this + "' has already been used."); + } + this.isLocked = true; + if (this.previous) { + this.previous.lock(); + } + }, + + /** + * + * Pretty print the workers chain. + */ + toString : function () { + var me = "Worker " + this.name; + if (this.previous) { + return this.previous + " -> " + me; + } else { + return me; + } + } +}; + +module.exports = GenericWorker; + +},{}],29:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var ConvertWorker = require('./ConvertWorker'); +var GenericWorker = require('./GenericWorker'); +var base64 = require('../base64'); +var support = require("../support"); +var external = require("../external"); + +var NodejsStreamOutputAdapter = null; +if (support.nodestream) { + try { + NodejsStreamOutputAdapter = require('../nodejs/NodejsStreamOutputAdapter'); + } catch(e) {} +} + +/** + * Apply the final transformation of the data. If the user wants a Blob for + * example, it's easier to work with an U8intArray and finally do the + * ArrayBuffer/Blob conversion. + * @param {String} type the name of the final type + * @param {String|Uint8Array|Buffer} content the content to transform + * @param {String} mimeType the mime type of the content, if applicable. + * @return {String|Uint8Array|ArrayBuffer|Buffer|Blob} the content in the right format. + */ +function transformZipOutput(type, content, mimeType) { + switch(type) { + case "blob" : + return utils.newBlob(utils.transformTo("arraybuffer", content), mimeType); + case "base64" : + return base64.encode(content); + default : + return utils.transformTo(type, content); + } +} + +/** + * Concatenate an array of data of the given type. + * @param {String} type the type of the data in the given array. + * @param {Array} dataArray the array containing the data chunks to concatenate + * @return {String|Uint8Array|Buffer} the concatenated data + * @throws Error if the asked type is unsupported + */ +function concat (type, dataArray) { + var i, index = 0, res = null, totalLength = 0; + for(i = 0; i < dataArray.length; i++) { + totalLength += dataArray[i].length; + } + switch(type) { + case "string": + return dataArray.join(""); + case "array": + return Array.prototype.concat.apply([], dataArray); + case "uint8array": + res = new Uint8Array(totalLength); + for(i = 0; i < dataArray.length; i++) { + res.set(dataArray[i], index); + index += dataArray[i].length; + } + return res; + case "nodebuffer": + return Buffer.concat(dataArray); + default: + throw new Error("concat : unsupported type '" + type + "'"); + } +} + +/** + * Listen a StreamHelper, accumulate its content and concatenate it into a + * complete block. + * @param {StreamHelper} helper the helper to use. + * @param {Function} updateCallback a callback called on each update. Called + * with one arg : + * - the metadata linked to the update received. + * @return Promise the promise for the accumulation. + */ +function accumulate(helper, updateCallback) { + return new external.Promise(function (resolve, reject){ + var dataArray = []; + var chunkType = helper._internalType, + resultType = helper._outputType, + mimeType = helper._mimeType; + helper + .on('data', function (data, meta) { + dataArray.push(data); + if(updateCallback) { + updateCallback(meta); + } + }) + .on('error', function(err) { + dataArray = []; + reject(err); + }) + .on('end', function (){ + try { + var result = transformZipOutput(resultType, concat(chunkType, dataArray), mimeType); + resolve(result); + } catch (e) { + reject(e); + } + dataArray = []; + }) + .resume(); + }); +} + +/** + * An helper to easily use workers outside of JSZip. + * @constructor + * @param {Worker} worker the worker to wrap + * @param {String} outputType the type of data expected by the use + * @param {String} mimeType the mime type of the content, if applicable. + */ +function StreamHelper(worker, outputType, mimeType) { + var internalType = outputType; + switch(outputType) { + case "blob": + case "arraybuffer": + internalType = "uint8array"; + break; + case "base64": + internalType = "string"; + break; + } + + try { + // the type used internally + this._internalType = internalType; + // the type used to output results + this._outputType = outputType; + // the mime type + this._mimeType = mimeType; + utils.checkSupport(internalType); + this._worker = worker.pipe(new ConvertWorker(internalType)); + // the last workers can be rewired without issues but we need to + // prevent any updates on previous workers. + worker.lock(); + } catch(e) { + this._worker = new GenericWorker("error"); + this._worker.error(e); + } +} + +StreamHelper.prototype = { + /** + * Listen a StreamHelper, accumulate its content and concatenate it into a + * complete block. + * @param {Function} updateCb the update callback. + * @return Promise the promise for the accumulation. + */ + accumulate : function (updateCb) { + return accumulate(this, updateCb); + }, + /** + * Add a listener on an event triggered on a stream. + * @param {String} evt the name of the event + * @param {Function} fn the listener + * @return {StreamHelper} the current helper. + */ + on : function (evt, fn) { + var self = this; + + if(evt === "data") { + this._worker.on(evt, function (chunk) { + fn.call(self, chunk.data, chunk.meta); + }); + } else { + this._worker.on(evt, function () { + utils.delay(fn, arguments, self); + }); + } + return this; + }, + /** + * Resume the flow of chunks. + * @return {StreamHelper} the current helper. + */ + resume : function () { + utils.delay(this._worker.resume, [], this._worker); + return this; + }, + /** + * Pause the flow of chunks. + * @return {StreamHelper} the current helper. + */ + pause : function () { + this._worker.pause(); + return this; + }, + /** + * Return a nodejs stream for this helper. + * @param {Function} updateCb the update callback. + * @return {NodejsStreamOutputAdapter} the nodejs stream. + */ + toNodejsStream : function (updateCb) { + utils.checkSupport("nodestream"); + if (this._outputType !== "nodebuffer") { + // an object stream containing blob/arraybuffer/uint8array/string + // is strange and I don't know if it would be useful. + // I you find this comment and have a good usecase, please open a + // bug report ! + throw new Error(this._outputType + " is not supported by this method"); + } + + return new NodejsStreamOutputAdapter(this, { + objectMode : this._outputType !== "nodebuffer" + }, updateCb); + } +}; + + +module.exports = StreamHelper; + +},{"../base64":1,"../external":6,"../nodejs/NodejsStreamOutputAdapter":13,"../support":30,"../utils":32,"./ConvertWorker":24,"./GenericWorker":28}],30:[function(require,module,exports){ +'use strict'; + +exports.base64 = true; +exports.array = true; +exports.string = true; +exports.arraybuffer = typeof ArrayBuffer !== "undefined" && typeof Uint8Array !== "undefined"; +exports.nodebuffer = typeof Buffer !== "undefined"; +// contains true if JSZip can read/generate Uint8Array, false otherwise. +exports.uint8array = typeof Uint8Array !== "undefined"; + +if (typeof ArrayBuffer === "undefined") { + exports.blob = false; +} +else { + var buffer = new ArrayBuffer(0); + try { + exports.blob = new Blob([buffer], { + type: "application/zip" + }).size === 0; + } + catch (e) { + try { + var Builder = self.BlobBuilder || self.WebKitBlobBuilder || self.MozBlobBuilder || self.MSBlobBuilder; + var builder = new Builder(); + builder.append(buffer); + exports.blob = builder.getBlob('application/zip').size === 0; + } + catch (e) { + exports.blob = false; + } + } +} + +try { + exports.nodestream = !!require('readable-stream').Readable; +} catch(e) { + exports.nodestream = false; +} + +},{"readable-stream":16}],31:[function(require,module,exports){ +'use strict'; + +var utils = require('./utils'); +var support = require('./support'); +var nodejsUtils = require('./nodejsUtils'); +var GenericWorker = require('./stream/GenericWorker'); + +/** + * The following functions come from pako, from pako/lib/utils/strings + * released under the MIT license, see pako https://github.com/nodeca/pako/ + */ + +// Table with utf8 lengths (calculated by first byte of sequence) +// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS, +// because max possible codepoint is 0x10ffff +var _utf8len = new Array(256); +for (var i=0; i<256; i++) { + _utf8len[i] = (i >= 252 ? 6 : i >= 248 ? 5 : i >= 240 ? 4 : i >= 224 ? 3 : i >= 192 ? 2 : 1); +} +_utf8len[254]=_utf8len[254]=1; // Invalid sequence start + +// convert string to array (typed, when possible) +var string2buf = function (str) { + var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0; + + // count binary size + for (m_pos = 0; m_pos < str_len; m_pos++) { + c = str.charCodeAt(m_pos); + if ((c & 0xfc00) === 0xd800 && (m_pos+1 < str_len)) { + c2 = str.charCodeAt(m_pos+1); + if ((c2 & 0xfc00) === 0xdc00) { + c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00); + m_pos++; + } + } + buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4; + } + + // allocate buffer + if (support.uint8array) { + buf = new Uint8Array(buf_len); + } else { + buf = new Array(buf_len); + } + + // convert + for (i=0, m_pos = 0; i < buf_len; m_pos++) { + c = str.charCodeAt(m_pos); + if ((c & 0xfc00) === 0xd800 && (m_pos+1 < str_len)) { + c2 = str.charCodeAt(m_pos+1); + if ((c2 & 0xfc00) === 0xdc00) { + c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00); + m_pos++; + } + } + if (c < 0x80) { + /* one byte */ + buf[i++] = c; + } else if (c < 0x800) { + /* two bytes */ + buf[i++] = 0xC0 | (c >>> 6); + buf[i++] = 0x80 | (c & 0x3f); + } else if (c < 0x10000) { + /* three bytes */ + buf[i++] = 0xE0 | (c >>> 12); + buf[i++] = 0x80 | (c >>> 6 & 0x3f); + buf[i++] = 0x80 | (c & 0x3f); + } else { + /* four bytes */ + buf[i++] = 0xf0 | (c >>> 18); + buf[i++] = 0x80 | (c >>> 12 & 0x3f); + buf[i++] = 0x80 | (c >>> 6 & 0x3f); + buf[i++] = 0x80 | (c & 0x3f); + } + } + + return buf; +}; + +// Calculate max possible position in utf8 buffer, +// that will not break sequence. If that's not possible +// - (very small limits) return max size as is. +// +// buf[] - utf8 bytes array +// max - length limit (mandatory); +var utf8border = function(buf, max) { + var pos; + + max = max || buf.length; + if (max > buf.length) { max = buf.length; } + + // go back from last position, until start of sequence found + pos = max-1; + while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; } + + // Fuckup - very small and broken sequence, + // return max, because we should return something anyway. + if (pos < 0) { return max; } + + // If we came to start of buffer - that means vuffer is too small, + // return max too. + if (pos === 0) { return max; } + + return (pos + _utf8len[buf[pos]] > max) ? pos : max; +}; + +// convert array to string +var buf2string = function (buf) { + var str, i, out, c, c_len; + var len = buf.length; + + // Reserve max possible length (2 words per char) + // NB: by unknown reasons, Array is significantly faster for + // String.fromCharCode.apply than Uint16Array. + var utf16buf = new Array(len*2); + + for (out=0, i=0; i 4) { utf16buf[out++] = 0xfffd; i += c_len-1; continue; } + + // apply mask on first byte + c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07; + // join the rest + while (c_len > 1 && i < len) { + c = (c << 6) | (buf[i++] & 0x3f); + c_len--; + } + + // terminated by end of string? + if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; } + + if (c < 0x10000) { + utf16buf[out++] = c; + } else { + c -= 0x10000; + utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff); + utf16buf[out++] = 0xdc00 | (c & 0x3ff); + } + } + + // shrinkBuf(utf16buf, out) + if (utf16buf.length !== out) { + if(utf16buf.subarray) { + utf16buf = utf16buf.subarray(0, out); + } else { + utf16buf.length = out; + } + } + + // return String.fromCharCode.apply(null, utf16buf); + return utils.applyFromCharCode(utf16buf); +}; + + +// That's all for the pako functions. + + +/** + * Transform a javascript string into an array (typed if possible) of bytes, + * UTF-8 encoded. + * @param {String} str the string to encode + * @return {Array|Uint8Array|Buffer} the UTF-8 encoded string. + */ +exports.utf8encode = function utf8encode(str) { + if (support.nodebuffer) { + return nodejsUtils.newBufferFrom(str, "utf-8"); + } + + return string2buf(str); +}; + + +/** + * Transform a bytes array (or a representation) representing an UTF-8 encoded + * string into a javascript string. + * @param {Array|Uint8Array|Buffer} buf the data de decode + * @return {String} the decoded string. + */ +exports.utf8decode = function utf8decode(buf) { + if (support.nodebuffer) { + return utils.transformTo("nodebuffer", buf).toString("utf-8"); + } + + buf = utils.transformTo(support.uint8array ? "uint8array" : "array", buf); + + return buf2string(buf); +}; + +/** + * A worker to decode utf8 encoded binary chunks into string chunks. + * @constructor + */ +function Utf8DecodeWorker() { + GenericWorker.call(this, "utf-8 decode"); + // the last bytes if a chunk didn't end with a complete codepoint. + this.leftOver = null; +} +utils.inherits(Utf8DecodeWorker, GenericWorker); + +/** + * @see GenericWorker.processChunk + */ +Utf8DecodeWorker.prototype.processChunk = function (chunk) { + + var data = utils.transformTo(support.uint8array ? "uint8array" : "array", chunk.data); + + // 1st step, re-use what's left of the previous chunk + if (this.leftOver && this.leftOver.length) { + if(support.uint8array) { + var previousData = data; + data = new Uint8Array(previousData.length + this.leftOver.length); + data.set(this.leftOver, 0); + data.set(previousData, this.leftOver.length); + } else { + data = this.leftOver.concat(data); + } + this.leftOver = null; + } + + var nextBoundary = utf8border(data); + var usableData = data; + if (nextBoundary !== data.length) { + if (support.uint8array) { + usableData = data.subarray(0, nextBoundary); + this.leftOver = data.subarray(nextBoundary, data.length); + } else { + usableData = data.slice(0, nextBoundary); + this.leftOver = data.slice(nextBoundary, data.length); + } + } + + this.push({ + data : exports.utf8decode(usableData), + meta : chunk.meta + }); +}; + +/** + * @see GenericWorker.flush + */ +Utf8DecodeWorker.prototype.flush = function () { + if(this.leftOver && this.leftOver.length) { + this.push({ + data : exports.utf8decode(this.leftOver), + meta : {} + }); + this.leftOver = null; + } +}; +exports.Utf8DecodeWorker = Utf8DecodeWorker; + +/** + * A worker to endcode string chunks into utf8 encoded binary chunks. + * @constructor + */ +function Utf8EncodeWorker() { + GenericWorker.call(this, "utf-8 encode"); +} +utils.inherits(Utf8EncodeWorker, GenericWorker); + +/** + * @see GenericWorker.processChunk + */ +Utf8EncodeWorker.prototype.processChunk = function (chunk) { + this.push({ + data : exports.utf8encode(chunk.data), + meta : chunk.meta + }); +}; +exports.Utf8EncodeWorker = Utf8EncodeWorker; + +},{"./nodejsUtils":14,"./stream/GenericWorker":28,"./support":30,"./utils":32}],32:[function(require,module,exports){ +'use strict'; + +var support = require('./support'); +var base64 = require('./base64'); +var nodejsUtils = require('./nodejsUtils'); +var setImmediate = require('set-immediate-shim'); +var external = require("./external"); + + +/** + * Convert a string that pass as a "binary string": it should represent a byte + * array but may have > 255 char codes. Be sure to take only the first byte + * and returns the byte array. + * @param {String} str the string to transform. + * @return {Array|Uint8Array} the string in a binary format. + */ +function string2binary(str) { + var result = null; + if (support.uint8array) { + result = new Uint8Array(str.length); + } else { + result = new Array(str.length); + } + return stringToArrayLike(str, result); +} + +/** + * Create a new blob with the given content and the given type. + * @param {String|ArrayBuffer} part the content to put in the blob. DO NOT use + * an Uint8Array because the stock browser of android 4 won't accept it (it + * will be silently converted to a string, "[object Uint8Array]"). + * + * Use only ONE part to build the blob to avoid a memory leak in IE11 / Edge: + * when a large amount of Array is used to create the Blob, the amount of + * memory consumed is nearly 100 times the original data amount. + * + * @param {String} type the mime type of the blob. + * @return {Blob} the created blob. + */ +exports.newBlob = function(part, type) { + exports.checkSupport("blob"); + + try { + // Blob constructor + return new Blob([part], { + type: type + }); + } + catch (e) { + + try { + // deprecated, browser only, old way + var Builder = self.BlobBuilder || self.WebKitBlobBuilder || self.MozBlobBuilder || self.MSBlobBuilder; + var builder = new Builder(); + builder.append(part); + return builder.getBlob(type); + } + catch (e) { + + // well, fuck ?! + throw new Error("Bug : can't construct the Blob."); + } + } + + +}; +/** + * The identity function. + * @param {Object} input the input. + * @return {Object} the same input. + */ +function identity(input) { + return input; +} + +/** + * Fill in an array with a string. + * @param {String} str the string to use. + * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to fill in (will be mutated). + * @return {Array|ArrayBuffer|Uint8Array|Buffer} the updated array. + */ +function stringToArrayLike(str, array) { + for (var i = 0; i < str.length; ++i) { + array[i] = str.charCodeAt(i) & 0xFF; + } + return array; +} + +/** + * An helper for the function arrayLikeToString. + * This contains static information and functions that + * can be optimized by the browser JIT compiler. + */ +var arrayToStringHelper = { + /** + * Transform an array of int into a string, chunk by chunk. + * See the performances notes on arrayLikeToString. + * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform. + * @param {String} type the type of the array. + * @param {Integer} chunk the chunk size. + * @return {String} the resulting string. + * @throws Error if the chunk is too big for the stack. + */ + stringifyByChunk: function(array, type, chunk) { + var result = [], k = 0, len = array.length; + // shortcut + if (len <= chunk) { + return String.fromCharCode.apply(null, array); + } + while (k < len) { + if (type === "array" || type === "nodebuffer") { + result.push(String.fromCharCode.apply(null, array.slice(k, Math.min(k + chunk, len)))); + } + else { + result.push(String.fromCharCode.apply(null, array.subarray(k, Math.min(k + chunk, len)))); + } + k += chunk; + } + return result.join(""); + }, + /** + * Call String.fromCharCode on every item in the array. + * This is the naive implementation, which generate A LOT of intermediate string. + * This should be used when everything else fail. + * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform. + * @return {String} the result. + */ + stringifyByChar: function(array){ + var resultStr = ""; + for(var i = 0; i < array.length; i++) { + resultStr += String.fromCharCode(array[i]); + } + return resultStr; + }, + applyCanBeUsed : { + /** + * true if the browser accepts to use String.fromCharCode on Uint8Array + */ + uint8array : (function () { + try { + return support.uint8array && String.fromCharCode.apply(null, new Uint8Array(1)).length === 1; + } catch (e) { + return false; + } + })(), + /** + * true if the browser accepts to use String.fromCharCode on nodejs Buffer. + */ + nodebuffer : (function () { + try { + return support.nodebuffer && String.fromCharCode.apply(null, nodejsUtils.allocBuffer(1)).length === 1; + } catch (e) { + return false; + } + })() + } +}; + +/** + * Transform an array-like object to a string. + * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform. + * @return {String} the result. + */ +function arrayLikeToString(array) { + // Performances notes : + // -------------------- + // String.fromCharCode.apply(null, array) is the fastest, see + // see http://jsperf.com/converting-a-uint8array-to-a-string/2 + // but the stack is limited (and we can get huge arrays !). + // + // result += String.fromCharCode(array[i]); generate too many strings ! + // + // This code is inspired by http://jsperf.com/arraybuffer-to-string-apply-performance/2 + // TODO : we now have workers that split the work. Do we still need that ? + var chunk = 65536, + type = exports.getTypeOf(array), + canUseApply = true; + if (type === "uint8array") { + canUseApply = arrayToStringHelper.applyCanBeUsed.uint8array; + } else if (type === "nodebuffer") { + canUseApply = arrayToStringHelper.applyCanBeUsed.nodebuffer; + } + + if (canUseApply) { + while (chunk > 1) { + try { + return arrayToStringHelper.stringifyByChunk(array, type, chunk); + } catch (e) { + chunk = Math.floor(chunk / 2); + } + } + } + + // no apply or chunk error : slow and painful algorithm + // default browser on android 4.* + return arrayToStringHelper.stringifyByChar(array); +} + +exports.applyFromCharCode = arrayLikeToString; + + +/** + * Copy the data from an array-like to an other array-like. + * @param {Array|ArrayBuffer|Uint8Array|Buffer} arrayFrom the origin array. + * @param {Array|ArrayBuffer|Uint8Array|Buffer} arrayTo the destination array which will be mutated. + * @return {Array|ArrayBuffer|Uint8Array|Buffer} the updated destination array. + */ +function arrayLikeToArrayLike(arrayFrom, arrayTo) { + for (var i = 0; i < arrayFrom.length; i++) { + arrayTo[i] = arrayFrom[i]; + } + return arrayTo; +} + +// a matrix containing functions to transform everything into everything. +var transform = {}; + +// string to ? +transform["string"] = { + "string": identity, + "array": function(input) { + return stringToArrayLike(input, new Array(input.length)); + }, + "arraybuffer": function(input) { + return transform["string"]["uint8array"](input).buffer; + }, + "uint8array": function(input) { + return stringToArrayLike(input, new Uint8Array(input.length)); + }, + "nodebuffer": function(input) { + return stringToArrayLike(input, nodejsUtils.allocBuffer(input.length)); + } +}; + +// array to ? +transform["array"] = { + "string": arrayLikeToString, + "array": identity, + "arraybuffer": function(input) { + return (new Uint8Array(input)).buffer; + }, + "uint8array": function(input) { + return new Uint8Array(input); + }, + "nodebuffer": function(input) { + return nodejsUtils.newBufferFrom(input); + } +}; + +// arraybuffer to ? +transform["arraybuffer"] = { + "string": function(input) { + return arrayLikeToString(new Uint8Array(input)); + }, + "array": function(input) { + return arrayLikeToArrayLike(new Uint8Array(input), new Array(input.byteLength)); + }, + "arraybuffer": identity, + "uint8array": function(input) { + return new Uint8Array(input); + }, + "nodebuffer": function(input) { + return nodejsUtils.newBufferFrom(new Uint8Array(input)); + } +}; + +// uint8array to ? +transform["uint8array"] = { + "string": arrayLikeToString, + "array": function(input) { + return arrayLikeToArrayLike(input, new Array(input.length)); + }, + "arraybuffer": function(input) { + return input.buffer; + }, + "uint8array": identity, + "nodebuffer": function(input) { + return nodejsUtils.newBufferFrom(input); + } +}; + +// nodebuffer to ? +transform["nodebuffer"] = { + "string": arrayLikeToString, + "array": function(input) { + return arrayLikeToArrayLike(input, new Array(input.length)); + }, + "arraybuffer": function(input) { + return transform["nodebuffer"]["uint8array"](input).buffer; + }, + "uint8array": function(input) { + return arrayLikeToArrayLike(input, new Uint8Array(input.length)); + }, + "nodebuffer": identity +}; + +/** + * Transform an input into any type. + * The supported output type are : string, array, uint8array, arraybuffer, nodebuffer. + * If no output type is specified, the unmodified input will be returned. + * @param {String} outputType the output type. + * @param {String|Array|ArrayBuffer|Uint8Array|Buffer} input the input to convert. + * @throws {Error} an Error if the browser doesn't support the requested output type. + */ +exports.transformTo = function(outputType, input) { + if (!input) { + // undefined, null, etc + // an empty string won't harm. + input = ""; + } + if (!outputType) { + return input; + } + exports.checkSupport(outputType); + var inputType = exports.getTypeOf(input); + var result = transform[inputType][outputType](input); + return result; +}; + +/** + * Return the type of the input. + * The type will be in a format valid for JSZip.utils.transformTo : string, array, uint8array, arraybuffer. + * @param {Object} input the input to identify. + * @return {String} the (lowercase) type of the input. + */ +exports.getTypeOf = function(input) { + if (typeof input === "string") { + return "string"; + } + if (Object.prototype.toString.call(input) === "[object Array]") { + return "array"; + } + if (support.nodebuffer && nodejsUtils.isBuffer(input)) { + return "nodebuffer"; + } + if (support.uint8array && input instanceof Uint8Array) { + return "uint8array"; + } + if (support.arraybuffer && input instanceof ArrayBuffer) { + return "arraybuffer"; + } +}; + +/** + * Throw an exception if the type is not supported. + * @param {String} type the type to check. + * @throws {Error} an Error if the browser doesn't support the requested type. + */ +exports.checkSupport = function(type) { + var supported = support[type.toLowerCase()]; + if (!supported) { + throw new Error(type + " is not supported by this platform"); + } +}; + +exports.MAX_VALUE_16BITS = 65535; +exports.MAX_VALUE_32BITS = -1; // well, "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF" is parsed as -1 + +/** + * Prettify a string read as binary. + * @param {string} str the string to prettify. + * @return {string} a pretty string. + */ +exports.pretty = function(str) { + var res = '', + code, i; + for (i = 0; i < (str || "").length; i++) { + code = str.charCodeAt(i); + res += '\\x' + (code < 16 ? "0" : "") + code.toString(16).toUpperCase(); + } + return res; +}; + +/** + * Defer the call of a function. + * @param {Function} callback the function to call asynchronously. + * @param {Array} args the arguments to give to the callback. + */ +exports.delay = function(callback, args, self) { + setImmediate(function () { + callback.apply(self || null, args || []); + }); +}; + +/** + * Extends a prototype with an other, without calling a constructor with + * side effects. Inspired by nodejs' `utils.inherits` + * @param {Function} ctor the constructor to augment + * @param {Function} superCtor the parent constructor to use + */ +exports.inherits = function (ctor, superCtor) { + var Obj = function() {}; + Obj.prototype = superCtor.prototype; + ctor.prototype = new Obj(); +}; + +/** + * Merge the objects passed as parameters into a new one. + * @private + * @param {...Object} var_args All objects to merge. + * @return {Object} a new object with the data of the others. + */ +exports.extend = function() { + var result = {}, i, attr; + for (i = 0; i < arguments.length; i++) { // arguments is not enumerable in some browsers + for (attr in arguments[i]) { + if (arguments[i].hasOwnProperty(attr) && typeof result[attr] === "undefined") { + result[attr] = arguments[i][attr]; + } + } + } + return result; +}; + +/** + * Transform arbitrary content into a Promise. + * @param {String} name a name for the content being processed. + * @param {Object} inputData the content to process. + * @param {Boolean} isBinary true if the content is not an unicode string + * @param {Boolean} isOptimizedBinaryString true if the string content only has one byte per character. + * @param {Boolean} isBase64 true if the string content is encoded with base64. + * @return {Promise} a promise in a format usable by JSZip. + */ +exports.prepareContent = function(name, inputData, isBinary, isOptimizedBinaryString, isBase64) { + + // if inputData is already a promise, this flatten it. + var promise = external.Promise.resolve(inputData).then(function(data) { + + + var isBlob = support.blob && (data instanceof Blob || ['[object File]', '[object Blob]'].indexOf(Object.prototype.toString.call(data)) !== -1); + + if (isBlob && typeof FileReader !== "undefined") { + return new external.Promise(function (resolve, reject) { + var reader = new FileReader(); + + reader.onload = function(e) { + resolve(e.target.result); + }; + reader.onerror = function(e) { + reject(e.target.error); + }; + reader.readAsArrayBuffer(data); + }); + } else { + return data; + } + }); + + return promise.then(function(data) { + var dataType = exports.getTypeOf(data); + + if (!dataType) { + return external.Promise.reject( + new Error("Can't read the data of '" + name + "'. Is it " + + "in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?") + ); + } + // special case : it's way easier to work with Uint8Array than with ArrayBuffer + if (dataType === "arraybuffer") { + data = exports.transformTo("uint8array", data); + } else if (dataType === "string") { + if (isBase64) { + data = base64.decode(data); + } + else if (isBinary) { + // optimizedBinaryString === true means that the file has already been filtered with a 0xFF mask + if (isOptimizedBinaryString !== true) { + // this is a string, not in a base64 format. + // Be sure that this is a correct "binary string" + data = string2binary(data); + } + } + } + return data; + }); +}; + +},{"./base64":1,"./external":6,"./nodejsUtils":14,"./support":30,"set-immediate-shim":54}],33:[function(require,module,exports){ +'use strict'; +var readerFor = require('./reader/readerFor'); +var utils = require('./utils'); +var sig = require('./signature'); +var ZipEntry = require('./zipEntry'); +var utf8 = require('./utf8'); +var support = require('./support'); +// class ZipEntries {{{ +/** + * All the entries in the zip file. + * @constructor + * @param {Object} loadOptions Options for loading the stream. + */ +function ZipEntries(loadOptions) { + this.files = []; + this.loadOptions = loadOptions; +} +ZipEntries.prototype = { + /** + * Check that the reader is on the specified signature. + * @param {string} expectedSignature the expected signature. + * @throws {Error} if it is an other signature. + */ + checkSignature: function(expectedSignature) { + if (!this.reader.readAndCheckSignature(expectedSignature)) { + this.reader.index -= 4; + var signature = this.reader.readString(4); + throw new Error("Corrupted zip or bug: unexpected signature " + "(" + utils.pretty(signature) + ", expected " + utils.pretty(expectedSignature) + ")"); + } + }, + /** + * Check if the given signature is at the given index. + * @param {number} askedIndex the index to check. + * @param {string} expectedSignature the signature to expect. + * @return {boolean} true if the signature is here, false otherwise. + */ + isSignature: function(askedIndex, expectedSignature) { + var currentIndex = this.reader.index; + this.reader.setIndex(askedIndex); + var signature = this.reader.readString(4); + var result = signature === expectedSignature; + this.reader.setIndex(currentIndex); + return result; + }, + /** + * Read the end of the central directory. + */ + readBlockEndOfCentral: function() { + this.diskNumber = this.reader.readInt(2); + this.diskWithCentralDirStart = this.reader.readInt(2); + this.centralDirRecordsOnThisDisk = this.reader.readInt(2); + this.centralDirRecords = this.reader.readInt(2); + this.centralDirSize = this.reader.readInt(4); + this.centralDirOffset = this.reader.readInt(4); + + this.zipCommentLength = this.reader.readInt(2); + // warning : the encoding depends of the system locale + // On a linux machine with LANG=en_US.utf8, this field is utf8 encoded. + // On a windows machine, this field is encoded with the localized windows code page. + var zipComment = this.reader.readData(this.zipCommentLength); + var decodeParamType = support.uint8array ? "uint8array" : "array"; + // To get consistent behavior with the generation part, we will assume that + // this is utf8 encoded unless specified otherwise. + var decodeContent = utils.transformTo(decodeParamType, zipComment); + this.zipComment = this.loadOptions.decodeFileName(decodeContent); + }, + /** + * Read the end of the Zip 64 central directory. + * Not merged with the method readEndOfCentral : + * The end of central can coexist with its Zip64 brother, + * I don't want to read the wrong number of bytes ! + */ + readBlockZip64EndOfCentral: function() { + this.zip64EndOfCentralSize = this.reader.readInt(8); + this.reader.skip(4); + // this.versionMadeBy = this.reader.readString(2); + // this.versionNeeded = this.reader.readInt(2); + this.diskNumber = this.reader.readInt(4); + this.diskWithCentralDirStart = this.reader.readInt(4); + this.centralDirRecordsOnThisDisk = this.reader.readInt(8); + this.centralDirRecords = this.reader.readInt(8); + this.centralDirSize = this.reader.readInt(8); + this.centralDirOffset = this.reader.readInt(8); + + this.zip64ExtensibleData = {}; + var extraDataSize = this.zip64EndOfCentralSize - 44, + index = 0, + extraFieldId, + extraFieldLength, + extraFieldValue; + while (index < extraDataSize) { + extraFieldId = this.reader.readInt(2); + extraFieldLength = this.reader.readInt(4); + extraFieldValue = this.reader.readData(extraFieldLength); + this.zip64ExtensibleData[extraFieldId] = { + id: extraFieldId, + length: extraFieldLength, + value: extraFieldValue + }; + } + }, + /** + * Read the end of the Zip 64 central directory locator. + */ + readBlockZip64EndOfCentralLocator: function() { + this.diskWithZip64CentralDirStart = this.reader.readInt(4); + this.relativeOffsetEndOfZip64CentralDir = this.reader.readInt(8); + this.disksCount = this.reader.readInt(4); + if (this.disksCount > 1) { + throw new Error("Multi-volumes zip are not supported"); + } + }, + /** + * Read the local files, based on the offset read in the central part. + */ + readLocalFiles: function() { + var i, file; + for (i = 0; i < this.files.length; i++) { + file = this.files[i]; + this.reader.setIndex(file.localHeaderOffset); + this.checkSignature(sig.LOCAL_FILE_HEADER); + file.readLocalPart(this.reader); + file.handleUTF8(); + file.processAttributes(); + } + }, + /** + * Read the central directory. + */ + readCentralDir: function() { + var file; + + this.reader.setIndex(this.centralDirOffset); + while (this.reader.readAndCheckSignature(sig.CENTRAL_FILE_HEADER)) { + file = new ZipEntry({ + zip64: this.zip64 + }, this.loadOptions); + file.readCentralPart(this.reader); + this.files.push(file); + } + + if (this.centralDirRecords !== this.files.length) { + if (this.centralDirRecords !== 0 && this.files.length === 0) { + // We expected some records but couldn't find ANY. + // This is really suspicious, as if something went wrong. + throw new Error("Corrupted zip or bug: expected " + this.centralDirRecords + " records in central dir, got " + this.files.length); + } else { + // We found some records but not all. + // Something is wrong but we got something for the user: no error here. + // console.warn("expected", this.centralDirRecords, "records in central dir, got", this.files.length); + } + } + }, + /** + * Read the end of central directory. + */ + readEndOfCentral: function() { + var offset = this.reader.lastIndexOfSignature(sig.CENTRAL_DIRECTORY_END); + if (offset < 0) { + // Check if the content is a truncated zip or complete garbage. + // A "LOCAL_FILE_HEADER" is not required at the beginning (auto + // extractible zip for example) but it can give a good hint. + // If an ajax request was used without responseType, we will also + // get unreadable data. + var isGarbage = !this.isSignature(0, sig.LOCAL_FILE_HEADER); + + if (isGarbage) { + throw new Error("Can't find end of central directory : is this a zip file ? " + + "If it is, see https://stuk.github.io/jszip/documentation/howto/read_zip.html"); + } else { + throw new Error("Corrupted zip: can't find end of central directory"); + } + + } + this.reader.setIndex(offset); + var endOfCentralDirOffset = offset; + this.checkSignature(sig.CENTRAL_DIRECTORY_END); + this.readBlockEndOfCentral(); + + + /* extract from the zip spec : + 4) If one of the fields in the end of central directory + record is too small to hold required data, the field + should be set to -1 (0xFFFF or 0xFFFFFFFF) and the + ZIP64 format record should be created. + 5) The end of central directory record and the + Zip64 end of central directory locator record must + reside on the same disk when splitting or spanning + an archive. + */ + if (this.diskNumber === utils.MAX_VALUE_16BITS || this.diskWithCentralDirStart === utils.MAX_VALUE_16BITS || this.centralDirRecordsOnThisDisk === utils.MAX_VALUE_16BITS || this.centralDirRecords === utils.MAX_VALUE_16BITS || this.centralDirSize === utils.MAX_VALUE_32BITS || this.centralDirOffset === utils.MAX_VALUE_32BITS) { + this.zip64 = true; + + /* + Warning : the zip64 extension is supported, but ONLY if the 64bits integer read from + the zip file can fit into a 32bits integer. This cannot be solved : JavaScript represents + all numbers as 64-bit double precision IEEE 754 floating point numbers. + So, we have 53bits for integers and bitwise operations treat everything as 32bits. + see https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Bitwise_Operators + and http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf section 8.5 + */ + + // should look for a zip64 EOCD locator + offset = this.reader.lastIndexOfSignature(sig.ZIP64_CENTRAL_DIRECTORY_LOCATOR); + if (offset < 0) { + throw new Error("Corrupted zip: can't find the ZIP64 end of central directory locator"); + } + this.reader.setIndex(offset); + this.checkSignature(sig.ZIP64_CENTRAL_DIRECTORY_LOCATOR); + this.readBlockZip64EndOfCentralLocator(); + + // now the zip64 EOCD record + if (!this.isSignature(this.relativeOffsetEndOfZip64CentralDir, sig.ZIP64_CENTRAL_DIRECTORY_END)) { + // console.warn("ZIP64 end of central directory not where expected."); + this.relativeOffsetEndOfZip64CentralDir = this.reader.lastIndexOfSignature(sig.ZIP64_CENTRAL_DIRECTORY_END); + if (this.relativeOffsetEndOfZip64CentralDir < 0) { + throw new Error("Corrupted zip: can't find the ZIP64 end of central directory"); + } + } + this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir); + this.checkSignature(sig.ZIP64_CENTRAL_DIRECTORY_END); + this.readBlockZip64EndOfCentral(); + } + + var expectedEndOfCentralDirOffset = this.centralDirOffset + this.centralDirSize; + if (this.zip64) { + expectedEndOfCentralDirOffset += 20; // end of central dir 64 locator + expectedEndOfCentralDirOffset += 12 /* should not include the leading 12 bytes */ + this.zip64EndOfCentralSize; + } + + var extraBytes = endOfCentralDirOffset - expectedEndOfCentralDirOffset; + + if (extraBytes > 0) { + // console.warn(extraBytes, "extra bytes at beginning or within zipfile"); + if (this.isSignature(endOfCentralDirOffset, sig.CENTRAL_FILE_HEADER)) { + // The offsets seem wrong, but we have something at the specified offset. + // So… we keep it. + } else { + // the offset is wrong, update the "zero" of the reader + // this happens if data has been prepended (crx files for example) + this.reader.zero = extraBytes; + } + } else if (extraBytes < 0) { + throw new Error("Corrupted zip: missing " + Math.abs(extraBytes) + " bytes."); + } + }, + prepareReader: function(data) { + this.reader = readerFor(data); + }, + /** + * Read a zip file and create ZipEntries. + * @param {String|ArrayBuffer|Uint8Array|Buffer} data the binary string representing a zip file. + */ + load: function(data) { + this.prepareReader(data); + this.readEndOfCentral(); + this.readCentralDir(); + this.readLocalFiles(); + } +}; +// }}} end of ZipEntries +module.exports = ZipEntries; + +},{"./reader/readerFor":22,"./signature":23,"./support":30,"./utf8":31,"./utils":32,"./zipEntry":34}],34:[function(require,module,exports){ +'use strict'; +var readerFor = require('./reader/readerFor'); +var utils = require('./utils'); +var CompressedObject = require('./compressedObject'); +var crc32fn = require('./crc32'); +var utf8 = require('./utf8'); +var compressions = require('./compressions'); +var support = require('./support'); + +var MADE_BY_DOS = 0x00; +var MADE_BY_UNIX = 0x03; + +/** + * Find a compression registered in JSZip. + * @param {string} compressionMethod the method magic to find. + * @return {Object|null} the JSZip compression object, null if none found. + */ +var findCompression = function(compressionMethod) { + for (var method in compressions) { + if (!compressions.hasOwnProperty(method)) { + continue; + } + if (compressions[method].magic === compressionMethod) { + return compressions[method]; + } + } + return null; +}; + +// class ZipEntry {{{ +/** + * An entry in the zip file. + * @constructor + * @param {Object} options Options of the current file. + * @param {Object} loadOptions Options for loading the stream. + */ +function ZipEntry(options, loadOptions) { + this.options = options; + this.loadOptions = loadOptions; +} +ZipEntry.prototype = { + /** + * say if the file is encrypted. + * @return {boolean} true if the file is encrypted, false otherwise. + */ + isEncrypted: function() { + // bit 1 is set + return (this.bitFlag & 0x0001) === 0x0001; + }, + /** + * say if the file has utf-8 filename/comment. + * @return {boolean} true if the filename/comment is in utf-8, false otherwise. + */ + useUTF8: function() { + // bit 11 is set + return (this.bitFlag & 0x0800) === 0x0800; + }, + /** + * Read the local part of a zip file and add the info in this object. + * @param {DataReader} reader the reader to use. + */ + readLocalPart: function(reader) { + var compression, localExtraFieldsLength; + + // we already know everything from the central dir ! + // If the central dir data are false, we are doomed. + // On the bright side, the local part is scary : zip64, data descriptors, both, etc. + // The less data we get here, the more reliable this should be. + // Let's skip the whole header and dash to the data ! + reader.skip(22); + // in some zip created on windows, the filename stored in the central dir contains \ instead of /. + // Strangely, the filename here is OK. + // I would love to treat these zip files as corrupted (see http://www.info-zip.org/FAQ.html#backslashes + // or APPNOTE#4.4.17.1, "All slashes MUST be forward slashes '/'") but there are a lot of bad zip generators... + // Search "unzip mismatching "local" filename continuing with "central" filename version" on + // the internet. + // + // I think I see the logic here : the central directory is used to display + // content and the local directory is used to extract the files. Mixing / and \ + // may be used to display \ to windows users and use / when extracting the files. + // Unfortunately, this lead also to some issues : http://seclists.org/fulldisclosure/2009/Sep/394 + this.fileNameLength = reader.readInt(2); + localExtraFieldsLength = reader.readInt(2); // can't be sure this will be the same as the central dir + // the fileName is stored as binary data, the handleUTF8 method will take care of the encoding. + this.fileName = reader.readData(this.fileNameLength); + reader.skip(localExtraFieldsLength); + + if (this.compressedSize === -1 || this.uncompressedSize === -1) { + throw new Error("Bug or corrupted zip : didn't get enough information from the central directory " + "(compressedSize === -1 || uncompressedSize === -1)"); + } + + compression = findCompression(this.compressionMethod); + if (compression === null) { // no compression found + throw new Error("Corrupted zip : compression " + utils.pretty(this.compressionMethod) + " unknown (inner file : " + utils.transformTo("string", this.fileName) + ")"); + } + this.decompressed = new CompressedObject(this.compressedSize, this.uncompressedSize, this.crc32, compression, reader.readData(this.compressedSize)); + }, + + /** + * Read the central part of a zip file and add the info in this object. + * @param {DataReader} reader the reader to use. + */ + readCentralPart: function(reader) { + this.versionMadeBy = reader.readInt(2); + reader.skip(2); + // this.versionNeeded = reader.readInt(2); + this.bitFlag = reader.readInt(2); + this.compressionMethod = reader.readString(2); + this.date = reader.readDate(); + this.crc32 = reader.readInt(4); + this.compressedSize = reader.readInt(4); + this.uncompressedSize = reader.readInt(4); + var fileNameLength = reader.readInt(2); + this.extraFieldsLength = reader.readInt(2); + this.fileCommentLength = reader.readInt(2); + this.diskNumberStart = reader.readInt(2); + this.internalFileAttributes = reader.readInt(2); + this.externalFileAttributes = reader.readInt(4); + this.localHeaderOffset = reader.readInt(4); + + if (this.isEncrypted()) { + throw new Error("Encrypted zip are not supported"); + } + + // will be read in the local part, see the comments there + reader.skip(fileNameLength); + this.readExtraFields(reader); + this.parseZIP64ExtraField(reader); + this.fileComment = reader.readData(this.fileCommentLength); + }, + + /** + * Parse the external file attributes and get the unix/dos permissions. + */ + processAttributes: function () { + this.unixPermissions = null; + this.dosPermissions = null; + var madeBy = this.versionMadeBy >> 8; + + // Check if we have the DOS directory flag set. + // We look for it in the DOS and UNIX permissions + // but some unknown platform could set it as a compatibility flag. + this.dir = this.externalFileAttributes & 0x0010 ? true : false; + + if(madeBy === MADE_BY_DOS) { + // first 6 bits (0 to 5) + this.dosPermissions = this.externalFileAttributes & 0x3F; + } + + if(madeBy === MADE_BY_UNIX) { + this.unixPermissions = (this.externalFileAttributes >> 16) & 0xFFFF; + // the octal permissions are in (this.unixPermissions & 0x01FF).toString(8); + } + + // fail safe : if the name ends with a / it probably means a folder + if (!this.dir && this.fileNameStr.slice(-1) === '/') { + this.dir = true; + } + }, + + /** + * Parse the ZIP64 extra field and merge the info in the current ZipEntry. + * @param {DataReader} reader the reader to use. + */ + parseZIP64ExtraField: function(reader) { + + if (!this.extraFields[0x0001]) { + return; + } + + // should be something, preparing the extra reader + var extraReader = readerFor(this.extraFields[0x0001].value); + + // I really hope that these 64bits integer can fit in 32 bits integer, because js + // won't let us have more. + if (this.uncompressedSize === utils.MAX_VALUE_32BITS) { + this.uncompressedSize = extraReader.readInt(8); + } + if (this.compressedSize === utils.MAX_VALUE_32BITS) { + this.compressedSize = extraReader.readInt(8); + } + if (this.localHeaderOffset === utils.MAX_VALUE_32BITS) { + this.localHeaderOffset = extraReader.readInt(8); + } + if (this.diskNumberStart === utils.MAX_VALUE_32BITS) { + this.diskNumberStart = extraReader.readInt(4); + } + }, + /** + * Read the central part of a zip file and add the info in this object. + * @param {DataReader} reader the reader to use. + */ + readExtraFields: function(reader) { + var end = reader.index + this.extraFieldsLength, + extraFieldId, + extraFieldLength, + extraFieldValue; + + if (!this.extraFields) { + this.extraFields = {}; + } + + while (reader.index + 4 < end) { + extraFieldId = reader.readInt(2); + extraFieldLength = reader.readInt(2); + extraFieldValue = reader.readData(extraFieldLength); + + this.extraFields[extraFieldId] = { + id: extraFieldId, + length: extraFieldLength, + value: extraFieldValue + }; + } + + reader.setIndex(end); + }, + /** + * Apply an UTF8 transformation if needed. + */ + handleUTF8: function() { + var decodeParamType = support.uint8array ? "uint8array" : "array"; + if (this.useUTF8()) { + this.fileNameStr = utf8.utf8decode(this.fileName); + this.fileCommentStr = utf8.utf8decode(this.fileComment); + } else { + var upath = this.findExtraFieldUnicodePath(); + if (upath !== null) { + this.fileNameStr = upath; + } else { + // ASCII text or unsupported code page + var fileNameByteArray = utils.transformTo(decodeParamType, this.fileName); + this.fileNameStr = this.loadOptions.decodeFileName(fileNameByteArray); + } + + var ucomment = this.findExtraFieldUnicodeComment(); + if (ucomment !== null) { + this.fileCommentStr = ucomment; + } else { + // ASCII text or unsupported code page + var commentByteArray = utils.transformTo(decodeParamType, this.fileComment); + this.fileCommentStr = this.loadOptions.decodeFileName(commentByteArray); + } + } + }, + + /** + * Find the unicode path declared in the extra field, if any. + * @return {String} the unicode path, null otherwise. + */ + findExtraFieldUnicodePath: function() { + var upathField = this.extraFields[0x7075]; + if (upathField) { + var extraReader = readerFor(upathField.value); + + // wrong version + if (extraReader.readInt(1) !== 1) { + return null; + } + + // the crc of the filename changed, this field is out of date. + if (crc32fn(this.fileName) !== extraReader.readInt(4)) { + return null; + } + + return utf8.utf8decode(extraReader.readData(upathField.length - 5)); + } + return null; + }, + + /** + * Find the unicode comment declared in the extra field, if any. + * @return {String} the unicode comment, null otherwise. + */ + findExtraFieldUnicodeComment: function() { + var ucommentField = this.extraFields[0x6375]; + if (ucommentField) { + var extraReader = readerFor(ucommentField.value); + + // wrong version + if (extraReader.readInt(1) !== 1) { + return null; + } + + // the crc of the comment changed, this field is out of date. + if (crc32fn(this.fileComment) !== extraReader.readInt(4)) { + return null; + } + + return utf8.utf8decode(extraReader.readData(ucommentField.length - 5)); + } + return null; + } +}; +module.exports = ZipEntry; + +},{"./compressedObject":2,"./compressions":3,"./crc32":4,"./reader/readerFor":22,"./support":30,"./utf8":31,"./utils":32}],35:[function(require,module,exports){ +'use strict'; + +var StreamHelper = require('./stream/StreamHelper'); +var DataWorker = require('./stream/DataWorker'); +var utf8 = require('./utf8'); +var CompressedObject = require('./compressedObject'); +var GenericWorker = require('./stream/GenericWorker'); + +/** + * A simple object representing a file in the zip file. + * @constructor + * @param {string} name the name of the file + * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data + * @param {Object} options the options of the file + */ +var ZipObject = function(name, data, options) { + this.name = name; + this.dir = options.dir; + this.date = options.date; + this.comment = options.comment; + this.unixPermissions = options.unixPermissions; + this.dosPermissions = options.dosPermissions; + + this._data = data; + this._dataBinary = options.binary; + // keep only the compression + this.options = { + compression : options.compression, + compressionOptions : options.compressionOptions + }; +}; + +ZipObject.prototype = { + /** + * Create an internal stream for the content of this object. + * @param {String} type the type of each chunk. + * @return StreamHelper the stream. + */ + internalStream: function (type) { + var result = null, outputType = "string"; + try { + if (!type) { + throw new Error("No output type specified."); + } + outputType = type.toLowerCase(); + var askUnicodeString = outputType === "string" || outputType === "text"; + if (outputType === "binarystring" || outputType === "text") { + outputType = "string"; + } + result = this._decompressWorker(); + + var isUnicodeString = !this._dataBinary; + + if (isUnicodeString && !askUnicodeString) { + result = result.pipe(new utf8.Utf8EncodeWorker()); + } + if (!isUnicodeString && askUnicodeString) { + result = result.pipe(new utf8.Utf8DecodeWorker()); + } + } catch (e) { + result = new GenericWorker("error"); + result.error(e); + } + + return new StreamHelper(result, outputType, ""); + }, + + /** + * Prepare the content in the asked type. + * @param {String} type the type of the result. + * @param {Function} onUpdate a function to call on each internal update. + * @return Promise the promise of the result. + */ + async: function (type, onUpdate) { + return this.internalStream(type).accumulate(onUpdate); + }, + + /** + * Prepare the content as a nodejs stream. + * @param {String} type the type of each chunk. + * @param {Function} onUpdate a function to call on each internal update. + * @return Stream the stream. + */ + nodeStream: function (type, onUpdate) { + return this.internalStream(type || "nodebuffer").toNodejsStream(onUpdate); + }, + + /** + * Return a worker for the compressed content. + * @private + * @param {Object} compression the compression object to use. + * @param {Object} compressionOptions the options to use when compressing. + * @return Worker the worker. + */ + _compressWorker: function (compression, compressionOptions) { + if ( + this._data instanceof CompressedObject && + this._data.compression.magic === compression.magic + ) { + return this._data.getCompressedWorker(); + } else { + var result = this._decompressWorker(); + if(!this._dataBinary) { + result = result.pipe(new utf8.Utf8EncodeWorker()); + } + return CompressedObject.createWorkerFrom(result, compression, compressionOptions); + } + }, + /** + * Return a worker for the decompressed content. + * @private + * @return Worker the worker. + */ + _decompressWorker : function () { + if (this._data instanceof CompressedObject) { + return this._data.getContentWorker(); + } else if (this._data instanceof GenericWorker) { + return this._data; + } else { + return new DataWorker(this._data); + } + } +}; + +var removedMethods = ["asText", "asBinary", "asNodeBuffer", "asUint8Array", "asArrayBuffer"]; +var removedFn = function () { + throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide."); +}; + +for(var i = 0; i < removedMethods.length; i++) { + ZipObject.prototype[removedMethods[i]] = removedFn; +} +module.exports = ZipObject; + +},{"./compressedObject":2,"./stream/DataWorker":27,"./stream/GenericWorker":28,"./stream/StreamHelper":29,"./utf8":31}],36:[function(require,module,exports){ +(function (global){ +'use strict'; +var Mutation = global.MutationObserver || global.WebKitMutationObserver; + +var scheduleDrain; + +{ + if (Mutation) { + var called = 0; + var observer = new Mutation(nextTick); + var element = global.document.createTextNode(''); + observer.observe(element, { + characterData: true + }); + scheduleDrain = function () { + element.data = (called = ++called % 2); + }; + } else if (!global.setImmediate && typeof global.MessageChannel !== 'undefined') { + var channel = new global.MessageChannel(); + channel.port1.onmessage = nextTick; + scheduleDrain = function () { + channel.port2.postMessage(0); + }; + } else if ('document' in global && 'onreadystatechange' in global.document.createElement('script')) { + scheduleDrain = function () { + + // Create a + + + + + + + + + +
    + +
    + +
    +
    + +

    Class DelegatingEnvironment

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • org.apache.guacamole.environment.DelegatingEnvironment
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      Environment
      +
      +
      +
      public class DelegatingEnvironment
      +extends Object
      +implements Environment
      +
      Environment implementation which simply delegates all function calls to a + wrapped Environment instance.
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          DelegatingEnvironment

          +
          public DelegatingEnvironment​(Environment environment)
          +
          Creates a new DelegatingEnvironment which delegates all function calls + to the given Environment.
          +
          +
          Parameters:
          +
          environment - The Environment that all function calls should be delegated to.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getGuacamoleHome

          +
          public File getGuacamoleHome()
          +
          Description copied from interface: Environment
          +
          Returns the Guacamole home directory as determined when this Environment + object was created. The Guacamole home directory is found by checking, in + order: the guacamole.home system property, the GUACAMOLE_HOME environment + variable, and finally the .guacamole directory in the home directory of + the user running the servlet container.
          +
          +
          Specified by:
          +
          getGuacamoleHome in interface Environment
          +
          Returns:
          +
          The File representing the Guacamole home directory, which may + or may not exist, and may turn out to not be a directory.
          +
          +
        • +
        + + + +
          +
        • +

          getProtocols

          +
          public Map<String,​ProtocolInfo> getProtocols()
          +
          Description copied from interface: Environment
          +
          Returns a map of all available protocols, where each key is the name of + that protocol as would be passed to guacd during connection.
          +
          +
          Specified by:
          +
          getProtocols in interface Environment
          +
          Returns:
          +
          A map of all available protocols.
          +
          +
        • +
        + + + +
          +
        • +

          getProtocol

          +
          public ProtocolInfo getProtocol​(String name)
          +
          Description copied from interface: Environment
          +
          Returns the protocol having the given name. The name must be the + protocol name as would be passed to guacd during connection.
          +
          +
          Specified by:
          +
          getProtocol in interface Environment
          +
          Parameters:
          +
          name - The name of the protocol.
          +
          Returns:
          +
          The protocol having the given name, or null if no such + protocol is registered.
          +
          +
        • +
        + + + +
          +
        • +

          getProperty

          +
          public <Type> Type getProperty​(GuacamoleProperty<Type> property)
          +                        throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: Environment
          +
          Given a GuacamoleProperty, parses and returns the value set for that + property in guacamole.properties, if any.
          +
          +
          Specified by:
          +
          getProperty in interface Environment
          +
          Type Parameters:
          +
          Type - The type that the given property is parsed into.
          +
          Parameters:
          +
          property - The property to read from guacamole.properties.
          +
          Returns:
          +
          The parsed value of the property as read from + guacamole.properties.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while parsing the value + for the given property in + guacamole.properties.
          +
          +
        • +
        + + + + + +
          +
        • +

          getProperty

          +
          public <Type> Type getProperty​(GuacamoleProperty<Type> property,
          +                               Type defaultValue)
          +                        throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: Environment
          +
          Given a GuacamoleProperty, parses and returns the value set for that + property in guacamole.properties, if any. If no value is found, the + provided default value is returned.
          +
          +
          Specified by:
          +
          getProperty in interface Environment
          +
          Type Parameters:
          +
          Type - The type that the given property is parsed into.
          +
          Parameters:
          +
          property - The property to read from guacamole.properties.
          +
          defaultValue - The value to return if no value was given in + guacamole.properties.
          +
          Returns:
          +
          The parsed value of the property as read from + guacamole.properties, or the provided default value if no value + was found.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while parsing the value + for the given property in + guacamole.properties.
          +
          +
        • +
        + + + +
          +
        • +

          getRequiredProperty

          +
          public <Type> Type getRequiredProperty​(GuacamoleProperty<Type> property)
          +                                throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: Environment
          +
          Given a GuacamoleProperty, parses and returns the value set for that + property in guacamole.properties. An exception is thrown if the value + is not provided.
          +
          +
          Specified by:
          +
          getRequiredProperty in interface Environment
          +
          Type Parameters:
          +
          Type - The type that the given property is parsed into.
          +
          Parameters:
          +
          property - The property to read from guacamole.properties.
          +
          Returns:
          +
          The parsed value of the property as read from + guacamole.properties.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while parsing the value + for the given property in + guacamole.properties, or if the property is + not specified.
          +
          +
        • +
        + + + +
          +
        • +

          getDefaultGuacamoleProxyConfiguration

          +
          public GuacamoleProxyConfiguration getDefaultGuacamoleProxyConfiguration()
          +                                                                  throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: Environment
          +
          Returns the connection information which should be used, by default, to + connect to guacd when establishing a remote desktop connection.
          +
          +
          Specified by:
          +
          getDefaultGuacamoleProxyConfiguration in interface Environment
          +
          Returns:
          +
          The connection information which should be used, by default, to + connect to guacd.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If the connection information for guacd cannot be retrieved.
          +
          +
        • +
        + + + +
          +
        • +

          addGuacamoleProperties

          +
          public void addGuacamoleProperties​(GuacamoleProperties properties)
          +                            throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: Environment
          +
          Adds another possible source of Guacamole configuration properties to + this Environment. Properties not already defined by other sources of + Guacamole configuration properties will alternatively be read from the + given GuacamoleProperties.
          +
          +
          Specified by:
          +
          addGuacamoleProperties in interface Environment
          +
          Parameters:
          +
          properties - The GuacamoleProperties to add to this Environment.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If the given GuacamoleProperties cannot be added, or if this + Environment does not support this operation.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/environment/Environment.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/environment/Environment.html new file mode 100644 index 000000000..ec9b975af --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/environment/Environment.html @@ -0,0 +1,565 @@ + + + + + +Environment (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface Environment

    +
    +
    +
    +
      +
    • +
      +
      All Known Implementing Classes:
      +
      DelegatingEnvironment, LocalEnvironment
      +
      +
      +
      public interface Environment
      +
      The environment of an arbitrary Guacamole instance, describing available + protocols, configuration parameters, and the GUACAMOLE_HOME directory.
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          GUACD_HOSTNAME

          +
          static final StringGuacamoleProperty GUACD_HOSTNAME
          +
          The hostname of the server where guacd (the Guacamole proxy server) is + running.
          +
        • +
        + + + +
          +
        • +

          GUACD_PORT

          +
          static final IntegerGuacamoleProperty GUACD_PORT
          +
          The port that guacd (the Guacamole proxy server) is listening on.
          +
        • +
        + + + + +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getGuacamoleHome

          +
          File getGuacamoleHome()
          +
          Returns the Guacamole home directory as determined when this Environment + object was created. The Guacamole home directory is found by checking, in + order: the guacamole.home system property, the GUACAMOLE_HOME environment + variable, and finally the .guacamole directory in the home directory of + the user running the servlet container.
          +
          +
          Returns:
          +
          The File representing the Guacamole home directory, which may + or may not exist, and may turn out to not be a directory.
          +
          +
        • +
        + + + +
          +
        • +

          getProtocols

          +
          Map<String,​ProtocolInfo> getProtocols()
          +
          Returns a map of all available protocols, where each key is the name of + that protocol as would be passed to guacd during connection.
          +
          +
          Returns:
          +
          A map of all available protocols.
          +
          +
        • +
        + + + +
          +
        • +

          getProtocol

          +
          ProtocolInfo getProtocol​(String name)
          +
          Returns the protocol having the given name. The name must be the + protocol name as would be passed to guacd during connection.
          +
          +
          Parameters:
          +
          name - The name of the protocol.
          +
          Returns:
          +
          The protocol having the given name, or null if no such + protocol is registered.
          +
          +
        • +
        + + + +
          +
        • +

          getProperty

          +
          <Type> Type getProperty​(GuacamoleProperty<Type> property)
          +                 throws org.apache.guacamole.GuacamoleException
          +
          Given a GuacamoleProperty, parses and returns the value set for that + property in guacamole.properties, if any.
          +
          +
          Type Parameters:
          +
          Type - The type that the given property is parsed into.
          +
          Parameters:
          +
          property - The property to read from guacamole.properties.
          +
          Returns:
          +
          The parsed value of the property as read from + guacamole.properties.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while parsing the value + for the given property in + guacamole.properties.
          +
          +
        • +
        + + + + + +
          +
        • +

          getProperty

          +
          <Type> Type getProperty​(GuacamoleProperty<Type> property,
          +                        Type defaultValue)
          +                 throws org.apache.guacamole.GuacamoleException
          +
          Given a GuacamoleProperty, parses and returns the value set for that + property in guacamole.properties, if any. If no value is found, the + provided default value is returned.
          +
          +
          Type Parameters:
          +
          Type - The type that the given property is parsed into.
          +
          Parameters:
          +
          property - The property to read from guacamole.properties.
          +
          defaultValue - The value to return if no value was given in + guacamole.properties.
          +
          Returns:
          +
          The parsed value of the property as read from + guacamole.properties, or the provided default value if no value + was found.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while parsing the value + for the given property in + guacamole.properties.
          +
          +
        • +
        + + + +
          +
        • +

          getRequiredProperty

          +
          <Type> Type getRequiredProperty​(GuacamoleProperty<Type> property)
          +                         throws org.apache.guacamole.GuacamoleException
          +
          Given a GuacamoleProperty, parses and returns the value set for that + property in guacamole.properties. An exception is thrown if the value + is not provided.
          +
          +
          Type Parameters:
          +
          Type - The type that the given property is parsed into.
          +
          Parameters:
          +
          property - The property to read from guacamole.properties.
          +
          Returns:
          +
          The parsed value of the property as read from + guacamole.properties.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while parsing the value + for the given property in + guacamole.properties, or if the property is + not specified.
          +
          +
        • +
        + + + +
          +
        • +

          getDefaultGuacamoleProxyConfiguration

          +
          GuacamoleProxyConfiguration getDefaultGuacamoleProxyConfiguration()
          +                                                           throws org.apache.guacamole.GuacamoleException
          +
          Returns the connection information which should be used, by default, to + connect to guacd when establishing a remote desktop connection.
          +
          +
          Returns:
          +
          The connection information which should be used, by default, to + connect to guacd.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If the connection information for guacd cannot be retrieved.
          +
          +
        • +
        + + + +
          +
        • +

          addGuacamoleProperties

          +
          default void addGuacamoleProperties​(GuacamoleProperties properties)
          +                             throws org.apache.guacamole.GuacamoleException
          +
          Adds another possible source of Guacamole configuration properties to + this Environment. Properties not already defined by other sources of + Guacamole configuration properties will alternatively be read from the + given GuacamoleProperties.
          +
          +
          Parameters:
          +
          properties - The GuacamoleProperties to add to this Environment.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If the given GuacamoleProperties cannot be added, or if this + Environment does not support this operation.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/environment/LocalEnvironment.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/environment/LocalEnvironment.html new file mode 100644 index 000000000..42ab82f86 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/environment/LocalEnvironment.html @@ -0,0 +1,621 @@ + + + + + +LocalEnvironment (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class LocalEnvironment

    +
    +
    + +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      Environment
      +
      +
      +
      public class LocalEnvironment
      +extends Object
      +implements Environment
      +
      The environment of the locally-running Guacamole instance, describing + available protocols, configuration parameters, and the GUACAMOLE_HOME + directory. Sources of configuration properties like guacamole.properties and + environment variables will be automatically added by the Guacamole web + application and may also be added by extensions using + addGuacamoleProperties(org.apache.guacamole.properties.GuacamoleProperties).
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          LocalEnvironment

          +
          @Deprecated
          +public LocalEnvironment()
          +
          Deprecated. +
          Extensions leveraging LocalEnvironment should instead use + LocalEnvironment.getInstance() to obtain a singleton instance of the + environment.
          +
          +
          Creates a new LocalEnvironment, initializing that environment based on + the contents of GUACAMOLE_HOME. Sources of configuration properties like + guacamole.properties and environment variables will be automatically + added by the Guacamole web application and/or any installed extensions.
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getInstance

          +
          public static LocalEnvironment getInstance()
          +
          Returns a singleton instance of LocalEnvironment which may be shared by + the Guacamole web application and all extensions.
          +
          +
          Returns:
          +
          A singleton instance of this class.
          +
          +
        • +
        + + + +
          +
        • +

          getGuacamoleHome

          +
          public File getGuacamoleHome()
          +
          Description copied from interface: Environment
          +
          Returns the Guacamole home directory as determined when this Environment + object was created. The Guacamole home directory is found by checking, in + order: the guacamole.home system property, the GUACAMOLE_HOME environment + variable, and finally the .guacamole directory in the home directory of + the user running the servlet container.
          +
          +
          Specified by:
          +
          getGuacamoleHome in interface Environment
          +
          Returns:
          +
          The File representing the Guacamole home directory, which may + or may not exist, and may turn out to not be a directory.
          +
          +
        • +
        + + + +
          +
        • +

          getProperty

          +
          public <Type> Type getProperty​(GuacamoleProperty<Type> property)
          +                        throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: Environment
          +
          Given a GuacamoleProperty, parses and returns the value set for that + property in guacamole.properties, if any.
          +
          +
          Specified by:
          +
          getProperty in interface Environment
          +
          Type Parameters:
          +
          Type - The type that the given property is parsed into.
          +
          Parameters:
          +
          property - The property to read from guacamole.properties.
          +
          Returns:
          +
          The parsed value of the property as read from + guacamole.properties.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while parsing the value + for the given property in + guacamole.properties.
          +
          +
        • +
        + + + + + +
          +
        • +

          getProperty

          +
          public <Type> Type getProperty​(GuacamoleProperty<Type> property,
          +                               Type defaultValue)
          +                        throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: Environment
          +
          Given a GuacamoleProperty, parses and returns the value set for that + property in guacamole.properties, if any. If no value is found, the + provided default value is returned.
          +
          +
          Specified by:
          +
          getProperty in interface Environment
          +
          Type Parameters:
          +
          Type - The type that the given property is parsed into.
          +
          Parameters:
          +
          property - The property to read from guacamole.properties.
          +
          defaultValue - The value to return if no value was given in + guacamole.properties.
          +
          Returns:
          +
          The parsed value of the property as read from + guacamole.properties, or the provided default value if no value + was found.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while parsing the value + for the given property in + guacamole.properties.
          +
          +
        • +
        + + + +
          +
        • +

          getRequiredProperty

          +
          public <Type> Type getRequiredProperty​(GuacamoleProperty<Type> property)
          +                                throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: Environment
          +
          Given a GuacamoleProperty, parses and returns the value set for that + property in guacamole.properties. An exception is thrown if the value + is not provided.
          +
          +
          Specified by:
          +
          getRequiredProperty in interface Environment
          +
          Type Parameters:
          +
          Type - The type that the given property is parsed into.
          +
          Parameters:
          +
          property - The property to read from guacamole.properties.
          +
          Returns:
          +
          The parsed value of the property as read from + guacamole.properties.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while parsing the value + for the given property in + guacamole.properties, or if the property is + not specified.
          +
          +
        • +
        + + + +
          +
        • +

          getProtocols

          +
          public Map<String,​ProtocolInfo> getProtocols()
          +
          Description copied from interface: Environment
          +
          Returns a map of all available protocols, where each key is the name of + that protocol as would be passed to guacd during connection.
          +
          +
          Specified by:
          +
          getProtocols in interface Environment
          +
          Returns:
          +
          A map of all available protocols.
          +
          +
        • +
        + + + +
          +
        • +

          getProtocol

          +
          public ProtocolInfo getProtocol​(String name)
          +
          Description copied from interface: Environment
          +
          Returns the protocol having the given name. The name must be the + protocol name as would be passed to guacd during connection.
          +
          +
          Specified by:
          +
          getProtocol in interface Environment
          +
          Parameters:
          +
          name - The name of the protocol.
          +
          Returns:
          +
          The protocol having the given name, or null if no such + protocol is registered.
          +
          +
        • +
        + + + +
          +
        • +

          getDefaultGuacamoleProxyConfiguration

          +
          public GuacamoleProxyConfiguration getDefaultGuacamoleProxyConfiguration()
          +                                                                  throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: Environment
          +
          Returns the connection information which should be used, by default, to + connect to guacd when establishing a remote desktop connection.
          +
          +
          Specified by:
          +
          getDefaultGuacamoleProxyConfiguration in interface Environment
          +
          Returns:
          +
          The connection information which should be used, by default, to + connect to guacd.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If the connection information for guacd cannot be retrieved.
          +
          +
        • +
        + + + +
          +
        • +

          addGuacamoleProperties

          +
          public void addGuacamoleProperties​(GuacamoleProperties properties)
          +
          Description copied from interface: Environment
          +
          Adds another possible source of Guacamole configuration properties to + this Environment. Properties not already defined by other sources of + Guacamole configuration properties will alternatively be read from the + given GuacamoleProperties.
          +
          +
          Specified by:
          +
          addGuacamoleProperties in interface Environment
          +
          Parameters:
          +
          properties - The GuacamoleProperties to add to this Environment.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/environment/class-use/DelegatingEnvironment.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/environment/class-use/DelegatingEnvironment.html new file mode 100644 index 000000000..a7daf70db --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/environment/class-use/DelegatingEnvironment.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.environment.DelegatingEnvironment (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.environment.DelegatingEnvironment

    +
    +
    No usage of org.apache.guacamole.environment.DelegatingEnvironment
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/environment/class-use/Environment.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/environment/class-use/Environment.html new file mode 100644 index 000000000..bed3422e8 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/environment/class-use/Environment.html @@ -0,0 +1,222 @@ + + + + + +Uses of Interface org.apache.guacamole.environment.Environment (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    org.apache.guacamole.environment.Environment

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/environment/class-use/LocalEnvironment.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/environment/class-use/LocalEnvironment.html new file mode 100644 index 000000000..5f1b8906d --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/environment/class-use/LocalEnvironment.html @@ -0,0 +1,197 @@ + + + + + +Uses of Class org.apache.guacamole.environment.LocalEnvironment (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.environment.LocalEnvironment

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/environment/package-summary.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/environment/package-summary.html new file mode 100644 index 000000000..8031beebc --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/environment/package-summary.html @@ -0,0 +1,197 @@ + + + + + +org.apache.guacamole.environment (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Package org.apache.guacamole.environment

    +
    +
    +
      +
    • + + + + + + + + + + + + +
      Interface Summary 
      InterfaceDescription
      Environment +
      The environment of an arbitrary Guacamole instance, describing available + protocols, configuration parameters, and the GUACAMOLE_HOME directory.
      +
      +
    • +
    • + + + + + + + + + + + + + + + + +
      Class Summary 
      ClassDescription
      DelegatingEnvironment +
      Environment implementation which simply delegates all function calls to a + wrapped Environment instance.
      +
      LocalEnvironment +
      The environment of the locally-running Guacamole instance, describing + available protocols, configuration parameters, and the GUACAMOLE_HOME + directory.
      +
      +
    • +
    +
    +
    +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/environment/package-tree.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/environment/package-tree.html new file mode 100644 index 000000000..ac9084beb --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/environment/package-tree.html @@ -0,0 +1,172 @@ + + + + + +org.apache.guacamole.environment Class Hierarchy (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Hierarchy For Package org.apache.guacamole.environment

    +Package Hierarchies: + +
    +
    +
    +

    Class Hierarchy

    + +
    +
    +

    Interface Hierarchy

    + +
    +
    +
    +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/environment/package-use.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/environment/package-use.html new file mode 100644 index 000000000..93ce9f0b2 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/environment/package-use.html @@ -0,0 +1,196 @@ + + + + + +Uses of Package org.apache.guacamole.environment (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Package
    org.apache.guacamole.environment

    +
    +
    + +
    +
    +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/BooleanField.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/BooleanField.html new file mode 100644 index 000000000..80b07cd3e --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/BooleanField.html @@ -0,0 +1,316 @@ + + + + + +BooleanField (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class BooleanField

    +
    +
    + +
    +
      +
    • +
      +
      public class BooleanField
      +extends Field
      +
      Represents a field with strictly one possible value. It is assumed that the + field may be blank, but that its sole non-blank value is the value provided. + The provided value represents "true" while all other values, including + having no associated value, represent "false".
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          BooleanField

          +
          public BooleanField​(String name,
          +                    String truthValue)
          +
          Creates a new BooleanField with the given name and truth value. The + truth value is the value that, when assigned to this field, means that + this field is "true".
          +
          +
          Parameters:
          +
          name - The unique name to associate with this field.
          +
          truthValue - The value to consider "true" for this field. All other values will + be considered "false".
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/DateField.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/DateField.html new file mode 100644 index 000000000..a6a4b0e91 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/DateField.html @@ -0,0 +1,436 @@ + + + + + +DateField (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class DateField

    +
    +
    + +
    +
      +
    • +
      +
      public class DateField
      +extends Field
      +
      Represents a date field. The field may contain only date values which + conform to a standard pattern, defined by DateField.FORMAT.
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          FORMAT

          +
          public static final String FORMAT
          +
          The date format used by date fields, compatible with SimpleDateFormat.
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          DateField

          +
          public DateField​(String name)
          +
          Creates a new DateField with the given name.
          +
          +
          Parameters:
          +
          name - The unique name to associate with this field.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          format

          +
          public static String format​(Date date)
          +
          Converts the given date into a string which follows the format used by + date fields.
          +
          +
          Parameters:
          +
          date - The date value to format, which may be null.
          +
          Returns:
          +
          The formatted date, or null if the provided time was null.
          +
          +
        • +
        + + + +
          +
        • +

          parse

          +
          public static Date parse​(String dateString)
          +                  throws ParseException
          +
          Parses the given string into a corresponding date. The string must + follow the standard format used by date fields, as defined by FORMAT + and as would be produced by format().
          +
          +
          Parameters:
          +
          dateString - The date string to parse, which may be null.
          +
          Returns:
          +
          The date corresponding to the given date string, or null if the + provided date string was null or blank.
          +
          Throws:
          +
          ParseException - If the given date string does not conform to the standard format + used by date fields.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/EmailField.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/EmailField.html new file mode 100644 index 000000000..b82964c97 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/EmailField.html @@ -0,0 +1,307 @@ + + + + + +EmailField (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class EmailField

    +
    +
    + +
    +
      +
    • +
      +
      public class EmailField
      +extends Field
      +
      Represents a text field which may contain an email address.
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          EmailField

          +
          public EmailField​(String name)
          +
          Creates a new EmailField with the given name.
          +
          +
          Parameters:
          +
          name - The unique name to associate with this field.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/EnumField.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/EnumField.html new file mode 100644 index 000000000..7a5851d7d --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/EnumField.html @@ -0,0 +1,311 @@ + + + + + +EnumField (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class EnumField

    +
    +
    + +
    +
      +
    • +
      +
      public class EnumField
      +extends Field
      +
      Represents an arbitrary field with a finite, enumerated set of possible + values.
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          EnumField

          +
          public EnumField​(String name,
          +                 Collection<String> options)
          +
          Creates a new EnumField with the given name and possible values.
          +
          +
          Parameters:
          +
          name - The unique name to associate with this field.
          +
          options - All possible legal options for this field.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/Field.Type.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/Field.Type.html new file mode 100644 index 000000000..52f0c1cd2 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/Field.Type.html @@ -0,0 +1,641 @@ + + + + + +Field.Type (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class Field.Type

    +
    +
    + +
    +
      +
    • +
      +
      Enclosing class:
      +
      Field
      +
      +
      +
      public static class Field.Type
      +extends Object
      +
      All types of fields which are available by default. Additional field + types may be defined by extensions by using a unique field type name and + registering that name with the form service within JavaScript. + + See FormService.js.
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Summary

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Fields 
        Modifier and TypeFieldDescription
        static StringBOOLEAN +
        A boolean field, whose value is either blank or "true".
        +
        static StringDATE +
        A date field whose legal values conform to the pattern "YYYY-MM-DD", + zero-padded.
        +
        static StringEMAIL +
        An email address field.
        +
        static StringENUM +
        An enumerated field, whose legal values are fully enumerated by a + provided, finite list.
        +
        static StringLANGUAGE +
        Field type which allows selection of languages.
        +
        static StringMULTILINE +
        A text field that can span more than one line.
        +
        static StringNUMERIC +
        A numeric field, whose value must contain only digits.
        +
        static StringPASSWORD +
        A password field, whose value is sensitive and must be hidden.
        +
        static StringQUERY_PARAMETER +
        An HTTP query parameter which is expected to be embedded in the URL + given to a user.
        +
        static StringREDIRECT +
        A redirect field whose value is an encoded URL to which the user + will be redirected.
        +
        static StringTERMINAL_COLOR_SCHEME +
        A color scheme accepted by the Guacamole server terminal emulator + and protocols which leverage it.
        +
        static StringTEXT +
        A text field, accepting arbitrary values.
        +
        static StringTIME +
        A time field whose legal values conform to the pattern "HH:MM:SS", + zero-padded, 24-hour.
        +
        static StringTIMEZONE +
        A time zone field whose legal values are only valid time zone IDs, + as dictated by Java within TimeZone.getAvailableIDs().
        +
        static StringUSERNAME +
        A username field.
        +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Constructor Summary

        + + + + + + + + + + +
        Constructors 
        ConstructorDescription
        Type() 
        +
      • +
      +
      + +
      + +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Detail

        + + + + + + + +
          +
        • +

          EMAIL

          +
          public static final String EMAIL
          +
          An email address field. This field type generally behaves + identically to arbitrary text fields, but has semantic differences.
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          USERNAME

          +
          public static final String USERNAME
          +
          A username field. This field type generally behaves identically to + arbitrary text fields, but has semantic differences.
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          PASSWORD

          +
          public static final String PASSWORD
          +
          A password field, whose value is sensitive and must be hidden.
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          NUMERIC

          +
          public static final String NUMERIC
          +
          A numeric field, whose value must contain only digits.
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          BOOLEAN

          +
          public static final String BOOLEAN
          +
          A boolean field, whose value is either blank or "true".
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          ENUM

          +
          public static final String ENUM
          +
          An enumerated field, whose legal values are fully enumerated by a + provided, finite list.
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          MULTILINE

          +
          public static final String MULTILINE
          +
          A text field that can span more than one line.
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          TIMEZONE

          +
          public static final String TIMEZONE
          +
          A time zone field whose legal values are only valid time zone IDs, + as dictated by Java within TimeZone.getAvailableIDs().
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          LANGUAGE

          +
          public static final String LANGUAGE
          +
          Field type which allows selection of languages. The languages + displayed are the set of languages supported by the Guacamole web + application. Legal values are valid language IDs, as dictated by + the filenames of Guacamole's available translations.
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          DATE

          +
          public static final String DATE
          +
          A date field whose legal values conform to the pattern "YYYY-MM-DD", + zero-padded.
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          TIME

          +
          public static final String TIME
          +
          A time field whose legal values conform to the pattern "HH:MM:SS", + zero-padded, 24-hour.
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          QUERY_PARAMETER

          +
          public static final String QUERY_PARAMETER
          +
          An HTTP query parameter which is expected to be embedded in the URL + given to a user.
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          TERMINAL_COLOR_SCHEME

          +
          public static final String TERMINAL_COLOR_SCHEME
          +
          A color scheme accepted by the Guacamole server terminal emulator + and protocols which leverage it.
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          REDIRECT

          +
          public static final String REDIRECT
          +
          A redirect field whose value is an encoded URL to which the user + will be redirected.
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          Type

          +
          public Type()
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/Field.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/Field.html new file mode 100644 index 000000000..f9e43ca88 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/Field.html @@ -0,0 +1,509 @@ + + + + + +Field (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class Field

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          Field

          +
          public Field()
          +
          Creates a new Parameter with no associated name or type.
          +
        • +
        + + + +
          +
        • +

          Field

          +
          public Field​(String name,
          +             String type)
          +
          Creates a new Field with the given name and type.
          +
          +
          Parameters:
          +
          name - The unique name to associate with this field.
          +
          type - The type of this field.
          +
          +
        • +
        + + + +
          +
        • +

          Field

          +
          public Field​(String name,
          +             String type,
          +             Collection<String> options)
          +
          Creates a new Field with the given name, type, and possible values.
          +
          +
          Parameters:
          +
          name - The unique name to associate with this field.
          +
          type - The type of this field.
          +
          options - A collection of all possible valid options for this field.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getName

          +
          public String getName()
          +
          Returns the unique name associated with this field.
          +
          +
          Returns:
          +
          The unique name associated with this field.
          +
          +
        • +
        + + + +
          +
        • +

          setName

          +
          public void setName​(String name)
          +
          Sets the unique name associated with this field.
          +
          +
          Parameters:
          +
          name - The unique name to assign to this field.
          +
          +
        • +
        + + + +
          +
        • +

          getType

          +
          public String getType()
          +
          Returns the type of this field.
          +
          +
          Returns:
          +
          The type of this field.
          +
          +
        • +
        + + + +
          +
        • +

          setType

          +
          public void setType​(String type)
          +
          Sets the type of this field.
          +
          +
          Parameters:
          +
          type - The type of this field.
          +
          +
        • +
        + + + +
          +
        • +

          getOptions

          +
          public Collection<String> getOptions()
          +
          Returns a mutable collection of field options. Changes to this + collection directly affect the available options.
          +
          +
          Returns:
          +
          A mutable collection of field options, or null if the field has no + options.
          +
          +
        • +
        + + + +
          +
        • +

          setOptions

          +
          public void setOptions​(Collection<String> options)
          +
          Sets the options available as possible values of this field.
          +
          +
          Parameters:
          +
          options - The options to associate with this field.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/FieldOption.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/FieldOption.html new file mode 100644 index 000000000..066128a09 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/FieldOption.html @@ -0,0 +1,405 @@ + + + + + +FieldOption (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class FieldOption

    +
    +
    + +
    +
      +
    • +
      +
      public class FieldOption
      +extends Object
      +
      Describes an available legal value for an enumerated field.
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          FieldOption

          +
          public FieldOption()
          +
          Creates a new FieldOption with no associated value or title.
          +
        • +
        + + + +
          +
        • +

          FieldOption

          +
          public FieldOption​(String value,
          +                   String title)
          +
          Creates a new FieldOption having the given value and title.
          +
          +
          Parameters:
          +
          value - The value to assign if this option is chosen.
          +
          title - The human-readable title to associate with this option.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getValue

          +
          public String getValue()
          +
          Returns the value that will be assigned if this option is chosen.
          +
          +
          Returns:
          +
          The value that will be assigned if this option is chosen.
          +
          +
        • +
        + + + +
          +
        • +

          setValue

          +
          public void setValue​(String value)
          +
          Sets the value that will be assigned if this option is chosen.
          +
          +
          Parameters:
          +
          value - The value to assign if this option is chosen.
          +
          +
        • +
        + + + +
          +
        • +

          getTitle

          +
          public String getTitle()
          +
          Returns the human-readable title describing the effect of this option.
          +
          +
          Returns:
          +
          The human-readable title describing the effect of this option.
          +
          +
        • +
        + + + +
          +
        • +

          setTitle

          +
          public void setTitle​(String title)
          +
          Sets the human-readable title describing the effect of this option.
          +
          +
          Parameters:
          +
          title - A human-readable title describing the effect of this option.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/Form.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/Form.html new file mode 100644 index 000000000..852090ae2 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/Form.html @@ -0,0 +1,411 @@ + + + + + +Form (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class Form

    +
    +
    + +
    +
      +
    • +
      +
      public class Form
      +extends Object
      +
      Information which describes logical set of fields.
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          Form

          +
          public Form()
          +
          Creates a new Form object with no associated fields. The name is left + unset as null. If no form name is provided, this form must not be used + in the same context as another unnamed form.
          +
        • +
        + + + +
          +
        • +

          Form

          +
          public Form​(String name,
          +            Collection<Field> fields)
          +
          Creates a new Form object having the given name and containing the given + fields.
          +
          +
          Parameters:
          +
          name - A name which uniquely identifies this form.
          +
          fields - The fields to provided within the new Form.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getFields

          +
          public Collection<Field> getFields()
          +
          Returns a mutable collection of the fields associated with this form. + Changes to this collection affect the fields exposed to the user.
          +
          +
          Returns:
          +
          A mutable collection of fields.
          +
          +
        • +
        + + + +
          +
        • +

          setFields

          +
          public void setFields​(Collection<Field> fields)
          +
          Sets the collection of fields associated with this form.
          +
          +
          Parameters:
          +
          fields - The collection of fields to associate with this form.
          +
          +
        • +
        + + + +
          +
        • +

          getName

          +
          public String getName()
          +
          Returns the name of this form. Form names must uniquely identify each + form.
          +
          +
          Returns:
          +
          The name of this form, or null if the form has no name.
          +
          +
        • +
        + + + +
          +
        • +

          setName

          +
          public void setName​(String name)
          +
          Sets the name of this form. Form names must uniquely identify each form.
          +
          +
          Parameters:
          +
          name - The name to assign to this form.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/LanguageField.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/LanguageField.html new file mode 100644 index 000000000..175bc8c9c --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/LanguageField.html @@ -0,0 +1,361 @@ + + + + + +LanguageField (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class LanguageField

    +
    +
    + +
    +
      +
    • +
      +
      public class LanguageField
      +extends Field
      +
      Represents a language field. The field may contain only valid language + identifiers as used by the Guacamole web application for its translations. + Language identifiers are defined by the filenames of the JSON files + containing the translation.
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          LanguageField

          +
          public LanguageField​(String name)
          +
          Creates a new LanguageField with the given name.
          +
          +
          Parameters:
          +
          name - The unique name to associate with this field.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          parse

          +
          public static String parse​(String language)
          +
          Parses the given string into a language ID string. As any string may be + a valid language ID as long as it has a corresponding translation, the + only transformation currently performed by this function is to ensure + that a blank language string is parsed into null.
          +
          +
          Parameters:
          +
          language - The language string to parse, which may be null.
          +
          Returns:
          +
          The ID of the language corresponding to the given string, or null if + if the given language string was null or blank.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/MultilineField.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/MultilineField.html new file mode 100644 index 000000000..941f70336 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/MultilineField.html @@ -0,0 +1,307 @@ + + + + + +MultilineField (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class MultilineField

    +
    +
    + +
    +
      +
    • +
      +
      public class MultilineField
      +extends Field
      +
      Represents a field which can contain multiple lines of text.
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          MultilineField

          +
          public MultilineField​(String name)
          +
          Creates a new MultilineField with the given name.
          +
          +
          Parameters:
          +
          name - The unique name to associate with this field.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/NumericField.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/NumericField.html new file mode 100644 index 000000000..0596ab799 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/NumericField.html @@ -0,0 +1,384 @@ + + + + + +NumericField (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class NumericField

    +
    +
    + +
    +
      +
    • +
      +
      public class NumericField
      +extends Field
      +
      Represents a field which may contain only integer values.
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          NumericField

          +
          public NumericField​(String name)
          +
          Creates a new NumericField with the given name.
          +
          +
          Parameters:
          +
          name - The unique name to associate with this field.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          format

          +
          public static String format​(Integer i)
          +
          Formats the given integer in the format required by a numeric field.
          +
          +
          Parameters:
          +
          i - The integer to format, which may be null.
          +
          Returns:
          +
          A string representation of the given integer, or null if the given + integer was null.
          +
          +
        • +
        + + + +
          +
        • +

          parse

          +
          public static Integer parse​(String str)
          +                     throws NumberFormatException
          +
          Parses the given string as an integer, where the given string is in the + format required by a numeric field.
          +
          +
          Parameters:
          +
          str - The string to parse as an integer, which may be null.
          +
          Returns:
          +
          The integer representation of the given string, or null if the given + string was null.
          +
          Throws:
          +
          NumberFormatException - If the given string is not in a parseable format.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/PasswordField.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/PasswordField.html new file mode 100644 index 000000000..39e10d7d4 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/PasswordField.html @@ -0,0 +1,308 @@ + + + + + +PasswordField (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class PasswordField

    +
    +
    + +
    +
      +
    • +
      +
      public class PasswordField
      +extends Field
      +
      Represents a field which contains sensitive text information related to + authenticating a user.
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          PasswordField

          +
          public PasswordField​(String name)
          +
          Creates a new PasswordField with the given name.
          +
          +
          Parameters:
          +
          name - The unique name to associate with this field.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/RedirectField.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/RedirectField.html new file mode 100644 index 000000000..da6f4b72c --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/RedirectField.html @@ -0,0 +1,394 @@ + + + + + +RedirectField (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class RedirectField

    +
    +
    + +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      Translatable
      +
      +
      +
      public class RedirectField
      +extends Field
      +implements Translatable
      +
      A Guacamole field that redirects a user to another page.
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          RedirectField

          +
          public RedirectField​(String name,
          +                     URI redirectUrl,
          +                     TranslatableMessage redirectMessage)
          +
          Creates a new field which facilitates redirection of the user + to another page.
          +
          +
          Parameters:
          +
          name - The name of this field.
          +
          redirectUrl - The URL to which the user should be redirected.
          +
          redirectMessage - The translatable message that should be displayed for the user while + the browser redirects.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getRedirectUrl

          +
          public String getRedirectUrl()
          +
          Returns the URL to which the user should be redirected.
          +
          +
          Returns:
          +
          The URL to which the user should be redirected.
          +
          +
        • +
        + + + +
          +
        • +

          getTranslatableMessage

          +
          public TranslatableMessage getTranslatableMessage()
          +
          Description copied from interface: Translatable
          +
          Returns a message which can be translated using a translation service, + consisting of a translation key and optional set of substitution + variables.
          +
          +
          Specified by:
          +
          getTranslatableMessage in interface Translatable
          +
          Returns:
          +
          A message which can be translated using a translation service.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/TerminalColorSchemeField.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/TerminalColorSchemeField.html new file mode 100644 index 000000000..d02517d0f --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/TerminalColorSchemeField.html @@ -0,0 +1,309 @@ + + + + + +TerminalColorSchemeField (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class TerminalColorSchemeField

    +
    +
    + +
    +
      +
    • +
      +
      public class TerminalColorSchemeField
      +extends Field
      +
      Represents a terminal color scheme field. The field may contain only valid + terminal color schemes as used by the Guacamole server terminal emulator + and protocols which leverage it (SSH, telnet, Kubernetes).
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          TerminalColorSchemeField

          +
          public TerminalColorSchemeField​(String name)
          +
          Creates a new TerminalColorSchemeField with the given name.
          +
          +
          Parameters:
          +
          name - The unique name to associate with this field.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/TextField.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/TextField.html new file mode 100644 index 000000000..a47e49fa0 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/TextField.html @@ -0,0 +1,382 @@ + + + + + +TextField (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class TextField

    +
    +
    + +
    +
      +
    • +
      +
      public class TextField
      +extends Field
      +
      Represents a basic text field. The field may generally contain any data, but + may not contain multiple lines.
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          TextField

          +
          public TextField​(String name)
          +
          Creates a new TextField with the given name.
          +
          +
          Parameters:
          +
          name - The unique name to associate with this field.
          +
          +
        • +
        + + + +
          +
        • +

          TextField

          +
          public TextField​(String name,
          +                 Collection<String> options)
          +
          Creates a new TextField with the given name and possible values. As a + text field may contain any data by definition, any provided options are + simply known-good values.
          +
          +
          Parameters:
          +
          name - The unique name to associate with this field.
          +
          options - A set of known legal options for this field.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          parse

          +
          public static String parse​(String str)
          +
          Parses the given string, interpreting empty strings as equivalent to + null. For all other cases, the given string is returned verbatim.
          +
          +
          Parameters:
          +
          str - The string to parse, which may be null.
          +
          Returns:
          +
          The given string, or null if the given string was null or empty.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/TimeField.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/TimeField.html new file mode 100644 index 000000000..d1f09a476 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/TimeField.html @@ -0,0 +1,436 @@ + + + + + +TimeField (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class TimeField

    +
    +
    + +
    +
      +
    • +
      +
      public class TimeField
      +extends Field
      +
      Represents a time field. The field may contain only time values which + conform to a standard pattern, defined by TimeField.FORMAT.
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          FORMAT

          +
          public static final String FORMAT
          +
          The time format used by time fields, compatible with SimpleDateFormat.
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          TimeField

          +
          public TimeField​(String name)
          +
          Creates a new TimeField with the given name.
          +
          +
          Parameters:
          +
          name - The unique name to associate with this field.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          parse

          +
          public static Date parse​(String timeString)
          +                  throws ParseException
          +
          Parses the given string into a corresponding time. The string must + follow the standard format used by time fields, as defined by + FORMAT and as would be produced by format().
          +
          +
          Parameters:
          +
          timeString - The time string to parse, which may be null.
          +
          Returns:
          +
          The time corresponding to the given time string, or null if the + provided time string was null or blank.
          +
          Throws:
          +
          ParseException - If the given time string does not conform to the standard format + used by time fields.
          +
          +
        • +
        + + + +
          +
        • +

          format

          +
          public static String format​(Date time)
          +
          Converts the given time into a string which follows the format used by + time fields.
          +
          +
          Parameters:
          +
          time - The time value to format, which may be null.
          +
          Returns:
          +
          The formatted time, or null if the provided time was null.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/TimeZoneField.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/TimeZoneField.html new file mode 100644 index 000000000..6acb271c4 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/TimeZoneField.html @@ -0,0 +1,359 @@ + + + + + +TimeZoneField (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class TimeZoneField

    +
    +
    + +
    +
      +
    • +
      +
      public class TimeZoneField
      +extends Field
      +
      Represents a time zone field. The field may contain only valid time zone + identifiers, as defined by the IANA time zone database. Such identifiers are + also valid Java time zone IDs as dictated by TimeZone.getAvailableIDs().
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          TimeZoneField

          +
          public TimeZoneField​(String name)
          +
          Creates a new TimeZoneField with the given name.
          +
          +
          Parameters:
          +
          name - The unique name to associate with this field.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          parse

          +
          public static String parse​(String timeZone)
          +
          Parses the given string into a time zone ID string. As these strings are + equivalent, the only transformation currently performed by this function + is to ensure that a blank time zone string is parsed into null.
          +
          +
          Parameters:
          +
          timeZone - The time zone string to parse, which may be null.
          +
          Returns:
          +
          The ID of the time zone corresponding to the given string, or null + if the given time zone string was null or blank.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/UsernameField.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/UsernameField.html new file mode 100644 index 000000000..0da9c702d --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/UsernameField.html @@ -0,0 +1,308 @@ + + + + + +UsernameField (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class UsernameField

    +
    +
    + +
    +
      +
    • +
      +
      public class UsernameField
      +extends Field
      +
      Represents a text field which will contain the uniquely-identifying name of + a user.
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          UsernameField

          +
          public UsernameField​(String name)
          +
          Creates a new UsernameField with the given name.
          +
          +
          Parameters:
          +
          name - The unique name to associate with this field.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/BooleanField.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/BooleanField.html new file mode 100644 index 000000000..8880043c7 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/BooleanField.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.form.BooleanField (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.form.BooleanField

    +
    +
    No usage of org.apache.guacamole.form.BooleanField
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/DateField.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/DateField.html new file mode 100644 index 000000000..1fba19a67 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/DateField.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.form.DateField (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.form.DateField

    +
    +
    No usage of org.apache.guacamole.form.DateField
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/EmailField.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/EmailField.html new file mode 100644 index 000000000..8f6360aac --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/EmailField.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.form.EmailField (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.form.EmailField

    +
    +
    No usage of org.apache.guacamole.form.EmailField
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/EnumField.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/EnumField.html new file mode 100644 index 000000000..5f4eee29d --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/EnumField.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.form.EnumField (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.form.EnumField

    +
    +
    No usage of org.apache.guacamole.form.EnumField
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/Field.Type.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/Field.Type.html new file mode 100644 index 000000000..077a2e4a0 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/Field.Type.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.form.Field.Type (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.form.Field.Type

    +
    +
    No usage of org.apache.guacamole.form.Field.Type
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/Field.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/Field.html new file mode 100644 index 000000000..99d5bbc71 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/Field.html @@ -0,0 +1,464 @@ + + + + + +Uses of Class org.apache.guacamole.form.Field (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.form.Field

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/FieldOption.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/FieldOption.html new file mode 100644 index 000000000..1814f3cbb --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/FieldOption.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.form.FieldOption (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.form.FieldOption

    +
    +
    No usage of org.apache.guacamole.form.FieldOption
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/Form.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/Form.html new file mode 100644 index 000000000..6ef0e8fcc --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/Form.html @@ -0,0 +1,377 @@ + + + + + +Uses of Class org.apache.guacamole.form.Form (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.form.Form

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/LanguageField.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/LanguageField.html new file mode 100644 index 000000000..fb4819495 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/LanguageField.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.form.LanguageField (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.form.LanguageField

    +
    +
    No usage of org.apache.guacamole.form.LanguageField
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/MultilineField.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/MultilineField.html new file mode 100644 index 000000000..98540b04f --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/MultilineField.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.form.MultilineField (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.form.MultilineField

    +
    +
    No usage of org.apache.guacamole.form.MultilineField
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/NumericField.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/NumericField.html new file mode 100644 index 000000000..1a20e2bae --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/NumericField.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.form.NumericField (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.form.NumericField

    +
    +
    No usage of org.apache.guacamole.form.NumericField
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/PasswordField.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/PasswordField.html new file mode 100644 index 000000000..af6b083b0 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/PasswordField.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.form.PasswordField (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.form.PasswordField

    +
    +
    No usage of org.apache.guacamole.form.PasswordField
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/RedirectField.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/RedirectField.html new file mode 100644 index 000000000..85b815a2c --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/RedirectField.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.form.RedirectField (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.form.RedirectField

    +
    +
    No usage of org.apache.guacamole.form.RedirectField
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/TerminalColorSchemeField.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/TerminalColorSchemeField.html new file mode 100644 index 000000000..1e6167e66 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/TerminalColorSchemeField.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.form.TerminalColorSchemeField (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.form.TerminalColorSchemeField

    +
    +
    No usage of org.apache.guacamole.form.TerminalColorSchemeField
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/TextField.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/TextField.html new file mode 100644 index 000000000..d1174bdf5 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/TextField.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.form.TextField (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.form.TextField

    +
    +
    No usage of org.apache.guacamole.form.TextField
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/TimeField.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/TimeField.html new file mode 100644 index 000000000..be06d56ea --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/TimeField.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.form.TimeField (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.form.TimeField

    +
    +
    No usage of org.apache.guacamole.form.TimeField
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/TimeZoneField.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/TimeZoneField.html new file mode 100644 index 000000000..b2707764b --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/TimeZoneField.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.form.TimeZoneField (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.form.TimeZoneField

    +
    +
    No usage of org.apache.guacamole.form.TimeZoneField
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/UsernameField.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/UsernameField.html new file mode 100644 index 000000000..a12c6c53a --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/class-use/UsernameField.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.form.UsernameField (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.form.UsernameField

    +
    +
    No usage of org.apache.guacamole.form.UsernameField
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/package-summary.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/package-summary.html new file mode 100644 index 000000000..cb9a37969 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/package-summary.html @@ -0,0 +1,282 @@ + + + + + +org.apache.guacamole.form (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Package org.apache.guacamole.form

    +
    +
    +
    + + +
    Provides classes which describe the contents and semantics of forms which + may be presented to the user.
    +
    +
      +
    • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Class Summary 
      ClassDescription
      BooleanField +
      Represents a field with strictly one possible value.
      +
      DateField +
      Represents a date field.
      +
      EmailField +
      Represents a text field which may contain an email address.
      +
      EnumField +
      Represents an arbitrary field with a finite, enumerated set of possible + values.
      +
      Field +
      Represents an arbitrary field, such as an HTTP parameter, the parameter of a + remote desktop protocol, or an input field within a form.
      +
      Field.Type +
      All types of fields which are available by default.
      +
      FieldOption +
      Describes an available legal value for an enumerated field.
      +
      Form +
      Information which describes logical set of fields.
      +
      LanguageField +
      Represents a language field.
      +
      MultilineField +
      Represents a field which can contain multiple lines of text.
      +
      NumericField +
      Represents a field which may contain only integer values.
      +
      PasswordField +
      Represents a field which contains sensitive text information related to + authenticating a user.
      +
      RedirectField +
      A Guacamole field that redirects a user to another page.
      +
      TerminalColorSchemeField +
      Represents a terminal color scheme field.
      +
      TextField +
      Represents a basic text field.
      +
      TimeField +
      Represents a time field.
      +
      TimeZoneField +
      Represents a time zone field.
      +
      UsernameField +
      Represents a text field which will contain the uniquely-identifying name of + a user.
      +
      +
    • +
    +
    +
    +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/package-tree.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/package-tree.html new file mode 100644 index 000000000..99eebcbf5 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/package-tree.html @@ -0,0 +1,185 @@ + + + + + +org.apache.guacamole.form Class Hierarchy (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Hierarchy For Package org.apache.guacamole.form

    +Package Hierarchies: + +
    +
    +
    +

    Class Hierarchy

    + +
    +
    +
    +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/package-use.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/package-use.html new file mode 100644 index 000000000..8baad122c --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/form/package-use.html @@ -0,0 +1,264 @@ + + + + + +Uses of Package org.apache.guacamole.form (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Package
    org.apache.guacamole.form

    +
    +
    + +
    +
    +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/Translatable.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/Translatable.html new file mode 100644 index 000000000..d77377db1 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/Translatable.html @@ -0,0 +1,270 @@ + + + + + +Translatable (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface Translatable

    +
    +
    + +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getTranslatableMessage

          +
          TranslatableMessage getTranslatableMessage()
          +
          Returns a message which can be translated using a translation service, + consisting of a translation key and optional set of substitution + variables.
          +
          +
          Returns:
          +
          A message which can be translated using a translation service.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleClientBadTypeException.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleClientBadTypeException.html new file mode 100644 index 000000000..50e90ad91 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleClientBadTypeException.html @@ -0,0 +1,489 @@ + + + + + +TranslatableGuacamoleClientBadTypeException (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class TranslatableGuacamoleClientBadTypeException

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • java.lang.Throwable
      • +
      • +
          +
        • java.lang.Exception
        • +
        • +
            +
          • org.apache.guacamole.GuacamoleException
          • +
          • +
              +
            • org.apache.guacamole.GuacamoleClientException
            • +
            • +
                +
              • org.apache.guacamole.GuacamoleClientBadTypeException
              • +
              • +
                  +
                • org.apache.guacamole.language.TranslatableGuacamoleClientBadTypeException
                • +
                +
              • +
              +
            • +
            +
          • +
          +
        • +
        +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      Serializable, Translatable
      +
      +
      +
      public class TranslatableGuacamoleClientBadTypeException
      +extends org.apache.guacamole.GuacamoleClientBadTypeException
      +implements Translatable
      +
      A GuacamoleClientBadTypeException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
      +
      +
      See Also:
      +
      Serialized Form
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          TranslatableGuacamoleClientBadTypeException

          +
          public TranslatableGuacamoleClientBadTypeException​(String message,
          +                                                   TranslatableMessage translatableMessage,
          +                                                   Throwable cause)
          +
          Creates a new TranslatableGuacamoleClientBadTypeException with the given + message and cause. The message must be provided in both non-translatable + (readable as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          translatableMessage - A translatable, human-readable description of the exception that + occurred.
          +
          cause - The cause of this exception.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleClientBadTypeException

          +
          public TranslatableGuacamoleClientBadTypeException​(String message,
          +                                                   TranslatableMessage translatableMessage)
          +
          Creates a new TranslatableGuacamoleClientBadTypeException with the given + message. The message must be provided in both non-translatable (readable + as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          translatableMessage - A translatable, human-readable description of the exception that + occurred.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleClientBadTypeException

          +
          public TranslatableGuacamoleClientBadTypeException​(String message,
          +                                                   String key,
          +                                                   Throwable cause)
          +
          Creates a new TranslatableGuacamoleClientBadTypeException with the given + message and cause. The message must be provided in both non-translatable + (readable as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          key - The arbitrary key which can be used to look up the message to be + displayed in the user's native language.
          +
          cause - The cause of this exception.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleClientBadTypeException

          +
          public TranslatableGuacamoleClientBadTypeException​(String message,
          +                                                   String key)
          +
          Creates a new TranslatableGuacamoleClientBadTypeException with the given + message. The message must be provided in both non-translatable (readable + as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          key - The arbitrary key which can be used to look up the message to be + displayed in the user's native language.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getTranslatableMessage

          +
          public TranslatableMessage getTranslatableMessage()
          +
          Description copied from interface: Translatable
          +
          Returns a message which can be translated using a translation service, + consisting of a translation key and optional set of substitution + variables.
          +
          +
          Specified by:
          +
          getTranslatableMessage in interface Translatable
          +
          Returns:
          +
          A message which can be translated using a translation service.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleClientException.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleClientException.html new file mode 100644 index 000000000..c6de13343 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleClientException.html @@ -0,0 +1,484 @@ + + + + + +TranslatableGuacamoleClientException (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class TranslatableGuacamoleClientException

    +
    +
    + +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      Serializable, Translatable
      +
      +
      +
      public class TranslatableGuacamoleClientException
      +extends org.apache.guacamole.GuacamoleClientException
      +implements Translatable
      +
      A GuacamoleClientException whose associated message is translatable + and can be passed through an arbitrary translation service, producing a + human-readable message in the user's native language.
      +
      +
      See Also:
      +
      Serialized Form
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          TranslatableGuacamoleClientException

          +
          public TranslatableGuacamoleClientException​(String message,
          +                                            TranslatableMessage translatableMessage,
          +                                            Throwable cause)
          +
          Creates a new TranslatableGuacamoleClientException with the given + message and cause. The message must be provided in both non-translatable + (readable as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          translatableMessage - A translatable, human-readable description of the exception that + occurred.
          +
          cause - The cause of this exception.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleClientException

          +
          public TranslatableGuacamoleClientException​(String message,
          +                                            TranslatableMessage translatableMessage)
          +
          Creates a new TranslatableGuacamoleClientException with the given + message. The message must be provided in both non-translatable (readable + as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          translatableMessage - A translatable, human-readable description of the exception that + occurred.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleClientException

          +
          public TranslatableGuacamoleClientException​(String message,
          +                                            String key,
          +                                            Throwable cause)
          +
          Creates a new TranslatableGuacamoleClientException with the given + message and cause. The message must be provided in both non-translatable + (readable as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          key - The arbitrary key which can be used to look up the message to be + displayed in the user's native language.
          +
          cause - The cause of this exception.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleClientException

          +
          public TranslatableGuacamoleClientException​(String message,
          +                                            String key)
          +
          Creates a new TranslatableGuacamoleClientException with the given + message. The message must be provided in both non-translatable (readable + as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          key - The arbitrary key which can be used to look up the message to be + displayed in the user's native language.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getTranslatableMessage

          +
          public TranslatableMessage getTranslatableMessage()
          +
          Description copied from interface: Translatable
          +
          Returns a message which can be translated using a translation service, + consisting of a translation key and optional set of substitution + variables.
          +
          +
          Specified by:
          +
          getTranslatableMessage in interface Translatable
          +
          Returns:
          +
          A message which can be translated using a translation service.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleClientOverrunException.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleClientOverrunException.html new file mode 100644 index 000000000..24665e779 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleClientOverrunException.html @@ -0,0 +1,489 @@ + + + + + +TranslatableGuacamoleClientOverrunException (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class TranslatableGuacamoleClientOverrunException

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • java.lang.Throwable
      • +
      • +
          +
        • java.lang.Exception
        • +
        • +
            +
          • org.apache.guacamole.GuacamoleException
          • +
          • +
              +
            • org.apache.guacamole.GuacamoleClientException
            • +
            • +
                +
              • org.apache.guacamole.GuacamoleClientOverrunException
              • +
              • +
                  +
                • org.apache.guacamole.language.TranslatableGuacamoleClientOverrunException
                • +
                +
              • +
              +
            • +
            +
          • +
          +
        • +
        +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      Serializable, Translatable
      +
      +
      +
      public class TranslatableGuacamoleClientOverrunException
      +extends org.apache.guacamole.GuacamoleClientOverrunException
      +implements Translatable
      +
      A GuacamoleClientOverrunException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
      +
      +
      See Also:
      +
      Serialized Form
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          TranslatableGuacamoleClientOverrunException

          +
          public TranslatableGuacamoleClientOverrunException​(String message,
          +                                                   TranslatableMessage translatableMessage,
          +                                                   Throwable cause)
          +
          Creates a new TranslatableGuacamoleClientOverrunException with the given + message and cause. The message must be provided in both non-translatable + (readable as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          translatableMessage - A translatable, human-readable description of the exception that + occurred.
          +
          cause - The cause of this exception.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleClientOverrunException

          +
          public TranslatableGuacamoleClientOverrunException​(String message,
          +                                                   TranslatableMessage translatableMessage)
          +
          Creates a new TranslatableGuacamoleClientOverrunException with the given + message. The message must be provided in both non-translatable (readable + as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          translatableMessage - A translatable, human-readable description of the exception that + occurred.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleClientOverrunException

          +
          public TranslatableGuacamoleClientOverrunException​(String message,
          +                                                   String key,
          +                                                   Throwable cause)
          +
          Creates a new TranslatableGuacamoleClientOverrunException with the given + message and cause. The message must be provided in both non-translatable + (readable as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          key - The arbitrary key which can be used to look up the message to be + displayed in the user's native language.
          +
          cause - The cause of this exception.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleClientOverrunException

          +
          public TranslatableGuacamoleClientOverrunException​(String message,
          +                                                   String key)
          +
          Creates a new TranslatableGuacamoleClientOverrunException with the given + message. The message must be provided in both non-translatable (readable + as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          key - The arbitrary key which can be used to look up the message to be + displayed in the user's native language.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getTranslatableMessage

          +
          public TranslatableMessage getTranslatableMessage()
          +
          Description copied from interface: Translatable
          +
          Returns a message which can be translated using a translation service, + consisting of a translation key and optional set of substitution + variables.
          +
          +
          Specified by:
          +
          getTranslatableMessage in interface Translatable
          +
          Returns:
          +
          A message which can be translated using a translation service.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleClientTimeoutException.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleClientTimeoutException.html new file mode 100644 index 000000000..54f3407f4 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleClientTimeoutException.html @@ -0,0 +1,489 @@ + + + + + +TranslatableGuacamoleClientTimeoutException (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class TranslatableGuacamoleClientTimeoutException

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • java.lang.Throwable
      • +
      • +
          +
        • java.lang.Exception
        • +
        • +
            +
          • org.apache.guacamole.GuacamoleException
          • +
          • +
              +
            • org.apache.guacamole.GuacamoleClientException
            • +
            • +
                +
              • org.apache.guacamole.GuacamoleClientTimeoutException
              • +
              • +
                  +
                • org.apache.guacamole.language.TranslatableGuacamoleClientTimeoutException
                • +
                +
              • +
              +
            • +
            +
          • +
          +
        • +
        +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      Serializable, Translatable
      +
      +
      +
      public class TranslatableGuacamoleClientTimeoutException
      +extends org.apache.guacamole.GuacamoleClientTimeoutException
      +implements Translatable
      +
      A GuacamoleClientTimeoutException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
      +
      +
      See Also:
      +
      Serialized Form
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          TranslatableGuacamoleClientTimeoutException

          +
          public TranslatableGuacamoleClientTimeoutException​(String message,
          +                                                   TranslatableMessage translatableMessage,
          +                                                   Throwable cause)
          +
          Creates a new TranslatableGuacamoleClientTimeoutException with the given + message and cause. The message must be provided in both non-translatable + (readable as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          translatableMessage - A translatable, human-readable description of the exception that + occurred.
          +
          cause - The cause of this exception.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleClientTimeoutException

          +
          public TranslatableGuacamoleClientTimeoutException​(String message,
          +                                                   TranslatableMessage translatableMessage)
          +
          Creates a new TranslatableGuacamoleClientTimeoutException with the given + message. The message must be provided in both non-translatable (readable + as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          translatableMessage - A translatable, human-readable description of the exception that + occurred.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleClientTimeoutException

          +
          public TranslatableGuacamoleClientTimeoutException​(String message,
          +                                                   String key,
          +                                                   Throwable cause)
          +
          Creates a new TranslatableGuacamoleClientTimeoutException with the given + message and cause. The message must be provided in both non-translatable + (readable as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          key - The arbitrary key which can be used to look up the message to be + displayed in the user's native language.
          +
          cause - The cause of this exception.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleClientTimeoutException

          +
          public TranslatableGuacamoleClientTimeoutException​(String message,
          +                                                   String key)
          +
          Creates a new TranslatableGuacamoleClientTimeoutException with the given + message. The message must be provided in both non-translatable (readable + as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          key - The arbitrary key which can be used to look up the message to be + displayed in the user's native language.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getTranslatableMessage

          +
          public TranslatableMessage getTranslatableMessage()
          +
          Description copied from interface: Translatable
          +
          Returns a message which can be translated using a translation service, + consisting of a translation key and optional set of substitution + variables.
          +
          +
          Specified by:
          +
          getTranslatableMessage in interface Translatable
          +
          Returns:
          +
          A message which can be translated using a translation service.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleClientTooManyException.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleClientTooManyException.html new file mode 100644 index 000000000..b55de2ff8 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleClientTooManyException.html @@ -0,0 +1,489 @@ + + + + + +TranslatableGuacamoleClientTooManyException (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class TranslatableGuacamoleClientTooManyException

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • java.lang.Throwable
      • +
      • +
          +
        • java.lang.Exception
        • +
        • +
            +
          • org.apache.guacamole.GuacamoleException
          • +
          • +
              +
            • org.apache.guacamole.GuacamoleClientException
            • +
            • +
                +
              • org.apache.guacamole.GuacamoleClientTooManyException
              • +
              • +
                  +
                • org.apache.guacamole.language.TranslatableGuacamoleClientTooManyException
                • +
                +
              • +
              +
            • +
            +
          • +
          +
        • +
        +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      Serializable, Translatable
      +
      +
      +
      public class TranslatableGuacamoleClientTooManyException
      +extends org.apache.guacamole.GuacamoleClientTooManyException
      +implements Translatable
      +
      A GuacamoleClientTooManyException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
      +
      +
      See Also:
      +
      Serialized Form
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          TranslatableGuacamoleClientTooManyException

          +
          public TranslatableGuacamoleClientTooManyException​(String message,
          +                                                   TranslatableMessage translatableMessage,
          +                                                   Throwable cause)
          +
          Creates a new TranslatableGuacamoleClientTooManyException with the given + message and cause. The message must be provided in both non-translatable + (readable as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          translatableMessage - A translatable, human-readable description of the exception that + occurred.
          +
          cause - The cause of this exception.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleClientTooManyException

          +
          public TranslatableGuacamoleClientTooManyException​(String message,
          +                                                   TranslatableMessage translatableMessage)
          +
          Creates a new TranslatableGuacamoleClientTooManyException with the given + message. The message must be provided in both non-translatable (readable + as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          translatableMessage - A translatable, human-readable description of the exception that + occurred.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleClientTooManyException

          +
          public TranslatableGuacamoleClientTooManyException​(String message,
          +                                                   String key,
          +                                                   Throwable cause)
          +
          Creates a new TranslatableGuacamoleClientTooManyException with the given + message and cause. The message must be provided in both non-translatable + (readable as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          key - The arbitrary key which can be used to look up the message to be + displayed in the user's native language.
          +
          cause - The cause of this exception.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleClientTooManyException

          +
          public TranslatableGuacamoleClientTooManyException​(String message,
          +                                                   String key)
          +
          Creates a new TranslatableGuacamoleClientTooManyException with the given + message. The message must be provided in both non-translatable (readable + as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          key - The arbitrary key which can be used to look up the message to be + displayed in the user's native language.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getTranslatableMessage

          +
          public TranslatableMessage getTranslatableMessage()
          +
          Description copied from interface: Translatable
          +
          Returns a message which can be translated using a translation service, + consisting of a translation key and optional set of substitution + variables.
          +
          +
          Specified by:
          +
          getTranslatableMessage in interface Translatable
          +
          Returns:
          +
          A message which can be translated using a translation service.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleConnectionClosedException.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleConnectionClosedException.html new file mode 100644 index 000000000..0daef38bf --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleConnectionClosedException.html @@ -0,0 +1,489 @@ + + + + + +TranslatableGuacamoleConnectionClosedException (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class TranslatableGuacamoleConnectionClosedException

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • java.lang.Throwable
      • +
      • +
          +
        • java.lang.Exception
        • +
        • +
            +
          • org.apache.guacamole.GuacamoleException
          • +
          • +
              +
            • org.apache.guacamole.GuacamoleServerException
            • +
            • +
                +
              • org.apache.guacamole.GuacamoleConnectionClosedException
              • +
              • +
                  +
                • org.apache.guacamole.language.TranslatableGuacamoleConnectionClosedException
                • +
                +
              • +
              +
            • +
            +
          • +
          +
        • +
        +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      Serializable, Translatable
      +
      +
      +
      public class TranslatableGuacamoleConnectionClosedException
      +extends org.apache.guacamole.GuacamoleConnectionClosedException
      +implements Translatable
      +
      A GuacamoleConnectionClosedException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
      +
      +
      See Also:
      +
      Serialized Form
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          TranslatableGuacamoleConnectionClosedException

          +
          public TranslatableGuacamoleConnectionClosedException​(String message,
          +                                                      TranslatableMessage translatableMessage,
          +                                                      Throwable cause)
          +
          Creates a new TranslatableGuacamoleConnectionClosedException with the + given message and cause. The message must be provided in both + non-translatable (readable as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          translatableMessage - A translatable, human-readable description of the exception that + occurred.
          +
          cause - The cause of this exception.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleConnectionClosedException

          +
          public TranslatableGuacamoleConnectionClosedException​(String message,
          +                                                      TranslatableMessage translatableMessage)
          +
          Creates a new TranslatableGuacamoleConnectionClosedException with the + given message. The message must be provided in both non-translatable + (readable as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          translatableMessage - A translatable, human-readable description of the exception that + occurred.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleConnectionClosedException

          +
          public TranslatableGuacamoleConnectionClosedException​(String message,
          +                                                      String key,
          +                                                      Throwable cause)
          +
          Creates a new TranslatableGuacamoleConnectionClosedException with the + given message and cause. The message must be provided in both + non-translatable (readable as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          key - The arbitrary key which can be used to look up the message to be + displayed in the user's native language.
          +
          cause - The cause of this exception.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleConnectionClosedException

          +
          public TranslatableGuacamoleConnectionClosedException​(String message,
          +                                                      String key)
          +
          Creates a new TranslatableGuacamoleConnectionClosedException with the + given message. The message must be provided in both non-translatable + (readable as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          key - The arbitrary key which can be used to look up the message to be + displayed in the user's native language.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getTranslatableMessage

          +
          public TranslatableMessage getTranslatableMessage()
          +
          Description copied from interface: Translatable
          +
          Returns a message which can be translated using a translation service, + consisting of a translation key and optional set of substitution + variables.
          +
          +
          Specified by:
          +
          getTranslatableMessage in interface Translatable
          +
          Returns:
          +
          A message which can be translated using a translation service.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleCredentialsException.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleCredentialsException.html new file mode 100644 index 000000000..87b5a4d2f --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleCredentialsException.html @@ -0,0 +1,522 @@ + + + + + +TranslatableGuacamoleCredentialsException (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class TranslatableGuacamoleCredentialsException

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          TranslatableGuacamoleCredentialsException

          +
          public TranslatableGuacamoleCredentialsException​(String message,
          +                                                 TranslatableMessage translatableMessage,
          +                                                 Throwable cause,
          +                                                 CredentialsInfo credentialsInfo)
          +
          Creates a new TranslatableGuacamoleCredentialsException with the given + message, cause, and associated credential information. The message must + be provided in both non-translatable (readable as-written) and + translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          translatableMessage - A translatable, human-readable description of the exception that + occurred.
          +
          cause - The cause of this exception.
          +
          credentialsInfo - Information describing the form of valid credentials.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleCredentialsException

          +
          public TranslatableGuacamoleCredentialsException​(String message,
          +                                                 TranslatableMessage translatableMessage,
          +                                                 CredentialsInfo credentialsInfo)
          +
          Creates a new TranslatableGuacamoleCredentialsException with the given + message, and associated credential information. The message must be + provided in both non-translatable (readable as-written) and translatable + forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          translatableMessage - A translatable, human-readable description of the exception that + occurred.
          +
          credentialsInfo - Information describing the form of valid credentials.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleCredentialsException

          +
          public TranslatableGuacamoleCredentialsException​(String message,
          +                                                 String key,
          +                                                 Throwable cause,
          +                                                 CredentialsInfo credentialsInfo)
          +
          Creates a new TranslatableGuacamoleCredentialsException with the given + message, cause, and associated credential information. The message must + be provided in both non-translatable (readable as-written) and + translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          key - The arbitrary key which can be used to look up the message to be + displayed in the user's native language.
          +
          cause - The cause of this exception.
          +
          credentialsInfo - Information describing the form of valid credentials.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleCredentialsException

          +
          public TranslatableGuacamoleCredentialsException​(String message,
          +                                                 String key,
          +                                                 CredentialsInfo credentialsInfo)
          +
          Creates a new TranslatableGuacamoleCredentialsException with the given + message, and associated credential information. The message must be + provided in both non-translatable (readable as-written) and translatable + forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          key - The arbitrary key which can be used to look up the message to be + displayed in the user's native language.
          +
          credentialsInfo - Information describing the form of valid credentials.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getTranslatableMessage

          +
          public TranslatableMessage getTranslatableMessage()
          +
          Description copied from interface: Translatable
          +
          Returns a message which can be translated using a translation service, + consisting of a translation key and optional set of substitution + variables.
          +
          +
          Specified by:
          +
          getTranslatableMessage in interface Translatable
          +
          Returns:
          +
          A message which can be translated using a translation service.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleInsufficientCredentialsException.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleInsufficientCredentialsException.html new file mode 100644 index 000000000..9af96f852 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleInsufficientCredentialsException.html @@ -0,0 +1,527 @@ + + + + + +TranslatableGuacamoleInsufficientCredentialsException (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class TranslatableGuacamoleInsufficientCredentialsException

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          TranslatableGuacamoleInsufficientCredentialsException

          +
          public TranslatableGuacamoleInsufficientCredentialsException​(String message,
          +                                                             TranslatableMessage translatableMessage,
          +                                                             Throwable cause,
          +                                                             CredentialsInfo credentialsInfo)
          +
          Creates a new TranslatableGuacamoleInsufficientCredentialsException with + the given message, cause, and associated credential information. The + message must be provided in both non-translatable (readable as-written) + and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          translatableMessage - A translatable, human-readable description of the exception that + occurred.
          +
          cause - The cause of this exception.
          +
          credentialsInfo - Information describing the form of valid credentials.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleInsufficientCredentialsException

          +
          public TranslatableGuacamoleInsufficientCredentialsException​(String message,
          +                                                             TranslatableMessage translatableMessage,
          +                                                             CredentialsInfo credentialsInfo)
          +
          Creates a new TranslatableGuacamoleInsufficientCredentialsException with + the given message, and associated credential information. The message + must be provided in both non-translatable (readable as-written) and + translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          translatableMessage - A translatable, human-readable description of the exception that + occurred.
          +
          credentialsInfo - Information describing the form of valid credentials.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleInsufficientCredentialsException

          +
          public TranslatableGuacamoleInsufficientCredentialsException​(String message,
          +                                                             String key,
          +                                                             Throwable cause,
          +                                                             CredentialsInfo credentialsInfo)
          +
          Creates a new TranslatableGuacamoleInsufficientCredentialsException with + the given message, cause, and associated credential information. The + message must be provided in both non-translatable (readable as-written) + and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          key - The arbitrary key which can be used to look up the message to be + displayed in the user's native language.
          +
          cause - The cause of this exception.
          +
          credentialsInfo - Information describing the form of valid credentials.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleInsufficientCredentialsException

          +
          public TranslatableGuacamoleInsufficientCredentialsException​(String message,
          +                                                             String key,
          +                                                             CredentialsInfo credentialsInfo)
          +
          Creates a new TranslatableGuacamoleInsufficientCredentialsException with + the given message, and associated credential information. The message + must be provided in both non-translatable (readable as-written) and + translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          key - The arbitrary key which can be used to look up the message to be + displayed in the user's native language.
          +
          credentialsInfo - Information describing the form of valid credentials.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getTranslatableMessage

          +
          public TranslatableMessage getTranslatableMessage()
          +
          Description copied from interface: Translatable
          +
          Returns a message which can be translated using a translation service, + consisting of a translation key and optional set of substitution + variables.
          +
          +
          Specified by:
          +
          getTranslatableMessage in interface Translatable
          +
          Returns:
          +
          A message which can be translated using a translation service.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleInvalidCredentialsException.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleInvalidCredentialsException.html new file mode 100644 index 000000000..32e726dce --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleInvalidCredentialsException.html @@ -0,0 +1,527 @@ + + + + + +TranslatableGuacamoleInvalidCredentialsException (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class TranslatableGuacamoleInvalidCredentialsException

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          TranslatableGuacamoleInvalidCredentialsException

          +
          public TranslatableGuacamoleInvalidCredentialsException​(String message,
          +                                                        TranslatableMessage translatableMessage,
          +                                                        Throwable cause,
          +                                                        CredentialsInfo credentialsInfo)
          +
          Creates a new TranslatableGuacamoleInvalidCredentialsException with + the given message, cause, and associated credential information. The + message must be provided in both non-translatable (readable as-written) + and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          translatableMessage - A translatable, human-readable description of the exception that + occurred.
          +
          cause - The cause of this exception.
          +
          credentialsInfo - Information describing the form of valid credentials.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleInvalidCredentialsException

          +
          public TranslatableGuacamoleInvalidCredentialsException​(String message,
          +                                                        TranslatableMessage translatableMessage,
          +                                                        CredentialsInfo credentialsInfo)
          +
          Creates a new TranslatableGuacamoleInvalidCredentialsException with + the given message, and associated credential information. The message + must be provided in both non-translatable (readable as-written) and + translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          translatableMessage - A translatable, human-readable description of the exception that + occurred.
          +
          credentialsInfo - Information describing the form of valid credentials.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleInvalidCredentialsException

          +
          public TranslatableGuacamoleInvalidCredentialsException​(String message,
          +                                                        String key,
          +                                                        Throwable cause,
          +                                                        CredentialsInfo credentialsInfo)
          +
          Creates a new TranslatableGuacamoleInvalidCredentialsException with + the given message, cause, and associated credential information. The + message must be provided in both non-translatable (readable as-written) + and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          key - The arbitrary key which can be used to look up the message to be + displayed in the user's native language.
          +
          cause - The cause of this exception.
          +
          credentialsInfo - Information describing the form of valid credentials.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleInvalidCredentialsException

          +
          public TranslatableGuacamoleInvalidCredentialsException​(String message,
          +                                                        String key,
          +                                                        CredentialsInfo credentialsInfo)
          +
          Creates a new TranslatableGuacamoleInvalidCredentialsException with + the given message, and associated credential information. The message + must be provided in both non-translatable (readable as-written) and + translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          key - The arbitrary key which can be used to look up the message to be + displayed in the user's native language.
          +
          credentialsInfo - Information describing the form of valid credentials.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getTranslatableMessage

          +
          public TranslatableMessage getTranslatableMessage()
          +
          Description copied from interface: Translatable
          +
          Returns a message which can be translated using a translation service, + consisting of a translation key and optional set of substitution + variables.
          +
          +
          Specified by:
          +
          getTranslatableMessage in interface Translatable
          +
          Returns:
          +
          A message which can be translated using a translation service.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleResourceClosedException.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleResourceClosedException.html new file mode 100644 index 000000000..25152285e --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleResourceClosedException.html @@ -0,0 +1,489 @@ + + + + + +TranslatableGuacamoleResourceClosedException (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class TranslatableGuacamoleResourceClosedException

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • java.lang.Throwable
      • +
      • +
          +
        • java.lang.Exception
        • +
        • +
            +
          • org.apache.guacamole.GuacamoleException
          • +
          • +
              +
            • org.apache.guacamole.GuacamoleClientException
            • +
            • +
                +
              • org.apache.guacamole.GuacamoleResourceClosedException
              • +
              • +
                  +
                • org.apache.guacamole.language.TranslatableGuacamoleResourceClosedException
                • +
                +
              • +
              +
            • +
            +
          • +
          +
        • +
        +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      Serializable, Translatable
      +
      +
      +
      public class TranslatableGuacamoleResourceClosedException
      +extends org.apache.guacamole.GuacamoleResourceClosedException
      +implements Translatable
      +
      A GuacamoleResourceClosedException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
      +
      +
      See Also:
      +
      Serialized Form
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          TranslatableGuacamoleResourceClosedException

          +
          public TranslatableGuacamoleResourceClosedException​(String message,
          +                                                    TranslatableMessage translatableMessage,
          +                                                    Throwable cause)
          +
          Creates a new TranslatableGuacamoleResourceClosedException with the given + message and cause. The message must be provided in both non-translatable + (readable as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          translatableMessage - A translatable, human-readable description of the exception that + occurred.
          +
          cause - The cause of this exception.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleResourceClosedException

          +
          public TranslatableGuacamoleResourceClosedException​(String message,
          +                                                    TranslatableMessage translatableMessage)
          +
          Creates a new TranslatableGuacamoleResourceClosedException with the given + message. The message must be provided in both non-translatable (readable + as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          translatableMessage - A translatable, human-readable description of the exception that + occurred.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleResourceClosedException

          +
          public TranslatableGuacamoleResourceClosedException​(String message,
          +                                                    String key,
          +                                                    Throwable cause)
          +
          Creates a new TranslatableGuacamoleResourceClosedException with the given + message and cause. The message must be provided in both non-translatable + (readable as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          key - The arbitrary key which can be used to look up the message to be + displayed in the user's native language.
          +
          cause - The cause of this exception.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleResourceClosedException

          +
          public TranslatableGuacamoleResourceClosedException​(String message,
          +                                                    String key)
          +
          Creates a new TranslatableGuacamoleResourceClosedException with the given + message. The message must be provided in both non-translatable (readable + as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          key - The arbitrary key which can be used to look up the message to be + displayed in the user's native language.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getTranslatableMessage

          +
          public TranslatableMessage getTranslatableMessage()
          +
          Description copied from interface: Translatable
          +
          Returns a message which can be translated using a translation service, + consisting of a translation key and optional set of substitution + variables.
          +
          +
          Specified by:
          +
          getTranslatableMessage in interface Translatable
          +
          Returns:
          +
          A message which can be translated using a translation service.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleResourceConflictException.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleResourceConflictException.html new file mode 100644 index 000000000..5e38e6a40 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleResourceConflictException.html @@ -0,0 +1,489 @@ + + + + + +TranslatableGuacamoleResourceConflictException (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class TranslatableGuacamoleResourceConflictException

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • java.lang.Throwable
      • +
      • +
          +
        • java.lang.Exception
        • +
        • +
            +
          • org.apache.guacamole.GuacamoleException
          • +
          • +
              +
            • org.apache.guacamole.GuacamoleClientException
            • +
            • +
                +
              • org.apache.guacamole.GuacamoleResourceConflictException
              • +
              • +
                  +
                • org.apache.guacamole.language.TranslatableGuacamoleResourceConflictException
                • +
                +
              • +
              +
            • +
            +
          • +
          +
        • +
        +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      Serializable, Translatable
      +
      +
      +
      public class TranslatableGuacamoleResourceConflictException
      +extends org.apache.guacamole.GuacamoleResourceConflictException
      +implements Translatable
      +
      A GuacamoleResourceConflictException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
      +
      +
      See Also:
      +
      Serialized Form
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          TranslatableGuacamoleResourceConflictException

          +
          public TranslatableGuacamoleResourceConflictException​(String message,
          +                                                      TranslatableMessage translatableMessage,
          +                                                      Throwable cause)
          +
          Creates a new TranslatableGuacamoleResourceConflictException with the + given message and cause. The message must be provided in both + non-translatable (readable as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          translatableMessage - A translatable, human-readable description of the exception that + occurred.
          +
          cause - The cause of this exception.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleResourceConflictException

          +
          public TranslatableGuacamoleResourceConflictException​(String message,
          +                                                      TranslatableMessage translatableMessage)
          +
          Creates a new TranslatableGuacamoleResourceConflictException with the + given message. The message must be provided in both non-translatable + (readable as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          translatableMessage - A translatable, human-readable description of the exception that + occurred.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleResourceConflictException

          +
          public TranslatableGuacamoleResourceConflictException​(String message,
          +                                                      String key,
          +                                                      Throwable cause)
          +
          Creates a new TranslatableGuacamoleResourceConflictException with the + given message and cause. The message must be provided in both + non-translatable (readable as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          key - The arbitrary key which can be used to look up the message to be + displayed in the user's native language.
          +
          cause - The cause of this exception.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleResourceConflictException

          +
          public TranslatableGuacamoleResourceConflictException​(String message,
          +                                                      String key)
          +
          Creates a new TranslatableGuacamoleResourceConflictException with the + given message. The message must be provided in both non-translatable + (readable as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          key - The arbitrary key which can be used to look up the message to be + displayed in the user's native language.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getTranslatableMessage

          +
          public TranslatableMessage getTranslatableMessage()
          +
          Description copied from interface: Translatable
          +
          Returns a message which can be translated using a translation service, + consisting of a translation key and optional set of substitution + variables.
          +
          +
          Specified by:
          +
          getTranslatableMessage in interface Translatable
          +
          Returns:
          +
          A message which can be translated using a translation service.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleResourceNotFoundException.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleResourceNotFoundException.html new file mode 100644 index 000000000..2657efb78 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleResourceNotFoundException.html @@ -0,0 +1,489 @@ + + + + + +TranslatableGuacamoleResourceNotFoundException (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class TranslatableGuacamoleResourceNotFoundException

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • java.lang.Throwable
      • +
      • +
          +
        • java.lang.Exception
        • +
        • +
            +
          • org.apache.guacamole.GuacamoleException
          • +
          • +
              +
            • org.apache.guacamole.GuacamoleClientException
            • +
            • +
                +
              • org.apache.guacamole.GuacamoleResourceNotFoundException
              • +
              • +
                  +
                • org.apache.guacamole.language.TranslatableGuacamoleResourceNotFoundException
                • +
                +
              • +
              +
            • +
            +
          • +
          +
        • +
        +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      Serializable, Translatable
      +
      +
      +
      public class TranslatableGuacamoleResourceNotFoundException
      +extends org.apache.guacamole.GuacamoleResourceNotFoundException
      +implements Translatable
      +
      A GuacamoleResourceNotFoundException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
      +
      +
      See Also:
      +
      Serialized Form
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          TranslatableGuacamoleResourceNotFoundException

          +
          public TranslatableGuacamoleResourceNotFoundException​(String message,
          +                                                      TranslatableMessage translatableMessage,
          +                                                      Throwable cause)
          +
          Creates a new TranslatableGuacamoleResourceNotFoundException with the + given message and cause. The message must be provided in both + non-translatable (readable as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          translatableMessage - A translatable, human-readable description of the exception that + occurred.
          +
          cause - The cause of this exception.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleResourceNotFoundException

          +
          public TranslatableGuacamoleResourceNotFoundException​(String message,
          +                                                      TranslatableMessage translatableMessage)
          +
          Creates a new TranslatableGuacamoleResourceNotFoundException with the + given message. The message must be provided in both non-translatable + (readable as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          translatableMessage - A translatable, human-readable description of the exception that + occurred.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleResourceNotFoundException

          +
          public TranslatableGuacamoleResourceNotFoundException​(String message,
          +                                                      String key,
          +                                                      Throwable cause)
          +
          Creates a new TranslatableGuacamoleResourceNotFoundException with the + given message and cause. The message must be provided in both + non-translatable (readable as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          key - The arbitrary key which can be used to look up the message to be + displayed in the user's native language.
          +
          cause - The cause of this exception.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleResourceNotFoundException

          +
          public TranslatableGuacamoleResourceNotFoundException​(String message,
          +                                                      String key)
          +
          Creates a new TranslatableGuacamoleResourceNotFoundException with the + given message. The message must be provided in both non-translatable + (readable as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          key - The arbitrary key which can be used to look up the message to be + displayed in the user's native language.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getTranslatableMessage

          +
          public TranslatableMessage getTranslatableMessage()
          +
          Description copied from interface: Translatable
          +
          Returns a message which can be translated using a translation service, + consisting of a translation key and optional set of substitution + variables.
          +
          +
          Specified by:
          +
          getTranslatableMessage in interface Translatable
          +
          Returns:
          +
          A message which can be translated using a translation service.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleSecurityException.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleSecurityException.html new file mode 100644 index 000000000..927ee53c7 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleSecurityException.html @@ -0,0 +1,489 @@ + + + + + +TranslatableGuacamoleSecurityException (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class TranslatableGuacamoleSecurityException

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • java.lang.Throwable
      • +
      • +
          +
        • java.lang.Exception
        • +
        • +
            +
          • org.apache.guacamole.GuacamoleException
          • +
          • +
              +
            • org.apache.guacamole.GuacamoleClientException
            • +
            • +
                +
              • org.apache.guacamole.GuacamoleSecurityException
              • +
              • +
                  +
                • org.apache.guacamole.language.TranslatableGuacamoleSecurityException
                • +
                +
              • +
              +
            • +
            +
          • +
          +
        • +
        +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      Serializable, Translatable
      +
      +
      +
      public class TranslatableGuacamoleSecurityException
      +extends org.apache.guacamole.GuacamoleSecurityException
      +implements Translatable
      +
      A GuacamoleSecurityException whose associated message is translatable + and can be passed through an arbitrary translation service, producing a + human-readable message in the user's native language.
      +
      +
      See Also:
      +
      Serialized Form
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          TranslatableGuacamoleSecurityException

          +
          public TranslatableGuacamoleSecurityException​(String message,
          +                                              TranslatableMessage translatableMessage,
          +                                              Throwable cause)
          +
          Creates a new TranslatableGuacamoleSecurityException with the given + message and cause. The message must be provided in both non-translatable + (readable as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          translatableMessage - A translatable, human-readable description of the exception that + occurred.
          +
          cause - The cause of this exception.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleSecurityException

          +
          public TranslatableGuacamoleSecurityException​(String message,
          +                                              TranslatableMessage translatableMessage)
          +
          Creates a new TranslatableGuacamoleSecurityException with the given + message. The message must be provided in both non-translatable (readable + as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          translatableMessage - A translatable, human-readable description of the exception that + occurred.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleSecurityException

          +
          public TranslatableGuacamoleSecurityException​(String message,
          +                                              String key,
          +                                              Throwable cause)
          +
          Creates a new TranslatableGuacamoleSecurityException with the given + message and cause. The message must be provided in both non-translatable + (readable as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          key - The arbitrary key which can be used to look up the message to be + displayed in the user's native language.
          +
          cause - The cause of this exception.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleSecurityException

          +
          public TranslatableGuacamoleSecurityException​(String message,
          +                                              String key)
          +
          Creates a new TranslatableGuacamoleSecurityException with the given + message. The message must be provided in both non-translatable (readable + as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          key - The arbitrary key which can be used to look up the message to be + displayed in the user's native language.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getTranslatableMessage

          +
          public TranslatableMessage getTranslatableMessage()
          +
          Description copied from interface: Translatable
          +
          Returns a message which can be translated using a translation service, + consisting of a translation key and optional set of substitution + variables.
          +
          +
          Specified by:
          +
          getTranslatableMessage in interface Translatable
          +
          Returns:
          +
          A message which can be translated using a translation service.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleServerBusyException.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleServerBusyException.html new file mode 100644 index 000000000..82839858d --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleServerBusyException.html @@ -0,0 +1,489 @@ + + + + + +TranslatableGuacamoleServerBusyException (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class TranslatableGuacamoleServerBusyException

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • java.lang.Throwable
      • +
      • +
          +
        • java.lang.Exception
        • +
        • +
            +
          • org.apache.guacamole.GuacamoleException
          • +
          • +
              +
            • org.apache.guacamole.GuacamoleServerException
            • +
            • +
                +
              • org.apache.guacamole.GuacamoleServerBusyException
              • +
              • +
                  +
                • org.apache.guacamole.language.TranslatableGuacamoleServerBusyException
                • +
                +
              • +
              +
            • +
            +
          • +
          +
        • +
        +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      Serializable, Translatable
      +
      +
      +
      public class TranslatableGuacamoleServerBusyException
      +extends org.apache.guacamole.GuacamoleServerBusyException
      +implements Translatable
      +
      A GuacamoleServerBusyException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
      +
      +
      See Also:
      +
      Serialized Form
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          TranslatableGuacamoleServerBusyException

          +
          public TranslatableGuacamoleServerBusyException​(String message,
          +                                                TranslatableMessage translatableMessage,
          +                                                Throwable cause)
          +
          Creates a new TranslatableGuacamoleServerBusyException with the given + message and cause. The message must be provided in both non-translatable + (readable as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          translatableMessage - A translatable, human-readable description of the exception that + occurred.
          +
          cause - The cause of this exception.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleServerBusyException

          +
          public TranslatableGuacamoleServerBusyException​(String message,
          +                                                TranslatableMessage translatableMessage)
          +
          Creates a new TranslatableGuacamoleServerBusyException with the given + message. The message must be provided in both non-translatable (readable + as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          translatableMessage - A translatable, human-readable description of the exception that + occurred.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleServerBusyException

          +
          public TranslatableGuacamoleServerBusyException​(String message,
          +                                                String key,
          +                                                Throwable cause)
          +
          Creates a new TranslatableGuacamoleServerBusyException with the given + message and cause. The message must be provided in both non-translatable + (readable as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          key - The arbitrary key which can be used to look up the message to be + displayed in the user's native language.
          +
          cause - The cause of this exception.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleServerBusyException

          +
          public TranslatableGuacamoleServerBusyException​(String message,
          +                                                String key)
          +
          Creates a new TranslatableGuacamoleServerBusyException with the given + message. The message must be provided in both non-translatable (readable + as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          key - The arbitrary key which can be used to look up the message to be + displayed in the user's native language.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getTranslatableMessage

          +
          public TranslatableMessage getTranslatableMessage()
          +
          Description copied from interface: Translatable
          +
          Returns a message which can be translated using a translation service, + consisting of a translation key and optional set of substitution + variables.
          +
          +
          Specified by:
          +
          getTranslatableMessage in interface Translatable
          +
          Returns:
          +
          A message which can be translated using a translation service.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleServerException.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleServerException.html new file mode 100644 index 000000000..9303317ce --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleServerException.html @@ -0,0 +1,484 @@ + + + + + +TranslatableGuacamoleServerException (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class TranslatableGuacamoleServerException

    +
    +
    + +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      Serializable, Translatable
      +
      +
      +
      public class TranslatableGuacamoleServerException
      +extends org.apache.guacamole.GuacamoleServerException
      +implements Translatable
      +
      A GuacamoleServerException whose associated message is translatable + and can be passed through an arbitrary translation service, producing a + human-readable message in the user's native language.
      +
      +
      See Also:
      +
      Serialized Form
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          TranslatableGuacamoleServerException

          +
          public TranslatableGuacamoleServerException​(String message,
          +                                            TranslatableMessage translatableMessage,
          +                                            Throwable cause)
          +
          Creates a new TranslatableGuacamoleServerException with the given + message and cause. The message must be provided in both non-translatable + (readable as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          translatableMessage - A translatable, human-readable description of the exception that + occurred.
          +
          cause - The cause of this exception.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleServerException

          +
          public TranslatableGuacamoleServerException​(String message,
          +                                            TranslatableMessage translatableMessage)
          +
          Creates a new TranslatableGuacamoleServerException with the given + message. The message must be provided in both non-translatable (readable + as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          translatableMessage - A translatable, human-readable description of the exception that + occurred.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleServerException

          +
          public TranslatableGuacamoleServerException​(String message,
          +                                            String key,
          +                                            Throwable cause)
          +
          Creates a new TranslatableGuacamoleServerException with the given + message and cause. The message must be provided in both non-translatable + (readable as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          key - The arbitrary key which can be used to look up the message to be + displayed in the user's native language.
          +
          cause - The cause of this exception.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleServerException

          +
          public TranslatableGuacamoleServerException​(String message,
          +                                            String key)
          +
          Creates a new TranslatableGuacamoleServerException with the given + message. The message must be provided in both non-translatable (readable + as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          key - The arbitrary key which can be used to look up the message to be + displayed in the user's native language.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getTranslatableMessage

          +
          public TranslatableMessage getTranslatableMessage()
          +
          Description copied from interface: Translatable
          +
          Returns a message which can be translated using a translation service, + consisting of a translation key and optional set of substitution + variables.
          +
          +
          Specified by:
          +
          getTranslatableMessage in interface Translatable
          +
          Returns:
          +
          A message which can be translated using a translation service.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleSessionClosedException.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleSessionClosedException.html new file mode 100644 index 000000000..268f3d7c5 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleSessionClosedException.html @@ -0,0 +1,489 @@ + + + + + +TranslatableGuacamoleSessionClosedException (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class TranslatableGuacamoleSessionClosedException

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • java.lang.Throwable
      • +
      • +
          +
        • java.lang.Exception
        • +
        • +
            +
          • org.apache.guacamole.GuacamoleException
          • +
          • +
              +
            • org.apache.guacamole.GuacamoleUpstreamException
            • +
            • +
                +
              • org.apache.guacamole.GuacamoleSessionClosedException
              • +
              • +
                  +
                • org.apache.guacamole.language.TranslatableGuacamoleSessionClosedException
                • +
                +
              • +
              +
            • +
            +
          • +
          +
        • +
        +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      Serializable, Translatable
      +
      +
      +
      public class TranslatableGuacamoleSessionClosedException
      +extends org.apache.guacamole.GuacamoleSessionClosedException
      +implements Translatable
      +
      A GuacamoleSessionClosedException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
      +
      +
      See Also:
      +
      Serialized Form
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          TranslatableGuacamoleSessionClosedException

          +
          public TranslatableGuacamoleSessionClosedException​(String message,
          +                                                   TranslatableMessage translatableMessage,
          +                                                   Throwable cause)
          +
          Creates a new TranslatableGuacamoleSessionClosedException with the given + message and cause. The message must be provided in both non-translatable + (readable as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          translatableMessage - A translatable, human-readable description of the exception that + occurred.
          +
          cause - The cause of this exception.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleSessionClosedException

          +
          public TranslatableGuacamoleSessionClosedException​(String message,
          +                                                   TranslatableMessage translatableMessage)
          +
          Creates a new TranslatableGuacamoleSessionClosedException with the given + message. The message must be provided in both non-translatable (readable + as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          translatableMessage - A translatable, human-readable description of the exception that + occurred.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleSessionClosedException

          +
          public TranslatableGuacamoleSessionClosedException​(String message,
          +                                                   String key,
          +                                                   Throwable cause)
          +
          Creates a new TranslatableGuacamoleSessionClosedException with the given + message and cause. The message must be provided in both non-translatable + (readable as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          key - The arbitrary key which can be used to look up the message to be + displayed in the user's native language.
          +
          cause - The cause of this exception.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleSessionClosedException

          +
          public TranslatableGuacamoleSessionClosedException​(String message,
          +                                                   String key)
          +
          Creates a new TranslatableGuacamoleSessionClosedException with the given + message. The message must be provided in both non-translatable (readable + as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          key - The arbitrary key which can be used to look up the message to be + displayed in the user's native language.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getTranslatableMessage

          +
          public TranslatableMessage getTranslatableMessage()
          +
          Description copied from interface: Translatable
          +
          Returns a message which can be translated using a translation service, + consisting of a translation key and optional set of substitution + variables.
          +
          +
          Specified by:
          +
          getTranslatableMessage in interface Translatable
          +
          Returns:
          +
          A message which can be translated using a translation service.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleSessionConflictException.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleSessionConflictException.html new file mode 100644 index 000000000..b745a4f17 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleSessionConflictException.html @@ -0,0 +1,489 @@ + + + + + +TranslatableGuacamoleSessionConflictException (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class TranslatableGuacamoleSessionConflictException

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • java.lang.Throwable
      • +
      • +
          +
        • java.lang.Exception
        • +
        • +
            +
          • org.apache.guacamole.GuacamoleException
          • +
          • +
              +
            • org.apache.guacamole.GuacamoleUpstreamException
            • +
            • +
                +
              • org.apache.guacamole.GuacamoleSessionConflictException
              • +
              • +
                  +
                • org.apache.guacamole.language.TranslatableGuacamoleSessionConflictException
                • +
                +
              • +
              +
            • +
            +
          • +
          +
        • +
        +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      Serializable, Translatable
      +
      +
      +
      public class TranslatableGuacamoleSessionConflictException
      +extends org.apache.guacamole.GuacamoleSessionConflictException
      +implements Translatable
      +
      A GuacamoleSessionConflictException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
      +
      +
      See Also:
      +
      Serialized Form
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          TranslatableGuacamoleSessionConflictException

          +
          public TranslatableGuacamoleSessionConflictException​(String message,
          +                                                     TranslatableMessage translatableMessage,
          +                                                     Throwable cause)
          +
          Creates a new TranslatableGuacamoleSessionConflictException with the + given message and cause. The message must be provided in both + non-translatable (readable as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          translatableMessage - A translatable, human-readable description of the exception that + occurred.
          +
          cause - The cause of this exception.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleSessionConflictException

          +
          public TranslatableGuacamoleSessionConflictException​(String message,
          +                                                     TranslatableMessage translatableMessage)
          +
          Creates a new TranslatableGuacamoleSessionConflictException with the + given message. The message must be provided in both non-translatable + (readable as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          translatableMessage - A translatable, human-readable description of the exception that + occurred.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleSessionConflictException

          +
          public TranslatableGuacamoleSessionConflictException​(String message,
          +                                                     String key,
          +                                                     Throwable cause)
          +
          Creates a new TranslatableGuacamoleSessionConflictException with the + given message and cause. The message must be provided in both + non-translatable (readable as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          key - The arbitrary key which can be used to look up the message to be + displayed in the user's native language.
          +
          cause - The cause of this exception.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleSessionConflictException

          +
          public TranslatableGuacamoleSessionConflictException​(String message,
          +                                                     String key)
          +
          Creates a new TranslatableGuacamoleSessionConflictException with the + given message. The message must be provided in both non-translatable + (readable as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          key - The arbitrary key which can be used to look up the message to be + displayed in the user's native language.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getTranslatableMessage

          +
          public TranslatableMessage getTranslatableMessage()
          +
          Description copied from interface: Translatable
          +
          Returns a message which can be translated using a translation service, + consisting of a translation key and optional set of substitution + variables.
          +
          +
          Specified by:
          +
          getTranslatableMessage in interface Translatable
          +
          Returns:
          +
          A message which can be translated using a translation service.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleSessionTimeoutException.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleSessionTimeoutException.html new file mode 100644 index 000000000..cc3428ec9 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleSessionTimeoutException.html @@ -0,0 +1,489 @@ + + + + + +TranslatableGuacamoleSessionTimeoutException (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class TranslatableGuacamoleSessionTimeoutException

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • java.lang.Throwable
      • +
      • +
          +
        • java.lang.Exception
        • +
        • +
            +
          • org.apache.guacamole.GuacamoleException
          • +
          • +
              +
            • org.apache.guacamole.GuacamoleUpstreamException
            • +
            • +
                +
              • org.apache.guacamole.GuacamoleSessionTimeoutException
              • +
              • +
                  +
                • org.apache.guacamole.language.TranslatableGuacamoleSessionTimeoutException
                • +
                +
              • +
              +
            • +
            +
          • +
          +
        • +
        +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      Serializable, Translatable
      +
      +
      +
      public class TranslatableGuacamoleSessionTimeoutException
      +extends org.apache.guacamole.GuacamoleSessionTimeoutException
      +implements Translatable
      +
      A GuacamoleSessionTimeoutException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
      +
      +
      See Also:
      +
      Serialized Form
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          TranslatableGuacamoleSessionTimeoutException

          +
          public TranslatableGuacamoleSessionTimeoutException​(String message,
          +                                                    TranslatableMessage translatableMessage,
          +                                                    Throwable cause)
          +
          Creates a new TranslatableGuacamoleSessionTimeoutException with the given + message and cause. The message must be provided in both non-translatable + (readable as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          translatableMessage - A translatable, human-readable description of the exception that + occurred.
          +
          cause - The cause of this exception.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleSessionTimeoutException

          +
          public TranslatableGuacamoleSessionTimeoutException​(String message,
          +                                                    TranslatableMessage translatableMessage)
          +
          Creates a new TranslatableGuacamoleSessionTimeoutException with the given + message. The message must be provided in both non-translatable (readable + as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          translatableMessage - A translatable, human-readable description of the exception that + occurred.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleSessionTimeoutException

          +
          public TranslatableGuacamoleSessionTimeoutException​(String message,
          +                                                    String key,
          +                                                    Throwable cause)
          +
          Creates a new TranslatableGuacamoleSessionTimeoutException with the given + message and cause. The message must be provided in both non-translatable + (readable as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          key - The arbitrary key which can be used to look up the message to be + displayed in the user's native language.
          +
          cause - The cause of this exception.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleSessionTimeoutException

          +
          public TranslatableGuacamoleSessionTimeoutException​(String message,
          +                                                    String key)
          +
          Creates a new TranslatableGuacamoleSessionTimeoutException with the given + message. The message must be provided in both non-translatable (readable + as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          key - The arbitrary key which can be used to look up the message to be + displayed in the user's native language.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getTranslatableMessage

          +
          public TranslatableMessage getTranslatableMessage()
          +
          Description copied from interface: Translatable
          +
          Returns a message which can be translated using a translation service, + consisting of a translation key and optional set of substitution + variables.
          +
          +
          Specified by:
          +
          getTranslatableMessage in interface Translatable
          +
          Returns:
          +
          A message which can be translated using a translation service.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleUnauthorizedException.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleUnauthorizedException.html new file mode 100644 index 000000000..8a65f85cb --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleUnauthorizedException.html @@ -0,0 +1,494 @@ + + + + + +TranslatableGuacamoleUnauthorizedException (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class TranslatableGuacamoleUnauthorizedException

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • java.lang.Throwable
      • +
      • +
          +
        • java.lang.Exception
        • +
        • +
            +
          • org.apache.guacamole.GuacamoleException
          • +
          • +
              +
            • org.apache.guacamole.GuacamoleClientException
            • +
            • +
                +
              • org.apache.guacamole.GuacamoleSecurityException
              • +
              • +
                  +
                • org.apache.guacamole.GuacamoleUnauthorizedException
                • +
                • +
                    +
                  • org.apache.guacamole.language.TranslatableGuacamoleUnauthorizedException
                  • +
                  +
                • +
                +
              • +
              +
            • +
            +
          • +
          +
        • +
        +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      Serializable, Translatable
      +
      +
      +
      public class TranslatableGuacamoleUnauthorizedException
      +extends org.apache.guacamole.GuacamoleUnauthorizedException
      +implements Translatable
      +
      A GuacamoleUnauthorizedException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
      +
      +
      See Also:
      +
      Serialized Form
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          TranslatableGuacamoleUnauthorizedException

          +
          public TranslatableGuacamoleUnauthorizedException​(String message,
          +                                                  TranslatableMessage translatableMessage,
          +                                                  Throwable cause)
          +
          Creates a new TranslatableGuacamoleUnauthorizedException with the given + message and cause. The message must be provided in both non-translatable + (readable as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          translatableMessage - A translatable, human-readable description of the exception that + occurred.
          +
          cause - The cause of this exception.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleUnauthorizedException

          +
          public TranslatableGuacamoleUnauthorizedException​(String message,
          +                                                  TranslatableMessage translatableMessage)
          +
          Creates a new TranslatableGuacamoleUnauthorizedException with the given + message. The message must be provided in both non-translatable (readable + as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          translatableMessage - A translatable, human-readable description of the exception that + occurred.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleUnauthorizedException

          +
          public TranslatableGuacamoleUnauthorizedException​(String message,
          +                                                  String key,
          +                                                  Throwable cause)
          +
          Creates a new TranslatableGuacamoleUnauthorizedException with the given + message and cause. The message must be provided in both non-translatable + (readable as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          key - The arbitrary key which can be used to look up the message to be + displayed in the user's native language.
          +
          cause - The cause of this exception.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleUnauthorizedException

          +
          public TranslatableGuacamoleUnauthorizedException​(String message,
          +                                                  String key)
          +
          Creates a new TranslatableGuacamoleUnauthorizedException with the given + message. The message must be provided in both non-translatable (readable + as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          key - The arbitrary key which can be used to look up the message to be + displayed in the user's native language.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getTranslatableMessage

          +
          public TranslatableMessage getTranslatableMessage()
          +
          Description copied from interface: Translatable
          +
          Returns a message which can be translated using a translation service, + consisting of a translation key and optional set of substitution + variables.
          +
          +
          Specified by:
          +
          getTranslatableMessage in interface Translatable
          +
          Returns:
          +
          A message which can be translated using a translation service.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleUnsupportedException.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleUnsupportedException.html new file mode 100644 index 000000000..1b7f3a446 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleUnsupportedException.html @@ -0,0 +1,489 @@ + + + + + +TranslatableGuacamoleUnsupportedException (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class TranslatableGuacamoleUnsupportedException

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • java.lang.Throwable
      • +
      • +
          +
        • java.lang.Exception
        • +
        • +
            +
          • org.apache.guacamole.GuacamoleException
          • +
          • +
              +
            • org.apache.guacamole.GuacamoleServerException
            • +
            • +
                +
              • org.apache.guacamole.GuacamoleUnsupportedException
              • +
              • +
                  +
                • org.apache.guacamole.language.TranslatableGuacamoleUnsupportedException
                • +
                +
              • +
              +
            • +
            +
          • +
          +
        • +
        +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      Serializable, Translatable
      +
      +
      +
      public class TranslatableGuacamoleUnsupportedException
      +extends org.apache.guacamole.GuacamoleUnsupportedException
      +implements Translatable
      +
      A GuacamoleUnsupportedException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
      +
      +
      See Also:
      +
      Serialized Form
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          TranslatableGuacamoleUnsupportedException

          +
          public TranslatableGuacamoleUnsupportedException​(String message,
          +                                                 TranslatableMessage translatableMessage,
          +                                                 Throwable cause)
          +
          Creates a new TranslatableGuacamoleUnsupportedException with the given + message and cause. The message must be provided in both non-translatable + (readable as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          translatableMessage - A translatable, human-readable description of the exception that + occurred.
          +
          cause - The cause of this exception.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleUnsupportedException

          +
          public TranslatableGuacamoleUnsupportedException​(String message,
          +                                                 TranslatableMessage translatableMessage)
          +
          Creates a new TranslatableGuacamoleUnsupportedException with the given + message. The message must be provided in both non-translatable (readable + as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          translatableMessage - A translatable, human-readable description of the exception that + occurred.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleUnsupportedException

          +
          public TranslatableGuacamoleUnsupportedException​(String message,
          +                                                 String key,
          +                                                 Throwable cause)
          +
          Creates a new TranslatableGuacamoleUnsupportedException with the given + message and cause. The message must be provided in both non-translatable + (readable as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          key - The arbitrary key which can be used to look up the message to be + displayed in the user's native language.
          +
          cause - The cause of this exception.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleUnsupportedException

          +
          public TranslatableGuacamoleUnsupportedException​(String message,
          +                                                 String key)
          +
          Creates a new TranslatableGuacamoleUnsupportedException with the given + message. The message must be provided in both non-translatable (readable + as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          key - The arbitrary key which can be used to look up the message to be + displayed in the user's native language.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getTranslatableMessage

          +
          public TranslatableMessage getTranslatableMessage()
          +
          Description copied from interface: Translatable
          +
          Returns a message which can be translated using a translation service, + consisting of a translation key and optional set of substitution + variables.
          +
          +
          Specified by:
          +
          getTranslatableMessage in interface Translatable
          +
          Returns:
          +
          A message which can be translated using a translation service.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleUpstreamException.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleUpstreamException.html new file mode 100644 index 000000000..2c61734c8 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleUpstreamException.html @@ -0,0 +1,484 @@ + + + + + +TranslatableGuacamoleUpstreamException (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class TranslatableGuacamoleUpstreamException

    +
    +
    + +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      Serializable, Translatable
      +
      +
      +
      public class TranslatableGuacamoleUpstreamException
      +extends org.apache.guacamole.GuacamoleUpstreamException
      +implements Translatable
      +
      A GuacamoleUpstreamException whose associated message is translatable + and can be passed through an arbitrary translation service, producing a + human-readable message in the user's native language.
      +
      +
      See Also:
      +
      Serialized Form
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          TranslatableGuacamoleUpstreamException

          +
          public TranslatableGuacamoleUpstreamException​(String message,
          +                                              TranslatableMessage translatableMessage,
          +                                              Throwable cause)
          +
          Creates a new TranslatableGuacamoleUpstreamException with the given + message and cause. The message must be provided in both non-translatable + (readable as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          translatableMessage - A translatable, human-readable description of the exception that + occurred.
          +
          cause - The cause of this exception.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleUpstreamException

          +
          public TranslatableGuacamoleUpstreamException​(String message,
          +                                              TranslatableMessage translatableMessage)
          +
          Creates a new TranslatableGuacamoleUpstreamException with the given + message. The message must be provided in both non-translatable (readable + as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          translatableMessage - A translatable, human-readable description of the exception that + occurred.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleUpstreamException

          +
          public TranslatableGuacamoleUpstreamException​(String message,
          +                                              String key,
          +                                              Throwable cause)
          +
          Creates a new TranslatableGuacamoleUpstreamException with the given + message and cause. The message must be provided in both non-translatable + (readable as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          key - The arbitrary key which can be used to look up the message to be + displayed in the user's native language.
          +
          cause - The cause of this exception.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleUpstreamException

          +
          public TranslatableGuacamoleUpstreamException​(String message,
          +                                              String key)
          +
          Creates a new TranslatableGuacamoleUpstreamException with the given + message. The message must be provided in both non-translatable (readable + as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          key - The arbitrary key which can be used to look up the message to be + displayed in the user's native language.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getTranslatableMessage

          +
          public TranslatableMessage getTranslatableMessage()
          +
          Description copied from interface: Translatable
          +
          Returns a message which can be translated using a translation service, + consisting of a translation key and optional set of substitution + variables.
          +
          +
          Specified by:
          +
          getTranslatableMessage in interface Translatable
          +
          Returns:
          +
          A message which can be translated using a translation service.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleUpstreamNotFoundException.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleUpstreamNotFoundException.html new file mode 100644 index 000000000..8472dfdfc --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleUpstreamNotFoundException.html @@ -0,0 +1,489 @@ + + + + + +TranslatableGuacamoleUpstreamNotFoundException (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class TranslatableGuacamoleUpstreamNotFoundException

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • java.lang.Throwable
      • +
      • +
          +
        • java.lang.Exception
        • +
        • +
            +
          • org.apache.guacamole.GuacamoleException
          • +
          • +
              +
            • org.apache.guacamole.GuacamoleUpstreamException
            • +
            • +
                +
              • org.apache.guacamole.GuacamoleUpstreamNotFoundException
              • +
              • +
                  +
                • org.apache.guacamole.language.TranslatableGuacamoleUpstreamNotFoundException
                • +
                +
              • +
              +
            • +
            +
          • +
          +
        • +
        +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      Serializable, Translatable
      +
      +
      +
      public class TranslatableGuacamoleUpstreamNotFoundException
      +extends org.apache.guacamole.GuacamoleUpstreamNotFoundException
      +implements Translatable
      +
      A GuacamoleUpstreamNotFoundException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
      +
      +
      See Also:
      +
      Serialized Form
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          TranslatableGuacamoleUpstreamNotFoundException

          +
          public TranslatableGuacamoleUpstreamNotFoundException​(String message,
          +                                                      TranslatableMessage translatableMessage,
          +                                                      Throwable cause)
          +
          Creates a new TranslatableGuacamoleUpstreamNotFoundException with the + given message and cause. The message must be provided in both + non-translatable (readable as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          translatableMessage - A translatable, human-readable description of the exception that + occurred.
          +
          cause - The cause of this exception.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleUpstreamNotFoundException

          +
          public TranslatableGuacamoleUpstreamNotFoundException​(String message,
          +                                                      TranslatableMessage translatableMessage)
          +
          Creates a new TranslatableGuacamoleUpstreamNotFoundException with the + given message. The message must be provided in both non-translatable + (readable as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          translatableMessage - A translatable, human-readable description of the exception that + occurred.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleUpstreamNotFoundException

          +
          public TranslatableGuacamoleUpstreamNotFoundException​(String message,
          +                                                      String key,
          +                                                      Throwable cause)
          +
          Creates a new TranslatableGuacamoleUpstreamNotFoundException with the + given message and cause. The message must be provided in both + non-translatable (readable as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          key - The arbitrary key which can be used to look up the message to be + displayed in the user's native language.
          +
          cause - The cause of this exception.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleUpstreamNotFoundException

          +
          public TranslatableGuacamoleUpstreamNotFoundException​(String message,
          +                                                      String key)
          +
          Creates a new TranslatableGuacamoleUpstreamNotFoundException with the + given message. The message must be provided in both non-translatable + (readable as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          key - The arbitrary key which can be used to look up the message to be + displayed in the user's native language.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getTranslatableMessage

          +
          public TranslatableMessage getTranslatableMessage()
          +
          Description copied from interface: Translatable
          +
          Returns a message which can be translated using a translation service, + consisting of a translation key and optional set of substitution + variables.
          +
          +
          Specified by:
          +
          getTranslatableMessage in interface Translatable
          +
          Returns:
          +
          A message which can be translated using a translation service.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleUpstreamTimeoutException.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleUpstreamTimeoutException.html new file mode 100644 index 000000000..3e3f51212 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleUpstreamTimeoutException.html @@ -0,0 +1,489 @@ + + + + + +TranslatableGuacamoleUpstreamTimeoutException (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class TranslatableGuacamoleUpstreamTimeoutException

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • java.lang.Throwable
      • +
      • +
          +
        • java.lang.Exception
        • +
        • +
            +
          • org.apache.guacamole.GuacamoleException
          • +
          • +
              +
            • org.apache.guacamole.GuacamoleUpstreamException
            • +
            • +
                +
              • org.apache.guacamole.GuacamoleUpstreamTimeoutException
              • +
              • +
                  +
                • org.apache.guacamole.language.TranslatableGuacamoleUpstreamTimeoutException
                • +
                +
              • +
              +
            • +
            +
          • +
          +
        • +
        +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      Serializable, Translatable
      +
      +
      +
      public class TranslatableGuacamoleUpstreamTimeoutException
      +extends org.apache.guacamole.GuacamoleUpstreamTimeoutException
      +implements Translatable
      +
      A GuacamoleUpstreamTimeoutException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
      +
      +
      See Also:
      +
      Serialized Form
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          TranslatableGuacamoleUpstreamTimeoutException

          +
          public TranslatableGuacamoleUpstreamTimeoutException​(String message,
          +                                                     TranslatableMessage translatableMessage,
          +                                                     Throwable cause)
          +
          Creates a new TranslatableGuacamoleUpstreamTimeoutException with the + given message and cause. The message must be provided in both + non-translatable (readable as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          translatableMessage - A translatable, human-readable description of the exception that + occurred.
          +
          cause - The cause of this exception.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleUpstreamTimeoutException

          +
          public TranslatableGuacamoleUpstreamTimeoutException​(String message,
          +                                                     TranslatableMessage translatableMessage)
          +
          Creates a new TranslatableGuacamoleUpstreamTimeoutException with the + given message. The message must be provided in both non-translatable + (readable as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          translatableMessage - A translatable, human-readable description of the exception that + occurred.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleUpstreamTimeoutException

          +
          public TranslatableGuacamoleUpstreamTimeoutException​(String message,
          +                                                     String key,
          +                                                     Throwable cause)
          +
          Creates a new TranslatableGuacamoleUpstreamTimeoutException with the + given message and cause. The message must be provided in both + non-translatable (readable as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          key - The arbitrary key which can be used to look up the message to be + displayed in the user's native language.
          +
          cause - The cause of this exception.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleUpstreamTimeoutException

          +
          public TranslatableGuacamoleUpstreamTimeoutException​(String message,
          +                                                     String key)
          +
          Creates a new TranslatableGuacamoleUpstreamTimeoutException with the + given message. The message must be provided in both non-translatable + (readable as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          key - The arbitrary key which can be used to look up the message to be + displayed in the user's native language.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getTranslatableMessage

          +
          public TranslatableMessage getTranslatableMessage()
          +
          Description copied from interface: Translatable
          +
          Returns a message which can be translated using a translation service, + consisting of a translation key and optional set of substitution + variables.
          +
          +
          Specified by:
          +
          getTranslatableMessage in interface Translatable
          +
          Returns:
          +
          A message which can be translated using a translation service.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleUpstreamUnavailableException.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleUpstreamUnavailableException.html new file mode 100644 index 000000000..4b51895eb --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableGuacamoleUpstreamUnavailableException.html @@ -0,0 +1,489 @@ + + + + + +TranslatableGuacamoleUpstreamUnavailableException (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class TranslatableGuacamoleUpstreamUnavailableException

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • java.lang.Throwable
      • +
      • +
          +
        • java.lang.Exception
        • +
        • +
            +
          • org.apache.guacamole.GuacamoleException
          • +
          • +
              +
            • org.apache.guacamole.GuacamoleUpstreamException
            • +
            • +
                +
              • org.apache.guacamole.GuacamoleUpstreamUnavailableException
              • +
              • +
                  +
                • org.apache.guacamole.language.TranslatableGuacamoleUpstreamUnavailableException
                • +
                +
              • +
              +
            • +
            +
          • +
          +
        • +
        +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      Serializable, Translatable
      +
      +
      +
      public class TranslatableGuacamoleUpstreamUnavailableException
      +extends org.apache.guacamole.GuacamoleUpstreamUnavailableException
      +implements Translatable
      +
      A GuacamoleUpstreamUnavailableException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
      +
      +
      See Also:
      +
      Serialized Form
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          TranslatableGuacamoleUpstreamUnavailableException

          +
          public TranslatableGuacamoleUpstreamUnavailableException​(String message,
          +                                                         TranslatableMessage translatableMessage,
          +                                                         Throwable cause)
          +
          Creates a new TranslatableGuacamoleUpstreamUnavailableException with the + given message and cause. The message must be provided in both + non-translatable (readable as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          translatableMessage - A translatable, human-readable description of the exception that + occurred.
          +
          cause - The cause of this exception.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleUpstreamUnavailableException

          +
          public TranslatableGuacamoleUpstreamUnavailableException​(String message,
          +                                                         TranslatableMessage translatableMessage)
          +
          Creates a new TranslatableGuacamoleUpstreamUnavailableException with the + given message. The message must be provided in both non-translatable + (readable as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          translatableMessage - A translatable, human-readable description of the exception that + occurred.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleUpstreamUnavailableException

          +
          public TranslatableGuacamoleUpstreamUnavailableException​(String message,
          +                                                         String key,
          +                                                         Throwable cause)
          +
          Creates a new TranslatableGuacamoleUpstreamUnavailableException with the + given message and cause. The message must be provided in both + non-translatable (readable as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          key - The arbitrary key which can be used to look up the message to be + displayed in the user's native language.
          +
          cause - The cause of this exception.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableGuacamoleUpstreamUnavailableException

          +
          public TranslatableGuacamoleUpstreamUnavailableException​(String message,
          +                                                         String key)
          +
          Creates a new TranslatableGuacamoleUpstreamUnavailableException with the + given message. The message must be provided in both non-translatable + (readable as-written) and translatable forms.
          +
          +
          Parameters:
          +
          message - A human-readable description of the exception that occurred. This + message should be readable on its own and as-written, without + requiring a translation service.
          +
          key - The arbitrary key which can be used to look up the message to be + displayed in the user's native language.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getTranslatableMessage

          +
          public TranslatableMessage getTranslatableMessage()
          +
          Description copied from interface: Translatable
          +
          Returns a message which can be translated using a translation service, + consisting of a translation key and optional set of substitution + variables.
          +
          +
          Specified by:
          +
          getTranslatableMessage in interface Translatable
          +
          Returns:
          +
          A message which can be translated using a translation service.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableMessage.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableMessage.html new file mode 100644 index 000000000..b2438b24a --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/TranslatableMessage.html @@ -0,0 +1,382 @@ + + + + + +TranslatableMessage (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class TranslatableMessage

    +
    +
    + +
    +
      +
    • +
      +
      public class TranslatableMessage
      +extends Object
      +
      A message which can be translated using a translation service, providing a + translation key and optional set of values to be substituted into the + translation string associated with that key.
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Summary

        + + + + + + + + + + + + + + +
        Constructors 
        ConstructorDescription
        TranslatableMessage​(String key) +
        Creates a new TranslatableMessage associated with the given translation + key, without any associated variables.
        +
        TranslatableMessage​(String key, + Object variables) +
        Creates a new TranslatableMessage associated with the given translation + key and associated variables.
        +
        +
      • +
      +
      + +
      + +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          TranslatableMessage

          +
          public TranslatableMessage​(String key)
          +
          Creates a new TranslatableMessage associated with the given translation + key, without any associated variables.
          +
          +
          Parameters:
          +
          key - The translation key to associate with the TranslatableMessage.
          +
          +
        • +
        + + + +
          +
        • +

          TranslatableMessage

          +
          public TranslatableMessage​(String key,
          +                           Object variables)
          +
          Creates a new TranslatableMessage associated with the given translation + key and associated variables.
          +
          +
          Parameters:
          +
          key - The translation key to associate with the TranslatableMessage.
          +
          variables - An arbitrary object whose properties should be substituted for the + corresponding placeholders within the string associated with the + given translation key.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getKey

          +
          public String getKey()
          +
          Returns the arbitrary key which can be used to look up the message to be + displayed in the user's native language.
          +
          +
          Returns:
          +
          The arbitrary key associated with the human-readable message.
          +
          +
        • +
        + + + +
          +
        • +

          getVariables

          +
          public Object getVariables()
          +
          Returns an arbitrary object whose properties should be substituted for + the corresponding placeholders within the string associated with the key. + If not applicable, null is returned.
          +
          +
          Returns:
          +
          An arbitrary object whose properties should be substituted for the + corresponding placeholders within the string associated with the key, + or null if not applicable.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/Translatable.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/Translatable.html new file mode 100644 index 000000000..8c6b8fdd7 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/Translatable.html @@ -0,0 +1,436 @@ + + + + + +Uses of Interface org.apache.guacamole.language.Translatable (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    org.apache.guacamole.language.Translatable

    +
    +
    +
      +
    • + + + + + + + + + + + + + + + + +
      Packages that use Translatable 
      PackageDescription
      org.apache.guacamole.form +
      Provides classes which describe the contents and semantics of forms which + may be presented to the user.
      +
      org.apache.guacamole.language 
      +
    • +
    • +
        +
      • +
        + + +

        Uses of Translatable in org.apache.guacamole.form

        + + + + + + + + + + + + + + +
        Classes in org.apache.guacamole.form that implement Translatable 
        Modifier and TypeClassDescription
        class RedirectField +
        A Guacamole field that redirects a user to another page.
        +
        +
        +
      • +
      • +
        + + +

        Uses of Translatable in org.apache.guacamole.language

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Classes in org.apache.guacamole.language that implement Translatable 
        Modifier and TypeClassDescription
        class TranslatableGuacamoleClientBadTypeException +
        A GuacamoleClientBadTypeException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
        +
        class TranslatableGuacamoleClientException +
        A GuacamoleClientException whose associated message is translatable + and can be passed through an arbitrary translation service, producing a + human-readable message in the user's native language.
        +
        class TranslatableGuacamoleClientOverrunException +
        A GuacamoleClientOverrunException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
        +
        class TranslatableGuacamoleClientTimeoutException +
        A GuacamoleClientTimeoutException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
        +
        class TranslatableGuacamoleClientTooManyException +
        A GuacamoleClientTooManyException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
        +
        class TranslatableGuacamoleConnectionClosedException +
        A GuacamoleConnectionClosedException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
        +
        class TranslatableGuacamoleCredentialsException +
        A GuacamoleCredentialsException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
        +
        class TranslatableGuacamoleInsufficientCredentialsException +
        A GuacamoleInsufficientCredentialsException whose associated message + is translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
        +
        class TranslatableGuacamoleInvalidCredentialsException +
        A GuacamoleInvalidCredentialsException whose associated message + is translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
        +
        class TranslatableGuacamoleResourceClosedException +
        A GuacamoleResourceClosedException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
        +
        class TranslatableGuacamoleResourceConflictException +
        A GuacamoleResourceConflictException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
        +
        class TranslatableGuacamoleResourceNotFoundException +
        A GuacamoleResourceNotFoundException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
        +
        class TranslatableGuacamoleSecurityException +
        A GuacamoleSecurityException whose associated message is translatable + and can be passed through an arbitrary translation service, producing a + human-readable message in the user's native language.
        +
        class TranslatableGuacamoleServerBusyException +
        A GuacamoleServerBusyException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
        +
        class TranslatableGuacamoleServerException +
        A GuacamoleServerException whose associated message is translatable + and can be passed through an arbitrary translation service, producing a + human-readable message in the user's native language.
        +
        class TranslatableGuacamoleSessionClosedException +
        A GuacamoleSessionClosedException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
        +
        class TranslatableGuacamoleSessionConflictException +
        A GuacamoleSessionConflictException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
        +
        class TranslatableGuacamoleSessionTimeoutException +
        A GuacamoleSessionTimeoutException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
        +
        class TranslatableGuacamoleUnauthorizedException +
        A GuacamoleUnauthorizedException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
        +
        class TranslatableGuacamoleUnsupportedException +
        A GuacamoleUnsupportedException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
        +
        class TranslatableGuacamoleUpstreamException +
        A GuacamoleUpstreamException whose associated message is translatable + and can be passed through an arbitrary translation service, producing a + human-readable message in the user's native language.
        +
        class TranslatableGuacamoleUpstreamNotFoundException +
        A GuacamoleUpstreamNotFoundException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
        +
        class TranslatableGuacamoleUpstreamTimeoutException +
        A GuacamoleUpstreamTimeoutException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
        +
        class TranslatableGuacamoleUpstreamUnavailableException +
        A GuacamoleUpstreamUnavailableException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
        +
        +
        +
      • +
      +
    • +
    +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleClientBadTypeException.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleClientBadTypeException.html new file mode 100644 index 000000000..e413d8f85 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleClientBadTypeException.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.language.TranslatableGuacamoleClientBadTypeException (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.language.TranslatableGuacamoleClientBadTypeException

    +
    +
    No usage of org.apache.guacamole.language.TranslatableGuacamoleClientBadTypeException
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleClientException.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleClientException.html new file mode 100644 index 000000000..5c48de022 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleClientException.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.language.TranslatableGuacamoleClientException (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.language.TranslatableGuacamoleClientException

    +
    +
    No usage of org.apache.guacamole.language.TranslatableGuacamoleClientException
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleClientOverrunException.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleClientOverrunException.html new file mode 100644 index 000000000..5bcf763b6 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleClientOverrunException.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.language.TranslatableGuacamoleClientOverrunException (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.language.TranslatableGuacamoleClientOverrunException

    +
    +
    No usage of org.apache.guacamole.language.TranslatableGuacamoleClientOverrunException
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleClientTimeoutException.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleClientTimeoutException.html new file mode 100644 index 000000000..3d245d77a --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleClientTimeoutException.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.language.TranslatableGuacamoleClientTimeoutException (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.language.TranslatableGuacamoleClientTimeoutException

    +
    +
    No usage of org.apache.guacamole.language.TranslatableGuacamoleClientTimeoutException
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleClientTooManyException.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleClientTooManyException.html new file mode 100644 index 000000000..c2543541b --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleClientTooManyException.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.language.TranslatableGuacamoleClientTooManyException (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.language.TranslatableGuacamoleClientTooManyException

    +
    +
    No usage of org.apache.guacamole.language.TranslatableGuacamoleClientTooManyException
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleConnectionClosedException.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleConnectionClosedException.html new file mode 100644 index 000000000..8e135b1cd --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleConnectionClosedException.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.language.TranslatableGuacamoleConnectionClosedException (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.language.TranslatableGuacamoleConnectionClosedException

    +
    +
    No usage of org.apache.guacamole.language.TranslatableGuacamoleConnectionClosedException
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleCredentialsException.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleCredentialsException.html new file mode 100644 index 000000000..a48dedbc3 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleCredentialsException.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.language.TranslatableGuacamoleCredentialsException (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.language.TranslatableGuacamoleCredentialsException

    +
    +
    No usage of org.apache.guacamole.language.TranslatableGuacamoleCredentialsException
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleInsufficientCredentialsException.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleInsufficientCredentialsException.html new file mode 100644 index 000000000..257a55098 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleInsufficientCredentialsException.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.language.TranslatableGuacamoleInsufficientCredentialsException (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.language.TranslatableGuacamoleInsufficientCredentialsException

    +
    +
    No usage of org.apache.guacamole.language.TranslatableGuacamoleInsufficientCredentialsException
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleInvalidCredentialsException.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleInvalidCredentialsException.html new file mode 100644 index 000000000..643afd8dd --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleInvalidCredentialsException.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.language.TranslatableGuacamoleInvalidCredentialsException (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.language.TranslatableGuacamoleInvalidCredentialsException

    +
    +
    No usage of org.apache.guacamole.language.TranslatableGuacamoleInvalidCredentialsException
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleResourceClosedException.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleResourceClosedException.html new file mode 100644 index 000000000..2ddb088c0 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleResourceClosedException.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.language.TranslatableGuacamoleResourceClosedException (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.language.TranslatableGuacamoleResourceClosedException

    +
    +
    No usage of org.apache.guacamole.language.TranslatableGuacamoleResourceClosedException
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleResourceConflictException.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleResourceConflictException.html new file mode 100644 index 000000000..c75cb2c85 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleResourceConflictException.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.language.TranslatableGuacamoleResourceConflictException (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.language.TranslatableGuacamoleResourceConflictException

    +
    +
    No usage of org.apache.guacamole.language.TranslatableGuacamoleResourceConflictException
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleResourceNotFoundException.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleResourceNotFoundException.html new file mode 100644 index 000000000..4455da7d9 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleResourceNotFoundException.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.language.TranslatableGuacamoleResourceNotFoundException (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.language.TranslatableGuacamoleResourceNotFoundException

    +
    +
    No usage of org.apache.guacamole.language.TranslatableGuacamoleResourceNotFoundException
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleSecurityException.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleSecurityException.html new file mode 100644 index 000000000..cea4f8789 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleSecurityException.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.language.TranslatableGuacamoleSecurityException (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.language.TranslatableGuacamoleSecurityException

    +
    +
    No usage of org.apache.guacamole.language.TranslatableGuacamoleSecurityException
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleServerBusyException.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleServerBusyException.html new file mode 100644 index 000000000..175426972 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleServerBusyException.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.language.TranslatableGuacamoleServerBusyException (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.language.TranslatableGuacamoleServerBusyException

    +
    +
    No usage of org.apache.guacamole.language.TranslatableGuacamoleServerBusyException
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleServerException.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleServerException.html new file mode 100644 index 000000000..c32e145af --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleServerException.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.language.TranslatableGuacamoleServerException (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.language.TranslatableGuacamoleServerException

    +
    +
    No usage of org.apache.guacamole.language.TranslatableGuacamoleServerException
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleSessionClosedException.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleSessionClosedException.html new file mode 100644 index 000000000..78b1d18b0 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleSessionClosedException.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.language.TranslatableGuacamoleSessionClosedException (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.language.TranslatableGuacamoleSessionClosedException

    +
    +
    No usage of org.apache.guacamole.language.TranslatableGuacamoleSessionClosedException
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleSessionConflictException.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleSessionConflictException.html new file mode 100644 index 000000000..e529933d8 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleSessionConflictException.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.language.TranslatableGuacamoleSessionConflictException (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.language.TranslatableGuacamoleSessionConflictException

    +
    +
    No usage of org.apache.guacamole.language.TranslatableGuacamoleSessionConflictException
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleSessionTimeoutException.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleSessionTimeoutException.html new file mode 100644 index 000000000..dd79a014c --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleSessionTimeoutException.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.language.TranslatableGuacamoleSessionTimeoutException (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.language.TranslatableGuacamoleSessionTimeoutException

    +
    +
    No usage of org.apache.guacamole.language.TranslatableGuacamoleSessionTimeoutException
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleUnauthorizedException.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleUnauthorizedException.html new file mode 100644 index 000000000..0be1cd43c --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleUnauthorizedException.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.language.TranslatableGuacamoleUnauthorizedException (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.language.TranslatableGuacamoleUnauthorizedException

    +
    +
    No usage of org.apache.guacamole.language.TranslatableGuacamoleUnauthorizedException
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleUnsupportedException.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleUnsupportedException.html new file mode 100644 index 000000000..5a8e443be --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleUnsupportedException.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.language.TranslatableGuacamoleUnsupportedException (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.language.TranslatableGuacamoleUnsupportedException

    +
    +
    No usage of org.apache.guacamole.language.TranslatableGuacamoleUnsupportedException
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleUpstreamException.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleUpstreamException.html new file mode 100644 index 000000000..3f8079fcf --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleUpstreamException.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.language.TranslatableGuacamoleUpstreamException (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.language.TranslatableGuacamoleUpstreamException

    +
    +
    No usage of org.apache.guacamole.language.TranslatableGuacamoleUpstreamException
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleUpstreamNotFoundException.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleUpstreamNotFoundException.html new file mode 100644 index 000000000..257ca7ebe --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleUpstreamNotFoundException.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.language.TranslatableGuacamoleUpstreamNotFoundException (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.language.TranslatableGuacamoleUpstreamNotFoundException

    +
    +
    No usage of org.apache.guacamole.language.TranslatableGuacamoleUpstreamNotFoundException
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleUpstreamTimeoutException.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleUpstreamTimeoutException.html new file mode 100644 index 000000000..ac1c07908 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleUpstreamTimeoutException.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.language.TranslatableGuacamoleUpstreamTimeoutException (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.language.TranslatableGuacamoleUpstreamTimeoutException

    +
    +
    No usage of org.apache.guacamole.language.TranslatableGuacamoleUpstreamTimeoutException
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleUpstreamUnavailableException.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleUpstreamUnavailableException.html new file mode 100644 index 000000000..7676c5abd --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableGuacamoleUpstreamUnavailableException.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.language.TranslatableGuacamoleUpstreamUnavailableException (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.language.TranslatableGuacamoleUpstreamUnavailableException

    +
    +
    No usage of org.apache.guacamole.language.TranslatableGuacamoleUpstreamUnavailableException
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableMessage.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableMessage.html new file mode 100644 index 000000000..be0543f01 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/class-use/TranslatableMessage.html @@ -0,0 +1,850 @@ + + + + + +Uses of Class org.apache.guacamole.language.TranslatableMessage (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.language.TranslatableMessage

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/package-summary.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/package-summary.html new file mode 100644 index 000000000..a87ebb20a --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/package-summary.html @@ -0,0 +1,394 @@ + + + + + +org.apache.guacamole.language (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Package org.apache.guacamole.language

    +
    +
    +
      +
    • + + + + + + + + + + + + +
      Interface Summary 
      InterfaceDescription
      Translatable +
      An object which is associated with a translatable message that can be passed + through an arbitrary translation service, producing a human-readable message + in the user's native language.
      +
      +
    • +
    • + + + + + + + + + + + + +
      Class Summary 
      ClassDescription
      TranslatableMessage +
      A message which can be translated using a translation service, providing a + translation key and optional set of values to be substituted into the + translation string associated with that key.
      +
      +
    • +
    • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Exception Summary 
      ExceptionDescription
      TranslatableGuacamoleClientBadTypeException +
      A GuacamoleClientBadTypeException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
      +
      TranslatableGuacamoleClientException +
      A GuacamoleClientException whose associated message is translatable + and can be passed through an arbitrary translation service, producing a + human-readable message in the user's native language.
      +
      TranslatableGuacamoleClientOverrunException +
      A GuacamoleClientOverrunException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
      +
      TranslatableGuacamoleClientTimeoutException +
      A GuacamoleClientTimeoutException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
      +
      TranslatableGuacamoleClientTooManyException +
      A GuacamoleClientTooManyException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
      +
      TranslatableGuacamoleConnectionClosedException +
      A GuacamoleConnectionClosedException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
      +
      TranslatableGuacamoleCredentialsException +
      A GuacamoleCredentialsException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
      +
      TranslatableGuacamoleInsufficientCredentialsException +
      A GuacamoleInsufficientCredentialsException whose associated message + is translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
      +
      TranslatableGuacamoleInvalidCredentialsException +
      A GuacamoleInvalidCredentialsException whose associated message + is translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
      +
      TranslatableGuacamoleResourceClosedException +
      A GuacamoleResourceClosedException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
      +
      TranslatableGuacamoleResourceConflictException +
      A GuacamoleResourceConflictException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
      +
      TranslatableGuacamoleResourceNotFoundException +
      A GuacamoleResourceNotFoundException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
      +
      TranslatableGuacamoleSecurityException +
      A GuacamoleSecurityException whose associated message is translatable + and can be passed through an arbitrary translation service, producing a + human-readable message in the user's native language.
      +
      TranslatableGuacamoleServerBusyException +
      A GuacamoleServerBusyException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
      +
      TranslatableGuacamoleServerException +
      A GuacamoleServerException whose associated message is translatable + and can be passed through an arbitrary translation service, producing a + human-readable message in the user's native language.
      +
      TranslatableGuacamoleSessionClosedException +
      A GuacamoleSessionClosedException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
      +
      TranslatableGuacamoleSessionConflictException +
      A GuacamoleSessionConflictException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
      +
      TranslatableGuacamoleSessionTimeoutException +
      A GuacamoleSessionTimeoutException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
      +
      TranslatableGuacamoleUnauthorizedException +
      A GuacamoleUnauthorizedException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
      +
      TranslatableGuacamoleUnsupportedException +
      A GuacamoleUnsupportedException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
      +
      TranslatableGuacamoleUpstreamException +
      A GuacamoleUpstreamException whose associated message is translatable + and can be passed through an arbitrary translation service, producing a + human-readable message in the user's native language.
      +
      TranslatableGuacamoleUpstreamNotFoundException +
      A GuacamoleUpstreamNotFoundException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
      +
      TranslatableGuacamoleUpstreamTimeoutException +
      A GuacamoleUpstreamTimeoutException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
      +
      TranslatableGuacamoleUpstreamUnavailableException +
      A GuacamoleUpstreamUnavailableException whose associated message is + translatable and can be passed through an arbitrary translation service, + producing a human-readable message in the user's native language.
      +
      +
    • +
    +
    +
    +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/package-tree.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/package-tree.html new file mode 100644 index 000000000..6dcc93a80 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/package-tree.html @@ -0,0 +1,303 @@ + + + + + +org.apache.guacamole.language Class Hierarchy (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Hierarchy For Package org.apache.guacamole.language

    +Package Hierarchies: + +
    +
    +
    +

    Class Hierarchy

    + +
    +
    +

    Interface Hierarchy

    + +
    +
    +
    +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/package-use.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/package-use.html new file mode 100644 index 000000000..cc0fac177 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/language/package-use.html @@ -0,0 +1,261 @@ + + + + + +Uses of Package org.apache.guacamole.language (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Package
    org.apache.guacamole.language

    +
    +
    +
      +
    • + + + + + + + + + + + + + + + + + + + + +
      Packages that use org.apache.guacamole.language 
      PackageDescription
      org.apache.guacamole.form +
      Provides classes which describe the contents and semantics of forms which + may be presented to the user.
      +
      org.apache.guacamole.language 
      org.apache.guacamole.net.auth +
      Provides classes which can be used to extend or replace the authentication + functionality of the Guacamole web application.
      +
      +
    • +
    • + + + + + + + + + + + + + + + + + + +
      Classes in org.apache.guacamole.language used by org.apache.guacamole.form 
      ClassDescription
      Translatable +
      An object which is associated with a translatable message that can be passed + through an arbitrary translation service, producing a human-readable message + in the user's native language.
      +
      TranslatableMessage +
      A message which can be translated using a translation service, providing a + translation key and optional set of values to be substituted into the + translation string associated with that key.
      +
      +
    • +
    • + + + + + + + + + + + + + + + + + + +
      Classes in org.apache.guacamole.language used by org.apache.guacamole.language 
      ClassDescription
      Translatable +
      An object which is associated with a translatable message that can be passed + through an arbitrary translation service, producing a human-readable message + in the user's native language.
      +
      TranslatableMessage +
      A message which can be translated using a translation service, providing a + translation key and optional set of values to be substituted into the + translation string associated with that key.
      +
      +
    • +
    • + + + + + + + + + + + + + + +
      Classes in org.apache.guacamole.language used by org.apache.guacamole.net.auth 
      ClassDescription
      TranslatableMessage +
      A message which can be translated using a translation service, providing a + translation key and optional set of values to be substituted into the + translation string associated with that key.
      +
      +
    • +
    +
    +
    +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/AbstractActiveConnection.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/AbstractActiveConnection.html new file mode 100644 index 000000000..5e111e670 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/AbstractActiveConnection.html @@ -0,0 +1,644 @@ + + + + + +AbstractActiveConnection (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class AbstractActiveConnection

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          AbstractActiveConnection

          +
          public AbstractActiveConnection()
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getConnectionIdentifier

          +
          public String getConnectionIdentifier()
          +
          Description copied from interface: ActiveConnection
          +
          Returns the identifier of the connection being actively used. Unlike the + other information stored in this object, the connection identifier must + be present and MAY NOT be null.
          +
          +
          Specified by:
          +
          getConnectionIdentifier in interface ActiveConnection
          +
          Returns:
          +
          The identifier of the connection being actively used.
          +
          +
        • +
        + + + +
          +
        • +

          setConnectionIdentifier

          +
          public void setConnectionIdentifier​(String connnectionIdentifier)
          +
          Description copied from interface: ActiveConnection
          +
          Sets the identifier of the connection being actively used.
          +
          +
          Specified by:
          +
          setConnectionIdentifier in interface ActiveConnection
          +
          Parameters:
          +
          connnectionIdentifier - The identifier of the connection being actively used.
          +
          +
        • +
        + + + +
          +
        • +

          getSharingProfileIdentifier

          +
          public String getSharingProfileIdentifier()
          +
          Description copied from interface: ActiveConnection
          +
          Returns the identifier of the sharing profile being actively used. If + the connection is being accessed directly, this will be null.
          +
          +
          Specified by:
          +
          getSharingProfileIdentifier in interface ActiveConnection
          +
          Returns:
          +
          The identifier of the sharing profile being actively used.
          +
          +
        • +
        + + + +
          +
        • +

          setSharingProfileIdentifier

          +
          public void setSharingProfileIdentifier​(String sharingProfileIdentifier)
          +
          Description copied from interface: ActiveConnection
          +
          Sets the identifier of the sharing profile being actively used.
          +
          +
          Specified by:
          +
          setSharingProfileIdentifier in interface ActiveConnection
          +
          Parameters:
          +
          sharingProfileIdentifier - The identifier of the sharing profile being actively used.
          +
          +
        • +
        + + + +
          +
        • +

          getStartDate

          +
          public Date getStartDate()
          +
          Description copied from interface: ActiveConnection
          +
          Returns the date and time the connection began.
          +
          +
          Specified by:
          +
          getStartDate in interface ActiveConnection
          +
          Returns:
          +
          The date and time the connection began, or null if this + information is not available.
          +
          +
        • +
        + + + +
          +
        • +

          setStartDate

          +
          public void setStartDate​(Date startDate)
          +
          Description copied from interface: ActiveConnection
          +
          Sets the date and time the connection began.
          +
          +
          Specified by:
          +
          setStartDate in interface ActiveConnection
          +
          Parameters:
          +
          startDate - The date and time the connection began, or null if this + information is not available.
          +
          +
        • +
        + + + +
          +
        • +

          getRemoteHost

          +
          public String getRemoteHost()
          +
          Description copied from interface: ActiveConnection
          +
          Returns the hostname or IP address of the remote host that initiated the + connection, if known. If the hostname or IP address is not known, null + is returned.
          +
          +
          Specified by:
          +
          getRemoteHost in interface ActiveConnection
          +
          Returns:
          +
          The hostname or IP address of the remote host, or null if this + information is not available.
          +
          +
        • +
        + + + +
          +
        • +

          setRemoteHost

          +
          public void setRemoteHost​(String remoteHost)
          +
          Description copied from interface: ActiveConnection
          +
          Sets the hostname or IP address of the remote host that initiated the + connection.
          +
          +
          Specified by:
          +
          setRemoteHost in interface ActiveConnection
          +
          Parameters:
          +
          remoteHost - The hostname or IP address of the remote host, or null if this + information is not available.
          +
          +
        • +
        + + + +
          +
        • +

          getUsername

          +
          public String getUsername()
          +
          Description copied from interface: ActiveConnection
          +
          Returns the name of the user who is using this connection.
          +
          +
          Specified by:
          +
          getUsername in interface ActiveConnection
          +
          Returns:
          +
          The name of the user who is using this connection, or null if this + information is not available.
          +
          +
        • +
        + + + +
          +
        • +

          setUsername

          +
          public void setUsername​(String username)
          +
          Description copied from interface: ActiveConnection
          +
          Sets the name of the user who is using this connection.
          +
          +
          Specified by:
          +
          setUsername in interface ActiveConnection
          +
          Parameters:
          +
          username - The name of the user who is using this connection, or null if this + information is not available.
          +
          +
        • +
        + + + +
          +
        • +

          getTunnel

          +
          public org.apache.guacamole.net.GuacamoleTunnel getTunnel()
          +
          Description copied from interface: ActiveConnection
          +
          Returns the connected GuacamoleTunnel being used. This may be null if + access to the underlying tunnel is denied.
          +
          +
          Specified by:
          +
          getTunnel in interface ActiveConnection
          +
          Returns:
          +
          The connected GuacamoleTunnel, or null if permission is denied.
          +
          +
        • +
        + + + +
          +
        • +

          setTunnel

          +
          public void setTunnel​(org.apache.guacamole.net.GuacamoleTunnel tunnel)
          +
          Description copied from interface: ActiveConnection
          +
          Sets the connected GuacamoleTunnel being used.
          +
          +
          Specified by:
          +
          setTunnel in interface ActiveConnection
          +
          Parameters:
          +
          tunnel - The connected GuacamoleTunnel, or null if permission is denied.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/AbstractActivityLog.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/AbstractActivityLog.html new file mode 100644 index 000000000..6fb2f9784 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/AbstractActivityLog.html @@ -0,0 +1,409 @@ + + + + + +AbstractActivityLog (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class AbstractActivityLog

    +
    +
    + +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      ActivityLog
      +
      +
      +
      Direct Known Subclasses:
      +
      FileActivityLog
      +
      +
      +
      public abstract class AbstractActivityLog
      +extends Object
      +implements ActivityLog
      +
      Base implementation of an ActivityLog, providing storage and simple + getters/setters for its main properties.
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          AbstractActivityLog

          +
          public AbstractActivityLog​(ActivityLog.Type type,
          +                           TranslatableMessage description)
          +
          Creates a new AbstractActivityLog having the given type and + human-readable description.
          +
          +
          Parameters:
          +
          type - The type of this ActivityLog.
          +
          description - A human-readable message that describes this log.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getType

          +
          public ActivityLog.Type getType()
          +
          Description copied from interface: ActivityLog
          +
          Returns the type of this activity log. The type of an activity log + dictates how its content should be interpreted or exposed.
          +
          +
          Specified by:
          +
          getType in interface ActivityLog
          +
          Returns:
          +
          The type of this activity log.
          +
          +
        • +
        + + + +
          +
        • +

          getDescription

          +
          public TranslatableMessage getDescription()
          +
          Description copied from interface: ActivityLog
          +
          Returns a human-readable message that describes this log. This message + should provide sufficient information for a user with access to this + log to understand its context and/or purpose.
          +
          +
          Specified by:
          +
          getDescription in interface ActivityLog
          +
          Returns:
          +
          A human-readable message that describes this log.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/AbstractAuthenticatedUser.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/AbstractAuthenticatedUser.html new file mode 100644 index 000000000..e43a2f409 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/AbstractAuthenticatedUser.html @@ -0,0 +1,404 @@ + + + + + +AbstractAuthenticatedUser (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class AbstractAuthenticatedUser

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          AbstractAuthenticatedUser

          +
          public AbstractAuthenticatedUser()
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getEffectiveUserGroups

          +
          public Set<String> getEffectiveUserGroups()
          +
          Description copied from interface: AuthenticatedUser
          +
          Returns a read-only set of the identifiers of all user groups which + apply to this authenticated user. The exact semantics of what user + groups apply are up to the implementation, and the user groups within + this set may be implied, derived dynamically, inherited through multiple + levels of group membership, etc. + + Note that, as with user identifiers, user group identifiers form the + basis of identity which applies across authentication providers. It is + expected that any two user groups having the same identifier represent + the same group, even if defined by different authentication providers.
          +
          +
          Specified by:
          +
          getEffectiveUserGroups in interface AuthenticatedUser
          +
          Returns:
          +
          A read-only set of the identifiers of all user groups which apply + to this authenticated user.
          +
          +
        • +
        + + + +
          +
        • +

          invalidate

          +
          public void invalidate()
          +
          Description copied from interface: AuthenticatedUser
          +
          Invalidates this authenticated user and their associated token such that + they are no longer logged in. This function will be automatically + invoked when the user logs out, or when their session expires.
          +
          +
          Specified by:
          +
          invalidate in interface AuthenticatedUser
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/AbstractAuthenticationProvider.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/AbstractAuthenticationProvider.html new file mode 100644 index 000000000..bf9c6b76e --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/AbstractAuthenticationProvider.html @@ -0,0 +1,692 @@ + + + + + +AbstractAuthenticationProvider (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class AbstractAuthenticationProvider

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • org.apache.guacamole.net.auth.AbstractAuthenticationProvider
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      AuthenticationProvider
      +
      +
      +
      Direct Known Subclasses:
      +
      SimpleAuthenticationProvider
      +
      +
      +
      public abstract class AbstractAuthenticationProvider
      +extends Object
      +implements AuthenticationProvider
      +
      Base implementation of AuthenticationProvider which provides default + implementations of most functions. Implementations must provide their + own AuthenticationProvider.getIdentifier(), but otherwise need only override an implemented + function if they wish to actually implement the functionality defined for + that function by the AuthenticationProvider interface.
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          AbstractAuthenticationProvider

          +
          public AbstractAuthenticationProvider()
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getResource

          +
          public Object getResource()
          +                   throws org.apache.guacamole.GuacamoleException
          +
          Returns an arbitrary REST resource representing this + AuthenticationProvider. The REST resource returned must be properly + annotated with JSR-311 annotations, and may serve as the root resource + for any number of subresources. The returned resource is ultimately + exposed at ".../api/ext/IDENTIFIER/", where IDENTIFIER is the identifier + of this AuthenticationProvider. + + REST resources returned by this function will be reachable by all users, + regardless of whether they have authenticated. REST resources which + must only be accessible by authenticated users should instead be returned + from UserContext.getResource(). + +

          This implementation simply returns null. Implementations that + wish to expose REST resources which are not specific to a user's session + should override this function.

          +
          +
          Specified by:
          +
          getResource in interface AuthenticationProvider
          +
          Returns:
          +
          An arbitrary REST resource, annotated with JSR-311 annotations, or + null if no such resource is defined.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If the REST resource cannot be returned due to an error.
          +
          +
        • +
        + + + +
          +
        • +

          authenticateUser

          +
          public AuthenticatedUser authenticateUser​(Credentials credentials)
          +                                   throws org.apache.guacamole.GuacamoleException
          +
          Returns an AuthenticatedUser representing the user authenticated by the + given credentials, if any. + +

          This implementation performs no authentication whatsoever, ignoring + the provided credentials and simply returning null. Any + authentication attempt will thus fall through to other + AuthenticationProvider implementations, perhaps within other + installed extensions, with this AuthenticationProvider making no + claim regarding the user's identity nor whether the user should be + allowed or disallowed from accessing Guacamole. Implementations that wish + to authenticate users should override this function.

          +
          +
          Specified by:
          +
          authenticateUser in interface AuthenticationProvider
          +
          Parameters:
          +
          credentials - The credentials to use for authentication.
          +
          Returns:
          +
          An AuthenticatedUser representing the user authenticated by the + given credentials, if any, or null if the credentials are invalid.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while authenticating the user, or if access is + temporarily, permanently, or conditionally denied, such as if the + supplied credentials are insufficient or invalid.
          +
          +
        • +
        + + + +
          +
        • +

          updateAuthenticatedUser

          +
          public AuthenticatedUser updateAuthenticatedUser​(AuthenticatedUser authenticatedUser,
          +                                                 Credentials credentials)
          +                                          throws org.apache.guacamole.GuacamoleException
          +
          Returns a new or updated AuthenticatedUser for the given credentials + already having produced the given AuthenticatedUser. Note that because + this function will be called for all future requests after initial + authentication, including tunnel requests, care must be taken to avoid + using functions of HttpServletRequest which invalidate the entire request + body, such as getParameter(). Doing otherwise may cause the + GuacamoleHTTPTunnelServlet to fail. + +

          This implementation simply returns the provided + authenticatedUser without modification. Implementations that + wish to update a user's AuthenticatedUser object with respect to + new Credentials received in requests which follow the initial, + successful authentication attempt should override this function.

          +
          +
          Specified by:
          +
          updateAuthenticatedUser in interface AuthenticationProvider
          +
          Parameters:
          +
          authenticatedUser - An AuthenticatedUser object representing the user authenticated by + an arbitrary set of credentials. The AuthenticatedUser may come from + this AuthenticationProvider or any other installed + AuthenticationProvider.
          +
          credentials - The credentials to use for authentication.
          +
          Returns:
          +
          An updated AuthenticatedUser representing the user authenticated by + the given credentials, if any, or null if the credentials are + invalid.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while updating the AuthenticatedUser.
          +
          +
        • +
        + + + +
          +
        • +

          getUserContext

          +
          public UserContext getUserContext​(AuthenticatedUser authenticatedUser)
          +                           throws org.apache.guacamole.GuacamoleException
          +
          Returns the UserContext of the user authenticated by the given + credentials. + +

          This implementation simply returns null, effectively allowing + authentication to continue but refusing to provide data for the given + user. Implementations that wish to veto the authentication results of + other AuthenticationProvider implementations or provide data for + authenticated users should override this function.

          +
          +
          Specified by:
          +
          getUserContext in interface AuthenticationProvider
          +
          Parameters:
          +
          authenticatedUser - An AuthenticatedUser object representing the user authenticated by + an arbitrary set of credentials. The AuthenticatedUser may come from + this AuthenticationProvider or any other installed + AuthenticationProvider.
          +
          Returns:
          +
          A UserContext describing the permissions, connection, connection + groups, etc. accessible or associated with the given authenticated + user, or null if this AuthenticationProvider refuses to provide any + such data.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while creating the UserContext.
          +
          +
        • +
        + + + +
          +
        • +

          updateUserContext

          +
          public UserContext updateUserContext​(UserContext context,
          +                                     AuthenticatedUser authenticatedUser,
          +                                     Credentials credentials)
          +                              throws org.apache.guacamole.GuacamoleException
          +
          Returns a new or updated UserContext for the given AuthenticatedUser + already having the given UserContext. Note that because this function + will be called for all future requests after initial authentication, + including tunnel requests, care must be taken to avoid using functions + of HttpServletRequest which invalidate the entire request body, such as + getParameter(). Doing otherwise may cause the GuacamoleHTTPTunnelServlet + to fail. + +

          This implementation simply returns the provided context + without modification. Implementations that wish to update a user's + UserContext object with respect to newly-updated + AuthenticatedUser or Credentials (such as those received + in requests which follow the initial, successful authentication attempt) + should override this function.

          +
          +
          Specified by:
          +
          updateUserContext in interface AuthenticationProvider
          +
          Parameters:
          +
          context - The existing UserContext belonging to the user in question.
          +
          authenticatedUser - An AuthenticatedUser object representing the user authenticated by + an arbitrary set of credentials. The AuthenticatedUser may come from + this AuthenticationProvider or any other installed + AuthenticationProvider.
          +
          credentials - The credentials which were most recently submitted. These are not + guaranteed to be the same as the credentials associated with the + AuthenticatedUser when they originally authenticated.
          +
          Returns:
          +
          An updated UserContext describing the permissions, connection, + connection groups, etc. accessible or associated with the given + authenticated user, or null if this AuthenticationProvider refuses + to provide any such data.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while updating the UserContext.
          +
          +
        • +
        + + + +
          +
        • +

          decorate

          +
          public UserContext decorate​(UserContext context,
          +                            AuthenticatedUser authenticatedUser,
          +                            Credentials credentials)
          +                     throws org.apache.guacamole.GuacamoleException
          +
          Given a UserContext returned from getUserContext() of a different + AuthenticationProvider, returns a UserContext instance which decorates + (wraps) that UserContext, delegating and overriding implemented + functions as necessary. Each UserContext created via getUserContext() + will be passed to the decorate() functions of all other + AuthenticationProviders, allowing those AuthenticationProviders to + augment (or perhaps even limit) the functionality or data provided. + +

          This implementation simply returns the provided context + without performing any decoration. Implementations that wish to augment + the functionality or data provided by other + AuthenticationProvider implementations should override this + function.

          +
          +
          Specified by:
          +
          decorate in interface AuthenticationProvider
          +
          Parameters:
          +
          context - An existing UserContext generated by getUserContext() of a different + AuthenticationProvider.
          +
          authenticatedUser - The AuthenticatedUser object representing the user associated with + the given UserContext.
          +
          credentials - The credentials which were most recently submitted for the given + AuthenticatedUser. These are not guaranteed to be the same as the + credentials associated with the AuthenticatedUser object, which are + the credentials provided when the user originally authenticated.
          +
          Returns:
          +
          A decorated (wrapped) UserContext object, or the original, + undecorated UserContext.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If the UserContext cannot be decorated due to an error.
          +
          +
        • +
        + + + +
          +
        • +

          redecorate

          +
          public UserContext redecorate​(UserContext decorated,
          +                              UserContext context,
          +                              AuthenticatedUser authenticatedUser,
          +                              Credentials credentials)
          +                       throws org.apache.guacamole.GuacamoleException
          +
          Given a UserContext returned by updateUserContext() of a different + AuthenticationProvider, returns a UserContext instance which decorates + (wraps) that UserContext, delegating and overriding implemented + functions as necessary. Each UserContext created via updateUserContext() + will be passed to the decorate() functions of all other + AuthenticationProviders, allowing those AuthenticationProviders to + augment (or perhaps even limit) the functionality or data provided. + +

          This implementation simply invokes + decorate(UserContext,AuthenticatedUser,Credentials) with the + provided context, authenticatedUser, and + credentials. Implementations which override + decorate(UserContext,AuthenticatedUser,Credentials) and which + need to update their existing decorated object following possible + updates to the UserContext or AuthenticatedUser (rather + than generate an entirely new decorated object) should override this + function.

          +
          +
          Specified by:
          +
          redecorate in interface AuthenticationProvider
          +
          Parameters:
          +
          decorated - The UserContext returned when decorate() was invoked on this + AuthenticationProvider for the UserContext which was just updated + via a call to updateUserContext().
          +
          context - An existing UserContext generated by updateUserContext() of a + different AuthenticationProvider.
          +
          authenticatedUser - The AuthenticatedUser object representing the user associated with + the given UserContext.
          +
          credentials - The credentials which were most recently submitted for the given + AuthenticatedUser. These are not guaranteed to be the same as the + credentials associated with the AuthenticatedUser object, which are + the credentials provided when the user originally authenticated.
          +
          Returns:
          +
          A decorated (wrapped) UserContext object, or the original, + undecorated UserContext.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If the UserContext cannot be decorated due to an error.
          +
          +
        • +
        + + + +
          +
        • +

          shutdown

          +
          public void shutdown()
          +
          Frees all resources associated with this AuthenticationProvider. This + function will be automatically invoked when the Guacamole server is + shutting down. + +

          This implementation does nothing. Implementations that wish to perform + cleanup tasks when the AuthenticationProvider is being unloaded + should override this function.

          +
          +
          Specified by:
          +
          shutdown in interface AuthenticationProvider
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/AbstractConnection.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/AbstractConnection.html new file mode 100644 index 000000000..913a65ff1 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/AbstractConnection.html @@ -0,0 +1,538 @@ + + + + + +AbstractConnection (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class AbstractConnection

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          AbstractConnection

          +
          public AbstractConnection()
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getName

          +
          public String getName()
          +
          Description copied from interface: Connection
          +
          Returns the name assigned to this Connection.
          +
          +
          Specified by:
          +
          getName in interface Connection
          +
          Returns:
          +
          The name assigned to this Connection.
          +
          +
        • +
        + + + +
          +
        • +

          setName

          +
          public void setName​(String name)
          +
          Description copied from interface: Connection
          +
          Sets the name assigned to this Connection.
          +
          +
          Specified by:
          +
          setName in interface Connection
          +
          Parameters:
          +
          name - The name to assign.
          +
          +
        • +
        + + + +
          +
        • +

          getParentIdentifier

          +
          public String getParentIdentifier()
          +
          Description copied from interface: Connection
          +
          Returns the unique identifier of the parent ConnectionGroup for + this Connection.
          +
          +
          Specified by:
          +
          getParentIdentifier in interface Connection
          +
          Returns:
          +
          The unique identifier of the parent ConnectionGroup for + this Connection.
          +
          +
        • +
        + + + +
          +
        • +

          setParentIdentifier

          +
          public void setParentIdentifier​(String parentIdentifier)
          +
          Description copied from interface: Connection
          +
          Sets the unique identifier of the parent ConnectionGroup for + this Connection.
          +
          +
          Specified by:
          +
          setParentIdentifier in interface Connection
          +
          Parameters:
          +
          parentIdentifier - The unique identifier of the parent + ConnectionGroup for this Connection.
          +
          +
        • +
        + + + +
          +
        • +

          getConfiguration

          +
          public org.apache.guacamole.protocol.GuacamoleConfiguration getConfiguration()
          +
          Description copied from interface: Connection
          +
          Returns the GuacamoleConfiguration associated with this Connection. Note + that because configurations may contain sensitive information, some data + in this configuration may be omitted or tokenized.
          +
          +
          Specified by:
          +
          getConfiguration in interface Connection
          +
          Returns:
          +
          The GuacamoleConfiguration associated with this Connection.
          +
          +
        • +
        + + + +
          +
        • +

          setConfiguration

          +
          public void setConfiguration​(org.apache.guacamole.protocol.GuacamoleConfiguration configuration)
          +
          Description copied from interface: Connection
          +
          Sets the GuacamoleConfiguration associated with this Connection.
          +
          +
          Specified by:
          +
          setConfiguration in interface Connection
          +
          Parameters:
          +
          configuration - The GuacamoleConfiguration to associate with this + Connection.
          +
          +
        • +
        + + + +
          +
        • +

          getSharingProfileIdentifiers

          +
          public Set<String> getSharingProfileIdentifiers()
          +                                         throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: Connection
          +
          Returns identifiers of all readable sharing profiles that can be used to + join this connection when it is active. The level of access granted to a + joining user is dictated by the connection parameters associated with + the sharing profile, not necessarily the parameters of the primary + connection being joined.
          +
          +
          Specified by:
          +
          getSharingProfileIdentifiers in interface Connection
          +
          Returns:
          +
          A Set of identifiers representing the sharing profiles for this + connection.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while fetching the sharing profiles for this + connection.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/AbstractConnectionGroup.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/AbstractConnectionGroup.html new file mode 100644 index 000000000..c69784bb9 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/AbstractConnectionGroup.html @@ -0,0 +1,518 @@ + + + + + +AbstractConnectionGroup (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class AbstractConnectionGroup

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          AbstractConnectionGroup

          +
          public AbstractConnectionGroup()
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getName

          +
          public String getName()
          +
          Description copied from interface: ConnectionGroup
          +
          Returns the name assigned to this ConnectionGroup.
          +
          +
          Specified by:
          +
          getName in interface ConnectionGroup
          +
          Returns:
          +
          The name assigned to this ConnectionGroup.
          +
          +
        • +
        + + + +
          +
        • +

          setName

          +
          public void setName​(String name)
          +
          Description copied from interface: ConnectionGroup
          +
          Sets the name assigned to this ConnectionGroup.
          +
          +
          Specified by:
          +
          setName in interface ConnectionGroup
          +
          Parameters:
          +
          name - The name to assign.
          +
          +
        • +
        + + + +
          +
        • +

          getParentIdentifier

          +
          public String getParentIdentifier()
          +
          Description copied from interface: ConnectionGroup
          +
          Returns the unique identifier of the parent ConnectionGroup for + this ConnectionGroup.
          +
          +
          Specified by:
          +
          getParentIdentifier in interface ConnectionGroup
          +
          Returns:
          +
          The unique identifier of the parent ConnectionGroup for + this ConnectionGroup.
          +
          +
        • +
        + + + +
          +
        • +

          setParentIdentifier

          +
          public void setParentIdentifier​(String parentIdentifier)
          +
          Description copied from interface: ConnectionGroup
          +
          Sets the unique identifier of the parent ConnectionGroup for + this ConnectionGroup.
          +
          +
          Specified by:
          +
          setParentIdentifier in interface ConnectionGroup
          +
          Parameters:
          +
          parentIdentifier - The unique identifier of the parent + ConnectionGroup for this ConnectionGroup.
          +
          +
        • +
        + + + + + + + + +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/AbstractIdentifiable.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/AbstractIdentifiable.html new file mode 100644 index 000000000..79524f95e --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/AbstractIdentifiable.html @@ -0,0 +1,393 @@ + + + + + +AbstractIdentifiable (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class AbstractIdentifiable

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • org.apache.guacamole.net.auth.AbstractIdentifiable
      • +
      +
    • +
    +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          AbstractIdentifiable

          +
          public AbstractIdentifiable()
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getIdentifier

          +
          public String getIdentifier()
          +
          Description copied from interface: Identifiable
          +
          Returns the unique identifier assigned to this object. All identifiable + objects must have a deterministic, unique identifier which may not be + null.
          +
          +
          Specified by:
          +
          getIdentifier in interface Identifiable
          +
          Returns:
          +
          The unique identifier assigned to this object, which may not be + null.
          +
          +
        • +
        + + + +
          +
        • +

          setIdentifier

          +
          public void setIdentifier​(String identifier)
          +
          Description copied from interface: Identifiable
          +
          Sets the identifier assigned to this object.
          +
          +
          Specified by:
          +
          setIdentifier in interface Identifiable
          +
          Parameters:
          +
          identifier - The identifier to assign.
          +
          +
        • +
        + + + +
          +
        • +

          hashCode

          +
          public int hashCode()
          +
          +
          Overrides:
          +
          hashCode in class Object
          +
          +
        • +
        + + + +
          +
        • +

          equals

          +
          public boolean equals​(Object other)
          +
          +
          Overrides:
          +
          equals in class Object
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/AbstractSharingProfile.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/AbstractSharingProfile.html new file mode 100644 index 000000000..c83d346a7 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/AbstractSharingProfile.html @@ -0,0 +1,568 @@ + + + + + +AbstractSharingProfile (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class AbstractSharingProfile

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • org.apache.guacamole.net.auth.AbstractSharingProfile
      • +
      +
    • +
    +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          AbstractSharingProfile

          +
          public AbstractSharingProfile()
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getName

          +
          public String getName()
          +
          Description copied from interface: SharingProfile
          +
          Returns the human-readable name assigned to this SharingProfile.
          +
          +
          Specified by:
          +
          getName in interface SharingProfile
          +
          Returns:
          +
          The name assigned to this SharingProfile.
          +
          +
        • +
        + + + +
          +
        • +

          setName

          +
          public void setName​(String name)
          +
          Description copied from interface: SharingProfile
          +
          Sets the human-readable name assigned to this SharingProfile.
          +
          +
          Specified by:
          +
          setName in interface SharingProfile
          +
          Parameters:
          +
          name - The name to assign.
          +
          +
        • +
        + + + +
          +
        • +

          getIdentifier

          +
          public String getIdentifier()
          +
          Description copied from interface: Identifiable
          +
          Returns the unique identifier assigned to this object. All identifiable + objects must have a deterministic, unique identifier which may not be + null.
          +
          +
          Specified by:
          +
          getIdentifier in interface Identifiable
          +
          Returns:
          +
          The unique identifier assigned to this object, which may not be + null.
          +
          +
        • +
        + + + +
          +
        • +

          setIdentifier

          +
          public void setIdentifier​(String identifier)
          +
          Description copied from interface: Identifiable
          +
          Sets the identifier assigned to this object.
          +
          +
          Specified by:
          +
          setIdentifier in interface Identifiable
          +
          Parameters:
          +
          identifier - The identifier to assign.
          +
          +
        • +
        + + + +
          +
        • +

          getPrimaryConnectionIdentifier

          +
          public String getPrimaryConnectionIdentifier()
          +
          Description copied from interface: SharingProfile
          +
          Returns the identifier of the primary connection associated with this + connection. The primary connection is the connection that this sharing + profile can be used to share.
          +
          +
          Specified by:
          +
          getPrimaryConnectionIdentifier in interface SharingProfile
          +
          Returns:
          +
          The identifier of the primary connection associated with this + connection.
          +
          +
        • +
        + + + +
          +
        • +

          setPrimaryConnectionIdentifier

          +
          public void setPrimaryConnectionIdentifier​(String primaryConnectionIdentifier)
          +
          Description copied from interface: SharingProfile
          +
          Sets the identifier of the primary connection associated with this + connection. The primary connection is the connection that this sharing + profile can be used to share.
          +
          +
          Specified by:
          +
          setPrimaryConnectionIdentifier in interface SharingProfile
          +
          Parameters:
          +
          primaryConnectionIdentifier - The identifier of the primary connection associated with this + connection.
          +
          +
        • +
        + + + +
          +
        • +

          getParameters

          +
          public Map<String,​String> getParameters()
          +
          Description copied from interface: SharingProfile
          +
          Returns a map which contains connection parameter name/value pairs as + key/value pairs. Changes to this map will affect the parameters stored + within this sharing profile. The differences in these parameters compared + to those of the associated primary connection yield different levels of + access to users joining the primary connection via this sharing profile. + Note that because configurations may contain sensitive information, some + data in this map may be omitted or tokenized.
          +
          +
          Specified by:
          +
          getParameters in interface SharingProfile
          +
          Returns:
          +
          A map which contains all connection parameter name/value pairs as + key/value pairs.
          +
          +
        • +
        + + + +
          +
        • +

          setParameters

          +
          public void setParameters​(Map<String,​String> parameters)
          +
          Description copied from interface: SharingProfile
          +
          Replaces all current parameters with the parameters defined within the + given map. Key/value pairs within the map represent parameter name/value + pairs. The differences in these parameters compared to those of the + associated primary connection yield different levels of access to users + joining the primary connection via this sharing profile.
          +
          +
          Specified by:
          +
          setParameters in interface SharingProfile
          +
          Parameters:
          +
          parameters - A map which contains all connection parameter name/value pairs as + key/value pairs.
          +
          +
        • +
        + + + +
          +
        • +

          hashCode

          +
          public int hashCode()
          +
          +
          Overrides:
          +
          hashCode in class Object
          +
          +
        • +
        + + + +
          +
        • +

          equals

          +
          public boolean equals​(Object obj)
          +
          +
          Overrides:
          +
          equals in class Object
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/AbstractUser.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/AbstractUser.html new file mode 100644 index 000000000..35571d600 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/AbstractUser.html @@ -0,0 +1,785 @@ + + + + + +AbstractUser (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class AbstractUser

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          AbstractUser

          +
          public AbstractUser()
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getPassword

          +
          public String getPassword()
          +
          Description copied from interface: User
          +
          Returns this user's password. Note that the password returned may be + hashed or completely arbitrary.
          +
          +
          Specified by:
          +
          getPassword in interface User
          +
          Returns:
          +
          A String which may (or may not) be the user's password.
          +
          +
        • +
        + + + +
          +
        • +

          setPassword

          +
          public void setPassword​(String password)
          +
          Description copied from interface: User
          +
          Sets this user's password. Note that while this function is guaranteed + to change the password of this User object, there is no guarantee that + getPassword() will return the value given to setPassword().
          +
          +
          Specified by:
          +
          setPassword in interface User
          +
          Parameters:
          +
          password - The password to set.
          +
          +
        • +
        + + + +
          +
        • +

          getAttributes

          +
          public Map<String,​String> getAttributes()
          +
          Returns all attributes associated with this object. The returned map + may not be modifiable. + +

          This implementation simply an immutable, empty map. Implementations + that wish to expose custom attributes should override this function.

          +
          +
          Specified by:
          +
          getAttributes in interface ReadableAttributes
          +
          Returns:
          +
          A map of all attribute identifiers to their corresponding values, + for all attributes associated with this object, which may not be + modifiable.
          +
          +
        • +
        + + + +
          +
        • +

          setAttributes

          +
          public void setAttributes​(Map<String,​String> attributes)
          +
          Sets the given attributes. If an attribute within the map is not + supported, it will simply be dropped. Any attributes not within the given + map will be left untouched. Attributes which are not declared within the + associated UserContext MUST NOT be submitted, but other extensions may + manipulate the declared attributes through decorate() and redecorate(). + + Implementations may optionally allow storage of unsupported attributes. + Extensions which rely on other extensions to store their attribute + values should verify that such storage is supported by first testing + that the attribute value is retrievable via getAttributes() after being + set. + +

          This implementation simply ignores all attributes given. + Implementations that wish to support modification of custom attributes + should override this function.

          +
          +
          Specified by:
          +
          setAttributes in interface Attributes
          +
          Parameters:
          +
          attributes - A map of all attribute identifiers to their corresponding values.
          +
          +
        • +
        + + + +
          +
        • +

          getLastActive

          +
          public Date getLastActive()
          +
          Returns the date and time that this user was last active. If the user + was never active, the time that the user was last active is unknown, or + this information is not visible to the current user, this may be null. + +

          This implementation simply returns null. Implementations that + wish to expose the date and time that a user was last active should + override this function.

          +
          +
          Specified by:
          +
          getLastActive in interface User
          +
          Returns:
          +
          The date and time this user was last active, or null if this + information is unavailable or inapplicable.
          +
          +
        • +
        + + + +
          +
        • +

          getSystemPermissions

          +
          public SystemPermissionSet getSystemPermissions()
          +                                         throws org.apache.guacamole.GuacamoleException
          +
          Returns all system-level permissions given to this object. + +

          This implementation simply an immutable, empty permission set. + Implementations that wish to expose permissions should override this + function.

          +
          +
          Specified by:
          +
          getSystemPermissions in interface Permissions
          +
          Returns:
          +
          A SystemPermissionSet of all system-level permissions granted to + this object.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving permissions, or if reading all + permissions is not allowed.
          +
          +
        • +
        + + + +
          +
        • +

          getConnectionPermissions

          +
          public ObjectPermissionSet getConnectionPermissions()
          +                                             throws org.apache.guacamole.GuacamoleException
          +
          Returns all connection permissions given to this object. + +

          This implementation simply an immutable, empty permission set. + Implementations that wish to expose permissions should override this + function.

          +
          +
          Specified by:
          +
          getConnectionPermissions in interface Permissions
          +
          Returns:
          +
          An ObjectPermissionSet of all connection permissions granted to this + object.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving permissions, or if reading all + permissions is not allowed.
          +
          +
        • +
        + + + +
          +
        • +

          getConnectionGroupPermissions

          +
          public ObjectPermissionSet getConnectionGroupPermissions()
          +                                                  throws org.apache.guacamole.GuacamoleException
          +
          Returns all connection group permissions given to this object. + +

          This implementation simply an immutable, empty permission set. + Implementations that wish to expose permissions should override this + function.

          +
          +
          Specified by:
          +
          getConnectionGroupPermissions in interface Permissions
          +
          Returns:
          +
          An ObjectPermissionSet of all connection group permissions granted + to this object.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving permissions, or if reading all + permissions is not allowed.
          +
          +
        • +
        + + + +
          +
        • +

          getUserPermissions

          +
          public ObjectPermissionSet getUserPermissions()
          +                                       throws org.apache.guacamole.GuacamoleException
          +
          Returns all user permissions given to this object. + +

          This implementation simply an immutable, empty permission set. + Implementations that wish to expose permissions should override this + function.

          +
          +
          Specified by:
          +
          getUserPermissions in interface Permissions
          +
          Returns:
          +
          An ObjectPermissionSet of all user permissions granted to this + object.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving permissions, or if reading all + permissions is not allowed.
          +
          +
        • +
        + + + +
          +
        • +

          getUserGroupPermissions

          +
          public ObjectPermissionSet getUserGroupPermissions()
          +                                            throws org.apache.guacamole.GuacamoleException
          +
          Returns all user group permissions given to this object. + +

          This implementation simply an immutable, empty permission set. + Implementations that wish to expose permissions should override this + function.

          +
          +
          Specified by:
          +
          getUserGroupPermissions in interface Permissions
          +
          Returns:
          +
          An ObjectPermissionSet of all user group permissions granted to this + object.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving permissions, or if reading all + permissions is not allowed.
          +
          +
        • +
        + + + +
          +
        • +

          getActiveConnectionPermissions

          +
          public ObjectPermissionSet getActiveConnectionPermissions()
          +                                                   throws org.apache.guacamole.GuacamoleException
          +
          Returns all permissions given to this object regarding currently-active + connections. + +

          This implementation simply an immutable, empty permission set. + Implementations that wish to expose permissions should override this + function.

          +
          +
          Specified by:
          +
          getActiveConnectionPermissions in interface Permissions
          +
          Returns:
          +
          An ObjectPermissionSet of all active connection permissions granted + to this object.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving permissions, or if reading all + permissions is not allowed.
          +
          +
        • +
        + + + +
          +
        • +

          getSharingProfilePermissions

          +
          public ObjectPermissionSet getSharingProfilePermissions()
          +
          Returns all sharing profile permissions given to this object. + +

          This implementation simply an immutable, empty permission set. + Implementations that wish to expose permissions should override this + function.

          +
          +
          Specified by:
          +
          getSharingProfilePermissions in interface Permissions
          +
          Returns:
          +
          An ObjectPermissionSet of all sharing profile permissions granted to + this object.
          +
          +
        • +
        + + + +
          +
        • +

          getUserGroups

          +
          public RelatedObjectSet getUserGroups()
          +                               throws org.apache.guacamole.GuacamoleException
          +
          Returns a set of all readable user groups of which this user is a member. + If permission is granted for the current user to modify the membership of + this user, then the returned set will be mutable, and any such + modifications should be made through changes to the returned set. + +

          This implementation simply an immutable, empty related object set. + Implementations that wish to expose group membership should override + this function.

          +
          +
          Specified by:
          +
          getUserGroups in interface User
          +
          Returns:
          +
          The set of all readable user groups of which this user is a member.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving the user groups.
          +
          +
        • +
        + + + +
          +
        • +

          getEffectivePermissions

          +
          public Permissions getEffectivePermissions()
          +                                    throws org.apache.guacamole.GuacamoleException
          +
          Returns a read-only view of all permissions granted to this user. The + exact semantics of what permissions are granted are up to the + implementation, and the permissions within this view may be implied, + derived dynamically, inherited through multiple levels of group + membership, etc. + +

          This implementation simply returns this. Implementations that + wish to expose permissions which apply indirectly (such as through + group inheritance) should override this function.

          +
          +
          Specified by:
          +
          getEffectivePermissions in interface User
          +
          Returns:
          +
          A read-only view of the permissions which are granted to this user.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving permissions, or if reading all + permissions is not allowed.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/AbstractUserContext.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/AbstractUserContext.html new file mode 100644 index 000000000..c3f0f9469 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/AbstractUserContext.html @@ -0,0 +1,953 @@ + + + + + +AbstractUserContext (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class AbstractUserContext

    +
    +
    + +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      UserContext
      +
      +
      +
      Direct Known Subclasses:
      +
      SimpleUserContext
      +
      +
      +
      public abstract class AbstractUserContext
      +extends Object
      +implements UserContext
      +
      Base implementation of UserContext which provides default implementations of + most functions. Implementations must provide their own UserContext.self() and + UserContext.getAuthenticationProvider(), but otherwise need only override an + implemented function if they wish to actually implement the functionality + defined for that function by the UserContext interface.
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      + +
      + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          AbstractUserContext

          +
          public AbstractUserContext()
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getResource

          +
          public Object getResource()
          +                   throws org.apache.guacamole.GuacamoleException
          +
          Returns an arbitrary REST resource representing this UserContext. The + REST resource returned must be properly annotated with JSR-311 + annotations, and may serve as the root resource for any number of + subresources. The returned resource is ultimately exposed at + ".../api/session/ext/IDENTIFIER/", where IDENTIFIER is the identifier of + the AuthenticationProvider associated with this UserContext. + + REST resources returned by this function will only be reachable by + authenticated users with valid authentication tokens. REST resources + which should be accessible by all users regardless of whether they have + authenticated should instead be returned from + AuthenticationProvider.getResource(). + +

          This implementation simply returns null. Implementations that + wish to expose REST resources specific to a user's session should + override this function.

          +
          +
          Specified by:
          +
          getResource in interface UserContext
          +
          Returns:
          +
          An arbitrary REST resource, annotated with JSR-311 annotations, or + null if no such resource is defined.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If the REST resource cannot be returned due to an error.
          +
          +
        • +
        + + + +
          +
        • +

          getUserDirectory

          +
          public Directory<User> getUserDirectory()
          +                                 throws org.apache.guacamole.GuacamoleException
          +
          Retrieves a Directory which can be used to view and manipulate other + users, but only as allowed by the permissions given to the user of this + UserContext. + +

          This implementation returns a Directory which contains only + the User returned by UserContext.self() (the current user + associated with this UserContext. Implementations that wish to + expose the existence of other users should override this function.

          +
          +
          Specified by:
          +
          getUserDirectory in interface UserContext
          +
          Returns:
          +
          A Directory whose operations are bound by the restrictions + of this UserContext.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while creating the + Directory.
          +
          +
        • +
        + + + +
          +
        • +

          getUserGroupDirectory

          +
          public Directory<UserGroup> getUserGroupDirectory()
          +                                           throws org.apache.guacamole.GuacamoleException
          +
          Retrieves a Directory which can be used to view and manipulate user + groups, but only as allowed by the permissions given to the user of this + UserContext. + +

          This implementation simply returns an empty Directory. + Implementations that wish to expose user groups should override this + function.

          +
          +
          Specified by:
          +
          getUserGroupDirectory in interface UserContext
          +
          Returns:
          +
          A Directory whose operations are bound by the restrictions + of this UserContext.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while creating the Directory.
          +
          +
        • +
        + + + +
          +
        • +

          getConnectionDirectory

          +
          public Directory<Connection> getConnectionDirectory()
          +                                             throws org.apache.guacamole.GuacamoleException
          +
          Retrieves a Directory which can be used to view and manipulate + connections and their configurations, but only as allowed by the + permissions given to the user. + +

          This implementation simply returns an empty Directory. + Implementations that wish to expose connections should override this + function.

          +
          +
          Specified by:
          +
          getConnectionDirectory in interface UserContext
          +
          Returns:
          +
          A Directory whose operations are bound by the permissions of + the user.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while creating the + Directory.
          +
          +
        • +
        + + + +
          +
        • +

          getConnectionGroupDirectory

          +
          public Directory<ConnectionGroup> getConnectionGroupDirectory()
          +                                                       throws org.apache.guacamole.GuacamoleException
          +
          Retrieves a Directory which can be used to view and manipulate + connection groups and their members, but only as allowed by the + permissions given to the user. + +

          This implementation returns a Directory which contains only + the root connection group returned by getRootConnectionGroup(). + Implementations that wish to provide a structured connection hierarchy + should override this function. If only a flat list of connections will + be used, only getConnectionDirectory() needs to be overridden.

          +
          +
          Specified by:
          +
          getConnectionGroupDirectory in interface UserContext
          +
          Returns:
          +
          A Directory whose operations are bound by the permissions of + the user.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while creating the + Directory.
          +
          +
        • +
        + + + +
          +
        • +

          getActiveConnectionDirectory

          +
          public Directory<ActiveConnection> getActiveConnectionDirectory()
          +                                                         throws org.apache.guacamole.GuacamoleException
          +
          Retrieves a Directory which can be used to view and manipulate + active connections, but only as allowed by the permissions given to the + user. + +

          This implementation simply returns an empty Directory. + Implementations that wish to expose the status of active connections + should override this function.

          +
          +
          Specified by:
          +
          getActiveConnectionDirectory in interface UserContext
          +
          Returns:
          +
          A Directory whose operations are bound by the permissions of the + user.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while creating the Directory.
          +
          +
        • +
        + + + +
          +
        • +

          getSharingProfileDirectory

          +
          public Directory<SharingProfile> getSharingProfileDirectory()
          +                                                     throws org.apache.guacamole.GuacamoleException
          +
          Retrieves a Directory which can be used to view and manipulate + sharing profiles and their configurations, but only as allowed by the + permissions given to the user. + +

          This implementation simply returns an empty Directory. + Implementations that wish to provide screen sharing functionality + through the use of sharing profiles should override this function.

          +
          +
          Specified by:
          +
          getSharingProfileDirectory in interface UserContext
          +
          Returns:
          +
          A Directory whose operations are bound by the permissions of the + user.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while creating the Directory.
          +
          +
        • +
        + + + +
          +
        • +

          getConnectionHistory

          +
          public ActivityRecordSet<ConnectionRecord> getConnectionHistory()
          +                                                         throws org.apache.guacamole.GuacamoleException
          +
          Retrieves all connection records visible to current user. Connection + history records describe the start and end times of connections, and + correspond to the times that users connect or disconnect to individual + remote desktops. The resulting set of connection records can be further + filtered and ordered using the methods defined on ActivityRecordSet. + +

          This implementation simply returns an empty ActivityRecordSet. + Implementations that wish to expose connection usage history should + override this function.

          +
          +
          Specified by:
          +
          getConnectionHistory in interface UserContext
          +
          Returns:
          +
          A set of all connection records visible to the current user.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving the connection records.
          +
          +
        • +
        + + + +
          +
        • +

          getUserHistory

          +
          public ActivityRecordSet<ActivityRecord> getUserHistory()
          +                                                 throws org.apache.guacamole.GuacamoleException
          +
          Retrieves all user history records visible to current user. User history + records describe the start and end times of user sessions, and correspond + to the times that users logged in or out. The resulting set of user + records can be further filtered and ordered using the methods defined on + ActivityRecordSet. + +

          This implementation simply returns an empty ActivityRecordSet. + Implementations that wish to expose user login/logout history should + override this function.

          +
          +
          Specified by:
          +
          getUserHistory in interface UserContext
          +
          Returns:
          +
          A set of all user records visible to the current user.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving the user records.
          +
          +
        • +
        + + + +
          +
        • +

          getRootConnectionGroup

          +
          public ConnectionGroup getRootConnectionGroup()
          +                                       throws org.apache.guacamole.GuacamoleException
          +
          Retrieves a connection group which can be used to view and manipulate + connections, but only as allowed by the permissions given to the user of + this UserContext. + +

          This implementation returns a new ConnectionGroup with the + identifier defined by DEFAULT_ROOT_CONNECTION_GROUP and + containing all connections exposed by the Directory returned by + getConnectionDirectory(). Implementations that wish to provide + a structured connection hierarchy should override this function. If only + a flat list of connections will be used, only + getConnectionDirectory() needs to be overridden.

          +
          +
          Specified by:
          +
          getRootConnectionGroup in interface UserContext
          +
          Returns:
          +
          A connection group whose operations are bound by the restrictions + of this UserContext.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while creating the + Directory.
          +
          +
        • +
        + + + +
          +
        • +

          getUserAttributes

          +
          public Collection<Form> getUserAttributes()
          +
          Retrieves a collection of all attributes applicable to users. This + collection will contain only those attributes which the current user has + general permission to view or modify. If there are no such attributes, + this collection will be empty. + +

          This implementation simply returns an empty Collection. + Implementations that wish to expose custom user attributes as fields + within user edit screens should override this function.

          +
          +
          Specified by:
          +
          getUserAttributes in interface UserContext
          +
          Returns:
          +
          A collection of all attributes applicable to users.
          +
          +
        • +
        + + + +
          +
        • +

          getUserGroupAttributes

          +
          public Collection<Form> getUserGroupAttributes()
          +
          Retrieves a collection of all attributes applicable to user groups. This + collection will contain only those attributes which the current user has + general permission to view or modify. If there are no such attributes, + this collection will be empty. + +

          This implementation simply returns an empty Collection. + Implementations that wish to expose custom user group attributes as + fields within user group edit screens should override this function.

          +
          +
          Specified by:
          +
          getUserGroupAttributes in interface UserContext
          +
          Returns:
          +
          A collection of all attributes applicable to user groups.
          +
          +
        • +
        + + + +
          +
        • +

          getConnectionAttributes

          +
          public Collection<Form> getConnectionAttributes()
          +
          Retrieves a collection of all attributes applicable to connections. This + collection will contain only those attributes which the current user has + general permission to view or modify. If there are no such attributes, + this collection will be empty. + +

          This implementation simply returns an empty Collection. + Implementations that wish to expose custom connection attributes as + fields within connection edit screens should override this function.

          +
          +
          Specified by:
          +
          getConnectionAttributes in interface UserContext
          +
          Returns:
          +
          A collection of all attributes applicable to connections.
          +
          +
        • +
        + + + +
          +
        • +

          getConnectionGroupAttributes

          +
          public Collection<Form> getConnectionGroupAttributes()
          +
          Retrieves a collection of all attributes applicable to connection + groups. This collection will contain only those attributes which the + current user has general permission to view or modify. If there are no + such attributes, this collection will be empty. + +

          This implementation simply returns an empty Collection. + Implementations that wish to expose custom connection group attributes + as fields within connection group edit screens should override this + function.

          +
          +
          Specified by:
          +
          getConnectionGroupAttributes in interface UserContext
          +
          Returns:
          +
          A collection of all attributes applicable to connection groups.
          +
          +
        • +
        + + + +
          +
        • +

          getSharingProfileAttributes

          +
          public Collection<Form> getSharingProfileAttributes()
          +
          Retrieves a collection of all attributes applicable to sharing profiles. + This collection will contain only those attributes which the current user + has general permission to view or modify. If there are no such + attributes, this collection will be empty. + +

          This implementation simply returns an empty Collection. + Implementations that wish to expose custom sharing profile attributes as + fields within sharing profile edit screens should override this function.

          +
          +
          Specified by:
          +
          getSharingProfileAttributes in interface UserContext
          +
          Returns:
          +
          A collection of all attributes applicable to sharing profile.
          +
          +
        • +
        + + + +
          +
        • +

          invalidate

          +
          public void invalidate()
          +
          Invalidates this user context, releasing all associated resources. This + function will be invoked when the user logs out, or when their session + is automatically invalidated. + +

          This implementation does nothing. Implementations that wish to perform + cleanup tasks when the user associated with this UserContext is + being logged out should override this function.

          +
          +
          Specified by:
          +
          invalidate in interface UserContext
          +
          +
        • +
        + + + +
          +
        • +

          getPrivileged

          +
          public UserContext getPrivileged()
          +
          Returns a user context which provides privileged access. Unlike the + original user context, which is required to enforce its own permissions + and act only within the rights of the associated user, the user context + returned by this function MAY ignore the restrictions that otherwise + limit the current user's access. + +

          This function is intended to allow extensions which decorate other + extensions to act independently of the restrictions that affect the + current user. This function will only be invoked by extensions and + WILL NOT be invoked directly by the web application. Implementations of + this function MAY still enforce access restrictions, particularly if + they do not want to grant full, unrestricted access to other extensions. + +

          A default implementation which simply returns this is + provided for compatibility with Apache Guacamole 1.1.0 and older. + +

          This implementation simply returns this. Implementations + that wish to provide additional privileges to extensions requesting + privileged access should override this function.

          +
          +
          Specified by:
          +
          getPrivileged in interface UserContext
          +
          Returns:
          +
          A user context instance which MAY ignore some or all restrictions + which otherwise limit the current user's access.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/AbstractUserGroup.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/AbstractUserGroup.html new file mode 100644 index 000000000..459d52fad --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/AbstractUserGroup.html @@ -0,0 +1,717 @@ + + + + + +AbstractUserGroup (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class AbstractUserGroup

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          AbstractUserGroup

          +
          public AbstractUserGroup()
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getAttributes

          +
          public Map<String,​String> getAttributes()
          +
          Returns all attributes associated with this object. The returned map + may not be modifiable. + +

          This implementation simply an immutable, empty map. Implementations + that wish to expose custom attributes should override this function.

          +
          +
          Specified by:
          +
          getAttributes in interface ReadableAttributes
          +
          Returns:
          +
          A map of all attribute identifiers to their corresponding values, + for all attributes associated with this object, which may not be + modifiable.
          +
          +
        • +
        + + + +
          +
        • +

          setAttributes

          +
          public void setAttributes​(Map<String,​String> attributes)
          +
          Sets the given attributes. If an attribute within the map is not + supported, it will simply be dropped. Any attributes not within the given + map will be left untouched. Attributes which are not declared within the + associated UserContext MUST NOT be submitted, but other extensions may + manipulate the declared attributes through decorate() and redecorate(). + + Implementations may optionally allow storage of unsupported attributes. + Extensions which rely on other extensions to store their attribute + values should verify that such storage is supported by first testing + that the attribute value is retrievable via getAttributes() after being + set. + +

          This implementation simply ignores all attributes given. + Implementations that wish to support modification of custom attributes + should override this function.

          +
          +
          Specified by:
          +
          setAttributes in interface Attributes
          +
          Parameters:
          +
          attributes - A map of all attribute identifiers to their corresponding values.
          +
          +
        • +
        + + + +
          +
        • +

          getSystemPermissions

          +
          public SystemPermissionSet getSystemPermissions()
          +                                         throws org.apache.guacamole.GuacamoleException
          +
          Returns all system-level permissions given to this object. + +

          This implementation simply an immutable, empty permission set. + Implementations that wish to expose permissions should override this + function.

          +
          +
          Specified by:
          +
          getSystemPermissions in interface Permissions
          +
          Returns:
          +
          A SystemPermissionSet of all system-level permissions granted to + this object.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving permissions, or if reading all + permissions is not allowed.
          +
          +
        • +
        + + + +
          +
        • +

          getConnectionPermissions

          +
          public ObjectPermissionSet getConnectionPermissions()
          +                                             throws org.apache.guacamole.GuacamoleException
          +
          Returns all connection permissions given to this object. + +

          This implementation simply an immutable, empty permission set. + Implementations that wish to expose permissions should override this + function.

          +
          +
          Specified by:
          +
          getConnectionPermissions in interface Permissions
          +
          Returns:
          +
          An ObjectPermissionSet of all connection permissions granted to this + object.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving permissions, or if reading all + permissions is not allowed.
          +
          +
        • +
        + + + +
          +
        • +

          getConnectionGroupPermissions

          +
          public ObjectPermissionSet getConnectionGroupPermissions()
          +                                                  throws org.apache.guacamole.GuacamoleException
          +
          Returns all connection group permissions given to this object. + +

          This implementation simply an immutable, empty permission set. + Implementations that wish to expose permissions should override this + function.

          +
          +
          Specified by:
          +
          getConnectionGroupPermissions in interface Permissions
          +
          Returns:
          +
          An ObjectPermissionSet of all connection group permissions granted + to this object.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving permissions, or if reading all + permissions is not allowed.
          +
          +
        • +
        + + + +
          +
        • +

          getUserPermissions

          +
          public ObjectPermissionSet getUserPermissions()
          +                                       throws org.apache.guacamole.GuacamoleException
          +
          Returns all user permissions given to this object. + +

          This implementation simply an immutable, empty permission set. + Implementations that wish to expose permissions should override this + function.

          +
          +
          Specified by:
          +
          getUserPermissions in interface Permissions
          +
          Returns:
          +
          An ObjectPermissionSet of all user permissions granted to this + object.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving permissions, or if reading all + permissions is not allowed.
          +
          +
        • +
        + + + +
          +
        • +

          getUserGroupPermissions

          +
          public ObjectPermissionSet getUserGroupPermissions()
          +                                            throws org.apache.guacamole.GuacamoleException
          +
          Returns all user group permissions given to this object. + +

          This implementation simply an immutable, empty permission set. + Implementations that wish to expose permissions should override this + function.

          +
          +
          Specified by:
          +
          getUserGroupPermissions in interface Permissions
          +
          Returns:
          +
          An ObjectPermissionSet of all user group permissions granted to this + object.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving permissions, or if reading all + permissions is not allowed.
          +
          +
        • +
        + + + +
          +
        • +

          getActiveConnectionPermissions

          +
          public ObjectPermissionSet getActiveConnectionPermissions()
          +                                                   throws org.apache.guacamole.GuacamoleException
          +
          Returns all permissions given to this object regarding currently-active + connections. + +

          This implementation simply an immutable, empty permission set. + Implementations that wish to expose permissions should override this + function.

          +
          +
          Specified by:
          +
          getActiveConnectionPermissions in interface Permissions
          +
          Returns:
          +
          An ObjectPermissionSet of all active connection permissions granted + to this object.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving permissions, or if reading all + permissions is not allowed.
          +
          +
        • +
        + + + +
          +
        • +

          getSharingProfilePermissions

          +
          public ObjectPermissionSet getSharingProfilePermissions()
          +
          Returns all sharing profile permissions given to this object. + +

          This implementation simply an immutable, empty permission set. + Implementations that wish to expose permissions should override this + function.

          +
          +
          Specified by:
          +
          getSharingProfilePermissions in interface Permissions
          +
          Returns:
          +
          An ObjectPermissionSet of all sharing profile permissions granted to + this object.
          +
          +
        • +
        + + + +
          +
        • +

          getUserGroups

          +
          public RelatedObjectSet getUserGroups()
          +                               throws org.apache.guacamole.GuacamoleException
          +
          Returns a set of all readable user groups of which this user group is a + member. If permission is granted for the current user to modify the + membership of this user group, then the returned set will be mutable, + and any such modifications should be made through changes to the + returned set. + +

          This implementation simply an immutable, empty related object set. + Implementations that wish to expose group membership should override + this function.

          +
          +
          Specified by:
          +
          getUserGroups in interface UserGroup
          +
          Returns:
          +
          The set of all readable user groups of which this user group is a + member.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving the user groups.
          +
          +
        • +
        + + + +
          +
        • +

          getMemberUsers

          +
          public RelatedObjectSet getMemberUsers()
          +                                throws org.apache.guacamole.GuacamoleException
          +
          Returns a set of all readable users that are members of this user group. + If permission is granted for the current user to modify the members of + this group, then the returned set will be mutable, and any such + modifications should be made through changes to the returned set. + +

          This implementation simply an immutable, empty related object set. + Implementations that wish to expose group membership should override + this function.

          +
          +
          Specified by:
          +
          getMemberUsers in interface UserGroup
          +
          Returns:
          +
          The set all readable users that are members of this user group, + which may be mutable.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving the users.
          +
          +
        • +
        + + + +
          +
        • +

          getMemberUserGroups

          +
          public RelatedObjectSet getMemberUserGroups()
          +                                     throws org.apache.guacamole.GuacamoleException
          +
          Returns a set of all readable user groups that are members of this user + group. If permission is granted for the current user to modify the + members of this group, then the returned set will be mutable, and any + such modifications should be made through changes to the returned set. + +

          This implementation simply an immutable, empty related object set. + Implementations that wish to expose group membership should override + this function.

          +
          +
          Specified by:
          +
          getMemberUserGroups in interface UserGroup
          +
          Returns:
          +
          The set of all readable user groups that are members of this user + group, which may be mutable.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving the user groups.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/ActiveConnection.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/ActiveConnection.html new file mode 100644 index 000000000..48ff5133d --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/ActiveConnection.html @@ -0,0 +1,633 @@ + + + + + +ActiveConnection (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface ActiveConnection

    +
    +
    +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getConnectionIdentifier

          +
          String getConnectionIdentifier()
          +
          Returns the identifier of the connection being actively used. Unlike the + other information stored in this object, the connection identifier must + be present and MAY NOT be null.
          +
          +
          Returns:
          +
          The identifier of the connection being actively used.
          +
          +
        • +
        + + + +
          +
        • +

          setConnectionIdentifier

          +
          void setConnectionIdentifier​(String connnectionIdentifier)
          +
          Sets the identifier of the connection being actively used.
          +
          +
          Parameters:
          +
          connnectionIdentifier - The identifier of the connection being actively used.
          +
          +
        • +
        + + + +
          +
        • +

          getSharingProfileIdentifier

          +
          String getSharingProfileIdentifier()
          +
          Returns the identifier of the sharing profile being actively used. If + the connection is being accessed directly, this will be null.
          +
          +
          Returns:
          +
          The identifier of the sharing profile being actively used.
          +
          +
        • +
        + + + +
          +
        • +

          setSharingProfileIdentifier

          +
          void setSharingProfileIdentifier​(String sharingProfileIdentifier)
          +
          Sets the identifier of the sharing profile being actively used.
          +
          +
          Parameters:
          +
          sharingProfileIdentifier - The identifier of the sharing profile being actively used.
          +
          +
        • +
        + + + +
          +
        • +

          getStartDate

          +
          Date getStartDate()
          +
          Returns the date and time the connection began.
          +
          +
          Returns:
          +
          The date and time the connection began, or null if this + information is not available.
          +
          +
        • +
        + + + +
          +
        • +

          setStartDate

          +
          void setStartDate​(Date startDate)
          +
          Sets the date and time the connection began.
          +
          +
          Parameters:
          +
          startDate - The date and time the connection began, or null if this + information is not available.
          +
          +
        • +
        + + + +
          +
        • +

          getRemoteHost

          +
          String getRemoteHost()
          +
          Returns the hostname or IP address of the remote host that initiated the + connection, if known. If the hostname or IP address is not known, null + is returned.
          +
          +
          Returns:
          +
          The hostname or IP address of the remote host, or null if this + information is not available.
          +
          +
        • +
        + + + +
          +
        • +

          setRemoteHost

          +
          void setRemoteHost​(String remoteHost)
          +
          Sets the hostname or IP address of the remote host that initiated the + connection.
          +
          +
          Parameters:
          +
          remoteHost - The hostname or IP address of the remote host, or null if this + information is not available.
          +
          +
        • +
        + + + +
          +
        • +

          getUsername

          +
          String getUsername()
          +
          Returns the name of the user who is using this connection.
          +
          +
          Returns:
          +
          The name of the user who is using this connection, or null if this + information is not available.
          +
          +
        • +
        + + + +
          +
        • +

          setUsername

          +
          void setUsername​(String username)
          +
          Sets the name of the user who is using this connection.
          +
          +
          Parameters:
          +
          username - The name of the user who is using this connection, or null if this + information is not available.
          +
          +
        • +
        + + + +
          +
        • +

          getTunnel

          +
          org.apache.guacamole.net.GuacamoleTunnel getTunnel()
          +
          Returns the connected GuacamoleTunnel being used. This may be null if + access to the underlying tunnel is denied.
          +
          +
          Returns:
          +
          The connected GuacamoleTunnel, or null if permission is denied.
          +
          +
        • +
        + + + +
          +
        • +

          setTunnel

          +
          void setTunnel​(org.apache.guacamole.net.GuacamoleTunnel tunnel)
          +
          Sets the connected GuacamoleTunnel being used.
          +
          +
          Parameters:
          +
          tunnel - The connected GuacamoleTunnel, or null if permission is denied.
          +
          +
        • +
        + + + + + + + +
          +
        • +

          connect

          +
          default org.apache.guacamole.net.GuacamoleTunnel connect​(org.apache.guacamole.protocol.GuacamoleClientInformation info,
          +                                                         Map<String,​String> tokens)
          +                                                  throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: Connectable
          +
          Establishes a connection to guacd using the information associated with + this object. The connection will be provided the given client + information. Implementations which support parameter tokens should + apply the given tokens when configuring the connection, such as with a + TokenFilter.
          +
          +
          Specified by:
          +
          connect in interface Connectable
          +
          Parameters:
          +
          info - Information associated with the connecting client.
          +
          tokens - A Map containing the token names and corresponding values to be + applied as parameter tokens when establishing the connection. If the + implementation does not support parameter tokens, this Map may be + ignored.
          +
          Returns:
          +
          A fully-established GuacamoleTunnel.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while connecting to guacd, or if permission to + connect is denied.
          +
          See Also:
          +
          Parameter Tokens
          +
          +
        • +
        + + + +
          +
        • +

          getActiveConnections

          +
          default int getActiveConnections()
          +
          Description copied from interface: Connectable
          +
          Returns the number of active connections associated with this object. + Implementations may simply return 0 if this value is not tracked.
          +
          +
          Specified by:
          +
          getActiveConnections in interface Connectable
          +
          Returns:
          +
          The number of active connections associated with this object.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/ActivityLog.Type.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/ActivityLog.Type.html new file mode 100644 index 000000000..ebb7e9393 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/ActivityLog.Type.html @@ -0,0 +1,450 @@ + + + + + +ActivityLog.Type (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Enum ActivityLog.Type

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Enum Constant Detail

        + + + +
          +
        • +

          GUACAMOLE_SESSION_RECORDING

          +
          public static final ActivityLog.Type GUACAMOLE_SESSION_RECORDING
          +
          A Guacamole session recording in the form of a Guacamole protocol + dump.
          +
        • +
        + + + +
          +
        • +

          SERVER_LOG

          +
          public static final ActivityLog.Type SERVER_LOG
          +
          A text log from a server-side process, such as the Guacamole web + application or guacd.
          +
        • +
        + + + +
          +
        • +

          TYPESCRIPT

          +
          public static final ActivityLog.Type TYPESCRIPT
          +
          A text session recording in the form of a standard typescript.
          +
        • +
        + + + +
          +
        • +

          TYPESCRIPT_TIMING

          +
          public static final ActivityLog.Type TYPESCRIPT_TIMING
          +
          The timing file related to a typescript.
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          values

          +
          public static ActivityLog.Type[] values()
          +
          Returns an array containing the constants of this enum type, in +the order they are declared. This method may be used to iterate +over the constants as follows: +
          +for (ActivityLog.Type c : ActivityLog.Type.values())
          +    System.out.println(c);
          +
          +
          +
          Returns:
          +
          an array containing the constants of this enum type, in the order they are declared
          +
          +
        • +
        + + + +
          +
        • +

          valueOf

          +
          public static ActivityLog.Type valueOf​(String name)
          +
          Returns the enum constant of this type with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this type. (Extraneous whitespace characters are +not permitted.)
          +
          +
          Parameters:
          +
          name - the name of the enum constant to be returned.
          +
          Returns:
          +
          the enum constant with the specified name
          +
          Throws:
          +
          IllegalArgumentException - if this enum type has no constant with the specified name
          +
          NullPointerException - if the argument is null
          +
          +
        • +
        + + + +
          +
        • +

          getContentType

          +
          public String getContentType()
          +
          Returns the MIME type of the content of an activity log of this + type, as might be sent via the HTTP "Content-Type" header.
          +
          +
          Returns:
          +
          The MIME type of the content of an activity log of this type.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/ActivityLog.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/ActivityLog.html new file mode 100644 index 000000000..cb5f1cbb1 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/ActivityLog.html @@ -0,0 +1,421 @@ + + + + + +ActivityLog (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface ActivityLog

    +
    +
    +
    +
      +
    • +
      +
      All Known Implementing Classes:
      +
      AbstractActivityLog, FileActivityLog
      +
      +
      +
      public interface ActivityLog
      +
      An arbitrary log of an activity whose content may be exposed to a user with + sufficient privileges. Types of content that might be exposed in this way + include textual server logs, Guacamole session recordings, and typescripts.
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Nested Class Summary

        + + + + + + + + + + + + +
        Nested Classes 
        Modifier and TypeInterfaceDescription
        static class ActivityLog.Type +
        All possible types of ActivityLog.
        +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Field Summary

        + + + + + + + + + + + + +
        Fields 
        Modifier and TypeFieldDescription
        static longUNKNOWN_SIZE +
        The value returned by getSize() if the number of available + bytes within getContent() is unknown.
        +
        +
      • +
      +
      + +
      + +
      +
    • +
    +
    +
    +
      +
    • + +
      + +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getType

          +
          ActivityLog.Type getType()
          +
          Returns the type of this activity log. The type of an activity log + dictates how its content should be interpreted or exposed.
          +
          +
          Returns:
          +
          The type of this activity log.
          +
          +
        • +
        + + + +
          +
        • +

          getDescription

          +
          TranslatableMessage getDescription()
          +
          Returns a human-readable message that describes this log. This message + should provide sufficient information for a user with access to this + log to understand its context and/or purpose.
          +
          +
          Returns:
          +
          A human-readable message that describes this log.
          +
          +
        • +
        + + + +
          +
        • +

          getSize

          +
          long getSize()
          +      throws org.apache.guacamole.GuacamoleException
          +
          Returns the number of bytes available for reading within the content of + this log. If this value is unknown, -1 (UNKNOWN_SIZE) should be + returned.
          +
          +
          Returns:
          +
          The number of bytes available for reading within the content of + this log, or -1 (UNKNOWN_SIZE) if this value is unknown.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If the size of the content of this log cannot be determined due to + an error.
          +
          +
        • +
        + + + +
          +
        • +

          getContent

          +
          InputStream getContent()
          +                throws org.apache.guacamole.GuacamoleException
          +
          Returns an InputStream that allows the content of this log to be read. + Multiple instances of this InputStream may be open at any given time. It + is the responsibility of the caller to close the returned InputStream.
          +
          +
          Returns:
          +
          An InputStream that allows the content of this log to be read.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If the content of this log cannot be read due to an error.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/ActivityRecord.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/ActivityRecord.html new file mode 100644 index 000000000..7831c4b53 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/ActivityRecord.html @@ -0,0 +1,472 @@ + + + + + +ActivityRecord (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface ActivityRecord

    +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        All Methods Instance Methods Abstract Methods Default Methods 
        Modifier and TypeMethodDescription
        default Map<String,​String>getAttributes() +
        Returns all attributes associated with this object.
        +
        DategetEndDate() +
        Returns the date and time the activity ended, if applicable.
        +
        default StringgetIdentifier() +
        Returns the unique identifier assigned to this record, if any.
        +
        default Map<String,​ActivityLog>getLogs() +
        Returns a Map of logs related to this record and accessible by the + current user, such as Guacamole session recordings.
        +
        StringgetRemoteHost() +
        Returns the hostname or IP address of the remote host that performed the + activity associated with this record, if known.
        +
        DategetStartDate() +
        Returns the date and time the activity began.
        +
        StringgetUsername() +
        Returns the name of the user who performed or is performing the activity + at the times given by this record.
        +
        default UUIDgetUUID() +
        Returns a UUID that uniquely identifies this record.
        +
        booleanisActive() +
        Returns whether the activity associated with this record is still + ongoing.
        +
        +
      • +
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getStartDate

          +
          Date getStartDate()
          +
          Returns the date and time the activity began.
          +
          +
          Returns:
          +
          The date and time the activity began.
          +
          +
        • +
        + + + +
          +
        • +

          getEndDate

          +
          Date getEndDate()
          +
          Returns the date and time the activity ended, if applicable.
          +
          +
          Returns:
          +
          The date and time the activity ended, or null if the activity is + still ongoing or if the end time is unknown.
          +
          +
        • +
        + + + +
          +
        • +

          getRemoteHost

          +
          String getRemoteHost()
          +
          Returns the hostname or IP address of the remote host that performed the + activity associated with this record, if known. If the hostname or IP + address is not known, null is returned.
          +
          +
          Returns:
          +
          The hostname or IP address of the remote host, or null if this + information is not available.
          +
          +
        • +
        + + + +
          +
        • +

          getUsername

          +
          String getUsername()
          +
          Returns the name of the user who performed or is performing the activity + at the times given by this record.
          +
          +
          Returns:
          +
          The name of the user who performed or is performing the associated + activity.
          +
          +
        • +
        + + + +
          +
        • +

          isActive

          +
          boolean isActive()
          +
          Returns whether the activity associated with this record is still + ongoing.
          +
          +
          Returns:
          +
          true if the activity associated with this record is still ongoing, + false otherwise.
          +
          +
        • +
        + + + +
          +
        • +

          getIdentifier

          +
          default String getIdentifier()
          +
          Returns the unique identifier assigned to this record, if any. If this + record is not uniquely identifiable, this may be null. If provided, this + unique identifier MUST be unique across all ActivityRecord + objects within the same ActivityRecordSet.
          +
          +
          Returns:
          +
          The unique identifier assigned to this record, or null if this + record has no such identifier.
          +
          +
        • +
        + + + +
          +
        • +

          getUUID

          +
          default UUID getUUID()
          +
          Returns a UUID that uniquely identifies this record. If provided, this + UUID MUST be deterministic and unique across all ActivityRecord + objects within the same ActivityRecordSet, and SHOULD be unique + across all ActivityRecord objects.
          +
          +
          Returns:
          +
          A UUID that uniquely identifies this record, or null if no such + unique identifier exists.
          +
          +
        • +
        + + + +
          +
        • +

          getLogs

          +
          default Map<String,​ActivityLog> getLogs()
          +
          Returns a Map of logs related to this record and accessible by the + current user, such as Guacamole session recordings. Each log is + associated with a corresponding, arbitrary, unique name. If the user + does not have access to any logs, or if no logs are available, this may + be an empty map.
          +
          +
          Returns:
          +
          A Map of logs related to this record.
          +
          +
        • +
        + + + +
          +
        • +

          getAttributes

          +
          default Map<String,​String> getAttributes()
          +
          Description copied from interface: ReadableAttributes
          +
          Returns all attributes associated with this object. The returned map + may not be modifiable.
          +
          +
          Specified by:
          +
          getAttributes in interface ReadableAttributes
          +
          Returns:
          +
          A map of all attribute identifiers to their corresponding values, + for all attributes associated with this object, which may not be + modifiable.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/ActivityRecordSet.SortableProperty.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/ActivityRecordSet.SortableProperty.html new file mode 100644 index 000000000..22e74cd52 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/ActivityRecordSet.SortableProperty.html @@ -0,0 +1,378 @@ + + + + + +ActivityRecordSet.SortableProperty (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Enum ActivityRecordSet.SortableProperty

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
      + +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          values

          +
          public static ActivityRecordSet.SortableProperty[] values()
          +
          Returns an array containing the constants of this enum type, in +the order they are declared. This method may be used to iterate +over the constants as follows: +
          +for (ActivityRecordSet.SortableProperty c : ActivityRecordSet.SortableProperty.values())
          +    System.out.println(c);
          +
          +
          +
          Returns:
          +
          an array containing the constants of this enum type, in the order they are declared
          +
          +
        • +
        + + + +
          +
        • +

          valueOf

          +
          public static ActivityRecordSet.SortableProperty valueOf​(String name)
          +
          Returns the enum constant of this type with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this type. (Extraneous whitespace characters are +not permitted.)
          +
          +
          Parameters:
          +
          name - the name of the enum constant to be returned.
          +
          Returns:
          +
          the enum constant with the specified name
          +
          Throws:
          +
          IllegalArgumentException - if this enum type has no constant with the specified name
          +
          NullPointerException - if the argument is null
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/ActivityRecordSet.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/ActivityRecordSet.html new file mode 100644 index 000000000..4d24c6896 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/ActivityRecordSet.html @@ -0,0 +1,437 @@ + + + + + +ActivityRecordSet (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface ActivityRecordSet<RecordType extends ActivityRecord>

    +
    +
    +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          asCollection

          +
          Collection<RecordType> asCollection()
          +                             throws org.apache.guacamole.GuacamoleException
          +
          Returns all records within this set as a standard Collection.
          +
          +
          Returns:
          +
          A collection containing all records within this set.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving the records within this set.
          +
          +
        • +
        + + + +
          +
        • +

          get

          +
          default RecordType get​(String identifier)
          +                throws org.apache.guacamole.GuacamoleException
          +
          Returns the record having the given unique identifier, if records within + this set have unique identifiers. If records within this set do not have + defined unique identifiers, this function has no effect.
          +
          +
          Parameters:
          +
          identifier - The unique identifier of the record to retrieve.
          +
          Returns:
          +
          The record having the given unique identifier, or null if there is + no such record.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving the record.
          +
          +
        • +
        + + + +
          +
        • +

          contains

          +
          ActivityRecordSet<RecordType> contains​(String value)
          +                                throws org.apache.guacamole.GuacamoleException
          +
          Returns the subset of records which contain the given value. The + properties and semantics involved with determining whether a particular + record "contains" the given value is implementation dependent. This + function may affect the contents of the current ActivityRecordSet. The + contents of the current ActivityRecordSet should NOT be relied upon + after this function is called.
          +
          +
          Parameters:
          +
          value - The value which all records within the resulting subset should + contain.
          +
          Returns:
          +
          The subset of records which contain the specified value.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while restricting the current subset.
          +
          +
        • +
        + + + +
          +
        • +

          limit

          +
          ActivityRecordSet<RecordType> limit​(int limit)
          +                             throws org.apache.guacamole.GuacamoleException
          +
          Returns the subset of records containing only the first + limit records. If the subset has fewer than + limit records, then this function has no effect. This + function may also affect the contents of the current ActivityRecordSet. + The contents of the current ActivityRecordSet should NOT be relied upon + after this function is called.
          +
          +
          Parameters:
          +
          limit - The maximum number of records that the new subset should contain.
          +
          Returns:
          +
          The subset of records that containing only the first + limit records.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while limiting the current subset.
          +
          +
        • +
        + + + +
          +
        • +

          sort

          +
          ActivityRecordSet<RecordType> sort​(ActivityRecordSet.SortableProperty property,
          +                                   boolean desc)
          +                            throws org.apache.guacamole.GuacamoleException
          +
          Returns a ActivityRecordSet containing identically the records within + this set, sorted according to the specified criteria. The sort operation + performed is guaranteed to be stable with respect to any past call to + sort(). This function may also affect the contents of the current + ActivityRecordSet. The contents of the current ActivityRecordSet + should NOT be relied upon after this function is called.
          +
          +
          Parameters:
          +
          property - The property by which the records within the resulting set should be + sorted.
          +
          desc - Whether the records should be sorted according to the specified + property in descending order. If false, records will be sorted + according to the specified property in ascending order.
          +
          Returns:
          +
          The ActivityRecordSet, sorted according to the specified criteria.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while sorting the current subset, or if the given + property is not supported by the implementation.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/Attributes.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/Attributes.html new file mode 100644 index 000000000..cebfefca4 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/Attributes.html @@ -0,0 +1,291 @@ + + + + + +Attributes (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface Attributes

    +
    +
    +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          setAttributes

          +
          void setAttributes​(Map<String,​String> attributes)
          +
          Sets the given attributes. If an attribute within the map is not + supported, it will simply be dropped. Any attributes not within the given + map will be left untouched. Attributes which are not declared within the + associated UserContext MUST NOT be submitted, but other extensions may + manipulate the declared attributes through decorate() and redecorate(). + + Implementations may optionally allow storage of unsupported attributes. + Extensions which rely on other extensions to store their attribute + values should verify that such storage is supported by first testing + that the attribute value is retrievable via getAttributes() after being + set.
          +
          +
          Parameters:
          +
          attributes - A map of all attribute identifiers to their corresponding values.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/AuthenticatedUser.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/AuthenticatedUser.html new file mode 100644 index 000000000..3daeece08 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/AuthenticatedUser.html @@ -0,0 +1,403 @@ + + + + + +AuthenticatedUser (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface AuthenticatedUser

    +
    +
    +
    +
      +
    • +
      +
      All Superinterfaces:
      +
      Identifiable
      +
      +
      +
      All Known Implementing Classes:
      +
      AbstractAuthenticatedUser
      +
      +
      +
      public interface AuthenticatedUser
      +extends Identifiable
      +
      A user of the Guacamole web application who has been authenticated by an + AuthenticationProvider.
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          ANONYMOUS_IDENTIFIER

          +
          static final String ANONYMOUS_IDENTIFIER
          +
          The identifier reserved for representing a user that has authenticated + anonymously.
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getAuthenticationProvider

          +
          AuthenticationProvider getAuthenticationProvider()
          +
          Returns the AuthenticationProvider that authenticated this user.
          +
          +
          Returns:
          +
          The AuthenticationProvider that authenticated this user.
          +
          +
        • +
        + + + +
          +
        • +

          getCredentials

          +
          Credentials getCredentials()
          +
          Returns the credentials that the user provided when they successfully + authenticated.
          +
          +
          Returns:
          +
          The credentials provided by the user when they authenticated.
          +
          +
        • +
        + + + +
          +
        • +

          getEffectiveUserGroups

          +
          Set<String> getEffectiveUserGroups()
          +
          Returns a read-only set of the identifiers of all user groups which + apply to this authenticated user. The exact semantics of what user + groups apply are up to the implementation, and the user groups within + this set may be implied, derived dynamically, inherited through multiple + levels of group membership, etc. + + Note that, as with user identifiers, user group identifiers form the + basis of identity which applies across authentication providers. It is + expected that any two user groups having the same identifier represent + the same group, even if defined by different authentication providers.
          +
          +
          Returns:
          +
          A read-only set of the identifiers of all user groups which apply + to this authenticated user.
          +
          +
        • +
        + + + +
          +
        • +

          invalidate

          +
          void invalidate()
          +
          Invalidates this authenticated user and their associated token such that + they are no longer logged in. This function will be automatically + invoked when the user logs out, or when their session expires.
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/AuthenticationProvider.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/AuthenticationProvider.html new file mode 100644 index 000000000..c2f5f3008 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/AuthenticationProvider.html @@ -0,0 +1,578 @@ + + + + + +AuthenticationProvider (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface AuthenticationProvider

    +
    +
    +
    +
      +
    • +
      +
      All Known Implementing Classes:
      +
      AbstractAuthenticationProvider, SimpleAuthenticationProvider
      +
      +
      +
      public interface AuthenticationProvider
      +
      Provides means of authorizing users and for accessing and managing data + associated with those users. Access to such data is limited according to the + AuthenticationProvider implementation.
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getIdentifier

          +
          String getIdentifier()
          +
          Returns the identifier which uniquely and consistently identifies this + AuthenticationProvider implementation. This identifier may not be null + and must be unique across all AuthenticationProviders loaded by the + Guacamole web application.
          +
          +
          Returns:
          +
          The unique identifier assigned to this AuthenticationProvider, which + may not be null.
          +
          +
        • +
        + + + +
          +
        • +

          getResource

          +
          Object getResource()
          +            throws org.apache.guacamole.GuacamoleException
          +
          Returns an arbitrary REST resource representing this + AuthenticationProvider. The REST resource returned must be properly + annotated with JSR-311 annotations, and may serve as the root resource + for any number of subresources. The returned resource is ultimately + exposed at ".../api/ext/IDENTIFIER/", where IDENTIFIER is the identifier + of this AuthenticationProvider. + + REST resources returned by this function will be reachable by all users, + regardless of whether they have authenticated. REST resources which + must only be accessible by authenticated users should instead be returned + from UserContext.getResource().
          +
          +
          Returns:
          +
          An arbitrary REST resource, annotated with JSR-311 annotations, or + null if no such resource is defined.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If the REST resource cannot be returned due to an error.
          +
          +
        • +
        + + + +
          +
        • +

          authenticateUser

          +
          AuthenticatedUser authenticateUser​(Credentials credentials)
          +                            throws org.apache.guacamole.GuacamoleException
          +
          Returns an AuthenticatedUser representing the user authenticated by the + given credentials, if any.
          +
          +
          Parameters:
          +
          credentials - The credentials to use for authentication.
          +
          Returns:
          +
          An AuthenticatedUser representing the user authenticated by the + given credentials, if any, or null if the credentials are invalid.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while authenticating the user, or if access is + temporarily, permanently, or conditionally denied, such as if the + supplied credentials are insufficient or invalid.
          +
          +
        • +
        + + + +
          +
        • +

          updateAuthenticatedUser

          +
          AuthenticatedUser updateAuthenticatedUser​(AuthenticatedUser authenticatedUser,
          +                                          Credentials credentials)
          +                                   throws org.apache.guacamole.GuacamoleException
          +
          Returns a new or updated AuthenticatedUser for the given credentials + already having produced the given AuthenticatedUser. Note that because + this function will be called for all future requests after initial + authentication, including tunnel requests, care must be taken to avoid + using functions of HttpServletRequest which invalidate the entire request + body, such as getParameter(). Doing otherwise may cause the + GuacamoleHTTPTunnelServlet to fail.
          +
          +
          Parameters:
          +
          credentials - The credentials to use for authentication.
          +
          authenticatedUser - An AuthenticatedUser object representing the user authenticated by + an arbitrary set of credentials. The AuthenticatedUser may come from + this AuthenticationProvider or any other installed + AuthenticationProvider.
          +
          Returns:
          +
          An updated AuthenticatedUser representing the user authenticated by + the given credentials, if any, or null if the credentials are + invalid.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while updating the AuthenticatedUser.
          +
          +
        • +
        + + + +
          +
        • +

          getUserContext

          +
          UserContext getUserContext​(AuthenticatedUser authenticatedUser)
          +                    throws org.apache.guacamole.GuacamoleException
          +
          Returns the UserContext of the user authenticated by the given + credentials.
          +
          +
          Parameters:
          +
          authenticatedUser - An AuthenticatedUser object representing the user authenticated by + an arbitrary set of credentials. The AuthenticatedUser may come from + this AuthenticationProvider or any other installed + AuthenticationProvider.
          +
          Returns:
          +
          A UserContext describing the permissions, connection, connection + groups, etc. accessible or associated with the given authenticated + user, or null if this AuthenticationProvider refuses to provide any + such data.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while creating the UserContext.
          +
          +
        • +
        + + + +
          +
        • +

          updateUserContext

          +
          UserContext updateUserContext​(UserContext context,
          +                              AuthenticatedUser authenticatedUser,
          +                              Credentials credentials)
          +                       throws org.apache.guacamole.GuacamoleException
          +
          Returns a new or updated UserContext for the given AuthenticatedUser + already having the given UserContext. Note that because this function + will be called for all future requests after initial authentication, + including tunnel requests, care must be taken to avoid using functions + of HttpServletRequest which invalidate the entire request body, such as + getParameter(). Doing otherwise may cause the GuacamoleHTTPTunnelServlet + to fail.
          +
          +
          Parameters:
          +
          context - The existing UserContext belonging to the user in question.
          +
          authenticatedUser - An AuthenticatedUser object representing the user authenticated by + an arbitrary set of credentials. The AuthenticatedUser may come from + this AuthenticationProvider or any other installed + AuthenticationProvider.
          +
          credentials - The credentials which were most recently submitted. These are not + guaranteed to be the same as the credentials associated with the + AuthenticatedUser when they originally authenticated.
          +
          Returns:
          +
          An updated UserContext describing the permissions, connection, + connection groups, etc. accessible or associated with the given + authenticated user, or null if this AuthenticationProvider refuses + to provide any such data.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while updating the UserContext.
          +
          +
        • +
        + + + +
          +
        • +

          decorate

          +
          UserContext decorate​(UserContext context,
          +                     AuthenticatedUser authenticatedUser,
          +                     Credentials credentials)
          +              throws org.apache.guacamole.GuacamoleException
          +
          Given a UserContext returned from getUserContext() of a different + AuthenticationProvider, returns a UserContext instance which decorates + (wraps) that UserContext, delegating and overriding implemented + functions as necessary. Each UserContext created via getUserContext() + will be passed to the decorate() functions of all other + AuthenticationProviders, allowing those AuthenticationProviders to + augment (or perhaps even limit) the functionality or data provided.
          +
          +
          Parameters:
          +
          context - An existing UserContext generated by getUserContext() of a different + AuthenticationProvider.
          +
          authenticatedUser - The AuthenticatedUser object representing the user associated with + the given UserContext.
          +
          credentials - The credentials which were most recently submitted for the given + AuthenticatedUser. These are not guaranteed to be the same as the + credentials associated with the AuthenticatedUser object, which are + the credentials provided when the user originally authenticated.
          +
          Returns:
          +
          A decorated (wrapped) UserContext object, or the original, + undecorated UserContext.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If the UserContext cannot be decorated due to an error.
          +
          +
        • +
        + + + +
          +
        • +

          redecorate

          +
          UserContext redecorate​(UserContext decorated,
          +                       UserContext context,
          +                       AuthenticatedUser authenticatedUser,
          +                       Credentials credentials)
          +                throws org.apache.guacamole.GuacamoleException
          +
          Given a UserContext returned by updateUserContext() of a different + AuthenticationProvider, returns a UserContext instance which decorates + (wraps) that UserContext, delegating and overriding implemented + functions as necessary. Each UserContext created via updateUserContext() + will be passed to the decorate() functions of all other + AuthenticationProviders, allowing those AuthenticationProviders to + augment (or perhaps even limit) the functionality or data provided.
          +
          +
          Parameters:
          +
          decorated - The UserContext returned when decorate() was invoked on this + AuthenticationProvider for the UserContext which was just updated + via a call to updateUserContext().
          +
          context - An existing UserContext generated by updateUserContext() of a + different AuthenticationProvider.
          +
          authenticatedUser - The AuthenticatedUser object representing the user associated with + the given UserContext.
          +
          credentials - The credentials which were most recently submitted for the given + AuthenticatedUser. These are not guaranteed to be the same as the + credentials associated with the AuthenticatedUser object, which are + the credentials provided when the user originally authenticated.
          +
          Returns:
          +
          A decorated (wrapped) UserContext object, or the original, + undecorated UserContext.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If the UserContext cannot be decorated due to an error.
          +
          +
        • +
        + + + +
          +
        • +

          shutdown

          +
          void shutdown()
          +
          Frees all resources associated with this AuthenticationProvider. This + function will be automatically invoked when the Guacamole server is + shutting down.
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/Connectable.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/Connectable.html new file mode 100644 index 000000000..3e8e585fb --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/Connectable.html @@ -0,0 +1,356 @@ + + + + + +Connectable (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface Connectable

    +
    +
    +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          connect

          +
          @Deprecated
          +default org.apache.guacamole.net.GuacamoleTunnel connect​(org.apache.guacamole.protocol.GuacamoleClientInformation info)
          +                                                  throws org.apache.guacamole.GuacamoleException
          +
          Deprecated. +
          This function has been deprecated in favor of + connect(org.apache.guacamole.protocol.GuacamoleClientInformation, java.util.Map), + which allows for connection parameter tokens to be injected and + applied by cooperating extensions, replacing the functionality + previously provided through the StandardTokens + class. It continues to be defined on this interface for + compatibility. New implementations should instead implement + connect(org.apache.guacamole.protocol.GuacamoleClientInformation, java.util.Map).
          +
          +
          Establishes a connection to guacd using the information associated with + this object. The connection will be provided the given client + information.
          +
          +
          Parameters:
          +
          info - Information associated with the connecting client.
          +
          Returns:
          +
          A fully-established GuacamoleTunnel.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while connecting to guacd, or if permission to + connect is denied.
          +
          +
        • +
        + + + +
          +
        • +

          connect

          +
          org.apache.guacamole.net.GuacamoleTunnel connect​(org.apache.guacamole.protocol.GuacamoleClientInformation info,
          +                                                 Map<String,​String> tokens)
          +                                          throws org.apache.guacamole.GuacamoleException
          +
          Establishes a connection to guacd using the information associated with + this object. The connection will be provided the given client + information. Implementations which support parameter tokens should + apply the given tokens when configuring the connection, such as with a + TokenFilter.
          +
          +
          Parameters:
          +
          info - Information associated with the connecting client.
          +
          tokens - A Map containing the token names and corresponding values to be + applied as parameter tokens when establishing the connection. If the + implementation does not support parameter tokens, this Map may be + ignored.
          +
          Returns:
          +
          A fully-established GuacamoleTunnel.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while connecting to guacd, or if permission to + connect is denied.
          +
          See Also:
          +
          Parameter Tokens
          +
          +
        • +
        + + + +
          +
        • +

          getActiveConnections

          +
          int getActiveConnections()
          +
          Returns the number of active connections associated with this object. + Implementations may simply return 0 if this value is not tracked.
          +
          +
          Returns:
          +
          The number of active connections associated with this object.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/Connection.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/Connection.html new file mode 100644 index 000000000..205af96f7 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/Connection.html @@ -0,0 +1,551 @@ + + + + + +Connection (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface Connection

    +
    +
    +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getName

          +
          String getName()
          +
          Returns the name assigned to this Connection.
          +
          +
          Returns:
          +
          The name assigned to this Connection.
          +
          +
        • +
        + + + +
          +
        • +

          setName

          +
          void setName​(String name)
          +
          Sets the name assigned to this Connection.
          +
          +
          Parameters:
          +
          name - The name to assign.
          +
          +
        • +
        + + + +
          +
        • +

          getParentIdentifier

          +
          String getParentIdentifier()
          +
          Returns the unique identifier of the parent ConnectionGroup for + this Connection.
          +
          +
          Returns:
          +
          The unique identifier of the parent ConnectionGroup for + this Connection.
          +
          +
        • +
        + + + +
          +
        • +

          setParentIdentifier

          +
          void setParentIdentifier​(String parentIdentifier)
          +
          Sets the unique identifier of the parent ConnectionGroup for + this Connection.
          +
          +
          Parameters:
          +
          parentIdentifier - The unique identifier of the parent + ConnectionGroup for this Connection.
          +
          +
        • +
        + + + +
          +
        • +

          getConfiguration

          +
          org.apache.guacamole.protocol.GuacamoleConfiguration getConfiguration()
          +
          Returns the GuacamoleConfiguration associated with this Connection. Note + that because configurations may contain sensitive information, some data + in this configuration may be omitted or tokenized.
          +
          +
          Returns:
          +
          The GuacamoleConfiguration associated with this Connection.
          +
          +
        • +
        + + + +
          +
        • +

          setConfiguration

          +
          void setConfiguration​(org.apache.guacamole.protocol.GuacamoleConfiguration config)
          +
          Sets the GuacamoleConfiguration associated with this Connection.
          +
          +
          Parameters:
          +
          config - The GuacamoleConfiguration to associate with this + Connection.
          +
          +
        • +
        + + + +
          +
        • +

          getLastActive

          +
          Date getLastActive()
          +
          Returns the date and time that this connection was last used. If the + connection was never used, the time that the connection was last used is + unknown, or this information is not visible to the current user, this + may be null.
          +
          +
          Returns:
          +
          The date and time this connection was last used, or null if this + information is unavailable or inapplicable.
          +
          +
        • +
        + + + +
          +
        • +

          getHistory

          +
          @Deprecated
          +default List<? extends ConnectionRecord> getHistory()
          +                                             throws org.apache.guacamole.GuacamoleException
          +
          Deprecated. +
          This function has been deprecated in favor of + getConnectionHistory(), which returns the connection history + as an ActivityRecordSet that can be easily sorted and filtered. + While the getHistory() method is provided for API compatibility, + new implementations should avoid use of this method and, instead, + implement the getConnectionHistory() method.
          +
          +
          Returns a list of ConnectionRecords representing the usage history + of this Connection, including any active users. ConnectionRecords + in this list will be sorted in descending order of end time (active + connections are first), and then in descending order of start time + (newer connections are first). If connection history tracking is + not implemented this method should throw GuacamoleUnsupportedException.
          +
          +
          Returns:
          +
          A list of ConnectionRecrods representing the usage history of this + Connection.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If history tracking is not implemented, if an error occurs while + reading the history of this connection, or if permission is + denied.
          +
          +
        • +
        + + + +
          +
        • +

          getConnectionHistory

          +
          default ActivityRecordSet<ConnectionRecord> getConnectionHistory()
          +                                                          throws org.apache.guacamole.GuacamoleException
          +
          Returns an ActivityRecordSet containing ConnectionRecords that + represent the usage history of this Connection, including any active + users. ConnectionRecords in this list will be sorted in descending order + of end time (active connections are first), and then in descending order + of start time (newer connections are first). If connection history + tracking has not been implemented, or has been implemented using the + deprecated getHistory() method, this function should throw + GuacamoleUnsupportedExpcetion.
          +
          +
          Returns:
          +
          An ActivityRecordSet containing ConnectionRecords representing the + usage history of this Connection.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If history tracking is not implemented, if an error occurs while + reading the history of this connection, or if permission is + denied.
          +
          +
        • +
        + + + +
          +
        • +

          getSharingProfileIdentifiers

          +
          Set<String> getSharingProfileIdentifiers()
          +                                  throws org.apache.guacamole.GuacamoleException
          +
          Returns identifiers of all readable sharing profiles that can be used to + join this connection when it is active. The level of access granted to a + joining user is dictated by the connection parameters associated with + the sharing profile, not necessarily the parameters of the primary + connection being joined.
          +
          +
          Returns:
          +
          A Set of identifiers representing the sharing profiles for this + connection.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while fetching the sharing profiles for this + connection.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/ConnectionGroup.Type.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/ConnectionGroup.Type.html new file mode 100644 index 000000000..99aaab61f --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/ConnectionGroup.Type.html @@ -0,0 +1,398 @@ + + + + + +ConnectionGroup.Type (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Enum ConnectionGroup.Type

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Enum Constant Detail

        + + + +
          +
        • +

          ORGANIZATIONAL

          +
          public static final ConnectionGroup.Type ORGANIZATIONAL
          +
          A connection group that purely organizes other connections or + connection groups, serving only as a container. An organizational + connection group is analogous to a directory or folder in a + filesystem.
          +
        • +
        + + + +
          +
        • +

          BALANCING

          +
          public static final ConnectionGroup.Type BALANCING
          +
          A connection group that acts as a load balancer. A balancing + connection group can be connected to in the same manner as a + connection, and will transparently route to the least-used + underlying connection.
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          values

          +
          public static ConnectionGroup.Type[] values()
          +
          Returns an array containing the constants of this enum type, in +the order they are declared. This method may be used to iterate +over the constants as follows: +
          +for (ConnectionGroup.Type c : ConnectionGroup.Type.values())
          +    System.out.println(c);
          +
          +
          +
          Returns:
          +
          an array containing the constants of this enum type, in the order they are declared
          +
          +
        • +
        + + + +
          +
        • +

          valueOf

          +
          public static ConnectionGroup.Type valueOf​(String name)
          +
          Returns the enum constant of this type with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this type. (Extraneous whitespace characters are +not permitted.)
          +
          +
          Parameters:
          +
          name - the name of the enum constant to be returned.
          +
          Returns:
          +
          the enum constant with the specified name
          +
          Throws:
          +
          IllegalArgumentException - if this enum type has no constant with the specified name
          +
          NullPointerException - if the argument is null
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/ConnectionGroup.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/ConnectionGroup.html new file mode 100644 index 000000000..7f9964258 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/ConnectionGroup.html @@ -0,0 +1,488 @@ + + + + + +ConnectionGroup (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface ConnectionGroup

    +
    +
    +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getName

          +
          String getName()
          +
          Returns the name assigned to this ConnectionGroup.
          +
          +
          Returns:
          +
          The name assigned to this ConnectionGroup.
          +
          +
        • +
        + + + +
          +
        • +

          setName

          +
          void setName​(String name)
          +
          Sets the name assigned to this ConnectionGroup.
          +
          +
          Parameters:
          +
          name - The name to assign.
          +
          +
        • +
        + + + +
          +
        • +

          getParentIdentifier

          +
          String getParentIdentifier()
          +
          Returns the unique identifier of the parent ConnectionGroup for + this ConnectionGroup.
          +
          +
          Returns:
          +
          The unique identifier of the parent ConnectionGroup for + this ConnectionGroup.
          +
          +
        • +
        + + + +
          +
        • +

          setParentIdentifier

          +
          void setParentIdentifier​(String parentIdentifier)
          +
          Sets the unique identifier of the parent ConnectionGroup for + this ConnectionGroup.
          +
          +
          Parameters:
          +
          parentIdentifier - The unique identifier of the parent + ConnectionGroup for this ConnectionGroup.
          +
          +
        • +
        + + + +
          +
        • +

          setType

          +
          void setType​(ConnectionGroup.Type type)
          +
          Set the type of this ConnectionGroup.
          +
          +
          Parameters:
          +
          type - The type of this ConnectionGroup.
          +
          +
        • +
        + + + +
          +
        • +

          getType

          +
          ConnectionGroup.Type getType()
          +
          Returns the type of this connection.
          +
          +
          Returns:
          +
          the type of this connection.
          +
          +
        • +
        + + + +
          +
        • +

          getConnectionIdentifiers

          +
          Set<String> getConnectionIdentifiers()
          +                              throws org.apache.guacamole.GuacamoleException
          +
          Returns the identifiers of all readable connections that are children + of this connection group.
          +
          +
          Returns:
          +
          The set of identifiers of all readable connections that are children + of this connection group.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving the identifiers.
          +
          +
        • +
        + + + +
          +
        • +

          getConnectionGroupIdentifiers

          +
          Set<String> getConnectionGroupIdentifiers()
          +                                   throws org.apache.guacamole.GuacamoleException
          +
          Returns the identifiers of all readable connection groups that are + children of this connection group.
          +
          +
          Returns:
          +
          The set of identifiers of all readable connection groups that are + children of this connection group.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving the identifiers.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/ConnectionRecord.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/ConnectionRecord.html new file mode 100644 index 000000000..847fe6123 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/ConnectionRecord.html @@ -0,0 +1,389 @@ + + + + + +ConnectionRecord (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface ConnectionRecord

    +
    +
    +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getConnectionIdentifier

          +
          String getConnectionIdentifier()
          +
          Returns the identifier of the connection associated with this + connection record.
          +
          +
          Returns:
          +
          The identifier of the connection associated with this connection + record.
          +
          +
        • +
        + + + +
          +
        • +

          getConnectionName

          +
          String getConnectionName()
          +
          Returns the name of the connection associated with this connection + record.
          +
          +
          Returns:
          +
          The name of the connection associated with this connection record.
          +
          +
        • +
        + + + +
          +
        • +

          getSharingProfileIdentifier

          +
          String getSharingProfileIdentifier()
          +
          Returns the identifier of the sharing profile that was used to access the + connection associated with this connection record. If the connection was + accessed directly (without involving a sharing profile), this will be + null.
          +
          +
          Returns:
          +
          The identifier of the sharing profile used to access the connection + associated with this connection record, or null if the connection + was accessed directly.
          +
          +
        • +
        + + + +
          +
        • +

          getSharingProfileName

          +
          String getSharingProfileName()
          +
          Returns the name of the sharing profile that was used to access the + connection associated with this connection record. If the connection was + accessed directly (without involving a sharing profile), this will be + null.
          +
          +
          Returns:
          +
          The name of the sharing profile used to access the connection + associated with this connection record, or null if the connection + was accessed directly.
          +
          +
        • +
        + + + +
          +
        • +

          getUUID

          +
          default UUID getUUID()
          +
          Returns a UUID that uniquely identifies this record. If provided, this + UUID MUST be deterministic and unique across all ActivityRecord + objects within the same ActivityRecordSet, and SHOULD be unique + across all ActivityRecord objects. +

          If implemented, this UUID SHOULD be identical to the UUID of the + GuacamoleTunnel originally returned when the connection was + established to allow extensions and/or the web application to + automatically associate connection information with corresponding + history records, such as log messages and session recordings.

          +
          +
          Specified by:
          +
          getUUID in interface ActivityRecord
          +
          Returns:
          +
          A UUID that uniquely identifies this record, or null if no such + unique identifier exists.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/ConnectionRecordSet.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/ConnectionRecordSet.html new file mode 100644 index 000000000..b41fd6023 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/ConnectionRecordSet.html @@ -0,0 +1,246 @@ + + + + + +ConnectionRecordSet (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface ConnectionRecordSet

    +
    +
    +
    + +
    +
    + +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/Credentials.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/Credentials.html new file mode 100644 index 000000000..0690629dd --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/Credentials.html @@ -0,0 +1,603 @@ + + + + + +Credentials (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class Credentials

    +
    +
    + +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      Serializable
      +
      +
      +
      public class Credentials
      +extends Object
      +implements Serializable
      +
      Simple arbitrary set of credentials, including a username/password pair, + the HttpServletRequest associated with the request for authorization + (if any) and the HttpSession associated with that request. + + This class is used along with AuthenticationProvider to provide arbitrary + HTTP-based authentication for Guacamole.
      +
      +
      See Also:
      +
      Serialized Form
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Summary

        + + + + + + + + + + +
        Constructors 
        ConstructorDescription
        Credentials​(String username, + String password, + javax.servlet.http.HttpServletRequest request) +
        Construct a Credentials object with the given username, password, + and HTTP request.
        +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethodDescription
        StringgetPassword() +
        Returns the password associated with this set of credentials.
        +
        StringgetRemoteAddress() +
        Returns the address of the client end of the connection which provided + these credentials, if known.
        +
        StringgetRemoteHostname() +
        Returns the hostname of the client end of the connection which provided + these credentials, if known.
        +
        javax.servlet.http.HttpServletRequestgetRequest() +
        Returns the HttpServletRequest associated with this set of credentials.
        +
        javax.servlet.http.HttpSessiongetSession() +
        Returns the HttpSession associated with this set of credentials.
        +
        StringgetUsername() +
        Returns the username associated with this set of credentials.
        +
        voidsetPassword​(String password) +
        Sets the password associated with this set of credentials.
        +
        voidsetRemoteAddress​(String remoteAddress) +
        Sets the address of the client end of the connection which provided + these credentials.
        +
        voidsetRemoteHostname​(String remoteHostname) +
        Sets the hostname of the client end of the connection which provided + these credentials, if known.
        +
        voidsetRequest​(javax.servlet.http.HttpServletRequest request) +
        Sets the HttpServletRequest associated with this set of credentials.
        +
        voidsetSession​(javax.servlet.http.HttpSession session) +
        Sets the HttpSession associated with this set of credentials.
        +
        voidsetUsername​(String username) +
        Sets the username associated with this set of credentials.
        +
        + +
      • +
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          Credentials

          +
          public Credentials​(String username,
          +                   String password,
          +                   javax.servlet.http.HttpServletRequest request)
          +
          Construct a Credentials object with the given username, password, + and HTTP request. The information is assigned to the various + storage objects, and the remote hostname and address is parsed out + of the request object.
          +
          +
          Parameters:
          +
          username - The username that was provided for authentication.
          +
          password - The password that was provided for authentication.
          +
          request - The HTTP request associated with the authentication + request.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getPassword

          +
          public String getPassword()
          +
          Returns the password associated with this set of credentials.
          +
          +
          Returns:
          +
          The password associated with this username/password pair, or + null if no password has been set.
          +
          +
        • +
        + + + +
          +
        • +

          setPassword

          +
          public void setPassword​(String password)
          +
          Sets the password associated with this set of credentials.
          +
          +
          Parameters:
          +
          password - The password to associate with this username/password + pair.
          +
          +
        • +
        + + + +
          +
        • +

          getUsername

          +
          public String getUsername()
          +
          Returns the username associated with this set of credentials.
          +
          +
          Returns:
          +
          The username associated with this username/password pair, or + null if no username has been set.
          +
          +
        • +
        + + + +
          +
        • +

          setUsername

          +
          public void setUsername​(String username)
          +
          Sets the username associated with this set of credentials.
          +
          +
          Parameters:
          +
          username - The username to associate with this username/password + pair.
          +
          +
        • +
        + + + +
          +
        • +

          getRequest

          +
          public javax.servlet.http.HttpServletRequest getRequest()
          +
          Returns the HttpServletRequest associated with this set of credentials.
          +
          +
          Returns:
          +
          The HttpServletRequest associated with this set of credentials, + or null if no such request exists.
          +
          +
        • +
        + + + +
          +
        • +

          setRequest

          +
          public void setRequest​(javax.servlet.http.HttpServletRequest request)
          +
          Sets the HttpServletRequest associated with this set of credentials.
          +
          +
          Parameters:
          +
          request - The HttpServletRequest to associated with this set of + credentials.
          +
          +
        • +
        + + + +
          +
        • +

          getSession

          +
          public javax.servlet.http.HttpSession getSession()
          +
          Returns the HttpSession associated with this set of credentials.
          +
          +
          Returns:
          +
          The HttpSession associated with this set of credentials, or null + if no such request exists.
          +
          +
        • +
        + + + +
          +
        • +

          setSession

          +
          public void setSession​(javax.servlet.http.HttpSession session)
          +
          Sets the HttpSession associated with this set of credentials.
          +
          +
          Parameters:
          +
          session - The HttpSession to associated with this set of + credentials.
          +
          +
        • +
        + + + +
          +
        • +

          getRemoteAddress

          +
          public String getRemoteAddress()
          +
          Returns the address of the client end of the connection which provided + these credentials, if known.
          +
          +
          Returns:
          +
          The address of the client end of the connection which provided these + credentials, or null if the address is not known.
          +
          +
        • +
        + + + +
          +
        • +

          setRemoteAddress

          +
          public void setRemoteAddress​(String remoteAddress)
          +
          Sets the address of the client end of the connection which provided + these credentials.
          +
          +
          Parameters:
          +
          remoteAddress - The address of the client end of the connection which provided these + credentials, or null if the address is not known.
          +
          +
        • +
        + + + +
          +
        • +

          getRemoteHostname

          +
          public String getRemoteHostname()
          +
          Returns the hostname of the client end of the connection which provided + these credentials, if known. If the hostname of the client cannot be + determined, but the address is known, the address may be returned + instead.
          +
          +
          Returns:
          +
          The hostname or address of the client end of the connection which + provided these credentials, or null if the hostname is not known.
          +
          +
        • +
        + + + +
          +
        • +

          setRemoteHostname

          +
          public void setRemoteHostname​(String remoteHostname)
          +
          Sets the hostname of the client end of the connection which provided + these credentials, if known. If the hostname of the client cannot be + determined, but the address is known, the address may be specified + instead.
          +
          +
          Parameters:
          +
          remoteHostname - The hostname or address of the client end of the connection which + provided these credentials, or null if the hostname is not known.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/DecoratingActivityRecordSet.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/DecoratingActivityRecordSet.html new file mode 100644 index 000000000..ba1c344a3 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/DecoratingActivityRecordSet.html @@ -0,0 +1,614 @@ + + + + + +DecoratingActivityRecordSet (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class DecoratingActivityRecordSet<RecordType extends ActivityRecord>

    +
    +
    + +
    +
      +
    • +
      +
      Type Parameters:
      +
      RecordType - The type of records stored within this ActivityRecordSet.
      +
      +
      +
      All Implemented Interfaces:
      +
      ActivityRecordSet<RecordType>
      +
      +
      +
      public abstract class DecoratingActivityRecordSet<RecordType extends ActivityRecord>
      +extends DelegatingActivityRecordSet<RecordType>
      +
      ActivityRecordSet implementation which simplifies decorating the records + within an underlying ActivityRecordSet. The decorate() function must be + implemented to define how each record is decorated. As ActivityRecordSets + are read-only, there is no need to define an undecorate() function as + required by DecoratingDirectory.
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          DecoratingActivityRecordSet

          +
          public DecoratingActivityRecordSet​(ActivityRecordSet<RecordType> recordSet)
          +
          Creates a new DecoratingActivityRecordSet which decorates the records + within the given set.
          +
          +
          Parameters:
          +
          recordSet - The ActivityRecordSet whose records are being decorated.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + + + +
          +
        • +

          decorate

          +
          protected abstract RecordType decorate​(RecordType record)
          +                                throws org.apache.guacamole.GuacamoleException
          +
          Given a record retrieved from a ActivityRecordSet which originates from + a different AuthenticationProvider, returns an identical type of record + optionally wrapped with additional information, functionality, etc. If + this record set chooses to decorate the record provided, it is up to the + implementation of that decorated record to properly pass through + operations as appropriate. All records retrieved from this + DecoratingActivityRecordSet will first be passed through this function.
          +
          +
          Parameters:
          +
          record - A record from a ActivityRecordSet which originates from a different + AuthenticationProvider.
          +
          Returns:
          +
          A record which may have been decorated by this + DecoratingActivityRecordSet. If the record was not decorated, the + original, unmodified record may be returned instead.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If the provided record cannot be decorated due to an error.
          +
          +
        • +
        + + + +
          +
        • +

          decorate

          +
          protected ActivityRecordSet<RecordType> decorate​(ActivityRecordSet<RecordType> recordSet)
          +                                          throws org.apache.guacamole.GuacamoleException
          +
          Given an ActivityRecordSet which originates from a different + AuthenticationProvider, returns an identical type of record set + optionally wrapped with additional information, functionality, etc. If + this record set chooses to decorate the record set provided, it is up to + the implementation of that decorated record set to properly pass through + operations as appropriate. All record sets retrieved from this + DecoratingActivityRecordSet will first be passed through this function, + such as those returned by limit(int) and similar functions. +

          + By default, this function will wrap any provided ActivityRecordSet in a + simple, anonymous instance of DecoratingActivityRecordSet that delegates + to the decorate() implementations of this DecoratingActivityRecordSet. + This default behavior may need to be overridden if the + DecoratingActivityRecordSet implementation maintains any internal + state.

          +
          +
          Parameters:
          +
          recordSet - An ActivityRecordSet which originates from a different + AuthenticationProvider.
          +
          Returns:
          +
          A record set which may have been decorated by this + DecoratingActivityRecordSet. If the record set was not decorated, the + original, unmodified record set may be returned instead, however + beware that this may result in records within the set no longer + being decorated.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If the provided record set cannot be decorated due to an error.
          +
          +
        • +
        + + + +
          +
        • +

          get

          +
          public RecordType get​(String string)
          +               throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: ActivityRecordSet
          +
          Returns the record having the given unique identifier, if records within + this set have unique identifiers. If records within this set do not have + defined unique identifiers, this function has no effect.
          +
          +
          Specified by:
          +
          get in interface ActivityRecordSet<RecordType extends ActivityRecord>
          +
          Overrides:
          +
          get in class DelegatingActivityRecordSet<RecordType extends ActivityRecord>
          +
          Parameters:
          +
          string - The unique identifier of the record to retrieve.
          +
          Returns:
          +
          The record having the given unique identifier, or null if there is + no such record.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving the record.
          +
          +
        • +
        + + + +
          +
        • +

          sort

          +
          public ActivityRecordSet<RecordType> sort​(ActivityRecordSet.SortableProperty property,
          +                                          boolean desc)
          +                                   throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: ActivityRecordSet
          +
          Returns a ActivityRecordSet containing identically the records within + this set, sorted according to the specified criteria. The sort operation + performed is guaranteed to be stable with respect to any past call to + sort(). This function may also affect the contents of the current + ActivityRecordSet. The contents of the current ActivityRecordSet + should NOT be relied upon after this function is called.
          +
          +
          Specified by:
          +
          sort in interface ActivityRecordSet<RecordType extends ActivityRecord>
          +
          Overrides:
          +
          sort in class DelegatingActivityRecordSet<RecordType extends ActivityRecord>
          +
          Parameters:
          +
          property - The property by which the records within the resulting set should be + sorted.
          +
          desc - Whether the records should be sorted according to the specified + property in descending order. If false, records will be sorted + according to the specified property in ascending order.
          +
          Returns:
          +
          The ActivityRecordSet, sorted according to the specified criteria.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while sorting the current subset, or if the given + property is not supported by the implementation.
          +
          +
        • +
        + + + +
          +
        • +

          limit

          +
          public ActivityRecordSet<RecordType> limit​(int limit)
          +                                    throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: ActivityRecordSet
          +
          Returns the subset of records containing only the first + limit records. If the subset has fewer than + limit records, then this function has no effect. This + function may also affect the contents of the current ActivityRecordSet. + The contents of the current ActivityRecordSet should NOT be relied upon + after this function is called.
          +
          +
          Specified by:
          +
          limit in interface ActivityRecordSet<RecordType extends ActivityRecord>
          +
          Overrides:
          +
          limit in class DelegatingActivityRecordSet<RecordType extends ActivityRecord>
          +
          Parameters:
          +
          limit - The maximum number of records that the new subset should contain.
          +
          Returns:
          +
          The subset of records that containing only the first + limit records.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while limiting the current subset.
          +
          +
        • +
        + + + +
          +
        • +

          contains

          +
          public ActivityRecordSet<RecordType> contains​(String value)
          +                                       throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: ActivityRecordSet
          +
          Returns the subset of records which contain the given value. The + properties and semantics involved with determining whether a particular + record "contains" the given value is implementation dependent. This + function may affect the contents of the current ActivityRecordSet. The + contents of the current ActivityRecordSet should NOT be relied upon + after this function is called.
          +
          +
          Specified by:
          +
          contains in interface ActivityRecordSet<RecordType extends ActivityRecord>
          +
          Overrides:
          +
          contains in class DelegatingActivityRecordSet<RecordType extends ActivityRecord>
          +
          Parameters:
          +
          value - The value which all records within the resulting subset should + contain.
          +
          Returns:
          +
          The subset of records which contain the specified value.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while restricting the current subset.
          +
          +
        • +
        + + + + +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/DecoratingDirectory.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/DecoratingDirectory.html new file mode 100644 index 000000000..f3b43ee1f --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/DecoratingDirectory.html @@ -0,0 +1,549 @@ + + + + + +DecoratingDirectory (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class DecoratingDirectory<ObjectType extends Identifiable>

    +
    +
    + +
    +
      +
    • +
      +
      Type Parameters:
      +
      ObjectType - The type of objects stored within this Directory.
      +
      +
      +
      All Implemented Interfaces:
      +
      Directory<ObjectType>
      +
      +
      +
      public abstract class DecoratingDirectory<ObjectType extends Identifiable>
      +extends DelegatingDirectory<ObjectType>
      +
      Directory implementation which simplifies decorating the objects within an + underlying Directory. The decorate() and undecorate() functions must be + implemented to define how each object is decorated, and how that decoration + may be removed.
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          DecoratingDirectory

          +
          public DecoratingDirectory​(Directory<ObjectType> directory)
          +
          Creates a new DecoratingDirectory which decorates the objects within + the given directory.
          +
          +
          Parameters:
          +
          directory - The Directory whose objects are being decorated.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + + + +
          +
        • +

          decorate

          +
          protected abstract ObjectType decorate​(ObjectType object)
          +                                throws org.apache.guacamole.GuacamoleException
          +
          Given an object retrieved from a Directory which originates from a + different AuthenticationProvider, returns an identical type of object + optionally wrapped with additional information, functionality, etc. If + this directory chooses to decorate the object provided, it is up to the + implementation of that decorated object to properly pass through + operations as appropriate, as well as provide for an eventual + undecorate() operation. All objects retrieved from this + DecoratingDirectory will first be passed through this function.
          +
          +
          Parameters:
          +
          object - An object from a Directory which originates from a different + AuthenticationProvider.
          +
          Returns:
          +
          An object which may have been decorated by this + DecoratingDirectory. If the object was not decorated, the original, + unmodified object may be returned instead.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If the provided object cannot be decorated due to an error.
          +
          +
        • +
        + + + + + +
          +
        • +

          undecorate

          +
          protected abstract ObjectType undecorate​(ObjectType object)
          +                                  throws org.apache.guacamole.GuacamoleException
          +
          Given an object originally returned from a call to this + DecoratingDirectory's decorate() function, reverses the decoration + operation, returning the original object. This function is effectively + the exact inverse of the decorate() function. The return value of + undecorate(decorate(X)) must be identically X. All objects given to this + DecoratingDirectory via add() or update() will first be passed through + this function.
          +
          +
          Parameters:
          +
          object - An object which was originally returned by a call to this + DecoratingDirectory's decorate() function.
          +
          Returns:
          +
          The original object which was provided to this DecoratingDirectory's + decorate() function.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If the provided object cannot be undecorated due to an error.
          +
          +
        • +
        + + + +
          +
        • +

          get

          +
          public ObjectType get​(String identifier)
          +               throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: Directory
          +
          Returns the object having the given identifier. Note that changes to + the object returned will not necessarily affect the object stored within + the Directory. To update an object stored within an + Directory such that future calls to get() will return the updated + object, you must call update() on the object after modification.
          +
          +
          Specified by:
          +
          get in interface Directory<ObjectType extends Identifiable>
          +
          Overrides:
          +
          get in class DelegatingDirectory<ObjectType extends Identifiable>
          +
          Parameters:
          +
          identifier - The identifier to use when locating the object to + return.
          +
          Returns:
          +
          The object having the given identifier, or null if no such object + exists.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving the + object, or if permission for retrieving the + object is denied.
          +
          +
        • +
        + + + +
          +
        • +

          getAll

          +
          public Collection<ObjectType> getAll​(Collection<String> identifiers)
          +                              throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: Directory
          +
          Returns the objects having the given identifiers. Note that changes to + any object returned will not necessarily affect the object stored within + the Directory. To update an object stored within a + Directory such that future calls to get() will return the updated + object, you must call update() on the object after modification.
          +
          +
          Specified by:
          +
          getAll in interface Directory<ObjectType extends Identifiable>
          +
          Overrides:
          +
          getAll in class DelegatingDirectory<ObjectType extends Identifiable>
          +
          Parameters:
          +
          identifiers - The identifiers to use when locating the objects to return.
          +
          Returns:
          +
          The objects having the given identifiers. If any identifiers do not + correspond to accessible objects, those identifiers will be ignored. + If no objects correspond to any of the given identifiers, the + returned collection will be empty.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving the objects, or if permission + to retrieve the requested objects is denied.
          +
          +
        • +
        + + + + + +
          +
        • +

          add

          +
          public void add​(ObjectType object)
          +         throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: Directory
          +
          Adds the given object to the overall set. If a new identifier is + created for the added object, that identifier will be automatically + assigned via setIdentifier().
          +
          +
          Specified by:
          +
          add in interface Directory<ObjectType extends Identifiable>
          +
          Overrides:
          +
          add in class DelegatingDirectory<ObjectType extends Identifiable>
          +
          Parameters:
          +
          object - The object to add.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while adding the object, or if adding the object + is not allowed.
          +
          +
        • +
        + + + + + +
          +
        • +

          update

          +
          public void update​(ObjectType object)
          +            throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: Directory
          +
          Updates the stored object with the data contained in the given object.
          +
          +
          Specified by:
          +
          update in interface Directory<ObjectType extends Identifiable>
          +
          Overrides:
          +
          update in class DelegatingDirectory<ObjectType extends Identifiable>
          +
          Parameters:
          +
          object - The object which will supply the data for the update.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while updating the object, + or if updating the object is not allowed.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/DelegatingActivityRecord.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/DelegatingActivityRecord.html new file mode 100644 index 000000000..bc110223f --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/DelegatingActivityRecord.html @@ -0,0 +1,582 @@ + + + + + +DelegatingActivityRecord (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class DelegatingActivityRecord

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • org.apache.guacamole.net.auth.DelegatingActivityRecord
      • +
      +
    • +
    +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          DelegatingActivityRecord

          +
          public DelegatingActivityRecord​(ActivityRecord record)
          +
          Wraps the given ActivityRecord such that all function calls against this + DelegatingActivityRecord will be delegated to it.
          +
          +
          Parameters:
          +
          record - The record to wrap.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getDelegateActivityRecord

          +
          protected ActivityRecord getDelegateActivityRecord()
          +
          Returns the underlying ActivityRecord wrapped by this + DelegatingActivityRecord.
          +
          +
          Returns:
          +
          The ActivityRecord wrapped by this DelegatingActivityRecord.
          +
          +
        • +
        + + + +
          +
        • +

          getStartDate

          +
          public Date getStartDate()
          +
          Description copied from interface: ActivityRecord
          +
          Returns the date and time the activity began.
          +
          +
          Specified by:
          +
          getStartDate in interface ActivityRecord
          +
          Returns:
          +
          The date and time the activity began.
          +
          +
        • +
        + + + +
          +
        • +

          getEndDate

          +
          public Date getEndDate()
          +
          Description copied from interface: ActivityRecord
          +
          Returns the date and time the activity ended, if applicable.
          +
          +
          Specified by:
          +
          getEndDate in interface ActivityRecord
          +
          Returns:
          +
          The date and time the activity ended, or null if the activity is + still ongoing or if the end time is unknown.
          +
          +
        • +
        + + + +
          +
        • +

          getRemoteHost

          +
          public String getRemoteHost()
          +
          Description copied from interface: ActivityRecord
          +
          Returns the hostname or IP address of the remote host that performed the + activity associated with this record, if known. If the hostname or IP + address is not known, null is returned.
          +
          +
          Specified by:
          +
          getRemoteHost in interface ActivityRecord
          +
          Returns:
          +
          The hostname or IP address of the remote host, or null if this + information is not available.
          +
          +
        • +
        + + + +
          +
        • +

          getUsername

          +
          public String getUsername()
          +
          Description copied from interface: ActivityRecord
          +
          Returns the name of the user who performed or is performing the activity + at the times given by this record.
          +
          +
          Specified by:
          +
          getUsername in interface ActivityRecord
          +
          Returns:
          +
          The name of the user who performed or is performing the associated + activity.
          +
          +
        • +
        + + + +
          +
        • +

          isActive

          +
          public boolean isActive()
          +
          Description copied from interface: ActivityRecord
          +
          Returns whether the activity associated with this record is still + ongoing.
          +
          +
          Specified by:
          +
          isActive in interface ActivityRecord
          +
          Returns:
          +
          true if the activity associated with this record is still ongoing, + false otherwise.
          +
          +
        • +
        + + + +
          +
        • +

          getIdentifier

          +
          public String getIdentifier()
          +
          Description copied from interface: ActivityRecord
          +
          Returns the unique identifier assigned to this record, if any. If this + record is not uniquely identifiable, this may be null. If provided, this + unique identifier MUST be unique across all ActivityRecord + objects within the same ActivityRecordSet.
          +
          +
          Specified by:
          +
          getIdentifier in interface ActivityRecord
          +
          Returns:
          +
          The unique identifier assigned to this record, or null if this + record has no such identifier.
          +
          +
        • +
        + + + +
          +
        • +

          getUUID

          +
          public UUID getUUID()
          +
          Description copied from interface: ActivityRecord
          +
          Returns a UUID that uniquely identifies this record. If provided, this + UUID MUST be deterministic and unique across all ActivityRecord + objects within the same ActivityRecordSet, and SHOULD be unique + across all ActivityRecord objects.
          +
          +
          Specified by:
          +
          getUUID in interface ActivityRecord
          +
          Returns:
          +
          A UUID that uniquely identifies this record, or null if no such + unique identifier exists.
          +
          +
        • +
        + + + +
          +
        • +

          getLogs

          +
          public Map<String,​ActivityLog> getLogs()
          +
          Description copied from interface: ActivityRecord
          +
          Returns a Map of logs related to this record and accessible by the + current user, such as Guacamole session recordings. Each log is + associated with a corresponding, arbitrary, unique name. If the user + does not have access to any logs, or if no logs are available, this may + be an empty map.
          +
          +
          Specified by:
          +
          getLogs in interface ActivityRecord
          +
          Returns:
          +
          A Map of logs related to this record.
          +
          +
        • +
        + + + +
          +
        • +

          getAttributes

          +
          public Map<String,​String> getAttributes()
          +
          Description copied from interface: ReadableAttributes
          +
          Returns all attributes associated with this object. The returned map + may not be modifiable.
          +
          +
          Specified by:
          +
          getAttributes in interface ActivityRecord
          +
          Specified by:
          +
          getAttributes in interface ReadableAttributes
          +
          Returns:
          +
          A map of all attribute identifiers to their corresponding values, + for all attributes associated with this object, which may not be + modifiable.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/DelegatingActivityRecordSet.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/DelegatingActivityRecordSet.html new file mode 100644 index 000000000..b20fcfdb9 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/DelegatingActivityRecordSet.html @@ -0,0 +1,531 @@ + + + + + +DelegatingActivityRecordSet (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class DelegatingActivityRecordSet<RecordType extends ActivityRecord>

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • org.apache.guacamole.net.auth.DelegatingActivityRecordSet<RecordType>
      • +
      +
    • +
    +
    +
      +
    • +
      +
      Type Parameters:
      +
      RecordType - The type of ActivityRecord contained within this set.
      +
      +
      +
      All Implemented Interfaces:
      +
      ActivityRecordSet<RecordType>
      +
      +
      +
      Direct Known Subclasses:
      +
      DecoratingActivityRecordSet
      +
      +
      +
      public class DelegatingActivityRecordSet<RecordType extends ActivityRecord>
      +extends Object
      +implements ActivityRecordSet<RecordType>
      +
      ActivityRecordSet implementation which simply delegates all function calls + to an underlying ActivityRecordSet.
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          DelegatingActivityRecordSet

          +
          public DelegatingActivityRecordSet​(ActivityRecordSet<RecordType> recordSet)
          +
          Wraps the given ActivityRecordSet such that all function calls against this + DelegatingActivityRecordSet will be delegated to it.
          +
          +
          Parameters:
          +
          recordSet - The ActivityRecordSet to wrap.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getDelegateActivityRecordSet

          +
          protected ActivityRecordSet<RecordType> getDelegateActivityRecordSet()
          +
          Returns the underlying ActivityRecordSet wrapped by this + DelegatingActivityRecordSet.
          +
          +
          Returns:
          +
          The ActivityRecordSet wrapped by this DelegatingActivityRecordSet.
          +
          +
        • +
        + + + +
          +
        • +

          get

          +
          public RecordType get​(String identifier)
          +               throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: ActivityRecordSet
          +
          Returns the record having the given unique identifier, if records within + this set have unique identifiers. If records within this set do not have + defined unique identifiers, this function has no effect.
          +
          +
          Specified by:
          +
          get in interface ActivityRecordSet<RecordType extends ActivityRecord>
          +
          Parameters:
          +
          identifier - The unique identifier of the record to retrieve.
          +
          Returns:
          +
          The record having the given unique identifier, or null if there is + no such record.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving the record.
          +
          +
        • +
        + + + +
          +
        • +

          asCollection

          +
          public Collection<RecordType> asCollection()
          +                                    throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: ActivityRecordSet
          +
          Returns all records within this set as a standard Collection.
          +
          +
          Specified by:
          +
          asCollection in interface ActivityRecordSet<RecordType extends ActivityRecord>
          +
          Returns:
          +
          A collection containing all records within this set.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving the records within this set.
          +
          +
        • +
        + + + +
          +
        • +

          contains

          +
          public ActivityRecordSet<RecordType> contains​(String value)
          +                                       throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: ActivityRecordSet
          +
          Returns the subset of records which contain the given value. The + properties and semantics involved with determining whether a particular + record "contains" the given value is implementation dependent. This + function may affect the contents of the current ActivityRecordSet. The + contents of the current ActivityRecordSet should NOT be relied upon + after this function is called.
          +
          +
          Specified by:
          +
          contains in interface ActivityRecordSet<RecordType extends ActivityRecord>
          +
          Parameters:
          +
          value - The value which all records within the resulting subset should + contain.
          +
          Returns:
          +
          The subset of records which contain the specified value.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while restricting the current subset.
          +
          +
        • +
        + + + +
          +
        • +

          limit

          +
          public ActivityRecordSet<RecordType> limit​(int limit)
          +                                    throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: ActivityRecordSet
          +
          Returns the subset of records containing only the first + limit records. If the subset has fewer than + limit records, then this function has no effect. This + function may also affect the contents of the current ActivityRecordSet. + The contents of the current ActivityRecordSet should NOT be relied upon + after this function is called.
          +
          +
          Specified by:
          +
          limit in interface ActivityRecordSet<RecordType extends ActivityRecord>
          +
          Parameters:
          +
          limit - The maximum number of records that the new subset should contain.
          +
          Returns:
          +
          The subset of records that containing only the first + limit records.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while limiting the current subset.
          +
          +
        • +
        + + + +
          +
        • +

          sort

          +
          public ActivityRecordSet<RecordType> sort​(ActivityRecordSet.SortableProperty property,
          +                                          boolean desc)
          +                                   throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: ActivityRecordSet
          +
          Returns a ActivityRecordSet containing identically the records within + this set, sorted according to the specified criteria. The sort operation + performed is guaranteed to be stable with respect to any past call to + sort(). This function may also affect the contents of the current + ActivityRecordSet. The contents of the current ActivityRecordSet + should NOT be relied upon after this function is called.
          +
          +
          Specified by:
          +
          sort in interface ActivityRecordSet<RecordType extends ActivityRecord>
          +
          Parameters:
          +
          property - The property by which the records within the resulting set should be + sorted.
          +
          desc - Whether the records should be sorted according to the specified + property in descending order. If false, records will be sorted + according to the specified property in ascending order.
          +
          Returns:
          +
          The ActivityRecordSet, sorted according to the specified criteria.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while sorting the current subset, or if the given + property is not supported by the implementation.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/DelegatingConnection.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/DelegatingConnection.html new file mode 100644 index 000000000..8db4e68f0 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/DelegatingConnection.html @@ -0,0 +1,840 @@ + + + + + +DelegatingConnection (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class DelegatingConnection

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • org.apache.guacamole.net.auth.DelegatingConnection
      • +
      +
    • +
    +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          DelegatingConnection

          +
          public DelegatingConnection​(Connection connection)
          +
          Wraps the given Connection such that all function calls against this + DelegatingConnection will be delegated to it.
          +
          +
          Parameters:
          +
          connection - The Connection to wrap.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getDelegateConnection

          +
          protected Connection getDelegateConnection()
          +
          Returns the underlying Connection wrapped by this DelegatingConnection.
          +
          +
          Returns:
          +
          The Connection wrapped by this DelegatingConnection.
          +
          +
        • +
        + + + +
          +
        • +

          getIdentifier

          +
          public String getIdentifier()
          +
          Description copied from interface: Identifiable
          +
          Returns the unique identifier assigned to this object. All identifiable + objects must have a deterministic, unique identifier which may not be + null.
          +
          +
          Specified by:
          +
          getIdentifier in interface Identifiable
          +
          Returns:
          +
          The unique identifier assigned to this object, which may not be + null.
          +
          +
        • +
        + + + +
          +
        • +

          setIdentifier

          +
          public void setIdentifier​(String identifier)
          +
          Description copied from interface: Identifiable
          +
          Sets the identifier assigned to this object.
          +
          +
          Specified by:
          +
          setIdentifier in interface Identifiable
          +
          Parameters:
          +
          identifier - The identifier to assign.
          +
          +
        • +
        + + + +
          +
        • +

          getName

          +
          public String getName()
          +
          Description copied from interface: Connection
          +
          Returns the name assigned to this Connection.
          +
          +
          Specified by:
          +
          getName in interface Connection
          +
          Returns:
          +
          The name assigned to this Connection.
          +
          +
        • +
        + + + +
          +
        • +

          setName

          +
          public void setName​(String name)
          +
          Description copied from interface: Connection
          +
          Sets the name assigned to this Connection.
          +
          +
          Specified by:
          +
          setName in interface Connection
          +
          Parameters:
          +
          name - The name to assign.
          +
          +
        • +
        + + + +
          +
        • +

          getParentIdentifier

          +
          public String getParentIdentifier()
          +
          Description copied from interface: Connection
          +
          Returns the unique identifier of the parent ConnectionGroup for + this Connection.
          +
          +
          Specified by:
          +
          getParentIdentifier in interface Connection
          +
          Returns:
          +
          The unique identifier of the parent ConnectionGroup for + this Connection.
          +
          +
        • +
        + + + +
          +
        • +

          setParentIdentifier

          +
          public void setParentIdentifier​(String parentIdentifier)
          +
          Description copied from interface: Connection
          +
          Sets the unique identifier of the parent ConnectionGroup for + this Connection.
          +
          +
          Specified by:
          +
          setParentIdentifier in interface Connection
          +
          Parameters:
          +
          parentIdentifier - The unique identifier of the parent + ConnectionGroup for this Connection.
          +
          +
        • +
        + + + +
          +
        • +

          getConfiguration

          +
          public org.apache.guacamole.protocol.GuacamoleConfiguration getConfiguration()
          +
          Description copied from interface: Connection
          +
          Returns the GuacamoleConfiguration associated with this Connection. Note + that because configurations may contain sensitive information, some data + in this configuration may be omitted or tokenized.
          +
          +
          Specified by:
          +
          getConfiguration in interface Connection
          +
          Returns:
          +
          The GuacamoleConfiguration associated with this Connection.
          +
          +
        • +
        + + + +
          +
        • +

          setConfiguration

          +
          public void setConfiguration​(org.apache.guacamole.protocol.GuacamoleConfiguration config)
          +
          Description copied from interface: Connection
          +
          Sets the GuacamoleConfiguration associated with this Connection.
          +
          +
          Specified by:
          +
          setConfiguration in interface Connection
          +
          Parameters:
          +
          config - The GuacamoleConfiguration to associate with this + Connection.
          +
          +
        • +
        + + + +
          +
        • +

          getAttributes

          +
          public Map<String,​String> getAttributes()
          +
          Description copied from interface: ReadableAttributes
          +
          Returns all attributes associated with this object. The returned map + may not be modifiable.
          +
          +
          Specified by:
          +
          getAttributes in interface ReadableAttributes
          +
          Returns:
          +
          A map of all attribute identifiers to their corresponding values, + for all attributes associated with this object, which may not be + modifiable.
          +
          +
        • +
        + + + +
          +
        • +

          setAttributes

          +
          public void setAttributes​(Map<String,​String> attributes)
          +
          Description copied from interface: Attributes
          +
          Sets the given attributes. If an attribute within the map is not + supported, it will simply be dropped. Any attributes not within the given + map will be left untouched. Attributes which are not declared within the + associated UserContext MUST NOT be submitted, but other extensions may + manipulate the declared attributes through decorate() and redecorate(). + + Implementations may optionally allow storage of unsupported attributes. + Extensions which rely on other extensions to store their attribute + values should verify that such storage is supported by first testing + that the attribute value is retrievable via getAttributes() after being + set.
          +
          +
          Specified by:
          +
          setAttributes in interface Attributes
          +
          Parameters:
          +
          attributes - A map of all attribute identifiers to their corresponding values.
          +
          +
        • +
        + + + +
          +
        • +

          getLastActive

          +
          public Date getLastActive()
          +
          Description copied from interface: Connection
          +
          Returns the date and time that this connection was last used. If the + connection was never used, the time that the connection was last used is + unknown, or this information is not visible to the current user, this + may be null.
          +
          +
          Specified by:
          +
          getLastActive in interface Connection
          +
          Returns:
          +
          The date and time this connection was last used, or null if this + information is unavailable or inapplicable.
          +
          +
        • +
        + + + +
          +
        • +

          getHistory

          +
          @Deprecated
          +public List<? extends ConnectionRecord> getHistory()
          +                                            throws org.apache.guacamole.GuacamoleException
          +
          Deprecated.
          +
          Description copied from interface: Connection
          +
          Returns a list of ConnectionRecords representing the usage history + of this Connection, including any active users. ConnectionRecords + in this list will be sorted in descending order of end time (active + connections are first), and then in descending order of start time + (newer connections are first). If connection history tracking is + not implemented this method should throw GuacamoleUnsupportedException.
          +
          +
          Specified by:
          +
          getHistory in interface Connection
          +
          Returns:
          +
          A list of ConnectionRecrods representing the usage history of this + Connection.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If history tracking is not implemented, if an error occurs while + reading the history of this connection, or if permission is + denied.
          +
          +
        • +
        + + + +
          +
        • +

          getConnectionHistory

          +
          public ActivityRecordSet<ConnectionRecord> getConnectionHistory()
          +                                                         throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: Connection
          +
          Returns an ActivityRecordSet containing ConnectionRecords that + represent the usage history of this Connection, including any active + users. ConnectionRecords in this list will be sorted in descending order + of end time (active connections are first), and then in descending order + of start time (newer connections are first). If connection history + tracking has not been implemented, or has been implemented using the + deprecated Connection.getHistory() method, this function should throw + GuacamoleUnsupportedExpcetion.
          +
          +
          Specified by:
          +
          getConnectionHistory in interface Connection
          +
          Returns:
          +
          An ActivityRecordSet containing ConnectionRecords representing the + usage history of this Connection.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If history tracking is not implemented, if an error occurs while + reading the history of this connection, or if permission is + denied.
          +
          +
        • +
        + + + +
          +
        • +

          getSharingProfileIdentifiers

          +
          public Set<String> getSharingProfileIdentifiers()
          +                                         throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: Connection
          +
          Returns identifiers of all readable sharing profiles that can be used to + join this connection when it is active. The level of access granted to a + joining user is dictated by the connection parameters associated with + the sharing profile, not necessarily the parameters of the primary + connection being joined.
          +
          +
          Specified by:
          +
          getSharingProfileIdentifiers in interface Connection
          +
          Returns:
          +
          A Set of identifiers representing the sharing profiles for this + connection.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while fetching the sharing profiles for this + connection.
          +
          +
        • +
        + + + +
          +
        • +

          connect

          +
          @Deprecated
          +public org.apache.guacamole.net.GuacamoleTunnel connect​(org.apache.guacamole.protocol.GuacamoleClientInformation info)
          +                                                 throws org.apache.guacamole.GuacamoleException
          +
          Deprecated.
          +
          Description copied from interface: Connectable
          +
          Establishes a connection to guacd using the information associated with + this object. The connection will be provided the given client + information.
          +
          +
          Specified by:
          +
          connect in interface Connectable
          +
          Parameters:
          +
          info - Information associated with the connecting client.
          +
          Returns:
          +
          A fully-established GuacamoleTunnel.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while connecting to guacd, or if permission to + connect is denied.
          +
          +
        • +
        + + + +
          +
        • +

          connect

          +
          public org.apache.guacamole.net.GuacamoleTunnel connect​(org.apache.guacamole.protocol.GuacamoleClientInformation info,
          +                                                        Map<String,​String> tokens)
          +                                                 throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: Connectable
          +
          Establishes a connection to guacd using the information associated with + this object. The connection will be provided the given client + information. Implementations which support parameter tokens should + apply the given tokens when configuring the connection, such as with a + TokenFilter.
          +
          +
          Specified by:
          +
          connect in interface Connectable
          +
          Parameters:
          +
          info - Information associated with the connecting client.
          +
          tokens - A Map containing the token names and corresponding values to be + applied as parameter tokens when establishing the connection. If the + implementation does not support parameter tokens, this Map may be + ignored.
          +
          Returns:
          +
          A fully-established GuacamoleTunnel.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while connecting to guacd, or if permission to + connect is denied.
          +
          See Also:
          +
          Parameter Tokens
          +
          +
        • +
        + + + +
          +
        • +

          getActiveConnections

          +
          public int getActiveConnections()
          +
          Description copied from interface: Connectable
          +
          Returns the number of active connections associated with this object. + Implementations may simply return 0 if this value is not tracked.
          +
          +
          Specified by:
          +
          getActiveConnections in interface Connectable
          +
          Returns:
          +
          The number of active connections associated with this object.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/DelegatingConnectionGroup.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/DelegatingConnectionGroup.html new file mode 100644 index 000000000..daf001d9a --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/DelegatingConnectionGroup.html @@ -0,0 +1,778 @@ + + + + + +DelegatingConnectionGroup (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class DelegatingConnectionGroup

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • org.apache.guacamole.net.auth.DelegatingConnectionGroup
      • +
      +
    • +
    +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          DelegatingConnectionGroup

          +
          public DelegatingConnectionGroup​(ConnectionGroup connectionGroup)
          +
          Wraps the given ConnectionGroup such that all function calls against this + DelegatingConnectionGroup will be delegated to it.
          +
          +
          Parameters:
          +
          connectionGroup - The ConnectionGroup to wrap.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getDelegateConnectionGroup

          +
          protected ConnectionGroup getDelegateConnectionGroup()
          +
          Returns the underlying ConnectionGroup wrapped by this + DelegatingConnectionGroup.
          +
          +
          Returns:
          +
          The ConnectionGroup wrapped by this DelegatingConnectionGroup.
          +
          +
        • +
        + + + +
          +
        • +

          getIdentifier

          +
          public String getIdentifier()
          +
          Description copied from interface: Identifiable
          +
          Returns the unique identifier assigned to this object. All identifiable + objects must have a deterministic, unique identifier which may not be + null.
          +
          +
          Specified by:
          +
          getIdentifier in interface Identifiable
          +
          Returns:
          +
          The unique identifier assigned to this object, which may not be + null.
          +
          +
        • +
        + + + +
          +
        • +

          setIdentifier

          +
          public void setIdentifier​(String identifier)
          +
          Description copied from interface: Identifiable
          +
          Sets the identifier assigned to this object.
          +
          +
          Specified by:
          +
          setIdentifier in interface Identifiable
          +
          Parameters:
          +
          identifier - The identifier to assign.
          +
          +
        • +
        + + + +
          +
        • +

          getName

          +
          public String getName()
          +
          Description copied from interface: ConnectionGroup
          +
          Returns the name assigned to this ConnectionGroup.
          +
          +
          Specified by:
          +
          getName in interface ConnectionGroup
          +
          Returns:
          +
          The name assigned to this ConnectionGroup.
          +
          +
        • +
        + + + +
          +
        • +

          setName

          +
          public void setName​(String name)
          +
          Description copied from interface: ConnectionGroup
          +
          Sets the name assigned to this ConnectionGroup.
          +
          +
          Specified by:
          +
          setName in interface ConnectionGroup
          +
          Parameters:
          +
          name - The name to assign.
          +
          +
        • +
        + + + +
          +
        • +

          getParentIdentifier

          +
          public String getParentIdentifier()
          +
          Description copied from interface: ConnectionGroup
          +
          Returns the unique identifier of the parent ConnectionGroup for + this ConnectionGroup.
          +
          +
          Specified by:
          +
          getParentIdentifier in interface ConnectionGroup
          +
          Returns:
          +
          The unique identifier of the parent ConnectionGroup for + this ConnectionGroup.
          +
          +
        • +
        + + + +
          +
        • +

          setParentIdentifier

          +
          public void setParentIdentifier​(String parentIdentifier)
          +
          Description copied from interface: ConnectionGroup
          +
          Sets the unique identifier of the parent ConnectionGroup for + this ConnectionGroup.
          +
          +
          Specified by:
          +
          setParentIdentifier in interface ConnectionGroup
          +
          Parameters:
          +
          parentIdentifier - The unique identifier of the parent + ConnectionGroup for this ConnectionGroup.
          +
          +
        • +
        + + + + + + + + + + + +
          +
        • +

          getConnectionIdentifiers

          +
          public Set<String> getConnectionIdentifiers()
          +                                     throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: ConnectionGroup
          +
          Returns the identifiers of all readable connections that are children + of this connection group.
          +
          +
          Specified by:
          +
          getConnectionIdentifiers in interface ConnectionGroup
          +
          Returns:
          +
          The set of identifiers of all readable connections that are children + of this connection group.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving the identifiers.
          +
          +
        • +
        + + + +
          +
        • +

          getConnectionGroupIdentifiers

          +
          public Set<String> getConnectionGroupIdentifiers()
          +                                          throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: ConnectionGroup
          +
          Returns the identifiers of all readable connection groups that are + children of this connection group.
          +
          +
          Specified by:
          +
          getConnectionGroupIdentifiers in interface ConnectionGroup
          +
          Returns:
          +
          The set of identifiers of all readable connection groups that are + children of this connection group.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving the identifiers.
          +
          +
        • +
        + + + +
          +
        • +

          getAttributes

          +
          public Map<String,​String> getAttributes()
          +
          Description copied from interface: ReadableAttributes
          +
          Returns all attributes associated with this object. The returned map + may not be modifiable.
          +
          +
          Specified by:
          +
          getAttributes in interface ReadableAttributes
          +
          Returns:
          +
          A map of all attribute identifiers to their corresponding values, + for all attributes associated with this object, which may not be + modifiable.
          +
          +
        • +
        + + + +
          +
        • +

          setAttributes

          +
          public void setAttributes​(Map<String,​String> attributes)
          +
          Description copied from interface: Attributes
          +
          Sets the given attributes. If an attribute within the map is not + supported, it will simply be dropped. Any attributes not within the given + map will be left untouched. Attributes which are not declared within the + associated UserContext MUST NOT be submitted, but other extensions may + manipulate the declared attributes through decorate() and redecorate(). + + Implementations may optionally allow storage of unsupported attributes. + Extensions which rely on other extensions to store their attribute + values should verify that such storage is supported by first testing + that the attribute value is retrievable via getAttributes() after being + set.
          +
          +
          Specified by:
          +
          setAttributes in interface Attributes
          +
          Parameters:
          +
          attributes - A map of all attribute identifiers to their corresponding values.
          +
          +
        • +
        + + + +
          +
        • +

          connect

          +
          @Deprecated
          +public org.apache.guacamole.net.GuacamoleTunnel connect​(org.apache.guacamole.protocol.GuacamoleClientInformation info)
          +                                                 throws org.apache.guacamole.GuacamoleException
          +
          Deprecated.
          +
          Description copied from interface: Connectable
          +
          Establishes a connection to guacd using the information associated with + this object. The connection will be provided the given client + information.
          +
          +
          Specified by:
          +
          connect in interface Connectable
          +
          Parameters:
          +
          info - Information associated with the connecting client.
          +
          Returns:
          +
          A fully-established GuacamoleTunnel.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while connecting to guacd, or if permission to + connect is denied.
          +
          +
        • +
        + + + +
          +
        • +

          connect

          +
          public org.apache.guacamole.net.GuacamoleTunnel connect​(org.apache.guacamole.protocol.GuacamoleClientInformation info,
          +                                                        Map<String,​String> tokens)
          +                                                 throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: Connectable
          +
          Establishes a connection to guacd using the information associated with + this object. The connection will be provided the given client + information. Implementations which support parameter tokens should + apply the given tokens when configuring the connection, such as with a + TokenFilter.
          +
          +
          Specified by:
          +
          connect in interface Connectable
          +
          Parameters:
          +
          info - Information associated with the connecting client.
          +
          tokens - A Map containing the token names and corresponding values to be + applied as parameter tokens when establishing the connection. If the + implementation does not support parameter tokens, this Map may be + ignored.
          +
          Returns:
          +
          A fully-established GuacamoleTunnel.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while connecting to guacd, or if permission to + connect is denied.
          +
          See Also:
          +
          Parameter Tokens
          +
          +
        • +
        + + + +
          +
        • +

          getActiveConnections

          +
          public int getActiveConnections()
          +
          Description copied from interface: Connectable
          +
          Returns the number of active connections associated with this object. + Implementations may simply return 0 if this value is not tracked.
          +
          +
          Specified by:
          +
          getActiveConnections in interface Connectable
          +
          Returns:
          +
          The number of active connections associated with this object.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/DelegatingConnectionRecord.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/DelegatingConnectionRecord.html new file mode 100644 index 000000000..63585f869 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/DelegatingConnectionRecord.html @@ -0,0 +1,472 @@ + + + + + +DelegatingConnectionRecord (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class DelegatingConnectionRecord

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          DelegatingConnectionRecord

          +
          public DelegatingConnectionRecord​(ConnectionRecord record)
          +
          Wraps the given ConnectionRecord such that all function calls against + this DelegatingConnectionRecord will be delegated to it.
          +
          +
          Parameters:
          +
          record - The record to wrap.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getDelegateConnectionRecord

          +
          protected ConnectionRecord getDelegateConnectionRecord()
          +
          Returns the underlying ConnectionRecord wrapped by this + DelegatingConnectionRecord.
          +
          +
          Returns:
          +
          The ConnectionRecord wrapped by this DelegatingConnectionRecord.
          +
          +
        • +
        + + + +
          +
        • +

          getConnectionIdentifier

          +
          public String getConnectionIdentifier()
          +
          Description copied from interface: ConnectionRecord
          +
          Returns the identifier of the connection associated with this + connection record.
          +
          +
          Specified by:
          +
          getConnectionIdentifier in interface ConnectionRecord
          +
          Returns:
          +
          The identifier of the connection associated with this connection + record.
          +
          +
        • +
        + + + +
          +
        • +

          getConnectionName

          +
          public String getConnectionName()
          +
          Description copied from interface: ConnectionRecord
          +
          Returns the name of the connection associated with this connection + record.
          +
          +
          Specified by:
          +
          getConnectionName in interface ConnectionRecord
          +
          Returns:
          +
          The name of the connection associated with this connection record.
          +
          +
        • +
        + + + +
          +
        • +

          getSharingProfileIdentifier

          +
          public String getSharingProfileIdentifier()
          +
          Description copied from interface: ConnectionRecord
          +
          Returns the identifier of the sharing profile that was used to access the + connection associated with this connection record. If the connection was + accessed directly (without involving a sharing profile), this will be + null.
          +
          +
          Specified by:
          +
          getSharingProfileIdentifier in interface ConnectionRecord
          +
          Returns:
          +
          The identifier of the sharing profile used to access the connection + associated with this connection record, or null if the connection + was accessed directly.
          +
          +
        • +
        + + + +
          +
        • +

          getSharingProfileName

          +
          public String getSharingProfileName()
          +
          Description copied from interface: ConnectionRecord
          +
          Returns the name of the sharing profile that was used to access the + connection associated with this connection record. If the connection was + accessed directly (without involving a sharing profile), this will be + null.
          +
          +
          Specified by:
          +
          getSharingProfileName in interface ConnectionRecord
          +
          Returns:
          +
          The name of the sharing profile used to access the connection + associated with this connection record, or null if the connection + was accessed directly.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/DelegatingDirectory.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/DelegatingDirectory.html new file mode 100644 index 000000000..78e84fa4e --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/DelegatingDirectory.html @@ -0,0 +1,533 @@ + + + + + +DelegatingDirectory (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class DelegatingDirectory<ObjectType extends Identifiable>

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • org.apache.guacamole.net.auth.DelegatingDirectory<ObjectType>
      • +
      +
    • +
    +
    +
      +
    • +
      +
      Type Parameters:
      +
      ObjectType - The type of objects stored within this Directory.
      +
      +
      +
      All Implemented Interfaces:
      +
      Directory<ObjectType>
      +
      +
      +
      Direct Known Subclasses:
      +
      DecoratingDirectory
      +
      +
      +
      public class DelegatingDirectory<ObjectType extends Identifiable>
      +extends Object
      +implements Directory<ObjectType>
      +
      Directory implementation which simply delegates all function calls to an + underlying Directory.
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          DelegatingDirectory

          +
          public DelegatingDirectory​(Directory<ObjectType> directory)
          +
          Wraps the given Directory such that all function calls against this + DelegatingDirectory will be delegated to it.
          +
          +
          Parameters:
          +
          directory - The directory to wrap.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getDelegateDirectory

          +
          protected Directory<ObjectType> getDelegateDirectory()
          +
          Returns the underlying Directory wrapped by this DelegatingDirectory.
          +
          +
          Returns:
          +
          The Directory wrapped by this DelegatingDirectory.
          +
          +
        • +
        + + + +
          +
        • +

          get

          +
          public ObjectType get​(String identifier)
          +               throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: Directory
          +
          Returns the object having the given identifier. Note that changes to + the object returned will not necessarily affect the object stored within + the Directory. To update an object stored within an + Directory such that future calls to get() will return the updated + object, you must call update() on the object after modification.
          +
          +
          Specified by:
          +
          get in interface Directory<ObjectType extends Identifiable>
          +
          Parameters:
          +
          identifier - The identifier to use when locating the object to + return.
          +
          Returns:
          +
          The object having the given identifier, or null if no such object + exists.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving the + object, or if permission for retrieving the + object is denied.
          +
          +
        • +
        + + + +
          +
        • +

          getAll

          +
          public Collection<ObjectType> getAll​(Collection<String> identifiers)
          +                              throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: Directory
          +
          Returns the objects having the given identifiers. Note that changes to + any object returned will not necessarily affect the object stored within + the Directory. To update an object stored within a + Directory such that future calls to get() will return the updated + object, you must call update() on the object after modification.
          +
          +
          Specified by:
          +
          getAll in interface Directory<ObjectType extends Identifiable>
          +
          Parameters:
          +
          identifiers - The identifiers to use when locating the objects to return.
          +
          Returns:
          +
          The objects having the given identifiers. If any identifiers do not + correspond to accessible objects, those identifiers will be ignored. + If no objects correspond to any of the given identifiers, the + returned collection will be empty.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving the objects, or if permission + to retrieve the requested objects is denied.
          +
          +
        • +
        + + + +
          +
        • +

          getIdentifiers

          +
          public Set<String> getIdentifiers()
          +                           throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: Directory
          +
          Returns a Set containing all identifiers for all objects within this + Directory.
          +
          +
          Specified by:
          +
          getIdentifiers in interface Directory<ObjectType extends Identifiable>
          +
          Returns:
          +
          A Set of all identifiers.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving + the identifiers.
          +
          +
        • +
        + + + + + +
          +
        • +

          add

          +
          public void add​(ObjectType object)
          +         throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: Directory
          +
          Adds the given object to the overall set. If a new identifier is + created for the added object, that identifier will be automatically + assigned via setIdentifier().
          +
          +
          Specified by:
          +
          add in interface Directory<ObjectType extends Identifiable>
          +
          Parameters:
          +
          object - The object to add.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while adding the object, or if adding the object + is not allowed.
          +
          +
        • +
        + + + + + +
          +
        • +

          update

          +
          public void update​(ObjectType object)
          +            throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: Directory
          +
          Updates the stored object with the data contained in the given object.
          +
          +
          Specified by:
          +
          update in interface Directory<ObjectType extends Identifiable>
          +
          Parameters:
          +
          object - The object which will supply the data for the update.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while updating the object, + or if updating the object is not allowed.
          +
          +
        • +
        + + + +
          +
        • +

          remove

          +
          public void remove​(String identifier)
          +            throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: Directory
          +
          Removes the object with the given identifier from the overall set.
          +
          +
          Specified by:
          +
          remove in interface Directory<ObjectType extends Identifiable>
          +
          Parameters:
          +
          identifier - The identifier of the object to remove.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while removing the object, + or if removing object is not allowed.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/DelegatingSharingProfile.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/DelegatingSharingProfile.html new file mode 100644 index 000000000..c088bd45b --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/DelegatingSharingProfile.html @@ -0,0 +1,611 @@ + + + + + +DelegatingSharingProfile (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class DelegatingSharingProfile

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • org.apache.guacamole.net.auth.DelegatingSharingProfile
      • +
      +
    • +
    +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          DelegatingSharingProfile

          +
          public DelegatingSharingProfile​(SharingProfile sharingProfile)
          +
          Wraps the given SharingProfile such that all function calls against this + DelegatingSharingProfile will be delegated to it.
          +
          +
          Parameters:
          +
          sharingProfile - The SharingProfile to wrap.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getDelegateSharingProfile

          +
          protected SharingProfile getDelegateSharingProfile()
          +
          Returns the underlying SharingProfile wrapped by this + DelegatingSharingProfile.
          +
          +
          Returns:
          +
          The SharingProfile wrapped by this DelegatingSharingProfile.
          +
          +
        • +
        + + + +
          +
        • +

          getIdentifier

          +
          public String getIdentifier()
          +
          Description copied from interface: Identifiable
          +
          Returns the unique identifier assigned to this object. All identifiable + objects must have a deterministic, unique identifier which may not be + null.
          +
          +
          Specified by:
          +
          getIdentifier in interface Identifiable
          +
          Returns:
          +
          The unique identifier assigned to this object, which may not be + null.
          +
          +
        • +
        + + + +
          +
        • +

          setIdentifier

          +
          public void setIdentifier​(String identifier)
          +
          Description copied from interface: Identifiable
          +
          Sets the identifier assigned to this object.
          +
          +
          Specified by:
          +
          setIdentifier in interface Identifiable
          +
          Parameters:
          +
          identifier - The identifier to assign.
          +
          +
        • +
        + + + +
          +
        • +

          getName

          +
          public String getName()
          +
          Description copied from interface: SharingProfile
          +
          Returns the human-readable name assigned to this SharingProfile.
          +
          +
          Specified by:
          +
          getName in interface SharingProfile
          +
          Returns:
          +
          The name assigned to this SharingProfile.
          +
          +
        • +
        + + + +
          +
        • +

          setName

          +
          public void setName​(String name)
          +
          Description copied from interface: SharingProfile
          +
          Sets the human-readable name assigned to this SharingProfile.
          +
          +
          Specified by:
          +
          setName in interface SharingProfile
          +
          Parameters:
          +
          name - The name to assign.
          +
          +
        • +
        + + + +
          +
        • +

          getPrimaryConnectionIdentifier

          +
          public String getPrimaryConnectionIdentifier()
          +
          Description copied from interface: SharingProfile
          +
          Returns the identifier of the primary connection associated with this + connection. The primary connection is the connection that this sharing + profile can be used to share.
          +
          +
          Specified by:
          +
          getPrimaryConnectionIdentifier in interface SharingProfile
          +
          Returns:
          +
          The identifier of the primary connection associated with this + connection.
          +
          +
        • +
        + + + +
          +
        • +

          setPrimaryConnectionIdentifier

          +
          public void setPrimaryConnectionIdentifier​(String identifier)
          +
          Description copied from interface: SharingProfile
          +
          Sets the identifier of the primary connection associated with this + connection. The primary connection is the connection that this sharing + profile can be used to share.
          +
          +
          Specified by:
          +
          setPrimaryConnectionIdentifier in interface SharingProfile
          +
          Parameters:
          +
          identifier - The identifier of the primary connection associated with this + connection.
          +
          +
        • +
        + + + +
          +
        • +

          getParameters

          +
          public Map<String,​String> getParameters()
          +
          Description copied from interface: SharingProfile
          +
          Returns a map which contains connection parameter name/value pairs as + key/value pairs. Changes to this map will affect the parameters stored + within this sharing profile. The differences in these parameters compared + to those of the associated primary connection yield different levels of + access to users joining the primary connection via this sharing profile. + Note that because configurations may contain sensitive information, some + data in this map may be omitted or tokenized.
          +
          +
          Specified by:
          +
          getParameters in interface SharingProfile
          +
          Returns:
          +
          A map which contains all connection parameter name/value pairs as + key/value pairs.
          +
          +
        • +
        + + + +
          +
        • +

          setParameters

          +
          public void setParameters​(Map<String,​String> parameters)
          +
          Description copied from interface: SharingProfile
          +
          Replaces all current parameters with the parameters defined within the + given map. Key/value pairs within the map represent parameter name/value + pairs. The differences in these parameters compared to those of the + associated primary connection yield different levels of access to users + joining the primary connection via this sharing profile.
          +
          +
          Specified by:
          +
          setParameters in interface SharingProfile
          +
          Parameters:
          +
          parameters - A map which contains all connection parameter name/value pairs as + key/value pairs.
          +
          +
        • +
        + + + +
          +
        • +

          getAttributes

          +
          public Map<String,​String> getAttributes()
          +
          Description copied from interface: ReadableAttributes
          +
          Returns all attributes associated with this object. The returned map + may not be modifiable.
          +
          +
          Specified by:
          +
          getAttributes in interface ReadableAttributes
          +
          Returns:
          +
          A map of all attribute identifiers to their corresponding values, + for all attributes associated with this object, which may not be + modifiable.
          +
          +
        • +
        + + + +
          +
        • +

          setAttributes

          +
          public void setAttributes​(Map<String,​String> attributes)
          +
          Description copied from interface: Attributes
          +
          Sets the given attributes. If an attribute within the map is not + supported, it will simply be dropped. Any attributes not within the given + map will be left untouched. Attributes which are not declared within the + associated UserContext MUST NOT be submitted, but other extensions may + manipulate the declared attributes through decorate() and redecorate(). + + Implementations may optionally allow storage of unsupported attributes. + Extensions which rely on other extensions to store their attribute + values should verify that such storage is supported by first testing + that the attribute value is retrievable via getAttributes() after being + set.
          +
          +
          Specified by:
          +
          setAttributes in interface Attributes
          +
          Parameters:
          +
          attributes - A map of all attribute identifiers to their corresponding values.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/DelegatingUser.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/DelegatingUser.html new file mode 100644 index 000000000..b9964d194 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/DelegatingUser.html @@ -0,0 +1,877 @@ + + + + + +DelegatingUser (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class DelegatingUser

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          DelegatingUser

          +
          public DelegatingUser​(User user)
          +
          Wraps the given User such that all function calls against this + DelegatingUser will be delegated to it.
          +
          +
          Parameters:
          +
          user - The User to wrap.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getDelegateUser

          +
          protected User getDelegateUser()
          +
          Returns the underlying User wrapped by this DelegatingUser.
          +
          +
          Returns:
          +
          The User wrapped by this DelegatingUser.
          +
          +
        • +
        + + + +
          +
        • +

          getIdentifier

          +
          public String getIdentifier()
          +
          Description copied from interface: Identifiable
          +
          Returns the unique identifier assigned to this object. All identifiable + objects must have a deterministic, unique identifier which may not be + null.
          +
          +
          Specified by:
          +
          getIdentifier in interface Identifiable
          +
          Returns:
          +
          The unique identifier assigned to this object, which may not be + null.
          +
          +
        • +
        + + + +
          +
        • +

          setIdentifier

          +
          public void setIdentifier​(String identifier)
          +
          Description copied from interface: Identifiable
          +
          Sets the identifier assigned to this object.
          +
          +
          Specified by:
          +
          setIdentifier in interface Identifiable
          +
          Parameters:
          +
          identifier - The identifier to assign.
          +
          +
        • +
        + + + +
          +
        • +

          getPassword

          +
          public String getPassword()
          +
          Description copied from interface: User
          +
          Returns this user's password. Note that the password returned may be + hashed or completely arbitrary.
          +
          +
          Specified by:
          +
          getPassword in interface User
          +
          Returns:
          +
          A String which may (or may not) be the user's password.
          +
          +
        • +
        + + + +
          +
        • +

          setPassword

          +
          public void setPassword​(String password)
          +
          Description copied from interface: User
          +
          Sets this user's password. Note that while this function is guaranteed + to change the password of this User object, there is no guarantee that + getPassword() will return the value given to setPassword().
          +
          +
          Specified by:
          +
          setPassword in interface User
          +
          Parameters:
          +
          password - The password to set.
          +
          +
        • +
        + + + +
          +
        • +

          getAttributes

          +
          public Map<String,​String> getAttributes()
          +
          Description copied from interface: ReadableAttributes
          +
          Returns all attributes associated with this object. The returned map + may not be modifiable.
          +
          +
          Specified by:
          +
          getAttributes in interface ReadableAttributes
          +
          Returns:
          +
          A map of all attribute identifiers to their corresponding values, + for all attributes associated with this object, which may not be + modifiable.
          +
          +
        • +
        + + + +
          +
        • +

          setAttributes

          +
          public void setAttributes​(Map<String,​String> attributes)
          +
          Description copied from interface: Attributes
          +
          Sets the given attributes. If an attribute within the map is not + supported, it will simply be dropped. Any attributes not within the given + map will be left untouched. Attributes which are not declared within the + associated UserContext MUST NOT be submitted, but other extensions may + manipulate the declared attributes through decorate() and redecorate(). + + Implementations may optionally allow storage of unsupported attributes. + Extensions which rely on other extensions to store their attribute + values should verify that such storage is supported by first testing + that the attribute value is retrievable via getAttributes() after being + set.
          +
          +
          Specified by:
          +
          setAttributes in interface Attributes
          +
          Parameters:
          +
          attributes - A map of all attribute identifiers to their corresponding values.
          +
          +
        • +
        + + + +
          +
        • +

          getLastActive

          +
          public Date getLastActive()
          +
          Description copied from interface: User
          +
          Returns the date and time that this user was last active. If the user + was never active, the time that the user was last active is unknown, or + this information is not visible to the current user, this may be null.
          +
          +
          Specified by:
          +
          getLastActive in interface User
          +
          Returns:
          +
          The date and time this user was last active, or null if this + information is unavailable or inapplicable.
          +
          +
        • +
        + + + +
          +
        • +

          getHistory

          +
          @Deprecated
          +public List<? extends ActivityRecord> getHistory()
          +                                          throws org.apache.guacamole.GuacamoleException
          +
          Deprecated.
          +
          Description copied from interface: User
          +
          Returns a list of ActivityRecords representing the login history + of this user, including any active sessions. ActivityRecords + in this list will be sorted in descending order of end time (active + sessions are first), and then in descending order of start time + (newer sessions are first). If user login history is not implemented + this method should throw GuacamoleUnsupportedException.
          +
          +
          Specified by:
          +
          getHistory in interface User
          +
          Returns:
          +
          A list of ActivityRecords representing the login history of this + User.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If history tracking is not implemented, if an error occurs while + reading the history of this user, or if permission is denied.
          +
          +
        • +
        + + + +
          +
        • +

          getUserHistory

          +
          public ActivityRecordSet<ActivityRecord> getUserHistory()
          +                                                 throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: User
          +
          Returns an ActivityRecordSet containing ActivityRecords representing + the login history for this user, including any active sessions. + ActivityRecords in this list will be sorted in descending order of end + time (active sessions are first), and then in descending order of start + time (newer sessions are first). If login history tracking is not + implemented, or is only implemented using the deprecated User.getHistory() + method, this method should throw GuacamoleUnsupportedException.
          +
          +
          Specified by:
          +
          getUserHistory in interface User
          +
          Returns:
          +
          An ActivityRecordSet containing ActivityRecords representing the + login history for this user.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If history tracking is not implemented, if an error occurs while + reading the history of this user, or if permission is denied.
          +
          +
        • +
        + + + +
          +
        • +

          getSystemPermissions

          +
          public SystemPermissionSet getSystemPermissions()
          +                                         throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: Permissions
          +
          Returns all system-level permissions given to this object.
          +
          +
          Specified by:
          +
          getSystemPermissions in interface Permissions
          +
          Returns:
          +
          A SystemPermissionSet of all system-level permissions granted to + this object.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving permissions, or if reading all + permissions is not allowed.
          +
          +
        • +
        + + + +
          +
        • +

          getConnectionPermissions

          +
          public ObjectPermissionSet getConnectionPermissions()
          +                                             throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: Permissions
          +
          Returns all connection permissions given to this object.
          +
          +
          Specified by:
          +
          getConnectionPermissions in interface Permissions
          +
          Returns:
          +
          An ObjectPermissionSet of all connection permissions granted to this + object.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving permissions, or if reading all + permissions is not allowed.
          +
          +
        • +
        + + + +
          +
        • +

          getConnectionGroupPermissions

          +
          public ObjectPermissionSet getConnectionGroupPermissions()
          +                                                  throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: Permissions
          +
          Returns all connection group permissions given to this object.
          +
          +
          Specified by:
          +
          getConnectionGroupPermissions in interface Permissions
          +
          Returns:
          +
          An ObjectPermissionSet of all connection group permissions granted + to this object.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving permissions, or if reading all + permissions is not allowed.
          +
          +
        • +
        + + + +
          +
        • +

          getSharingProfilePermissions

          +
          public ObjectPermissionSet getSharingProfilePermissions()
          +                                                 throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: Permissions
          +
          Returns all sharing profile permissions given to this object.
          +
          +
          Specified by:
          +
          getSharingProfilePermissions in interface Permissions
          +
          Returns:
          +
          An ObjectPermissionSet of all sharing profile permissions granted to + this object.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving permissions, or if reading all + permissions is not allowed.
          +
          +
        • +
        + + + +
          +
        • +

          getActiveConnectionPermissions

          +
          public ObjectPermissionSet getActiveConnectionPermissions()
          +                                                   throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: Permissions
          +
          Returns all permissions given to this object regarding currently-active + connections.
          +
          +
          Specified by:
          +
          getActiveConnectionPermissions in interface Permissions
          +
          Returns:
          +
          An ObjectPermissionSet of all active connection permissions granted + to this object.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving permissions, or if reading all + permissions is not allowed.
          +
          +
        • +
        + + + +
          +
        • +

          getUserPermissions

          +
          public ObjectPermissionSet getUserPermissions()
          +                                       throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: Permissions
          +
          Returns all user permissions given to this object.
          +
          +
          Specified by:
          +
          getUserPermissions in interface Permissions
          +
          Returns:
          +
          An ObjectPermissionSet of all user permissions granted to this + object.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving permissions, or if reading all + permissions is not allowed.
          +
          +
        • +
        + + + +
          +
        • +

          getUserGroupPermissions

          +
          public ObjectPermissionSet getUserGroupPermissions()
          +                                            throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: Permissions
          +
          Returns all user group permissions given to this object.
          +
          +
          Specified by:
          +
          getUserGroupPermissions in interface Permissions
          +
          Returns:
          +
          An ObjectPermissionSet of all user group permissions granted to this + object.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving permissions, or if reading all + permissions is not allowed.
          +
          +
        • +
        + + + +
          +
        • +

          getUserGroups

          +
          public RelatedObjectSet getUserGroups()
          +                               throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: User
          +
          Returns a set of all readable user groups of which this user is a member. + If permission is granted for the current user to modify the membership of + this user, then the returned set will be mutable, and any such + modifications should be made through changes to the returned set.
          +
          +
          Specified by:
          +
          getUserGroups in interface User
          +
          Returns:
          +
          The set of all readable user groups of which this user is a member.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving the user groups.
          +
          +
        • +
        + + + +
          +
        • +

          getEffectivePermissions

          +
          public Permissions getEffectivePermissions()
          +                                    throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: User
          +
          Returns a read-only view of all permissions granted to this user. The + exact semantics of what permissions are granted are up to the + implementation, and the permissions within this view may be implied, + derived dynamically, inherited through multiple levels of group + membership, etc.
          +
          +
          Specified by:
          +
          getEffectivePermissions in interface User
          +
          Returns:
          +
          A read-only view of the permissions which are granted to this user.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving permissions, or if reading all + permissions is not allowed.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/DelegatingUserContext.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/DelegatingUserContext.html new file mode 100644 index 000000000..0c92932b1 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/DelegatingUserContext.html @@ -0,0 +1,920 @@ + + + + + +DelegatingUserContext (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class DelegatingUserContext

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • org.apache.guacamole.net.auth.DelegatingUserContext
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      UserContext
      +
      +
      +
      Direct Known Subclasses:
      +
      TokenInjectingUserContext
      +
      +
      +
      public class DelegatingUserContext
      +extends Object
      +implements UserContext
      +
      UserContext implementation which simply delegates all function calls to + an underlying UserContext.
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          DelegatingUserContext

          +
          public DelegatingUserContext​(UserContext userContext)
          +
          Wraps the given UserContext such that all function calls against this + DelegatingUserContext will be delegated to it.
          +
          +
          Parameters:
          +
          userContext - The UserContext to wrap.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getDelegateUserContext

          +
          protected UserContext getDelegateUserContext()
          +
          Returns the underlying UserContext wrapped by this + DelegatingUserContext.
          +
          +
          Returns:
          +
          The UserContext wrapped by this DelegatingUserContext.
          +
          +
        • +
        + + + +
          +
        • +

          self

          +
          public User self()
          +
          Description copied from interface: UserContext
          +
          Returns the User whose access rights control the operations of this + UserContext.
          +
          +
          Specified by:
          +
          self in interface UserContext
          +
          Returns:
          +
          The User whose access rights control the operations of this + UserContext.
          +
          +
        • +
        + + + +
          +
        • +

          getResource

          +
          public Object getResource()
          +                   throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: UserContext
          +
          Returns an arbitrary REST resource representing this UserContext. The + REST resource returned must be properly annotated with JSR-311 + annotations, and may serve as the root resource for any number of + subresources. The returned resource is ultimately exposed at + ".../api/session/ext/IDENTIFIER/", where IDENTIFIER is the identifier of + the AuthenticationProvider associated with this UserContext. + + REST resources returned by this function will only be reachable by + authenticated users with valid authentication tokens. REST resources + which should be accessible by all users regardless of whether they have + authenticated should instead be returned from + AuthenticationProvider.getResource().
          +
          +
          Specified by:
          +
          getResource in interface UserContext
          +
          Returns:
          +
          An arbitrary REST resource, annotated with JSR-311 annotations, or + null if no such resource is defined.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If the REST resource cannot be returned due to an error.
          +
          +
        • +
        + + + +
          +
        • +

          getAuthenticationProvider

          +
          public AuthenticationProvider getAuthenticationProvider()
          +
          Description copied from interface: UserContext
          +
          Returns the AuthenticationProvider which created this UserContext, which + may not be the same AuthenticationProvider that authenticated the user + associated with this UserContext.
          +
          +
          Specified by:
          +
          getAuthenticationProvider in interface UserContext
          +
          Returns:
          +
          The AuthenticationProvider that created this UserContext.
          +
          +
        • +
        + + + +
          +
        • +

          getUserDirectory

          +
          public Directory<User> getUserDirectory()
          +                                 throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: UserContext
          +
          Retrieves a Directory which can be used to view and manipulate other + users, but only as allowed by the permissions given to the user of this + UserContext.
          +
          +
          Specified by:
          +
          getUserDirectory in interface UserContext
          +
          Returns:
          +
          A Directory whose operations are bound by the restrictions + of this UserContext.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while creating the + Directory.
          +
          +
        • +
        + + + +
          +
        • +

          getUserGroupDirectory

          +
          public Directory<UserGroup> getUserGroupDirectory()
          +                                           throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: UserContext
          +
          Retrieves a Directory which can be used to view and manipulate user + groups, but only as allowed by the permissions given to the user of this + UserContext.
          +
          +
          Specified by:
          +
          getUserGroupDirectory in interface UserContext
          +
          Returns:
          +
          A Directory whose operations are bound by the restrictions + of this UserContext.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while creating the Directory.
          +
          +
        • +
        + + + +
          +
        • +

          getConnectionDirectory

          +
          public Directory<Connection> getConnectionDirectory()
          +                                             throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: UserContext
          +
          Retrieves a Directory which can be used to view and manipulate + connections and their configurations, but only as allowed by the + permissions given to the user.
          +
          +
          Specified by:
          +
          getConnectionDirectory in interface UserContext
          +
          Returns:
          +
          A Directory whose operations are bound by the permissions of + the user.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while creating the + Directory.
          +
          +
        • +
        + + + +
          +
        • +

          getConnectionGroupDirectory

          +
          public Directory<ConnectionGroup> getConnectionGroupDirectory()
          +                                                       throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: UserContext
          +
          Retrieves a Directory which can be used to view and manipulate + connection groups and their members, but only as allowed by the + permissions given to the user.
          +
          +
          Specified by:
          +
          getConnectionGroupDirectory in interface UserContext
          +
          Returns:
          +
          A Directory whose operations are bound by the permissions of + the user.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while creating the + Directory.
          +
          +
        • +
        + + + +
          +
        • +

          getActiveConnectionDirectory

          +
          public Directory<ActiveConnection> getActiveConnectionDirectory()
          +                                                         throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: UserContext
          +
          Retrieves a Directory which can be used to view and manipulate + active connections, but only as allowed by the permissions given to the + user.
          +
          +
          Specified by:
          +
          getActiveConnectionDirectory in interface UserContext
          +
          Returns:
          +
          A Directory whose operations are bound by the permissions of the + user.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while creating the Directory.
          +
          +
        • +
        + + + +
          +
        • +

          getSharingProfileDirectory

          +
          public Directory<SharingProfile> getSharingProfileDirectory()
          +                                                     throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: UserContext
          +
          Retrieves a Directory which can be used to view and manipulate + sharing profiles and their configurations, but only as allowed by the + permissions given to the user.
          +
          +
          Specified by:
          +
          getSharingProfileDirectory in interface UserContext
          +
          Returns:
          +
          A Directory whose operations are bound by the permissions of the + user.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while creating the Directory.
          +
          +
        • +
        + + + +
          +
        • +

          getConnectionHistory

          +
          public ActivityRecordSet<ConnectionRecord> getConnectionHistory()
          +                                                         throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: UserContext
          +
          Retrieves all connection records visible to current user. Connection + history records describe the start and end times of connections, and + correspond to the times that users connect or disconnect to individual + remote desktops. The resulting set of connection records can be further + filtered and ordered using the methods defined on ActivityRecordSet.
          +
          +
          Specified by:
          +
          getConnectionHistory in interface UserContext
          +
          Returns:
          +
          A set of all connection records visible to the current user.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving the connection records.
          +
          +
        • +
        + + + +
          +
        • +

          getUserHistory

          +
          public ActivityRecordSet<ActivityRecord> getUserHistory()
          +                                                 throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: UserContext
          +
          Retrieves all user history records visible to current user. User history + records describe the start and end times of user sessions, and correspond + to the times that users logged in or out. The resulting set of user + records can be further filtered and ordered using the methods defined on + ActivityRecordSet.
          +
          +
          Specified by:
          +
          getUserHistory in interface UserContext
          +
          Returns:
          +
          A set of all user records visible to the current user.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving the user records.
          +
          +
        • +
        + + + +
          +
        • +

          getRootConnectionGroup

          +
          public ConnectionGroup getRootConnectionGroup()
          +                                       throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: UserContext
          +
          Retrieves a connection group which can be used to view and manipulate + connections, but only as allowed by the permissions given to the user of + this UserContext.
          +
          +
          Specified by:
          +
          getRootConnectionGroup in interface UserContext
          +
          Returns:
          +
          A connection group whose operations are bound by the restrictions + of this UserContext.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while creating the + Directory.
          +
          +
        • +
        + + + +
          +
        • +

          getUserAttributes

          +
          public Collection<Form> getUserAttributes()
          +
          Description copied from interface: UserContext
          +
          Retrieves a collection of all attributes applicable to users. This + collection will contain only those attributes which the current user has + general permission to view or modify. If there are no such attributes, + this collection will be empty.
          +
          +
          Specified by:
          +
          getUserAttributes in interface UserContext
          +
          Returns:
          +
          A collection of all attributes applicable to users.
          +
          +
        • +
        + + + +
          +
        • +

          getUserGroupAttributes

          +
          public Collection<Form> getUserGroupAttributes()
          +
          Description copied from interface: UserContext
          +
          Retrieves a collection of all attributes applicable to user groups. This + collection will contain only those attributes which the current user has + general permission to view or modify. If there are no such attributes, + this collection will be empty.
          +
          +
          Specified by:
          +
          getUserGroupAttributes in interface UserContext
          +
          Returns:
          +
          A collection of all attributes applicable to user groups.
          +
          +
        • +
        + + + +
          +
        • +

          getConnectionAttributes

          +
          public Collection<Form> getConnectionAttributes()
          +
          Description copied from interface: UserContext
          +
          Retrieves a collection of all attributes applicable to connections. This + collection will contain only those attributes which the current user has + general permission to view or modify. If there are no such attributes, + this collection will be empty.
          +
          +
          Specified by:
          +
          getConnectionAttributes in interface UserContext
          +
          Returns:
          +
          A collection of all attributes applicable to connections.
          +
          +
        • +
        + + + +
          +
        • +

          getConnectionGroupAttributes

          +
          public Collection<Form> getConnectionGroupAttributes()
          +
          Description copied from interface: UserContext
          +
          Retrieves a collection of all attributes applicable to connection + groups. This collection will contain only those attributes which the + current user has general permission to view or modify. If there are no + such attributes, this collection will be empty.
          +
          +
          Specified by:
          +
          getConnectionGroupAttributes in interface UserContext
          +
          Returns:
          +
          A collection of all attributes applicable to connection groups.
          +
          +
        • +
        + + + +
          +
        • +

          getSharingProfileAttributes

          +
          public Collection<Form> getSharingProfileAttributes()
          +
          Description copied from interface: UserContext
          +
          Retrieves a collection of all attributes applicable to sharing profiles. + This collection will contain only those attributes which the current user + has general permission to view or modify. If there are no such + attributes, this collection will be empty.
          +
          +
          Specified by:
          +
          getSharingProfileAttributes in interface UserContext
          +
          Returns:
          +
          A collection of all attributes applicable to sharing profile.
          +
          +
        • +
        + + + +
          +
        • +

          invalidate

          +
          public void invalidate()
          +
          Description copied from interface: UserContext
          +
          Invalidates this user context, releasing all associated resources. This + function will be invoked when the user logs out, or when their session + is automatically invalidated.
          +
          +
          Specified by:
          +
          invalidate in interface UserContext
          +
          +
        • +
        + + + +
          +
        • +

          getPrivileged

          +
          public UserContext getPrivileged()
          +
          Description copied from interface: UserContext
          +
          Returns a user context which provides privileged access. Unlike the + original user context, which is required to enforce its own permissions + and act only within the rights of the associated user, the user context + returned by this function MAY ignore the restrictions that otherwise + limit the current user's access. + +

          This function is intended to allow extensions which decorate other + extensions to act independently of the restrictions that affect the + current user. This function will only be invoked by extensions and + WILL NOT be invoked directly by the web application. Implementations of + this function MAY still enforce access restrictions, particularly if + they do not want to grant full, unrestricted access to other extensions. + +

          A default implementation which simply returns this is + provided for compatibility with Apache Guacamole 1.1.0 and older.

          +
          +
          Specified by:
          +
          getPrivileged in interface UserContext
          +
          Returns:
          +
          A user context instance which MAY ignore some or all restrictions + which otherwise limit the current user's access.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/DelegatingUserGroup.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/DelegatingUserGroup.html new file mode 100644 index 000000000..406bd1dec --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/DelegatingUserGroup.html @@ -0,0 +1,744 @@ + + + + + +DelegatingUserGroup (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class DelegatingUserGroup

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          DelegatingUserGroup

          +
          public DelegatingUserGroup​(UserGroup userGroup)
          +
          Wraps the given UserGroup such that all function calls against this + DelegatingUserGroup will be delegated to it.
          +
          +
          Parameters:
          +
          userGroup - The UserGroup to wrap.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getDelegateUserGroupGroup

          +
          protected UserGroup getDelegateUserGroupGroup()
          +
          Returns the underlying UserGroup wrapped by this DelegatingUserGroup.
          +
          +
          Returns:
          +
          The UserGroup wrapped by this DelegatingUserGroup.
          +
          +
        • +
        + + + +
          +
        • +

          getIdentifier

          +
          public String getIdentifier()
          +
          Description copied from interface: Identifiable
          +
          Returns the unique identifier assigned to this object. All identifiable + objects must have a deterministic, unique identifier which may not be + null.
          +
          +
          Specified by:
          +
          getIdentifier in interface Identifiable
          +
          Returns:
          +
          The unique identifier assigned to this object, which may not be + null.
          +
          +
        • +
        + + + +
          +
        • +

          setIdentifier

          +
          public void setIdentifier​(String identifier)
          +
          Description copied from interface: Identifiable
          +
          Sets the identifier assigned to this object.
          +
          +
          Specified by:
          +
          setIdentifier in interface Identifiable
          +
          Parameters:
          +
          identifier - The identifier to assign.
          +
          +
        • +
        + + + +
          +
        • +

          getAttributes

          +
          public Map<String,​String> getAttributes()
          +
          Description copied from interface: ReadableAttributes
          +
          Returns all attributes associated with this object. The returned map + may not be modifiable.
          +
          +
          Specified by:
          +
          getAttributes in interface ReadableAttributes
          +
          Returns:
          +
          A map of all attribute identifiers to their corresponding values, + for all attributes associated with this object, which may not be + modifiable.
          +
          +
        • +
        + + + +
          +
        • +

          setAttributes

          +
          public void setAttributes​(Map<String,​String> attributes)
          +
          Description copied from interface: Attributes
          +
          Sets the given attributes. If an attribute within the map is not + supported, it will simply be dropped. Any attributes not within the given + map will be left untouched. Attributes which are not declared within the + associated UserContext MUST NOT be submitted, but other extensions may + manipulate the declared attributes through decorate() and redecorate(). + + Implementations may optionally allow storage of unsupported attributes. + Extensions which rely on other extensions to store their attribute + values should verify that such storage is supported by first testing + that the attribute value is retrievable via getAttributes() after being + set.
          +
          +
          Specified by:
          +
          setAttributes in interface Attributes
          +
          Parameters:
          +
          attributes - A map of all attribute identifiers to their corresponding values.
          +
          +
        • +
        + + + +
          +
        • +

          getSystemPermissions

          +
          public SystemPermissionSet getSystemPermissions()
          +                                         throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: Permissions
          +
          Returns all system-level permissions given to this object.
          +
          +
          Specified by:
          +
          getSystemPermissions in interface Permissions
          +
          Returns:
          +
          A SystemPermissionSet of all system-level permissions granted to + this object.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving permissions, or if reading all + permissions is not allowed.
          +
          +
        • +
        + + + +
          +
        • +

          getConnectionPermissions

          +
          public ObjectPermissionSet getConnectionPermissions()
          +                                             throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: Permissions
          +
          Returns all connection permissions given to this object.
          +
          +
          Specified by:
          +
          getConnectionPermissions in interface Permissions
          +
          Returns:
          +
          An ObjectPermissionSet of all connection permissions granted to this + object.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving permissions, or if reading all + permissions is not allowed.
          +
          +
        • +
        + + + +
          +
        • +

          getConnectionGroupPermissions

          +
          public ObjectPermissionSet getConnectionGroupPermissions()
          +                                                  throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: Permissions
          +
          Returns all connection group permissions given to this object.
          +
          +
          Specified by:
          +
          getConnectionGroupPermissions in interface Permissions
          +
          Returns:
          +
          An ObjectPermissionSet of all connection group permissions granted + to this object.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving permissions, or if reading all + permissions is not allowed.
          +
          +
        • +
        + + + +
          +
        • +

          getSharingProfilePermissions

          +
          public ObjectPermissionSet getSharingProfilePermissions()
          +                                                 throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: Permissions
          +
          Returns all sharing profile permissions given to this object.
          +
          +
          Specified by:
          +
          getSharingProfilePermissions in interface Permissions
          +
          Returns:
          +
          An ObjectPermissionSet of all sharing profile permissions granted to + this object.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving permissions, or if reading all + permissions is not allowed.
          +
          +
        • +
        + + + +
          +
        • +

          getActiveConnectionPermissions

          +
          public ObjectPermissionSet getActiveConnectionPermissions()
          +                                                   throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: Permissions
          +
          Returns all permissions given to this object regarding currently-active + connections.
          +
          +
          Specified by:
          +
          getActiveConnectionPermissions in interface Permissions
          +
          Returns:
          +
          An ObjectPermissionSet of all active connection permissions granted + to this object.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving permissions, or if reading all + permissions is not allowed.
          +
          +
        • +
        + + + +
          +
        • +

          getUserPermissions

          +
          public ObjectPermissionSet getUserPermissions()
          +                                       throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: Permissions
          +
          Returns all user permissions given to this object.
          +
          +
          Specified by:
          +
          getUserPermissions in interface Permissions
          +
          Returns:
          +
          An ObjectPermissionSet of all user permissions granted to this + object.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving permissions, or if reading all + permissions is not allowed.
          +
          +
        • +
        + + + +
          +
        • +

          getUserGroupPermissions

          +
          public ObjectPermissionSet getUserGroupPermissions()
          +                                            throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: Permissions
          +
          Returns all user group permissions given to this object.
          +
          +
          Specified by:
          +
          getUserGroupPermissions in interface Permissions
          +
          Returns:
          +
          An ObjectPermissionSet of all user group permissions granted to this + object.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving permissions, or if reading all + permissions is not allowed.
          +
          +
        • +
        + + + +
          +
        • +

          getUserGroups

          +
          public RelatedObjectSet getUserGroups()
          +                               throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: UserGroup
          +
          Returns a set of all readable user groups of which this user group is a + member. If permission is granted for the current user to modify the + membership of this user group, then the returned set will be mutable, + and any such modifications should be made through changes to the + returned set.
          +
          +
          Specified by:
          +
          getUserGroups in interface UserGroup
          +
          Returns:
          +
          The set of all readable user groups of which this user group is a + member.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving the user groups.
          +
          +
        • +
        + + + +
          +
        • +

          getMemberUsers

          +
          public RelatedObjectSet getMemberUsers()
          +                                throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: UserGroup
          +
          Returns a set of all readable users that are members of this user group. + If permission is granted for the current user to modify the members of + this group, then the returned set will be mutable, and any such + modifications should be made through changes to the returned set.
          +
          +
          Specified by:
          +
          getMemberUsers in interface UserGroup
          +
          Returns:
          +
          The set all readable users that are members of this user group, + which may be mutable.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving the users.
          +
          +
        • +
        + + + +
          +
        • +

          getMemberUserGroups

          +
          public RelatedObjectSet getMemberUserGroups()
          +                                     throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: UserGroup
          +
          Returns a set of all readable user groups that are members of this user + group. If permission is granted for the current user to modify the + members of this group, then the returned set will be mutable, and any + such modifications should be made through changes to the returned set.
          +
          +
          Specified by:
          +
          getMemberUserGroups in interface UserGroup
          +
          Returns:
          +
          The set of all readable user groups that are members of this user + group, which may be mutable.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving the user groups.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/Directory.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/Directory.html new file mode 100644 index 000000000..085f59c70 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/Directory.html @@ -0,0 +1,426 @@ + + + + + +Directory (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface Directory<ObjectType extends Identifiable>

    +
    +
    +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          get

          +
          ObjectType get​(String identifier)
          +        throws org.apache.guacamole.GuacamoleException
          +
          Returns the object having the given identifier. Note that changes to + the object returned will not necessarily affect the object stored within + the Directory. To update an object stored within an + Directory such that future calls to get() will return the updated + object, you must call update() on the object after modification.
          +
          +
          Parameters:
          +
          identifier - The identifier to use when locating the object to + return.
          +
          Returns:
          +
          The object having the given identifier, or null if no such object + exists.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving the + object, or if permission for retrieving the + object is denied.
          +
          +
        • +
        + + + +
          +
        • +

          getAll

          +
          Collection<ObjectType> getAll​(Collection<String> identifiers)
          +                       throws org.apache.guacamole.GuacamoleException
          +
          Returns the objects having the given identifiers. Note that changes to + any object returned will not necessarily affect the object stored within + the Directory. To update an object stored within a + Directory such that future calls to get() will return the updated + object, you must call update() on the object after modification.
          +
          +
          Parameters:
          +
          identifiers - The identifiers to use when locating the objects to return.
          +
          Returns:
          +
          The objects having the given identifiers. If any identifiers do not + correspond to accessible objects, those identifiers will be ignored. + If no objects correspond to any of the given identifiers, the + returned collection will be empty.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving the objects, or if permission + to retrieve the requested objects is denied.
          +
          +
        • +
        + + + +
          +
        • +

          getIdentifiers

          +
          Set<String> getIdentifiers()
          +                    throws org.apache.guacamole.GuacamoleException
          +
          Returns a Set containing all identifiers for all objects within this + Directory.
          +
          +
          Returns:
          +
          A Set of all identifiers.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving + the identifiers.
          +
          +
        • +
        + + + + + +
          +
        • +

          add

          +
          void add​(ObjectType object)
          +  throws org.apache.guacamole.GuacamoleException
          +
          Adds the given object to the overall set. If a new identifier is + created for the added object, that identifier will be automatically + assigned via setIdentifier().
          +
          +
          Parameters:
          +
          object - The object to add.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while adding the object, or if adding the object + is not allowed.
          +
          +
        • +
        + + + + + +
          +
        • +

          update

          +
          void update​(ObjectType object)
          +     throws org.apache.guacamole.GuacamoleException
          +
          Updates the stored object with the data contained in the given object.
          +
          +
          Parameters:
          +
          object - The object which will supply the data for the update.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while updating the object, + or if updating the object is not allowed.
          +
          +
        • +
        + + + +
          +
        • +

          remove

          +
          void remove​(String identifier)
          +     throws org.apache.guacamole.GuacamoleException
          +
          Removes the object with the given identifier from the overall set.
          +
          +
          Parameters:
          +
          identifier - The identifier of the object to remove.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while removing the object, + or if removing object is not allowed.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/FileActivityLog.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/FileActivityLog.html new file mode 100644 index 000000000..e959f3f0a --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/FileActivityLog.html @@ -0,0 +1,417 @@ + + + + + +FileActivityLog (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class FileActivityLog

    +
    +
    + +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      ActivityLog
      +
      +
      +
      public class FileActivityLog
      +extends AbstractActivityLog
      +
      ActivityLog implementation that exposes the content of a local file.
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          FileActivityLog

          +
          public FileActivityLog​(ActivityLog.Type type,
          +                       TranslatableMessage description,
          +                       File content)
          +
          Creates a new FileActivityLog that exposes the content of the given + local file as an ActivityLog.
          +
          +
          Parameters:
          +
          type - The type of this ActivityLog.
          +
          description - A human-readable message that describes this log.
          +
          content - The File that should be used to provide the content of this log.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getSize

          +
          public long getSize()
          +             throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: ActivityLog
          +
          Returns the number of bytes available for reading within the content of + this log. If this value is unknown, -1 (ActivityLog.UNKNOWN_SIZE) should be + returned.
          +
          +
          Returns:
          +
          The number of bytes available for reading within the content of + this log, or -1 (ActivityLog.UNKNOWN_SIZE) if this value is unknown.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If the size of the content of this log cannot be determined due to + an error.
          +
          +
        • +
        + + + +
          +
        • +

          getContent

          +
          public InputStream getContent()
          +                       throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: ActivityLog
          +
          Returns an InputStream that allows the content of this log to be read. + Multiple instances of this InputStream may be open at any given time. It + is the responsibility of the caller to close the returned InputStream.
          +
          +
          Returns:
          +
          An InputStream that allows the content of this log to be read.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If the content of this log cannot be read due to an error.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/GuacamoleProxyConfiguration.EncryptionMethod.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/GuacamoleProxyConfiguration.EncryptionMethod.html new file mode 100644 index 000000000..7d44ba429 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/GuacamoleProxyConfiguration.EncryptionMethod.html @@ -0,0 +1,391 @@ + + + + + +GuacamoleProxyConfiguration.EncryptionMethod (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Enum GuacamoleProxyConfiguration.EncryptionMethod

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
      + +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          values

          +
          public static GuacamoleProxyConfiguration.EncryptionMethod[] values()
          +
          Returns an array containing the constants of this enum type, in +the order they are declared. This method may be used to iterate +over the constants as follows: +
          +for (GuacamoleProxyConfiguration.EncryptionMethod c : GuacamoleProxyConfiguration.EncryptionMethod.values())
          +    System.out.println(c);
          +
          +
          +
          Returns:
          +
          an array containing the constants of this enum type, in the order they are declared
          +
          +
        • +
        + + + +
          +
        • +

          valueOf

          +
          public static GuacamoleProxyConfiguration.EncryptionMethod valueOf​(String name)
          +
          Returns the enum constant of this type with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this type. (Extraneous whitespace characters are +not permitted.)
          +
          +
          Parameters:
          +
          name - the name of the enum constant to be returned.
          +
          Returns:
          +
          the enum constant with the specified name
          +
          Throws:
          +
          IllegalArgumentException - if this enum type has no constant with the specified name
          +
          NullPointerException - if the argument is null
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/GuacamoleProxyConfiguration.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/GuacamoleProxyConfiguration.html new file mode 100644 index 000000000..8aaac8087 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/GuacamoleProxyConfiguration.html @@ -0,0 +1,434 @@ + + + + + +GuacamoleProxyConfiguration (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class GuacamoleProxyConfiguration

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • org.apache.guacamole.net.auth.GuacamoleProxyConfiguration
      • +
      +
    • +
    +
    +
      +
    • +
      +
      public class GuacamoleProxyConfiguration
      +extends Object
      +
      Information which describes how the connection to guacd should be + established. This includes the hostname and port which guacd is listening on, + as well as the type of encryption required, if any.
      +
      +
      Author:
      +
      Michael Jumper
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          GuacamoleProxyConfiguration

          +
          public GuacamoleProxyConfiguration​(String hostname,
          +                                   int port,
          +                                   GuacamoleProxyConfiguration.EncryptionMethod encryptionMethod)
          +
          Creates a new GuacamoleProxyConfiguration having the given hostname, + port, and encryption method.
          +
          +
          Parameters:
          +
          hostname - The hostname or address of the machine where guacd is running.
          +
          port - The port that guacd is listening on.
          +
          encryptionMethod - The type of encryption required by the instance of guacd running at + the given hostname and port.
          +
          +
        • +
        + + + +
          +
        • +

          GuacamoleProxyConfiguration

          +
          public GuacamoleProxyConfiguration​(String hostname,
          +                                   int port,
          +                                   boolean ssl)
          +
          Creates a new GuacamoleProxyConfiguration having the given hostname and + port, with encryption method being restricted to either NONE or SSL.
          +
          +
          Parameters:
          +
          hostname - The hostname or address of the machine where guacd is running.
          +
          port - The port that guacd is listening on.
          +
          ssl - true if guacd requires SSL/TLS encryption, false if communication + with guacd should be unencrypted.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getHostname

          +
          public String getHostname()
          +
          Returns the hostname or address of the machine where guacd is running.
          +
          +
          Returns:
          +
          The hostname or address of the machine where guacd is running.
          +
          +
        • +
        + + + +
          +
        • +

          getPort

          +
          public int getPort()
          +
          Returns the port that guacd is listening on.
          +
          +
          Returns:
          +
          The port that guacd is listening on.
          +
          +
        • +
        + + + + +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/Identifiable.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/Identifiable.html new file mode 100644 index 000000000..fae7a466c --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/Identifiable.html @@ -0,0 +1,293 @@ + + + + + +Identifiable (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface Identifiable

    +
    +
    + +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getIdentifier

          +
          String getIdentifier()
          +
          Returns the unique identifier assigned to this object. All identifiable + objects must have a deterministic, unique identifier which may not be + null.
          +
          +
          Returns:
          +
          The unique identifier assigned to this object, which may not be + null.
          +
          +
        • +
        + + + +
          +
        • +

          setIdentifier

          +
          void setIdentifier​(String identifier)
          +
          Sets the identifier assigned to this object.
          +
          +
          Parameters:
          +
          identifier - The identifier to assign.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/Permissions.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/Permissions.html new file mode 100644 index 000000000..d884d4eca --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/Permissions.html @@ -0,0 +1,434 @@ + + + + + +Permissions (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface Permissions

    +
    +
    +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getActiveConnectionPermissions

          +
          ObjectPermissionSet getActiveConnectionPermissions()
          +                                            throws org.apache.guacamole.GuacamoleException
          +
          Returns all permissions given to this object regarding currently-active + connections.
          +
          +
          Returns:
          +
          An ObjectPermissionSet of all active connection permissions granted + to this object.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving permissions, or if reading all + permissions is not allowed.
          +
          +
        • +
        + + + +
          +
        • +

          getConnectionGroupPermissions

          +
          ObjectPermissionSet getConnectionGroupPermissions()
          +                                           throws org.apache.guacamole.GuacamoleException
          +
          Returns all connection group permissions given to this object.
          +
          +
          Returns:
          +
          An ObjectPermissionSet of all connection group permissions granted + to this object.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving permissions, or if reading all + permissions is not allowed.
          +
          +
        • +
        + + + +
          +
        • +

          getConnectionPermissions

          +
          ObjectPermissionSet getConnectionPermissions()
          +                                      throws org.apache.guacamole.GuacamoleException
          +
          Returns all connection permissions given to this object.
          +
          +
          Returns:
          +
          An ObjectPermissionSet of all connection permissions granted to this + object.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving permissions, or if reading all + permissions is not allowed.
          +
          +
        • +
        + + + +
          +
        • +

          getSharingProfilePermissions

          +
          ObjectPermissionSet getSharingProfilePermissions()
          +                                          throws org.apache.guacamole.GuacamoleException
          +
          Returns all sharing profile permissions given to this object.
          +
          +
          Returns:
          +
          An ObjectPermissionSet of all sharing profile permissions granted to + this object.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving permissions, or if reading all + permissions is not allowed.
          +
          +
        • +
        + + + +
          +
        • +

          getSystemPermissions

          +
          SystemPermissionSet getSystemPermissions()
          +                                  throws org.apache.guacamole.GuacamoleException
          +
          Returns all system-level permissions given to this object.
          +
          +
          Returns:
          +
          A SystemPermissionSet of all system-level permissions granted to + this object.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving permissions, or if reading all + permissions is not allowed.
          +
          +
        • +
        + + + +
          +
        • +

          getUserPermissions

          +
          ObjectPermissionSet getUserPermissions()
          +                                throws org.apache.guacamole.GuacamoleException
          +
          Returns all user permissions given to this object.
          +
          +
          Returns:
          +
          An ObjectPermissionSet of all user permissions granted to this + object.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving permissions, or if reading all + permissions is not allowed.
          +
          +
        • +
        + + + +
          +
        • +

          getUserGroupPermissions

          +
          ObjectPermissionSet getUserGroupPermissions()
          +                                     throws org.apache.guacamole.GuacamoleException
          +
          Returns all user group permissions given to this object.
          +
          +
          Returns:
          +
          An ObjectPermissionSet of all user group permissions granted to this + object.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving permissions, or if reading all + permissions is not allowed.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/ReadableAttributes.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/ReadableAttributes.html new file mode 100644 index 000000000..890af8631 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/ReadableAttributes.html @@ -0,0 +1,272 @@ + + + + + +ReadableAttributes (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface ReadableAttributes

    +
    +
    + +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getAttributes

          +
          Map<String,​String> getAttributes()
          +
          Returns all attributes associated with this object. The returned map + may not be modifiable.
          +
          +
          Returns:
          +
          A map of all attribute identifiers to their corresponding values, + for all attributes associated with this object, which may not be + modifiable.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/RelatedObjectSet.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/RelatedObjectSet.html new file mode 100644 index 000000000..4156d8569 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/RelatedObjectSet.html @@ -0,0 +1,377 @@ + + + + + +RelatedObjectSet (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface RelatedObjectSet

    +
    +
    +
    +
      +
    • +
      +
      All Known Implementing Classes:
      +
      SimpleRelatedObjectSet
      +
      +
      +
      public interface RelatedObjectSet
      +
      An arbitrary set of existing objects sharing some common relation. Unlike a + Directory, which provides for maintaining the entire lifecycle of its + objects, a RelatedObjectSet only maintains the relation between its + containing object and the objects within the set. Adding/removing an object + from a RelatedObjectSet affects only the status of the specific relationship + represented by the RelatedObjectSet, not the existence of the objects + themselves.
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Summary

        + + + + + + + + + + + + +
        Fields 
        Modifier and TypeFieldDescription
        static RelatedObjectSetEMPTY_SET +
        An immutable instance of RelatedObjectSEt which contains no objects.
        +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + + + + + + + + + +
        All Methods Instance Methods Abstract Methods 
        Modifier and TypeMethodDescription
        voidaddObjects​(Set<String> identifiers) +
        Adds the objects having the given identifiers, if not already present.
        +
        Set<String>getObjects() +
        Returns a Set which contains the identifiers of all objects contained + within this RelatedObjectSet.
        +
        voidremoveObjects​(Set<String> identifiers) +
        Removes each of the objects having the specified identifiers, if + present.
        +
        +
      • +
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          EMPTY_SET

          +
          static final RelatedObjectSet EMPTY_SET
          +
          An immutable instance of RelatedObjectSEt which contains no objects.
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getObjects

          +
          Set<String> getObjects()
          +                throws org.apache.guacamole.GuacamoleException
          +
          Returns a Set which contains the identifiers of all objects contained + within this RelatedObjectSet.
          +
          +
          Returns:
          +
          A Set which contains the identifiers of all objects contained + within this RelatedObjectSet.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving the objects within the set, or + if objects cannot be retrieved due to lack of permissions to do so.
          +
          +
        • +
        + + + +
          +
        • +

          addObjects

          +
          void addObjects​(Set<String> identifiers)
          +         throws org.apache.guacamole.GuacamoleException
          +
          Adds the objects having the given identifiers, if not already present. + If a specified object is already present, no operation is performed + regarding that object.
          +
          +
          Parameters:
          +
          identifiers - The identifiers of all objects being added.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while adding the objects, or if permission to add + objects is denied.
          +
          +
        • +
        + + + +
          +
        • +

          removeObjects

          +
          void removeObjects​(Set<String> identifiers)
          +            throws org.apache.guacamole.GuacamoleException
          +
          Removes each of the objects having the specified identifiers, if + present. If a specified object is not present, no operation is performed + regarding that object.
          +
          +
          Parameters:
          +
          identifiers - The identifiers of all objects being removed.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while removing the objects, or if permission to + remove objects is denied.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/Shareable.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/Shareable.html new file mode 100644 index 000000000..1c5c10ae9 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/Shareable.html @@ -0,0 +1,291 @@ + + + + + +Shareable (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface Shareable<T>

    +
    +
    +
    +
      +
    • +
      +
      Type Parameters:
      +
      T - The type of object which dictates the semantics/restrictions of shared + objects.
      +
      +
      +
      All Known Subinterfaces:
      +
      ActiveConnection
      +
      +
      +
      All Known Implementing Classes:
      +
      AbstractActiveConnection
      +
      +
      +
      public interface Shareable<T>
      +
      An object which can be shared with others via specially-generated sets of + credentials. It is expected, but not required, that these credentials are + temporary.
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getSharingCredentials

          +
          UserCredentials getSharingCredentials​(String identifier)
          +                               throws org.apache.guacamole.GuacamoleException
          +
          Returns a full set of credentials which can be used to authenticate as a + user with access strictly to this object. The semantics and restrictions + of the shared object (when accessed using the returned sharing + credentials) are defined by the Shareable associated with the given + identifier and within the + Directory<Shareable> of the same UserContext that + this Shareable was retrieved from.
          +
          +
          Parameters:
          +
          identifier - The identifier of a Shareable within the + Directory<Shareable> of the same UserContext + that this Shareable was retrieved from.
          +
          Returns:
          +
          A full set of credentials which can be used to authenticate and + obtain access to this object.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If credentials could not be generated, or permission to share this + object is denied.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/SharingProfile.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/SharingProfile.html new file mode 100644 index 000000000..0d7bf286d --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/SharingProfile.html @@ -0,0 +1,418 @@ + + + + + +SharingProfile (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface SharingProfile

    +
    +
    +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getName

          +
          String getName()
          +
          Returns the human-readable name assigned to this SharingProfile.
          +
          +
          Returns:
          +
          The name assigned to this SharingProfile.
          +
          +
        • +
        + + + +
          +
        • +

          setName

          +
          void setName​(String name)
          +
          Sets the human-readable name assigned to this SharingProfile.
          +
          +
          Parameters:
          +
          name - The name to assign.
          +
          +
        • +
        + + + +
          +
        • +

          getPrimaryConnectionIdentifier

          +
          String getPrimaryConnectionIdentifier()
          +
          Returns the identifier of the primary connection associated with this + connection. The primary connection is the connection that this sharing + profile can be used to share.
          +
          +
          Returns:
          +
          The identifier of the primary connection associated with this + connection.
          +
          +
        • +
        + + + +
          +
        • +

          setPrimaryConnectionIdentifier

          +
          void setPrimaryConnectionIdentifier​(String identifier)
          +
          Sets the identifier of the primary connection associated with this + connection. The primary connection is the connection that this sharing + profile can be used to share.
          +
          +
          Parameters:
          +
          identifier - The identifier of the primary connection associated with this + connection.
          +
          +
        • +
        + + + +
          +
        • +

          getParameters

          +
          Map<String,​String> getParameters()
          +
          Returns a map which contains connection parameter name/value pairs as + key/value pairs. Changes to this map will affect the parameters stored + within this sharing profile. The differences in these parameters compared + to those of the associated primary connection yield different levels of + access to users joining the primary connection via this sharing profile. + Note that because configurations may contain sensitive information, some + data in this map may be omitted or tokenized.
          +
          +
          Returns:
          +
          A map which contains all connection parameter name/value pairs as + key/value pairs.
          +
          +
        • +
        + + + +
          +
        • +

          setParameters

          +
          void setParameters​(Map<String,​String> parameters)
          +
          Replaces all current parameters with the parameters defined within the + given map. Key/value pairs within the map represent parameter name/value + pairs. The differences in these parameters compared to those of the + associated primary connection yield different levels of access to users + joining the primary connection via this sharing profile.
          +
          +
          Parameters:
          +
          parameters - A map which contains all connection parameter name/value pairs as + key/value pairs.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/TokenInjectingConnection.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/TokenInjectingConnection.html new file mode 100644 index 000000000..34cf6a47e --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/TokenInjectingConnection.html @@ -0,0 +1,455 @@ + + + + + +TokenInjectingConnection (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class TokenInjectingConnection

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          TokenInjectingConnection

          +
          public TokenInjectingConnection​(Connection connection,
          +                                Map<String,​String> tokens)
          +
          Wraps the given Connection, automatically adding the given tokens to + each invocation of connect(). Any additional tokens which have the same + name as existing tokens will override the existing values.
          +
          +
          Parameters:
          +
          connection - The Connection to wrap.
          +
          tokens - The additional tokens to include with each call to connect().
          +
          +
        • +
        + + + +
          +
        • +

          TokenInjectingConnection

          +
          public TokenInjectingConnection​(Connection connection)
          +
          Wraps the given Connection such that the additional parameter tokens + added by addTokens(java.util.Map) or returned by + getTokens() are included with each invocation of connect(). + Any additional tokens which have the same name as existing tokens will + override the existing values.
          +
          +
          Parameters:
          +
          connection - The Connection to wrap.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getTokens

          +
          protected Map<String,​String> getTokens()
          +                                      throws org.apache.guacamole.GuacamoleException
          +
          Returns the tokens which should be added to an in-progress call to + connect(). If not overridden, this function will return the tokens + provided when this instance of TokenInjectingConnection was created. If + the values of existing tokens need to be considered, implementations + should override addTokens(java.util.Map) instead.
          +
          +
          Returns:
          +
          The tokens which should be added to the in-progress call to + connect().
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If the applicable tokens cannot be generated.
          +
          +
        • +
        + + + +
          +
        • +

          addTokens

          +
          protected void addTokens​(Map<String,​String> tokens)
          +                  throws org.apache.guacamole.GuacamoleException
          +
          Adds tokens to an in-progress call to connect(). If not overridden, this + function will add the tokens returned by getTokens().
          +
          +
          Parameters:
          +
          tokens - A modifiable Map containing the tokens already supplied to + connect().
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If the applicable tokens cannot be generated.
          +
          +
        • +
        + + + +
          +
        • +

          connect

          +
          public org.apache.guacamole.net.GuacamoleTunnel connect​(org.apache.guacamole.protocol.GuacamoleClientInformation info,
          +                                                        Map<String,​String> tokens)
          +                                                 throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: Connectable
          +
          Establishes a connection to guacd using the information associated with + this object. The connection will be provided the given client + information. Implementations which support parameter tokens should + apply the given tokens when configuring the connection, such as with a + TokenFilter.
          +
          +
          Specified by:
          +
          connect in interface Connectable
          +
          Overrides:
          +
          connect in class DelegatingConnection
          +
          Parameters:
          +
          info - Information associated with the connecting client.
          +
          tokens - A Map containing the token names and corresponding values to be + applied as parameter tokens when establishing the connection. If the + implementation does not support parameter tokens, this Map may be + ignored.
          +
          Returns:
          +
          A fully-established GuacamoleTunnel.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while connecting to guacd, or if permission to + connect is denied.
          +
          See Also:
          +
          Parameter Tokens
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/TokenInjectingConnectionGroup.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/TokenInjectingConnectionGroup.html new file mode 100644 index 000000000..c98a994ab --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/TokenInjectingConnectionGroup.html @@ -0,0 +1,473 @@ + + + + + +TokenInjectingConnectionGroup (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class TokenInjectingConnectionGroup

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          TokenInjectingConnectionGroup

          +
          public TokenInjectingConnectionGroup​(ConnectionGroup connectionGroup,
          +                                     Map<String,​String> tokens)
          +
          Wraps the given ConnectionGroup, automatically adding the given tokens + to each invocation of connect(). Any additional tokens which have the + same name as existing tokens will override the existing values.
          +
          +
          Parameters:
          +
          connectionGroup - The ConnectionGroup to wrap.
          +
          tokens - The additional tokens to include with each call to connect().
          +
          +
        • +
        + + + +
          +
        • +

          TokenInjectingConnectionGroup

          +
          public TokenInjectingConnectionGroup​(ConnectionGroup connectionGroup)
          +
          Wraps the given ConnectionGroup such that the additional parameter + tokens added by addTokens(java.util.Map) or returned by + getTokens() are included with each invocation of connect(). Any + additional tokens which have the same name as existing tokens will + override the existing values.
          +
          +
          Parameters:
          +
          connectionGroup - The ConnectionGroup to wrap.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getTokens

          +
          protected Map<String,​String> getTokens()
          +                                      throws org.apache.guacamole.GuacamoleException
          +
          Returns the tokens which should be added to an in-progress call to + connect(). If not overridden, this function will return the tokens + provided when this instance of TokenInjectingConnection was created. If + the values of existing tokens need to be considered, implementations + should override addTokens(java.util.Map) instead.
          +
          +
          Returns:
          +
          The tokens which should be added to the in-progress call to + connect().
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If the applicable tokens cannot be generated.
          +
          +
        • +
        + + + +
          +
        • +

          addTokens

          +
          protected void addTokens​(Map<String,​String> tokens)
          +                  throws org.apache.guacamole.GuacamoleException
          +
          Adds tokens to an in-progress call to connect(). If not overridden, this + function will add the tokens returned by getTokens().
          +
          +
          Parameters:
          +
          tokens - A modifiable Map containing the tokens already supplied to + connect().
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If the applicable tokens cannot be generated.
          +
          +
        • +
        + + + +
          +
        • +

          connect

          +
          public org.apache.guacamole.net.GuacamoleTunnel connect​(org.apache.guacamole.protocol.GuacamoleClientInformation info,
          +                                                        Map<String,​String> tokens)
          +                                                 throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: Connectable
          +
          Establishes a connection to guacd using the information associated with + this object. The connection will be provided the given client + information. Implementations which support parameter tokens should + apply the given tokens when configuring the connection, such as with a + TokenFilter.
          +
          +
          Specified by:
          +
          connect in interface Connectable
          +
          Overrides:
          +
          connect in class DelegatingConnectionGroup
          +
          Parameters:
          +
          info - Information associated with the connecting client.
          +
          tokens - A Map containing the token names and corresponding values to be + applied as parameter tokens when establishing the connection. If the + implementation does not support parameter tokens, this Map may be + ignored.
          +
          Returns:
          +
          A fully-established GuacamoleTunnel.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while connecting to guacd, or if permission to + connect is denied.
          +
          See Also:
          +
          Parameter Tokens
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/TokenInjectingUserContext.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/TokenInjectingUserContext.html new file mode 100644 index 000000000..098cd1ca8 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/TokenInjectingUserContext.html @@ -0,0 +1,562 @@ + + + + + +TokenInjectingUserContext (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class TokenInjectingUserContext

    +
    +
    + +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      UserContext
      +
      +
      +
      public class TokenInjectingUserContext
      +extends DelegatingUserContext
      +
      UserContext implementation which decorates a given UserContext, + automatically applying additional parameter tokens during the connection + process of any retrieved Connections and ConnectionGroups.
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          TokenInjectingUserContext

          +
          public TokenInjectingUserContext​(UserContext userContext,
          +                                 Map<String,​String> tokens)
          +
          Wraps the given UserContext, overriding the connect() function of each + retrieved Connection and ConnectionGroup such that the given additional + parameter tokens are included. Any additional tokens which have the same + name as existing tokens will override the existing values. If tokens + specific to a particular connection or connection group need to be + included, getTokens() or addTokens() may be overridden to provide a + different set of tokens.
          +
          +
          Parameters:
          +
          userContext - The UserContext to wrap.
          +
          tokens - The additional tokens to include with each call to connect().
          +
          +
        • +
        + + + +
          +
        • +

          TokenInjectingUserContext

          +
          public TokenInjectingUserContext​(UserContext userContext)
          +
          Wraps the given UserContext, overriding the connect() function of each + retrieved Connection and ConnectionGroup such that the additional + parameter tokens added by addTokens() or returned by getTokens() are + included. Any additional tokens which have the same name as existing + tokens will override the existing values.
          +
          +
          Parameters:
          +
          userContext - The UserContext to wrap.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getTokens

          +
          protected Map<String,​String> getTokens​(Connection connection)
          +                                      throws org.apache.guacamole.GuacamoleException
          +
          Returns the tokens which should be added to an in-progress call to + connect() for the given Connection. If not overridden, this function + will return the tokens provided when this instance of + TokenInjectingUserContext was created. If the values of existing tokens + need to be considered, implementations should override + addTokens(org.apache.guacamole.net.auth.Connection, java.util.Map) + instead.
          +
          +
          Parameters:
          +
          connection - The Connection on which connect() has been called.
          +
          Returns:
          +
          The tokens which should be added to the in-progress call to + connect().
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If the tokens applicable to the given connection cannot be + generated.
          +
          +
        • +
        + + + +
          +
        • +

          addTokens

          +
          protected void addTokens​(Connection connection,
          +                         Map<String,​String> tokens)
          +                  throws org.apache.guacamole.GuacamoleException
          +
          Adds tokens to an in-progress call to connect() for the given + Connection. If not overridden, this function will add the tokens + returned by getTokens(org.apache.guacamole.net.auth.Connection).
          +
          +
          Parameters:
          +
          connection - The Connection on which connect() has been called.
          +
          tokens - A modifiable Map containing the tokens already supplied to + connect().
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If the tokens applicable to the given connection cannot be + generated.
          +
          +
        • +
        + + + +
          +
        • +

          getTokens

          +
          protected Map<String,​String> getTokens​(ConnectionGroup connectionGroup)
          +                                      throws org.apache.guacamole.GuacamoleException
          +
          Returns the tokens which should be added to an in-progress call to + connect() for the given ConnectionGroup. If not overridden, this + function will return the tokens provided when this instance of + TokenInjectingUserContext was created. If the values of existing tokens + need to be considered, implementations should override + addTokens(org.apache.guacamole.net.auth.ConnectionGroup, java.util.Map) + instead.
          +
          +
          Parameters:
          +
          connectionGroup - The ConnectionGroup on which connect() has been called.
          +
          Returns:
          +
          The tokens which should be added to the in-progress call to + connect().
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If the tokens applicable to the given connection group cannot be + generated.
          +
          +
        • +
        + + + +
          +
        • +

          addTokens

          +
          protected void addTokens​(ConnectionGroup connectionGroup,
          +                         Map<String,​String> tokens)
          +                  throws org.apache.guacamole.GuacamoleException
          +
          Adds tokens to an in-progress call to connect() for the given + ConnectionGroup. If not overridden, this function will add the tokens + returned by getTokens(org.apache.guacamole.net.auth.ConnectionGroup).
          +
          +
          Parameters:
          +
          connectionGroup - The ConnectionGroup on which connect() has been called.
          +
          tokens - A modifiable Map containing the tokens already supplied to + connect().
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If the tokens applicable to the given connection cannot be + generated.
          +
          +
        • +
        + + + +
          +
        • +

          getConnectionGroupDirectory

          +
          public Directory<ConnectionGroup> getConnectionGroupDirectory()
          +                                                       throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: UserContext
          +
          Retrieves a Directory which can be used to view and manipulate + connection groups and their members, but only as allowed by the + permissions given to the user.
          +
          +
          Specified by:
          +
          getConnectionGroupDirectory in interface UserContext
          +
          Overrides:
          +
          getConnectionGroupDirectory in class DelegatingUserContext
          +
          Returns:
          +
          A Directory whose operations are bound by the permissions of + the user.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while creating the + Directory.
          +
          +
        • +
        + + + +
          +
        • +

          getConnectionDirectory

          +
          public Directory<Connection> getConnectionDirectory()
          +                                             throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: UserContext
          +
          Retrieves a Directory which can be used to view and manipulate + connections and their configurations, but only as allowed by the + permissions given to the user.
          +
          +
          Specified by:
          +
          getConnectionDirectory in interface UserContext
          +
          Overrides:
          +
          getConnectionDirectory in class DelegatingUserContext
          +
          Returns:
          +
          A Directory whose operations are bound by the permissions of + the user.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while creating the + Directory.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/User.Attribute.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/User.Attribute.html new file mode 100644 index 000000000..2053857f1 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/User.Attribute.html @@ -0,0 +1,376 @@ + + + + + +User.Attribute (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class User.Attribute

    +
    +
    + +
    +
      +
    • +
      +
      Enclosing interface:
      +
      User
      +
      +
      +
      public static class User.Attribute
      +extends Object
      +
      All standard attribute names with semantics defined by the Guacamole web + application. Extensions may additionally define their own attributes + with completely arbitrary names and semantics, so long as those names do + not conflict with the names listed here. All standard attribute names + have a "guac-" prefix to avoid such conflicts.
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          FULL_NAME

          +
          public static String FULL_NAME
          +
          The user's full name.
          +
        • +
        + + + +
          +
        • +

          EMAIL_ADDRESS

          +
          public static String EMAIL_ADDRESS
          +
          The email address of the user.
          +
        • +
        + + + +
          +
        • +

          ORGANIZATION

          +
          public static String ORGANIZATION
          +
          The organization, company, group, etc. that the user belongs to.
          +
        • +
        + + + +
          +
        • +

          ORGANIZATIONAL_ROLE

          +
          public static String ORGANIZATIONAL_ROLE
          +
          The role that the user has at the organization, company, group, etc. + they belong to.
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          Attribute

          +
          public Attribute()
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/User.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/User.html new file mode 100644 index 000000000..763886aba --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/User.html @@ -0,0 +1,503 @@ + + + + + +User (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface User

    +
    +
    +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getPassword

          +
          String getPassword()
          +
          Returns this user's password. Note that the password returned may be + hashed or completely arbitrary.
          +
          +
          Returns:
          +
          A String which may (or may not) be the user's password.
          +
          +
        • +
        + + + +
          +
        • +

          setPassword

          +
          void setPassword​(String password)
          +
          Sets this user's password. Note that while this function is guaranteed + to change the password of this User object, there is no guarantee that + getPassword() will return the value given to setPassword().
          +
          +
          Parameters:
          +
          password - The password to set.
          +
          +
        • +
        + + + +
          +
        • +

          getLastActive

          +
          Date getLastActive()
          +
          Returns the date and time that this user was last active. If the user + was never active, the time that the user was last active is unknown, or + this information is not visible to the current user, this may be null.
          +
          +
          Returns:
          +
          The date and time this user was last active, or null if this + information is unavailable or inapplicable.
          +
          +
        • +
        + + + +
          +
        • +

          getHistory

          +
          @Deprecated
          +default List<? extends ActivityRecord> getHistory()
          +                                           throws org.apache.guacamole.GuacamoleException
          +
          Deprecated. +
          This function is deprecated in favor of getUserHistory(), which + returns the login history as an ActivityRecordSet which supports + various sort and filter functions. While this continues to be defined + for API compatibility, new implementation should avoid this function + and use getUserHistory(), instead.
          +
          +
          Returns a list of ActivityRecords representing the login history + of this user, including any active sessions. ActivityRecords + in this list will be sorted in descending order of end time (active + sessions are first), and then in descending order of start time + (newer sessions are first). If user login history is not implemented + this method should throw GuacamoleUnsupportedException.
          +
          +
          Returns:
          +
          A list of ActivityRecords representing the login history of this + User.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If history tracking is not implemented, if an error occurs while + reading the history of this user, or if permission is denied.
          +
          +
        • +
        + + + +
          +
        • +

          getUserHistory

          +
          default ActivityRecordSet<ActivityRecord> getUserHistory()
          +                                                  throws org.apache.guacamole.GuacamoleException
          +
          Returns an ActivityRecordSet containing ActivityRecords representing + the login history for this user, including any active sessions. + ActivityRecords in this list will be sorted in descending order of end + time (active sessions are first), and then in descending order of start + time (newer sessions are first). If login history tracking is not + implemented, or is only implemented using the deprecated getHistory() + method, this method should throw GuacamoleUnsupportedException.
          +
          +
          Returns:
          +
          An ActivityRecordSet containing ActivityRecords representing the + login history for this user.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If history tracking is not implemented, if an error occurs while + reading the history of this user, or if permission is denied.
          +
          +
        • +
        + + + +
          +
        • +

          getUserGroups

          +
          RelatedObjectSet getUserGroups()
          +                        throws org.apache.guacamole.GuacamoleException
          +
          Returns a set of all readable user groups of which this user is a member. + If permission is granted for the current user to modify the membership of + this user, then the returned set will be mutable, and any such + modifications should be made through changes to the returned set.
          +
          +
          Returns:
          +
          The set of all readable user groups of which this user is a member.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving the user groups.
          +
          +
        • +
        + + + +
          +
        • +

          getEffectivePermissions

          +
          Permissions getEffectivePermissions()
          +                             throws org.apache.guacamole.GuacamoleException
          +
          Returns a read-only view of all permissions granted to this user. The + exact semantics of what permissions are granted are up to the + implementation, and the permissions within this view may be implied, + derived dynamically, inherited through multiple levels of group + membership, etc.
          +
          +
          Returns:
          +
          A read-only view of the permissions which are granted to this user.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving permissions, or if reading all + permissions is not allowed.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/UserContext.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/UserContext.html new file mode 100644 index 000000000..6036493c9 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/UserContext.html @@ -0,0 +1,768 @@ + + + + + +UserContext (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface UserContext

    +
    +
    +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          self

          +
          User self()
          +
          Returns the User whose access rights control the operations of this + UserContext.
          +
          +
          Returns:
          +
          The User whose access rights control the operations of this + UserContext.
          +
          +
        • +
        + + + +
          +
        • +

          getResource

          +
          Object getResource()
          +            throws org.apache.guacamole.GuacamoleException
          +
          Returns an arbitrary REST resource representing this UserContext. The + REST resource returned must be properly annotated with JSR-311 + annotations, and may serve as the root resource for any number of + subresources. The returned resource is ultimately exposed at + ".../api/session/ext/IDENTIFIER/", where IDENTIFIER is the identifier of + the AuthenticationProvider associated with this UserContext. + + REST resources returned by this function will only be reachable by + authenticated users with valid authentication tokens. REST resources + which should be accessible by all users regardless of whether they have + authenticated should instead be returned from + AuthenticationProvider.getResource().
          +
          +
          Returns:
          +
          An arbitrary REST resource, annotated with JSR-311 annotations, or + null if no such resource is defined.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If the REST resource cannot be returned due to an error.
          +
          +
        • +
        + + + +
          +
        • +

          getAuthenticationProvider

          +
          AuthenticationProvider getAuthenticationProvider()
          +
          Returns the AuthenticationProvider which created this UserContext, which + may not be the same AuthenticationProvider that authenticated the user + associated with this UserContext.
          +
          +
          Returns:
          +
          The AuthenticationProvider that created this UserContext.
          +
          +
        • +
        + + + +
          +
        • +

          getUserDirectory

          +
          Directory<User> getUserDirectory()
          +                          throws org.apache.guacamole.GuacamoleException
          +
          Retrieves a Directory which can be used to view and manipulate other + users, but only as allowed by the permissions given to the user of this + UserContext.
          +
          +
          Returns:
          +
          A Directory whose operations are bound by the restrictions + of this UserContext.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while creating the + Directory.
          +
          +
        • +
        + + + +
          +
        • +

          getUserGroupDirectory

          +
          Directory<UserGroup> getUserGroupDirectory()
          +                                    throws org.apache.guacamole.GuacamoleException
          +
          Retrieves a Directory which can be used to view and manipulate user + groups, but only as allowed by the permissions given to the user of this + UserContext.
          +
          +
          Returns:
          +
          A Directory whose operations are bound by the restrictions + of this UserContext.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while creating the Directory.
          +
          +
        • +
        + + + +
          +
        • +

          getConnectionDirectory

          +
          Directory<Connection> getConnectionDirectory()
          +                                      throws org.apache.guacamole.GuacamoleException
          +
          Retrieves a Directory which can be used to view and manipulate + connections and their configurations, but only as allowed by the + permissions given to the user.
          +
          +
          Returns:
          +
          A Directory whose operations are bound by the permissions of + the user.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while creating the + Directory.
          +
          +
        • +
        + + + +
          +
        • +

          getConnectionGroupDirectory

          +
          Directory<ConnectionGroup> getConnectionGroupDirectory()
          +                                                throws org.apache.guacamole.GuacamoleException
          +
          Retrieves a Directory which can be used to view and manipulate + connection groups and their members, but only as allowed by the + permissions given to the user.
          +
          +
          Returns:
          +
          A Directory whose operations are bound by the permissions of + the user.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while creating the + Directory.
          +
          +
        • +
        + + + +
          +
        • +

          getActiveConnectionDirectory

          +
          Directory<ActiveConnection> getActiveConnectionDirectory()
          +                                                  throws org.apache.guacamole.GuacamoleException
          +
          Retrieves a Directory which can be used to view and manipulate + active connections, but only as allowed by the permissions given to the + user.
          +
          +
          Returns:
          +
          A Directory whose operations are bound by the permissions of the + user.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while creating the Directory.
          +
          +
        • +
        + + + +
          +
        • +

          getSharingProfileDirectory

          +
          Directory<SharingProfile> getSharingProfileDirectory()
          +                                              throws org.apache.guacamole.GuacamoleException
          +
          Retrieves a Directory which can be used to view and manipulate + sharing profiles and their configurations, but only as allowed by the + permissions given to the user.
          +
          +
          Returns:
          +
          A Directory whose operations are bound by the permissions of the + user.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while creating the Directory.
          +
          +
        • +
        + + + +
          +
        • +

          getConnectionHistory

          +
          ActivityRecordSet<ConnectionRecord> getConnectionHistory()
          +                                                  throws org.apache.guacamole.GuacamoleException
          +
          Retrieves all connection records visible to current user. Connection + history records describe the start and end times of connections, and + correspond to the times that users connect or disconnect to individual + remote desktops. The resulting set of connection records can be further + filtered and ordered using the methods defined on ActivityRecordSet.
          +
          +
          Returns:
          +
          A set of all connection records visible to the current user.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving the connection records.
          +
          +
        • +
        + + + +
          +
        • +

          getUserHistory

          +
          ActivityRecordSet<ActivityRecord> getUserHistory()
          +                                          throws org.apache.guacamole.GuacamoleException
          +
          Retrieves all user history records visible to current user. User history + records describe the start and end times of user sessions, and correspond + to the times that users logged in or out. The resulting set of user + records can be further filtered and ordered using the methods defined on + ActivityRecordSet.
          +
          +
          Returns:
          +
          A set of all user records visible to the current user.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving the user records.
          +
          +
        • +
        + + + +
          +
        • +

          getRootConnectionGroup

          +
          ConnectionGroup getRootConnectionGroup()
          +                                throws org.apache.guacamole.GuacamoleException
          +
          Retrieves a connection group which can be used to view and manipulate + connections, but only as allowed by the permissions given to the user of + this UserContext.
          +
          +
          Returns:
          +
          A connection group whose operations are bound by the restrictions + of this UserContext.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while creating the + Directory.
          +
          +
        • +
        + + + +
          +
        • +

          getUserAttributes

          +
          Collection<Form> getUserAttributes()
          +
          Retrieves a collection of all attributes applicable to users. This + collection will contain only those attributes which the current user has + general permission to view or modify. If there are no such attributes, + this collection will be empty.
          +
          +
          Returns:
          +
          A collection of all attributes applicable to users.
          +
          +
        • +
        + + + +
          +
        • +

          getUserGroupAttributes

          +
          Collection<Form> getUserGroupAttributes()
          +
          Retrieves a collection of all attributes applicable to user groups. This + collection will contain only those attributes which the current user has + general permission to view or modify. If there are no such attributes, + this collection will be empty.
          +
          +
          Returns:
          +
          A collection of all attributes applicable to user groups.
          +
          +
        • +
        + + + +
          +
        • +

          getConnectionAttributes

          +
          Collection<Form> getConnectionAttributes()
          +
          Retrieves a collection of all attributes applicable to connections. This + collection will contain only those attributes which the current user has + general permission to view or modify. If there are no such attributes, + this collection will be empty.
          +
          +
          Returns:
          +
          A collection of all attributes applicable to connections.
          +
          +
        • +
        + + + +
          +
        • +

          getConnectionGroupAttributes

          +
          Collection<Form> getConnectionGroupAttributes()
          +
          Retrieves a collection of all attributes applicable to connection + groups. This collection will contain only those attributes which the + current user has general permission to view or modify. If there are no + such attributes, this collection will be empty.
          +
          +
          Returns:
          +
          A collection of all attributes applicable to connection groups.
          +
          +
        • +
        + + + +
          +
        • +

          getSharingProfileAttributes

          +
          Collection<Form> getSharingProfileAttributes()
          +
          Retrieves a collection of all attributes applicable to sharing profiles. + This collection will contain only those attributes which the current user + has general permission to view or modify. If there are no such + attributes, this collection will be empty.
          +
          +
          Returns:
          +
          A collection of all attributes applicable to sharing profile.
          +
          +
        • +
        + + + +
          +
        • +

          invalidate

          +
          void invalidate()
          +
          Invalidates this user context, releasing all associated resources. This + function will be invoked when the user logs out, or when their session + is automatically invalidated.
          +
        • +
        + + + +
          +
        • +

          getPrivileged

          +
          default UserContext getPrivileged()
          +
          Returns a user context which provides privileged access. Unlike the + original user context, which is required to enforce its own permissions + and act only within the rights of the associated user, the user context + returned by this function MAY ignore the restrictions that otherwise + limit the current user's access. + +

          This function is intended to allow extensions which decorate other + extensions to act independently of the restrictions that affect the + current user. This function will only be invoked by extensions and + WILL NOT be invoked directly by the web application. Implementations of + this function MAY still enforce access restrictions, particularly if + they do not want to grant full, unrestricted access to other extensions. + +

          A default implementation which simply returns this is + provided for compatibility with Apache Guacamole 1.1.0 and older.

          +
          +
          Returns:
          +
          A user context instance which MAY ignore some or all restrictions + which otherwise limit the current user's access.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/UserGroup.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/UserGroup.html new file mode 100644 index 000000000..c72dcd3c5 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/UserGroup.html @@ -0,0 +1,365 @@ + + + + + +UserGroup (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface UserGroup

    +
    +
    +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getUserGroups

          +
          RelatedObjectSet getUserGroups()
          +                        throws org.apache.guacamole.GuacamoleException
          +
          Returns a set of all readable user groups of which this user group is a + member. If permission is granted for the current user to modify the + membership of this user group, then the returned set will be mutable, + and any such modifications should be made through changes to the + returned set.
          +
          +
          Returns:
          +
          The set of all readable user groups of which this user group is a + member.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving the user groups.
          +
          +
        • +
        + + + +
          +
        • +

          getMemberUsers

          +
          RelatedObjectSet getMemberUsers()
          +                         throws org.apache.guacamole.GuacamoleException
          +
          Returns a set of all readable users that are members of this user group. + If permission is granted for the current user to modify the members of + this group, then the returned set will be mutable, and any such + modifications should be made through changes to the returned set.
          +
          +
          Returns:
          +
          The set all readable users that are members of this user group, + which may be mutable.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving the users.
          +
          +
        • +
        + + + +
          +
        • +

          getMemberUserGroups

          +
          RelatedObjectSet getMemberUserGroups()
          +                              throws org.apache.guacamole.GuacamoleException
          +
          Returns a set of all readable user groups that are members of this user + group. If permission is granted for the current user to modify the + members of this group, then the returned set will be mutable, and any + such modifications should be made through changes to the returned set.
          +
          +
          Returns:
          +
          The set of all readable user groups that are members of this user + group, which may be mutable.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving the user groups.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/AbstractActiveConnection.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/AbstractActiveConnection.html new file mode 100644 index 000000000..6c8bec7c2 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/AbstractActiveConnection.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.net.auth.AbstractActiveConnection (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.net.auth.AbstractActiveConnection

    +
    +
    No usage of org.apache.guacamole.net.auth.AbstractActiveConnection
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/AbstractActivityLog.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/AbstractActivityLog.html new file mode 100644 index 000000000..667b54182 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/AbstractActivityLog.html @@ -0,0 +1,199 @@ + + + + + +Uses of Class org.apache.guacamole.net.auth.AbstractActivityLog (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.net.auth.AbstractActivityLog

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/AbstractAuthenticatedUser.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/AbstractAuthenticatedUser.html new file mode 100644 index 000000000..bdad38fcb --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/AbstractAuthenticatedUser.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.net.auth.AbstractAuthenticatedUser (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.net.auth.AbstractAuthenticatedUser

    +
    +
    No usage of org.apache.guacamole.net.auth.AbstractAuthenticatedUser
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/AbstractAuthenticationProvider.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/AbstractAuthenticationProvider.html new file mode 100644 index 000000000..28d906eac --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/AbstractAuthenticationProvider.html @@ -0,0 +1,201 @@ + + + + + +Uses of Class org.apache.guacamole.net.auth.AbstractAuthenticationProvider (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.net.auth.AbstractAuthenticationProvider

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/AbstractConnection.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/AbstractConnection.html new file mode 100644 index 000000000..44d1cfbb7 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/AbstractConnection.html @@ -0,0 +1,201 @@ + + + + + +Uses of Class org.apache.guacamole.net.auth.AbstractConnection (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.net.auth.AbstractConnection

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/AbstractConnectionGroup.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/AbstractConnectionGroup.html new file mode 100644 index 000000000..909ae1507 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/AbstractConnectionGroup.html @@ -0,0 +1,202 @@ + + + + + +Uses of Class org.apache.guacamole.net.auth.AbstractConnectionGroup (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.net.auth.AbstractConnectionGroup

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/AbstractIdentifiable.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/AbstractIdentifiable.html new file mode 100644 index 000000000..7d9ea84e1 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/AbstractIdentifiable.html @@ -0,0 +1,295 @@ + + + + + +Uses of Class org.apache.guacamole.net.auth.AbstractIdentifiable (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.net.auth.AbstractIdentifiable

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/AbstractSharingProfile.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/AbstractSharingProfile.html new file mode 100644 index 000000000..345bfedfb --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/AbstractSharingProfile.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.net.auth.AbstractSharingProfile (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.net.auth.AbstractSharingProfile

    +
    +
    No usage of org.apache.guacamole.net.auth.AbstractSharingProfile
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/AbstractUser.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/AbstractUser.html new file mode 100644 index 000000000..83f27fe2e --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/AbstractUser.html @@ -0,0 +1,200 @@ + + + + + +Uses of Class org.apache.guacamole.net.auth.AbstractUser (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.net.auth.AbstractUser

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/AbstractUserContext.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/AbstractUserContext.html new file mode 100644 index 000000000..6f640f956 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/AbstractUserContext.html @@ -0,0 +1,201 @@ + + + + + +Uses of Class org.apache.guacamole.net.auth.AbstractUserContext (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.net.auth.AbstractUserContext

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/AbstractUserGroup.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/AbstractUserGroup.html new file mode 100644 index 000000000..51b1973d9 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/AbstractUserGroup.html @@ -0,0 +1,201 @@ + + + + + +Uses of Class org.apache.guacamole.net.auth.AbstractUserGroup (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.net.auth.AbstractUserGroup

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/ActiveConnection.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/ActiveConnection.html new file mode 100644 index 000000000..c35535714 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/ActiveConnection.html @@ -0,0 +1,233 @@ + + + + + +Uses of Interface org.apache.guacamole.net.auth.ActiveConnection (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    org.apache.guacamole.net.auth.ActiveConnection

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/ActivityLog.Type.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/ActivityLog.Type.html new file mode 100644 index 000000000..4bc16c181 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/ActivityLog.Type.html @@ -0,0 +1,245 @@ + + + + + +Uses of Class org.apache.guacamole.net.auth.ActivityLog.Type (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.net.auth.ActivityLog.Type

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/ActivityLog.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/ActivityLog.html new file mode 100644 index 000000000..89dcd0fc3 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/ActivityLog.html @@ -0,0 +1,230 @@ + + + + + +Uses of Interface org.apache.guacamole.net.auth.ActivityLog (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    org.apache.guacamole.net.auth.ActivityLog

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/ActivityRecord.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/ActivityRecord.html new file mode 100644 index 000000000..ea86957d8 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/ActivityRecord.html @@ -0,0 +1,387 @@ + + + + + +Uses of Interface org.apache.guacamole.net.auth.ActivityRecord (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    org.apache.guacamole.net.auth.ActivityRecord

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/ActivityRecordSet.SortableProperty.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/ActivityRecordSet.SortableProperty.html new file mode 100644 index 000000000..3cc08f718 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/ActivityRecordSet.SortableProperty.html @@ -0,0 +1,277 @@ + + + + + +Uses of Class org.apache.guacamole.net.auth.ActivityRecordSet.SortableProperty (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.net.auth.ActivityRecordSet.SortableProperty

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/ActivityRecordSet.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/ActivityRecordSet.html new file mode 100644 index 000000000..29c9c05af --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/ActivityRecordSet.html @@ -0,0 +1,490 @@ + + + + + +Uses of Interface org.apache.guacamole.net.auth.ActivityRecordSet (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    org.apache.guacamole.net.auth.ActivityRecordSet

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/Attributes.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/Attributes.html new file mode 100644 index 000000000..8918be45c --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/Attributes.html @@ -0,0 +1,393 @@ + + + + + +Uses of Interface org.apache.guacamole.net.auth.Attributes (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    org.apache.guacamole.net.auth.Attributes

    +
    +
    +
      +
    • + + + + + + + + + + + + + + + + +
      Packages that use Attributes 
      PackageDescription
      org.apache.guacamole.net.auth +
      Provides classes which can be used to extend or replace the authentication + functionality of the Guacamole web application.
      +
      org.apache.guacamole.net.auth.simple +
      Provides a basic AuthenticationProvider base class that can be used to create + simple AuthenticationProviders in the same way allowed by the old + authentication API.
      +
      +
    • +
    • +
        +
      • +
        + + +

        Uses of Attributes in org.apache.guacamole.net.auth

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Subinterfaces of Attributes in org.apache.guacamole.net.auth 
        Modifier and TypeInterfaceDescription
        interface Connection +
        Represents a pairing of a GuacamoleConfiguration with a unique, + human-readable identifier, and abstracts the connection process.
        +
        interface ConnectionGroup +
        Represents a connection group, which can contain both other connection groups + as well as connections.
        +
        interface SharingProfile +
        Represents the semantics which apply to an existing connection when shared, + along with a human-readable name and unique identifier.
        +
        interface User +
        A user of the Guacamole web application.
        +
        interface UserGroup +
        A user group of the Guacamole web application.
        +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Classes in org.apache.guacamole.net.auth that implement Attributes 
        Modifier and TypeClassDescription
        class AbstractConnection +
        Basic implementation of a Guacamole connection.
        +
        class AbstractConnectionGroup +
        Basic implementation of a Guacamole connection group.
        +
        class AbstractSharingProfile +
        Base implementation of a sharing profile which can be used to share a + Guacamole connection.
        +
        class AbstractUser +
        Base implementation of User which provides default implementations of + most functions.
        +
        class AbstractUserGroup +
        Base implementation of UserGroup which provides default implementations of + most functions.
        +
        class DelegatingConnection +
        Connection implementation which simply delegates all function calls to an + underlying Connection.
        +
        class DelegatingConnectionGroup +
        ConnectionGroup implementation which simply delegates all function calls to + an underlying ConnectionGroup.
        +
        class DelegatingSharingProfile +
        SharingProfile implementation which simply delegates all function calls to an + underlying SharingProfile.
        +
        class DelegatingUser +
        User implementation which simply delegates all function calls to an + underlying User.
        +
        class DelegatingUserGroup +
        UserGroup implementation which simply delegates all function calls to an + underlying UserGroup.
        +
        class TokenInjectingConnection +
        Connection implementation which overrides the connect() function of an + underlying Connection, adding a given set of parameter tokens to the tokens + already supplied.
        +
        class TokenInjectingConnectionGroup +
        ConnectionGroup implementation which overrides the connect() function of an + underlying ConnectionGroup, adding a given set of parameter tokens to the + tokens already supplied.
        +
        +
        +
      • +
      • +
        + + +

        Uses of Attributes in org.apache.guacamole.net.auth.simple

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Classes in org.apache.guacamole.net.auth.simple that implement Attributes 
        Modifier and TypeClassDescription
        class SimpleConnection +
        A Connection implementation which establishes the underlying connection to + guacd using the configuration information provided in guacamole.properties.
        +
        class SimpleConnectionGroup +
        An extremely simple read-only implementation of a ConnectionGroup which + returns the connection and connection group identifiers it was constructed + with.
        +
        class SimpleUser +
        A read-only User implementation which has no permissions.
        +
        class SimpleUserGroup +
        A read-only UserGroup implementation which has no members and no + permissions.
        +
        +
        +
      • +
      +
    • +
    +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/AuthenticatedUser.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/AuthenticatedUser.html new file mode 100644 index 000000000..28adca324 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/AuthenticatedUser.html @@ -0,0 +1,517 @@ + + + + + +Uses of Interface org.apache.guacamole.net.auth.AuthenticatedUser (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    org.apache.guacamole.net.auth.AuthenticatedUser

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/AuthenticationProvider.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/AuthenticationProvider.html new file mode 100644 index 000000000..8400571cc --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/AuthenticationProvider.html @@ -0,0 +1,315 @@ + + + + + +Uses of Interface org.apache.guacamole.net.auth.AuthenticationProvider (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    org.apache.guacamole.net.auth.AuthenticationProvider

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/Connectable.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/Connectable.html new file mode 100644 index 000000000..3a8cb64ba --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/Connectable.html @@ -0,0 +1,324 @@ + + + + + +Uses of Interface org.apache.guacamole.net.auth.Connectable (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    org.apache.guacamole.net.auth.Connectable

    +
    +
    +
      +
    • + + + + + + + + + + + + + + + + +
      Packages that use Connectable 
      PackageDescription
      org.apache.guacamole.net.auth +
      Provides classes which can be used to extend or replace the authentication + functionality of the Guacamole web application.
      +
      org.apache.guacamole.net.auth.simple +
      Provides a basic AuthenticationProvider base class that can be used to create + simple AuthenticationProviders in the same way allowed by the old + authentication API.
      +
      +
    • +
    • +
        +
      • +
        + + +

        Uses of Connectable in org.apache.guacamole.net.auth

        + + + + + + + + + + + + + + + + + + + + + + + + +
        Subinterfaces of Connectable in org.apache.guacamole.net.auth 
        Modifier and TypeInterfaceDescription
        interface ActiveConnection +
        A pairing of username and GuacamoleTunnel representing an active usage of a + particular connection.
        +
        interface Connection +
        Represents a pairing of a GuacamoleConfiguration with a unique, + human-readable identifier, and abstracts the connection process.
        +
        interface ConnectionGroup +
        Represents a connection group, which can contain both other connection groups + as well as connections.
        +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Classes in org.apache.guacamole.net.auth that implement Connectable 
        Modifier and TypeClassDescription
        class AbstractActiveConnection +
        Base implementation of an ActiveConnection, providing storage and simply + getters/setters for its main properties.
        +
        class AbstractConnection +
        Basic implementation of a Guacamole connection.
        +
        class AbstractConnectionGroup +
        Basic implementation of a Guacamole connection group.
        +
        class DelegatingConnection +
        Connection implementation which simply delegates all function calls to an + underlying Connection.
        +
        class DelegatingConnectionGroup +
        ConnectionGroup implementation which simply delegates all function calls to + an underlying ConnectionGroup.
        +
        class TokenInjectingConnection +
        Connection implementation which overrides the connect() function of an + underlying Connection, adding a given set of parameter tokens to the tokens + already supplied.
        +
        class TokenInjectingConnectionGroup +
        ConnectionGroup implementation which overrides the connect() function of an + underlying ConnectionGroup, adding a given set of parameter tokens to the + tokens already supplied.
        +
        +
        +
      • +
      • +
        + + +

        Uses of Connectable in org.apache.guacamole.net.auth.simple

        + + + + + + + + + + + + + + + + + + + +
        Classes in org.apache.guacamole.net.auth.simple that implement Connectable 
        Modifier and TypeClassDescription
        class SimpleConnection +
        A Connection implementation which establishes the underlying connection to + guacd using the configuration information provided in guacamole.properties.
        +
        class SimpleConnectionGroup +
        An extremely simple read-only implementation of a ConnectionGroup which + returns the connection and connection group identifiers it was constructed + with.
        +
        +
        +
      • +
      +
    • +
    +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/Connection.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/Connection.html new file mode 100644 index 000000000..4a2a836be --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/Connection.html @@ -0,0 +1,439 @@ + + + + + +Uses of Interface org.apache.guacamole.net.auth.Connection (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    org.apache.guacamole.net.auth.Connection

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/ConnectionGroup.Type.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/ConnectionGroup.Type.html new file mode 100644 index 000000000..e38c3583f --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/ConnectionGroup.Type.html @@ -0,0 +1,251 @@ + + + + + +Uses of Class org.apache.guacamole.net.auth.ConnectionGroup.Type (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.net.auth.ConnectionGroup.Type

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/ConnectionGroup.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/ConnectionGroup.html new file mode 100644 index 000000000..098c85834 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/ConnectionGroup.html @@ -0,0 +1,449 @@ + + + + + +Uses of Interface org.apache.guacamole.net.auth.ConnectionGroup (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    org.apache.guacamole.net.auth.ConnectionGroup

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/ConnectionRecord.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/ConnectionRecord.html new file mode 100644 index 000000000..8982ecf02 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/ConnectionRecord.html @@ -0,0 +1,332 @@ + + + + + +Uses of Interface org.apache.guacamole.net.auth.ConnectionRecord (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    org.apache.guacamole.net.auth.ConnectionRecord

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/ConnectionRecordSet.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/ConnectionRecordSet.html new file mode 100644 index 000000000..722ae35f9 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/ConnectionRecordSet.html @@ -0,0 +1,235 @@ + + + + + +Uses of Interface org.apache.guacamole.net.auth.ConnectionRecordSet (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    org.apache.guacamole.net.auth.ConnectionRecordSet

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/Credentials.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/Credentials.html new file mode 100644 index 000000000..c306484c5 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/Credentials.html @@ -0,0 +1,468 @@ + + + + + +Uses of Class org.apache.guacamole.net.auth.Credentials (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.net.auth.Credentials

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/DecoratingActivityRecordSet.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/DecoratingActivityRecordSet.html new file mode 100644 index 000000000..af0647649 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/DecoratingActivityRecordSet.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.net.auth.DecoratingActivityRecordSet (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.net.auth.DecoratingActivityRecordSet

    +
    +
    No usage of org.apache.guacamole.net.auth.DecoratingActivityRecordSet
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/DecoratingDirectory.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/DecoratingDirectory.html new file mode 100644 index 000000000..c382883d9 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/DecoratingDirectory.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.net.auth.DecoratingDirectory (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.net.auth.DecoratingDirectory

    +
    +
    No usage of org.apache.guacamole.net.auth.DecoratingDirectory
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/DelegatingActivityRecord.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/DelegatingActivityRecord.html new file mode 100644 index 000000000..a7dedc01d --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/DelegatingActivityRecord.html @@ -0,0 +1,200 @@ + + + + + +Uses of Class org.apache.guacamole.net.auth.DelegatingActivityRecord (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.net.auth.DelegatingActivityRecord

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/DelegatingActivityRecordSet.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/DelegatingActivityRecordSet.html new file mode 100644 index 000000000..0792398fd --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/DelegatingActivityRecordSet.html @@ -0,0 +1,200 @@ + + + + + +Uses of Class org.apache.guacamole.net.auth.DelegatingActivityRecordSet (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.net.auth.DelegatingActivityRecordSet

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/DelegatingConnection.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/DelegatingConnection.html new file mode 100644 index 000000000..3f40d0636 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/DelegatingConnection.html @@ -0,0 +1,201 @@ + + + + + +Uses of Class org.apache.guacamole.net.auth.DelegatingConnection (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.net.auth.DelegatingConnection

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/DelegatingConnectionGroup.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/DelegatingConnectionGroup.html new file mode 100644 index 000000000..7dc69ecec --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/DelegatingConnectionGroup.html @@ -0,0 +1,201 @@ + + + + + +Uses of Class org.apache.guacamole.net.auth.DelegatingConnectionGroup (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.net.auth.DelegatingConnectionGroup

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/DelegatingConnectionRecord.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/DelegatingConnectionRecord.html new file mode 100644 index 000000000..cc666697a --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/DelegatingConnectionRecord.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.net.auth.DelegatingConnectionRecord (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.net.auth.DelegatingConnectionRecord

    +
    +
    No usage of org.apache.guacamole.net.auth.DelegatingConnectionRecord
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/DelegatingDirectory.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/DelegatingDirectory.html new file mode 100644 index 000000000..d0869d961 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/DelegatingDirectory.html @@ -0,0 +1,200 @@ + + + + + +Uses of Class org.apache.guacamole.net.auth.DelegatingDirectory (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.net.auth.DelegatingDirectory

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/DelegatingSharingProfile.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/DelegatingSharingProfile.html new file mode 100644 index 000000000..38ef7389c --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/DelegatingSharingProfile.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.net.auth.DelegatingSharingProfile (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.net.auth.DelegatingSharingProfile

    +
    +
    No usage of org.apache.guacamole.net.auth.DelegatingSharingProfile
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/DelegatingUser.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/DelegatingUser.html new file mode 100644 index 000000000..ad527eca7 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/DelegatingUser.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.net.auth.DelegatingUser (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.net.auth.DelegatingUser

    +
    +
    No usage of org.apache.guacamole.net.auth.DelegatingUser
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/DelegatingUserContext.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/DelegatingUserContext.html new file mode 100644 index 000000000..2e79ef382 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/DelegatingUserContext.html @@ -0,0 +1,201 @@ + + + + + +Uses of Class org.apache.guacamole.net.auth.DelegatingUserContext (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.net.auth.DelegatingUserContext

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/DelegatingUserGroup.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/DelegatingUserGroup.html new file mode 100644 index 000000000..61e56c28e --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/DelegatingUserGroup.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.net.auth.DelegatingUserGroup (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.net.auth.DelegatingUserGroup

    +
    +
    No usage of org.apache.guacamole.net.auth.DelegatingUserGroup
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/Directory.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/Directory.html new file mode 100644 index 000000000..5c2f2117c --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/Directory.html @@ -0,0 +1,471 @@ + + + + + +Uses of Interface org.apache.guacamole.net.auth.Directory (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    org.apache.guacamole.net.auth.Directory

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/FileActivityLog.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/FileActivityLog.html new file mode 100644 index 000000000..ea9c95308 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/FileActivityLog.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.net.auth.FileActivityLog (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.net.auth.FileActivityLog

    +
    +
    No usage of org.apache.guacamole.net.auth.FileActivityLog
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/GuacamoleProxyConfiguration.EncryptionMethod.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/GuacamoleProxyConfiguration.EncryptionMethod.html new file mode 100644 index 000000000..966e44a0a --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/GuacamoleProxyConfiguration.EncryptionMethod.html @@ -0,0 +1,232 @@ + + + + + +Uses of Class org.apache.guacamole.net.auth.GuacamoleProxyConfiguration.EncryptionMethod (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.net.auth.GuacamoleProxyConfiguration.EncryptionMethod

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/GuacamoleProxyConfiguration.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/GuacamoleProxyConfiguration.html new file mode 100644 index 000000000..bafa00ddb --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/GuacamoleProxyConfiguration.html @@ -0,0 +1,207 @@ + + + + + +Uses of Class org.apache.guacamole.net.auth.GuacamoleProxyConfiguration (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.net.auth.GuacamoleProxyConfiguration

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/Identifiable.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/Identifiable.html new file mode 100644 index 000000000..707ebb982 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/Identifiable.html @@ -0,0 +1,501 @@ + + + + + +Uses of Interface org.apache.guacamole.net.auth.Identifiable (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    org.apache.guacamole.net.auth.Identifiable

    +
    +
    +
      +
    • + + + + + + + + + + + + + + + + +
      Packages that use Identifiable 
      PackageDescription
      org.apache.guacamole.net.auth +
      Provides classes which can be used to extend or replace the authentication + functionality of the Guacamole web application.
      +
      org.apache.guacamole.net.auth.simple +
      Provides a basic AuthenticationProvider base class that can be used to create + simple AuthenticationProviders in the same way allowed by the old + authentication API.
      +
      +
    • +
    • +
        +
      • +
        + + +

        Uses of Identifiable in org.apache.guacamole.net.auth

        + + + + + + + + + + + + + + + + + + + + + + + + +
        Classes in org.apache.guacamole.net.auth with type parameters of type Identifiable 
        Modifier and TypeClassDescription
        class DecoratingDirectory<ObjectType extends Identifiable> +
        Directory implementation which simplifies decorating the objects within an + underlying Directory.
        +
        class DelegatingDirectory<ObjectType extends Identifiable> +
        Directory implementation which simply delegates all function calls to an + underlying Directory.
        +
        interface Directory<ObjectType extends Identifiable> +
        Provides access to a collection of all objects with associated identifiers, + and allows user manipulation and removal.
        +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Subinterfaces of Identifiable in org.apache.guacamole.net.auth 
        Modifier and TypeInterfaceDescription
        interface ActiveConnection +
        A pairing of username and GuacamoleTunnel representing an active usage of a + particular connection.
        +
        interface AuthenticatedUser +
        A user of the Guacamole web application who has been authenticated by an + AuthenticationProvider.
        +
        interface Connection +
        Represents a pairing of a GuacamoleConfiguration with a unique, + human-readable identifier, and abstracts the connection process.
        +
        interface ConnectionGroup +
        Represents a connection group, which can contain both other connection groups + as well as connections.
        +
        interface SharingProfile +
        Represents the semantics which apply to an existing connection when shared, + along with a human-readable name and unique identifier.
        +
        interface User +
        A user of the Guacamole web application.
        +
        interface UserGroup +
        A user group of the Guacamole web application.
        +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Classes in org.apache.guacamole.net.auth that implement Identifiable 
        Modifier and TypeClassDescription
        class AbstractActiveConnection +
        Base implementation of an ActiveConnection, providing storage and simply + getters/setters for its main properties.
        +
        class AbstractAuthenticatedUser +
        Basic implementation of an AuthenticatedUser which uses the username to + determine equality.
        +
        class AbstractConnection +
        Basic implementation of a Guacamole connection.
        +
        class AbstractConnectionGroup +
        Basic implementation of a Guacamole connection group.
        +
        class AbstractIdentifiable +
        Abstract implementation of Identifiable which provides equals() and + hashCode() implementations which use the identifier to determine equality.
        +
        class AbstractSharingProfile +
        Base implementation of a sharing profile which can be used to share a + Guacamole connection.
        +
        class AbstractUser +
        Base implementation of User which provides default implementations of + most functions.
        +
        class AbstractUserGroup +
        Base implementation of UserGroup which provides default implementations of + most functions.
        +
        class DelegatingConnection +
        Connection implementation which simply delegates all function calls to an + underlying Connection.
        +
        class DelegatingConnectionGroup +
        ConnectionGroup implementation which simply delegates all function calls to + an underlying ConnectionGroup.
        +
        class DelegatingSharingProfile +
        SharingProfile implementation which simply delegates all function calls to an + underlying SharingProfile.
        +
        class DelegatingUser +
        User implementation which simply delegates all function calls to an + underlying User.
        +
        class DelegatingUserGroup +
        UserGroup implementation which simply delegates all function calls to an + underlying UserGroup.
        +
        class TokenInjectingConnection +
        Connection implementation which overrides the connect() function of an + underlying Connection, adding a given set of parameter tokens to the tokens + already supplied.
        +
        class TokenInjectingConnectionGroup +
        ConnectionGroup implementation which overrides the connect() function of an + underlying ConnectionGroup, adding a given set of parameter tokens to the + tokens already supplied.
        +
        +
        +
      • +
      • +
        + + +

        Uses of Identifiable in org.apache.guacamole.net.auth.simple

        + + + + + + + + + + + + + + +
        Classes in org.apache.guacamole.net.auth.simple with type parameters of type Identifiable 
        Modifier and TypeClassDescription
        class SimpleDirectory<ObjectType extends Identifiable> +
        An extremely simple read-only implementation of a Directory which provides + access to a pre-defined Map of arbitrary objects.
        +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Classes in org.apache.guacamole.net.auth.simple that implement Identifiable 
        Modifier and TypeClassDescription
        class SimpleConnection +
        A Connection implementation which establishes the underlying connection to + guacd using the configuration information provided in guacamole.properties.
        +
        class SimpleConnectionGroup +
        An extremely simple read-only implementation of a ConnectionGroup which + returns the connection and connection group identifiers it was constructed + with.
        +
        class SimpleUser +
        A read-only User implementation which has no permissions.
        +
        class SimpleUserGroup +
        A read-only UserGroup implementation which has no members and no + permissions.
        +
        + + + + + + + + + + + + +
        Constructors in org.apache.guacamole.net.auth.simple with parameters of type Identifiable 
        ConstructorDescription
        SimpleDirectory​(ObjectType... objects) +
        Creates a new SimpleDirectory which provides access to the given + objects.
        +
        +
        +
      • +
      +
    • +
    +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/Permissions.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/Permissions.html new file mode 100644 index 000000000..ba26812bb --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/Permissions.html @@ -0,0 +1,317 @@ + + + + + +Uses of Interface org.apache.guacamole.net.auth.Permissions (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    org.apache.guacamole.net.auth.Permissions

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/ReadableAttributes.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/ReadableAttributes.html new file mode 100644 index 000000000..e57a274f9 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/ReadableAttributes.html @@ -0,0 +1,433 @@ + + + + + +Uses of Interface org.apache.guacamole.net.auth.ReadableAttributes (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    org.apache.guacamole.net.auth.ReadableAttributes

    +
    +
    +
      +
    • + + + + + + + + + + + + + + + + +
      Packages that use ReadableAttributes 
      PackageDescription
      org.apache.guacamole.net.auth +
      Provides classes which can be used to extend or replace the authentication + functionality of the Guacamole web application.
      +
      org.apache.guacamole.net.auth.simple +
      Provides a basic AuthenticationProvider base class that can be used to create + simple AuthenticationProviders in the same way allowed by the old + authentication API.
      +
      +
    • +
    • +
        +
      • +
        + + +

        Uses of ReadableAttributes in org.apache.guacamole.net.auth

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Subinterfaces of ReadableAttributes in org.apache.guacamole.net.auth 
        Modifier and TypeInterfaceDescription
        interface ActivityRecord +
        A logging record describing when a user started and ended a particular + activity.
        +
        interface Attributes +
        An object which is associated with a set of arbitrary attributes that may + be modifiable, defined as name/value pairs.
        +
        interface Connection +
        Represents a pairing of a GuacamoleConfiguration with a unique, + human-readable identifier, and abstracts the connection process.
        +
        interface ConnectionGroup +
        Represents a connection group, which can contain both other connection groups + as well as connections.
        +
        interface ConnectionRecord +
        A logging record describing when a user started and ended usage of a + particular connection.
        +
        interface SharingProfile +
        Represents the semantics which apply to an existing connection when shared, + along with a human-readable name and unique identifier.
        +
        interface User +
        A user of the Guacamole web application.
        +
        interface UserGroup +
        A user group of the Guacamole web application.
        +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Classes in org.apache.guacamole.net.auth that implement ReadableAttributes 
        Modifier and TypeClassDescription
        class AbstractConnection +
        Basic implementation of a Guacamole connection.
        +
        class AbstractConnectionGroup +
        Basic implementation of a Guacamole connection group.
        +
        class AbstractSharingProfile +
        Base implementation of a sharing profile which can be used to share a + Guacamole connection.
        +
        class AbstractUser +
        Base implementation of User which provides default implementations of + most functions.
        +
        class AbstractUserGroup +
        Base implementation of UserGroup which provides default implementations of + most functions.
        +
        class DelegatingActivityRecord +
        ActivityRecord implementation which simply delegates all function calls to an + underlying ActivityRecord.
        +
        class DelegatingConnection +
        Connection implementation which simply delegates all function calls to an + underlying Connection.
        +
        class DelegatingConnectionGroup +
        ConnectionGroup implementation which simply delegates all function calls to + an underlying ConnectionGroup.
        +
        class DelegatingConnectionRecord +
        ConnectionRecord implementation which simply delegates all function calls to + an underlying ConnectionRecord.
        +
        class DelegatingSharingProfile +
        SharingProfile implementation which simply delegates all function calls to an + underlying SharingProfile.
        +
        class DelegatingUser +
        User implementation which simply delegates all function calls to an + underlying User.
        +
        class DelegatingUserGroup +
        UserGroup implementation which simply delegates all function calls to an + underlying UserGroup.
        +
        class TokenInjectingConnection +
        Connection implementation which overrides the connect() function of an + underlying Connection, adding a given set of parameter tokens to the tokens + already supplied.
        +
        class TokenInjectingConnectionGroup +
        ConnectionGroup implementation which overrides the connect() function of an + underlying ConnectionGroup, adding a given set of parameter tokens to the + tokens already supplied.
        +
        +
        +
      • +
      • +
        + + +

        Uses of ReadableAttributes in org.apache.guacamole.net.auth.simple

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Classes in org.apache.guacamole.net.auth.simple that implement ReadableAttributes 
        Modifier and TypeClassDescription
        class SimpleConnection +
        A Connection implementation which establishes the underlying connection to + guacd using the configuration information provided in guacamole.properties.
        +
        class SimpleConnectionGroup +
        An extremely simple read-only implementation of a ConnectionGroup which + returns the connection and connection group identifiers it was constructed + with.
        +
        class SimpleUser +
        A read-only User implementation which has no permissions.
        +
        class SimpleUserGroup +
        A read-only UserGroup implementation which has no members and no + permissions.
        +
        +
        +
      • +
      +
    • +
    +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/RelatedObjectSet.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/RelatedObjectSet.html new file mode 100644 index 000000000..052a17099 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/RelatedObjectSet.html @@ -0,0 +1,322 @@ + + + + + +Uses of Interface org.apache.guacamole.net.auth.RelatedObjectSet (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    org.apache.guacamole.net.auth.RelatedObjectSet

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/Shareable.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/Shareable.html new file mode 100644 index 000000000..ebafbd547 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/Shareable.html @@ -0,0 +1,218 @@ + + + + + +Uses of Interface org.apache.guacamole.net.auth.Shareable (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    org.apache.guacamole.net.auth.Shareable

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/SharingProfile.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/SharingProfile.html new file mode 100644 index 000000000..da6b15605 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/SharingProfile.html @@ -0,0 +1,275 @@ + + + + + +Uses of Interface org.apache.guacamole.net.auth.SharingProfile (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    org.apache.guacamole.net.auth.SharingProfile

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/TokenInjectingConnection.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/TokenInjectingConnection.html new file mode 100644 index 000000000..2f1c4723a --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/TokenInjectingConnection.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.net.auth.TokenInjectingConnection (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.net.auth.TokenInjectingConnection

    +
    +
    No usage of org.apache.guacamole.net.auth.TokenInjectingConnection
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/TokenInjectingConnectionGroup.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/TokenInjectingConnectionGroup.html new file mode 100644 index 000000000..29cbc0512 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/TokenInjectingConnectionGroup.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.net.auth.TokenInjectingConnectionGroup (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.net.auth.TokenInjectingConnectionGroup

    +
    +
    No usage of org.apache.guacamole.net.auth.TokenInjectingConnectionGroup
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/TokenInjectingUserContext.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/TokenInjectingUserContext.html new file mode 100644 index 000000000..125ade236 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/TokenInjectingUserContext.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.net.auth.TokenInjectingUserContext (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.net.auth.TokenInjectingUserContext

    +
    +
    No usage of org.apache.guacamole.net.auth.TokenInjectingUserContext
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/User.Attribute.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/User.Attribute.html new file mode 100644 index 000000000..983a5a5b0 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/User.Attribute.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.net.auth.User.Attribute (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.net.auth.User.Attribute

    +
    +
    No usage of org.apache.guacamole.net.auth.User.Attribute
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/User.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/User.html new file mode 100644 index 000000000..9e5aab7a9 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/User.html @@ -0,0 +1,351 @@ + + + + + +Uses of Interface org.apache.guacamole.net.auth.User (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    org.apache.guacamole.net.auth.User

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/UserContext.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/UserContext.html new file mode 100644 index 000000000..17552a392 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/UserContext.html @@ -0,0 +1,502 @@ + + + + + +Uses of Interface org.apache.guacamole.net.auth.UserContext (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    org.apache.guacamole.net.auth.UserContext

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/UserGroup.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/UserGroup.html new file mode 100644 index 000000000..cecce7469 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/class-use/UserGroup.html @@ -0,0 +1,307 @@ + + + + + +Uses of Interface org.apache.guacamole.net.auth.UserGroup (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    org.apache.guacamole.net.auth.UserGroup

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/credentials/CredentialsInfo.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/credentials/CredentialsInfo.html new file mode 100644 index 000000000..097871c71 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/credentials/CredentialsInfo.html @@ -0,0 +1,434 @@ + + + + + +CredentialsInfo (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class CredentialsInfo

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • org.apache.guacamole.net.auth.credentials.CredentialsInfo
      • +
      +
    • +
    +
    +
      +
    • +
      +
      Direct Known Subclasses:
      +
      UserCredentials
      +
      +
      +
      public class CredentialsInfo
      +extends Object
      +
      Information which describes a set of valid credentials.
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          EMPTY

          +
          public static final CredentialsInfo EMPTY
          +
          CredentialsInfo object which describes empty credentials. No fields are + required.
          +
        • +
        + + + +
          +
        • +

          USERNAME

          +
          public static final Field USERNAME
          +
          A field describing the username HTTP parameter expected by Guacamole + during login, if usernames are being used.
          +
        • +
        + + + +
          +
        • +

          PASSWORD

          +
          public static final Field PASSWORD
          +
          A field describing the password HTTP parameter expected by Guacamole + during login, if passwords are being used.
          +
        • +
        + + + +
          +
        • +

          USERNAME_PASSWORD

          +
          public static final CredentialsInfo USERNAME_PASSWORD
          +
          CredentialsInfo object which describes standard username/password + credentials.
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          CredentialsInfo

          +
          public CredentialsInfo​(Collection<Field> fields)
          +
          Creates a new CredentialsInfo object which requires the given fields for + any conforming credentials.
          +
          +
          Parameters:
          +
          fields - The fields to require.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getFields

          +
          public Collection<Field> getFields()
          +
          Returns all fields required for valid credentials as described by this + object.
          +
          +
          Returns:
          +
          All fields required for valid credentials.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/credentials/GuacamoleCredentialsException.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/credentials/GuacamoleCredentialsException.html new file mode 100644 index 000000000..a3464f8f6 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/credentials/GuacamoleCredentialsException.html @@ -0,0 +1,446 @@ + + + + + +GuacamoleCredentialsException (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class GuacamoleCredentialsException

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • java.lang.Throwable
      • +
      • +
          +
        • java.lang.Exception
        • +
        • +
            +
          • org.apache.guacamole.GuacamoleException
          • +
          • +
              +
            • org.apache.guacamole.GuacamoleClientException
            • +
            • +
                +
              • org.apache.guacamole.GuacamoleSecurityException
              • +
              • +
                  +
                • org.apache.guacamole.GuacamoleUnauthorizedException
                • +
                • +
                    +
                  • org.apache.guacamole.net.auth.credentials.GuacamoleCredentialsException
                  • +
                  +
                • +
                +
              • +
              +
            • +
            +
          • +
          +
        • +
        +
      • +
      +
    • +
    +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          GuacamoleCredentialsException

          +
          public GuacamoleCredentialsException​(String message,
          +                                     Throwable cause,
          +                                     CredentialsInfo credentialsInfo)
          +
          Creates a new GuacamoleInvalidCredentialsException with the given + message, cause, and associated credential information.
          +
          +
          Parameters:
          +
          message - A human readable description of the exception that occurred.
          +
          cause - The cause of this exception.
          +
          credentialsInfo - Information describing the form of valid credentials.
          +
          +
        • +
        + + + +
          +
        • +

          GuacamoleCredentialsException

          +
          public GuacamoleCredentialsException​(String message,
          +                                     CredentialsInfo credentialsInfo)
          +
          Creates a new GuacamoleInvalidCredentialsException with the given + message and associated credential information.
          +
          +
          Parameters:
          +
          message - A human readable description of the exception that occurred.
          +
          credentialsInfo - Information describing the form of valid credentials.
          +
          +
        • +
        + + + +
          +
        • +

          GuacamoleCredentialsException

          +
          public GuacamoleCredentialsException​(Throwable cause,
          +                                     CredentialsInfo credentialsInfo)
          +
          Creates a new GuacamoleInvalidCredentialsException with the given cause + and associated credential information.
          +
          +
          Parameters:
          +
          cause - The cause of this exception.
          +
          credentialsInfo - Information describing the form of valid credentials.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getCredentialsInfo

          +
          public CredentialsInfo getCredentialsInfo()
          +
          Returns information describing the form of valid credentials.
          +
          +
          Returns:
          +
          Information describing the form of valid credentials.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/credentials/GuacamoleInsufficientCredentialsException.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/credentials/GuacamoleInsufficientCredentialsException.html new file mode 100644 index 000000000..f70ce8d35 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/credentials/GuacamoleInsufficientCredentialsException.html @@ -0,0 +1,415 @@ + + + + + +GuacamoleInsufficientCredentialsException (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class GuacamoleInsufficientCredentialsException

    +
    +
    + +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      Serializable
      +
      +
      +
      Direct Known Subclasses:
      +
      TranslatableGuacamoleInsufficientCredentialsException
      +
      +
      +
      public class GuacamoleInsufficientCredentialsException
      +extends GuacamoleCredentialsException
      +
      A security-related exception thrown when access is denied to a user because + the provided credentials are not sufficient for authentication to succeed. + The validity or invalidity of the given credentials is not specified, and + more information is needed before a decision can be made. Additional + information describing the form of valid credentials is provided.
      +
      +
      See Also:
      +
      Serialized Form
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          GuacamoleInsufficientCredentialsException

          +
          public GuacamoleInsufficientCredentialsException​(String message,
          +                                                 Throwable cause,
          +                                                 CredentialsInfo credentialsInfo)
          +
          Creates a new GuacamoleInsufficientCredentialsException with the given + message, cause, and associated credential information.
          +
          +
          Parameters:
          +
          message - A human readable description of the exception that occurred.
          +
          cause - The cause of this exception.
          +
          credentialsInfo - Information describing the form of valid credentials.
          +
          +
        • +
        + + + +
          +
        • +

          GuacamoleInsufficientCredentialsException

          +
          public GuacamoleInsufficientCredentialsException​(String message,
          +                                                 CredentialsInfo credentialsInfo)
          +
          Creates a new GuacamoleInsufficientCredentialsException with the given + message and associated credential information.
          +
          +
          Parameters:
          +
          message - A human readable description of the exception that occurred.
          +
          credentialsInfo - Information describing the form of valid credentials.
          +
          +
        • +
        + + + +
          +
        • +

          GuacamoleInsufficientCredentialsException

          +
          public GuacamoleInsufficientCredentialsException​(Throwable cause,
          +                                                 CredentialsInfo credentialsInfo)
          +
          Creates a new GuacamoleInsufficientCredentialsException with the given + cause and associated credential information.
          +
          +
          Parameters:
          +
          cause - The cause of this exception.
          +
          credentialsInfo - Information describing the form of valid credentials.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/credentials/GuacamoleInvalidCredentialsException.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/credentials/GuacamoleInvalidCredentialsException.html new file mode 100644 index 000000000..7d0e0da04 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/credentials/GuacamoleInvalidCredentialsException.html @@ -0,0 +1,413 @@ + + + + + +GuacamoleInvalidCredentialsException (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class GuacamoleInvalidCredentialsException

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          GuacamoleInvalidCredentialsException

          +
          public GuacamoleInvalidCredentialsException​(String message,
          +                                            Throwable cause,
          +                                            CredentialsInfo credentialsInfo)
          +
          Creates a new GuacamoleInvalidCredentialsException with the given + message, cause, and associated credential information.
          +
          +
          Parameters:
          +
          message - A human readable description of the exception that occurred.
          +
          cause - The cause of this exception.
          +
          credentialsInfo - Information describing the form of valid credentials.
          +
          +
        • +
        + + + +
          +
        • +

          GuacamoleInvalidCredentialsException

          +
          public GuacamoleInvalidCredentialsException​(String message,
          +                                            CredentialsInfo credentialsInfo)
          +
          Creates a new GuacamoleInvalidCredentialsException with the given + message and associated credential information.
          +
          +
          Parameters:
          +
          message - A human readable description of the exception that occurred.
          +
          credentialsInfo - Information describing the form of valid credentials.
          +
          +
        • +
        + + + +
          +
        • +

          GuacamoleInvalidCredentialsException

          +
          public GuacamoleInvalidCredentialsException​(Throwable cause,
          +                                            CredentialsInfo credentialsInfo)
          +
          Creates a new GuacamoleInvalidCredentialsException with the given cause + and associated credential information.
          +
          +
          Parameters:
          +
          cause - The cause of this exception.
          +
          credentialsInfo - Information describing the form of valid credentials.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/credentials/UserCredentials.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/credentials/UserCredentials.html new file mode 100644 index 000000000..107caafc7 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/credentials/UserCredentials.html @@ -0,0 +1,622 @@ + + + + + +UserCredentials (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class UserCredentials

    +
    +
    + +
    +
      +
    • +
      +
      public class UserCredentials
      +extends CredentialsInfo
      +
      A fully-valid set of credentials and associated values. Each instance of + this object should describe a full set of parameter name/value pairs which + can be used to authenticate successfully, even if that success depends on + factors not described by this object.
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          UserCredentials

          +
          public UserCredentials​(Collection<Field> fields,
          +                       Map<String,​String> values)
          +
          Creates a new UserCredentials object which requires the given fields and + values.
          +
          +
          Parameters:
          +
          fields - The fields to require.
          +
          values - The values required for each field, as a map of field name to + correct value.
          +
          +
        • +
        + + + +
          +
        • +

          UserCredentials

          +
          public UserCredentials​(CredentialsInfo info,
          +                       Map<String,​String> values)
          +
          Creates a new UserCredentials object which requires fields described by + the given CredentialsInfo. The value required for each field in the + CredentialsInfo is defined in the given Map.
          +
          +
          Parameters:
          +
          info - The CredentialsInfo object describing the fields to require.
          +
          values - The values required for each field, as a map of field name to + correct value.
          +
          +
        • +
        + + + +
          +
        • +

          UserCredentials

          +
          public UserCredentials​(CredentialsInfo info)
          +
          Creates a new UserCredentials object which requires fields described by + the given CredentialsInfo but does not yet have any defined values.
          +
          +
          Parameters:
          +
          info - The CredentialsInfo object describing the fields to require.
          +
          +
        • +
        + + + +
          +
        • +

          UserCredentials

          +
          public UserCredentials​(Collection<Field> fields)
          +
          Creates a new UserCredentials object which requires the given fields but + does not yet have any defined values.
          +
          +
          Parameters:
          +
          fields - The fields to require.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getValues

          +
          public Map<String,​String> getValues()
          +
          Returns a map of field names to values which backs this UserCredentials + object. Modifications to the returned map will directly affect the + associated name/value pairs.
          +
          +
          Returns:
          +
          A map of field names to their corresponding values which backs this + UserCredentials object.
          +
          +
        • +
        + + + +
          +
        • +

          setValues

          +
          public void setValues​(Map<String,​String> values)
          +
          Replaces the map backing this UserCredentials object with the given map. + All field name/value pairs described by the original map are replaced by + the name/value pairs in the given map.
          +
          +
          Parameters:
          +
          values - The map of field names to their corresponding values which should be + used to back this UserCredentials object.
          +
          +
        • +
        + + + +
          +
        • +

          getValue

          +
          public String getValue​(String name)
          +
          Returns the value defined by this UserCrendentials object for the field + having the given name.
          +
          +
          Parameters:
          +
          name - The name of the field whose value should be returned.
          +
          Returns:
          +
          The value of the field having the given name, or null if no value is + defined for that field.
          +
          +
        • +
        + + + +
          +
        • +

          getValue

          +
          public String getValue​(Field field)
          +
          Returns the value defined by this UserCrendentials object for the given + field.
          +
          +
          Parameters:
          +
          field - The field whose value should be returned.
          +
          Returns:
          +
          The value of the given field, or null if no value is defined for + that field.
          +
          +
        • +
        + + + +
          +
        • +

          setValue

          +
          public String setValue​(String name,
          +                       String value)
          +
          Sets the value of the field having the given name. Any existing value + for that field is replaced.
          +
          +
          Parameters:
          +
          name - The name of the field whose value should be assigned.
          +
          value - The value to assign to the field having the given name.
          +
          Returns:
          +
          The previous value of the field, or null if the value of the field + was not previously defined.
          +
          +
        • +
        + + + +
          +
        • +

          setValue

          +
          public String setValue​(Field field,
          +                       String value)
          +
          Sets the value of the given field. Any existing value for that field is + replaced.
          +
          +
          Parameters:
          +
          field - The field whose value should be assigned.
          +
          value - The value to assign to the given field.
          +
          Returns:
          +
          The previous value of the field, or null if the value of the field + was not previously defined.
          +
          +
        • +
        + + + +
          +
        • +

          removeValue

          +
          public String removeValue​(String name)
          +
          Removes (undefines) the value of the field having the given name, + returning its previous value. If the field value was not defined, this + function has no effect, and null is returned.
          +
          +
          Parameters:
          +
          name - The name of the field whose value should be removed.
          +
          Returns:
          +
          The previous value of the field, or null if the value of the field + was not previously defined.
          +
          +
        • +
        + + + +
          +
        • +

          removeValue

          +
          public String removeValue​(Field field)
          +
          Removes (undefines) the value of the given field returning its previous + value. If the field value was not defined, this function has no effect, + and null is returned.
          +
          +
          Parameters:
          +
          field - The field whose value should be removed.
          +
          Returns:
          +
          The previous value of the field, or null if the value of the field + was not previously defined.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/credentials/class-use/CredentialsInfo.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/credentials/class-use/CredentialsInfo.html new file mode 100644 index 000000000..a986c923f --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/credentials/class-use/CredentialsInfo.html @@ -0,0 +1,471 @@ + + + + + +Uses of Class org.apache.guacamole.net.auth.credentials.CredentialsInfo (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.net.auth.credentials.CredentialsInfo

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/credentials/class-use/GuacamoleCredentialsException.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/credentials/class-use/GuacamoleCredentialsException.html new file mode 100644 index 000000000..fef519e7b --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/credentials/class-use/GuacamoleCredentialsException.html @@ -0,0 +1,253 @@ + + + + + +Uses of Class org.apache.guacamole.net.auth.credentials.GuacamoleCredentialsException (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.net.auth.credentials.GuacamoleCredentialsException

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/credentials/class-use/GuacamoleInsufficientCredentialsException.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/credentials/class-use/GuacamoleInsufficientCredentialsException.html new file mode 100644 index 000000000..33257edde --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/credentials/class-use/GuacamoleInsufficientCredentialsException.html @@ -0,0 +1,198 @@ + + + + + +Uses of Class org.apache.guacamole.net.auth.credentials.GuacamoleInsufficientCredentialsException (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.net.auth.credentials.GuacamoleInsufficientCredentialsException

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/credentials/class-use/GuacamoleInvalidCredentialsException.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/credentials/class-use/GuacamoleInvalidCredentialsException.html new file mode 100644 index 000000000..f87ed8de0 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/credentials/class-use/GuacamoleInvalidCredentialsException.html @@ -0,0 +1,198 @@ + + + + + +Uses of Class org.apache.guacamole.net.auth.credentials.GuacamoleInvalidCredentialsException (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.net.auth.credentials.GuacamoleInvalidCredentialsException

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/credentials/class-use/UserCredentials.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/credentials/class-use/UserCredentials.html new file mode 100644 index 000000000..8b9d150aa --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/credentials/class-use/UserCredentials.html @@ -0,0 +1,200 @@ + + + + + +Uses of Class org.apache.guacamole.net.auth.credentials.UserCredentials (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.net.auth.credentials.UserCredentials

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/credentials/package-summary.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/credentials/package-summary.html new file mode 100644 index 000000000..781ece325 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/credentials/package-summary.html @@ -0,0 +1,208 @@ + + + + + +org.apache.guacamole.net.auth.credentials (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Package org.apache.guacamole.net.auth.credentials

    +
    +
    +
      +
    • + + + + + + + + + + + + + + + + +
      Class Summary 
      ClassDescription
      CredentialsInfo +
      Information which describes a set of valid credentials.
      +
      UserCredentials +
      A fully-valid set of credentials and associated values.
      +
      +
    • +
    • + + + + + + + + + + + + + + + + + + + + +
      Exception Summary 
      ExceptionDescription
      GuacamoleCredentialsException +
      A security-related exception thrown when access is denied to a user because + of a problem related to the provided credentials.
      +
      GuacamoleInsufficientCredentialsException +
      A security-related exception thrown when access is denied to a user because + the provided credentials are not sufficient for authentication to succeed.
      +
      GuacamoleInvalidCredentialsException +
      A security-related exception thrown when access is denied to a user because + the provided credentials are invalid.
      +
      +
    • +
    +
    +
    +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/credentials/package-tree.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/credentials/package-tree.html new file mode 100644 index 000000000..9eb696ba5 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/credentials/package-tree.html @@ -0,0 +1,199 @@ + + + + + +org.apache.guacamole.net.auth.credentials Class Hierarchy (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Hierarchy For Package org.apache.guacamole.net.auth.credentials

    +Package Hierarchies: + +
    +
    +
    +

    Class Hierarchy

    + +
    +
    +
    +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/credentials/package-use.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/credentials/package-use.html new file mode 100644 index 000000000..c4029c314 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/credentials/package-use.html @@ -0,0 +1,264 @@ + + + + + +Uses of Package org.apache.guacamole.net.auth.credentials (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Package
    org.apache.guacamole.net.auth.credentials

    +
    +
    + +
    +
    +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/package-summary.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/package-summary.html new file mode 100644 index 000000000..28aab659d --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/package-summary.html @@ -0,0 +1,577 @@ + + + + + +org.apache.guacamole.net.auth (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Package org.apache.guacamole.net.auth

    +
    +
    +
    + + +
    Provides classes which can be used to extend or replace the authentication + functionality of the Guacamole web application.
    +
    +
      +
    • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Interface Summary 
      InterfaceDescription
      ActiveConnection +
      A pairing of username and GuacamoleTunnel representing an active usage of a + particular connection.
      +
      ActivityLog +
      An arbitrary log of an activity whose content may be exposed to a user with + sufficient privileges.
      +
      ActivityRecord +
      A logging record describing when a user started and ended a particular + activity.
      +
      ActivityRecordSet<RecordType extends ActivityRecord> +
      A set of all available records related to a type of activity which has a + defined start and end time, such as a user being logged in or connected, or a + subset of those records.
      +
      Attributes +
      An object which is associated with a set of arbitrary attributes that may + be modifiable, defined as name/value pairs.
      +
      AuthenticatedUser +
      A user of the Guacamole web application who has been authenticated by an + AuthenticationProvider.
      +
      AuthenticationProvider +
      Provides means of authorizing users and for accessing and managing data + associated with those users.
      +
      Connectable +
      An object which Guacamole can connect to.
      +
      Connection +
      Represents a pairing of a GuacamoleConfiguration with a unique, + human-readable identifier, and abstracts the connection process.
      +
      ConnectionGroup +
      Represents a connection group, which can contain both other connection groups + as well as connections.
      +
      ConnectionRecord +
      A logging record describing when a user started and ended usage of a + particular connection.
      +
      ConnectionRecordSetDeprecated. + +
      Directory<ObjectType extends Identifiable> +
      Provides access to a collection of all objects with associated identifiers, + and allows user manipulation and removal.
      +
      Identifiable +
      An object which has a deterministic, unique identifier, which may not be + null.
      +
      Permissions +
      An object which may be granted permissions to access/manipulate various + other objects or aspects of the system.
      +
      ReadableAttributes +
      An object which is associated with a set of arbitrary attributes, defined + as name/value pairs.
      +
      RelatedObjectSet +
      An arbitrary set of existing objects sharing some common relation.
      +
      Shareable<T> +
      An object which can be shared with others via specially-generated sets of + credentials.
      +
      SharingProfile +
      Represents the semantics which apply to an existing connection when shared, + along with a human-readable name and unique identifier.
      +
      User +
      A user of the Guacamole web application.
      +
      UserContext +
      The context of an active user.
      +
      UserGroup +
      A user group of the Guacamole web application.
      +
      +
    • +
    • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Class Summary 
      ClassDescription
      AbstractActiveConnection +
      Base implementation of an ActiveConnection, providing storage and simply + getters/setters for its main properties.
      +
      AbstractActivityLog +
      Base implementation of an ActivityLog, providing storage and simple + getters/setters for its main properties.
      +
      AbstractAuthenticatedUser +
      Basic implementation of an AuthenticatedUser which uses the username to + determine equality.
      +
      AbstractAuthenticationProvider +
      Base implementation of AuthenticationProvider which provides default + implementations of most functions.
      +
      AbstractConnection +
      Basic implementation of a Guacamole connection.
      +
      AbstractConnectionGroup +
      Basic implementation of a Guacamole connection group.
      +
      AbstractIdentifiable +
      Abstract implementation of Identifiable which provides equals() and + hashCode() implementations which use the identifier to determine equality.
      +
      AbstractSharingProfile +
      Base implementation of a sharing profile which can be used to share a + Guacamole connection.
      +
      AbstractUser +
      Base implementation of User which provides default implementations of + most functions.
      +
      AbstractUserContext +
      Base implementation of UserContext which provides default implementations of + most functions.
      +
      AbstractUserGroup +
      Base implementation of UserGroup which provides default implementations of + most functions.
      +
      Credentials +
      Simple arbitrary set of credentials, including a username/password pair, + the HttpServletRequest associated with the request for authorization + (if any) and the HttpSession associated with that request.
      +
      DecoratingActivityRecordSet<RecordType extends ActivityRecord> +
      ActivityRecordSet implementation which simplifies decorating the records + within an underlying ActivityRecordSet.
      +
      DecoratingDirectory<ObjectType extends Identifiable> +
      Directory implementation which simplifies decorating the objects within an + underlying Directory.
      +
      DelegatingActivityRecord +
      ActivityRecord implementation which simply delegates all function calls to an + underlying ActivityRecord.
      +
      DelegatingActivityRecordSet<RecordType extends ActivityRecord> +
      ActivityRecordSet implementation which simply delegates all function calls + to an underlying ActivityRecordSet.
      +
      DelegatingConnection +
      Connection implementation which simply delegates all function calls to an + underlying Connection.
      +
      DelegatingConnectionGroup +
      ConnectionGroup implementation which simply delegates all function calls to + an underlying ConnectionGroup.
      +
      DelegatingConnectionRecord +
      ConnectionRecord implementation which simply delegates all function calls to + an underlying ConnectionRecord.
      +
      DelegatingDirectory<ObjectType extends Identifiable> +
      Directory implementation which simply delegates all function calls to an + underlying Directory.
      +
      DelegatingSharingProfile +
      SharingProfile implementation which simply delegates all function calls to an + underlying SharingProfile.
      +
      DelegatingUser +
      User implementation which simply delegates all function calls to an + underlying User.
      +
      DelegatingUserContext +
      UserContext implementation which simply delegates all function calls to + an underlying UserContext.
      +
      DelegatingUserGroup +
      UserGroup implementation which simply delegates all function calls to an + underlying UserGroup.
      +
      FileActivityLog +
      ActivityLog implementation that exposes the content of a local file.
      +
      GuacamoleProxyConfiguration +
      Information which describes how the connection to guacd should be + established.
      +
      TokenInjectingConnection +
      Connection implementation which overrides the connect() function of an + underlying Connection, adding a given set of parameter tokens to the tokens + already supplied.
      +
      TokenInjectingConnectionGroup +
      ConnectionGroup implementation which overrides the connect() function of an + underlying ConnectionGroup, adding a given set of parameter tokens to the + tokens already supplied.
      +
      TokenInjectingUserContext +
      UserContext implementation which decorates a given UserContext, + automatically applying additional parameter tokens during the connection + process of any retrieved Connections and ConnectionGroups.
      +
      User.Attribute +
      All standard attribute names with semantics defined by the Guacamole web + application.
      +
      +
    • +
    • + + + + + + + + + + + + + + + + + + + + + + + + +
      Enum Summary 
      EnumDescription
      ActivityLog.Type +
      All possible types of ActivityLog.
      +
      ActivityRecordSet.SortableProperty +
      All properties of activity records which can be used as sorting + criteria.
      +
      ConnectionGroup.Type +
      All legal types of connection group.
      +
      GuacamoleProxyConfiguration.EncryptionMethod +
      All possible types of encryption used by guacd.
      +
      +
    • +
    +
    +
    +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/package-tree.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/package-tree.html new file mode 100644 index 000000000..e4b1256b2 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/package-tree.html @@ -0,0 +1,297 @@ + + + + + +org.apache.guacamole.net.auth Class Hierarchy (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Hierarchy For Package org.apache.guacamole.net.auth

    +Package Hierarchies: + +
    +
    +
    +

    Class Hierarchy

    + +
    +
    +

    Interface Hierarchy

    + +
    +
    +

    Enum Hierarchy

    + +
    +
    +
    +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/package-use.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/package-use.html new file mode 100644 index 000000000..ac0103ffa --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/package-use.html @@ -0,0 +1,713 @@ + + + + + +Uses of Package org.apache.guacamole.net.auth (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Package
    org.apache.guacamole.net.auth

    +
    +
    +
      +
    • + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Packages that use org.apache.guacamole.net.auth 
      PackageDescription
      org.apache.guacamole.environment 
      org.apache.guacamole.net.auth +
      Provides classes which can be used to extend or replace the authentication + functionality of the Guacamole web application.
      +
      org.apache.guacamole.net.auth.simple +
      Provides a basic AuthenticationProvider base class that can be used to create + simple AuthenticationProviders in the same way allowed by the old + authentication API.
      +
      org.apache.guacamole.net.event +
      Provides classes for storing information about events that are + triggered when users log into and use the Guacamole web application.
      +
      org.apache.guacamole.token 
      +
    • +
    • + + + + + + + + + + + + + + +
      Classes in org.apache.guacamole.net.auth used by org.apache.guacamole.environment 
      ClassDescription
      GuacamoleProxyConfiguration +
      Information which describes how the connection to guacd should be + established.
      +
      +
    • +
    • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Classes in org.apache.guacamole.net.auth used by org.apache.guacamole.net.auth 
      ClassDescription
      AbstractActivityLog +
      Base implementation of an ActivityLog, providing storage and simple + getters/setters for its main properties.
      +
      AbstractIdentifiable +
      Abstract implementation of Identifiable which provides equals() and + hashCode() implementations which use the identifier to determine equality.
      +
      ActiveConnection +
      A pairing of username and GuacamoleTunnel representing an active usage of a + particular connection.
      +
      ActivityLog +
      An arbitrary log of an activity whose content may be exposed to a user with + sufficient privileges.
      +
      ActivityLog.Type +
      All possible types of ActivityLog.
      +
      ActivityRecord +
      A logging record describing when a user started and ended a particular + activity.
      +
      ActivityRecordSet +
      A set of all available records related to a type of activity which has a + defined start and end time, such as a user being logged in or connected, or a + subset of those records.
      +
      ActivityRecordSet.SortableProperty +
      All properties of activity records which can be used as sorting + criteria.
      +
      Attributes +
      An object which is associated with a set of arbitrary attributes that may + be modifiable, defined as name/value pairs.
      +
      AuthenticatedUser +
      A user of the Guacamole web application who has been authenticated by an + AuthenticationProvider.
      +
      AuthenticationProvider +
      Provides means of authorizing users and for accessing and managing data + associated with those users.
      +
      Connectable +
      An object which Guacamole can connect to.
      +
      Connection +
      Represents a pairing of a GuacamoleConfiguration with a unique, + human-readable identifier, and abstracts the connection process.
      +
      ConnectionGroup +
      Represents a connection group, which can contain both other connection groups + as well as connections.
      +
      ConnectionGroup.Type +
      All legal types of connection group.
      +
      ConnectionRecord +
      A logging record describing when a user started and ended usage of a + particular connection.
      +
      Credentials +
      Simple arbitrary set of credentials, including a username/password pair, + the HttpServletRequest associated with the request for authorization + (if any) and the HttpSession associated with that request.
      +
      DelegatingActivityRecord +
      ActivityRecord implementation which simply delegates all function calls to an + underlying ActivityRecord.
      +
      DelegatingActivityRecordSet +
      ActivityRecordSet implementation which simply delegates all function calls + to an underlying ActivityRecordSet.
      +
      DelegatingConnection +
      Connection implementation which simply delegates all function calls to an + underlying Connection.
      +
      DelegatingConnectionGroup +
      ConnectionGroup implementation which simply delegates all function calls to + an underlying ConnectionGroup.
      +
      DelegatingDirectory +
      Directory implementation which simply delegates all function calls to an + underlying Directory.
      +
      DelegatingUserContext +
      UserContext implementation which simply delegates all function calls to + an underlying UserContext.
      +
      Directory +
      Provides access to a collection of all objects with associated identifiers, + and allows user manipulation and removal.
      +
      GuacamoleProxyConfiguration.EncryptionMethod +
      All possible types of encryption used by guacd.
      +
      Identifiable +
      An object which has a deterministic, unique identifier, which may not be + null.
      +
      Permissions +
      An object which may be granted permissions to access/manipulate various + other objects or aspects of the system.
      +
      ReadableAttributes +
      An object which is associated with a set of arbitrary attributes, defined + as name/value pairs.
      +
      RelatedObjectSet +
      An arbitrary set of existing objects sharing some common relation.
      +
      Shareable +
      An object which can be shared with others via specially-generated sets of + credentials.
      +
      SharingProfile +
      Represents the semantics which apply to an existing connection when shared, + along with a human-readable name and unique identifier.
      +
      User +
      A user of the Guacamole web application.
      +
      UserContext +
      The context of an active user.
      +
      UserGroup +
      A user group of the Guacamole web application.
      +
      +
    • +
    • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Classes in org.apache.guacamole.net.auth used by org.apache.guacamole.net.auth.simple 
      ClassDescription
      AbstractAuthenticationProvider +
      Base implementation of AuthenticationProvider which provides default + implementations of most functions.
      +
      AbstractConnection +
      Basic implementation of a Guacamole connection.
      +
      AbstractConnectionGroup +
      Basic implementation of a Guacamole connection group.
      +
      AbstractIdentifiable +
      Abstract implementation of Identifiable which provides equals() and + hashCode() implementations which use the identifier to determine equality.
      +
      AbstractUser +
      Base implementation of User which provides default implementations of + most functions.
      +
      AbstractUserContext +
      Base implementation of UserContext which provides default implementations of + most functions.
      +
      AbstractUserGroup +
      Base implementation of UserGroup which provides default implementations of + most functions.
      +
      ActivityRecord +
      A logging record describing when a user started and ended a particular + activity.
      +
      ActivityRecordSet +
      A set of all available records related to a type of activity which has a + defined start and end time, such as a user being logged in or connected, or a + subset of those records.
      +
      ActivityRecordSet.SortableProperty +
      All properties of activity records which can be used as sorting + criteria.
      +
      Attributes +
      An object which is associated with a set of arbitrary attributes that may + be modifiable, defined as name/value pairs.
      +
      AuthenticatedUser +
      A user of the Guacamole web application who has been authenticated by an + AuthenticationProvider.
      +
      AuthenticationProvider +
      Provides means of authorizing users and for accessing and managing data + associated with those users.
      +
      Connectable +
      An object which Guacamole can connect to.
      +
      Connection +
      Represents a pairing of a GuacamoleConfiguration with a unique, + human-readable identifier, and abstracts the connection process.
      +
      ConnectionGroup +
      Represents a connection group, which can contain both other connection groups + as well as connections.
      +
      ConnectionRecord +
      A logging record describing when a user started and ended usage of a + particular connection.
      +
      ConnectionRecordSet +
      Deprecated. + +
      +
      Credentials +
      Simple arbitrary set of credentials, including a username/password pair, + the HttpServletRequest associated with the request for authorization + (if any) and the HttpSession associated with that request.
      +
      Directory +
      Provides access to a collection of all objects with associated identifiers, + and allows user manipulation and removal.
      +
      Identifiable +
      An object which has a deterministic, unique identifier, which may not be + null.
      +
      Permissions +
      An object which may be granted permissions to access/manipulate various + other objects or aspects of the system.
      +
      ReadableAttributes +
      An object which is associated with a set of arbitrary attributes, defined + as name/value pairs.
      +
      RelatedObjectSet +
      An arbitrary set of existing objects sharing some common relation.
      +
      User +
      A user of the Guacamole web application.
      +
      UserContext +
      The context of an active user.
      +
      UserGroup +
      A user group of the Guacamole web application.
      +
      +
    • +
    • + + + + + + + + + + + + + + + + + + +
      Classes in org.apache.guacamole.net.auth used by org.apache.guacamole.net.event 
      ClassDescription
      AuthenticatedUser +
      A user of the Guacamole web application who has been authenticated by an + AuthenticationProvider.
      +
      Credentials +
      Simple arbitrary set of credentials, including a username/password pair, + the HttpServletRequest associated with the request for authorization + (if any) and the HttpSession associated with that request.
      +
      +
    • +
    • + + + + + + + + + + + + + + + + + + +
      Classes in org.apache.guacamole.net.auth used by org.apache.guacamole.token 
      ClassDescription
      AuthenticatedUser +
      A user of the Guacamole web application who has been authenticated by an + AuthenticationProvider.
      +
      Credentials +
      Simple arbitrary set of credentials, including a username/password pair, + the HttpServletRequest associated with the request for authorization + (if any) and the HttpSession associated with that request.
      +
      +
    • +
    +
    +
    +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/ObjectPermission.Type.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/ObjectPermission.Type.html new file mode 100644 index 000000000..8407b4fa4 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/ObjectPermission.Type.html @@ -0,0 +1,424 @@ + + + + + +ObjectPermission.Type (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Enum ObjectPermission.Type

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
      + +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          values

          +
          public static ObjectPermission.Type[] values()
          +
          Returns an array containing the constants of this enum type, in +the order they are declared. This method may be used to iterate +over the constants as follows: +
          +for (ObjectPermission.Type c : ObjectPermission.Type.values())
          +    System.out.println(c);
          +
          +
          +
          Returns:
          +
          an array containing the constants of this enum type, in the order they are declared
          +
          +
        • +
        + + + +
          +
        • +

          valueOf

          +
          public static ObjectPermission.Type valueOf​(String name)
          +
          Returns the enum constant of this type with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this type. (Extraneous whitespace characters are +not permitted.)
          +
          +
          Parameters:
          +
          name - the name of the enum constant to be returned.
          +
          Returns:
          +
          the enum constant with the specified name
          +
          Throws:
          +
          IllegalArgumentException - if this enum type has no constant with the specified name
          +
          NullPointerException - if the argument is null
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/ObjectPermission.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/ObjectPermission.html new file mode 100644 index 000000000..90c439113 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/ObjectPermission.html @@ -0,0 +1,423 @@ + + + + + +ObjectPermission (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class ObjectPermission

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • org.apache.guacamole.net.auth.permission.ObjectPermission
      • +
      +
    • +
    +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          ObjectPermission

          +
          public ObjectPermission​(ObjectPermission.Type type,
          +                        String identifier)
          +
          Creates a new ObjectPermission having the given type and identifier. + The identifier must be the unique identifier assigned to the object + associated with this permission by the AuthenticationProvider in use.
          +
          +
          Parameters:
          +
          type - The type of operation affected by this permission.
          +
          identifier - The identifier of the object associated with the operation affected + by this permission.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getObjectIdentifier

          +
          public String getObjectIdentifier()
          +
          Returns the identifier of the specific object affected by this + permission.
          +
          +
          Returns:
          +
          The identifier of the specific object affected by this + permission.
          +
          +
        • +
        + + + + + + + +
          +
        • +

          hashCode

          +
          public int hashCode()
          +
          +
          Overrides:
          +
          hashCode in class Object
          +
          +
        • +
        + + + +
          +
        • +

          equals

          +
          public boolean equals​(Object obj)
          +
          +
          Overrides:
          +
          equals in class Object
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/ObjectPermissionSet.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/ObjectPermissionSet.html new file mode 100644 index 000000000..0f4463d3a --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/ObjectPermissionSet.html @@ -0,0 +1,519 @@ + + + + + +ObjectPermissionSet (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface ObjectPermissionSet

    +
    +
    +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          EMPTY_SET

          +
          static final ObjectPermissionSet EMPTY_SET
          +
          An immutable instance of ObjectPermissionSet which contains no + permissions.
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          hasPermission

          +
          boolean hasPermission​(ObjectPermission.Type permission,
          +                      String identifier)
          +               throws org.apache.guacamole.GuacamoleException
          +
          Tests whether the permission of the given type is granted for the + object having the given identifier.
          +
          +
          Parameters:
          +
          permission - The permission to check.
          +
          identifier - The identifier of the object affected by the permission being + checked.
          +
          Returns:
          +
          true if the permission is granted, false otherwise.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while checking permissions, or if permissions + cannot be checked due to lack of permissions to do so.
          +
          +
        • +
        + + + +
          +
        • +

          addPermission

          +
          void addPermission​(ObjectPermission.Type permission,
          +                   String identifier)
          +            throws org.apache.guacamole.GuacamoleException
          +
          Adds the specified permission for the object having the given + identifier.
          +
          +
          Parameters:
          +
          permission - The permission to add.
          +
          identifier - The identifier of the object affected by the permission being + added.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while adding the permission, or if permission to + add permissions is denied.
          +
          +
        • +
        + + + +
          +
        • +

          removePermission

          +
          void removePermission​(ObjectPermission.Type permission,
          +                      String identifier)
          +               throws org.apache.guacamole.GuacamoleException
          +
          Removes the specified permission for the object having the given + identifier.
          +
          +
          Parameters:
          +
          permission - The permission to remove.
          +
          identifier - The identifier of the object affected by the permission being + added.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while removing the permission, or if permission + to remove permissions is denied.
          +
          +
        • +
        + + + +
          +
        • +

          getAccessibleObjects

          +
          Collection<String> getAccessibleObjects​(Collection<ObjectPermission.Type> permissions,
          +                                        Collection<String> identifiers)
          +                                 throws org.apache.guacamole.GuacamoleException
          +
          Tests whether this user has the specified permissions for the objects + having the given identifiers. The identifier of an object is returned + in a new collection if at least one of the specified permissions is + granted for that object.
          +
          +
          Parameters:
          +
          permissions - The permissions to check. An identifier will be included in the + resulting collection if at least one of these permissions is granted + for the associated object
          +
          identifiers - The identifiers of the objects affected by the permissions being + checked.
          +
          Returns:
          +
          A collection containing the subset of identifiers for which at least + one of the specified permissions is granted.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while checking permissions, or if permissions + cannot be checked due to lack of permissions to do so.
          +
          +
        • +
        + + + +
          +
        • +

          getPermissions

          +
          Set<ObjectPermission> getPermissions()
          +                              throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: PermissionSet
          +
          Returns a Set which contains all permissions granted within this + permission set.
          +
          +
          Specified by:
          +
          getPermissions in interface PermissionSet<ObjectPermission>
          +
          Returns:
          +
          A Set containing all permissions granted within this permission set.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving permissions, or if permissions + cannot be retrieved due to lack of permissions to do so.
          +
          +
        • +
        + + + +
          +
        • +

          addPermissions

          +
          void addPermissions​(Set<ObjectPermission> permissions)
          +             throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: PermissionSet
          +
          Adds the specified permissions, if not already granted. If a specified + permission is already granted, no operation is performed regarding that + permission.
          +
          +
          Specified by:
          +
          addPermissions in interface PermissionSet<ObjectPermission>
          +
          Parameters:
          +
          permissions - The permissions to add.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while adding the permissions, or if permission to + add permissions is denied.
          +
          +
        • +
        + + + +
          +
        • +

          removePermissions

          +
          void removePermissions​(Set<ObjectPermission> permissions)
          +                throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: PermissionSet
          +
          Removes each of the specified permissions, if granted. If a specified + permission is not granted, no operation is performed regarding that + permission.
          +
          +
          Specified by:
          +
          removePermissions in interface PermissionSet<ObjectPermission>
          +
          Parameters:
          +
          permissions - The permissions to remove.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while removing the permissions, or if permission + to remove permissions is denied.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/Permission.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/Permission.html new file mode 100644 index 000000000..107f5284e --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/Permission.html @@ -0,0 +1,270 @@ + + + + + +Permission (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface Permission<Type extends Enum>

    +
    +
    +
    +
      +
    • +
      +
      Type Parameters:
      +
      Type - The enumeration of all available operation types that this permission + can affect.
      +
      +
      +
      All Known Implementing Classes:
      +
      ObjectPermission, SystemPermission
      +
      +
      +
      public interface Permission<Type extends Enum>
      +
      A permission which affects a specific type of operation, where all available + operation types are defined by an enumeration.
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getType

          +
          Type getType()
          +
          Returns the type of operation affected by this permission.
          +
          +
          Returns:
          +
          The type of operation affected by this permission.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/PermissionSet.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/PermissionSet.html new file mode 100644 index 000000000..30e6b68b8 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/PermissionSet.html @@ -0,0 +1,332 @@ + + + + + +PermissionSet (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface PermissionSet<PermissionType extends Permission>

    +
    +
    +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getPermissions

          +
          Set<PermissionType> getPermissions()
          +                            throws org.apache.guacamole.GuacamoleException
          +
          Returns a Set which contains all permissions granted within this + permission set.
          +
          +
          Returns:
          +
          A Set containing all permissions granted within this permission set.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving permissions, or if permissions + cannot be retrieved due to lack of permissions to do so.
          +
          +
        • +
        + + + +
          +
        • +

          addPermissions

          +
          void addPermissions​(Set<PermissionType> permissions)
          +             throws org.apache.guacamole.GuacamoleException
          +
          Adds the specified permissions, if not already granted. If a specified + permission is already granted, no operation is performed regarding that + permission.
          +
          +
          Parameters:
          +
          permissions - The permissions to add.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while adding the permissions, or if permission to + add permissions is denied.
          +
          +
        • +
        + + + +
          +
        • +

          removePermissions

          +
          void removePermissions​(Set<PermissionType> permissions)
          +                throws org.apache.guacamole.GuacamoleException
          +
          Removes each of the specified permissions, if granted. If a specified + permission is not granted, no operation is performed regarding that + permission.
          +
          +
          Parameters:
          +
          permissions - The permissions to remove.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while removing the permissions, or if permission + to remove permissions is denied.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/SystemPermission.Type.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/SystemPermission.Type.html new file mode 100644 index 000000000..78591354c --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/SystemPermission.Type.html @@ -0,0 +1,460 @@ + + + + + +SystemPermission.Type (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Enum SystemPermission.Type

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Enum Constant Detail

        + + + + + + + +
          +
        • +

          CREATE_USER_GROUP

          +
          public static final SystemPermission.Type CREATE_USER_GROUP
          +
          Create user groups.
          +
        • +
        + + + +
          +
        • +

          CREATE_CONNECTION

          +
          public static final SystemPermission.Type CREATE_CONNECTION
          +
          Create connections.
          +
        • +
        + + + +
          +
        • +

          CREATE_CONNECTION_GROUP

          +
          public static final SystemPermission.Type CREATE_CONNECTION_GROUP
          +
          Create connection groups.
          +
        • +
        + + + +
          +
        • +

          CREATE_SHARING_PROFILE

          +
          public static final SystemPermission.Type CREATE_SHARING_PROFILE
          +
          Create sharing profiles.
          +
        • +
        + + + +
          +
        • +

          ADMINISTER

          +
          public static final SystemPermission.Type ADMINISTER
          +
          Administer the system in general, including adding permissions + which affect the system (like user creation, connection creation, + and system administration).
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          values

          +
          public static SystemPermission.Type[] values()
          +
          Returns an array containing the constants of this enum type, in +the order they are declared. This method may be used to iterate +over the constants as follows: +
          +for (SystemPermission.Type c : SystemPermission.Type.values())
          +    System.out.println(c);
          +
          +
          +
          Returns:
          +
          an array containing the constants of this enum type, in the order they are declared
          +
          +
        • +
        + + + +
          +
        • +

          valueOf

          +
          public static SystemPermission.Type valueOf​(String name)
          +
          Returns the enum constant of this type with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this type. (Extraneous whitespace characters are +not permitted.)
          +
          +
          Parameters:
          +
          name - the name of the enum constant to be returned.
          +
          Returns:
          +
          the enum constant with the specified name
          +
          Throws:
          +
          IllegalArgumentException - if this enum type has no constant with the specified name
          +
          NullPointerException - if the argument is null
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/SystemPermission.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/SystemPermission.html new file mode 100644 index 000000000..d1fc4d6a5 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/SystemPermission.html @@ -0,0 +1,395 @@ + + + + + +SystemPermission (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class SystemPermission

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • org.apache.guacamole.net.auth.permission.SystemPermission
      • +
      +
    • +
    +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          SystemPermission

          +
          public SystemPermission​(SystemPermission.Type type)
          +
          Creates a new SystemPermission with the given + type.
          +
          +
          Parameters:
          +
          type - The type of operation controlled by this permission.
          +
          +
        • +
        +
      • +
      +
      + +
      + +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/SystemPermissionSet.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/SystemPermissionSet.html new file mode 100644 index 000000000..49a38b7a3 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/SystemPermissionSet.html @@ -0,0 +1,462 @@ + + + + + +SystemPermissionSet (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface SystemPermissionSet

    +
    +
    +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          EMPTY_SET

          +
          static final SystemPermissionSet EMPTY_SET
          +
          An immutable instance of SystemPermissionSet which contains no + permissions.
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          hasPermission

          +
          boolean hasPermission​(SystemPermission.Type permission)
          +               throws org.apache.guacamole.GuacamoleException
          +
          Tests whether the permission of the given type is granted.
          +
          +
          Parameters:
          +
          permission - The permission to check.
          +
          Returns:
          +
          true if the permission is granted, false otherwise.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while checking permissions, or if permissions + cannot be checked due to lack of permissions to do so.
          +
          +
        • +
        + + + +
          +
        • +

          addPermission

          +
          void addPermission​(SystemPermission.Type permission)
          +            throws org.apache.guacamole.GuacamoleException
          +
          Adds the specified permission.
          +
          +
          Parameters:
          +
          permission - The permission to add.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while adding the permission, or if permission to + add permissions is denied.
          +
          +
        • +
        + + + +
          +
        • +

          removePermission

          +
          void removePermission​(SystemPermission.Type permission)
          +               throws org.apache.guacamole.GuacamoleException
          +
          Removes the specified permission.
          +
          +
          Parameters:
          +
          permission - The permission to remove.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while removing the permission, or if permission + to remove permissions is denied.
          +
          +
        • +
        + + + +
          +
        • +

          getPermissions

          +
          Set<SystemPermission> getPermissions()
          +                              throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: PermissionSet
          +
          Returns a Set which contains all permissions granted within this + permission set.
          +
          +
          Specified by:
          +
          getPermissions in interface PermissionSet<SystemPermission>
          +
          Returns:
          +
          A Set containing all permissions granted within this permission set.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving permissions, or if permissions + cannot be retrieved due to lack of permissions to do so.
          +
          +
        • +
        + + + +
          +
        • +

          addPermissions

          +
          void addPermissions​(Set<SystemPermission> permissions)
          +             throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: PermissionSet
          +
          Adds the specified permissions, if not already granted. If a specified + permission is already granted, no operation is performed regarding that + permission.
          +
          +
          Specified by:
          +
          addPermissions in interface PermissionSet<SystemPermission>
          +
          Parameters:
          +
          permissions - The permissions to add.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while adding the permissions, or if permission to + add permissions is denied.
          +
          +
        • +
        + + + +
          +
        • +

          removePermissions

          +
          void removePermissions​(Set<SystemPermission> permissions)
          +                throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: PermissionSet
          +
          Removes each of the specified permissions, if granted. If a specified + permission is not granted, no operation is performed regarding that + permission.
          +
          +
          Specified by:
          +
          removePermissions in interface PermissionSet<SystemPermission>
          +
          Parameters:
          +
          permissions - The permissions to remove.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while removing the permissions, or if permission + to remove permissions is denied.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/class-use/ObjectPermission.Type.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/class-use/ObjectPermission.Type.html new file mode 100644 index 000000000..96047a7ba --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/class-use/ObjectPermission.Type.html @@ -0,0 +1,343 @@ + + + + + +Uses of Class org.apache.guacamole.net.auth.permission.ObjectPermission.Type (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.net.auth.permission.ObjectPermission.Type

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/class-use/ObjectPermission.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/class-use/ObjectPermission.html new file mode 100644 index 000000000..799bfb665 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/class-use/ObjectPermission.html @@ -0,0 +1,290 @@ + + + + + +Uses of Class org.apache.guacamole.net.auth.permission.ObjectPermission (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.net.auth.permission.ObjectPermission

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/class-use/ObjectPermissionSet.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/class-use/ObjectPermissionSet.html new file mode 100644 index 000000000..8fbcc1a85 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/class-use/ObjectPermissionSet.html @@ -0,0 +1,471 @@ + + + + + +Uses of Interface org.apache.guacamole.net.auth.permission.ObjectPermissionSet (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    org.apache.guacamole.net.auth.permission.ObjectPermissionSet

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/class-use/Permission.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/class-use/Permission.html new file mode 100644 index 000000000..27add9ce5 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/class-use/Permission.html @@ -0,0 +1,225 @@ + + + + + +Uses of Interface org.apache.guacamole.net.auth.permission.Permission (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    org.apache.guacamole.net.auth.permission.Permission

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/class-use/PermissionSet.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/class-use/PermissionSet.html new file mode 100644 index 000000000..6a67ab22e --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/class-use/PermissionSet.html @@ -0,0 +1,248 @@ + + + + + +Uses of Interface org.apache.guacamole.net.auth.permission.PermissionSet (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    org.apache.guacamole.net.auth.permission.PermissionSet

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/class-use/SystemPermission.Type.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/class-use/SystemPermission.Type.html new file mode 100644 index 000000000..1a3e11a80 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/class-use/SystemPermission.Type.html @@ -0,0 +1,299 @@ + + + + + +Uses of Class org.apache.guacamole.net.auth.permission.SystemPermission.Type (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.net.auth.permission.SystemPermission.Type

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/class-use/SystemPermission.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/class-use/SystemPermission.html new file mode 100644 index 000000000..280f08261 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/class-use/SystemPermission.html @@ -0,0 +1,290 @@ + + + + + +Uses of Class org.apache.guacamole.net.auth.permission.SystemPermission (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.net.auth.permission.SystemPermission

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/class-use/SystemPermissionSet.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/class-use/SystemPermissionSet.html new file mode 100644 index 000000000..c3c6efd40 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/class-use/SystemPermissionSet.html @@ -0,0 +1,288 @@ + + + + + +Uses of Interface org.apache.guacamole.net.auth.permission.SystemPermissionSet (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    org.apache.guacamole.net.auth.permission.SystemPermissionSet

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/package-summary.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/package-summary.html new file mode 100644 index 000000000..504b9ab05 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/package-summary.html @@ -0,0 +1,244 @@ + + + + + +org.apache.guacamole.net.auth.permission (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Package org.apache.guacamole.net.auth.permission

    +
    +
    +
    + + +
    Provides classes which describe the various permissions a Guacamole user + can be granted.
    +
    +
      +
    • + + + + + + + + + + + + + + + + + + + + + + + + +
      Interface Summary 
      InterfaceDescription
      ObjectPermissionSet +
      A set of permissions which affect arbitrary objects, where each object has + an associated unique identifier.
      +
      Permission<Type extends Enum> +
      A permission which affects a specific type of operation, where all available + operation types are defined by an enumeration.
      +
      PermissionSet<PermissionType extends Permission> +
      An arbitrary set of permissions.
      +
      SystemPermissionSet +
      A set of permissions which affects the system as a whole.
      +
      +
    • +
    • + + + + + + + + + + + + + + + + +
      Class Summary 
      ClassDescription
      ObjectPermission +
      A permission which affects a specific object, rather than the system as a + whole.
      +
      SystemPermission +
      A permission which affects the system as a whole, rather than an individual + object.
      +
      +
    • +
    • + + + + + + + + + + + + + + + + +
      Enum Summary 
      EnumDescription
      ObjectPermission.Type +
      Specific types of object-level permissions.
      +
      SystemPermission.Type +
      Specific types of system-level permissions.
      +
      +
    • +
    +
    +
    +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/package-tree.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/package-tree.html new file mode 100644 index 000000000..faa841f29 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/package-tree.html @@ -0,0 +1,193 @@ + + + + + +org.apache.guacamole.net.auth.permission Class Hierarchy (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Hierarchy For Package org.apache.guacamole.net.auth.permission

    +Package Hierarchies: + +
    +
    +
    +

    Class Hierarchy

    + +
    +
    +

    Interface Hierarchy

    + +
    +
    +

    Enum Hierarchy

    + +
    +
    +
    +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/package-use.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/package-use.html new file mode 100644 index 000000000..99dc22a2e --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/permission/package-use.html @@ -0,0 +1,335 @@ + + + + + +Uses of Package org.apache.guacamole.net.auth.permission (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Package
    org.apache.guacamole.net.auth.permission

    +
    +
    + +
    +
    +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/SimpleActivityRecordSet.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/SimpleActivityRecordSet.html new file mode 100644 index 000000000..8680b9a23 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/SimpleActivityRecordSet.html @@ -0,0 +1,495 @@ + + + + + +SimpleActivityRecordSet (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class SimpleActivityRecordSet<RecordType extends ActivityRecord>

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • org.apache.guacamole.net.auth.simple.SimpleActivityRecordSet<RecordType>
      • +
      +
    • +
    +
    +
      +
    • +
      +
      Type Parameters:
      +
      RecordType - The type of ActivityRecord contained within this set.
      +
      +
      +
      All Implemented Interfaces:
      +
      ActivityRecordSet<RecordType>
      +
      +
      +
      public class SimpleActivityRecordSet<RecordType extends ActivityRecord>
      +extends Object
      +implements ActivityRecordSet<RecordType>
      +
      An immutable and empty ActivityRecordSet.
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          SimpleActivityRecordSet

          +
          public SimpleActivityRecordSet()
          +
          Create a new SimpleActivityRecordSet that contains an empty set of + records.
          +
        • +
        + + + +
          +
        • +

          SimpleActivityRecordSet

          +
          public SimpleActivityRecordSet​(Collection<? extends RecordType> records)
          +
          Create a new SimpleActivityRecordSet that contains the provided records + which will back this record set.
          +
          +
          Parameters:
          +
          records - The records that this SimpleActivityRecordSet should contain.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          asCollection

          +
          public Collection<RecordType> asCollection()
          +                                    throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: ActivityRecordSet
          +
          Returns all records within this set as a standard Collection.
          +
          +
          Specified by:
          +
          asCollection in interface ActivityRecordSet<RecordType extends ActivityRecord>
          +
          Returns:
          +
          A collection containing all records within this set.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving the records within this set.
          +
          +
        • +
        + + + +
          +
        • +

          contains

          +
          public ActivityRecordSet<RecordType> contains​(String value)
          +                                       throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: ActivityRecordSet
          +
          Returns the subset of records which contain the given value. The + properties and semantics involved with determining whether a particular + record "contains" the given value is implementation dependent. This + function may affect the contents of the current ActivityRecordSet. The + contents of the current ActivityRecordSet should NOT be relied upon + after this function is called.
          +
          +
          Specified by:
          +
          contains in interface ActivityRecordSet<RecordType extends ActivityRecord>
          +
          Parameters:
          +
          value - The value which all records within the resulting subset should + contain.
          +
          Returns:
          +
          The subset of records which contain the specified value.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while restricting the current subset.
          +
          +
        • +
        + + + +
          +
        • +

          limit

          +
          public ActivityRecordSet<RecordType> limit​(int limit)
          +                                    throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: ActivityRecordSet
          +
          Returns the subset of records containing only the first + limit records. If the subset has fewer than + limit records, then this function has no effect. This + function may also affect the contents of the current ActivityRecordSet. + The contents of the current ActivityRecordSet should NOT be relied upon + after this function is called.
          +
          +
          Specified by:
          +
          limit in interface ActivityRecordSet<RecordType extends ActivityRecord>
          +
          Parameters:
          +
          limit - The maximum number of records that the new subset should contain.
          +
          Returns:
          +
          The subset of records that containing only the first + limit records.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while limiting the current subset.
          +
          +
        • +
        + + + +
          +
        • +

          sort

          +
          public ActivityRecordSet<RecordType> sort​(ActivityRecordSet.SortableProperty property,
          +                                          boolean desc)
          +                                   throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: ActivityRecordSet
          +
          Returns a ActivityRecordSet containing identically the records within + this set, sorted according to the specified criteria. The sort operation + performed is guaranteed to be stable with respect to any past call to + sort(). This function may also affect the contents of the current + ActivityRecordSet. The contents of the current ActivityRecordSet + should NOT be relied upon after this function is called.
          +
          +
          Specified by:
          +
          sort in interface ActivityRecordSet<RecordType extends ActivityRecord>
          +
          Parameters:
          +
          property - The property by which the records within the resulting set should be + sorted.
          +
          desc - Whether the records should be sorted according to the specified + property in descending order. If false, records will be sorted + according to the specified property in ascending order.
          +
          Returns:
          +
          The ActivityRecordSet, sorted according to the specified criteria.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while sorting the current subset, or if the given + property is not supported by the implementation.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/SimpleAuthenticationProvider.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/SimpleAuthenticationProvider.html new file mode 100644 index 000000000..08f3d0461 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/SimpleAuthenticationProvider.html @@ -0,0 +1,447 @@ + + + + + +SimpleAuthenticationProvider (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class SimpleAuthenticationProvider

    +
    +
    + +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      AuthenticationProvider
      +
      +
      +
      public abstract class SimpleAuthenticationProvider
      +extends AbstractAuthenticationProvider
      +
      Provides means of retrieving a set of named GuacamoleConfigurations for a + given Credentials object. This is a simple AuthenticationProvider + implementation intended to be easily extended. It is useful for simple + authentication situations where access to web-based administration and + complex users and permissions are not required. + + The interface provided by SimpleAuthenticationProvider is similar to that of + the AuthenticationProvider interface of older Guacamole releases.
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          SimpleAuthenticationProvider

          +
          public SimpleAuthenticationProvider()
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getAuthorizedConfigurations

          +
          public abstract Map<String,​org.apache.guacamole.protocol.GuacamoleConfiguration> getAuthorizedConfigurations​(Credentials credentials)
          +                                                                                                            throws org.apache.guacamole.GuacamoleException
          +
          Given an arbitrary credentials object, returns a Map containing all + configurations authorized by those credentials. The keys of this Map + are Strings which uniquely identify each configuration.
          +
          +
          Parameters:
          +
          credentials - The credentials to use to retrieve authorized + configurations.
          +
          Returns:
          +
          A Map of all configurations authorized by the given credentials, + or null if the credentials given are not authorized.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving + configurations.
          +
          +
        • +
        + + + +
          +
        • +

          authenticateUser

          +
          public AuthenticatedUser authenticateUser​(Credentials credentials)
          +                                   throws org.apache.guacamole.GuacamoleException
          +
          Description copied from class: AbstractAuthenticationProvider
          +
          Returns an AuthenticatedUser representing the user authenticated by the + given credentials, if any. + +

          This implementation performs no authentication whatsoever, ignoring + the provided credentials and simply returning null. Any + authentication attempt will thus fall through to other + AuthenticationProvider implementations, perhaps within other + installed extensions, with this AuthenticationProvider making no + claim regarding the user's identity nor whether the user should be + allowed or disallowed from accessing Guacamole. Implementations that wish + to authenticate users should override this function.

          +
          +
          Specified by:
          +
          authenticateUser in interface AuthenticationProvider
          +
          Overrides:
          +
          authenticateUser in class AbstractAuthenticationProvider
          +
          Parameters:
          +
          credentials - The credentials to use for authentication.
          +
          Returns:
          +
          An AuthenticatedUser representing the user authenticated by the + given credentials, if any, or null if the credentials are invalid.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while authenticating the user, or if access is + temporarily, permanently, or conditionally denied, such as if the + supplied credentials are insufficient or invalid.
          +
          +
        • +
        + + + +
          +
        • +

          getUserContext

          +
          public UserContext getUserContext​(AuthenticatedUser authenticatedUser)
          +                           throws org.apache.guacamole.GuacamoleException
          +
          Description copied from class: AbstractAuthenticationProvider
          +
          Returns the UserContext of the user authenticated by the given + credentials. + +

          This implementation simply returns null, effectively allowing + authentication to continue but refusing to provide data for the given + user. Implementations that wish to veto the authentication results of + other AuthenticationProvider implementations or provide data for + authenticated users should override this function.

          +
          +
          Specified by:
          +
          getUserContext in interface AuthenticationProvider
          +
          Overrides:
          +
          getUserContext in class AbstractAuthenticationProvider
          +
          Parameters:
          +
          authenticatedUser - An AuthenticatedUser object representing the user authenticated by + an arbitrary set of credentials. The AuthenticatedUser may come from + this AuthenticationProvider or any other installed + AuthenticationProvider.
          +
          Returns:
          +
          A UserContext describing the permissions, connection, connection + groups, etc. accessible or associated with the given authenticated + user, or null if this AuthenticationProvider refuses to provide any + such data.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while creating the UserContext.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/SimpleConnection.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/SimpleConnection.html new file mode 100644 index 000000000..07f9a6f2f --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/SimpleConnection.html @@ -0,0 +1,720 @@ + + + + + +SimpleConnection (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class SimpleConnection

    +
    +
    + +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      Attributes, Connectable, Connection, Identifiable, ReadableAttributes
      +
      +
      +
      public class SimpleConnection
      +extends AbstractConnection
      +
      A Connection implementation which establishes the underlying connection to + guacd using the configuration information provided in guacamole.properties. + Parameter tokens provided to connect() are automatically applied if + explicitly requested. Tracking of active connections and connection history + is not provided.
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          SimpleConnection

          +
          public SimpleConnection()
          +
          Creates a completely uninitialized SimpleConnection. The name, + identifier, and configuration of this SimpleConnection must eventually + be set before the SimpleConnection may be used. Parameter tokens within + the GuacamoleConfiguration eventually supplied with + setConfiguration(org.apache.guacamole.protocol.GuacamoleConfiguration) + will not be interpreted.
          +
        • +
        + + + +
          +
        • +

          SimpleConnection

          +
          public SimpleConnection​(boolean interpretTokens)
          +
          Creates a completely uninitialized SimpleConnection. The name, + identifier, and configuration of this SimpleConnection must eventually + be set before the SimpleConnection may be used. Parameter tokens within + the GuacamoleConfiguration eventually supplied with + setConfiguration(org.apache.guacamole.protocol.GuacamoleConfiguration) + will not be interpreted unless explicitly requested.
          +
          +
          Parameters:
          +
          interpretTokens - Whether parameter tokens in the underlying GuacamoleConfiguration + should be automatically applied upon connecting. If false, parameter + tokens will not be interpreted at all.
          +
          +
        • +
        + + + +
          +
        • +

          SimpleConnection

          +
          public SimpleConnection​(String name,
          +                        String identifier,
          +                        org.apache.guacamole.protocol.GuacamoleConfiguration config)
          +
          Creates a new SimpleConnection having the given identifier and + GuacamoleConfiguration. Parameter tokens within the + GuacamoleConfiguration will not be interpreted unless explicitly + requested.
          +
          +
          Parameters:
          +
          name - The name to associate with this connection.
          +
          identifier - The identifier to associate with this connection.
          +
          config - The configuration describing how to connect to this connection.
          +
          +
        • +
        + + + +
          +
        • +

          SimpleConnection

          +
          public SimpleConnection​(String name,
          +                        String identifier,
          +                        org.apache.guacamole.protocol.GuacamoleConfiguration config,
          +                        boolean interpretTokens)
          +
          Creates a new SimpleConnection having the given identifier and + GuacamoleConfiguration. Parameter tokens will be interpreted if + explicitly requested.
          +
          +
          Parameters:
          +
          name - The name to associate with this connection.
          +
          identifier - The identifier to associate with this connection.
          +
          config - The configuration describing how to connect to this connection.
          +
          interpretTokens - Whether parameter tokens in the underlying GuacamoleConfiguration + should be automatically applied upon connecting. If false, parameter + tokens will not be interpreted at all.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getFullConfiguration

          +
          protected org.apache.guacamole.protocol.GuacamoleConfiguration getFullConfiguration()
          +
          Returns the GuacamoleConfiguration describing how to connect to this + connection. Unlike AbstractConnection.getConfiguration(), which is allowed to omit + or tokenize information, the GuacamoleConfiguration returned by this + function will always be the full configuration to be used to establish + the connection, as provided when this SimpleConnection was created or via + setConfiguration(org.apache.guacamole.protocol.GuacamoleConfiguration).
          +
          +
          Returns:
          +
          The full GuacamoleConfiguration describing how to connect to this + connection, without any information omitted or tokenized.
          +
          +
        • +
        + + + +
          +
        • +

          setConfiguration

          +
          public void setConfiguration​(org.apache.guacamole.protocol.GuacamoleConfiguration config)
          +
          Description copied from interface: Connection
          +
          Sets the GuacamoleConfiguration associated with this Connection.
          +
          +
          Specified by:
          +
          setConfiguration in interface Connection
          +
          Overrides:
          +
          setConfiguration in class AbstractConnection
          +
          Parameters:
          +
          config - The GuacamoleConfiguration to associate with this + Connection.
          +
          +
        • +
        + + + +
          +
        • +

          getActiveConnections

          +
          public int getActiveConnections()
          +
          Description copied from interface: Connectable
          +
          Returns the number of active connections associated with this object. + Implementations may simply return 0 if this value is not tracked.
          +
          +
          Returns:
          +
          The number of active connections associated with this object.
          +
          +
        • +
        + + + +
          +
        • +

          getAttributes

          +
          public Map<String,​String> getAttributes()
          +
          Description copied from interface: ReadableAttributes
          +
          Returns all attributes associated with this object. The returned map + may not be modifiable.
          +
          +
          Returns:
          +
          A map of all attribute identifiers to their corresponding values, + for all attributes associated with this object, which may not be + modifiable.
          +
          +
        • +
        + + + +
          +
        • +

          setAttributes

          +
          public void setAttributes​(Map<String,​String> attributes)
          +
          Description copied from interface: Attributes
          +
          Sets the given attributes. If an attribute within the map is not + supported, it will simply be dropped. Any attributes not within the given + map will be left untouched. Attributes which are not declared within the + associated UserContext MUST NOT be submitted, but other extensions may + manipulate the declared attributes through decorate() and redecorate(). + + Implementations may optionally allow storage of unsupported attributes. + Extensions which rely on other extensions to store their attribute + values should verify that such storage is supported by first testing + that the attribute value is retrievable via getAttributes() after being + set.
          +
          +
          Parameters:
          +
          attributes - A map of all attribute identifiers to their corresponding values.
          +
          +
        • +
        + + + +
          +
        • +

          connect

          +
          @Deprecated
          +public org.apache.guacamole.net.GuacamoleTunnel connect​(org.apache.guacamole.protocol.GuacamoleClientInformation info)
          +                                                 throws org.apache.guacamole.GuacamoleException
          +
          Deprecated.
          +
          Description copied from interface: Connectable
          +
          Establishes a connection to guacd using the information associated with + this object. The connection will be provided the given client + information.
          +
          +
          Parameters:
          +
          info - Information associated with the connecting client.
          +
          Returns:
          +
          A fully-established GuacamoleTunnel.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while connecting to guacd, or if permission to + connect is denied.
          +
          +
        • +
        + + + +
          +
        • +

          connect

          +
          public org.apache.guacamole.net.GuacamoleTunnel connect​(org.apache.guacamole.protocol.GuacamoleClientInformation info,
          +                                                        Map<String,​String> tokens)
          +                                                 throws org.apache.guacamole.GuacamoleException
          +
          Establishes a connection to guacd using the information associated with + this object. The connection will be provided the given client + information. Implementations which support parameter tokens should + apply the given tokens when configuring the connection, such as with a + TokenFilter. + +

          This implementation will connect using the GuacamoleConfiguration + returned by getFullConfiguration(), honoring the + "guacd-hostname", "guacd-port", and "guacd-ssl" properties set within + guacamole.properties. Parameter tokens will be taken into account if + the SimpleConnection was explicitly requested to do so when created. + +

          Implementations requiring more complex behavior should consider using + the AbstractConnection base class or implementing + Connection directly.

          +
          +
          Parameters:
          +
          info - Information associated with the connecting client.
          +
          tokens - A Map containing the token names and corresponding values to be + applied as parameter tokens when establishing the connection. If the + implementation does not support parameter tokens, this Map may be + ignored.
          +
          Returns:
          +
          A fully-established GuacamoleTunnel.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while connecting to guacd, or if permission to + connect is denied.
          +
          See Also:
          +
          Parameter Tokens
          +
          +
        • +
        + + + +
          +
        • +

          getLastActive

          +
          public Date getLastActive()
          +
          Description copied from interface: Connection
          +
          Returns the date and time that this connection was last used. If the + connection was never used, the time that the connection was last used is + unknown, or this information is not visible to the current user, this + may be null.
          +
          +
          Returns:
          +
          The date and time this connection was last used, or null if this + information is unavailable or inapplicable.
          +
          +
        • +
        + + + +
          +
        • +

          getConnectionHistory

          +
          public ActivityRecordSet<ConnectionRecord> getConnectionHistory()
          +                                                         throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: Connection
          +
          Returns an ActivityRecordSet containing ConnectionRecords that + represent the usage history of this Connection, including any active + users. ConnectionRecords in this list will be sorted in descending order + of end time (active connections are first), and then in descending order + of start time (newer connections are first). If connection history + tracking has not been implemented, or has been implemented using the + deprecated Connection.getHistory() method, this function should throw + GuacamoleUnsupportedExpcetion.
          +
          +
          Returns:
          +
          An ActivityRecordSet containing ConnectionRecords representing the + usage history of this Connection.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If history tracking is not implemented, if an error occurs while + reading the history of this connection, or if permission is + denied.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/SimpleConnectionDirectory.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/SimpleConnectionDirectory.html new file mode 100644 index 000000000..3e98c6345 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/SimpleConnectionDirectory.html @@ -0,0 +1,380 @@ + + + + + +SimpleConnectionDirectory (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class SimpleConnectionDirectory

    +
    +
    + +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      Directory<Connection>
      +
      +
      +
      @Deprecated
      +public class SimpleConnectionDirectory
      +extends SimpleDirectory<Connection>
      +
      Deprecated. +
      Use SimpleDirectory instead.
      +
      +
      An extremely simple read-only implementation of a Directory of + GuacamoleConfigurations which provides access to a pre-defined Map of + GuacamoleConfigurations.
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          SimpleConnectionDirectory

          +
          public SimpleConnectionDirectory​(Collection<Connection> connections)
          +
          Deprecated.
          +
          Creates a new SimpleConnectionDirectory which provides access to the + connections contained within the given Map.
          +
          +
          Parameters:
          +
          connections - A Collection of all connections that should be present in this + connection directory.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          putConnection

          +
          public Connection putConnection​(Connection connection)
          +
          Deprecated.
          +
          An internal method for modifying the Connections in this Directory. + Returns the previous connection for the given identifier, if found.
          +
          +
          Parameters:
          +
          connection - The connection to add or update the Directory with.
          +
          Returns:
          +
          The previous connection for the connection identifier, if found.
          +
          +
        • +
        + + + +
          +
        • +

          removeConnection

          +
          public Connection removeConnection​(String identifier)
          +
          Deprecated.
          +
          An internal method for removing a Connection from this Directory.
          +
          +
          Parameters:
          +
          identifier - The identifier of the Connection to remove.
          +
          Returns:
          +
          The previous connection for the given identifier, if found.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/SimpleConnectionGroup.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/SimpleConnectionGroup.html new file mode 100644 index 000000000..61e2e20a2 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/SimpleConnectionGroup.html @@ -0,0 +1,570 @@ + + + + + +SimpleConnectionGroup (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class SimpleConnectionGroup

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          SimpleConnectionGroup

          +
          public SimpleConnectionGroup​(String name,
          +                             String identifier,
          +                             Collection<String> connectionIdentifiers,
          +                             Collection<String> connectionGroupIdentifiers)
          +
          Creates a new SimpleConnectionGroup having the given name and identifier + which will expose the given contents.
          +
          +
          Parameters:
          +
          name - The name to associate with this connection group.
          +
          identifier - The identifier to associate with this connection group.
          +
          connectionIdentifiers - The connection identifiers to expose when requested.
          +
          connectionGroupIdentifiers - The connection group identifiers to expose when requested.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getActiveConnections

          +
          public int getActiveConnections()
          +
          Description copied from interface: Connectable
          +
          Returns the number of active connections associated with this object. + Implementations may simply return 0 if this value is not tracked.
          +
          +
          Returns:
          +
          The number of active connections associated with this object.
          +
          +
        • +
        + + + +
          +
        • +

          getConnectionIdentifiers

          +
          public Set<String> getConnectionIdentifiers()
          +
          Description copied from interface: ConnectionGroup
          +
          Returns the identifiers of all readable connections that are children + of this connection group.
          +
          +
          Returns:
          +
          The set of identifiers of all readable connections that are children + of this connection group.
          +
          +
        • +
        + + + +
          +
        • +

          getConnectionGroupIdentifiers

          +
          public Set<String> getConnectionGroupIdentifiers()
          +
          Description copied from interface: ConnectionGroup
          +
          Returns the identifiers of all readable connection groups that are + children of this connection group.
          +
          +
          Returns:
          +
          The set of identifiers of all readable connection groups that are + children of this connection group.
          +
          +
        • +
        + + + +
          +
        • +

          getAttributes

          +
          public Map<String,​String> getAttributes()
          +
          Description copied from interface: ReadableAttributes
          +
          Returns all attributes associated with this object. The returned map + may not be modifiable.
          +
          +
          Returns:
          +
          A map of all attribute identifiers to their corresponding values, + for all attributes associated with this object, which may not be + modifiable.
          +
          +
        • +
        + + + +
          +
        • +

          setAttributes

          +
          public void setAttributes​(Map<String,​String> attributes)
          +
          Description copied from interface: Attributes
          +
          Sets the given attributes. If an attribute within the map is not + supported, it will simply be dropped. Any attributes not within the given + map will be left untouched. Attributes which are not declared within the + associated UserContext MUST NOT be submitted, but other extensions may + manipulate the declared attributes through decorate() and redecorate(). + + Implementations may optionally allow storage of unsupported attributes. + Extensions which rely on other extensions to store their attribute + values should verify that such storage is supported by first testing + that the attribute value is retrievable via getAttributes() after being + set.
          +
          +
          Parameters:
          +
          attributes - A map of all attribute identifiers to their corresponding values.
          +
          +
        • +
        + + + +
          +
        • +

          connect

          +
          @Deprecated
          +public org.apache.guacamole.net.GuacamoleTunnel connect​(org.apache.guacamole.protocol.GuacamoleClientInformation info)
          +                                                 throws org.apache.guacamole.GuacamoleException
          +
          Deprecated.
          +
          Description copied from interface: Connectable
          +
          Establishes a connection to guacd using the information associated with + this object. The connection will be provided the given client + information.
          +
          +
          Parameters:
          +
          info - Information associated with the connecting client.
          +
          Returns:
          +
          A fully-established GuacamoleTunnel.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while connecting to guacd, or if permission to + connect is denied.
          +
          +
        • +
        + + + +
          +
        • +

          connect

          +
          public org.apache.guacamole.net.GuacamoleTunnel connect​(org.apache.guacamole.protocol.GuacamoleClientInformation info,
          +                                                        Map<String,​String> tokens)
          +                                                 throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: Connectable
          +
          Establishes a connection to guacd using the information associated with + this object. The connection will be provided the given client + information. Implementations which support parameter tokens should + apply the given tokens when configuring the connection, such as with a + TokenFilter.
          +
          +
          Parameters:
          +
          info - Information associated with the connecting client.
          +
          tokens - A Map containing the token names and corresponding values to be + applied as parameter tokens when establishing the connection. If the + implementation does not support parameter tokens, this Map may be + ignored.
          +
          Returns:
          +
          A fully-established GuacamoleTunnel.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while connecting to guacd, or if permission to + connect is denied.
          +
          See Also:
          +
          Parameter Tokens
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/SimpleConnectionGroupDirectory.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/SimpleConnectionGroupDirectory.html new file mode 100644 index 000000000..6007a0ab8 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/SimpleConnectionGroupDirectory.html @@ -0,0 +1,382 @@ + + + + + +SimpleConnectionGroupDirectory (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class SimpleConnectionGroupDirectory

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          SimpleConnectionGroupDirectory

          +
          public SimpleConnectionGroupDirectory​(Collection<ConnectionGroup> groups)
          +
          Deprecated.
          +
          Creates a new SimpleConnectionGroupDirectory which contains the given + groups.
          +
          +
          Parameters:
          +
          groups - A Collection of all groups that should be present in this + connection group directory.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          putConnectionGroup

          +
          public ConnectionGroup putConnectionGroup​(ConnectionGroup connectionGroup)
          +
          Deprecated.
          +
          An internal method for modifying the ConnectionGroups in this Directory. + Returns the previous connection group for the given identifier, if found.
          +
          +
          Parameters:
          +
          connectionGroup - The connection group to add or update the + Directory with.
          +
          Returns:
          +
          The previous connection group for the connection group + identifier, if found.
          +
          +
        • +
        + + + +
          +
        • +

          removeConnectionGroup

          +
          public ConnectionGroup removeConnectionGroup​(String identifier)
          +
          Deprecated.
          +
          An internal method for removing a ConnectionGroup from this Directory.
          +
          +
          Parameters:
          +
          identifier - The identifier of the ConnectionGroup to remove.
          +
          Returns:
          +
          The previous connection group for the given identifier, if found.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/SimpleConnectionRecordSet.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/SimpleConnectionRecordSet.html new file mode 100644 index 000000000..987425f25 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/SimpleConnectionRecordSet.html @@ -0,0 +1,480 @@ + + + + + +SimpleConnectionRecordSet (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class SimpleConnectionRecordSet

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • org.apache.guacamole.net.auth.simple.SimpleConnectionRecordSet
      • +
      +
    • +
    +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          SimpleConnectionRecordSet

          +
          public SimpleConnectionRecordSet()
          +
          Deprecated.
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          asCollection

          +
          public Collection<ConnectionRecord> asCollection()
          +                                          throws org.apache.guacamole.GuacamoleException
          +
          Deprecated.
          +
          Description copied from interface: ActivityRecordSet
          +
          Returns all records within this set as a standard Collection.
          +
          +
          Specified by:
          +
          asCollection in interface ActivityRecordSet<ConnectionRecord>
          +
          Returns:
          +
          A collection containing all records within this set.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving the records within this set.
          +
          +
        • +
        + + + +
          +
        • +

          contains

          +
          public ConnectionRecordSet contains​(String value)
          +                             throws org.apache.guacamole.GuacamoleException
          +
          Deprecated.
          +
          Description copied from interface: ActivityRecordSet
          +
          Returns the subset of records which contain the given value. The + properties and semantics involved with determining whether a particular + record "contains" the given value is implementation dependent. This + function may affect the contents of the current ActivityRecordSet. The + contents of the current ActivityRecordSet should NOT be relied upon + after this function is called.
          +
          +
          Specified by:
          +
          contains in interface ActivityRecordSet<ConnectionRecord>
          +
          Parameters:
          +
          value - The value which all records within the resulting subset should + contain.
          +
          Returns:
          +
          The subset of records which contain the specified value.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while restricting the current subset.
          +
          +
        • +
        + + + +
          +
        • +

          limit

          +
          public ConnectionRecordSet limit​(int limit)
          +                          throws org.apache.guacamole.GuacamoleException
          +
          Deprecated.
          +
          Description copied from interface: ActivityRecordSet
          +
          Returns the subset of records containing only the first + limit records. If the subset has fewer than + limit records, then this function has no effect. This + function may also affect the contents of the current ActivityRecordSet. + The contents of the current ActivityRecordSet should NOT be relied upon + after this function is called.
          +
          +
          Specified by:
          +
          limit in interface ActivityRecordSet<ConnectionRecord>
          +
          Parameters:
          +
          limit - The maximum number of records that the new subset should contain.
          +
          Returns:
          +
          The subset of records that containing only the first + limit records.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while limiting the current subset.
          +
          +
        • +
        + + + +
          +
        • +

          sort

          +
          public ConnectionRecordSet sort​(ActivityRecordSet.SortableProperty property,
          +                                boolean desc)
          +                         throws org.apache.guacamole.GuacamoleException
          +
          Deprecated.
          +
          Description copied from interface: ActivityRecordSet
          +
          Returns a ActivityRecordSet containing identically the records within + this set, sorted according to the specified criteria. The sort operation + performed is guaranteed to be stable with respect to any past call to + sort(). This function may also affect the contents of the current + ActivityRecordSet. The contents of the current ActivityRecordSet + should NOT be relied upon after this function is called.
          +
          +
          Specified by:
          +
          sort in interface ActivityRecordSet<ConnectionRecord>
          +
          Parameters:
          +
          property - The property by which the records within the resulting set should be + sorted.
          +
          desc - Whether the records should be sorted according to the specified + property in descending order. If false, records will be sorted + according to the specified property in ascending order.
          +
          Returns:
          +
          The ActivityRecordSet, sorted according to the specified criteria.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while sorting the current subset, or if the given + property is not supported by the implementation.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/SimpleDirectory.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/SimpleDirectory.html new file mode 100644 index 000000000..87556ff1e --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/SimpleDirectory.html @@ -0,0 +1,652 @@ + + + + + +SimpleDirectory (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class SimpleDirectory<ObjectType extends Identifiable>

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • org.apache.guacamole.net.auth.simple.SimpleDirectory<ObjectType>
      • +
      +
    • +
    +
    +
      +
    • +
      +
      Type Parameters:
      +
      ObjectType - The type of objects stored within this SimpleDirectory.
      +
      +
      +
      All Implemented Interfaces:
      +
      Directory<ObjectType>
      +
      +
      +
      Direct Known Subclasses:
      +
      SimpleConnectionDirectory, SimpleConnectionGroupDirectory, SimpleUserDirectory
      +
      +
      +
      public class SimpleDirectory<ObjectType extends Identifiable>
      +extends Object
      +implements Directory<ObjectType>
      +
      An extremely simple read-only implementation of a Directory which provides + access to a pre-defined Map of arbitrary objects. Any changes to the Map + will affect the available contents of this SimpleDirectory.
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          SimpleDirectory

          +
          public SimpleDirectory()
          +
          Creates a new empty SimpleDirectory which does not provide access to + any objects.
          +
        • +
        + + + +
          +
        • +

          SimpleDirectory

          +
          public SimpleDirectory​(Map<String,​ObjectType> objects)
          +
          Creates a new SimpleDirectory which provides access to the objects + contained within the given Map. The given Map will be used to back all + operations on the SimpleDirectory.
          +
          +
          Parameters:
          +
          objects - The Map of objects to provide access to.
          +
          +
        • +
        + + + + + +
          +
        • +

          SimpleDirectory

          +
          public SimpleDirectory​(ObjectType object)
          +
          Creates a new SimpleDirectory which provides access to the given object.
          +
          +
          Parameters:
          +
          object - The object to provide access to.
          +
          +
        • +
        + + + + + +
          +
        • +

          SimpleDirectory

          +
          @SafeVarargs
          +public SimpleDirectory​(ObjectType... objects)
          +
          Creates a new SimpleDirectory which provides access to the given + objects. Note that a new Map will be created to store the given objects. + If the objects are already available in Map form, it is more efficient + to use the SimpleDirectory(java.util.Map) constructor.
          +
          +
          Parameters:
          +
          objects - The objects that should be present in this directory.
          +
          +
        • +
        + + + +
          +
        • +

          SimpleDirectory

          +
          public SimpleDirectory​(Collection<ObjectType> objects)
          +
          Creates a new SimpleDirectory which provides access to the + objects contained within the Collection. Note that a new Map will be + created to store the given objects. If the objects are already available + in Map form, it is more efficient to use the + SimpleDirectory(java.util.Map) constructor.
          +
          +
          Parameters:
          +
          objects - A Collection of all objects that should be present in this directory.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          setObjects

          +
          protected void setObjects​(Map<String,​ObjectType> objects)
          +
          Sets the Map which backs this SimpleDirectory. Future function calls + which retrieve objects from this SimpleDirectory will use the provided + Map.
          +
          +
          Parameters:
          +
          objects - The Map of objects to provide access to.
          +
          +
        • +
        + + + +
          +
        • +

          getObjects

          +
          protected Map<String,​ObjectType> getObjects()
          +
          Returns the Map which currently backs this SimpleDirectory. Changes to + this Map will affect future function calls that retrieve objects from + this SimpleDirectory.
          +
          +
          Returns:
          +
          The Map of objects which currently backs this SimpleDirectory.
          +
          +
        • +
        + + + +
          +
        • +

          get

          +
          public ObjectType get​(String identifier)
          +               throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: Directory
          +
          Returns the object having the given identifier. Note that changes to + the object returned will not necessarily affect the object stored within + the Directory. To update an object stored within an + Directory such that future calls to get() will return the updated + object, you must call update() on the object after modification.
          +
          +
          Specified by:
          +
          get in interface Directory<ObjectType extends Identifiable>
          +
          Parameters:
          +
          identifier - The identifier to use when locating the object to + return.
          +
          Returns:
          +
          The object having the given identifier, or null if no such object + exists.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving the + object, or if permission for retrieving the + object is denied.
          +
          +
        • +
        + + + +
          +
        • +

          getAll

          +
          public Collection<ObjectType> getAll​(Collection<String> identifiers)
          +                              throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: Directory
          +
          Returns the objects having the given identifiers. Note that changes to + any object returned will not necessarily affect the object stored within + the Directory. To update an object stored within a + Directory such that future calls to get() will return the updated + object, you must call update() on the object after modification.
          +
          +
          Specified by:
          +
          getAll in interface Directory<ObjectType extends Identifiable>
          +
          Parameters:
          +
          identifiers - The identifiers to use when locating the objects to return.
          +
          Returns:
          +
          The objects having the given identifiers. If any identifiers do not + correspond to accessible objects, those identifiers will be ignored. + If no objects correspond to any of the given identifiers, the + returned collection will be empty.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving the objects, or if permission + to retrieve the requested objects is denied.
          +
          +
        • +
        + + + +
          +
        • +

          getIdentifiers

          +
          public Set<String> getIdentifiers()
          +                           throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: Directory
          +
          Returns a Set containing all identifiers for all objects within this + Directory.
          +
          +
          Specified by:
          +
          getIdentifiers in interface Directory<ObjectType extends Identifiable>
          +
          Returns:
          +
          A Set of all identifiers.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving + the identifiers.
          +
          +
        • +
        + + + + + +
          +
        • +

          add

          +
          public void add​(ObjectType connection)
          +         throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: Directory
          +
          Adds the given object to the overall set. If a new identifier is + created for the added object, that identifier will be automatically + assigned via setIdentifier().
          +
          +
          Specified by:
          +
          add in interface Directory<ObjectType extends Identifiable>
          +
          Parameters:
          +
          connection - The object to add.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while adding the object, or if adding the object + is not allowed.
          +
          +
        • +
        + + + + + +
          +
        • +

          update

          +
          public void update​(ObjectType connection)
          +            throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: Directory
          +
          Updates the stored object with the data contained in the given object.
          +
          +
          Specified by:
          +
          update in interface Directory<ObjectType extends Identifiable>
          +
          Parameters:
          +
          connection - The object which will supply the data for the update.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while updating the object, + or if updating the object is not allowed.
          +
          +
        • +
        + + + +
          +
        • +

          remove

          +
          public void remove​(String identifier)
          +            throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: Directory
          +
          Removes the object with the given identifier from the overall set.
          +
          +
          Specified by:
          +
          remove in interface Directory<ObjectType extends Identifiable>
          +
          Parameters:
          +
          identifier - The identifier of the object to remove.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while removing the object, + or if removing object is not allowed.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/SimpleObjectPermissionSet.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/SimpleObjectPermissionSet.html new file mode 100644 index 000000000..4dd7b49b9 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/SimpleObjectPermissionSet.html @@ -0,0 +1,659 @@ + + + + + +SimpleObjectPermissionSet (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class SimpleObjectPermissionSet

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • org.apache.guacamole.net.auth.simple.SimpleObjectPermissionSet
      • +
      +
    • +
    +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          SimpleObjectPermissionSet

          +
          public SimpleObjectPermissionSet()
          +
          Creates a new empty SimpleObjectPermissionSet. If you are not extending + SimpleObjectPermissionSet and only need an immutable, empty + ObjectPermissionSet, consider using ObjectPermissionSet.EMPTY_SET + instead.
          +
        • +
        + + + +
          +
        • +

          SimpleObjectPermissionSet

          +
          public SimpleObjectPermissionSet​(Collection<String> identifiers,
          +                                 Collection<ObjectPermission.Type> types)
          +
          Creates a new SimpleObjectPermissionSet which contains permissions for + all possible unique combinations of the given identifiers and permission + types.
          +
          +
          Parameters:
          +
          identifiers - The identifiers which should be associated permissions having each + of the given permission types.
          +
          types - The types of permissions which should be granted for each of the + given identifiers.
          +
          +
        • +
        + + + +
          +
        • +

          SimpleObjectPermissionSet

          +
          public SimpleObjectPermissionSet​(Collection<String> identifiers)
          +
          Creates a new SimpleObjectPermissionSet which contains only READ + permissions for each of the given identifiers.
          +
          +
          Parameters:
          +
          identifiers - The identifiers which should each be associated with READ + permission.
          +
          +
        • +
        + + + +
          +
        • +

          SimpleObjectPermissionSet

          +
          public SimpleObjectPermissionSet​(Set<ObjectPermission> permissions)
          +
          Creates a new SimpleObjectPermissionSet which contains the permissions + within the given Set.
          +
          +
          Parameters:
          +
          permissions - The Set of permissions this SimpleObjectPermissionSet should + contain.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          setPermissions

          +
          protected void setPermissions​(Set<ObjectPermission> permissions)
          +
          Sets the Set which backs this SimpleObjectPermissionSet. Future function + calls on this SimpleObjectPermissionSet will use the provided Set.
          +
          +
          Parameters:
          +
          permissions - The Set of permissions this SimpleObjectPermissionSet should + contain.
          +
          +
        • +
        + + + + + + + +
          +
        • +

          hasPermission

          +
          public boolean hasPermission​(ObjectPermission.Type permission,
          +                             String identifier)
          +                      throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: ObjectPermissionSet
          +
          Tests whether the permission of the given type is granted for the + object having the given identifier.
          +
          +
          Specified by:
          +
          hasPermission in interface ObjectPermissionSet
          +
          Parameters:
          +
          permission - The permission to check.
          +
          identifier - The identifier of the object affected by the permission being + checked.
          +
          Returns:
          +
          true if the permission is granted, false otherwise.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while checking permissions, or if permissions + cannot be checked due to lack of permissions to do so.
          +
          +
        • +
        + + + +
          +
        • +

          addPermission

          +
          public void addPermission​(ObjectPermission.Type permission,
          +                          String identifier)
          +                   throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: ObjectPermissionSet
          +
          Adds the specified permission for the object having the given + identifier.
          +
          +
          Specified by:
          +
          addPermission in interface ObjectPermissionSet
          +
          Parameters:
          +
          permission - The permission to add.
          +
          identifier - The identifier of the object affected by the permission being + added.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while adding the permission, or if permission to + add permissions is denied.
          +
          +
        • +
        + + + +
          +
        • +

          removePermission

          +
          public void removePermission​(ObjectPermission.Type permission,
          +                             String identifier)
          +                      throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: ObjectPermissionSet
          +
          Removes the specified permission for the object having the given + identifier.
          +
          +
          Specified by:
          +
          removePermission in interface ObjectPermissionSet
          +
          Parameters:
          +
          permission - The permission to remove.
          +
          identifier - The identifier of the object affected by the permission being + added.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while removing the permission, or if permission + to remove permissions is denied.
          +
          +
        • +
        + + + +
          +
        • +

          getAccessibleObjects

          +
          public Collection<String> getAccessibleObjects​(Collection<ObjectPermission.Type> permissionTypes,
          +                                               Collection<String> identifiers)
          +                                        throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: ObjectPermissionSet
          +
          Tests whether this user has the specified permissions for the objects + having the given identifiers. The identifier of an object is returned + in a new collection if at least one of the specified permissions is + granted for that object.
          +
          +
          Specified by:
          +
          getAccessibleObjects in interface ObjectPermissionSet
          +
          Parameters:
          +
          permissionTypes - The permissions to check. An identifier will be included in the + resulting collection if at least one of these permissions is granted + for the associated object
          +
          identifiers - The identifiers of the objects affected by the permissions being + checked.
          +
          Returns:
          +
          A collection containing the subset of identifiers for which at least + one of the specified permissions is granted.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while checking permissions, or if permissions + cannot be checked due to lack of permissions to do so.
          +
          +
        • +
        + + + +
          +
        • +

          addPermissions

          +
          public void addPermissions​(Set<ObjectPermission> permissions)
          +                    throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: PermissionSet
          +
          Adds the specified permissions, if not already granted. If a specified + permission is already granted, no operation is performed regarding that + permission.
          +
          +
          Specified by:
          +
          addPermissions in interface ObjectPermissionSet
          +
          Specified by:
          +
          addPermissions in interface PermissionSet<ObjectPermission>
          +
          Parameters:
          +
          permissions - The permissions to add.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while adding the permissions, or if permission to + add permissions is denied.
          +
          +
        • +
        + + + +
          +
        • +

          removePermissions

          +
          public void removePermissions​(Set<ObjectPermission> permissions)
          +                       throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: PermissionSet
          +
          Removes each of the specified permissions, if granted. If a specified + permission is not granted, no operation is performed regarding that + permission.
          +
          +
          Specified by:
          +
          removePermissions in interface ObjectPermissionSet
          +
          Specified by:
          +
          removePermissions in interface PermissionSet<ObjectPermission>
          +
          Parameters:
          +
          permissions - The permissions to remove.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while removing the permissions, or if permission + to remove permissions is denied.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/SimpleRelatedObjectSet.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/SimpleRelatedObjectSet.html new file mode 100644 index 000000000..264bcffdc --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/SimpleRelatedObjectSet.html @@ -0,0 +1,463 @@ + + + + + +SimpleRelatedObjectSet (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class SimpleRelatedObjectSet

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • org.apache.guacamole.net.auth.simple.SimpleRelatedObjectSet
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      RelatedObjectSet
      +
      +
      +
      public class SimpleRelatedObjectSet
      +extends Object
      +implements RelatedObjectSet
      +
      A read-only implementation of RelatedObjectSet which uses a backing Set + of identifiers to determine which objects are present.
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          SimpleRelatedObjectSet

          +
          public SimpleRelatedObjectSet()
          +
          Creates a new empty SimpleRelatedObjectSet. If you are not extending + SimpleRelatedObjectSet and only need an immutable, empty + RelatedObjectSet, consider using RelatedObjectSet.EMPTY_SET + instead.
          +
        • +
        + + + +
          +
        • +

          SimpleRelatedObjectSet

          +
          public SimpleRelatedObjectSet​(Set<String> identifiers)
          +
          Creates a new SimpleRelatedObjectSet which contains the objects having + the identifiers within the given Set. The given Set backs the contents + of the new SimpleRelatedObjectSet. While the SimpleRelatedObjectSet is + read-only, any changes to the underlying Set will be reflected in the + SimpleRelatedObjectSet.
          +
          +
          Parameters:
          +
          identifiers - The Set containing the identifiers of all objects which should be + present within the new SimpleRelatedObjectSet.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          setObjects

          +
          protected void setObjects​(Set<String> identifiers)
          +
          Replaces the Set of object identifiers which backs this + SimpleRelatedObjectSet. Future function calls on this + SimpleRelatedObjectSet will instead use the provided Set.
          +
          +
          Parameters:
          +
          identifiers - The Set containing the identifiers of all objects which should be + present within this SimpleRelatedObjectSet.
          +
          +
        • +
        + + + +
          +
        • +

          getObjects

          +
          public Set<String> getObjects()
          +
          Description copied from interface: RelatedObjectSet
          +
          Returns a Set which contains the identifiers of all objects contained + within this RelatedObjectSet.
          +
          +
          Specified by:
          +
          getObjects in interface RelatedObjectSet
          +
          Returns:
          +
          A Set which contains the identifiers of all objects contained + within this RelatedObjectSet.
          +
          +
        • +
        + + + +
          +
        • +

          addObjects

          +
          public void addObjects​(Set<String> identifiers)
          +                throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: RelatedObjectSet
          +
          Adds the objects having the given identifiers, if not already present. + If a specified object is already present, no operation is performed + regarding that object.
          +
          +
          Specified by:
          +
          addObjects in interface RelatedObjectSet
          +
          Parameters:
          +
          identifiers - The identifiers of all objects being added.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while adding the objects, or if permission to add + objects is denied.
          +
          +
        • +
        + + + +
          +
        • +

          removeObjects

          +
          public void removeObjects​(Set<String> identifiers)
          +                   throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: RelatedObjectSet
          +
          Removes each of the objects having the specified identifiers, if + present. If a specified object is not present, no operation is performed + regarding that object.
          +
          +
          Specified by:
          +
          removeObjects in interface RelatedObjectSet
          +
          Parameters:
          +
          identifiers - The identifiers of all objects being removed.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while removing the objects, or if permission to + remove objects is denied.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/SimpleSystemPermissionSet.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/SimpleSystemPermissionSet.html new file mode 100644 index 000000000..779f6077a --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/SimpleSystemPermissionSet.html @@ -0,0 +1,548 @@ + + + + + +SimpleSystemPermissionSet (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class SimpleSystemPermissionSet

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • org.apache.guacamole.net.auth.simple.SimpleSystemPermissionSet
      • +
      +
    • +
    +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          SimpleSystemPermissionSet

          +
          public SimpleSystemPermissionSet()
          +
          Creates a new empty SimpleSystemPermissionSet. If you are not extending + SimpleSystemPermissionSet and only need an immutable, empty + SystemPermissionSet, consider using SystemPermissionSet.EMPTY_SET + instead.
          +
        • +
        + + + +
          +
        • +

          SimpleSystemPermissionSet

          +
          public SimpleSystemPermissionSet​(Set<SystemPermission> permissions)
          +
          Creates a new SimpleSystemPermissionSet which contains the permissions + within the given Set.
          +
          +
          Parameters:
          +
          permissions - The Set of permissions this SimpleSystemPermissionSet should + contain.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          setPermissions

          +
          protected void setPermissions​(Set<SystemPermission> permissions)
          +
          Sets the Set which backs this SimpleSystemPermissionSet. Future function + calls on this SimpleSystemPermissionSet will use the provided Set.
          +
          +
          Parameters:
          +
          permissions - The Set of permissions this SimpleSystemPermissionSet should + contain.
          +
          +
        • +
        + + + + + + + +
          +
        • +

          hasPermission

          +
          public boolean hasPermission​(SystemPermission.Type permission)
          +                      throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: SystemPermissionSet
          +
          Tests whether the permission of the given type is granted.
          +
          +
          Specified by:
          +
          hasPermission in interface SystemPermissionSet
          +
          Parameters:
          +
          permission - The permission to check.
          +
          Returns:
          +
          true if the permission is granted, false otherwise.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while checking permissions, or if permissions + cannot be checked due to lack of permissions to do so.
          +
          +
        • +
        + + + +
          +
        • +

          addPermission

          +
          public void addPermission​(SystemPermission.Type permission)
          +                   throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: SystemPermissionSet
          +
          Adds the specified permission.
          +
          +
          Specified by:
          +
          addPermission in interface SystemPermissionSet
          +
          Parameters:
          +
          permission - The permission to add.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while adding the permission, or if permission to + add permissions is denied.
          +
          +
        • +
        + + + +
          +
        • +

          removePermission

          +
          public void removePermission​(SystemPermission.Type permission)
          +                      throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: SystemPermissionSet
          +
          Removes the specified permission.
          +
          +
          Specified by:
          +
          removePermission in interface SystemPermissionSet
          +
          Parameters:
          +
          permission - The permission to remove.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while removing the permission, or if permission + to remove permissions is denied.
          +
          +
        • +
        + + + +
          +
        • +

          addPermissions

          +
          public void addPermissions​(Set<SystemPermission> permissions)
          +                    throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: PermissionSet
          +
          Adds the specified permissions, if not already granted. If a specified + permission is already granted, no operation is performed regarding that + permission.
          +
          +
          Specified by:
          +
          addPermissions in interface PermissionSet<SystemPermission>
          +
          Specified by:
          +
          addPermissions in interface SystemPermissionSet
          +
          Parameters:
          +
          permissions - The permissions to add.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while adding the permissions, or if permission to + add permissions is denied.
          +
          +
        • +
        + + + +
          +
        • +

          removePermissions

          +
          public void removePermissions​(Set<SystemPermission> permissions)
          +                       throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: PermissionSet
          +
          Removes each of the specified permissions, if granted. If a specified + permission is not granted, no operation is performed regarding that + permission.
          +
          +
          Specified by:
          +
          removePermissions in interface PermissionSet<SystemPermission>
          +
          Specified by:
          +
          removePermissions in interface SystemPermissionSet
          +
          Parameters:
          +
          permissions - The permissions to remove.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while removing the permissions, or if permission + to remove permissions is denied.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/SimpleUser.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/SimpleUser.html new file mode 100644 index 000000000..f9556805d --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/SimpleUser.html @@ -0,0 +1,567 @@ + + + + + +SimpleUser (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class SimpleUser

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          SimpleUser

          +
          public SimpleUser()
          +
          Creates a completely uninitialized SimpleUser.
          +
        • +
        + + + +
          +
        • +

          SimpleUser

          +
          public SimpleUser​(String username)
          +
          Creates a new SimpleUser having the given username.
          +
          +
          Parameters:
          +
          username - The username to assign to this SimpleUser.
          +
          +
        • +
        + + + +
          +
        • +

          SimpleUser

          +
          @Deprecated
          +public SimpleUser​(String username,
          +                  Collection<String> connectionIdentifiers,
          +                  Collection<String> connectionGroupIdentifiers)
          +
          Deprecated. +
          Extend and override the applicable permission set getters instead, + relying on SimpleUser to expose no permissions by default for all + permission sets that aren't overridden. See SimpleObjectPermissionSet + for convenient methods of providing a read-only permission set with + specific permissions.
          +
          +
          Creates a new SimpleUser having the given username and READ access to + the connections and connection groups having the given identifiers.
          +
          +
          Parameters:
          +
          username - The username to assign to this SimpleUser.
          +
          connectionIdentifiers - The identifiers of all connections this user has READ access to.
          +
          connectionGroupIdentifiers - The identifiers of all connection groups this user has READ access + to.
          +
          +
        • +
        + + + +
          +
        • +

          SimpleUser

          +
          @Deprecated
          +public SimpleUser​(String username,
          +                  Collection<String> userIdentifiers,
          +                  Collection<String> connectionIdentifiers,
          +                  Collection<String> connectionGroupIdentifiers)
          +
          Deprecated. +
          Extend and override the applicable permission set getters instead, + relying on SimpleUser to expose no permissions by default for all + permission sets that aren't overridden. See SimpleObjectPermissionSet + for convenient methods of providing a read-only permission set with + specific permissions.
          +
          +
          Creates a new SimpleUser having the given username and READ access to + the users, connections, and groups having the given identifiers.
          +
          +
          Parameters:
          +
          username - The username to assign to this SimpleUser.
          +
          userIdentifiers - The identifiers of all users this user has READ access to.
          +
          connectionIdentifiers - The identifiers of all connections this user has READ access to.
          +
          connectionGroupIdentifiers - The identifiers of all connection groups this user has READ access + to.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getConnectionPermissions

          +
          public ObjectPermissionSet getConnectionPermissions()
          +                                             throws org.apache.guacamole.GuacamoleException
          +
          Description copied from class: AbstractUser
          +
          Returns all connection permissions given to this object. + +

          This implementation simply an immutable, empty permission set. + Implementations that wish to expose permissions should override this + function.

          +
          +
          Specified by:
          +
          getConnectionPermissions in interface Permissions
          +
          Overrides:
          +
          getConnectionPermissions in class AbstractUser
          +
          Returns:
          +
          An ObjectPermissionSet of all connection permissions granted to this + object.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving permissions, or if reading all + permissions is not allowed.
          +
          +
        • +
        + + + +
          +
        • +

          getConnectionGroupPermissions

          +
          public ObjectPermissionSet getConnectionGroupPermissions()
          +                                                  throws org.apache.guacamole.GuacamoleException
          +
          Description copied from class: AbstractUser
          +
          Returns all connection group permissions given to this object. + +

          This implementation simply an immutable, empty permission set. + Implementations that wish to expose permissions should override this + function.

          +
          +
          Specified by:
          +
          getConnectionGroupPermissions in interface Permissions
          +
          Overrides:
          +
          getConnectionGroupPermissions in class AbstractUser
          +
          Returns:
          +
          An ObjectPermissionSet of all connection group permissions granted + to this object.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving permissions, or if reading all + permissions is not allowed.
          +
          +
        • +
        + + + +
          +
        • +

          getUserPermissions

          +
          public ObjectPermissionSet getUserPermissions()
          +                                       throws org.apache.guacamole.GuacamoleException
          +
          Description copied from class: AbstractUser
          +
          Returns all user permissions given to this object. + +

          This implementation simply an immutable, empty permission set. + Implementations that wish to expose permissions should override this + function.

          +
          +
          Specified by:
          +
          getUserPermissions in interface Permissions
          +
          Overrides:
          +
          getUserPermissions in class AbstractUser
          +
          Returns:
          +
          An ObjectPermissionSet of all user permissions granted to this + object.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while retrieving permissions, or if reading all + permissions is not allowed.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/SimpleUserContext.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/SimpleUserContext.html new file mode 100644 index 000000000..ae3a3f77e --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/SimpleUserContext.html @@ -0,0 +1,548 @@ + + + + + +SimpleUserContext (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class SimpleUserContext

    +
    +
    + +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      UserContext
      +
      +
      +
      public class SimpleUserContext
      +extends AbstractUserContext
      +
      An extremely simple UserContext implementation which provides access to + a defined and restricted set of GuacamoleConfigurations. Access to + querying or modifying either users or permissions is denied.
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          SimpleUserContext

          +
          public SimpleUserContext​(AuthenticationProvider authProvider,
          +                         Map<String,​org.apache.guacamole.protocol.GuacamoleConfiguration> configs)
          +
          Creates a new SimpleUserContext which provides access to only those + configurations within the given Map. The username is set to the + ANONYMOUS_IDENTIFIER defined by AuthenticatedUser, effectively declaring + the current user as anonymous. Parameter tokens within the given + GuacamoleConfigurations will not be interpreted.
          +
          +
          Parameters:
          +
          authProvider - The AuthenticationProvider creating this UserContext.
          +
          configs - A Map of all configurations for which the user associated with this + UserContext has read access.
          +
          +
        • +
        + + + +
          +
        • +

          SimpleUserContext

          +
          public SimpleUserContext​(AuthenticationProvider authProvider,
          +                         String username,
          +                         Map<String,​org.apache.guacamole.protocol.GuacamoleConfiguration> configs)
          +
          Creates a new SimpleUserContext for the user with the given username + which provides access to only those configurations within the given Map. + Parameter tokens within the given GuacamoleConfigurations will not be + interpreted.
          +
          +
          Parameters:
          +
          authProvider - The AuthenticationProvider creating this UserContext.
          +
          username - The username of the user associated with this UserContext.
          +
          configs - A Map of all configurations for which the user associated with + this UserContext has read access.
          +
          +
        • +
        + + + +
          +
        • +

          SimpleUserContext

          +
          public SimpleUserContext​(AuthenticationProvider authProvider,
          +                         String username,
          +                         Map<String,​org.apache.guacamole.protocol.GuacamoleConfiguration> configs,
          +                         boolean interpretTokens)
          +
          Creates a new SimpleUserContext for the user with the given username + which provides access to only those configurations within the given Map. + Parameter tokens within the given GuacamoleConfigurations will be + interpreted if explicitly requested.
          +
          +
          Parameters:
          +
          authProvider - The AuthenticationProvider creating this UserContext.
          +
          username - The username of the user associated with this UserContext.
          +
          configs - A Map of all configurations for which the user associated with + this UserContext has read access.
          +
          interpretTokens - Whether parameter tokens in the underlying GuacamoleConfigurations + should be automatically applied upon connecting. If false, parameter + tokens will not be interpreted at all.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          self

          +
          public User self()
          +
          Description copied from interface: UserContext
          +
          Returns the User whose access rights control the operations of this + UserContext.
          +
          +
          Returns:
          +
          The User whose access rights control the operations of this + UserContext.
          +
          +
        • +
        + + + +
          +
        • +

          getResource

          +
          public Object getResource()
          +                   throws org.apache.guacamole.GuacamoleException
          +
          Description copied from class: AbstractUserContext
          +
          Returns an arbitrary REST resource representing this UserContext. The + REST resource returned must be properly annotated with JSR-311 + annotations, and may serve as the root resource for any number of + subresources. The returned resource is ultimately exposed at + ".../api/session/ext/IDENTIFIER/", where IDENTIFIER is the identifier of + the AuthenticationProvider associated with this UserContext. + + REST resources returned by this function will only be reachable by + authenticated users with valid authentication tokens. REST resources + which should be accessible by all users regardless of whether they have + authenticated should instead be returned from + AuthenticationProvider.getResource(). + +

          This implementation simply returns null. Implementations that + wish to expose REST resources specific to a user's session should + override this function.

          +
          +
          Specified by:
          +
          getResource in interface UserContext
          +
          Overrides:
          +
          getResource in class AbstractUserContext
          +
          Returns:
          +
          An arbitrary REST resource, annotated with JSR-311 annotations, or + null if no such resource is defined.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If the REST resource cannot be returned due to an error.
          +
          +
        • +
        + + + +
          +
        • +

          getAuthenticationProvider

          +
          public AuthenticationProvider getAuthenticationProvider()
          +
          Description copied from interface: UserContext
          +
          Returns the AuthenticationProvider which created this UserContext, which + may not be the same AuthenticationProvider that authenticated the user + associated with this UserContext.
          +
          +
          Returns:
          +
          The AuthenticationProvider that created this UserContext.
          +
          +
        • +
        + + + +
          +
        • +

          getConnectionDirectory

          +
          public Directory<Connection> getConnectionDirectory()
          +                                             throws org.apache.guacamole.GuacamoleException
          +
          Description copied from class: AbstractUserContext
          +
          Retrieves a Directory which can be used to view and manipulate + connections and their configurations, but only as allowed by the + permissions given to the user. + +

          This implementation simply returns an empty Directory. + Implementations that wish to expose connections should override this + function.

          +
          +
          Specified by:
          +
          getConnectionDirectory in interface UserContext
          +
          Overrides:
          +
          getConnectionDirectory in class AbstractUserContext
          +
          Returns:
          +
          A Directory whose operations are bound by the permissions of + the user.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while creating the + Directory.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/SimpleUserDirectory.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/SimpleUserDirectory.html new file mode 100644 index 000000000..f9a1cd0b3 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/SimpleUserDirectory.html @@ -0,0 +1,303 @@ + + + + + +SimpleUserDirectory (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class SimpleUserDirectory

    +
    +
    + +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      Directory<User>
      +
      +
      +
      @Deprecated
      +public class SimpleUserDirectory
      +extends SimpleDirectory<User>
      +
      Deprecated. +
      Use SimpleDirectory instead.
      +
      +
      An extremely simple read-only implementation of a Directory of Users which + provides access to a single pre-defined User.
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          SimpleUserDirectory

          +
          public SimpleUserDirectory​(User user)
          +
          Deprecated.
          +
          Creates a new SimpleUserDirectory which provides access to the single + user provided.
          +
          +
          Parameters:
          +
          user - The user to provide access to.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/SimpleUserGroup.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/SimpleUserGroup.html new file mode 100644 index 000000000..28a2de21b --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/SimpleUserGroup.html @@ -0,0 +1,331 @@ + + + + + +SimpleUserGroup (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class SimpleUserGroup

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          SimpleUserGroup

          +
          public SimpleUserGroup()
          +
          Creates a completely uninitialized SimpleUserGroup.
          +
        • +
        + + + +
          +
        • +

          SimpleUserGroup

          +
          public SimpleUserGroup​(String identifier)
          +
          Creates a new SimpleUserGroup having the given identifier.
          +
          +
          Parameters:
          +
          identifier - The identifier to assign to this SimpleUserGroup.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/class-use/SimpleActivityRecordSet.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/class-use/SimpleActivityRecordSet.html new file mode 100644 index 000000000..62c9a714e --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/class-use/SimpleActivityRecordSet.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.net.auth.simple.SimpleActivityRecordSet (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.net.auth.simple.SimpleActivityRecordSet

    +
    +
    No usage of org.apache.guacamole.net.auth.simple.SimpleActivityRecordSet
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/class-use/SimpleAuthenticationProvider.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/class-use/SimpleAuthenticationProvider.html new file mode 100644 index 000000000..fc03bc2d3 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/class-use/SimpleAuthenticationProvider.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.net.auth.simple.SimpleAuthenticationProvider (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.net.auth.simple.SimpleAuthenticationProvider

    +
    +
    No usage of org.apache.guacamole.net.auth.simple.SimpleAuthenticationProvider
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/class-use/SimpleConnection.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/class-use/SimpleConnection.html new file mode 100644 index 000000000..a67b7f7d3 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/class-use/SimpleConnection.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.net.auth.simple.SimpleConnection (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.net.auth.simple.SimpleConnection

    +
    +
    No usage of org.apache.guacamole.net.auth.simple.SimpleConnection
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/class-use/SimpleConnectionDirectory.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/class-use/SimpleConnectionDirectory.html new file mode 100644 index 000000000..4d75a14ce --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/class-use/SimpleConnectionDirectory.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.net.auth.simple.SimpleConnectionDirectory (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.net.auth.simple.SimpleConnectionDirectory

    +
    +
    No usage of org.apache.guacamole.net.auth.simple.SimpleConnectionDirectory
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/class-use/SimpleConnectionGroup.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/class-use/SimpleConnectionGroup.html new file mode 100644 index 000000000..8f6afc925 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/class-use/SimpleConnectionGroup.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.net.auth.simple.SimpleConnectionGroup (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.net.auth.simple.SimpleConnectionGroup

    +
    +
    No usage of org.apache.guacamole.net.auth.simple.SimpleConnectionGroup
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/class-use/SimpleConnectionGroupDirectory.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/class-use/SimpleConnectionGroupDirectory.html new file mode 100644 index 000000000..9bd88f24a --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/class-use/SimpleConnectionGroupDirectory.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.net.auth.simple.SimpleConnectionGroupDirectory (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.net.auth.simple.SimpleConnectionGroupDirectory

    +
    +
    No usage of org.apache.guacamole.net.auth.simple.SimpleConnectionGroupDirectory
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/class-use/SimpleConnectionRecordSet.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/class-use/SimpleConnectionRecordSet.html new file mode 100644 index 000000000..3030dde15 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/class-use/SimpleConnectionRecordSet.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.net.auth.simple.SimpleConnectionRecordSet (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.net.auth.simple.SimpleConnectionRecordSet

    +
    +
    No usage of org.apache.guacamole.net.auth.simple.SimpleConnectionRecordSet
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/class-use/SimpleDirectory.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/class-use/SimpleDirectory.html new file mode 100644 index 000000000..1acb15e1e --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/class-use/SimpleDirectory.html @@ -0,0 +1,220 @@ + + + + + +Uses of Class org.apache.guacamole.net.auth.simple.SimpleDirectory (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.net.auth.simple.SimpleDirectory

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/class-use/SimpleObjectPermissionSet.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/class-use/SimpleObjectPermissionSet.html new file mode 100644 index 000000000..119163696 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/class-use/SimpleObjectPermissionSet.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.net.auth.simple.SimpleObjectPermissionSet (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.net.auth.simple.SimpleObjectPermissionSet

    +
    +
    No usage of org.apache.guacamole.net.auth.simple.SimpleObjectPermissionSet
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/class-use/SimpleRelatedObjectSet.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/class-use/SimpleRelatedObjectSet.html new file mode 100644 index 000000000..903c7c2f3 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/class-use/SimpleRelatedObjectSet.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.net.auth.simple.SimpleRelatedObjectSet (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.net.auth.simple.SimpleRelatedObjectSet

    +
    +
    No usage of org.apache.guacamole.net.auth.simple.SimpleRelatedObjectSet
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/class-use/SimpleSystemPermissionSet.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/class-use/SimpleSystemPermissionSet.html new file mode 100644 index 000000000..a93c4ee68 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/class-use/SimpleSystemPermissionSet.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.net.auth.simple.SimpleSystemPermissionSet (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.net.auth.simple.SimpleSystemPermissionSet

    +
    +
    No usage of org.apache.guacamole.net.auth.simple.SimpleSystemPermissionSet
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/class-use/SimpleUser.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/class-use/SimpleUser.html new file mode 100644 index 000000000..093117506 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/class-use/SimpleUser.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.net.auth.simple.SimpleUser (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.net.auth.simple.SimpleUser

    +
    +
    No usage of org.apache.guacamole.net.auth.simple.SimpleUser
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/class-use/SimpleUserContext.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/class-use/SimpleUserContext.html new file mode 100644 index 000000000..695f9ab6d --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/class-use/SimpleUserContext.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.net.auth.simple.SimpleUserContext (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.net.auth.simple.SimpleUserContext

    +
    +
    No usage of org.apache.guacamole.net.auth.simple.SimpleUserContext
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/class-use/SimpleUserDirectory.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/class-use/SimpleUserDirectory.html new file mode 100644 index 000000000..3c2436cf9 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/class-use/SimpleUserDirectory.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.net.auth.simple.SimpleUserDirectory (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.net.auth.simple.SimpleUserDirectory

    +
    +
    No usage of org.apache.guacamole.net.auth.simple.SimpleUserDirectory
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/class-use/SimpleUserGroup.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/class-use/SimpleUserGroup.html new file mode 100644 index 000000000..19686c84d --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/class-use/SimpleUserGroup.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.net.auth.simple.SimpleUserGroup (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.net.auth.simple.SimpleUserGroup

    +
    +
    No usage of org.apache.guacamole.net.auth.simple.SimpleUserGroup
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/package-summary.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/package-summary.html new file mode 100644 index 000000000..dfe6ede4a --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/package-summary.html @@ -0,0 +1,272 @@ + + + + + +org.apache.guacamole.net.auth.simple (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Package org.apache.guacamole.net.auth.simple

    +
    +
    +
    + + +
    Provides a basic AuthenticationProvider base class that can be used to create + simple AuthenticationProviders in the same way allowed by the old + authentication API.
    +
    + +
    +
    +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/package-tree.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/package-tree.html new file mode 100644 index 000000000..2cd478ba5 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/package-tree.html @@ -0,0 +1,210 @@ + + + + + +org.apache.guacamole.net.auth.simple Class Hierarchy (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Hierarchy For Package org.apache.guacamole.net.auth.simple

    +Package Hierarchies: + +
    +
    +
    +

    Class Hierarchy

    + +
    +
    +
    +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/package-use.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/package-use.html new file mode 100644 index 000000000..c2cdbb9a9 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/auth/simple/package-use.html @@ -0,0 +1,192 @@ + + + + + +Uses of Package org.apache.guacamole.net.auth.simple (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Package
    org.apache.guacamole.net.auth.simple

    +
    +
    + +
    +
    +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/AuthenticationFailureEvent.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/AuthenticationFailureEvent.html new file mode 100644 index 000000000..b2c638009 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/AuthenticationFailureEvent.html @@ -0,0 +1,336 @@ + + + + + +AuthenticationFailureEvent (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class AuthenticationFailureEvent

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • org.apache.guacamole.net.event.AuthenticationFailureEvent
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      CredentialEvent
      +
      +
      +
      public class AuthenticationFailureEvent
      +extends Object
      +implements CredentialEvent
      +
      An event which is triggered whenever a user's credentials fail to be + authenticated. The credentials that failed to be authenticated are included + within this event, and can be retrieved using getCredentials().
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          AuthenticationFailureEvent

          +
          public AuthenticationFailureEvent​(Credentials credentials)
          +
          Creates a new AuthenticationFailureEvent which represents the failure + to authenticate the given credentials.
          +
          +
          Parameters:
          +
          credentials - The credentials which failed authentication.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getCredentials

          +
          public Credentials getCredentials()
          +
          Description copied from interface: CredentialEvent
          +
          Returns the current credentials of the user triggering the event, if any.
          +
          +
          Specified by:
          +
          getCredentials in interface CredentialEvent
          +
          Returns:
          +
          The current credentials of the user triggering the event, if + any, or null if no credentials are associated with the event.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/AuthenticationSuccessEvent.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/AuthenticationSuccessEvent.html new file mode 100644 index 000000000..7a72602ad --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/AuthenticationSuccessEvent.html @@ -0,0 +1,371 @@ + + + + + +AuthenticationSuccessEvent (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class AuthenticationSuccessEvent

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • org.apache.guacamole.net.event.AuthenticationSuccessEvent
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      CredentialEvent, UserEvent
      +
      +
      +
      public class AuthenticationSuccessEvent
      +extends Object
      +implements UserEvent, CredentialEvent
      +
      An event which is triggered whenever a user's credentials pass + authentication. The credentials that passed authentication are included + within this event, and can be retrieved using getCredentials(). +

      + If a Listener throws + a GuacamoleException when handling an event of this type, successful authentication + is effectively vetoed and will be subsequently processed as though the + authentication failed.

      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          AuthenticationSuccessEvent

          +
          public AuthenticationSuccessEvent​(AuthenticatedUser authenticatedUser)
          +
          Creates a new AuthenticationSuccessEvent which represents a successful + authentication attempt by the user identified by the given + AuthenticatedUser object.
          +
          +
          Parameters:
          +
          authenticatedUser - The AuthenticatedUser identifying the user that successfully + authenticated.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getAuthenticatedUser

          +
          public AuthenticatedUser getAuthenticatedUser()
          +
          Description copied from interface: UserEvent
          +
          Returns the AuthenticatedUser identifying the user triggering the event, + if any.
          +
          +
          Specified by:
          +
          getAuthenticatedUser in interface UserEvent
          +
          Returns:
          +
          The AuthenticatedUser identifying the user triggering the event, if + any, or null if no AuthenticatedUser is associated with the event.
          +
          +
        • +
        + + + +
          +
        • +

          getCredentials

          +
          public Credentials getCredentials()
          +
          Description copied from interface: CredentialEvent
          +
          Returns the current credentials of the user triggering the event, if any.
          +
          +
          Specified by:
          +
          getCredentials in interface CredentialEvent
          +
          Returns:
          +
          The current credentials of the user triggering the event, if + any, or null if no credentials are associated with the event.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/CredentialEvent.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/CredentialEvent.html new file mode 100644 index 000000000..6b7001efd --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/CredentialEvent.html @@ -0,0 +1,266 @@ + + + + + +CredentialEvent (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface CredentialEvent

    +
    +
    +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getCredentials

          +
          Credentials getCredentials()
          +
          Returns the current credentials of the user triggering the event, if any.
          +
          +
          Returns:
          +
          The current credentials of the user triggering the event, if + any, or null if no credentials are associated with the event.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/TunnelCloseEvent.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/TunnelCloseEvent.html new file mode 100644 index 000000000..3e7708d98 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/TunnelCloseEvent.html @@ -0,0 +1,402 @@ + + + + + +TunnelCloseEvent (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class TunnelCloseEvent

    +
    +
    + +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      CredentialEvent, TunnelEvent, UserEvent
      +
      +
      +
      public class TunnelCloseEvent
      +extends Object
      +implements UserEvent, CredentialEvent, TunnelEvent
      +
      An event which is triggered whenever a tunnel is being closed. The tunnel + being closed can be accessed through getTunnel(), and the UserContext + associated with the request which is closing the tunnel can be retrieved + with getUserContext(). +

      + If a Listener throws + a GuacamoleException when handling an event of this type, the request to close + the tunnel is effectively vetoed and will remain connected.

      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          TunnelCloseEvent

          +
          public TunnelCloseEvent​(AuthenticatedUser authenticatedUser,
          +                        Credentials credentials,
          +                        org.apache.guacamole.net.GuacamoleTunnel tunnel)
          +
          Creates a new TunnelCloseEvent which represents the closing of the + given tunnel via a request associated with the given credentials.
          +
          +
          Parameters:
          +
          authenticatedUser - The AuthenticatedUser associated with the user that is closing the + tunnel, if any.
          +
          credentials - The credentials associated with the request that closed the + tunnel. Note that these credentials are not necessarily the same as + the credentials provided when the user authenticated.
          +
          tunnel - The tunnel being closed.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getAuthenticatedUser

          +
          public AuthenticatedUser getAuthenticatedUser()
          +
          Description copied from interface: UserEvent
          +
          Returns the AuthenticatedUser identifying the user triggering the event, + if any.
          +
          +
          Specified by:
          +
          getAuthenticatedUser in interface UserEvent
          +
          Returns:
          +
          The AuthenticatedUser identifying the user triggering the event, if + any, or null if no AuthenticatedUser is associated with the event.
          +
          +
        • +
        + + + +
          +
        • +

          getCredentials

          +
          public Credentials getCredentials()
          +
          Description copied from interface: CredentialEvent
          +
          Returns the current credentials of the user triggering the event, if any.
          +
          +
          Specified by:
          +
          getCredentials in interface CredentialEvent
          +
          Returns:
          +
          The current credentials of the user triggering the event, if + any, or null if no credentials are associated with the event.
          +
          +
        • +
        + + + +
          +
        • +

          getTunnel

          +
          public org.apache.guacamole.net.GuacamoleTunnel getTunnel()
          +
          Description copied from interface: TunnelEvent
          +
          Returns the tunnel associated with this event, if any.
          +
          +
          Specified by:
          +
          getTunnel in interface TunnelEvent
          +
          Returns:
          +
          The tunnel associated with this event, if any, or null if no + tunnel is associated with this event.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/TunnelConnectEvent.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/TunnelConnectEvent.html new file mode 100644 index 000000000..b0d681ed4 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/TunnelConnectEvent.html @@ -0,0 +1,402 @@ + + + + + +TunnelConnectEvent (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class TunnelConnectEvent

    +
    +
    + +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      CredentialEvent, TunnelEvent, UserEvent
      +
      +
      +
      public class TunnelConnectEvent
      +extends Object
      +implements UserEvent, CredentialEvent, TunnelEvent
      +
      An event which is triggered whenever a tunnel is being connected. The tunnel + being connected can be accessed through getTunnel(), and the UserContext + associated with the request which is connecting the tunnel can be retrieved + with getUserContext(). +

      + If a Listener throws + a GuacamoleException when handling an event of this type, the tunnel connection + is effectively vetoed and will be subsequently closed.

      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          TunnelConnectEvent

          +
          public TunnelConnectEvent​(AuthenticatedUser authenticatedUser,
          +                          Credentials credentials,
          +                          org.apache.guacamole.net.GuacamoleTunnel tunnel)
          +
          Creates a new TunnelConnectEvent which represents the connecting of the + given tunnel via a request associated with the given credentials.
          +
          +
          Parameters:
          +
          authenticatedUser - The AuthenticatedUser associated with the user that is connecting the + tunnel, if any.
          +
          credentials - The credentials associated with the request that connected the + tunnel. Note that these credentials are not necessarily the same as + the credentials provided when the user authenticated.
          +
          tunnel - The tunnel being connected.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getAuthenticatedUser

          +
          public AuthenticatedUser getAuthenticatedUser()
          +
          Description copied from interface: UserEvent
          +
          Returns the AuthenticatedUser identifying the user triggering the event, + if any.
          +
          +
          Specified by:
          +
          getAuthenticatedUser in interface UserEvent
          +
          Returns:
          +
          The AuthenticatedUser identifying the user triggering the event, if + any, or null if no AuthenticatedUser is associated with the event.
          +
          +
        • +
        + + + +
          +
        • +

          getCredentials

          +
          public Credentials getCredentials()
          +
          Description copied from interface: CredentialEvent
          +
          Returns the current credentials of the user triggering the event, if any.
          +
          +
          Specified by:
          +
          getCredentials in interface CredentialEvent
          +
          Returns:
          +
          The current credentials of the user triggering the event, if + any, or null if no credentials are associated with the event.
          +
          +
        • +
        + + + +
          +
        • +

          getTunnel

          +
          public org.apache.guacamole.net.GuacamoleTunnel getTunnel()
          +
          Description copied from interface: TunnelEvent
          +
          Returns the tunnel associated with this event, if any.
          +
          +
          Specified by:
          +
          getTunnel in interface TunnelEvent
          +
          Returns:
          +
          The tunnel associated with this event, if any, or null if no + tunnel is associated with this event.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/TunnelEvent.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/TunnelEvent.html new file mode 100644 index 000000000..3fedf0312 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/TunnelEvent.html @@ -0,0 +1,265 @@ + + + + + +TunnelEvent (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface TunnelEvent

    +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + +
        All Methods Instance Methods Abstract Methods 
        Modifier and TypeMethodDescription
        org.apache.guacamole.net.GuacamoleTunnelgetTunnel() +
        Returns the tunnel associated with this event, if any.
        +
        +
      • +
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getTunnel

          +
          org.apache.guacamole.net.GuacamoleTunnel getTunnel()
          +
          Returns the tunnel associated with this event, if any.
          +
          +
          Returns:
          +
          The tunnel associated with this event, if any, or null if no + tunnel is associated with this event.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/UserEvent.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/UserEvent.html new file mode 100644 index 000000000..6a69b29ae --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/UserEvent.html @@ -0,0 +1,268 @@ + + + + + +UserEvent (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface UserEvent

    +
    +
    +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getAuthenticatedUser

          +
          AuthenticatedUser getAuthenticatedUser()
          +
          Returns the AuthenticatedUser identifying the user triggering the event, + if any.
          +
          +
          Returns:
          +
          The AuthenticatedUser identifying the user triggering the event, if + any, or null if no AuthenticatedUser is associated with the event.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/class-use/AuthenticationFailureEvent.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/class-use/AuthenticationFailureEvent.html new file mode 100644 index 000000000..b426cdd4d --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/class-use/AuthenticationFailureEvent.html @@ -0,0 +1,201 @@ + + + + + +Uses of Class org.apache.guacamole.net.event.AuthenticationFailureEvent (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.net.event.AuthenticationFailureEvent

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/class-use/AuthenticationSuccessEvent.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/class-use/AuthenticationSuccessEvent.html new file mode 100644 index 000000000..61e5706db --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/class-use/AuthenticationSuccessEvent.html @@ -0,0 +1,201 @@ + + + + + +Uses of Class org.apache.guacamole.net.event.AuthenticationSuccessEvent (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.net.event.AuthenticationSuccessEvent

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/class-use/CredentialEvent.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/class-use/CredentialEvent.html new file mode 100644 index 000000000..28275d1e6 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/class-use/CredentialEvent.html @@ -0,0 +1,222 @@ + + + + + +Uses of Interface org.apache.guacamole.net.event.CredentialEvent (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    org.apache.guacamole.net.event.CredentialEvent

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/class-use/TunnelCloseEvent.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/class-use/TunnelCloseEvent.html new file mode 100644 index 000000000..03f338a4e --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/class-use/TunnelCloseEvent.html @@ -0,0 +1,200 @@ + + + + + +Uses of Class org.apache.guacamole.net.event.TunnelCloseEvent (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.net.event.TunnelCloseEvent

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/class-use/TunnelConnectEvent.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/class-use/TunnelConnectEvent.html new file mode 100644 index 000000000..e89d79220 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/class-use/TunnelConnectEvent.html @@ -0,0 +1,200 @@ + + + + + +Uses of Class org.apache.guacamole.net.event.TunnelConnectEvent (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.net.event.TunnelConnectEvent

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/class-use/TunnelEvent.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/class-use/TunnelEvent.html new file mode 100644 index 000000000..9d1ad4fba --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/class-use/TunnelEvent.html @@ -0,0 +1,206 @@ + + + + + +Uses of Interface org.apache.guacamole.net.event.TunnelEvent (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    org.apache.guacamole.net.event.TunnelEvent

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/class-use/UserEvent.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/class-use/UserEvent.html new file mode 100644 index 000000000..8a694895a --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/class-use/UserEvent.html @@ -0,0 +1,214 @@ + + + + + +Uses of Interface org.apache.guacamole.net.event.UserEvent (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    org.apache.guacamole.net.event.UserEvent

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/listener/AuthenticationFailureListener.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/listener/AuthenticationFailureListener.html new file mode 100644 index 000000000..63c7e6ab9 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/listener/AuthenticationFailureListener.html @@ -0,0 +1,277 @@ + + + + + +AuthenticationFailureListener (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface AuthenticationFailureListener

    +
    +
    +
    +
      +
    • +
      +
      @Deprecated
      +public interface AuthenticationFailureListener
      +
      Deprecated. +
      Listeners should instead implement the Listener interface.
      +
      +
      A listener whose authenticationFailed() hook will fire immediately + after a user's authentication attempt fails. Note that this hook cannot + be used to cancel the authentication failure.
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          authenticationFailed

          +
          void authenticationFailed​(AuthenticationFailureEvent e)
          +                   throws org.apache.guacamole.GuacamoleException
          +
          Deprecated.
          +
          Event hook which fires immediately after a user's authentication attempt + fails.
          +
          +
          Parameters:
          +
          e - The AuthenticationFailureEvent describing the authentication + failure that just occurred.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while handling the authentication failure event. + Note that throwing an exception will NOT cause the authentication + failure to be canceled (which makes no sense), but it will prevent + subsequent listeners from receiving the notification.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/listener/AuthenticationSuccessListener.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/listener/AuthenticationSuccessListener.html new file mode 100644 index 000000000..b1413f4f5 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/listener/AuthenticationSuccessListener.html @@ -0,0 +1,281 @@ + + + + + +AuthenticationSuccessListener (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface AuthenticationSuccessListener

    +
    +
    +
    +
      +
    • +
      +
      @Deprecated
      +public interface AuthenticationSuccessListener
      +
      Deprecated. +
      Listeners should instead implement the Listener interface.
      +
      +
      A listener whose hooks will fire immediately before and after a user's + authentication attempt succeeds. If a user successfully authenticates, + the authenticationSucceeded() hook has the opportunity to cancel the + authentication and force it to fail.
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          authenticationSucceeded

          +
          boolean authenticationSucceeded​(AuthenticationSuccessEvent e)
          +                         throws org.apache.guacamole.GuacamoleException
          +
          Deprecated.
          +
          Event hook which fires immediately after a user's authentication attempt + succeeds. The return value of this hook dictates whether the + successful authentication attempt is canceled.
          +
          +
          Parameters:
          +
          e - The AuthenticationFailureEvent describing the authentication + failure that just occurred.
          +
          Returns:
          +
          true if the successful authentication attempt should be + allowed, or false if the attempt should be denied, causing + the attempt to effectively fail.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while handling the authentication success event. + Throwing an exception will also cancel the authentication success.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/listener/Listener.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/listener/Listener.html new file mode 100644 index 000000000..6f5a10cb0 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/listener/Listener.html @@ -0,0 +1,274 @@ + + + + + +Listener (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface Listener

    +
    +
    +
    +
      +
    • +
      +
      public interface Listener
      +
      A listener for events that occur in handing various Guacamole requests + such as authentication, tunnel connect/close, etc. Listeners are registered + through the extension manifest mechanism. When an event occurs, listeners + are notified in the order in which they are declared in the manifest and + continues until either all listeners have been notified or with the first + listener that throws a GuacamoleException or other runtime exception.
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          handleEvent

          +
          void handleEvent​(Object event)
          +          throws org.apache.guacamole.GuacamoleException
          +
          Notifies the recipient that an event has occurred. +

          + Throwing an exception from an event listener can act to veto an action in + progress for some event types. See the Javadoc for specific event types for + details.

          +
          +
          Parameters:
          +
          event - An object that describes the event that has occurred.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If the listener wishes to stop notification of the event to subsequent + listeners. For some event types, this acts to veto an action in progress; + e.g. treating a successful authentication as though it failed.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/listener/TunnelCloseListener.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/listener/TunnelCloseListener.html new file mode 100644 index 000000000..463bfb15a --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/listener/TunnelCloseListener.html @@ -0,0 +1,278 @@ + + + + + +TunnelCloseListener (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface TunnelCloseListener

    +
    +
    +
    +
      +
    • +
      +
      @Deprecated
      +public interface TunnelCloseListener
      +
      Deprecated. +
      Listeners should instead implement the Listener interface.
      +
      +
      A listener whose tunnelClosed() hook will fire immediately before an + existing tunnel is closed.
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          tunnelClosed

          +
          boolean tunnelClosed​(TunnelCloseEvent e)
          +              throws org.apache.guacamole.GuacamoleException
          +
          Deprecated.
          +
          Event hook which fires immediately before an existing tunnel is closed. + The return value of this hook dictates whether the tunnel is allowed to + be closed.
          +
          +
          Parameters:
          +
          e - The TunnelCloseEvent describing the tunnel being closed and + any associated credentials.
          +
          Returns:
          +
          true if the tunnel should be allowed to be closed, or false + if the attempt should be denied, causing the attempt to + effectively fail.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while handling the tunnel close event. Throwing + an exception will also stop the tunnel from being closed.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/listener/TunnelConnectListener.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/listener/TunnelConnectListener.html new file mode 100644 index 000000000..e48aa07ea --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/listener/TunnelConnectListener.html @@ -0,0 +1,279 @@ + + + + + +TunnelConnectListener (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface TunnelConnectListener

    +
    +
    +
    +
      +
    • +
      +
      @Deprecated
      +public interface TunnelConnectListener
      +
      Deprecated. +
      Listeners should instead implement the Listener interface.
      +
      +
      A listener whose tunnelConnected() hook will fire immediately after a new + tunnel is connected.
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          tunnelConnected

          +
          boolean tunnelConnected​(TunnelConnectEvent e)
          +                 throws org.apache.guacamole.GuacamoleException
          +
          Deprecated.
          +
          Event hook which fires immediately after a new tunnel is connected. + The return value of this hook dictates whether the tunnel is made visible + to the session.
          +
          +
          Parameters:
          +
          e - The TunnelConnectEvent describing the tunnel being connected and + any associated credentials.
          +
          Returns:
          +
          true if the tunnel should be allowed to be connected, or false + if the attempt should be denied, causing the attempt to + effectively fail.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while handling the tunnel connect event. Throwing + an exception will also stop the tunnel from being made visible to the + session.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/listener/class-use/AuthenticationFailureListener.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/listener/class-use/AuthenticationFailureListener.html new file mode 100644 index 000000000..ac961f8f4 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/listener/class-use/AuthenticationFailureListener.html @@ -0,0 +1,150 @@ + + + + + +Uses of Interface org.apache.guacamole.net.event.listener.AuthenticationFailureListener (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    org.apache.guacamole.net.event.listener.AuthenticationFailureListener

    +
    +
    No usage of org.apache.guacamole.net.event.listener.AuthenticationFailureListener
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/listener/class-use/AuthenticationSuccessListener.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/listener/class-use/AuthenticationSuccessListener.html new file mode 100644 index 000000000..3887cebfe --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/listener/class-use/AuthenticationSuccessListener.html @@ -0,0 +1,150 @@ + + + + + +Uses of Interface org.apache.guacamole.net.event.listener.AuthenticationSuccessListener (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    org.apache.guacamole.net.event.listener.AuthenticationSuccessListener

    +
    +
    No usage of org.apache.guacamole.net.event.listener.AuthenticationSuccessListener
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/listener/class-use/Listener.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/listener/class-use/Listener.html new file mode 100644 index 000000000..6e602c69a --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/listener/class-use/Listener.html @@ -0,0 +1,150 @@ + + + + + +Uses of Interface org.apache.guacamole.net.event.listener.Listener (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    org.apache.guacamole.net.event.listener.Listener

    +
    +
    No usage of org.apache.guacamole.net.event.listener.Listener
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/listener/class-use/TunnelCloseListener.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/listener/class-use/TunnelCloseListener.html new file mode 100644 index 000000000..53925f35a --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/listener/class-use/TunnelCloseListener.html @@ -0,0 +1,150 @@ + + + + + +Uses of Interface org.apache.guacamole.net.event.listener.TunnelCloseListener (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    org.apache.guacamole.net.event.listener.TunnelCloseListener

    +
    +
    No usage of org.apache.guacamole.net.event.listener.TunnelCloseListener
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/listener/class-use/TunnelConnectListener.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/listener/class-use/TunnelConnectListener.html new file mode 100644 index 000000000..5d5298917 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/listener/class-use/TunnelConnectListener.html @@ -0,0 +1,150 @@ + + + + + +Uses of Interface org.apache.guacamole.net.event.listener.TunnelConnectListener (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    org.apache.guacamole.net.event.listener.TunnelConnectListener

    +
    +
    No usage of org.apache.guacamole.net.event.listener.TunnelConnectListener
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/listener/package-summary.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/listener/package-summary.html new file mode 100644 index 000000000..0e6143b86 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/listener/package-summary.html @@ -0,0 +1,204 @@ + + + + + +org.apache.guacamole.net.event.listener (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Package org.apache.guacamole.net.event.listener

    +
    +
    +
    + + +
    Provides classes for hooking into various events that take place as + users log into and use the Guacamole web application. These event + hooks can be used to take action upon occurrence of an event and, + in some cases, prevent the web application from allowing the + event to continue for the user that triggered it.
    +
    + +
    +
    +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/listener/package-tree.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/listener/package-tree.html new file mode 100644 index 000000000..a0c8584c9 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/listener/package-tree.html @@ -0,0 +1,165 @@ + + + + + +org.apache.guacamole.net.event.listener Class Hierarchy (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Hierarchy For Package org.apache.guacamole.net.event.listener

    +Package Hierarchies: + +
    +
    +
    +

    Interface Hierarchy

    + +
    +
    +
    +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/listener/package-use.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/listener/package-use.html new file mode 100644 index 000000000..1f71740cc --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/listener/package-use.html @@ -0,0 +1,150 @@ + + + + + +Uses of Package org.apache.guacamole.net.event.listener (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Package
    org.apache.guacamole.net.event.listener

    +
    +
    No usage of org.apache.guacamole.net.event.listener
    +
    +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/package-summary.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/package-summary.html new file mode 100644 index 000000000..b5ab8945e --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/package-summary.html @@ -0,0 +1,233 @@ + + + + + +org.apache.guacamole.net.event (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Package org.apache.guacamole.net.event

    +
    +
    +
    + + +
    Provides classes for storing information about events that are + triggered when users log into and use the Guacamole web application. + These event classes are most useful when used with hooks implemented + using listener classes.
    +
    +
    See Also:
    +
    org.apache.guacamole.net.event.listener
    +
    +
    +
      +
    • + + + + + + + + + + + + + + + + + + + + +
      Interface Summary 
      InterfaceDescription
      CredentialEvent +
      Abstract basis for events which may have associated user credentials when + triggered.
      +
      TunnelEvent +
      Abstract basis for events associated with tunnels.
      +
      UserEvent +
      Abstract basis for events which may have an associated AuthenticatedUser when + triggered.
      +
      +
    • +
    • + + + + + + + + + + + + + + + + + + + + + + + + +
      Class Summary 
      ClassDescription
      AuthenticationFailureEvent +
      An event which is triggered whenever a user's credentials fail to be + authenticated.
      +
      AuthenticationSuccessEvent +
      An event which is triggered whenever a user's credentials pass + authentication.
      +
      TunnelCloseEvent +
      An event which is triggered whenever a tunnel is being closed.
      +
      TunnelConnectEvent +
      An event which is triggered whenever a tunnel is being connected.
      +
      +
    • +
    +
    +
    +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/package-tree.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/package-tree.html new file mode 100644 index 000000000..9859ed437 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/package-tree.html @@ -0,0 +1,176 @@ + + + + + +org.apache.guacamole.net.event Class Hierarchy (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Hierarchy For Package org.apache.guacamole.net.event

    +Package Hierarchies: + +
    +
    +
    +

    Class Hierarchy

    + +
    +
    +

    Interface Hierarchy

    + +
    +
    +
    +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/package-use.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/package-use.html new file mode 100644 index 000000000..0aae66230 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/net/event/package-use.html @@ -0,0 +1,250 @@ + + + + + +Uses of Package org.apache.guacamole.net.event (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Package
    org.apache.guacamole.net.event

    +
    +
    + +
    +
    +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/BooleanGuacamoleProperty.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/BooleanGuacamoleProperty.html new file mode 100644 index 000000000..e7a65f14d --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/BooleanGuacamoleProperty.html @@ -0,0 +1,340 @@ + + + + + +BooleanGuacamoleProperty (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class BooleanGuacamoleProperty

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • org.apache.guacamole.properties.BooleanGuacamoleProperty
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      GuacamoleProperty<Boolean>
      +
      +
      +
      public abstract class BooleanGuacamoleProperty
      +extends Object
      +implements GuacamoleProperty<Boolean>
      +
      A GuacamoleProperty whose value is an boolean. Legal true values are "true", + or "false". Case does not matter.
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          BooleanGuacamoleProperty

          +
          public BooleanGuacamoleProperty()
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          parseValue

          +
          public Boolean parseValue​(String value)
          +                   throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: GuacamoleProperty
          +
          Parses the given string value into the type associated with this + GuacamoleProperty.
          +
          +
          Specified by:
          +
          parseValue in interface GuacamoleProperty<Boolean>
          +
          Parameters:
          +
          value - The string value to parse.
          +
          Returns:
          +
          The parsed value.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while parsing the + provided value.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/ByteArrayProperty.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/ByteArrayProperty.html new file mode 100644 index 000000000..8e3762bba --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/ByteArrayProperty.html @@ -0,0 +1,341 @@ + + + + + +ByteArrayProperty (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class ByteArrayProperty

    +
    +
    + +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      GuacamoleProperty<byte[]>
      +
      +
      +
      public abstract class ByteArrayProperty
      +extends Object
      +implements GuacamoleProperty<byte[]>
      +
      A GuacamoleProperty whose value is a byte array. The bytes of the byte array + must be represented as a hexadecimal string within the property value. The + hexadecimal string is case-insensitive.
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          ByteArrayProperty

          +
          public ByteArrayProperty()
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          parseValue

          +
          public byte[] parseValue​(String value)
          +                  throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: GuacamoleProperty
          +
          Parses the given string value into the type associated with this + GuacamoleProperty.
          +
          +
          Specified by:
          +
          parseValue in interface GuacamoleProperty<byte[]>
          +
          Parameters:
          +
          value - The string value to parse.
          +
          Returns:
          +
          The parsed value.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while parsing the + provided value.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/EnumGuacamoleProperty.PropertyValue.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/EnumGuacamoleProperty.PropertyValue.html new file mode 100644 index 000000000..3cc8dcc3c --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/EnumGuacamoleProperty.PropertyValue.html @@ -0,0 +1,256 @@ + + + + + +EnumGuacamoleProperty.PropertyValue (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Annotation Type EnumGuacamoleProperty.PropertyValue

    +
    +
    +
    +
      +
    • +
      +
      @Retention(RUNTIME)
      +@Target(FIELD)
      +public static @interface EnumGuacamoleProperty.PropertyValue
      +
      Defines the string value which should be accepted and parsed into the + annotated enum constant.
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Required Element Summary

        + + + + + + + + + + + + +
        Required Elements 
        Modifier and TypeRequired ElementDescription
        Stringvalue +
        Returns the String value that should produce the annotated enum + constant when parsed.
        +
        +
      • +
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Element Detail

        + + + +
          +
        • +

          value

          +
          String value
          +
          Returns the String value that should produce the annotated enum + constant when parsed.
          +
          +
          Returns:
          +
          The String value that should produce the annotated enum constant + when parsed.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/EnumGuacamoleProperty.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/EnumGuacamoleProperty.html new file mode 100644 index 000000000..078f0afd8 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/EnumGuacamoleProperty.html @@ -0,0 +1,445 @@ + + + + + +EnumGuacamoleProperty (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class EnumGuacamoleProperty<T extends Enum<T>>

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • org.apache.guacamole.properties.EnumGuacamoleProperty<T>
      • +
      +
    • +
    +
    +
      +
    • +
      +
      Type Parameters:
      +
      T - The enum which defines the possible values of this property.
      +
      +
      +
      All Implemented Interfaces:
      +
      GuacamoleProperty<T>
      +
      +
      +
      public abstract class EnumGuacamoleProperty<T extends Enum<T>>
      +extends Object
      +implements GuacamoleProperty<T>
      +
      A GuacamoleProperty whose possible values are defined by an enum. Possible + values may be defined either through providing an explicit mapping or + through annotating the enum constant definitions with the + EnumGuacamoleProperty.PropertyValue annotation.
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          EnumGuacamoleProperty

          +
          public EnumGuacamoleProperty​(Map<String,​T> valueMapping)
          +
          Creates a new EnumGuacamoleProperty which parses String property values + into corresponding enum constants as defined by the given Map.
          +
          +
          Parameters:
          +
          valueMapping - A Map which maps all legal String values to their corresponding enum + constants.
          +
          +
        • +
        + + + +
          +
        • +

          EnumGuacamoleProperty

          +
          public EnumGuacamoleProperty​(Class<T> enumClass)
          +
          Creates a new EnumGuacamoleProperty which parses String property values + into corresponding enum constants as defined by the + EnumGuacamoleProperty.PropertyValue annotations associated with those constants.
          +
          +
          Parameters:
          +
          enumClass - The enum whose annotated constants should be used as legal values of + this property.
          +
          +
        • +
        + + + + + +
          +
        • +

          EnumGuacamoleProperty

          +
          public EnumGuacamoleProperty​(String key,
          +                             T value,
          +                             Object... additional)
          +                      throws IllegalArgumentException
          +
          Creates a new EnumGuacamoleProperty which parses the given String + property values into the given corresponding enum constants.
          +
          +
          Parameters:
          +
          key - The first String value to accept as a legal value of this property.
          +
          value - The enum constant that key should be parsed into.
          +
          additional - Any additional key/value pairs to be included beyond the first. This + array must be even in length, where each even element is a String + key and each odd element is the enum constant value to be associated + with the key immediately preceding it.
          +
          Throws:
          +
          IllegalArgumentException - If any provided key is not a String, if any provided value is not + an enum constant from the given enum type, or if the length of + additional is not even.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          parseValue

          +
          public T parseValue​(String value)
          +             throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: GuacamoleProperty
          +
          Parses the given string value into the type associated with this + GuacamoleProperty.
          +
          +
          Specified by:
          +
          parseValue in interface GuacamoleProperty<T extends Enum<T>>
          +
          Parameters:
          +
          value - The string value to parse.
          +
          Returns:
          +
          The parsed value.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while parsing the + provided value.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/FileGuacamoleProperties.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/FileGuacamoleProperties.html new file mode 100644 index 000000000..e94124fec --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/FileGuacamoleProperties.html @@ -0,0 +1,301 @@ + + + + + +FileGuacamoleProperties (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class FileGuacamoleProperties

    +
    +
    + +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      GuacamoleProperties
      +
      +
      +
      public class FileGuacamoleProperties
      +extends PropertiesGuacamoleProperties
      +
      GuacamoleProperties implementation which reads all properties from a + standard Java properties file. Whitespace at the end of property values is + automatically trimmed.
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          FileGuacamoleProperties

          +
          public FileGuacamoleProperties​(File propertiesFile)
          +                        throws org.apache.guacamole.GuacamoleException
          +
          Creates a new FileGuacamoleProperties which reads all properties from + the given standard Java properties file.
          +
          +
          Parameters:
          +
          propertiesFile - The Java properties file to read.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error prevents reading the given Java properties file.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/FileGuacamoleProperty.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/FileGuacamoleProperty.html new file mode 100644 index 000000000..ba472d437 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/FileGuacamoleProperty.html @@ -0,0 +1,339 @@ + + + + + +FileGuacamoleProperty (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class FileGuacamoleProperty

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • org.apache.guacamole.properties.FileGuacamoleProperty
      • +
      +
    • +
    +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          FileGuacamoleProperty

          +
          public FileGuacamoleProperty()
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          parseValue

          +
          public File parseValue​(String value)
          +                throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: GuacamoleProperty
          +
          Parses the given string value into the type associated with this + GuacamoleProperty.
          +
          +
          Specified by:
          +
          parseValue in interface GuacamoleProperty<File>
          +
          Parameters:
          +
          value - The string value to parse.
          +
          Returns:
          +
          The parsed value.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while parsing the + provided value.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/GuacamoleProperties.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/GuacamoleProperties.html new file mode 100644 index 000000000..745ea12f4 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/GuacamoleProperties.html @@ -0,0 +1,274 @@ + + + + + +GuacamoleProperties (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface GuacamoleProperties

    +
    +
    +
    +
      +
    • +
      +
      All Known Implementing Classes:
      +
      FileGuacamoleProperties, PropertiesGuacamoleProperties
      +
      +
      +
      public interface GuacamoleProperties
      +
      An arbitrary set of Guacamole configuration property name/value pairs. This + interface is similar in concept to Properties except that + implementations are not required to allow properties to be enumerated or + iterated. Properties may simply be retrieved by their names, if known.
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getProperty

          +
          String getProperty​(String name)
          +            throws org.apache.guacamole.GuacamoleException
          +
          Returns the value of the property having the given name, if defined. If + no such property exists, null is returned.
          +
          +
          Parameters:
          +
          name - The name of the property to retrieve.
          +
          Returns:
          +
          The value of the given property, or null if no such property is + defined.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error prevents the given property from being read.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/GuacamoleProperty.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/GuacamoleProperty.html new file mode 100644 index 000000000..e5ac6dc90 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/GuacamoleProperty.html @@ -0,0 +1,301 @@ + + + + + +GuacamoleProperty (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface GuacamoleProperty<Type>

    +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + + + + +
        All Methods Instance Methods Abstract Methods 
        Modifier and TypeMethodDescription
        StringgetName() +
        Returns the name of the property in guacamole.properties that this + GuacamoleProperty will parse.
        +
        TypeparseValue​(String value) +
        Parses the given string value into the type associated with this + GuacamoleProperty.
        +
        +
      • +
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getName

          +
          String getName()
          +
          Returns the name of the property in guacamole.properties that this + GuacamoleProperty will parse.
          +
          +
          Returns:
          +
          The name of the property in guacamole.properties that this + GuacamoleProperty will parse.
          +
          +
        • +
        + + + +
          +
        • +

          parseValue

          +
          Type parseValue​(String value)
          +         throws org.apache.guacamole.GuacamoleException
          +
          Parses the given string value into the type associated with this + GuacamoleProperty.
          +
          +
          Parameters:
          +
          value - The string value to parse.
          +
          Returns:
          +
          The parsed value.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while parsing the + provided value.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/IntegerGuacamoleProperty.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/IntegerGuacamoleProperty.html new file mode 100644 index 000000000..53a08b2b2 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/IntegerGuacamoleProperty.html @@ -0,0 +1,339 @@ + + + + + +IntegerGuacamoleProperty (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class IntegerGuacamoleProperty

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • org.apache.guacamole.properties.IntegerGuacamoleProperty
      • +
      +
    • +
    +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          IntegerGuacamoleProperty

          +
          public IntegerGuacamoleProperty()
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          parseValue

          +
          public Integer parseValue​(String value)
          +                   throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: GuacamoleProperty
          +
          Parses the given string value into the type associated with this + GuacamoleProperty.
          +
          +
          Specified by:
          +
          parseValue in interface GuacamoleProperty<Integer>
          +
          Parameters:
          +
          value - The string value to parse.
          +
          Returns:
          +
          The parsed value.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while parsing the + provided value.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/LongGuacamoleProperty.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/LongGuacamoleProperty.html new file mode 100644 index 000000000..7da9e7683 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/LongGuacamoleProperty.html @@ -0,0 +1,339 @@ + + + + + +LongGuacamoleProperty (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class LongGuacamoleProperty

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • org.apache.guacamole.properties.LongGuacamoleProperty
      • +
      +
    • +
    +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          LongGuacamoleProperty

          +
          public LongGuacamoleProperty()
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          parseValue

          +
          public Long parseValue​(String value)
          +                throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: GuacamoleProperty
          +
          Parses the given string value into the type associated with this + GuacamoleProperty.
          +
          +
          Specified by:
          +
          parseValue in interface GuacamoleProperty<Long>
          +
          Parameters:
          +
          value - The string value to parse.
          +
          Returns:
          +
          The parsed value.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while parsing the + provided value.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/PropertiesGuacamoleProperties.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/PropertiesGuacamoleProperties.html new file mode 100644 index 000000000..4436d317c --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/PropertiesGuacamoleProperties.html @@ -0,0 +1,349 @@ + + + + + +PropertiesGuacamoleProperties (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class PropertiesGuacamoleProperties

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • org.apache.guacamole.properties.PropertiesGuacamoleProperties
      • +
      +
    • +
    +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          PropertiesGuacamoleProperties

          +
          public PropertiesGuacamoleProperties​(Properties properties)
          +
          Creates a new PropertiesGuacamoleProperties which wraps the given + Properties, providing access to the values of any properties + defined therein.
          +
          +
          Parameters:
          +
          properties - The Properties that should be used as the source of all property + values exposed by this instance of PropertiesGuacamoleProperties.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getProperty

          +
          public String getProperty​(String name)
          +                   throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: GuacamoleProperties
          +
          Returns the value of the property having the given name, if defined. If + no such property exists, null is returned.
          +
          +
          Specified by:
          +
          getProperty in interface GuacamoleProperties
          +
          Parameters:
          +
          name - The name of the property to retrieve.
          +
          Returns:
          +
          The value of the given property, or null if no such property is + defined.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error prevents the given property from being read.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/StringGuacamoleProperty.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/StringGuacamoleProperty.html new file mode 100644 index 000000000..6d228809f --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/StringGuacamoleProperty.html @@ -0,0 +1,339 @@ + + + + + +StringGuacamoleProperty (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class StringGuacamoleProperty

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • org.apache.guacamole.properties.StringGuacamoleProperty
      • +
      +
    • +
    +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          StringGuacamoleProperty

          +
          public StringGuacamoleProperty()
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          parseValue

          +
          public String parseValue​(String value)
          +                  throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: GuacamoleProperty
          +
          Parses the given string value into the type associated with this + GuacamoleProperty.
          +
          +
          Specified by:
          +
          parseValue in interface GuacamoleProperty<String>
          +
          Parameters:
          +
          value - The string value to parse.
          +
          Returns:
          +
          The parsed value.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while parsing the + provided value.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/StringListProperty.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/StringListProperty.html new file mode 100644 index 000000000..7076c234d --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/StringListProperty.html @@ -0,0 +1,344 @@ + + + + + +StringListProperty (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class StringListProperty

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • org.apache.guacamole.properties.StringListProperty
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      GuacamoleProperty<List<String>>
      +
      +
      +
      public abstract class StringListProperty
      +extends Object
      +implements GuacamoleProperty<List<String>>
      +
      A GuacamoleProperty whose value is a List of Strings. The string value + parsed to produce this list is a comma-delimited list. Duplicate values are + ignored, as is any whitespace following delimiters. To maintain + compatibility with the behavior of Java properties in general, only + whitespace at the beginning of each value is ignored; trailing whitespace + becomes part of the value.
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          StringListProperty

          +
          public StringListProperty()
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          parseValue

          +
          public List<String> parseValue​(String values)
          +                        throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: GuacamoleProperty
          +
          Parses the given string value into the type associated with this + GuacamoleProperty.
          +
          +
          Specified by:
          +
          parseValue in interface GuacamoleProperty<List<String>>
          +
          Parameters:
          +
          values - The string value to parse.
          +
          Returns:
          +
          The parsed value.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while parsing the + provided value.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/TimeZoneGuacamoleProperty.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/TimeZoneGuacamoleProperty.html new file mode 100644 index 000000000..c633d7c6f --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/TimeZoneGuacamoleProperty.html @@ -0,0 +1,384 @@ + + + + + +TimeZoneGuacamoleProperty (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class TimeZoneGuacamoleProperty

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • org.apache.guacamole.properties.TimeZoneGuacamoleProperty
      • +
      +
    • +
    +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          GMT_REGEX

          +
          public static final Pattern GMT_REGEX
          +
          A regex that matches valid variants of GMT timezones.
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          TimeZoneGuacamoleProperty

          +
          public TimeZoneGuacamoleProperty()
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          parseValue

          +
          public TimeZone parseValue​(String value)
          +                    throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: GuacamoleProperty
          +
          Parses the given string value into the type associated with this + GuacamoleProperty.
          +
          +
          Specified by:
          +
          parseValue in interface GuacamoleProperty<TimeZone>
          +
          Parameters:
          +
          value - The string value to parse.
          +
          Returns:
          +
          The parsed value.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while parsing the + provided value.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/URIGuacamoleProperty.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/URIGuacamoleProperty.html new file mode 100644 index 000000000..50eac11bb --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/URIGuacamoleProperty.html @@ -0,0 +1,339 @@ + + + + + +URIGuacamoleProperty (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class URIGuacamoleProperty

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • org.apache.guacamole.properties.URIGuacamoleProperty
      • +
      +
    • +
    +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          URIGuacamoleProperty

          +
          public URIGuacamoleProperty()
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          parseValue

          +
          public URI parseValue​(String value)
          +               throws org.apache.guacamole.GuacamoleException
          +
          Description copied from interface: GuacamoleProperty
          +
          Parses the given string value into the type associated with this + GuacamoleProperty.
          +
          +
          Specified by:
          +
          parseValue in interface GuacamoleProperty<URI>
          +
          Parameters:
          +
          value - The string value to parse.
          +
          Returns:
          +
          The parsed value.
          +
          Throws:
          +
          org.apache.guacamole.GuacamoleException - If an error occurs while parsing the + provided value.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/class-use/BooleanGuacamoleProperty.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/class-use/BooleanGuacamoleProperty.html new file mode 100644 index 000000000..1989e2404 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/class-use/BooleanGuacamoleProperty.html @@ -0,0 +1,196 @@ + + + + + +Uses of Class org.apache.guacamole.properties.BooleanGuacamoleProperty (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.properties.BooleanGuacamoleProperty

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/class-use/ByteArrayProperty.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/class-use/ByteArrayProperty.html new file mode 100644 index 000000000..fc349fcee --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/class-use/ByteArrayProperty.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.properties.ByteArrayProperty (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.properties.ByteArrayProperty

    +
    +
    No usage of org.apache.guacamole.properties.ByteArrayProperty
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/class-use/EnumGuacamoleProperty.PropertyValue.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/class-use/EnumGuacamoleProperty.PropertyValue.html new file mode 100644 index 000000000..034dd1495 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/class-use/EnumGuacamoleProperty.PropertyValue.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.properties.EnumGuacamoleProperty.PropertyValue (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.properties.EnumGuacamoleProperty.PropertyValue

    +
    +
    No usage of org.apache.guacamole.properties.EnumGuacamoleProperty.PropertyValue
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/class-use/EnumGuacamoleProperty.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/class-use/EnumGuacamoleProperty.html new file mode 100644 index 000000000..3be639175 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/class-use/EnumGuacamoleProperty.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.properties.EnumGuacamoleProperty (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.properties.EnumGuacamoleProperty

    +
    +
    No usage of org.apache.guacamole.properties.EnumGuacamoleProperty
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/class-use/FileGuacamoleProperties.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/class-use/FileGuacamoleProperties.html new file mode 100644 index 000000000..082ad369b --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/class-use/FileGuacamoleProperties.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.properties.FileGuacamoleProperties (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.properties.FileGuacamoleProperties

    +
    +
    No usage of org.apache.guacamole.properties.FileGuacamoleProperties
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/class-use/FileGuacamoleProperty.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/class-use/FileGuacamoleProperty.html new file mode 100644 index 000000000..aa6b298bc --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/class-use/FileGuacamoleProperty.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.properties.FileGuacamoleProperty (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.properties.FileGuacamoleProperty

    +
    +
    No usage of org.apache.guacamole.properties.FileGuacamoleProperty
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/class-use/GuacamoleProperties.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/class-use/GuacamoleProperties.html new file mode 100644 index 000000000..52099c22b --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/class-use/GuacamoleProperties.html @@ -0,0 +1,247 @@ + + + + + +Uses of Interface org.apache.guacamole.properties.GuacamoleProperties (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    org.apache.guacamole.properties.GuacamoleProperties

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/class-use/GuacamoleProperty.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/class-use/GuacamoleProperty.html new file mode 100644 index 000000000..0e2123703 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/class-use/GuacamoleProperty.html @@ -0,0 +1,340 @@ + + + + + +Uses of Interface org.apache.guacamole.properties.GuacamoleProperty (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    org.apache.guacamole.properties.GuacamoleProperty

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/class-use/IntegerGuacamoleProperty.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/class-use/IntegerGuacamoleProperty.html new file mode 100644 index 000000000..72fdba7df --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/class-use/IntegerGuacamoleProperty.html @@ -0,0 +1,196 @@ + + + + + +Uses of Class org.apache.guacamole.properties.IntegerGuacamoleProperty (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.properties.IntegerGuacamoleProperty

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/class-use/LongGuacamoleProperty.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/class-use/LongGuacamoleProperty.html new file mode 100644 index 000000000..29525a77a --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/class-use/LongGuacamoleProperty.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.properties.LongGuacamoleProperty (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.properties.LongGuacamoleProperty

    +
    +
    No usage of org.apache.guacamole.properties.LongGuacamoleProperty
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/class-use/PropertiesGuacamoleProperties.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/class-use/PropertiesGuacamoleProperties.html new file mode 100644 index 000000000..e396acf61 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/class-use/PropertiesGuacamoleProperties.html @@ -0,0 +1,200 @@ + + + + + +Uses of Class org.apache.guacamole.properties.PropertiesGuacamoleProperties (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.properties.PropertiesGuacamoleProperties

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/class-use/StringGuacamoleProperty.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/class-use/StringGuacamoleProperty.html new file mode 100644 index 000000000..4f32f5240 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/class-use/StringGuacamoleProperty.html @@ -0,0 +1,197 @@ + + + + + +Uses of Class org.apache.guacamole.properties.StringGuacamoleProperty (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.properties.StringGuacamoleProperty

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/class-use/StringListProperty.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/class-use/StringListProperty.html new file mode 100644 index 000000000..7a7417124 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/class-use/StringListProperty.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.properties.StringListProperty (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.properties.StringListProperty

    +
    +
    No usage of org.apache.guacamole.properties.StringListProperty
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/class-use/TimeZoneGuacamoleProperty.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/class-use/TimeZoneGuacamoleProperty.html new file mode 100644 index 000000000..acf1d6c50 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/class-use/TimeZoneGuacamoleProperty.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.properties.TimeZoneGuacamoleProperty (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.properties.TimeZoneGuacamoleProperty

    +
    +
    No usage of org.apache.guacamole.properties.TimeZoneGuacamoleProperty
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/class-use/URIGuacamoleProperty.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/class-use/URIGuacamoleProperty.html new file mode 100644 index 000000000..1bef66939 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/class-use/URIGuacamoleProperty.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.properties.URIGuacamoleProperty (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.properties.URIGuacamoleProperty

    +
    +
    No usage of org.apache.guacamole.properties.URIGuacamoleProperty
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/package-summary.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/package-summary.html new file mode 100644 index 000000000..b172854c1 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/package-summary.html @@ -0,0 +1,286 @@ + + + + + +org.apache.guacamole.properties (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Package org.apache.guacamole.properties

    +
    +
    +
    + + +
    Provides classes for reading properties from the web-application-wide + guacamole.properties file.
    +
    + +
    +
    +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/package-tree.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/package-tree.html new file mode 100644 index 000000000..2521d6676 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/package-tree.html @@ -0,0 +1,192 @@ + + + + + +org.apache.guacamole.properties Class Hierarchy (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Hierarchy For Package org.apache.guacamole.properties

    +Package Hierarchies: + +
    +
    +
    +

    Class Hierarchy

    + +
    +
    +

    Interface Hierarchy

    + +
    +
    +

    Annotation Type Hierarchy

    + +
    +
    +
    +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/package-use.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/package-use.html new file mode 100644 index 000000000..dbe3c8546 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/properties/package-use.html @@ -0,0 +1,252 @@ + + + + + +Uses of Package org.apache.guacamole.properties (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Package
    org.apache.guacamole.properties

    +
    +
    + +
    +
    +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/protocols/ProtocolInfo.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/protocols/ProtocolInfo.html new file mode 100644 index 000000000..b023b2de6 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/protocols/ProtocolInfo.html @@ -0,0 +1,525 @@ + + + + + +ProtocolInfo (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class ProtocolInfo

    +
    +
    + +
    +
      +
    • +
      +
      public class ProtocolInfo
      +extends Object
      +
      Describes a protocol and all parameters associated with it, as required by + a protocol plugin for guacd. Each parameter is described with a Form, which + allows the parameters of a protocol to be exposed to the user as friendly + groupings of fields.
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          ProtocolInfo

          +
          public ProtocolInfo​(String name,
          +                    Collection<Form> connectionForms,
          +                    Collection<Form> sharingProfileForms)
          +
          Creates a new ProtocolInfo having the given name and forms. The given + collections of forms are used to describe the parameters for connections + and sharing profiles respectively.
          +
          +
          Parameters:
          +
          name - The unique name associated with the protocol.
          +
          connectionForms - A collection of forms describing all known parameters for a + connection using this protocol.
          +
          sharingProfileForms - A collection of forms describing all known parameters relevant to a + sharing profile whose primary connection uses this protocol.
          +
          +
        • +
        + + + +
          +
        • +

          ProtocolInfo

          +
          public ProtocolInfo()
          +
          Creates a new ProtocolInfo with no associated name or forms.
          +
        • +
        + + + +
          +
        • +

          ProtocolInfo

          +
          public ProtocolInfo​(String name)
          +
          Creates a new ProtocolInfo having the given name, but without any forms.
          +
          +
          Parameters:
          +
          name - The unique name associated with the protocol.
          +
          +
        • +
        + + + +
          +
        • +

          ProtocolInfo

          +
          public ProtocolInfo​(String name,
          +                    Collection<Form> forms)
          +
          Creates a new ProtocolInfo having the given name and forms. The given + forms are used to describe the parameters for both connections and + sharing profiles.
          +
          +
          Parameters:
          +
          name - The unique name associated with the protocol.
          +
          forms - A collection of forms describing all known parameters for this + protocol, regardless of whether it is used in the context of a + connection or a sharing profile.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getName

          +
          public String getName()
          +
          Returns the unique name of this protocol. The protocol name is the + value required by the corresponding protocol plugin for guacd.
          +
          +
          Returns:
          +
          The unique name of this protocol.
          +
          +
        • +
        + + + +
          +
        • +

          setName

          +
          public void setName​(String name)
          +
          Sets the unique name of this protocol. The protocol name is the value + required by the corresponding protocol plugin for guacd.
          +
          +
          Parameters:
          +
          name - The unique name of this protocol.
          +
          +
        • +
        + + + +
          +
        • +

          getConnectionForms

          +
          public Collection<Form> getConnectionForms()
          +
          Returns a mutable collection of forms describing all known parameters for + a connection using this protocol. Changes to this collection affect the + forms exposed to the user.
          +
          +
          Returns:
          +
          A mutable collection of forms describing all known parameters for a + connection using this protocol.
          +
          +
        • +
        + + + +
          +
        • +

          setConnectionForms

          +
          public void setConnectionForms​(Collection<Form> connectionForms)
          +
          Sets the collection of forms describing all known parameters for a + connection using this protocol. The provided collection must be mutable.
          +
          +
          Parameters:
          +
          connectionForms - A mutable collection of forms describing all known parameters for a + connection using this protocol.
          +
          +
        • +
        + + + +
          +
        • +

          getSharingProfileForms

          +
          public Collection<Form> getSharingProfileForms()
          +
          Returns a mutable collection of forms describing all known parameters + relevant to a sharing profile whose primary connection uses this + protocol. Changes to this collection affect the forms exposed to the + user.
          +
          +
          Returns:
          +
          A mutable collection of forms describing all known parameters + relevant to a sharing profile whose primary connection uses this + protocol.
          +
          +
        • +
        + + + +
          +
        • +

          setSharingProfileForms

          +
          public void setSharingProfileForms​(Collection<Form> sharingProfileForms)
          +
          Sets the collection of forms describing all known parameters relevant to + a sharing profile whose primary connection uses this protocol. The + provided collection must be mutable.
          +
          +
          Parameters:
          +
          sharingProfileForms - A mutable collection of forms describing all known parameters + relevant to a sharing profile whose primary connection uses this + protocol.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/protocols/class-use/ProtocolInfo.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/protocols/class-use/ProtocolInfo.html new file mode 100644 index 000000000..9e5dc3093 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/protocols/class-use/ProtocolInfo.html @@ -0,0 +1,234 @@ + + + + + +Uses of Class org.apache.guacamole.protocols.ProtocolInfo (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.protocols.ProtocolInfo

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/protocols/package-summary.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/protocols/package-summary.html new file mode 100644 index 000000000..d8d12114b --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/protocols/package-summary.html @@ -0,0 +1,171 @@ + + + + + +org.apache.guacamole.protocols (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Package org.apache.guacamole.protocols

    +
    +
    +
      +
    • + + + + + + + + + + + + +
      Class Summary 
      ClassDescription
      ProtocolInfo +
      Describes a protocol and all parameters associated with it, as required by + a protocol plugin for guacd.
      +
      +
    • +
    +
    +
    +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/protocols/package-tree.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/protocols/package-tree.html new file mode 100644 index 000000000..dbdef41b7 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/protocols/package-tree.html @@ -0,0 +1,165 @@ + + + + + +org.apache.guacamole.protocols Class Hierarchy (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Hierarchy For Package org.apache.guacamole.protocols

    +Package Hierarchies: + +
    +
    +
    +

    Class Hierarchy

    + +
    +
    +
    +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/protocols/package-use.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/protocols/package-use.html new file mode 100644 index 000000000..7dd1c54ca --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/protocols/package-use.html @@ -0,0 +1,188 @@ + + + + + +Uses of Package org.apache.guacamole.protocols (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Package
    org.apache.guacamole.protocols

    +
    +
    + +
    +
    +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/token/GuacamoleTokenUndefinedException.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/token/GuacamoleTokenUndefinedException.html new file mode 100644 index 000000000..6c892356d --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/token/GuacamoleTokenUndefinedException.html @@ -0,0 +1,434 @@ + + + + + +GuacamoleTokenUndefinedException (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class GuacamoleTokenUndefinedException

    +
    +
    + +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      Serializable
      +
      +
      +
      public class GuacamoleTokenUndefinedException
      +extends org.apache.guacamole.GuacamoleServerException
      +
      An exception thrown when a token cannot be substituted because it has no + corresponding value. Additional information describing the undefined token + is provided.
      +
      +
      See Also:
      +
      Serialized Form
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          GuacamoleTokenUndefinedException

          +
          public GuacamoleTokenUndefinedException​(String message,
          +                                        Throwable cause,
          +                                        String tokenName)
          +
          Creates a new GuacamoleTokenUndefinedException with the given message, + cause, and associated undefined token name.
          +
          +
          Parameters:
          +
          message - A human readable description of the exception that occurred.
          +
          cause - The cause of this exception.
          +
          tokenName - The name of the token which has no defined value.
          +
          +
        • +
        + + + +
          +
        • +

          GuacamoleTokenUndefinedException

          +
          public GuacamoleTokenUndefinedException​(String message,
          +                                        String tokenName)
          +
          Creates a new GuacamoleTokenUndefinedException with the given + message and associated undefined token name.
          +
          +
          Parameters:
          +
          message - A human readable description of the exception that occurred.
          +
          tokenName - The name of the token which has no defined value.
          +
          +
        • +
        + + + +
          +
        • +

          GuacamoleTokenUndefinedException

          +
          public GuacamoleTokenUndefinedException​(Throwable cause,
          +                                        String tokenName)
          +
          Creates a new GuacamoleTokenUndefinedException with the given cause + and associated undefined token name.
          +
          +
          Parameters:
          +
          cause - The cause of this exception.
          +
          tokenName - The name of the token which has no defined value.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getTokenName

          +
          public String getTokenName()
          +
          Returns the name of the token which has no defined value, causing this + exception to be thrown.
          +
          +
          Returns:
          +
          The name of the token which has no defined value.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/token/StandardTokens.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/token/StandardTokens.html new file mode 100644 index 000000000..5fc39e57e --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/token/StandardTokens.html @@ -0,0 +1,527 @@ + + + + + +StandardTokens (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class StandardTokens

    +
    +
    + +
    +
      +
    • +
      +
      @Deprecated
      +public class StandardTokens
      +extends Object
      +
      Deprecated. +
      Standard tokens are now supplied by default to the connect() + functions of connections and connection groups. Manually generating the + standard tokens is not necessary.
      +
      +
      Utility class which provides access to standardized token names, as well as + facilities for generating those tokens from common objects.
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Summary

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Fields 
        Modifier and TypeFieldDescription
        static StringCLIENT_ADDRESS_TOKEN +
        Deprecated.
        +
        The name of the client address token added via addStandardTokens().
        +
        static StringCLIENT_HOSTNAME_TOKEN +
        Deprecated.
        +
        The name of the client hostname token added via addStandardTokens().
        +
        static StringDATE_TOKEN +
        Deprecated.
        +
        The name of the date token (server-local time) added via + addStandardTokens().
        +
        static StringPASSWORD_TOKEN +
        Deprecated.
        +
        The name of the password token added via addStandardTokens().
        +
        static StringTIME_TOKEN +
        Deprecated.
        +
        The name of the time token (server-local time) added via + addStandardTokens().
        +
        static StringUSERNAME_TOKEN +
        Deprecated.
        +
        The name of the username token added via addStandardTokens().
        +
        +
      • +
      +
      + +
      + +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          USERNAME_TOKEN

          +
          public static final String USERNAME_TOKEN
          +
          Deprecated.
          +
          The name of the username token added via addStandardTokens().
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          PASSWORD_TOKEN

          +
          public static final String PASSWORD_TOKEN
          +
          Deprecated.
          +
          The name of the password token added via addStandardTokens().
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          CLIENT_HOSTNAME_TOKEN

          +
          public static final String CLIENT_HOSTNAME_TOKEN
          +
          Deprecated.
          +
          The name of the client hostname token added via addStandardTokens().
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          CLIENT_ADDRESS_TOKEN

          +
          public static final String CLIENT_ADDRESS_TOKEN
          +
          Deprecated.
          +
          The name of the client address token added via addStandardTokens().
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          DATE_TOKEN

          +
          public static final String DATE_TOKEN
          +
          Deprecated.
          +
          The name of the date token (server-local time) added via + addStandardTokens().
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          TIME_TOKEN

          +
          public static final String TIME_TOKEN
          +
          Deprecated.
          +
          The name of the time token (server-local time) added via + addStandardTokens().
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          addStandardTokens

          +
          public static void addStandardTokens​(TokenFilter filter)
          +
          Deprecated.
          +
          Adds tokens which are standardized by guacamole-ext to the given + TokenFilter and which do not require a corresponding Credentials object. + These the server date and time (GUAC_DATE and GUAC_TIME respectively).
          +
          +
          Parameters:
          +
          filter - The TokenFilter to add standard tokens to.
          +
          +
        • +
        + + + +
          +
        • +

          addStandardTokens

          +
          public static void addStandardTokens​(TokenFilter filter,
          +                                     Credentials credentials)
          +
          Deprecated.
          +
          Adds tokens which are standardized by guacamole-ext to the given + TokenFilter using the values from the given Credentials object. These + standardized tokens include the current username (GUAC_USERNAME), + password (GUAC_PASSWORD), and the server date and time (GUAC_DATE and + GUAC_TIME respectively). If either the username or password are not set + within the given credentials, the corresponding token(s) will remain + unset.
          +
          +
          Parameters:
          +
          filter - The TokenFilter to add standard tokens to.
          +
          credentials - The Credentials to use when populating the GUAC_USERNAME and + GUAC_PASSWORD tokens.
          +
          +
        • +
        + + + +
          +
        • +

          addStandardTokens

          +
          public static void addStandardTokens​(TokenFilter filter,
          +                                     AuthenticatedUser user)
          +
          Deprecated.
          +
          Adds tokens which are standardized by guacamole-ext to the given + TokenFilter using the values from the given AuthenticatedUser object, + including any associated credentials. These standardized tokens include + the current username (GUAC_USERNAME), password (GUAC_PASSWORD), and the + server date and time (GUAC_DATE and GUAC_TIME respectively). If either + the username or password are not set within the given user or their + provided credentials, the corresponding token(s) will remain unset.
          +
          +
          Parameters:
          +
          filter - The TokenFilter to add standard tokens to.
          +
          user - The AuthenticatedUser to use when populating the GUAC_USERNAME and + GUAC_PASSWORD tokens.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/token/TokenFilter.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/token/TokenFilter.html new file mode 100644 index 000000000..9c9267beb --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/token/TokenFilter.html @@ -0,0 +1,560 @@ + + + + + +TokenFilter (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class TokenFilter

    +
    +
    + +
    +
      +
    • +
      +
      public class TokenFilter
      +extends Object
      +
      Filtering object which replaces tokens of the form "${TOKEN_NAME}" with + their corresponding values. Unknown tokens are not replaced. If TOKEN_NAME + is a valid token, the literal value "${TOKEN_NAME}" can be included by using + "$${TOKEN_NAME}".
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Summary

        + + + + + + + + + + + + + + +
        Constructors 
        ConstructorDescription
        TokenFilter() +
        Creates a new TokenFilter which has no associated tokens.
        +
        TokenFilter​(Map<String,​String> tokenValues) +
        Creates a new TokenFilter which is initialized with the given token + name/value pairs.
        +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethodDescription
        Stringfilter​(String input) +
        Filters the given string, replacing any tokens with their corresponding + values.
        +
        StringfilterStrict​(String input) +
        Filters the given string, replacing any tokens with their corresponding + values.
        +
        voidfilterValues​(Map<?,​String> map) +
        Given an arbitrary map containing String values, replace each non-null + value with the corresponding filtered value.
        +
        voidfilterValuesStrict​(Map<?,​String> map) +
        Given an arbitrary map containing String values, replace each non-null + value with the corresponding filtered value.
        +
        StringgetToken​(String name) +
        Returns the value of the token with the given name, or null if no such + token has been set.
        +
        Map<String,​String>getTokens() +
        Returns a map of all tokens, with each key being a token name, and each + value being the corresponding token value.
        +
        voidsetToken​(String name, + String value) +
        Sets the token having the given name to the given value.
        +
        voidsetTokens​(Map<String,​String> tokens) +
        Replaces all current token values with the contents of the given map, + where each map key represents a token name, and each map value + represents a token value.
        +
        voidunsetToken​(String name) +
        Removes the value of the token with the given name.
        +
        + +
      • +
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + + + + + +
          +
        • +

          TokenFilter

          +
          public TokenFilter​(Map<String,​String> tokenValues)
          +
          Creates a new TokenFilter which is initialized with the given token + name/value pairs.
          +
          +
          Parameters:
          +
          tokenValues - A map containing token names and their corresponding values.
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          setToken

          +
          public void setToken​(String name,
          +                     String value)
          +
          Sets the token having the given name to the given value. Any existing + value for that token is replaced.
          +
          +
          Parameters:
          +
          name - The name of the token to set.
          +
          value - The value to set the token to.
          +
          +
        • +
        + + + +
          +
        • +

          getToken

          +
          public String getToken​(String name)
          +
          Returns the value of the token with the given name, or null if no such + token has been set.
          +
          +
          Parameters:
          +
          name - The name of the token to return.
          +
          Returns:
          +
          The value of the token with the given name, or null if no such + token exists.
          +
          +
        • +
        + + + +
          +
        • +

          unsetToken

          +
          public void unsetToken​(String name)
          +
          Removes the value of the token with the given name. If no such token + exists, this function has no effect.
          +
          +
          Parameters:
          +
          name - The name of the token whose value should be removed.
          +
          +
        • +
        + + + +
          +
        • +

          getTokens

          +
          public Map<String,​String> getTokens()
          +
          Returns a map of all tokens, with each key being a token name, and each + value being the corresponding token value. Changes to this map will + directly affect the tokens associated with this filter.
          +
          +
          Returns:
          +
          A map of all token names and their corresponding values.
          +
          +
        • +
        + + + +
          +
        • +

          setTokens

          +
          public void setTokens​(Map<String,​String> tokens)
          +
          Replaces all current token values with the contents of the given map, + where each map key represents a token name, and each map value + represents a token value.
          +
          +
          Parameters:
          +
          tokens - A map containing the token names and corresponding values to + assign.
          +
          +
        • +
        + + + +
          +
        • +

          filter

          +
          public String filter​(String input)
          +
          Filters the given string, replacing any tokens with their corresponding + values. Any tokens present in the given string which lack values will + be interpreted as literals.
          +
          +
          Parameters:
          +
          input - The string to filter.
          +
          Returns:
          +
          A copy of the input string, with any tokens replaced with their + corresponding values.
          +
          +
        • +
        + + + +
          +
        • +

          filterStrict

          +
          public String filterStrict​(String input)
          +                    throws GuacamoleTokenUndefinedException
          +
          Filters the given string, replacing any tokens with their corresponding + values. If any token in the given string has no defined value within + this TokenFilter, a GuacamoleTokenUndefinedException will be thrown.
          +
          +
          Parameters:
          +
          input - The string to filter.
          +
          Returns:
          +
          A copy of the input string, with any tokens replaced with their + corresponding values.
          +
          Throws:
          +
          GuacamoleTokenUndefinedException - If at least one token in the given string has no corresponding + value.
          +
          +
        • +
        + + + +
          +
        • +

          filterValues

          +
          public void filterValues​(Map<?,​String> map)
          +
          Given an arbitrary map containing String values, replace each non-null + value with the corresponding filtered value. Any tokens present in the + values of the given map which lack defined values within this + TokenFilter will be interpreted as literals.
          +
          +
          Parameters:
          +
          map - The map whose values should be filtered.
          +
          +
        • +
        + + + +
          +
        • +

          filterValuesStrict

          +
          public void filterValuesStrict​(Map<?,​String> map)
          +                        throws GuacamoleTokenUndefinedException
          +
          Given an arbitrary map containing String values, replace each non-null + value with the corresponding filtered value. If any token in any string + has no defined value within this TokenFilter, a + GuacamoleTokenUndefinedException will be thrown.
          +
          +
          Parameters:
          +
          map - The map whose values should be filtered.
          +
          Throws:
          +
          GuacamoleTokenUndefinedException - If at least one token in at least one string has no corresponding + value.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/token/TokenName.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/token/TokenName.html new file mode 100644 index 000000000..f39dcaf45 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/token/TokenName.html @@ -0,0 +1,318 @@ + + + + + +TokenName (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class TokenName

    +
    +
    + +
    +
      +
    • +
      +
      public class TokenName
      +extends Object
      +
      Utility class for generating parameter token names.
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          canonicalize

          +
          public static String canonicalize​(String name,
          +                                  String prefix)
          +
          Generates the name of the parameter token that should be populated with + the given string. The provided string will be automatically transformed + from "CamelCase", "headlessCamelCase", "lowercase_with_underscores", + and "mixes_ofBoth_Styles" to consistent "UPPERCASE_WITH_UNDERSCORES". + Each returned token name will be prefixed with the string value provided + in the prefix. The value provided in prefix will be prepended to the + string, but will itself not be transformed.
          +
          +
          Parameters:
          +
          name - The string to be used to generate the token name.
          +
          prefix - The prefix to prepend to the generated token name.
          +
          Returns:
          +
          The name of the parameter token that should be populated with the + given string.
          +
          +
        • +
        + + + +
          +
        • +

          canonicalize

          +
          public static String canonicalize​(String name)
          +
          Generate the name of a parameter token from the given string, with no + added prefix, such that the token name will simply be the transformed + version of the string. See + canonicalize(java.lang.String, java.lang.String)
          +
          +
          Parameters:
          +
          name - The string to use to generate the token name.
          +
          Returns:
          +
          The name of the parameter token that should be populated with the + given string.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/token/class-use/GuacamoleTokenUndefinedException.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/token/class-use/GuacamoleTokenUndefinedException.html new file mode 100644 index 000000000..023eb2d80 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/token/class-use/GuacamoleTokenUndefinedException.html @@ -0,0 +1,205 @@ + + + + + +Uses of Class org.apache.guacamole.token.GuacamoleTokenUndefinedException (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.token.GuacamoleTokenUndefinedException

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/token/class-use/StandardTokens.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/token/class-use/StandardTokens.html new file mode 100644 index 000000000..1da4cd89d --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/token/class-use/StandardTokens.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.token.StandardTokens (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.token.StandardTokens

    +
    +
    No usage of org.apache.guacamole.token.StandardTokens
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/token/class-use/TokenFilter.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/token/class-use/TokenFilter.html new file mode 100644 index 000000000..ff1be354d --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/token/class-use/TokenFilter.html @@ -0,0 +1,219 @@ + + + + + +Uses of Class org.apache.guacamole.token.TokenFilter (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.token.TokenFilter

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/token/class-use/TokenName.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/token/class-use/TokenName.html new file mode 100644 index 000000000..606744f63 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/token/class-use/TokenName.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.token.TokenName (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.token.TokenName

    +
    +
    No usage of org.apache.guacamole.token.TokenName
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/token/package-summary.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/token/package-summary.html new file mode 100644 index 000000000..467742b00 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/token/package-summary.html @@ -0,0 +1,202 @@ + + + + + +org.apache.guacamole.token (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Package org.apache.guacamole.token

    +
    +
    +
      +
    • + + + + + + + + + + + + + + + + + + + + +
      Class Summary 
      ClassDescription
      StandardTokensDeprecated. +
      Standard tokens are now supplied by default to the connect() + functions of connections and connection groups.
      +
      TokenFilter +
      Filtering object which replaces tokens of the form "${TOKEN_NAME}" with + their corresponding values.
      +
      TokenName +
      Utility class for generating parameter token names.
      +
      +
    • +
    • + + + + + + + + + + + + +
      Exception Summary 
      ExceptionDescription
      GuacamoleTokenUndefinedException +
      An exception thrown when a token cannot be substituted because it has no + corresponding value.
      +
      +
    • +
    +
    +
    +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/token/package-tree.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/token/package-tree.html new file mode 100644 index 000000000..223e8a609 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/token/package-tree.html @@ -0,0 +1,184 @@ + + + + + +org.apache.guacamole.token Class Hierarchy (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Hierarchy For Package org.apache.guacamole.token

    +Package Hierarchies: + +
    +
    +
    +

    Class Hierarchy

    + +
    +
    +
    +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/token/package-use.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/token/package-use.html new file mode 100644 index 000000000..ec2ef1721 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/token/package-use.html @@ -0,0 +1,195 @@ + + + + + +Uses of Package org.apache.guacamole.token (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Package
    org.apache.guacamole.token

    +
    +
    + +
    +
    +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/xml/DocumentHandler.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/xml/DocumentHandler.html new file mode 100644 index 000000000..3f7031283 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/xml/DocumentHandler.html @@ -0,0 +1,409 @@ + + + + + +DocumentHandler (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class DocumentHandler

    +
    +
    + +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      ContentHandler, DTDHandler, EntityResolver, ErrorHandler
      +
      +
      +
      public class DocumentHandler
      +extends DefaultHandler
      +
      A simple ContentHandler implementation which digests SAX document events and + produces simpler tag-level events, maintaining its own stack for the + convenience of the tag handlers.
      +
    • +
    +
    +
    + +
    +
    + +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/xml/TagHandler.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/xml/TagHandler.html new file mode 100644 index 000000000..9b736e292 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/xml/TagHandler.html @@ -0,0 +1,324 @@ + + + + + +TagHandler (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface TagHandler

    +
    +
    +
    +
      +
    • +
      +
      public interface TagHandler
      +
      A simple element-level event handler for events triggered by the + SAX-driven DocumentHandler parser.
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + + + + + + + + + +
        All Methods Instance Methods Abstract Methods 
        Modifier and TypeMethodDescription
        TagHandlerchildElement​(String localName) +
        Called when a child element of the current element is parsed.
        +
        voidcomplete​(String textContent) +
        Called when this element, and all child elements, have been fully parsed, + and the entire text content of this element (if any) is available.
        +
        voidinit​(Attributes attributes) +
        Called when the element corresponding to this TagHandler is first seen, + just after an instance is created.
        +
        +
      • +
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          childElement

          +
          TagHandler childElement​(String localName)
          +                 throws SAXException
          +
          Called when a child element of the current element is parsed.
          +
          +
          Parameters:
          +
          localName - The local name of the child element seen.
          +
          Returns:
          +
          The TagHandler which should handle all element-level events + related to the child element.
          +
          Throws:
          +
          SAXException - If the child element being parsed was not expected, + or some other error prevents a proper TagHandler + from being constructed for the child element.
          +
          +
        • +
        + + + +
          +
        • +

          init

          +
          void init​(Attributes attributes)
          +   throws SAXException
          +
          Called when the element corresponding to this TagHandler is first seen, + just after an instance is created.
          +
          +
          Parameters:
          +
          attributes - The attributes of the element seen.
          +
          Throws:
          +
          SAXException - If an error prevents a the TagHandler from being + from being initialized.
          +
          +
        • +
        + + + +
          +
        • +

          complete

          +
          void complete​(String textContent)
          +       throws SAXException
          +
          Called when this element, and all child elements, have been fully parsed, + and the entire text content of this element (if any) is available.
          +
          +
          Parameters:
          +
          textContent - The full text content of this element, if any.
          +
          Throws:
          +
          SAXException - If the text content received is not valid for any + reason, or the child elements parsed are not + correct.
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/xml/class-use/DocumentHandler.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/xml/class-use/DocumentHandler.html new file mode 100644 index 000000000..81edca320 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/xml/class-use/DocumentHandler.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class org.apache.guacamole.xml.DocumentHandler (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    org.apache.guacamole.xml.DocumentHandler

    +
    +
    No usage of org.apache.guacamole.xml.DocumentHandler
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/xml/class-use/TagHandler.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/xml/class-use/TagHandler.html new file mode 100644 index 000000000..45bf172bd --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/xml/class-use/TagHandler.html @@ -0,0 +1,216 @@ + + + + + +Uses of Interface org.apache.guacamole.xml.TagHandler (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    org.apache.guacamole.xml.TagHandler

    +
    +
    + +
    +
    + + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/xml/package-summary.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/xml/package-summary.html new file mode 100644 index 000000000..2a885ca63 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/xml/package-summary.html @@ -0,0 +1,196 @@ + + + + + +org.apache.guacamole.xml (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Package org.apache.guacamole.xml

    +
    +
    +
    + + +
    Classes driving the SAX-based XML parser used by the Guacamole web + application.
    +
    +
      +
    • + + + + + + + + + + + + +
      Interface Summary 
      InterfaceDescription
      TagHandler +
      A simple element-level event handler for events triggered by the + SAX-driven DocumentHandler parser.
      +
      +
    • +
    • + + + + + + + + + + + + +
      Class Summary 
      ClassDescription
      DocumentHandler +
      A simple ContentHandler implementation which digests SAX document events and + produces simpler tag-level events, maintaining its own stack for the + convenience of the tag handlers.
      +
      +
    • +
    +
    +
    +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/xml/package-tree.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/xml/package-tree.html new file mode 100644 index 000000000..1ac242902 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/xml/package-tree.html @@ -0,0 +1,175 @@ + + + + + +org.apache.guacamole.xml Class Hierarchy (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Hierarchy For Package org.apache.guacamole.xml

    +Package Hierarchies: + +
    +
    +
    +

    Class Hierarchy

    + +
    +
    +

    Interface Hierarchy

    + +
    +
    +
    +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/org/apache/guacamole/xml/package-use.html b/doc/1.5.5/guacamole-ext/org/apache/guacamole/xml/package-use.html new file mode 100644 index 000000000..07e7e77b4 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/org/apache/guacamole/xml/package-use.html @@ -0,0 +1,191 @@ + + + + + +Uses of Package org.apache.guacamole.xml (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Package
    org.apache.guacamole.xml

    +
    +
    + +
    +
    +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/overview-summary.html b/doc/1.5.5/guacamole-ext/overview-summary.html new file mode 100644 index 000000000..ad44b5d7c --- /dev/null +++ b/doc/1.5.5/guacamole-ext/overview-summary.html @@ -0,0 +1,23 @@ + + + + + +guacamole-ext 1.5.5 API + + + + + + + +
    + +

    index.html

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/overview-tree.html b/doc/1.5.5/guacamole-ext/overview-tree.html new file mode 100644 index 000000000..4ec0ea746 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/overview-tree.html @@ -0,0 +1,565 @@ + + + + + +Class Hierarchy (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    + +
    +
    +

    Class Hierarchy

    + +
    +
    +

    Interface Hierarchy

    + +
    +
    +

    Annotation Type Hierarchy

    + +
    +
    +

    Enum Hierarchy

    + +
    +
    +
    +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/package-search-index.js b/doc/1.5.5/guacamole-ext/package-search-index.js new file mode 100644 index 000000000..43964c3d5 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/package-search-index.js @@ -0,0 +1 @@ +packageSearchIndex = [{"l":"All Packages","url":"allpackages-index.html"},{"l":"org.apache.guacamole.environment"},{"l":"org.apache.guacamole.form"},{"l":"org.apache.guacamole.language"},{"l":"org.apache.guacamole.net.auth"},{"l":"org.apache.guacamole.net.auth.credentials"},{"l":"org.apache.guacamole.net.auth.permission"},{"l":"org.apache.guacamole.net.auth.simple"},{"l":"org.apache.guacamole.net.event"},{"l":"org.apache.guacamole.net.event.listener"},{"l":"org.apache.guacamole.properties"},{"l":"org.apache.guacamole.protocols"},{"l":"org.apache.guacamole.token"},{"l":"org.apache.guacamole.xml"}] \ No newline at end of file diff --git a/doc/1.5.5/guacamole-ext/package-search-index.zip b/doc/1.5.5/guacamole-ext/package-search-index.zip new file mode 100644 index 0000000000000000000000000000000000000000..da4b374e050ebf13d4611d6adcd2ecccb0ad736f GIT binary patch literal 330 zcmWIWW@Zs#;Nak3@K{|N!GHuLf$W0BR3-ORj{)C#?<;{3ecNgKHi z8}PW)FRk$V%Xs$}`(1DLhbuZeawKnZHeRY<@9gb+<)Y5bI^&|Bw#A1-8HPDaglyVk*yk_W=V#DTLg>MV1437Zu?2e1JDA8%QZ5 L5V`~Dw_tq$)2MN? literal 0 HcmV?d00001 diff --git a/doc/1.5.5/guacamole-ext/resources/glass.png b/doc/1.5.5/guacamole-ext/resources/glass.png new file mode 100644 index 0000000000000000000000000000000000000000..a7f591f467a1c0c949bbc510156a0c1afb860a6e GIT binary patch literal 499 zcmVJoRsvExf%rEN>jUL}qZ_~k#FbE+Q;{`;0FZwVNX2n-^JoI; zP;4#$8DIy*Yk-P>VN(DUKmPse7mx+ExD4O|;?E5D0Z5($mjO3`*anwQU^s{ZDK#Lz zj>~{qyaIx5K!t%=G&2IJNzg!ChRpyLkO7}Ry!QaotAHAMpbB3AF(}|_f!G-oI|uK6 z`id_dumai5K%C3Y$;tKS_iqMPHg<*|-@e`liWLAggVM!zAP#@l;=c>S03;{#04Z~5 zN_+ss=Yg6*hTr59mzMwZ@+l~q!+?ft!fF66AXT#wWavHt30bZWFCK%!BNk}LN?0Hg z1VF_nfs`Lm^DjYZ1(1uD0u4CSIr)XAaqW6IT{!St5~1{i=i}zAy76p%_|w8rh@@c0Axr!ns=D-X+|*sY6!@wacG9%)Qn*O zl0sa739kT-&_?#oVxXF6tOnqTD)cZ}2vi$`ZU8RLAlo8=_z#*P3xI~i!lEh+Pdu-L zx{d*wgjtXbnGX_Yf@Tc7Q3YhLhPvc8noGJs2DA~1DySiA&6V{5JzFt ojAY1KXm~va;tU{v7C?Xj0BHw!K;2aXV*mgE07*qoM6N<$f;4TDA^-pY literal 0 HcmV?d00001 diff --git a/doc/1.5.5/guacamole-ext/script.js b/doc/1.5.5/guacamole-ext/script.js new file mode 100644 index 000000000..7dc93c48e --- /dev/null +++ b/doc/1.5.5/guacamole-ext/script.js @@ -0,0 +1,149 @@ +/* + * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +var moduleSearchIndex; +var packageSearchIndex; +var typeSearchIndex; +var memberSearchIndex; +var tagSearchIndex; +function loadScripts(doc, tag) { + createElem(doc, tag, 'jquery/jszip/dist/jszip.js'); + createElem(doc, tag, 'jquery/jszip-utils/dist/jszip-utils.js'); + if (window.navigator.userAgent.indexOf('MSIE ') > 0 || window.navigator.userAgent.indexOf('Trident/') > 0 || + window.navigator.userAgent.indexOf('Edge/') > 0) { + createElem(doc, tag, 'jquery/jszip-utils/dist/jszip-utils-ie.js'); + } + createElem(doc, tag, 'search.js'); + + $.get(pathtoroot + "module-search-index.zip") + .done(function() { + JSZipUtils.getBinaryContent(pathtoroot + "module-search-index.zip", function(e, data) { + JSZip.loadAsync(data).then(function(zip){ + zip.file("module-search-index.json").async("text").then(function(content){ + moduleSearchIndex = JSON.parse(content); + }); + }); + }); + }); + $.get(pathtoroot + "package-search-index.zip") + .done(function() { + JSZipUtils.getBinaryContent(pathtoroot + "package-search-index.zip", function(e, data) { + JSZip.loadAsync(data).then(function(zip){ + zip.file("package-search-index.json").async("text").then(function(content){ + packageSearchIndex = JSON.parse(content); + }); + }); + }); + }); + $.get(pathtoroot + "type-search-index.zip") + .done(function() { + JSZipUtils.getBinaryContent(pathtoroot + "type-search-index.zip", function(e, data) { + JSZip.loadAsync(data).then(function(zip){ + zip.file("type-search-index.json").async("text").then(function(content){ + typeSearchIndex = JSON.parse(content); + }); + }); + }); + }); + $.get(pathtoroot + "member-search-index.zip") + .done(function() { + JSZipUtils.getBinaryContent(pathtoroot + "member-search-index.zip", function(e, data) { + JSZip.loadAsync(data).then(function(zip){ + zip.file("member-search-index.json").async("text").then(function(content){ + memberSearchIndex = JSON.parse(content); + }); + }); + }); + }); + $.get(pathtoroot + "tag-search-index.zip") + .done(function() { + JSZipUtils.getBinaryContent(pathtoroot + "tag-search-index.zip", function(e, data) { + JSZip.loadAsync(data).then(function(zip){ + zip.file("tag-search-index.json").async("text").then(function(content){ + tagSearchIndex = JSON.parse(content); + }); + }); + }); + }); + if (!moduleSearchIndex) { + createElem(doc, tag, 'module-search-index.js'); + } + if (!packageSearchIndex) { + createElem(doc, tag, 'package-search-index.js'); + } + if (!typeSearchIndex) { + createElem(doc, tag, 'type-search-index.js'); + } + if (!memberSearchIndex) { + createElem(doc, tag, 'member-search-index.js'); + } + if (!tagSearchIndex) { + createElem(doc, tag, 'tag-search-index.js'); + } + $(window).resize(function() { + $('.navPadding').css('padding-top', $('.fixedNav').css("height")); + }); +} + +function createElem(doc, tag, path) { + var script = doc.createElement(tag); + var scriptElement = doc.getElementsByTagName(tag)[0]; + script.src = pathtoroot + path; + scriptElement.parentNode.insertBefore(script, scriptElement); +} + +function show(type) { + count = 0; + for (var key in data) { + var row = document.getElementById(key); + if ((data[key] & type) !== 0) { + row.style.display = ''; + row.className = (count++ % 2) ? rowColor : altColor; + } + else + row.style.display = 'none'; + } + updateTabs(type); +} + +function updateTabs(type) { + for (var value in tabs) { + var sNode = document.getElementById(tabs[value][0]); + var spanNode = sNode.firstChild; + if (value == type) { + sNode.className = activeTableTab; + spanNode.innerHTML = tabs[value][1]; + } + else { + sNode.className = tableTab; + spanNode.innerHTML = "" + tabs[value][1] + ""; + } + } +} + +function updateModuleFrame(pFrame, cFrame) { + top.packageFrame.location = pFrame; + top.classFrame.location = cFrame; +} diff --git a/doc/1.5.5/guacamole-ext/search.js b/doc/1.5.5/guacamole-ext/search.js new file mode 100644 index 000000000..8492271e7 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/search.js @@ -0,0 +1,326 @@ +/* + * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +var noResult = {l: "No results found"}; +var catModules = "Modules"; +var catPackages = "Packages"; +var catTypes = "Types"; +var catMembers = "Members"; +var catSearchTags = "SearchTags"; +var highlight = "$&"; +var camelCaseRegexp = ""; +var secondaryMatcher = ""; +function getHighlightedText(item) { + var ccMatcher = new RegExp(camelCaseRegexp); + var label = item.replace(ccMatcher, highlight); + if (label === item) { + label = item.replace(secondaryMatcher, highlight); + } + return label; +} +function getURLPrefix(ui) { + var urlPrefix=""; + if (useModuleDirectories) { + var slash = "/"; + if (ui.item.category === catModules) { + return ui.item.l + slash; + } else if (ui.item.category === catPackages && ui.item.m) { + return ui.item.m + slash; + } else if ((ui.item.category === catTypes && ui.item.p) || ui.item.category === catMembers) { + $.each(packageSearchIndex, function(index, item) { + if (item.m && ui.item.p == item.l) { + urlPrefix = item.m + slash; + } + }); + return urlPrefix; + } else { + return urlPrefix; + } + } + return urlPrefix; +} +var watermark = 'Search'; +$(function() { + $("#search").val(''); + $("#search").prop("disabled", false); + $("#reset").prop("disabled", false); + $("#search").val(watermark).addClass('watermark'); + $("#search").blur(function() { + if ($(this).val().length == 0) { + $(this).val(watermark).addClass('watermark'); + } + }); + $("#search").on('click keydown', function() { + if ($(this).val() == watermark) { + $(this).val('').removeClass('watermark'); + } + }); + $("#reset").click(function() { + $("#search").val(''); + $("#search").focus(); + }); + $("#search").focus(); + $("#search")[0].setSelectionRange(0, 0); +}); +$.widget("custom.catcomplete", $.ui.autocomplete, { + _create: function() { + this._super(); + this.widget().menu("option", "items", "> :not(.ui-autocomplete-category)"); + }, + _renderMenu: function(ul, items) { + var rMenu = this, + currentCategory = ""; + rMenu.menu.bindings = $(); + $.each(items, function(index, item) { + var li; + if (item.l !== noResult.l && item.category !== currentCategory) { + ul.append("
  • " + item.category + "
  • "); + currentCategory = item.category; + } + li = rMenu._renderItemData(ul, item); + if (item.category) { + li.attr("aria-label", item.category + " : " + item.l); + li.attr("class", "resultItem"); + } else { + li.attr("aria-label", item.l); + li.attr("class", "resultItem"); + } + }); + }, + _renderItem: function(ul, item) { + var label = ""; + if (item.category === catModules) { + label = getHighlightedText(item.l); + } else if (item.category === catPackages) { + label = (item.m) + ? getHighlightedText(item.m + "/" + item.l) + : getHighlightedText(item.l); + } else if (item.category === catTypes) { + label = (item.p) + ? getHighlightedText(item.p + "." + item.l) + : getHighlightedText(item.l); + } else if (item.category === catMembers) { + label = getHighlightedText(item.p + "." + (item.c + "." + item.l)); + } else if (item.category === catSearchTags) { + label = getHighlightedText(item.l); + } else { + label = item.l; + } + var li = $("
  • ").appendTo(ul); + var div = $("
    ").appendTo(li); + if (item.category === catSearchTags) { + if (item.d) { + div.html(label + " (" + item.h + ")
    " + + item.d + "
    "); + } else { + div.html(label + " (" + item.h + ")"); + } + } else { + div.html(label); + } + return li; + } +}); +$(function() { + $("#search").catcomplete({ + minLength: 1, + delay: 100, + source: function(request, response) { + var result = new Array(); + var presult = new Array(); + var tresult = new Array(); + var mresult = new Array(); + var tgresult = new Array(); + var secondaryresult = new Array(); + var displayCount = 0; + var exactMatcher = new RegExp("^" + $.ui.autocomplete.escapeRegex(request.term) + "$", "i"); + camelCaseRegexp = ($.ui.autocomplete.escapeRegex(request.term)).split(/(?=[A-Z])/).join("([a-z0-9_$]*?)"); + var camelCaseMatcher = new RegExp("^" + camelCaseRegexp); + secondaryMatcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), "i"); + + // Return the nested innermost name from the specified object + function nestedName(e) { + return e.l.substring(e.l.lastIndexOf(".") + 1); + } + + function concatResults(a1, a2) { + a1 = a1.concat(a2); + a2.length = 0; + return a1; + } + + if (moduleSearchIndex) { + var mdleCount = 0; + $.each(moduleSearchIndex, function(index, item) { + item.category = catModules; + if (exactMatcher.test(item.l)) { + result.push(item); + mdleCount++; + } else if (camelCaseMatcher.test(item.l)) { + result.push(item); + } else if (secondaryMatcher.test(item.l)) { + secondaryresult.push(item); + } + }); + displayCount = mdleCount; + result = concatResults(result, secondaryresult); + } + if (packageSearchIndex) { + var pCount = 0; + var pkg = ""; + $.each(packageSearchIndex, function(index, item) { + item.category = catPackages; + pkg = (item.m) + ? (item.m + "/" + item.l) + : item.l; + if (exactMatcher.test(item.l)) { + presult.push(item); + pCount++; + } else if (camelCaseMatcher.test(pkg)) { + presult.push(item); + } else if (secondaryMatcher.test(pkg)) { + secondaryresult.push(item); + } + }); + result = result.concat(concatResults(presult, secondaryresult)); + displayCount = (pCount > displayCount) ? pCount : displayCount; + } + if (typeSearchIndex) { + var tCount = 0; + $.each(typeSearchIndex, function(index, item) { + item.category = catTypes; + var s = nestedName(item); + if (exactMatcher.test(s)) { + tresult.push(item); + tCount++; + } else if (camelCaseMatcher.test(s)) { + tresult.push(item); + } else if (secondaryMatcher.test(item.p + "." + item.l)) { + secondaryresult.push(item); + } + }); + result = result.concat(concatResults(tresult, secondaryresult)); + displayCount = (tCount > displayCount) ? tCount : displayCount; + } + if (memberSearchIndex) { + var mCount = 0; + $.each(memberSearchIndex, function(index, item) { + item.category = catMembers; + var s = nestedName(item); + if (exactMatcher.test(s)) { + mresult.push(item); + mCount++; + } else if (camelCaseMatcher.test(s)) { + mresult.push(item); + } else if (secondaryMatcher.test(item.c + "." + item.l)) { + secondaryresult.push(item); + } + }); + result = result.concat(concatResults(mresult, secondaryresult)); + displayCount = (mCount > displayCount) ? mCount : displayCount; + } + if (tagSearchIndex) { + var tgCount = 0; + $.each(tagSearchIndex, function(index, item) { + item.category = catSearchTags; + if (exactMatcher.test(item.l)) { + tgresult.push(item); + tgCount++; + } else if (secondaryMatcher.test(item.l)) { + secondaryresult.push(item); + } + }); + result = result.concat(concatResults(tgresult, secondaryresult)); + displayCount = (tgCount > displayCount) ? tgCount : displayCount; + } + displayCount = (displayCount > 500) ? displayCount : 500; + var counter = function() { + var count = {Modules: 0, Packages: 0, Types: 0, Members: 0, SearchTags: 0}; + var f = function(item) { + count[item.category] += 1; + return (count[item.category] <= displayCount); + }; + return f; + }(); + response(result.filter(counter)); + }, + response: function(event, ui) { + if (!ui.content.length) { + ui.content.push(noResult); + } else { + $("#search").empty(); + } + }, + autoFocus: true, + position: { + collision: "flip" + }, + select: function(event, ui) { + if (ui.item.l !== noResult.l) { + var url = getURLPrefix(ui); + if (ui.item.category === catModules) { + if (useModuleDirectories) { + url += "module-summary.html"; + } else { + url = ui.item.l + "-summary.html"; + } + } else if (ui.item.category === catPackages) { + if (ui.item.url) { + url = ui.item.url; + } else { + url += ui.item.l.replace(/\./g, '/') + "/package-summary.html"; + } + } else if (ui.item.category === catTypes) { + if (ui.item.url) { + url = ui.item.url; + } else if (ui.item.p === "") { + url += ui.item.l + ".html"; + } else { + url += ui.item.p.replace(/\./g, '/') + "/" + ui.item.l + ".html"; + } + } else if (ui.item.category === catMembers) { + if (ui.item.p === "") { + url += ui.item.c + ".html" + "#"; + } else { + url += ui.item.p.replace(/\./g, '/') + "/" + ui.item.c + ".html" + "#"; + } + if (ui.item.url) { + url += ui.item.url; + } else { + url += ui.item.l; + } + } else if (ui.item.category === catSearchTags) { + url += ui.item.u; + } + if (top !== window) { + parent.classFrame.location = pathtoroot + url; + } else { + window.location.href = pathtoroot + url; + } + $("#search").focus(); + } + } + }); +}); diff --git a/doc/1.5.5/guacamole-ext/serialized-form.html b/doc/1.5.5/guacamole-ext/serialized-form.html new file mode 100644 index 000000000..3940046c1 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/serialized-form.html @@ -0,0 +1,696 @@ + + + + + +Serialized Form (guacamole-ext 1.5.5 API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Serialized Form

    +
    +
    + +
    +
    +
    + +

    Copyright © 2024. All rights reserved.

    +
    + + diff --git a/doc/1.5.5/guacamole-ext/stylesheet.css b/doc/1.5.5/guacamole-ext/stylesheet.css new file mode 100644 index 000000000..de945eda2 --- /dev/null +++ b/doc/1.5.5/guacamole-ext/stylesheet.css @@ -0,0 +1,910 @@ +/* + * Javadoc style sheet + */ + +@import url('resources/fonts/dejavu.css'); + +/* + * Styles for individual HTML elements. + * + * These are styles that are specific to individual HTML elements. Changing them affects the style of a particular + * HTML element throughout the page. + */ + +body { + background-color:#ffffff; + color:#353833; + font-family:'DejaVu Sans', Arial, Helvetica, sans-serif; + font-size:14px; + margin:0; + padding:0; + height:100%; + width:100%; +} +iframe { + margin:0; + padding:0; + height:100%; + width:100%; + overflow-y:scroll; + border:none; +} +a:link, a:visited { + text-decoration:none; + color:#4A6782; +} +a[href]:hover, a[href]:focus { + text-decoration:none; + color:#bb7a2a; +} +a[name] { + color:#353833; +} +a[name]:before, a[name]:target, a[id]:before, a[id]:target { + content:""; + display:inline-block; + position:relative; + padding-top:129px; + margin-top:-129px; +} +pre { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; +} +h1 { + font-size:20px; +} +h2 { + font-size:18px; +} +h3 { + font-size:16px; + font-style:italic; +} +h4 { + font-size:13px; +} +h5 { + font-size:12px; +} +h6 { + font-size:11px; +} +ul { + list-style-type:disc; +} +code, tt { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + padding-top:4px; + margin-top:8px; + line-height:1.4em; +} +dt code { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + padding-top:4px; +} +table tr td dt code { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + vertical-align:top; + padding-top:4px; +} +sup { + font-size:8px; +} + +/* + * Styles for HTML generated by javadoc. + * + * These are style classes that are used by the standard doclet to generate HTML documentation. + */ + +/* + * Styles for document title and copyright. + */ +.clear { + clear:both; + height:0px; + overflow:hidden; +} +.aboutLanguage { + float:right; + padding:0px 21px; + font-size:11px; + z-index:200; + margin-top:-9px; +} +.legalCopy { + margin-left:.5em; +} +.bar a, .bar a:link, .bar a:visited, .bar a:active { + color:#FFFFFF; + text-decoration:none; +} +.bar a:hover, .bar a:focus { + color:#bb7a2a; +} +.tab { + background-color:#0066FF; + color:#ffffff; + padding:8px; + width:5em; + font-weight:bold; +} +/* + * Styles for navigation bar. + */ +.bar { + background-color:#4D7A97; + color:#FFFFFF; + padding:.8em .5em .4em .8em; + height:auto;/*height:1.8em;*/ + font-size:11px; + margin:0; +} +.navPadding { + padding-top: 107px; +} +.fixedNav { + position:fixed; + width:100%; + z-index:999; + background-color:#ffffff; +} +.topNav { + background-color:#4D7A97; + color:#FFFFFF; + float:left; + padding:0; + width:100%; + clear:right; + height:2.8em; + padding-top:10px; + overflow:hidden; + font-size:12px; +} +.bottomNav { + margin-top:10px; + background-color:#4D7A97; + color:#FFFFFF; + float:left; + padding:0; + width:100%; + clear:right; + height:2.8em; + padding-top:10px; + overflow:hidden; + font-size:12px; +} +.subNav { + background-color:#dee3e9; + float:left; + width:100%; + overflow:hidden; + font-size:12px; +} +.subNav div { + clear:left; + float:left; + padding:0 0 5px 6px; + text-transform:uppercase; +} +ul.navList, ul.subNavList { + float:left; + margin:0 25px 0 0; + padding:0; +} +ul.navList li{ + list-style:none; + float:left; + padding: 5px 6px; + text-transform:uppercase; +} +ul.navListSearch { + float:right; + margin:0 0 0 0; + padding:0; +} +ul.navListSearch li { + list-style:none; + float:right; + padding: 5px 6px; + text-transform:uppercase; +} +ul.navListSearch li label { + position:relative; + right:-16px; +} +ul.subNavList li { + list-style:none; + float:left; +} +.topNav a:link, .topNav a:active, .topNav a:visited, .bottomNav a:link, .bottomNav a:active, .bottomNav a:visited { + color:#FFFFFF; + text-decoration:none; + text-transform:uppercase; +} +.topNav a:hover, .bottomNav a:hover { + text-decoration:none; + color:#bb7a2a; + text-transform:uppercase; +} +.navBarCell1Rev { + background-color:#F8981D; + color:#253441; + margin: auto 5px; +} +.skipNav { + position:absolute; + top:auto; + left:-9999px; + overflow:hidden; +} +/* + * Styles for page header and footer. + */ +.header, .footer { + clear:both; + margin:0 20px; + padding:5px 0 0 0; +} +.indexNav { + position:relative; + font-size:12px; + background-color:#dee3e9; +} +.indexNav ul { + margin-top:0; + padding:5px; +} +.indexNav ul li { + display:inline; + list-style-type:none; + padding-right:10px; + text-transform:uppercase; +} +.indexNav h1 { + font-size:13px; +} +.title { + color:#2c4557; + margin:10px 0; +} +.subTitle { + margin:5px 0 0 0; +} +.header ul { + margin:0 0 15px 0; + padding:0; +} +.footer ul { + margin:20px 0 5px 0; +} +.header ul li, .footer ul li { + list-style:none; + font-size:13px; +} +/* + * Styles for headings. + */ +div.details ul.blockList ul.blockList ul.blockList li.blockList h4, div.details ul.blockList ul.blockList ul.blockListLast li.blockList h4 { + background-color:#dee3e9; + border:1px solid #d0d9e0; + margin:0 0 6px -8px; + padding:7px 5px; +} +ul.blockList ul.blockList ul.blockList li.blockList h3 { + background-color:#dee3e9; + border:1px solid #d0d9e0; + margin:0 0 6px -8px; + padding:7px 5px; +} +ul.blockList ul.blockList li.blockList h3 { + padding:0; + margin:15px 0; +} +ul.blockList li.blockList h2 { + padding:0px 0 20px 0; +} +/* + * Styles for page layout containers. + */ +.contentContainer, .sourceContainer, .classUseContainer, .serializedFormContainer, .constantValuesContainer, +.allClassesContainer, .allPackagesContainer { + clear:both; + padding:10px 20px; + position:relative; +} +.indexContainer { + margin:10px; + position:relative; + font-size:12px; +} +.indexContainer h2 { + font-size:13px; + padding:0 0 3px 0; +} +.indexContainer ul { + margin:0; + padding:0; +} +.indexContainer ul li { + list-style:none; + padding-top:2px; +} +.contentContainer .description dl dt, .contentContainer .details dl dt, .serializedFormContainer dl dt { + font-size:12px; + font-weight:bold; + margin:10px 0 0 0; + color:#4E4E4E; +} +.contentContainer .description dl dd, .contentContainer .details dl dd, .serializedFormContainer dl dd { + margin:5px 0 10px 0px; + font-size:14px; + font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; +} +.serializedFormContainer dl.nameValue dt { + margin-left:1px; + font-size:1.1em; + display:inline; + font-weight:bold; +} +.serializedFormContainer dl.nameValue dd { + margin:0 0 0 1px; + font-size:1.1em; + display:inline; +} +/* + * Styles for lists. + */ +li.circle { + list-style:circle; +} +ul.horizontal li { + display:inline; + font-size:0.9em; +} +ul.inheritance { + margin:0; + padding:0; +} +ul.inheritance li { + display:inline; + list-style:none; +} +ul.inheritance li ul.inheritance { + margin-left:15px; + padding-left:15px; + padding-top:1px; +} +ul.blockList, ul.blockListLast { + margin:10px 0 10px 0; + padding:0; +} +ul.blockList li.blockList, ul.blockListLast li.blockList { + list-style:none; + margin-bottom:15px; + line-height:1.4; +} +ul.blockList ul.blockList li.blockList, ul.blockList ul.blockListLast li.blockList { + padding:0px 20px 5px 10px; + border:1px solid #ededed; + background-color:#f8f8f8; +} +ul.blockList ul.blockList ul.blockList li.blockList, ul.blockList ul.blockList ul.blockListLast li.blockList { + padding:0 0 5px 8px; + background-color:#ffffff; + border:none; +} +ul.blockList ul.blockList ul.blockList ul.blockList li.blockList { + margin-left:0; + padding-left:0; + padding-bottom:15px; + border:none; +} +ul.blockList ul.blockList ul.blockList ul.blockList li.blockListLast { + list-style:none; + border-bottom:none; + padding-bottom:0; +} +table tr td dl, table tr td dl dt, table tr td dl dd { + margin-top:0; + margin-bottom:1px; +} +/* + * Styles for tables. + */ +.overviewSummary, .memberSummary, .typeSummary, .useSummary, .constantsSummary, .deprecatedSummary, +.requiresSummary, .packagesSummary, .providesSummary, .usesSummary { + width:100%; + border-spacing:0; + border-left:1px solid #EEE; + border-right:1px solid #EEE; + border-bottom:1px solid #EEE; +} +.overviewSummary, .memberSummary, .requiresSummary, .packagesSummary, .providesSummary, .usesSummary { + padding:0px; +} +.overviewSummary caption, .memberSummary caption, .typeSummary caption, +.useSummary caption, .constantsSummary caption, .deprecatedSummary caption, +.requiresSummary caption, .packagesSummary caption, .providesSummary caption, .usesSummary caption { + position:relative; + text-align:left; + background-repeat:no-repeat; + color:#253441; + font-weight:bold; + clear:none; + overflow:hidden; + padding:0px; + padding-top:10px; + padding-left:1px; + margin:0px; + white-space:pre; +} +.constantsSummary caption a:link, .constantsSummary caption a:visited, +.useSummary caption a:link, .useSummary caption a:visited { + color:#1f389c; +} +.overviewSummary caption a:link, .memberSummary caption a:link, .typeSummary caption a:link, +.deprecatedSummary caption a:link, +.requiresSummary caption a:link, .packagesSummary caption a:link, .providesSummary caption a:link, +.usesSummary caption a:link, +.overviewSummary caption a:hover, .memberSummary caption a:hover, .typeSummary caption a:hover, +.useSummary caption a:hover, .constantsSummary caption a:hover, .deprecatedSummary caption a:hover, +.requiresSummary caption a:hover, .packagesSummary caption a:hover, .providesSummary caption a:hover, +.usesSummary caption a:hover, +.overviewSummary caption a:active, .memberSummary caption a:active, .typeSummary caption a:active, +.useSummary caption a:active, .constantsSummary caption a:active, .deprecatedSummary caption a:active, +.requiresSummary caption a:active, .packagesSummary caption a:active, .providesSummary caption a:active, +.usesSummary caption a:active, +.overviewSummary caption a:visited, .memberSummary caption a:visited, .typeSummary caption a:visited, +.deprecatedSummary caption a:visited, +.requiresSummary caption a:visited, .packagesSummary caption a:visited, .providesSummary caption a:visited, +.usesSummary caption a:visited { + color:#FFFFFF; +} +.overviewSummary caption span, .memberSummary caption span, .typeSummary caption span, +.useSummary caption span, .constantsSummary caption span, .deprecatedSummary caption span, +.requiresSummary caption span, .packagesSummary caption span, .providesSummary caption span, +.usesSummary caption span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + padding-bottom:7px; + display:inline-block; + float:left; + background-color:#F8981D; + border: none; + height:16px; +} +.memberSummary caption span.activeTableTab span, .packagesSummary caption span.activeTableTab span, +.overviewSummary caption span.activeTableTab span, .typeSummary caption span.activeTableTab span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + margin-right:3px; + display:inline-block; + float:left; + background-color:#F8981D; + height:16px; +} +.memberSummary caption span.tableTab span, .packagesSummary caption span.tableTab span, +.overviewSummary caption span.tableTab span, .typeSummary caption span.tableTab span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + margin-right:3px; + display:inline-block; + float:left; + background-color:#4D7A97; + height:16px; +} +.memberSummary caption span.tableTab, .memberSummary caption span.activeTableTab, +.packagesSummary caption span.tableTab, .packagesSummary caption span.activeTableTab, +.overviewSummary caption span.tableTab, .overviewSummary caption span.activeTableTab, +.typeSummary caption span.tableTab, .typeSummary caption span.activeTableTab { + padding-top:0px; + padding-left:0px; + padding-right:0px; + background-image:none; + float:none; + display:inline; +} +.overviewSummary .tabEnd, .memberSummary .tabEnd, .typeSummary .tabEnd, +.useSummary .tabEnd, .constantsSummary .tabEnd, .deprecatedSummary .tabEnd, +.requiresSummary .tabEnd, .packagesSummary .tabEnd, .providesSummary .tabEnd, .usesSummary .tabEnd { + display:none; + width:5px; + position:relative; + float:left; + background-color:#F8981D; +} +.memberSummary .activeTableTab .tabEnd, .packagesSummary .activeTableTab .tabEnd, +.overviewSummary .activeTableTab .tabEnd, .typeSummary .activeTableTab .tabEnd { + display:none; + width:5px; + margin-right:3px; + position:relative; + float:left; + background-color:#F8981D; +} +.memberSummary .tableTab .tabEnd, .packagesSummary .tableTab .tabEnd, +.overviewSummary .tableTab .tabEnd, .typeSummary .tableTab .tabEnd { + display:none; + width:5px; + margin-right:3px; + position:relative; + background-color:#4D7A97; + float:left; +} +.rowColor th, .altColor th { + font-weight:normal; +} +.overviewSummary td, .memberSummary td, .typeSummary td, +.useSummary td, .constantsSummary td, .deprecatedSummary td, +.requiresSummary td, .packagesSummary td, .providesSummary td, .usesSummary td { + text-align:left; + padding:0px 0px 12px 10px; +} +th.colFirst, th.colSecond, th.colLast, th.colConstructorName, th.colDeprecatedItemName, .useSummary th, +.constantsSummary th, .packagesSummary th, td.colFirst, td.colSecond, td.colLast, .useSummary td, +.constantsSummary td { + vertical-align:top; + padding-right:0px; + padding-top:8px; + padding-bottom:3px; +} +th.colFirst, th.colSecond, th.colLast, th.colConstructorName, th.colDeprecatedItemName, .constantsSummary th, +.packagesSummary th { + background:#dee3e9; + text-align:left; + padding:8px 3px 3px 7px; +} +td.colFirst, th.colFirst { + font-size:13px; +} +td.colSecond, th.colSecond, td.colLast, th.colConstructorName, th.colDeprecatedItemName, th.colLast { + font-size:13px; +} +.constantsSummary th, .packagesSummary th { + font-size:13px; +} +.providesSummary th.colFirst, .providesSummary th.colLast, .providesSummary td.colFirst, +.providesSummary td.colLast { + white-space:normal; + font-size:13px; +} +.overviewSummary td.colFirst, .overviewSummary th.colFirst, +.requiresSummary td.colFirst, .requiresSummary th.colFirst, +.packagesSummary td.colFirst, .packagesSummary td.colSecond, .packagesSummary th.colFirst, .packagesSummary th, +.usesSummary td.colFirst, .usesSummary th.colFirst, +.providesSummary td.colFirst, .providesSummary th.colFirst, +.memberSummary td.colFirst, .memberSummary th.colFirst, +.memberSummary td.colSecond, .memberSummary th.colSecond, .memberSummary th.colConstructorName, +.typeSummary td.colFirst, .typeSummary th.colFirst { + vertical-align:top; +} +.packagesSummary th.colLast, .packagesSummary td.colLast { + white-space:normal; +} +td.colFirst a:link, td.colFirst a:visited, +td.colSecond a:link, td.colSecond a:visited, +th.colFirst a:link, th.colFirst a:visited, +th.colSecond a:link, th.colSecond a:visited, +th.colConstructorName a:link, th.colConstructorName a:visited, +th.colDeprecatedItemName a:link, th.colDeprecatedItemName a:visited, +.constantValuesContainer td a:link, .constantValuesContainer td a:visited, +.allClassesContainer td a:link, .allClassesContainer td a:visited, +.allPackagesContainer td a:link, .allPackagesContainer td a:visited { + font-weight:bold; +} +.tableSubHeadingColor { + background-color:#EEEEFF; +} +.altColor, .altColor th { + background-color:#FFFFFF; +} +.rowColor, .rowColor th { + background-color:#EEEEEF; +} +/* + * Styles for contents. + */ +.description pre { + margin-top:0; +} +.deprecatedContent { + margin:0; + padding:10px 0; +} +.docSummary { + padding:0; +} +ul.blockList ul.blockList ul.blockList li.blockList h3 { + font-style:normal; +} +div.block { + font-size:14px; + font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; +} +td.colLast div { + padding-top:0px; +} +td.colLast a { + padding-bottom:3px; +} +/* + * Styles for formatting effect. + */ +.sourceLineNo { + color:green; + padding:0 30px 0 0; +} +h1.hidden { + visibility:hidden; + overflow:hidden; + font-size:10px; +} +.block { + display:block; + margin:3px 10px 2px 0px; + color:#474747; +} +.deprecatedLabel, .descfrmTypeLabel, .implementationLabel, .memberNameLabel, .memberNameLink, +.moduleLabelInPackage, .moduleLabelInType, .overrideSpecifyLabel, .packageLabelInType, +.packageHierarchyLabel, .paramLabel, .returnLabel, .seeLabel, .simpleTagLabel, +.throwsLabel, .typeNameLabel, .typeNameLink, .searchTagLink { + font-weight:bold; +} +.deprecationComment, .emphasizedPhrase, .interfaceName { + font-style:italic; +} +.deprecationBlock { + font-size:14px; + font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; + border-style:solid; + border-width:thin; + border-radius:10px; + padding:10px; + margin-bottom:10px; + margin-right:10px; + display:inline-block; +} +div.block div.deprecationComment, div.block div.block span.emphasizedPhrase, +div.block div.block span.interfaceName { + font-style:normal; +} +div.contentContainer ul.blockList li.blockList h2 { + padding-bottom:0px; +} +/* + * Styles for IFRAME. + */ +.mainContainer { + margin:0 auto; + padding:0; + height:100%; + width:100%; + position:fixed; + top:0; + left:0; +} +.leftContainer { + height:100%; + position:fixed; + width:320px; +} +.leftTop { + position:relative; + float:left; + width:315px; + top:0; + left:0; + height:30%; + border-right:6px solid #ccc; + border-bottom:6px solid #ccc; +} +.leftBottom { + position:relative; + float:left; + width:315px; + bottom:0; + left:0; + height:70%; + border-right:6px solid #ccc; + border-top:1px solid #000; +} +.rightContainer { + position:absolute; + left:320px; + top:0; + bottom:0; + height:100%; + right:0; + border-left:1px solid #000; +} +.rightIframe { + margin:0; + padding:0; + height:100%; + right:30px; + width:100%; + overflow:visible; + margin-bottom:30px; +} +/* + * Styles specific to HTML5 elements. + */ +main, nav, header, footer, section { + display:block; +} +/* + * Styles for javadoc search. + */ +.ui-autocomplete-category { + font-weight:bold; + font-size:15px; + padding:7px 0 7px 3px; + background-color:#4D7A97; + color:#FFFFFF; +} +.resultItem { + font-size:13px; +} +.ui-autocomplete { + max-height:85%; + max-width:65%; + overflow-y:scroll; + overflow-x:scroll; + white-space:nowrap; + box-shadow: 0 3px 6px rgba(0,0,0,0.16), 0 3px 6px rgba(0,0,0,0.23); +} +ul.ui-autocomplete { + position:fixed; + z-index:999999; + background-color: #FFFFFF; +} +ul.ui-autocomplete li { + float:left; + clear:both; + width:100%; +} +.resultHighlight { + font-weight:bold; +} +.ui-autocomplete .result-item { + font-size: inherit; +} +#search { + background-image:url('resources/glass.png'); + background-size:13px; + background-repeat:no-repeat; + background-position:2px 3px; + padding-left:20px; + position:relative; + right:-18px; +} +#reset { + background-color: rgb(255,255,255); + background-image:url('resources/x.png'); + background-position:center; + background-repeat:no-repeat; + background-size:12px; + border:0 none; + width:16px; + height:17px; + position:relative; + left:-4px; + top:-4px; + font-size:0px; +} +.watermark { + color:#545454; +} +.searchTagDescResult { + font-style:italic; + font-size:11px; +} +.searchTagHolderResult { + font-style:italic; + font-size:12px; +} +.searchTagResult:before, .searchTagResult:target { + color:red; +} +.moduleGraph span { + display:none; + position:absolute; +} +.moduleGraph:hover span { + display:block; + margin: -100px 0 0 100px; + z-index: 1; +} +.methodSignature { + white-space:normal; +} + +/* + * Styles for user-provided tables. + * + * borderless: + * No borders, vertical margins, styled caption. + * This style is provided for use with existing doc comments. + * In general, borderless tables should not be used for layout purposes. + * + * plain: + * Plain borders around table and cells, vertical margins, styled caption. + * Best for small tables or for complex tables for tables with cells that span + * rows and columns, when the "striped" style does not work well. + * + * striped: + * Borders around the table and vertical borders between cells, striped rows, + * vertical margins, styled caption. + * Best for tables that have a header row, and a body containing a series of simple rows. + */ + +table.borderless, +table.plain, +table.striped { + margin-top: 10px; + margin-bottom: 10px; +} +table.borderless > caption, +table.plain > caption, +table.striped > caption { + font-weight: bold; + font-size: smaller; +} +table.borderless th, table.borderless td, +table.plain th, table.plain td, +table.striped th, table.striped td { + padding: 2px 5px; +} +table.borderless, +table.borderless > thead > tr > th, table.borderless > tbody > tr > th, table.borderless > tr > th, +table.borderless > thead > tr > td, table.borderless > tbody > tr > td, table.borderless > tr > td { + border: none; +} +table.borderless > thead > tr, table.borderless > tbody > tr, table.borderless > tr { + background-color: transparent; +} +table.plain { + border-collapse: collapse; + border: 1px solid black; +} +table.plain > thead > tr, table.plain > tbody tr, table.plain > tr { + background-color: transparent; +} +table.plain > thead > tr > th, table.plain > tbody > tr > th, table.plain > tr > th, +table.plain > thead > tr > td, table.plain > tbody > tr > td, table.plain > tr > td { + border: 1px solid black; +} +table.striped { + border-collapse: collapse; + border: 1px solid black; +} +table.striped > thead { + background-color: #E3E3E3; +} +table.striped > thead > tr > th, table.striped > thead > tr > td { + border: 1px solid black; +} +table.striped > tbody > tr:nth-child(even) { + background-color: #EEE +} +table.striped > tbody > tr:nth-child(odd) { + background-color: #FFF +} +table.striped > tbody > tr > th, table.striped > tbody > tr > td { + border-left: 1px solid black; + border-right: 1px solid black; +} +table.striped > tbody > tr > th { + font-weight: normal; +} diff --git a/doc/1.5.5/guacamole-ext/type-search-index.js b/doc/1.5.5/guacamole-ext/type-search-index.js new file mode 100644 index 000000000..078d346ae --- /dev/null +++ b/doc/1.5.5/guacamole-ext/type-search-index.js @@ -0,0 +1 @@ +typeSearchIndex = [{"p":"org.apache.guacamole.net.auth","l":"AbstractActiveConnection"},{"p":"org.apache.guacamole.net.auth","l":"AbstractActivityLog"},{"p":"org.apache.guacamole.net.auth","l":"AbstractAuthenticatedUser"},{"p":"org.apache.guacamole.net.auth","l":"AbstractAuthenticationProvider"},{"p":"org.apache.guacamole.net.auth","l":"AbstractConnection"},{"p":"org.apache.guacamole.net.auth","l":"AbstractConnectionGroup"},{"p":"org.apache.guacamole.net.auth","l":"AbstractIdentifiable"},{"p":"org.apache.guacamole.net.auth","l":"AbstractSharingProfile"},{"p":"org.apache.guacamole.net.auth","l":"AbstractUser"},{"p":"org.apache.guacamole.net.auth","l":"AbstractUserContext"},{"p":"org.apache.guacamole.net.auth","l":"AbstractUserGroup"},{"p":"org.apache.guacamole.net.auth","l":"ActiveConnection"},{"p":"org.apache.guacamole.net.auth","l":"ActivityLog"},{"p":"org.apache.guacamole.net.auth","l":"ActivityRecord"},{"p":"org.apache.guacamole.net.auth","l":"ActivityRecordSet"},{"l":"All Classes","url":"allclasses-index.html"},{"p":"org.apache.guacamole.net.auth","l":"User.Attribute"},{"p":"org.apache.guacamole.net.auth","l":"Attributes"},{"p":"org.apache.guacamole.net.auth","l":"AuthenticatedUser"},{"p":"org.apache.guacamole.net.event","l":"AuthenticationFailureEvent"},{"p":"org.apache.guacamole.net.event.listener","l":"AuthenticationFailureListener"},{"p":"org.apache.guacamole.net.auth","l":"AuthenticationProvider"},{"p":"org.apache.guacamole.net.event","l":"AuthenticationSuccessEvent"},{"p":"org.apache.guacamole.net.event.listener","l":"AuthenticationSuccessListener"},{"p":"org.apache.guacamole.form","l":"BooleanField"},{"p":"org.apache.guacamole.properties","l":"BooleanGuacamoleProperty"},{"p":"org.apache.guacamole.properties","l":"ByteArrayProperty"},{"p":"org.apache.guacamole.net.auth","l":"Connectable"},{"p":"org.apache.guacamole.net.auth","l":"Connection"},{"p":"org.apache.guacamole.net.auth","l":"ConnectionGroup"},{"p":"org.apache.guacamole.net.auth","l":"ConnectionRecord"},{"p":"org.apache.guacamole.net.auth","l":"ConnectionRecordSet"},{"p":"org.apache.guacamole.net.event","l":"CredentialEvent"},{"p":"org.apache.guacamole.net.auth","l":"Credentials"},{"p":"org.apache.guacamole.net.auth.credentials","l":"CredentialsInfo"},{"p":"org.apache.guacamole.form","l":"DateField"},{"p":"org.apache.guacamole.net.auth","l":"DecoratingActivityRecordSet"},{"p":"org.apache.guacamole.net.auth","l":"DecoratingDirectory"},{"p":"org.apache.guacamole.net.auth","l":"DelegatingActivityRecord"},{"p":"org.apache.guacamole.net.auth","l":"DelegatingActivityRecordSet"},{"p":"org.apache.guacamole.net.auth","l":"DelegatingConnection"},{"p":"org.apache.guacamole.net.auth","l":"DelegatingConnectionGroup"},{"p":"org.apache.guacamole.net.auth","l":"DelegatingConnectionRecord"},{"p":"org.apache.guacamole.net.auth","l":"DelegatingDirectory"},{"p":"org.apache.guacamole.environment","l":"DelegatingEnvironment"},{"p":"org.apache.guacamole.net.auth","l":"DelegatingSharingProfile"},{"p":"org.apache.guacamole.net.auth","l":"DelegatingUser"},{"p":"org.apache.guacamole.net.auth","l":"DelegatingUserContext"},{"p":"org.apache.guacamole.net.auth","l":"DelegatingUserGroup"},{"p":"org.apache.guacamole.net.auth","l":"Directory"},{"p":"org.apache.guacamole.xml","l":"DocumentHandler"},{"p":"org.apache.guacamole.form","l":"EmailField"},{"p":"org.apache.guacamole.net.auth","l":"GuacamoleProxyConfiguration.EncryptionMethod"},{"p":"org.apache.guacamole.form","l":"EnumField"},{"p":"org.apache.guacamole.properties","l":"EnumGuacamoleProperty"},{"p":"org.apache.guacamole.environment","l":"Environment"},{"p":"org.apache.guacamole.form","l":"Field"},{"p":"org.apache.guacamole.form","l":"FieldOption"},{"p":"org.apache.guacamole.net.auth","l":"FileActivityLog"},{"p":"org.apache.guacamole.properties","l":"FileGuacamoleProperties"},{"p":"org.apache.guacamole.properties","l":"FileGuacamoleProperty"},{"p":"org.apache.guacamole.form","l":"Form"},{"p":"org.apache.guacamole.net.auth.credentials","l":"GuacamoleCredentialsException"},{"p":"org.apache.guacamole.net.auth.credentials","l":"GuacamoleInsufficientCredentialsException"},{"p":"org.apache.guacamole.net.auth.credentials","l":"GuacamoleInvalidCredentialsException"},{"p":"org.apache.guacamole.properties","l":"GuacamoleProperties"},{"p":"org.apache.guacamole.properties","l":"GuacamoleProperty"},{"p":"org.apache.guacamole.net.auth","l":"GuacamoleProxyConfiguration"},{"p":"org.apache.guacamole.token","l":"GuacamoleTokenUndefinedException"},{"p":"org.apache.guacamole.net.auth","l":"Identifiable"},{"p":"org.apache.guacamole.properties","l":"IntegerGuacamoleProperty"},{"p":"org.apache.guacamole.form","l":"LanguageField"},{"p":"org.apache.guacamole.net.event.listener","l":"Listener"},{"p":"org.apache.guacamole.environment","l":"LocalEnvironment"},{"p":"org.apache.guacamole.properties","l":"LongGuacamoleProperty"},{"p":"org.apache.guacamole.form","l":"MultilineField"},{"p":"org.apache.guacamole.form","l":"NumericField"},{"p":"org.apache.guacamole.net.auth.permission","l":"ObjectPermission"},{"p":"org.apache.guacamole.net.auth.permission","l":"ObjectPermissionSet"},{"p":"org.apache.guacamole.form","l":"PasswordField"},{"p":"org.apache.guacamole.net.auth.permission","l":"Permission"},{"p":"org.apache.guacamole.net.auth","l":"Permissions"},{"p":"org.apache.guacamole.net.auth.permission","l":"PermissionSet"},{"p":"org.apache.guacamole.properties","l":"PropertiesGuacamoleProperties"},{"p":"org.apache.guacamole.properties","l":"EnumGuacamoleProperty.PropertyValue"},{"p":"org.apache.guacamole.protocols","l":"ProtocolInfo"},{"p":"org.apache.guacamole.net.auth","l":"ReadableAttributes"},{"p":"org.apache.guacamole.form","l":"RedirectField"},{"p":"org.apache.guacamole.net.auth","l":"RelatedObjectSet"},{"p":"org.apache.guacamole.net.auth","l":"Shareable"},{"p":"org.apache.guacamole.net.auth","l":"SharingProfile"},{"p":"org.apache.guacamole.net.auth.simple","l":"SimpleActivityRecordSet"},{"p":"org.apache.guacamole.net.auth.simple","l":"SimpleAuthenticationProvider"},{"p":"org.apache.guacamole.net.auth.simple","l":"SimpleConnection"},{"p":"org.apache.guacamole.net.auth.simple","l":"SimpleConnectionDirectory"},{"p":"org.apache.guacamole.net.auth.simple","l":"SimpleConnectionGroup"},{"p":"org.apache.guacamole.net.auth.simple","l":"SimpleConnectionGroupDirectory"},{"p":"org.apache.guacamole.net.auth.simple","l":"SimpleConnectionRecordSet"},{"p":"org.apache.guacamole.net.auth.simple","l":"SimpleDirectory"},{"p":"org.apache.guacamole.net.auth.simple","l":"SimpleObjectPermissionSet"},{"p":"org.apache.guacamole.net.auth.simple","l":"SimpleRelatedObjectSet"},{"p":"org.apache.guacamole.net.auth.simple","l":"SimpleSystemPermissionSet"},{"p":"org.apache.guacamole.net.auth.simple","l":"SimpleUser"},{"p":"org.apache.guacamole.net.auth.simple","l":"SimpleUserContext"},{"p":"org.apache.guacamole.net.auth.simple","l":"SimpleUserDirectory"},{"p":"org.apache.guacamole.net.auth.simple","l":"SimpleUserGroup"},{"p":"org.apache.guacamole.net.auth","l":"ActivityRecordSet.SortableProperty"},{"p":"org.apache.guacamole.token","l":"StandardTokens"},{"p":"org.apache.guacamole.properties","l":"StringGuacamoleProperty"},{"p":"org.apache.guacamole.properties","l":"StringListProperty"},{"p":"org.apache.guacamole.net.auth.permission","l":"SystemPermission"},{"p":"org.apache.guacamole.net.auth.permission","l":"SystemPermissionSet"},{"p":"org.apache.guacamole.xml","l":"TagHandler"},{"p":"org.apache.guacamole.form","l":"TerminalColorSchemeField"},{"p":"org.apache.guacamole.form","l":"TextField"},{"p":"org.apache.guacamole.form","l":"TimeField"},{"p":"org.apache.guacamole.form","l":"TimeZoneField"},{"p":"org.apache.guacamole.properties","l":"TimeZoneGuacamoleProperty"},{"p":"org.apache.guacamole.token","l":"TokenFilter"},{"p":"org.apache.guacamole.net.auth","l":"TokenInjectingConnection"},{"p":"org.apache.guacamole.net.auth","l":"TokenInjectingConnectionGroup"},{"p":"org.apache.guacamole.net.auth","l":"TokenInjectingUserContext"},{"p":"org.apache.guacamole.token","l":"TokenName"},{"p":"org.apache.guacamole.language","l":"Translatable"},{"p":"org.apache.guacamole.language","l":"TranslatableGuacamoleClientBadTypeException"},{"p":"org.apache.guacamole.language","l":"TranslatableGuacamoleClientException"},{"p":"org.apache.guacamole.language","l":"TranslatableGuacamoleClientOverrunException"},{"p":"org.apache.guacamole.language","l":"TranslatableGuacamoleClientTimeoutException"},{"p":"org.apache.guacamole.language","l":"TranslatableGuacamoleClientTooManyException"},{"p":"org.apache.guacamole.language","l":"TranslatableGuacamoleConnectionClosedException"},{"p":"org.apache.guacamole.language","l":"TranslatableGuacamoleCredentialsException"},{"p":"org.apache.guacamole.language","l":"TranslatableGuacamoleInsufficientCredentialsException"},{"p":"org.apache.guacamole.language","l":"TranslatableGuacamoleInvalidCredentialsException"},{"p":"org.apache.guacamole.language","l":"TranslatableGuacamoleResourceClosedException"},{"p":"org.apache.guacamole.language","l":"TranslatableGuacamoleResourceConflictException"},{"p":"org.apache.guacamole.language","l":"TranslatableGuacamoleResourceNotFoundException"},{"p":"org.apache.guacamole.language","l":"TranslatableGuacamoleSecurityException"},{"p":"org.apache.guacamole.language","l":"TranslatableGuacamoleServerBusyException"},{"p":"org.apache.guacamole.language","l":"TranslatableGuacamoleServerException"},{"p":"org.apache.guacamole.language","l":"TranslatableGuacamoleSessionClosedException"},{"p":"org.apache.guacamole.language","l":"TranslatableGuacamoleSessionConflictException"},{"p":"org.apache.guacamole.language","l":"TranslatableGuacamoleSessionTimeoutException"},{"p":"org.apache.guacamole.language","l":"TranslatableGuacamoleUnauthorizedException"},{"p":"org.apache.guacamole.language","l":"TranslatableGuacamoleUnsupportedException"},{"p":"org.apache.guacamole.language","l":"TranslatableGuacamoleUpstreamException"},{"p":"org.apache.guacamole.language","l":"TranslatableGuacamoleUpstreamNotFoundException"},{"p":"org.apache.guacamole.language","l":"TranslatableGuacamoleUpstreamTimeoutException"},{"p":"org.apache.guacamole.language","l":"TranslatableGuacamoleUpstreamUnavailableException"},{"p":"org.apache.guacamole.language","l":"TranslatableMessage"},{"p":"org.apache.guacamole.net.event","l":"TunnelCloseEvent"},{"p":"org.apache.guacamole.net.event.listener","l":"TunnelCloseListener"},{"p":"org.apache.guacamole.net.event","l":"TunnelConnectEvent"},{"p":"org.apache.guacamole.net.event.listener","l":"TunnelConnectListener"},{"p":"org.apache.guacamole.net.event","l":"TunnelEvent"},{"p":"org.apache.guacamole.form","l":"Field.Type"},{"p":"org.apache.guacamole.net.auth","l":"ActivityLog.Type"},{"p":"org.apache.guacamole.net.auth","l":"ConnectionGroup.Type"},{"p":"org.apache.guacamole.net.auth.permission","l":"ObjectPermission.Type"},{"p":"org.apache.guacamole.net.auth.permission","l":"SystemPermission.Type"},{"p":"org.apache.guacamole.properties","l":"URIGuacamoleProperty"},{"p":"org.apache.guacamole.net.auth","l":"User"},{"p":"org.apache.guacamole.net.auth","l":"UserContext"},{"p":"org.apache.guacamole.net.auth.credentials","l":"UserCredentials"},{"p":"org.apache.guacamole.net.event","l":"UserEvent"},{"p":"org.apache.guacamole.net.auth","l":"UserGroup"},{"p":"org.apache.guacamole.form","l":"UsernameField"}] \ No newline at end of file diff --git a/doc/1.5.5/guacamole-ext/type-search-index.zip b/doc/1.5.5/guacamole-ext/type-search-index.zip new file mode 100644 index 0000000000000000000000000000000000000000..0f4b02edf56d1bd7cab3522946c61a666f22fe3d GIT binary patch literal 1434 zcmZvcYd8}M7{`Z=p<WV%Tv6TL< zhVjL?&tizP@v>FuspGW;E)_$bzTdXPT|UGP+N7ePaqMYIp{mkf^8QSJ z`KhL8hE>MkM9FQ1MGvtvGj^oWIHsV|`#e_ziL9hc7i4p!5OtJNtR_fxoyyAaBbKFX z(MWNw1372z`mx#1F|1UE;v2R(^q|RzH(e0YhMEDkfp6!Zt&NFaRQ(!KCNUfmNVdzi zmz?}~r;4hU$2VL+22y7(S4_a$Bcqx&PaK57RYaVE2O~aEdnx*)7Po|rWGlP5&M$`_ z{c@&I@4&mSHnJ~Bx>OmSu_$H?Eig9)s3wOCVs49_EI5z%Vcf?m;G>K_;-jL=N#qc{ z8DU8J-E~NuZnk#0LFM{D&L=KAb@-h)Mw=bpwQDeH1O#y{M7_aGEsg;`N0yB@b zCV-N7{v$1S6<9l*QVrjJRf$2`4CElwpFyJ+R|_R1?ai9&9&-{-NCoZ7km$Z_wm{UV zZM|U3jVa7y3q>J`(`t-h!In61JW~X5-`0iWA*Y#k*4Dv;+bR7l050xy)dCcjSQuEF zUaaIiVr}sTy946`=TSO}PRlDiEeOoomue{hlRqLlwzwE7EWYZ7bIv}Im1r~66#C%& zpgapqtGZKbY4bKTq$g&S>yE#2O=G1fh`ahgO5w;aZGX3*mh=C}3mrBNsubQVzMD&f z6T)HS*{P&!^DnzJO2CMzV%@~XT{sG6#-~EkZq@CR_*~V#aUEG*#IJ7c(_h!qe0i_x zRa3&LAUd$`o^Xx#H=S5I6qUSW(#iI!@q`F)2~1OL?c|qb?VWzCij%s@4TKARO-p0_ zOUh|CoNSV1M^`Jx22CnS_RWg-1Tn@UyAnC;TSDuz%bQ`xJ_Pg+le@M0ckpEus`kL& z67zHM^k5%Wzb%)?mJ2UUDsHQ!7|OIlaNXhc8RaaUc`9=*72RDHXlEc}9&kxcpMsM_mu;P!<~ zR0DBX%-5aJAb z=A#aDDf$yx4S2+)tC1rKyuU4`d7?=v0*;)n?r&8a-STjx=Q9cpD{O~6v2%k^mU-@D z+dH_D80A^{tlhObf^GxXgeW6-LwOEC2`gm%YB5dBl!&o!sMjp%ui871bCvEU$Kc9s z)ETA^kaFGe0a$6MwnK(k*k;QRr^tcmyeB!iUk(?eSJulxjGv>KsY~ywQB}eu)!$0J zWzq&64_n%DKs|aRp8I#i4^^pl%qob^t&N869Hiw&-`uhC3RFtqV2|2=H7H5s@F)Du z(^02V3wuF^mNF75FZl&3)i`miiK{`kc(|rN(2MszQmS%%A@WUBUmvaoxn(4DrK1QG zEF!zdAJP fUxWU9`(e=k^8Y?Xqd>wx{sg`c^7}Ri{b>IHR?4C^ literal 0 HcmV?d00001 diff --git a/doc/1.5.5/gug/.buildinfo b/doc/1.5.5/gug/.buildinfo new file mode 100644 index 000000000..54e01be6c --- /dev/null +++ b/doc/1.5.5/gug/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: 8b2734f66d205944ed8c65ee824e0a9a +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/doc/1.5.5/gug/_images/client-connection-menu-multiple.png b/doc/1.5.5/gug/_images/client-connection-menu-multiple.png new file mode 100644 index 0000000000000000000000000000000000000000..c85a10b01e3548f26ec512b8d48a086ad41d23ad GIT binary patch literal 46277 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%0DB>|!V{51NfX`;cRr3AC+U@lL!G7~WtFq7OsG|Gr zLRn=KtI#Tfn4~9$^4ZtkM%Bkn?duaxgvqD2dx5dKmQ8GbT2tk9NAZd{wTH+ux z{o{IBH-KHnYWz$dnDXIElb`hBxm>NkZVs?Qun0)2af4^AqCZ_Xf5N@}W^&8ubFms; zmI*MZccRYl+bQ*>v!(=Jnz7}UZ)W*BO&vQfG`Ke1b81+{q-&>$7F-U{cKq?tabAF~ zUH`>qc95~HeszsSw7uFPDuMN7$w%3}Fz$D)S8va80g(q-k{7}5JXi{`R1XnkNq`5- z*GuQ{=QmeRDS>c=uu&zpFpkEo+k>mq?WEcO|FfM}x4QmYx#0+a1&RvOg$DY5>-B!Q zT9!%*8!(K3mgeUwL6Amz;of|G*@+M4mEGQ4tqh#z{N_0I6CMS>UBQdxOUOiZb@l1B z9bJdeRPILlN_kqM>2%8la0g_HEcOZ0ZcE>J$NIv;2dN3@Q@#O=!OU4cd7m#!wTs`9 zbwAUut>B$KuC1WHEEwP2c#}1cpGf-o;^J%EqgU0HZ*dvG6Owi@crfny{!~EFuj^(1 z1n?ZsmpS^Kop}Xn5f5k(A!0FPbG`>X>zf_JLdfka{&pYYMOdm)k<0a7eOV;w=F~fr z?5qIVfW!6~Uvs?N>|Z~ee+dYEjpm&=fZx?p+PUdct!>J&JR*MXvXQg(BJZHi)_|d0 z))9iN5Oh#EP@vxieNQuA;i*<&Ix!(;twg(N$M!_2He>&hqU4q4Ve|4$W(7i-FP(#TEV>m0TB0@2UYVo9}4Tv_~p$*XwqTzkup`Q=-I zz#BL&N6AF&w6VWqp_jvGUa0=#iOA-X5|#=D!1JG9X^SVv1wbt)UqqjZYtWWZ&(}E` zY=_Di`&h-%h>r~iTNa&TRQ}p|_USDj>By%(Voxe=bHtVI+NpJ>rw-TipBEznGL1t5 zD<^$qZ&j0DopgnhNyIy~UT!F#{kj|uqESubq6-X~t~8pwLFsuFpCfr_d~+Bs`6LjB zXWjkR>EmA{3qD_C>=wF)KG=>I?cB_^_`2&ChPgr@TLdi(92KBSn0^s~#08i=6P@0&}tWf2vZn)EAh3vy&<((17`MRMZ>u_bb$FP+0S3}~3YM9DaI@svlW6zh0 z@TT`2&d*QYKzAjw1|8Z825pbD8pj%+yi4nwF-0SGPxBjn)jN_aI}St93;WjIh03p= zEW$e&&kzle_EMGU!|Dq2no#Nj;5m9c%?1V#&Oix4DeB}JX7jBqr~!RxzG+e>9|{O~ zaO@e9`wQ>C0Q7EGwqEThPj^flig53?L59vl%7?s&L8s^itv~kW%j&*fOFs$vbsj|P zvA-ZJv{y53z8TqaXlCBr1Br+u4~SS3PBnS%TV*%-)+1eT$%mm~Bi%lkB=S9~;Zpx9rkI9>g(;M3mM_h*<~J2i``_7 zknW2Swd{)@scCu=f_mO7d8>I(D`gA?YRm*Q_S-I0UTe9%+I{3{b-us&YF+kTibU^N zhB_RK2aSv$JH6&?+R9rA#-h;x-Omo;Yu}O0M5%1v7h!BaR3TVtWCFrVz-Oi|GoSCL z0#Li^tQ9dsm3!vMi5CjHE;*cv_1d>)525 zKt8b5gjpKTN!@?Rck}6M?8|PLTaPedlX{AuxQAQUM-iYob=>%oN?Gb7AaDm_`4)79 z*RqaM{{Z@!SsGe#~()SKCUMC5CoB7)33FA z`t0f+=sWal5&9Hh^GjwKG+yF)8sNe)-XGV_dVG~8!*@ajE zci<56tc6mxTQz0%#zW6&gTCEsZ%!|8C~YREqmvuj$rzZ{bwDp|(3ltx#!O!#)im)# z!6w)Z-tdJ^8ak)45`&sl=BAYnvwvM?k8di*(HPmXYaQ4p0k~b=^h@e4#Ey~P+nFlA zSgQ|oXpgHED3vvmOS^|QhzVSyws;u()LaSmScV3CFEFpR0=U*FRNSn#B4YUP@HThI zhdNqGLvX^>5wnM=FST926!NW}$P9$0stj-1=n~+xl!5O~RcLP>-lm2vXOnHvY-Nir<69F#x1(Y>`a9CAUjfVy;{Dvd;<8)mMA8~=^=;>;_*Tx z8QF6xpCtlJ0?#HfU;P9GPUc>9xqW-}%r60qttd%QT2+*gqYl-F*zNNpXn2=LR+8!RQrXNc$P2SZ2*%#UwvB(5C z%B8X2nO>co&_&OO=ipvtHIxno0eq{YNGzxlCCd~&L0!nUpFcbsO$&;~H+nmWz)k|0 zGI4->tkp%f3p^eiiULtLf&p~E{ZU5g5Wp))8h!gL3)NxnSLiLV>($}*)twkU6o>4 zDgRUuC_}O4q02k6TR<6Sy2telf*nHmk=jRQdits=Z1uw;`IPRU+Z$wAm2QJlUjoi* zpOmDX?#-N@&2WJxrfrQ_EmSq?ehl#g)5AnIxUZNE=Igr|I~+i!0@DCqjGswo7SRUl zah^piAj`x~(e`OGDPjdUBO~JuRn5Iw#=N)7c>lJeFpSo$zB zC7d4llI8Uq5L?@%u_irl}l8$q?w}kDO{*(04pghN!pGoVHBL$lEC%OqCsCl)u}~Wos$IvV}gQGapklGK~-6G}W!8r=9~j#zu~p zi!wPQ)4p_P7cSPmD;I3tc7f4V@a`j>_<~lB%vhna*fK=A+%-=Xta8ebJ#A#DdWe-= z$}@xklo5ehuzM}89z{qfHcO$mRYEi|%^JZS4$cyq#84OHrpU^v>up|<*~`GEDzT$M z9lV#5QSN%wQ)Of9Y~i2pF>Uj%h|)YZ3t531&0~L{eL{!t-pjw z(`THXA#WSBjO}Y&H&&f#;txG-k|Db0bnRF(Tw%vls=n{dR5|Gb@5{q?=3h_do~|y% z_JnAKYt0T%LfXf*5>0R9AQ3>_dhD9lpF#*tXYwBVF>#H~7((8L0P+{uJW2%(AX{im zK7nJM5ULIO;JS85-Y2{!42~%bqvyyL{NAHCDH6YxbmKGJt?DEo`6a?$76X$>#wcot z5xA2M42alDWU=R-IVNmN6EUt=`&xSxS&huUPO{ zCAf`A62O(Z$E%c2ar>jVDq1{!`vB)BL&50Tk|Z$EytxszGA$FYbq-olHwtYSt&2RG{y=DxG6vC^;=OaQ_JOpxsD!B^F*q$S}jXVPtVM%iJyE9 z#kaB2f?XkX&NIy(eqj?ep2Z?c%ue~k5`AXvoU19J4^ zuRz^A32Y#mF2`uhp;SPYv}ZoF3K9(vmwi|pHzUCAO9BiA<8gGR35`r9n^}HGhq^WG zkR@gxNYqtZs7^+vA`b%Cz_k#nbcO(knK-usOQEAHV>=SRioNWlz10vyx?+_^+EWyP z&=RTmyp$^gho>vR<2$O10r#znK*G`Wr@&QR4O^YwbnsL}4nL^ltuaWBR*E$)#O`}N zL;VZlWo10us*qOPDV4scQn%j$E7My?4o@lKpzf#lf%J18HC1Mkz2MHsJjW zn`1g5Wg%4|IU%VTwHfJ|e<6y>|3nm3nWCA+r2c^@sv!|Yg)P-B=$}2=MolQyg)|qq z$|r-~(T`|C5I>gUGu>7VMk?v*M&8&$kf=zrOR`IvON7gdsy9_hRWVh;Rbf?$RnZy> zX^+!n)6~-B(-hKF|3)rlej}G^Ec6}>9!w-49PB-8G9rEAFN}Q5d~_KKHqbld5}b&P z7$J6|8SiaOSbKX2R){3>VlP0&NX0}& zPX+l-_Z{NE-~cJ7E2n2;NG94K-XOFhM(P3m(Gvyi#0~)>Z-u~*KzT$Z;tL`cfhHr` zA&;0sxC4iPF~DLX3PN?J35Ez{+G7LYmM=)KJKPN={}mS5e}v^PJAMPb40mCPri+H) zG2k)bK~5P@nNGp~bk`T=8VJ%3nL9gNcyc+UA<}mdS&s&M8il$DnlYPEn&pQAHi?vh zj0inMDFsks1>9~-0raYlH?{9*!~_bI$ia2nlE083>qZ)%u|0$+am73apa;sZO8|uX zL*dkTpb5ryg{P3;s3ux4xHl1;wDN@z#5b9%Ek2PO4|s`fg#3)rhRocdnn?RDjfoei zW#BDLx)ezO|6-`dvv4n$5?Lhjc~{m_;1aq!5#<2LRw7`Seem7SU3>z3_7JZip$5!ND^YPhTq44g9AS!e2=^5{)tQL1Xp#lKGmyj$f& z34eP-qA6{so-uR#54x$`$pf~a!?bANy`iunHcknq0 z;^;@YJLL1;Lehp=K-tf)Y!5fyIAfk{45^^^(gyu}kH>-(F4XE3tw))Qe|GP!!IS+Z zfuTC4KL2oYwJP-`C?TN1W;8FSyqs;O$+IjGQ~G(CPKB0b#IEb{{73)#rfE!%&tdl{ z(R9vQf8AaOa~wTK-e7oMU?7eEv@=rDcU;Hc-upSfUTwTWHZbGcBjiCBdTGNJzf9@e zlG``j5_SUa6S}O>`@qzI#OXqiHHak}j$eTombhjkmwX<;<^RLs)sNh88XRMvRg5#r zUnb8lVGr7no{tZ*zRVMdl7Zkv;sC5v0y>KIJ3~-i2j5T==7F4qVwwXUQa; z3Wz-MKi{vAfg|xqAo3d+26Wv!SF6BX4Iwj+54kPWxJt8g9!1GzwvhKoQ3DfkRnTn- zx2xsh$aOeWxvU~ja6;buhK#~Xf#-|ukKVQ9Rk9n@v61uJC5s3m?=z;ovD7<1v1kJb z#g6+J+V4R4)y{A%=TA3vcz#G1_c^GI^m2t|ek<0)vrq+nhtb`A$KmG{JzHa&L@)h@ zHTk`Hca$8Y!L%K|Qaf#|5;84>JmVQs3cFcy1zvfaAyMi{);Kbg0L>c(5ki_Nyk-9b zanBgW-T(?hAONkM+mc#;H6Ac60%>oUFWTN2`G3fI?|7=;_!-lu-JL3F!HyyTJ8C6B{2u+H9NNV_T3_>gcOR&=JzH-zvcM5nMr~S2kOB}acw_vZ_ zItcj^N?;nML`7B?zXsRJ{Ytr2JIOAY$MHdpEb5EI;t@fXm~qCC5DfjqXGng!t=OTj z8Dz5-+WZx|esQ##)H1xp6bKrV_YLk8aTql{OeTUPE;pFxg(qdW;a`iue&p5SDvZz?Gi{xES#Uh$S>Z^qwL85ibpskYe#lrtitDtgdy)}aE zarB*B)z%rYJGV30kWjhu&3~J@!tJLEHYDt0kk7;iYYszjtJq14hQPmrSori?L89Qo zrsla%lgc#})X;jlKDK5K@(nfVN|eO>WZ0dQ>u!@k{z``X1~QY6pf$~GbY&AZ`sRdE zO_7R9s`1&0AdF!ct{B0g3IT4sg=UQH>HjgOzg26)mF?qm(EcZw7+Oj=~CJka*4vlV&Hz>A<^hyJ(s4?Sa;Om}9F&EUIC-fJOk2&h@=wM5~! z7fv}J%w#AH)-VjwJC4UGnUMcg)V?V-{*4jUdi$E&Jnnw4N?JeCdxDe(I@ti9lh!y#b^_ zD(|J9mp|_YZGK`$y)ekaznKbA_Tn|aIa=rK{BkuyKU0p9Ozm%sIp=hwv(9(w2w<=_ z-;@VaA@?i>^T2wamw(XmYW=sa=ePZj5aF+9wP$tr{^&ffxPW+jqwA3!P~(UMel5KE z@rogFu{-nO0mVl^(Aoik+%@;xoe#Tap5VMIn`eZomfiVwZ~a4jOb5H6>TarNTW8vN zmdTHIrW&RTQVdRW%D7-x5BC8*iN*1$2G;0p;oX5$%t7iypm1}yb3IyF+}+Xm-Mi%s z$Nk6Q>=aTO=@_)cE$5s{*_UflWi=aXM z&ve=-q1BRSkR6Y&2V#;0klkPkUQC4m9V^ot26pS0qRrs=5BO@}4o>u|9^jnPe6mbA zX33(GtJwAHQWBaZ%yCCw;&HMaE40U&rRby9AB%hFjl0mI5cO)ho2c>!AfO&FJ<|O%D%j#h&0URwgzk^%GK4iuOawe+Qr0Ol_oS{ z^Ju%bbUXi2LP_c#AoPp2w7(rvpEM}~*H~On73(%!W?=>k0^+dgSd{^wtMB0GcN+tF zI%lu8S>3MFd7h=<_3W0g$~G8e%q~{EOkAc`S(y*c~omflQAfv&P$cS_sVTdz6%y&rYDHcN7!a5cmj zW`qr;GRKf7kZYFKh*_|~>y$w=NPSTY2jd#b@h7N1(+`BI2N(P#z>&0iBzsp4 zPyg0R`{u!d)405b*2oT?HtabE4|~qIOQCrEu0GD+P9CPp*Xs`HABpi`1*7b z@vX0FQmSrO_nWFn@49xHI(}>1*blh9}tw ze*Q}4&eDno%NtVEW7CT0xvLD>toEKwu5e7U4IoIIQGu!g%zS0Ds*NY z>Dv@4DoXDjYv9|Pkq7w+w^lO>b6e}t>4>+lRYF)}^?owcrr4<=P)s(TX6^_zNb83F z;tIt^XTTivktiRzA0K|yuRe7}>ZN02r#aHG@W~ZKk)awk79Y0HA*xysaJcf~O9~<; zvZA^6Q_XAyB-VTRYR+8==#TN*^TAm{44I#tIiSzn2~F^DetM*>+3raNzi!!)f{~w| zbjcAWP1_-g>Z|VnH-h%7>5-Z{Ln89!z;Q)0bHPpDTL(5IXpHwWrl8P<@*F zO1%racs?|KQzRi;gMfwYK%dX&GpyxXL?fp(l=+gUf8F~iq)M2&S3ITQd^Kg*2PZP9 zo$h4)$eU4hhtSEldT;TuY^i)OkbdpJyPNV1{+uppnw@|dc)>j;Kzyinh|Y>G*y>SU zFBnSkbnc_rzW2zy^&wwH%t=>^Sv#0htr%K79uiD)5hPCB`8bKei$s)184Uacgm{iK zP#tj#LFPIhKTlQY3tSj)lS`~Ji<9cmzSv%kTkhF%x)%*>KGOu6Rcx^S#?fGgop*GO zUDkUv9(!Mkxtc$|oVPm_672V&185Sg#8uJy6v>8fWDtPkxpXnersw7!ZU$Lrx8niD_`5cEVP}ygm>X9s<;96f__5+MnVrZi1Eyb&dEJ%*yns| zEh-Hyk>iHfi>&9@lLLS4*;@9|6Kl^0XHe(HsY^oXGL_%(Q0f#hq=U6pwNtE=ght>u zdLcf<^3}uwL=0ot*emDKSZ-tPo)xQpdQKU1R>TnhU_F|4h%;Wg@+NhfV7weQ)CO0~ z)!KL*sqVQi6j6W1xj$Iaq0nsa9>rKF)80+vi|M_NQbRn8l2w&EVI5fs7e^11U!J8XI_Z@?6d{(i z+=}oN?Bm(!#w42(2-cr5$-iVuxW$G-z>~1z4X0*@Ru2iE+NG{r38b|o z@`)f($#dHQOmG&19JOH4;M_2GulS!1wE{~W$u~`SBs=m$M{lt%QCRR^sNLb&P+Wo6(;r`r;ERH4$maf=nifQ6s$x&tB?b zehxzd#)6Klaf3s71pi=P)C?m?Jt z4oXrolWT6fUl7GB340WUE6si)@BSoOpAG{U1me z6v4SDRjVWoy#_4zA!n=k2;}4bY+U%ok4JZNf`9#dp0xnvwDFZl76Xx|s`p-li)4|E z|BEAVXuK;d2>i@9*}zm*`0B`ku{pg4@fIBZ;oAPe^6sOA*9=0i?|Ms0FesZp!7dnB z76E9O_twX*aR32lZyE7csut-&`+WYZWE29E1&Nb^iRmTfx=qNC`B#7@dEigaroiQn z+X^>F+j*GvfkJBfNy%rvJxLijNxy?k{P#&0yMBn}#cbhO$V>eQ?e4LhMTFvl$ zNv2?F@Wm<)d_WifBN7|cUeOH3+ntOt!?z>IgTVs@Z}May86PkkEA0E)rQcx{Bb-%Z z-x9;@7Q+g>4S%FM-9mb^Rj<6z&ol!bqsLEtRB%m^P}9LY1SNyGn3xH|ADG4V3WFZJ zb{|VNi-w)1qT}czTjAct#FWdPB%TtghApQY zA`f)M4Ek5_oYb#?CbOO&&clyWMwWLDr%wXv z=>cmMumd`C2F>`A1~I{F$Y2IMiIhZgqwSLmtaJ)*1RfhOevhENQRAbx;qV)^IoN|X=fL=n4DI6az5E}w_ zZ=K;7zOU!7{)u9C=Sg^2io;Nespv&%kxB+@EzZDjnCjf_i0!pK!P#Js)$JEKA(m;u zW7RjLW@yXcvzT76($}sMpXI?my*(!)Qh5l?NS^-7Z4l30EnH5XE(3g%CntL2cyEeP zka(S86?=nYyYqZS0fx|SmNX3}QqDfzH8N}eHQDZKZaw_70*stHC__32}TpK^(gYg6q;WF$!@QaEbK*5cHCQm!&g#NBe zfyBbU^lZstu)-(-SAtzWuWDc=ZuyOJtNUcVtlzV{kpBx1^~kS-Ge}q84zO&W&oh%3 zA*n8%J8!Y+FE}!=t#RoG#Z`d9^ctd~X|&8-W!AyFjg*^?VHKTzw*Q^>Y{hPGBaBSefE5f|*97f&;IZxT0Be6(Rb zFMsnhhpC?mHOanQ`FDQ2iyOC=fHv=;H#Rgrx}Z0#gsr#HpSa(m>Y|=rvD%9|TX{WV zb@|S5KK)(-m%Mmx2dY;2N_jhrNA8O!JY#t{1kOr&sI+G&oPZa!$afo>oVDK zF4tEtIhrQfVKA7$w)8shB~e(=?$EU}&}66an8g;V)X-oh+s6c}=5&dZ+!FHWKgT;s z`-qs>Vx<@+76_71DU;rZEwpcrDvqrI7(Z<|jW=X}W=DhQ6op}EYbV=D{WplzL$chf zw=@bUV(qFO93n2m7TeR&UOaoh9yx+7c4aA%Q}!}5UE&j`AdDx_tZq3_9^|R{KPtZz z(IHc6SW&l_k?Xhq?ehKP0)w~Iy~I0upTGWre@PP5EgX8ae?o(^>{H%_6`>7xVk&66n+OQ!7uolZHgg)#Lv6I>>YFVrqN>4pC5|<+iAH|XhBYid3=iXl zt~@H3ptzAu2FHTj+ky1sENx_-A{%^GKD_3u0Nbi&$Nkhj+wZLKu=aXEri^Q{-XR{1 zTLzT-P!Q8ip39?$pV)2P;ajEEej-^HpZ~H!;l_ZuIN;VgwliOTGJh~{VNTczXQF*mZ&9of}vtMr0Vu3SNMflYi<~%BO{sL zBt{|HSql1ded=T9;q|9Vb!eu7t`)L}t5^)K1%4#~?ziPGKN0LDBC(wa)MWbtAgas) zK0j5I_Rv2qFvA!N5a7~TJ^VwJE%YHT`bdEqro)xaC!hY-+`$>9&6&v-ww;8rC3sHM zh$76d<4$>e=WqlR(S+nB41VEfZhgZhgv)GP?gAeP`~OFUu#|ul8gElRAGz%C*ugX^ zTapq{(pYKhGJu5&WLWqaL&p}lIM1koZ^P*w1~I@8Ju}U%FSzya=|#99?jFgNeFD5d znfui(cHpHo7EZ}6Hjc9rW`_d*b6lElWn&#BEt|=qe>mw582nsUICkR%Pz092Xkh+q z_Ypkz1rKwIkZX^G%&A0R2+!q%%QQ2z`6?0Rd(1s~>*)~wq=|8gy`f9Zyr_f;x$ZND zp2e5&uB%urSWxc!TO!ZZ7SiTGVnVqPT^U?=$LYY@GFqzY!^b_Vfl~(`9v>!n%gMUJ zV318oD4xlCY{mQ`MQjkzcZOH7@AA0Kr@r($4mj)GMfZF`puQ>Z zRNeJcA*wBG0;)HHw5SD(6itmK(A)d$x*$o|loQ?`#Lca(%d$U3F~kFo@*E~gh*_`U zA8<^5ceK^DeF?9&(9Q;}uKxiJ(l><_;xH$H_AyXtfk>oy|o>4E!#9k_;aYooTw?S)EEBKZ*{|IkjpyFAZe18`GbD@PUh^9kZ@C zh9)Y*zFP9~n2aEyY>(do+eI7!lF5ZISFa#pvuJQRje5YOLtVoRw|zA;pJLeKzbal- z=@T8GS0g4F_EiG2xh=uJ!g9gav@yU;rz*o#-a72y`j;*r+5p*II6T5JO8_$)ymsD_wec&rljcRF2XZnn|4ZDKF%qw?wu5gJ=7ErSR_^r8Spn4i*h{N7K2J7gq&=q_v9S0+Dxh#BY=5c+ z-tzopwi7?3RBi^S5?<=|`fMtX|cXYgK(;ug9{225;>s6Nyd9o4h@Y!wpk1% zek4jRsU1BYMYvoI@5z+EmTQIz5&4~3$IPsH4-xB#- z1YLiDTTR=2IL$@acdnhaUWwIh$S63WK8!Vg>&BcI2Wv;<#r9;xTWLIGNxMiZH16vIbLP0p9}&4t%HN2%pVp)hR0Zy3voakNG-) zTO?Yk2GL?D@mZ-RCHhrR{`-2eQwCUBB$^C?0NCS;#*5=zlA>R|7l)dC)3BQTD^b9s z5$1VG(>*afj*A>5Y$ieh;nbF%$UB@z|DT8ww9eu9ioxdWGa!-kWW*x;GycifCCxf` zAygUkHgN5H_IitcJD4Zue87-R!dkHWg?~Ll#0QWNyjql`67~E2hkfEt zwliUkUHnh+FRVwu1>iYOTdJAkKiK9B^mm*KtU3MJRtXB%j6elX)F}NEQ`+BvJ09J$ z4Vb3Eyfr~ON78>P&Vfw4Bv4Q+Se|~bL%K|8yweXD`k?iYhdp-U_B(w_5B-xZzq@W) zn3Y=>pR62SB*wRM)gDLCRQ+OF%PSl_<;B30+Qh^JBJJE`(qGKn_l440SE*pHTUqqFo!Tr^3P4KM zrvZykY6B(mk8Xxdiogx{PYwty^5UoNhM7?zMRv}Y3*zf8+<|-q^zuE^Fk8rC!aW=6 zwvSqfpQPJ{HS{MZ1Rg*V0dg+UWRa9uWKLBO^Y_A07%h27LiW}sUUZgIuXa;2r7#l- zsGuMQisJr}eBFm^QYFEEwZym!JzGYkJ~cL6QSZ0B13{Et*!EH{W6*B`!^(X~DRsbOt;RIV3f0bQ`a6enjAZzDHjL!tt(a# zqc5%GWs&}PJJ|fg6MA2N={qTNPXk0& z(5kql{f>@HPE5gbT4P?h(xqR(bQmBi8&%p}jgRTQT2uCucZhgOGnjVf^m|1HN?9{l zJc~uhqh<>=E9KUpC4rdpeB6$jjk~6$ zX3x9AVwqD;O)(m`M7G^(q34n-fHJiK$<*|~{$z{f6&txq(IluN(56=IdUN(rpE_Gm zY&$1)J@j~&*vzQ@)XcTI{tEZakMURN0JF`UAvDi|xkwc<7Mn zi=tIM{0Y*-_8%_yz?2SaXZE0f2AP@RB=uy_A`w9+rd3iXujIK%2Q_LW#0I&;xRE~d z(jbb4hP7xX1|6J&K*D|ed54WGo-Ho#h_Kl5$=|ll7$s1v!QLA7Gak_enapsbPvf-5 zyyzmz_0W|7bdu`!;hG0n>Y&d$A5M|EqE6~Phi+EB(ATl7d{1*rqU z${OwF6d013Ks(jk8vx*B#NJe>x<5!K41}?sa6LJ~5Bi4Hdr+JU&`4bigGbYyXgOu5$So=AuhlBvY?E6Xl}r!4>$Q>$6Df+(ho1vmK%939rNnK^cYuU*xQ z5SFK*H}&Q$wJ&mMp^Y+?jZ-&olSl z6&JHzD9S)GPw~kwpCGwgu{ageX+N`4#E;rhbQr^scR8G^BJsXf9|CJHGoB;{?Bsu| zK-NjvEjt*D+aqFpsh@b-X3j;Ad~ye%EYVdc_V*{nq5xsN^xP0feX~$xOml7GngA+< zEd`G77I3!Njq!fKr}fka3`<+olmWY39rY-D>HkQUv4nwS&!i z-qHZYJLrop^1Q<7MNiOh(~RI-R$UIU82O#MN$?mgVSlrPj9&Yd$?w7;!|9Ta155BK zDd^T6^im;Y!T5rfN9;X+9^-Y|FPd)(3bc!h$F|PQog?u8kt)Af56!e1Ro2ZkcpBsB z9N?pZ%7XC4Re4x0ZSA|^g|ovdeECtKb|;&Z;zJk)ASv)r9xWT^cj{2+tWKNvF0pms zT6!TnHX38gC4h;{jdSGf%>0hu2czZj}#Axnz<;F%zrMk~PffZn#YNu0GXBoM{|E)NZm3=d^ns z!6j!&Ea=+PdI?<-B?XQ;#nu`yu_M^zI4LNqBV;@AjzNeGX$>V8L4p7c0bB*If5#X* ztW}l3X2iBrReaMaoeyAg5%s|)5w3Qdb?0DumH}4u$=$HjcGuZtIO)@)%4O+!=#WzR zTtvHU)#jljod>-C8C^Xy^NI6TJHpw`moAwzCInIkVVEw-?K3r{&*FTzUrEB~$~@H) zL#uLI(fInD>4B|f`WikOFkdCvnX|?oDRwP&8IrX+KwBGdU9IG#oqt(TG5y?GmWzeb zYHvoURq=aG(+dBS$Rv2!uH5x&6uJ1_gRq%uk|;X;_bMB(SVf*|z~IGp`CpcLSUe!k zx7=t&l%n-4$|cS2EU}H8p+p6ZZ+w zRd#Fd-3#NqEi7BJFSZ-ayR=QCw^q&C$3{CZh}-98EBk(@@o=t*z9N_u=NINDc5-tz z!l1pVHF-K|tHcNqMDG}6gP1LclA?#+d3Q*rFQkK>hoV*aXB|P`GhOuv-V;cLjsLpMh{m&OHYmHbta&d3+%wMmPx@0eQnL zXNe#N@RG1xP&QY@s8I?8*i>y`W#`G|7C=S=>y0Uo!R9FexW3R#$#(Y=AXb1~s`?Kd zUV(jOan$!Lybp;J93&Sd=&<2jOkt_A|Lz0|7VpTz8BI15^1)g%?2Z9MK>zc$J4Hht zaw|U5Ot7cEc=U#&6__@LCE}kfVendJ71vb>*Di1iOZyz@pwH z>+{Q3*IsBsfBAeH?(nSR@-;=~WGple<-7Qoq-Do7Q(fF&gKhYZ( zDuqU5N32=;9)GOSyzohmXBF{;uOWaPK{7ORM+yoVp{ht<5#~4OWH^y)#YLo*Js@#W1a;mT5 zZK6ii>-WrXcK+xGadD>b;kP6D@NtEc?9Tc6O!w{p)+cF&DTo~v!5qQVzY2bOCY1o# zS&ES`#5l{1nl$?3`{a;gdVTjGJYSa$T7g%ywH0xaImEQCxCy!1}KIpzNu|GAk%7k2D1T>ohy28p-oBV zF$#Ad@`_fQS@*m0wE`a&bo7qPm7^t^xtQ%%$laOy>?PjZ_S{KdnX8^|Pm8Q8^d=3W zI2%ShmVv7RYhsd`CO1Q~Zttq#FRpuzV#ccg7Z1J7PME)P@qWD^->rc)TMpJB#}xZA&!^O- z9E(8n4Q*rK8Lt377z4dJ{ht9J=ywYk&IC}Le2y{Py1qZY28@!|(wFE>je2=~JUDTF zTx!dj3jK4OxbyX7;K+D?)wqV$l;k2fonQ1TkJ%j`?jG=?(EeV(32IR2;#T(DeaM`{ zKmn$N$AX^jyrbU!h>f4kbEq$fjFR>z{iaMu$eu{t`B$%U=X#;>V1?ND3%0QD=Po^`*7!-Yclw&C+{(T%hgw5 z50#5b^3k5_-#$>UeEk8^;c@hia=%AFB?D(*&b5B!0<6FcxGow4#sJ zI8K>5KUFWN0A&KQ%msXOVNFe%LMzJ%np!w6QE3Etxq)Mk!ZnSh;byP$x=I@Lbzi;e z{gdBn-L7faUKZ``5`U++)>E#Yq9h|CB7$A<`eWla`JBos-6@*#RYwSg+=H-aXTsO2W?(HlmF}QFI zzuv)>cbWELI#8E{SE0;uFc z|F(2`vIg>{$SB{`u`Ll0O5l0S+$*&`zQyqT$uW>|K0n(F6-|M6t6qi`+#5iQzA)rN z5(NZ^;^%Rn8h(d68w^tq0~BTNf11oRu|LVwKSJE{QhN9t^tN}zU5K7`Kv#mgrE zUe4nMg!HQUop7HxN4=A88_4Y)XC*L>vva>Tw<2836VO>1*`uEE80Z0NH_CCOrK}Y8 zL_(t9yH1gQDI%8rFIJwVJqBd~2BqM)6S)fV>)jH2dj!)xvVcF$;2 z-ZzyysxtIy{Z99nBt{fHd1@p#$X;-=m~JgWD#G29@sK)2f+kA;y=2v#+Wd{-`{BN* z36PZ!``siPNOWsa*c3v|-}eD}zHvd^;jExgiH8Ng8TYhpdW(+3~w>h_9_$T4uzI)5?G)|tCW@^~{@h$h5%(LEQUsPN|qwx%x(FfZ0}4I$|} zS=9j3Y`9O(-{cZP6HfQ9RHzgB2Xhu`Dx28 z%y1(qv%mTjKiHn{Z~;36iK7*%(rBXGnXCu4Y+()Ldp}pl2ajdce)c~pN&5Pu<y;MB(PZH1*qP7$aiF`7cB2Q)18-iyNqh5drY=C}vl{z7zF^9NO3 zClbA`8|q$+Q0g^?ocdpYE=cs6Ykh875STN~UA}3FOzfws-+aIboejXA0rfab5?T=MW3>Qcyr<m3o2|A!*O39;wTt((s3gb{L3Z`fc{f9+)e0z} z8d+_K7ThL3O7Adm3IHX9Ku?8IYiw6h+mXo3``pt@j_5KD!=vBRrRpUfParlW^9qQV zI{r?P%h>a;^(T^uuU&6qZLWz3J%06GH9MDJrxGUOqeXLq>a-r-Zz}jrCm%^^;uwRJ z=a`wUJG>@w#g>q4eIpofJ*J#R9izPupjCkFNu#3&bstA{o(wp-oP_uN$iOF(bu(w- z7;eYvmKG{4hD^6hgSf{|g)9_DbVjX!KGyk0>!35Wh4`+8mp~2(d$2>Fee~jORh7N* zbo!Lm#~dSL<7Yjf7plHfwG0)u!!`7J3@k61%Ko%mv*g?c$Iq_`KnyAHjjzJsL6qYc z!7c<4yK(0;?v z>sBgj+v_=wLn1xIKceTLO*D8@d-FFAo*&HbQ)xW}s&Bz+JLy{46?~Fu_C3XHJQfc+3&t zbT>EpBM#?6j#>`|tX@1*sbpiDEjC5?BM=WF&u33RrNKyuK8OT{zbjo-;|H+gmZtrzD?15W9Zje zHJ}CB(isLaBG>etGc> zzk+j>eXL^SvoaG<-8(bFa_lN-%k<)R5)n~!>Y%x;+sCvBItTGMQN6^-aAGyh-KFKx zr@(ADu1rz4_Cm@ua8s}=8U$Q0qJEb$ElAPU=RmVLsDvTxF{s)>hJdSa$0(Wv;3M

    5Og@dK78WYEn=9DQmCuaGo)FEZ>*CIIc0l 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 literal 0 HcmV?d00001 diff --git a/doc/1.5.5/gug/_images/client-panel.png b/doc/1.5.5/gug/_images/client-panel.png new file mode 100644 index 0000000000000000000000000000000000000000..06155ace5fff5b720b14dae5164a80a45fac8cea GIT binary patch literal 105808 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 T8M2aN00000NkvXXu0mjfk>=CMFeLAF_v`QL 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 z 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⁣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 z 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

    -^Y!*xMH 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

    hLeunjbYf7@r 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

    ^`Q;S>m(6)d$~Ix1qae9qv3jm@D+ELyK*z7 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 literal 0 HcmV?d00001 diff --git a/doc/1.5.5/gug/_images/client-tiled.png b/doc/1.5.5/gug/_images/client-tiled.png new file mode 100644 index 0000000000000000000000000000000000000000..73b9f96750af6530e84c96eca8ce95d114c45c26 GIT binary patch literal 642121 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

  • gE<}Ppx`L;L*BCxM53_G-WR`9+n^cGH~N08B*61 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±*vABv2`Ey}g(@zDHRTfMn& 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%0A#d_2KN1Q{GG=Dwf3?ubW8I2`_l80N6Z3z>_ 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 qNMoy>j|psC`fbRSmv%9C`p=Fb0 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 QzT`qH&;lwWeXUe8R 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ϠzQGgsmTS@l2R1bS<<{PX^%JOLkZ9- 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

    WH4&#Qc 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�?2Wv8e6pBF+2X6oD+jaE0VSeoJ~{OCC1 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 Bz%Bp) literal 0 HcmV?d00001 diff --git a/doc/1.5.5/gug/_images/duo-add-guacamole.png b/doc/1.5.5/gug/_images/duo-add-guacamole.png new file mode 100644 index 0000000000000000000000000000000000000000..e90039cda8ed89583689e53da9ae6c8c9ae6196a GIT binary patch literal 7156 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 k+a6bo8kX4o`l{SL?55X0ZtN;K2 literal 0 HcmV?d00001 diff --git a/doc/1.5.5/gug/_images/duo-auth-factor-1.png b/doc/1.5.5/gug/_images/duo-auth-factor-1.png new file mode 100644 index 0000000000000000000000000000000000000000..3a82976a5c9b5d03522f6dafa7e678b4054e815f GIT binary patch literal 12418 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 Uc{>XJw*X2>UQMn<#?1eJ0TVRJssI20 literal 0 HcmV?d00001 diff --git a/doc/1.5.5/gug/_images/duo-auth-factor-2.png b/doc/1.5.5/gug/_images/duo-auth-factor-2.png new file mode 100644 index 0000000000000000000000000000000000000000..8c35648a51a60659325f37aab064f4f1c566fd32 GIT binary patch literal 28876 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 YcZ5fMFOMAVJBaoCsjPU;6Fsm00nhb1GXMYp literal 0 HcmV?d00001 diff --git a/doc/1.5.5/gug/_images/duo-copy-details.png b/doc/1.5.5/gug/_images/duo-copy-details.png new file mode 100644 index 0000000000000000000000000000000000000000..d7faa7a751d683ea03f3bda04cf8bfdb9af20e37 GIT binary patch literal 19979 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 literal 0 HcmV?d00001 diff --git a/doc/1.5.5/gug/_images/duo-rename-guacamole.png b/doc/1.5.5/gug/_images/duo-rename-guacamole.png new file mode 100644 index 0000000000000000000000000000000000000000..7c63d4e82ea1cce03a00b9239d2e2356ae10cdfb GIT binary patch literal 13016 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 PStLbT;dI)`3%C9UD9LGR literal 0 HcmV?d00001 diff --git a/doc/1.5.5/gug/_images/edit-connection.png b/doc/1.5.5/gug/_images/edit-connection.png new file mode 100644 index 0000000000000000000000000000000000000000..5d5f023a9f29b72d9d811446fc468a1747ec12f9 GIT binary patch literal 119196 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

    Oe+azw#Jd@(M8>LuN_&3LcDht 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⁢u4R;+X~BbtC!8< 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 literal 0 HcmV?d00001 diff --git a/doc/1.5.5/gug/_images/edit-user-membership.png b/doc/1.5.5/gug/_images/edit-user-membership.png new file mode 100644 index 0000000000000000000000000000000000000000..ef7d5d9a83468b1e347b58bb3558e99213f423b0 GIT binary patch literal 8415 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 Tc*JY{m{eUwM;WPT{qp|-#87zM literal 0 HcmV?d00001 diff --git a/doc/1.5.5/gug/_images/edit-user.png b/doc/1.5.5/gug/_images/edit-user.png new file mode 100644 index 0000000000000000000000000000000000000000..eb53c40925d401ed4ea977a5990182d08492de0a GIT binary patch literal 72176 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

    `o4 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 Z6~zLh*D79SGZcIsa5}W7lI{21{{e)J-&_Cy literal 0 HcmV?d00001 diff --git a/doc/1.5.5/gug/_images/file-transfers.png b/doc/1.5.5/gug/_images/file-transfers.png new file mode 100644 index 0000000000000000000000000000000000000000..3566bc5bc0edfb854074b3277bb9542933b8834d GIT binary patch literal 9586 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 literal 0 HcmV?d00001 diff --git a/doc/1.5.5/gug/_images/guac-arch.png b/doc/1.5.5/gug/_images/guac-arch.png new file mode 100644 index 0000000000000000000000000000000000000000..a38b12c07eb5059db395008680e5240848d7f0b5 GIT binary patch literal 51821 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 literal 0 HcmV?d00001 diff --git a/doc/1.5.5/gug/_images/guac-menu-share-link.png b/doc/1.5.5/gug/_images/guac-menu-share-link.png new file mode 100644 index 0000000000000000000000000000000000000000..eedebbbad27ad07613452c9f0e45a79d8fac9c65 GIT binary patch literal 19965 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 literal 0 HcmV?d00001 diff --git a/doc/1.5.5/gug/_images/guac-menu-share.png b/doc/1.5.5/gug/_images/guac-menu-share.png new file mode 100644 index 0000000000000000000000000000000000000000..8ceaeada3f9825365a2d846f7d67f02e89be126a GIT binary patch literal 8726 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 literal 0 HcmV?d00001 diff --git a/doc/1.5.5/gug/_images/guacamole-client-interface.png b/doc/1.5.5/gug/_images/guacamole-client-interface.png new file mode 100644 index 0000000000000000000000000000000000000000..6a357219c95837035a2669d1eab6f1a534bf1e98 GIT binary patch literal 393258 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�>miUlE5%R=n1XCEvr-g_txhYyd8>`H1D-bxUL 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�yjBFB1=a+!zemj*R<*Mwd+?KPgk*Y#E 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�t+}gy8OL8XRvjyO_x+t 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

    >W_~``qAB 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 literal 0 HcmV?d00001 diff --git a/doc/1.5.5/gug/_images/guacamole-drive-download.png b/doc/1.5.5/gug/_images/guacamole-drive-download.png new file mode 100644 index 0000000000000000000000000000000000000000..1b16ca03231fd90c76541a30c6f2904bd00a6938 GIT binary patch literal 19149 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 W_|5u)^YAB5At=bI$}~ushW!sXn@LXq literal 0 HcmV?d00001 diff --git a/doc/1.5.5/gug/_images/guacamole-home-screen.png b/doc/1.5.5/gug/_images/guacamole-home-screen.png new file mode 100644 index 0000000000000000000000000000000000000000..ae95880b7e58950a95a9ad704e5d6f730e238a03 GIT binary patch literal 77377 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 G!G8d)XA_qI literal 0 HcmV?d00001 diff --git a/doc/1.5.5/gug/_images/guacamole-preferences.png b/doc/1.5.5/gug/_images/guacamole-preferences.png new file mode 100644 index 0000000000000000000000000000000000000000..b751e8dedf0015c26482a6d60d3e371e2430677a GIT binary patch literal 161522 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

    }ip!`YG48>#}t=>)zh450R5uTKHa&os`jtlYjqX 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 Yam|C%D?1L%=EErTX+!fLvvBkO0gnuIHUIzs literal 0 HcmV?d00001 diff --git a/doc/1.5.5/gug/_images/guacamole-settings-sections.png b/doc/1.5.5/gug/_images/guacamole-settings-sections.png new file mode 100644 index 0000000000000000000000000000000000000000..18055bb4191fd6c5f9a9f52ff8b3046b8ad621ce GIT binary patch literal 11928 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 literal 0 HcmV?d00001 diff --git a/doc/1.5.5/gug/_images/history-table-with-recordings.png b/doc/1.5.5/gug/_images/history-table-with-recordings.png new file mode 100644 index 0000000000000000000000000000000000000000..9371c04ca3e5f9482f667e2b381ccb5a6633143a GIT binary patch literal 49106 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 >s&@xV6Go_Pxmnf8>-Ed9 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 literal 0 HcmV?d00001 diff --git a/doc/1.5.5/gug/_images/manage-connections.png b/doc/1.5.5/gug/_images/manage-connections.png new file mode 100644 index 0000000000000000000000000000000000000000..76e4c2f291edf49f62181f904a7b828fb38965d9 GIT binary patch literal 87829 zcmd43by!yIwm149N{N(|gp`N^QYuIYh=hoObT_CV9nz(sG$Ilb64Kq>DIrKBAl=;^ zXH3_6_qV^jzx~I#&iBV*>E(Kfhxy#|zQ_30m_9G0C9dF5;Gj^bE0Rw{4USCPMHsK{t?_#~!{_>Ws!}-9%WTg0tn3$Mjlh@x%OwGsLRXwOVKV@$Yp!}GSKu=CdiH?$!ll%1f^E)P) zZ?yOBDU@Xf2NQPu{Mr7>9|I#dH}}O&wM&;S{rLIw66&7G5W$BJO^U|9;?Qs|U$#|~ zj)K>4-l)U0u(SJEQc@y)TxPefb@9@r$+bTfC{&q7pyTe+WS7u+W31bm54=y^nIFL_ zRgOhtmUPG>r{j>ZY1B?N`2~OaghFj>ZPiEfT5l|6X$@65l?>lm79}n&uEpt*t@HWmzPGP$eWTA+7Gg5w zjU=@3S$g6`fuVkYTm;g&$^Sie#N*rBqkcVBf{FHx>x3QE{I1Xm}z-7+3?Zw{LH1Q{UPk^quu3?FMmef z9$(fmH1smBKE!y{_020Zl%)LaYPyDNd)S@a{QUa9H2Kh8IeB@`mmTEy%*Uwis1?>G zN`_cWH(!}OsX05k{OHl6+>#QB?YW7w~r^n#s%L^#nD_8PhMnrZz z;URJvrIypV_M3VS`1!vZwufO|zWf+|@9NVD3T_kcZx5X=+&XhnhV|^uQs;5r{>fv% zvmjeGdzFZ2qm3o!mQWJ@UN5&!E$Si$#sw59n}+wnfqhYXQext*bM3+L_C?BnZ-^i5 z?Y&0|s*l13Op#I7_TmN)A=q(ecc14Ef2|-So3H zQQW4!+HR+c>wmW>q2dSF8d|Q0h9{dXG{*BaaBuk@N-C*YS#hn6mc3UkcscpUZoG-T z=H!B#o7=^U7m-zY;Ix-%a1CxFT>po>JWeggMMh#$()!j`Y@zd$yWa#H-o?5eVb`3W z@mE$=L;YYDrwh+UJlRTJ;J0G7PG{L1eFO#PO? zrt{PBbKR4JO-GuXF2Q458n=_YVFz7ZU1rI2ww)o!x`1V<=S@Ryav=8vB9%04jKU);d*jZJJJIIP0%+XeM zecCn1#P+wLgx-g9{lkE(NK!$}6(mp>Td)f6(ld+XDZl1dIbIe-zcTC5f z1rL0o69QzLa^1aaxwFtsG5(91iYiyH3CEw}KF;RmW?Oj3ms>7Q4+I6T3knLhxnW{p z&~tDQXghCS8gp8&nrHs|1{ErBsriWUuM5;l(6}TzfA#tL^_t+p1Uh_HVSP(LK!C&G z2Z70-a+1BhJ(T-Emb(5#tp{KD=E0^u(lX%i&dy=eeGy`3cDgDSZhQIiWwbb@$~kR$ zB1~ZirtE}&Uv+Kh>%LS%KD#xIjCZ`Rf6>CvqNDJr9>j6wC}t?Nk$ub5s-g&I*LKyN z5<%9zNJ3YaZn)Ug?{Is*p{onu)zuY>qWkyn4A%vnQ|%mJZ_0cV@CXUHdbXS6rhB+G z>m3jvc6zjnChWko1ee)%F>_{?fzkEs@YM>mh$_e3dZdibwvi0|{(XDC#Hbeo1$7`b zIxHmQdv7`8x!Y3T?b&;#cE5~`iFlm$R-Q7NyI;4PKsE{7!}vFY*#`^XgOI{R%ffOw zFE0<}4rRSRasqZamPF8XMJKxzKlW z`}tE$Nr|-BAWAVP-3vKunY|kPXU4wx3RhB?)J^ApXXo4ibPgH!4octRW(0RV@qlH z^msqd_0$oU;vQBIjnF{a3dR+R+WvkLyY;aq_!S$!U&SK*7um?m`>LM&imG_5pbOHhG-_O_5!6y*_6P71&8>M#3JN{wiwk2_{8Q7@ng<%V?j{P7X9UmXDEyE)S$LoQvf9o z(srSH&eEn7UW>ETYu%o}s`7nR$<9k%D%kf*}{0VPn^|EP}r)tU=mjSTUg;EE= zv#mrMkR?(fP2^D3abKV~$ce`ECc3m@(h5)T^C&=elBp zT#onZ{`{dv4);uJ2q7hUS4> zUuO6s>i*3Q^S_V;!mAIEUqw&<-$=s$dm8Z{B;g+#k!oe|sxz7p7k%+57B?Av6{gx( z|3?$0k}KauMHTP91lTJj;Cd3lMBXC_;Nrb-A`?3LDn9?o$#xg6+@1akJM+LOc3~Pu z`gB5{sAnHwqt^d|4Q0DLV0b}-PnVxAeaJl{02=6f1*!fV?bzwL%fBRiyp7vb40Uu+ zj~N&kzG(oJ>AqX};2sy3-Y4VRWg4B9AwX`r<*9RU4Y{sivcW~~;IiZKVhn1P3plp? z{i>`YmjRYH6E8h|V3eq+0{@0`#lP6kKX2?m_|ZSB_ut<7Kdbj2>-*1l{0B|@7IJZI zqV7G%y?dfijkK1VT3WsXBxddfc!kNs!z19ZmDpx?1ci&&%ljEio-7Y5=|IS?*f(1GKr5u+J&nPliAso z^UtIev~Ll=Ck)Xx!&BOo6DA~he?n%V)8?b?HBr50k^4e8KG!|ViT$EjGySp{?uYAe z!aSiM={9;3l5?AokGY+@060ol>N|xa7IF7gU|S)3^}z)I9vNZV!aqZN8P`5=+&ek` zp6mWz8C9=ez|4y=L+dK3{a}PSF87KE>oLIktED~M=41X)fN1&nC`7Pg27zd3l+Es{ zYHNFVcp$AF+O97^{wa93P}B`V%_Xp8vyNpcXTy(j24=GjH}p;~nbM^NyG)L;P)W{J zd#jXO87a#o#Pyu*iB`y(>CD0?zYIoJyJGqO z5M%4O#&D(jXo&?7zCN_NHlv*CBW571K$^B=!)h$2#mkJKk~vQXejjbdkd~H4MNbs! z-Ld*Sns<-+x}USNZ15-x56e|vZo!Rx>vvZwunD`Z_jE+)4KaAki#{jsGP;XX^QUYvj>~jIWt^Jmk7EIK{`g#yF$Cfsxqn|FP56*GHF+3gpiPs{?2gbH?U?FZ{Idcu~&IQYo7!_ zH^}$r_ixqN;2yyH(@^CeK^>2Oacg3AHQ@0_yxa3Uro+U573!e8>YAD1VPay28YuO? zHTFBu8IcQ8o1^7ES(k8PrJA^&dvUX@%p2Rv{kZ1y#;rx|*JiJ=9)Ems2@@`x5s99<^_7E=OWY3d?*DH9sj}r6#wtZJLAQWBsW{pP?GJn$GRZ zI5@d)SJnKlKcqlILsO}==QJCuOyfFp+57!!V}D-)1cHG~)%WnTx{EzYL-~f6JEM8g zg@lAcyMP>IWS-TW?oqyb|9*2o-F&iYf2`O3TPp9$W1SZ&7?j#Ab^5VyU{YE~Wp}^$@>C#Yb)>E|*OHV1_S|`C!@RioH-^ zrAM#yrEw{?m8ebclbe1j$d&N8d+>L0-;pY#GL~9fcG@%vZ1hjHrel@Ys+{&e`1oLB z;8A(sQ7?`I9f;QrKsFrt20)(#WMr6e2PLmrl(QRibsK)==}Qr zw_FWg0~G@qjUkYV_nmIT2i>ii)>4bfcUmK9SFH3!2y<~F3U>vv6W8nLX(&;18|vYK zu{VF$4Nc!oBq2@MIN`FV$CO1oC5Se7pPRM#Aolu4!|UO>h1x=_w?n;WnSQn$uzR5S z4d`lm;twAMdAu^iO?YZ(ag9@mzTXwMxwL;z1x=VV0b~EMeKNk%4UM{=EZ8b@Z!g3@ zuHWpES621L#*?V*y_Y#uh^rqhN60HkEE(AT$$1v%^I)Jy29^DujFKVUrYPRb_3DjZ z@mz*MMP-4eqU94R9iVl^<`7w&z2xIQ9D8ISOpsuOG7!^se!<#NPh>Isl&@HN+uh-c zH;}w}6bh(w{=jVY$(B@Na33r5`@$&MvZO(&aA_@pI&*V3ky_3^4 zh;BU&XRl&iKJ4t+bbNbA2}G9j*|TSV3A{=rP-2a88*G3@D!Dpns0jdtSa^6JN=kUt z3SWB^y%}T{0%Vere>6WgH&xIj*zhK&>I2f}zJ2>v3ivbNeCp;h5iJkT`SF;wAXhbR zb5EwAw@Mz~WtY|9SaM(2_dLRaMl3z%W1>d`lC?{yi=u{grb-ujYPLM`cF9-Dw7u)2 zmM5Yp-%mhADhU!EJ&Y>-T1|*#ps*6#7GwLr&P0JcW6+DS8aEoGtZvP=qoLkoToHNw`j+eAEEz(oe0+RBRy`KF zapOj9Lj$_-W>BwGUye47xVZT1;li}GLL&3ZO^l9?j$A;a&!Qg?LYc1%W{^Obabi-E zE-=;ywoAlnMaGvggC20Qp>kUm$GsIFIFPjb{OWI1 zU%q^K>((t{Ky{wZ8tHbs2JZYcUf-*yWvbzy%-3+3 zm?$HnMr!Tyd&jNMc==gmdeXF~+EsWjxT$#vcTJ_a`VG*tj9rte@o(C(t#%_b4l<$~ z)XjHk^*tk>rVRYGpfYoG+(4D)eaMM!rhhW25cOH}dEQgafTYbmEU9moXq-?SAI(KC zo+O|Xgcjm9{X8d}sK6QtJ3OK8Qepjh!Q^IH{n#kg25#d_WL|h_*yRYPg$Sb1hXZMo zM5c|3EsjIA?0VNuqR#^76F3gUF46LFV|oOB{o%nYps}iJ#`ZDl+@Q~M9qqb+JqpEf z_ik_W^;d?ICF8CQa9+AWAwwZ-#1iPX$?yD2@+s1nP&>OeyWR-|KN-ybN}sYDv1pJQqNIIo_!X&J@WHjUb~t7sRq zc};9}!c9lFv0gD?=ApuEicZDdNY7%iCFGJevu4{D?j43nZ}xS3TtAK}nH{I`gO;rK z&s`SR##32AjfP@9uk-OB*7+6&8zT$>Qqv}buBo>ZGbOmXg2fRvbR-3&XzrY&_0{#P z<5PHx#1F0sPQE9M{o5ml?GpAMJnioPF%$i9Kt-+TMMGfghW`-V49e zKJ!}u1w;1V`PnHN>SyGAKp)h(i0)Rq*qfrOqvMVTdQGY`FbYJG3f2{N&Q z3m`U)xgMJ$avtiQG&{@vq62PWNh0+G=oQRCHWb&c-9E1|`%?}uw$yextaHRc$^T)p zzKj*uXDK(OgGarLNmb)F4(M^-$Nb@ZU_+u;R9SR`=Pvp+3$LKItZPoCWswX#cXwk; z6o*Ue`>S^%=Qb|yT$=jsNAvwzKvR(FH}dIM+6;P1`8;w#=tjPZW-l@FuP5ml31L2X zaB^yi$LyM6XeOD~Y_Vg(8cKXfYmt9d?(yj4C<~TUf_$(#LxL{e8*5q~CguCr^By$? zIo>ADU7+-$y3(RH&z;b2$;oz#&p$MR9xiQw_D!Fo^)9AVRrDkYL11cQGzDSVXZFg% zKeFZaoAjt#At^*q4HU-eSgu)r8Q-`@A;K0u4Ym36w$#`RzxCWR1XIF&@v5m20+Gr) zipLyTR(B5%G{l97cgZw4U0q#8PJrjfk4O`cQ%%8ex$;3udyo0-TAkGMZo5V5gX|$+ z!=y0*y_E&oC8_tgHw?!fnLXo(rarrdUK#eXRzOI3we+(CJxNf00%v~T7T)88PYhiW z)mA@pKYo0ZHXb#XNPl-9?{j_CnQBYjwMj`U+Vj9j!Yl3?c-Fidw}i-qZ+_-NW5OTY zs?iH&tw;`378UK14juIvsdV@&?2_J5yOjd)jqdK8hyJdIpS7JI;gsq+YVbMhf6sI5569XK6xkWRctU(&Liq*i zi~E!i!;2$4CB;A?IZuL5tp*363@EzVVWL0+0VP@|sXb@q;BfLI4Wjt~)oK7k(7Ypp z^YN-YMc2j~4i$WLkB5ZUKehkVH8*Fl^B zwZ)kkPw)-{?EDS5zRtV_kpkn*n>WtKt0hmKJb7^@-U$*B3h~;&C(@XeKiZ5U0%`U3 z{vF#GK3knPZ!+XnL2Z5LxFf8fKs@HSd}mhk(eqv@7KfF2s1D4%fa#M*i-|Rh&0LPD14dR!fo)ARB7m8_KUOX;xlB#)T5xy@W7s;8K4 zWNti?Ho=t^IDTFGYWPN}q1a@VVv@F;4j!cw(~zV_mShPb?@Y6>t68-xyYP>vB649= z+1K~ljvgFJH|LwSs_@`?2T3~4u`3|rXyiSkcR=RDq-?CL{nnMg2xP15HA#S}mbIao z*YmWk)OsF|g2ya#D-E2(NN`sY5)yF657T{*+6}l0O-D$fUwHyJBf5I^&Df{c`uIFd zOb;Y)nxiHz;!9W?oUm)n^LGSZ&lWa55n_MTvsgi*Tsk~Md%HNn+||nSBg3a)n}m}; zcd6U69e@>a2 z2hME7150{DYXr(ag;>>yx2RrX7RvGpcrH+3ak%3kGZK=Jc$tnA>jGQ*Y#1ZpKm;Zp z;#PsjVgXi9X<3<3v{o2+H=vn#rpc$!v$5eVE-r%f(*y`vVXQFOCwnCAj+I_Gt+S#) z{?>MIRIn#dehV9B>8y^-pB|a^jW=)7-{dAaGz;PQ$wVU?U+4X_LquAMS+BlD-zc3j z`T2I}N!ai!e<2ehW&Ov2_!mx%f9)4@pLt_hKW;v8T_7pP;mphP4#XADq0^>sVY;B} zCd8M-sU+T8{jrBTU zoK%T9N`3YyoS@(y(dISPA8p=EpC=BV6yi4;Xj{{=P)ttBKIv$caFr&Sx@$d|xMjao zKo`N81vRE7CJvlpGXRfKsNE&yq<1wL#CYslG zetnOqApcV+VNmL?I&!KsLAw0SC@yO8r%?PaJJBptgaCECG1G?I$G&2QNFLeL#9cq^t-52QJ6`wE);)IG#PY}C| zOUaE3>{y{93rzQk5E(&PhsTVlOpP)kaJL&EIbaDcN}+K-&fS+C!VMp;w1;wnXapo$ zce38=M`vd)lrgK+0EbY`IN_+`YZA5ULEu zgcxX4gfukxp!&3`)Eq5k@R_G5X*foFWteZ#DgF48ZhZ8LD%h<}CxcCBlkqAP6M?@pcuk@OCiqPWo$vj5 z`6a4Bak`=3ORmCs}NnCEy*1FANLJ+iwrHTnt7PWPod^WM{N`zAbD4kQpXzPWrr4-xp-e7Z`N3NWWVe)0s1+jQ7-wmp0r5*onhZl9c-=;-NPK(&p> zx`3YpKoi=|M=qbO-Q6bObsQkT0;y)WaU)UVFf^^EsOUaK5jMg2sr~hf04VXs_IAcD zlV#Zm>&l^I;I9pf9qZ0V)uY$Vs`UvtpEtaT>~P7|>*DtO_<^Bx(0OJis$r~`EQH>< zC=hKgq=X)C@?fwBRf;(;Vm6IIb8e(E6F=f^yjFszu6%J?d;7SKx9}ivxUkFFH}=CX zrMCgsbG*I3T~XE5jn^SxC=0(DP}ez`J02EjDCmrK-{=z|Hv2yNB%$5)c7fQjm-{Qf z8-@nuz_-*VfY?+T$odOnpGXQQ^0?2Q=xmAqwL&8xLDf~GAetlXITFEXq0jL*A3{0} zhKXnwIZb?K)dAw7JT$FD|5pg=KP3ErME-w_nE!5~{MQ`Se|*P(a}xe}jemRs(SN=p zl~vWuEL(^CiLyv;8NuSiUu_1s7h0a{A+|^)r_@HrUqe?^fn|g6>HlEm{9m|={|}DG zPCcWAk&zMk0}EP^4dPzh`c?2shU$TZFz+}79-ud3p#Hs2L392fZ3t~2K~FOGIiUE8 zfu8VN#5fLAIHZ0s_g+9ppPZUPB3=sZ+<^Bv?bb$daU>z@d;oT~1W z<(rt8(1x_aA004*fTMy`Fabq7y*sbHwbkR<&4y~1;~l|$+10&!EvG4ES!51Wj-<>^ zX6bF5ne^K%>Sw)Uv1H61{H`Ytpj+TtTU$4_v@p=op|P>CMQ|D7`1<;`-C_51CrA*- zoCB5gesv&wy7hc#C_lG=l1W7upLmz`=$ogp;D1u&7Zg}7_AnxGE9iG#5Kw~Xi5AP0 z3T3B@DAh-AW5I^>TLwLek_*E{8Eu;RKYly`XN(*JW7b*}JOdB}`xa_JwerdO{-Le2 zla0p|3N0?~$lBe2?rp05$ewx7w|*5G$)kiJ7PtXINCUXL>($3*S>))(4P`;z(*&|V zl^6Lfkcbt8Q=s^(nrVT~bw68q@2#7e8Jl<@753GuS0kdL^udgVHYq>ifrMQ)HY|!} z5yhykt_}$q%vkXv&GWB54`B`(XdjQk3f3_&@ci=Si0ZJ9D8~QGHOeoIy#dhxj2x1Z%-YLy`xr6SI9f>otp;2WYIr=qoyRu)zSuR%^jlxv7zl3B(a|q*v>rm3 z1s$SA6$6WMg{JF}hNuUDGdceRa+p5J&!ZAjQ=hC``x8I6bm(rO(+tWgeyjLXjCyCO~6?rxU3Vatq~ltK^BxHALF8vw#<&Cc#_*^bEjQqwh6RaIVoetr-k z`1C|lk`PoVlHb37ixAT=A~A&E*jRSHw=1^*a@>KiQ^H$**i9r5fFpyJe-(~4F#xrC z$Q*!&r-eo532BhmqosL6dHNsoPx8&itM4=iQnNsOg$2$P0?%%H5+KU39vE;_5JA!d znpQtLs&N9|d)qFcIWe#(n;^m^`toJ6O1^;)idIiwpG83#h?=gE(QTz1tvi6j#Z*)x zQsq+utz1>*c3Gs!w zh8|?h!)u&+o{;@aFCH5H{Tmy?I(d$}#*lLTYd@k1ul%V{PC30jGFH@Y4tG@~{)IPW zA?Z8`!1pDwD$}r88ImnKgRLkE2hYa1LN4#cpzxL#E0@dUG(z zZ3M2&ON0(_6@$Niy$xB%Bx~yXp{;_-n}W(=5SOxFui9^Wem;JF#)R?)+#9neZyX(_ zrfn>Aw71GaMMc#JF)UWdXCWmcjZ5hZ_2t6Q6seJ%&h0k1P_JhFaP;&nrWP=%^w7wNAJm&v%{35B zjjtwy((D%(M>~tnz{>i}ss@OlXGKNDfFU5`MAnj-dL8h^nA;KY#h;2dU&OYkxR?}R zuzV-Wty_>N{y@*n{4_;h9^RdipMzrG^N|zS``D-{kk;D{A$mg!LiZE|AwRDoK|5yj zx4(`03Dx=e`Dc9!cUo;>GkrdmFRqg6UkA^rzP45vdJfCTRH0EXgl2+ET~EsiM7$xl z68`4R(r`8#vO$o@<7|z-p58@N@Ru)%(cF+I>#lKgiy8S=y~$Q}mLwH^5fvJu4xCfW z#-@-!WP#XC^Qa^yCg$n0-L&s)`WVL=v(0y(V{5cluZ~rzrxeGTMh_Uem>$a#ee5B_ zP|nc`eKv6~l&OC&m~?GdJ>3elv#<9laqTVCf;Z@U5u<iehSXg2>y_kX2ml9Qai!|)|JIT__Uz9c6LG?;^fLm1TBdu(@g z>n|b^P(L#E4_;ng%_EtpiN(bW&1o>RH?)N9EB=t@TnKN-j`?~;-j->!}N z0ILskN=&&&Miy=rRJJIu3_@?Hgd7RZC6HbfCyy41w$sz2k`KX)xPXF85}s8V75rhZ z+93j^*AJpS%YD}q%}SJQP5P-vU=K~#dtLr~{N4PN;=Zvbll0#J@fPy8UCQRvE0MhW$Y8HE7KHQiH7`Awd5$)5geYcq+@(g_4p|MNN$!_#3<} zMCICD9_&tjPKo-(e>SX87#K=DKQzz0w$z`2a)*7oFiLtaptn3b$4Ka}Fb(2M_UE^M z@7{wSvsT~>Pk*FwMWIgiYtA9vapxEOUYwvihX4D$gSI}oyzB?>Ul(9Wn@i6fek0FSATdl+_OWr9R`}l{TvI_)gbqx$IDl01kPRJ86jW>wSHc@A0WmV7;R=AW_ ze10#m0XkKlaX&MB10kfn9_i>z$UmGb-+O4fE6XFZq(Vtft^-cj1B(e1ARBy8jZB7e z!Iwv)NKsD4zfcQCO?Qe64WcA~T-1~*`#s&(-)Y#~CUbH6Q?Y*b@?QFuhAj0UjofYs zMML78RR27r>iXXJXPO9PI6iaDCMrcTl@Jd?1k+8({yx4La(iC0##M7x-RU`ab6%iW zg6EJq%EQD65G@xjw$SVk1;Q%dUAo+Mr?=Y02~`X9Pr((}88oOEwzpC&RWvAziCVO1 zemgusQ0F(cAbTDh94!2~-gZ4| zDKINp-wE=Nxa1tdR&LC4HD{;CFrsn+2?)X&fJ*QS?hGsBJz;QRVK66ln5QxP=SS|>=E z#6CQnUF=X!^#(8% z$)yh4Hvt!Dt>)dyGwQv$GE#yM#1EjzqqlFl#~kLV{~k!NXA!#*)HRL6)I^9Jv$C>6 z@&Y3(NG8mzf{a}&b3k7;xL7%O7g`h{DJceY$DyI2+TLFI!<+mr(>d90%3{<>Z3eNu zX0`5U_NTjpMQqmVV-Gc|ov#7PM2;0AW&yNv-fCrXEV}f3+D2?x&IsI**JG8uB99*j zM@IUBeyb18aVX#0;o-Ahien&_dEjB&tdD6PW>vF|Z0+qew}rA;!bHFgMn+vI3yy9M z^!@)dw_S(;Bk3v7h^OJWBN{Pu>=a8!!(*M+-9B$Z1`hKv0eeSBW_CfA9=36K_eF!( zhxNk3!}mr0b~)4C%$393@*JVWC8qlyB!7md2UY7E7*4BF>stlLDhee_J$XU^%S{I5 zo(v+$V6SLR!EWe1yz>Q!7a3%>!6Nemir@$NpIP;TjeV(So&<=N2EW!9s0t#bTkYB( zY{Y|BOag}r!PH1Zp6a2a0`EBdhchhR=i_at9#~M&bYV_LJm~rzV785!ss)~DX=$*- zNrBUn0QV+=K_CSOpH|phqJ!C*NE+O$prGJjcToGj+2izV2qx=oPBk$vM|}P20}xTe z)ZstDXvl}@LBuElT&x6WDhVKXPeD?+Kg|pTT7oR~5>jaDdO-P%-9|O~^NI=zu0oXF z3xT>ETwFvDZEFknU&t3S9H~$^^(2^rv=|}$1U);u4DTw8Sdc*Jo&vj&ujCK()hA|B zBbPsd-Aaq{20UPV!da$(khJ1mxARjwBw_$tfVnePh#lZbBlzB;z}gzWO9a{Y*07z9 zbaqNRA54BEN&lYA^?TkX=NuT)O>lOScNuS@E~21Pc?JXoMBFp_+@^kP^ZOs-_C!X8 zY<0NkDqKoE>{bH<1Mi#9BVW7t_#|)H7#;V!Xc3BdudJA$2}8Yqlw%qL^u}g&Sg|id zSq4;oA3#wMY>C?9vTa+=L) zSDB=-P2<@!O$mvJ)Ij0>x$;vTzVd1|y zsKiw#q_1s=xGqSU0s1KT{*i*1;Ni^GmEj_(S@Xj$&K0inozyU0gW>b7-LgEn@D#QU zV#PxAX2ray5zr-sIz3WTZ(+P&;5DcvAdr1N0Nn%5%w&{#bsY$lmJ7e=p21|+VFeR? z@#)eoY#9B8U-9tMKT={{eZdg-_Mk;{ubmwjTe%EWQWU0LG&D5{$;q)`5)ft=BJ1di zPmSLK$p;QaHr*05kCrAz&%m&`)y{sGK(y<&porw(h^~Uv2HwA?8~!`?n+Jiguk_jppGMI0{d;r>oNsFIEc~COs>3~CM#x;5;<2luSk&OhYL|R2 z(}J6;cBb;wn`y7V22k9uMyByWKrUagY1nF==`43|H&Y$McDC`R2 z&~4D4G!jna+LmOK3X6{CfqnJBau!%WW=m;?f)x8SFBO>ESGLUPBW_ZX9_CF9Ld z>AH(e)vrS+J;C?|qus>Xcuf#s1L&A>5SoWXeN5Z`S&<2tHBuL(r9~kd>vKp5oEsf| z{qMcpiA%Q_85u7@fZhv|dEox}1KN_ARbN8%4)9nI;|$ay9av!~e#)K+CC}!#cME^rX1o^WVK9ae)Ib==_0+dBz z)&MDCF6KK_Ah3NAn-4-AiPm4`juXtHKu&7_1t{wOnuaY`VV+upwz{5R`G4LVoF>b3Y?c0%@4V_^6Og^nMsF_ zgbnxa@bX?88yibi&iU3hq|_sweoXa5RP?@g>IGPJ5-)seK(wv&6(D#AX5Ye1|l`QZL9E(8;~fZ{UIA8I40)K*~zv{ zOfj9J#BI110w6?WNb(={CK)Wp6!47~oh8spkn#m*oc``zc~37dA3ob9@9p`nRG1Y@?c_qeum9TN@h~>Lb+yd4T@mLrnx&*evx)?yUTlkA7e&f)rQ?)@dUc zg|FzE=98k!Y18p(RT+Lk#4asxx1Ypt>Nk4>IWvyV$*OD%ELa*&0s@E(9sl_8g8-S% z)0)5Ovc%Sp$y{I#v(d<^(BHTr3iG1A_umXaQvmaM3e*&t*}wN*BI#-=%uR;zV}sSH z$h!(xe!=~L%Tb}#8B|m+kc$91377eaX@=p$%E3fu+o9a@lm0wo0^)6V_LH!7^XoB)kb0!ZkKhdm@dd@(qyqoB`lr<_^(;&y zI_&kI@*=L6!)<+r+V}ch5Cx=F?YEJfVM<~m7K$EDFBco+s0dh;GE)^YZ32{k@6i@@ z!Wh6MRB%K@YF?M|h?W@9gXgC5#!ka}+1WI&m*14{C`w33Y_3(TGoMpmy$V_+w9(l@ zy2l^9fnO{O+*C})U$hdqS7c|q*)2Z4si@B1V=&k8wQWx;ta^6wZl|$vIE6@kuMFBgvH7b zXDgTOA2QA5Y#DW+*LR#Cnym4mA-p-G)KI$TfWn;R^?A;6u(XMiI1m) z*k6BV2y+hCbY`|C2$}bxoxHe{mugbcS6B_RY^-bI)YpqNHZ@HGKYHDp{8OGE zlZa6Er|e>Q#Fyw)h=69i1+9`0ECM)0ZFjz}?Jgg&<+Sq&ogI81;Cl+w+0|Q#{4Pf} zAbnv>PEIP4eouc9T&ma%TUC*byGR1G6m+Lg?=dx0?g&?M}3?yhy~Kr zuZrgiEqU@xLP9ivxn&qh6^qROM^)fdq0<8zY&4_A-|@}f6d9J9udJuv*FGBoLjM>P z6lCB~&dMIrx}zqM9w>*z|DbPA0$+gOCOQhiebXf!ig~B`$0{V28Et;Guy>KP=IRLu zMCd3a`8}xR^qlt;8qmhZ#wXSSu48%<9?cQuu5S;!!AFBBp^GqTq8#& zHX%qZw5v;IRRH=5tN__Q99$hBSdKJ@?&dP2U!cI zJ&}+F&{f94;B*F5<#s1O^v}p)m%^f=ODJSK6Dkvue1oaUbXM`DFMlL%A2q9L!x#@T zl&Ypik^JoIJAl;zn^u;Vbztid5)r)vFvaljAvJWPS|lV>Z9Aaw(r~Y-r-ul{>1Oa6 z5Moy~ZL>8a=?_yA;N5^mNRBKx%%!LOQG#WIlB1HQvPhAWzxv2H25LbZ+&p`*CN2M+ z4FV7gywAI{MPl%bPV8?g?__5ehL|t=-THAcIG(L|S4b~HV z0|XhCcDJ1cLg4-P&*&^nSM&J-sZk(BV1qpM7~T=+&Yxmp0_?^dB-Sm()&InbSJ*&a zNJWKwWn~306gp@|h{uyMo!-uyx{`N;K7k^W+4V{Iw{L7vikLvB^Gr!eLHYy$3)!;= zd_qFnh&2NbUU<@%rLGLYDka2aWo9S2by|NhZT9?N8h>(Wi5Ut&6Kpmy@DXPC({A()R2&I0<7{BTmoM> zH0{VG*U9=z-Q~7#5OR7`Iy!Z)>E>|T|3HaMH4q#k3j^_?WS9y!l*${WG@U-F%^#f? z*o}89D)=3rk26(aieSh4eDQpe6Mrp{9Q_?_3<~Fh)}-T|IPY1#a6Pf^%g(Ic#KH8B zuxPQddPLks=?EXa^Nq*8!GyiYyM6p#d#*j$GxA03pqi>*N5|KyS6zZ1w+*^hcrEJ} z`ZK~I5&aT8P;yAnZ~z8mORIF-3-zlKVjJLLR~Yjet}LCd9&%dMTkm(fJ_2|Sw-#Ko z7d|1A8ks^`nJ#Pt>}+oZpDyt<6?HW&S(U}+07hfaqk$QceqizUwJSiR_zpBd9QeP_ ztahrl*6O^8<>}UYd_fM-i%d#OOUYq*dAQ9+?ORPPd2MTkoFdHTW~rG;86=z zLOX|+4TW91>Fq$e;G`RZTC+rul=wU`oX1tlNSERB#!G7|LHf-7g2Hhx!- zEE5~}{{2>_#y7AtKLc*q|0pPA7O_{RWt%3Kgae>7MK0+n@=_otc0}`r0Qm@F`euK@ z&CLzERSV>m5}FAK%dRXEJw>Kx34^0N&l1`GhAR?KO#cd5;8^_c|Nj5t3;*pR{`tf| z|I+_++5ddvpMU>vej%wnt?;cu!EX*+^r)Z7N>!TY6fmySqz8WBBbQlH0Xu;F$de*K zI?Jd-SUcNe;B%XMdoST363SKVe!Ar1MxG_$@xyaWQVXo3M&Q{XP%RiS&~`(kwnu-0 za0wsCLmHa&Wc7U@ucPr&ORda`5jaQL5`i)^gT)8kPf<~qg+rMYZ9bUELor9@teKdY zc0<)yMq_xbKS0jRiwC*4EE5wG!q82>!o+_6dPX6Up{r|kr$6}mZgo-&{mN#Y*5T37 znHx9Zep`{Sl7g&6UCwzyqnpe+SZWb-iG^pq>?-m?%Tfg|e39&s_pRF2-A^Eb^&2M< z&m|)}h%lJazxStHH)xXJA8hXIH1_xRv*iw%a63CYw&^@y8%lgy3pap5@> zNTLNiAAR`y?3=(>P(H^AOqEnre!y^5$K5Ugba%+$LgWBBIwdx*O9_wLAh-w9y2x}e zNZGzH2M1g*J9w+mO{@QRx8@^oNnz*yro0ecQG1?U9@s~cBg#k&NyabYfrO33x3auQv7%Sj0S0xFJtiJ2yh z?#nnj@&Q0d0fi$mG4WGqs2DsB1K6#-z5N6Li9l3YMMVfOdR=lTkJEE=Z|iKy(%ocT zAZ`FJTUuT&_u_>x{0L|#1|SAR3%XFa19NzhrzZv_zvEO>n%dlkM^C%8tBZ-9J;-j{ zB^+WjdU|>)g|7*#tE)#rg@g==C#>1%pFe;->R{ALS$UACO9q}*0B{FLDR4{?X=yx2 zkj^dW!u7(on3F~@lZp_|5*7I{c`oSdGrJJq0L z;Fhk~!iybwlEDU4@4Ui!VSasG2If#;E_xI$>YnNF&b#jtAQM#X^hnJI)WUw`;^KPU zpH2d%atyDUQnm(fbW999=E6LJ*E-q3K^>km0TePBGzXx;5TvdL#dC$Vv-S2<_6~ME9kTE{6L@!2DqYdZjBhNQ61R9^IUJ~ef zdZcOb$7@OZ#fw_lSfyZv{00~gCd({5-{R%j$sy3ykMLj!c&f+~Jw1AGE&$K8kB*1- zZHn76?1zH;QQy#T2;&b9v!Tk!=$W?5E(wTnFIzt|Lb4(lw*EK!DQs7Gh{GC;uwMQa z3$i)nK#ZUtq2P$Zqm=?6KlzoxAMnU4*oN@zEsfpBbU8}!q##L2Nl<9JQ)L;_6*I&^ zY{kaHLY`%IaC8*b)>n3JvzDqJ4A0?$<97h7g$!k&Kp{05Ee!^RG#~7Z?feB`L}BdO z(sFV{(0KaKaiF3kpzJtd>K%D72Q)-DnjLT(gZ%uYd`5EMP(cGDA|%u;5#ZqoXI4z# zXl0816dYU!&zF$^#gJUcRRHRu$ynvri3uIJQARz9*d#1UiQxR95I7E+KD@!7r`J9_ zf)a=ZPbSgNGla)6o!^zvf{ltKJyI3YdVV+CTExLEghB65uwYvd7uB|i2?~<&+3jj? z{|;;vDG9*L-owC6#M4mbO?X}i8ZrQ=+n^`Fk?u-hTk zq>!O><<+ZK6}F^)UT|OF!~;TC`8t>cidpUN?y>}7DjJ%goE&zL?h{13a9-wG+t?(+ z&TQa70#awnpi2i+4&Sfx>}hIB8e$&-Y&{J(e%goW+XTQ724-eoh(r=INsjwnw3XGdCFz6EogRRKJ?!0|`=pH_d zfifl=FXEMvJ`GZ>`47CPPoFFv?~y=dWL8K;)q;d%VPP>5$iGGlVK#TrWbVQf7f_&q zG=Qh^03P=SyT9pMEI3Ayw&kDTGCw1~1HP{S9xet{1eCA|TV5X6&*UFGa&pY`mi=zp zNJ>e4hpiA^wC)y|uetEK?K9NpXt>3&rdT*QdJu4eEja2dG?*qoUmR_Mgl&l@p6+x@ z&;Xsc9NVfnKZ}BF90zdxz4dXKr%&51?N3ik)WSJ88p@?Jui6be6dMH4K=n{9SI6Ve z8#n++^ynFwi6F?_ym7-5{?W@*L8eTA&@r*Gb*||)!+}8RJ~Z_*t65~on*$eG2ne14 z$|JOKO}Qy00;$k$y?qyw&|c(wIah2MoCc}P8u;L4wgzuS%6Ppeb9z_qo}Qu&wgHea z&=z?Nv~S~7K@LzQO9?6@vQ{XX}4jo0=6pXV{``+n?4`evdh4V}!uWg(f{CoY>&booNl-Q8TAl8vMN zk8bPl6dd{M4m3?=@yY_@$c9Bcj)F5yB01SY5(oaiMP<{gi>*j0N~DZar%uhuUdA`& zuX*p#P}gg;$?IGcdUp|j|D4uvujTNgCr=t{f8WX^5?_yxh`jarwN;u@lMW&QL5)Wz zw3b%uXbFUI4h5441Ix)lRQzI6y14iWq(<`aWQSir2Jp*2czzu+p^LV5|2G<=N2ki0 z5(N8!BNOU}cA9g*@Jy2b;j|}6slK8O&&u*a=pwg%)^v`inM<2q_V=qha$oI#ex1db z{8WsZ1T{NCeh=hryY+@K&wq^H`d+xXeTW*i@kH2$b|>QF_WZVC4|yMYFG zYOPDcDPf*G5iDU^fW4`y>9&$LBB$F`xb5HnXkN*gY`JB+x_@w!Kmb0Z%-5*jmQXim z?%V=YuVXb2Ld2lC$fLdlX>E^%!HQd(wP>7OR-LLDbJH~I3^>P8Z||qD27(Pn%xhIM zs$*l9d0u0V@x$~IkNX{&G%e1)UW|vgQLj=!AEq>MqSyMf)-JeSe939}0Vr~HDS6T8ya1@TGs+aSW|(mw3+lp0-hLv;9%0Xw`=-Oo|Zcew}4*uxmX8vc9}{O z*M+}<1f^lt3z-0|&g2+Gb5I7pJ3>F)EXdE_bL2=HVWUX^`gwl$s?HQk!c#CeKY!8t z{wLS99q4wpzNt>Y?2aHz!Uc?S_T`!;oW|)gAw#+1J~a|!-bRddW$82{qM9haC|SS~ z4{*7^ea@mPqCUOOJhtSPX_jlk>O8Un(9@oRf`ZlMbtC2X;BgSntT$)k8T0c=pg~k` zeTEG?#82cG7AD~1wcpFD8%W*&j#)?u?|{=Nw|;o@p&PRjiW`WxBexeXM$nW9RF)2M z1g#I~;7Pa|x%K^Ylh>D5jlE~ye|rpygbvrBX{hPUegTN&yL=uZ5lSKg*cfqTeiZqx z2c}U{Rvw8^e04^|g-S~xAMPpj{uqutnRh?rrTqPIxmi21 zwkuM4K|6Ya&4J*>6Cdx1FofeND0_@?byVHw==2*Kk6Wj&)4@IT~F!ENR z`?q!EOPi{J1Uo-+B0wC)F;#@9aBAvB&y;DZQZ#XiR>-I1-c)-%sL;k<`tB0mPa(&l zL7lR5!ui$cJ}zKoVdXhz%*L0~TWNmncW`Vw(u$~o==`5bJdYg{wY@lR1jnLzP=x$5 z*2uAr8lritRsm=h049w(Hv#coL;3$zrM-%jh(NknuD-fCg-o}kue;>5aJX1+Y% z&j>}m`fk3LUYCDmY48&s;tUImitS#H#QB^q^Lb=JVIkP^JamjJ3{-?chRNQQPw6+N zf({`wUwmcpr!(`6#fPvM@?!hkz83Sa&S{U02Nz-O+RIbL9~0u(bH7sGw7Hm`Q2KVY z6Wv?Xw60F=k8OI0f;kV;mA^|{{O{lY+aY&)fw4fAHjnY@Dn>2}TBL6tBMO$(x~W2Rjk&2x4I8gKVP_Z?Wl-K zXU}RgL&s~KFejo55s$VE7qz=IIlMk;=Q@lEjeZR-HFbmdlAeADy---GBFyU6FP=|? z@g03(f8ajP6+c>h@ zJtFWm-J$qYywH0CkvU=8NAv7kDe5)dfuxIu`NGqRzN(j-RKJEZ`iQm^qYR8M|)7qWSB0;4uEzns@QJ0 z?lnjBP?abh)R>t24 zW`fs!N0>1@avu3A*&*@a!;|9%?;MZJejew$-^_zXl>DOEAO*cb3P!(5f*2tudeT|s zBXG__zDIssLw#tMZIzXk&D*p|G!B<`9Lx<|HW(~kOW!o*cnF@8<0`CF3=MOFS}cMV zH>PBPvuE0Ejb+rT&hY(bAMTi}q>w>k|5OpYPWIuE2s)W^HMx7t_k5e8o;>Bl+q#i8T;&D4elG%x z*9v~m@J)4SDfE|E=j^I%MU%R(r_Fw97B3AfOV9DOIpNRc#moU&@|!hyqwFVeo7*onWg?XjfXbINq-{PPc~< zO|C0dWAb?lpTR6jI}A_1J8IJBY&s?4Y5x!&B+CERvG=)Zb zBhrzG?im>XROF-4<70{2F7jP=BWR-s5saKw3C81{$C`HMQ26iqQ6YjK1|kxXzV2JtgXt7!*q3Hcm0@AV*7c-p)P7oKx98h=C|exhPTTY(7U%IS9c@^L!h&P zKppf+3H@)jaoo4BDehhU@Snxv76;ktPtx5ARQACr)v%FgQV7*cIUXa_vW)}#IZQm?eX?# zF@;}y{Z>O!vzOKH33tG$(4iEA+45W0S&uIy=%Ef15-H<}f(REHZAbdN3Me%96DOwg zQY2K07r+rjJ;ESReo4t3)RKrO2U7oX!-eO#zC{mO@KuMOsMlA$swz%(1N%f}H<$M0 z6WA8m`uo%C&qjTWRau&2`#GwqBkb31vbL;H^$B%WWoSD zPoe=zIEfe4hF=+2P&&d-cqQ>ai9p~g^L9wy|!`u<~aU z%U=)JEutx;OzNP4164J(wgS%)11Os-Zv`$m-$a6UU!S2v4+5%*i_1_}WH# z;mb!44~QLWX)R6jEzCVPFt15_MVz4Gt6SnJRQr}yt$M4f0!yD7*~M;8c*=A+(xLEX zl|X=amAIYs8Mk#eyl1EABhR1fkk)@N z!2PT4yNF)$8oh^TS&0?AcQ5P5eq2>Zwiw(LNOBM5o!13`zzPl&p?Ujm-I9bHH%0bDEM{=H?X$>Vmp8~BeYtIXn+p3pXT^~3Q?o%85hZ+!`O@T? zY1V{$_wK25en6FB_Fa1`brt|=V>XMN+ab-Yk6IO+?BX<}#aim`z#rZbNL}7G9y)w@ zXiy6?3Bd@RLKl25N@KJ%-bI+DU?wHlE?2uPjPkU~auM3+oH$<8uhZDNFD`E_eN)|@ z4pWoep`H}A1gnrE0Bd53CiYkDroqVBW{O|ZHp=Pa2-($LCu|$YV_%{v{VbX1Mzsu( z{$KlLy?_6AV7zG1#hLy6-~ZB2c=*6NqHlbyAU(w}4*lGSorGgl1S2?vBZpk#^63uk zM4tkU$V`_joW;rI*7PIySBG6gwmee(;(_)9uC$kaoPqKB-O6JsTT`u%ZGcU%{!!>D z!#rvuz{cSS%~nCy1T1|6Vl{r(cU6cQCgu*K#S5pS@o6M|4voh}bpSvR>bL1LXD$p{ zI!uzy7^AlLxTyed-_zoL;TmHfc%tyrCoO`Zz=IK2T>@_wBlHuR|9KxR1{v6vjV33| zB!&Z^%f=@sA0jC;gd&DwI=KbBP8uyQcVCsZOs4mM0m9>ZLEysvPdtZHh1)TjJR$;- z)+Od|0ib{h;srFds`H21f5@VW!J5X#$`DooJT*ZD5yQ|PtPN??teFu_hmbjelbWPn zf&bdIpfr|58pQ)CJDCjF*P`R#qn@6Z4hs@la6Z-0enO}xp{;8wVcPj8yp@m=szGEn(P zs4>JJBH&yqyi3#ug5B}@SeA|?8!?B2p_4KQ zXis$;iTKhIOQo;Alk2M%^>p~TwXy~b&;8gjnJHxE(py`QRKk{za?prq1*u0HQb5gC zuPJIxFX9*UIBlI zp>K*IVMS;kuBwxZpC)kXsoLumxCeg z+4bKAtjlzeSPwvL`T@#!=_P69yTEZsH^eoBVdSt&-OR&gDhY;M76$_^A`SY4lE7?;J9c-8;}VJ0XMxC50|@ zQpKZwSQoid){4zJ{JMuYJO(Ze?kc!SVd++QGtHo%vhqU}1rEW#$*n3AcE5%G#f4ky zG6!BDPD9|OvtlMIyjxbZ9)`54VkbpSrezzjXPv)26@8}Q;?p-)hk6hmz9MiRi5mre zW&(mnhOnMhQi4ewo4s=nw@kFbd}Zs;QAIo79~dAUfL&I7p(s0ZWGp;hZ;D=`6SSPD z>BZm2NWmSW9^8I(l28$c@72nM(&PaKW$zu!KPvukb@X&W035M6f>Rf>en`MNEPHX`V?&n&ObR8lM_K- zfN75KE(XO&Ux1#Y@`$KuAS=BoDb@p+0A0+xn?D$##Wjf5=(L=e6V1?gU%zDQO*Z9eva zr+v0?PzkKCNcq&F3whup$DbAG9Qq{*2rlSP6Z96}fBew@I+;%FJ9jZX!c2^5qQ5x7 zckks$f)w{9#z;<{`7AXC0wC^yH9t8GZ49Nn%$*RCcJpI0>6O|Ajw5Lk`mvW}lD z3eypq7xwJY419B*13veZs^8p<4)OS3^AGwa@T4_VfvgU2WkA>9+hlwYo-q>i46beY z=2I;0iT<=ZM11G{vYG2<&!3-|l5zxvy67~ZKc8MZaq{F$=N28GZox@DJ#uS5QI|kJ zl0Tj^$p^BM2r$NqG+Ax!_4Dtde;v=3B2x8eLk)*tyNK`%`&3#xF)4HIZEeRxvKKF1 z3TNV3XhnIj^FaKPuUlAJrr+Aq4IEOi$9Z{EK?;$B8xdh4Fu?Ho2{4TQO9(D#y|9<= zaMAu808|~w6;y0u zr5DMx!+JA`)FwR5*cLH zm#4ZOIZ}l41u&qDIlT+5Yalpp!LR^E4Er$-D&$H&f3>*tW2avkbL(9Tf7l34!&zytIWD7gZ;~!##R@ z(L+XCmGvDs@bcR^eKOeOlWe?(gj$*&zKf$S*H%;|TvrYb0X? zipJG*g8zMwWC0&0C_>{?TJz@@!7&yfmKg21B_}p3q$lx0+#r6xm*?2qw{J`91%yyM zya3P{$?Fh(FB(K@>EM>P1_^Zaj*gK_L|;fDvNf9MNF%Q%O`E<7n4^d=2Xms4a>iS?&qf!MmX>DP zM8^?1-c#D@ynY8;V-y2V_@k4%C^rlm zFrX=bpIUBwdQv^p_he$_v14mul6vHoK3Zg8a8}=r+6})Gwc#a0Zx09sy8JK(WR3J2 z-F5={!}7`}1K(XF%uK3$swQL(!oE95wo?8&nv5Jz8Va)h9Xi4?cs`!qG;nh;j#9>Hs- zpmL*@r9(Kgsw^{?Cr`EOM{~*Z5{~)r^YZTUqJ_Ux*2k=e$(9=^NrKNdt^4j<4kqpSVb;pjPkm%1M zB!3WS2FVSS;E8v34!h&vrfDMfqFD^v9!Wj^1DDg&W6gR>1QdYT7#H{K4vm!yeB5T9 z#SHi!f2;`BoD6)rd0*(cZbb#-B#`x>M}znKxXZ16Ma_G$?g&0$1)!(}#6jdY-S}$| zSBiy_;0`+u_(fhQ3hTJ+5|7oZtQ)(<5CY=pGji52x0ZHA+AAtj*2n8V`5|pgqT1>n z^xwBlUz21IFnNMa@al6k^1)bpUsWU^_)0N;O%>ga*+ZigxFWLP0Z-5GtTc!;rrs=eS}})esRU%_%2> zSAJ;sr2m|g!d_GW0KA1j^1k?+Na!ERQMayU-w8EGfol>{Lpfo+&G_sAkUG8N`AJWo zu6=a05A6wgDIT1}G-C2UgLh=aN?O{CRMR@Tv!g_-HR0*ch71`u?v#)@imVI5MDm6o z7$*=W>Q^fD5%kd@W>3>Np=zvC6b^#GqSW{)Az3^~TE)2cBSqq*6B7Fq(EJH{MSNt> z*G(iu6|9F30{3EeLfT0ifUm89^Yq*Bgij1v_RKULf!b*_)mhg$Ngg{76b4X2`h#|+ zO?uF(`?#YNj`$l;i1Zya=&`BYe**uk;UVB9;e?dRD?_LbAWOSICAjdC<&zb8@)FXW`^gH&3z~* z)cJ}cHGFft7$$#Ojg3hYBQfm8X$EvW$Z^RI2_Z6$g&eYYF-BGXK2K=0^4wEK(!-f~ zH6%mboLJ#`vtDDk%+SYNghV2dybz{4h9CEo{H)7q5KYuF{T(22q=QfIZVtiAM}Wfr zmhRYc^Dnxiv=)7Z#Cxp&2~W>N_-@=0TZ$f=nxT*)Z(aKJb;N=8ii)%T_+x)mJ@#SN zU+y*)wZSOQy6@j5I#CwuqK`cld~@nneXTB>Fsrz+5V_RRdN*3RW?C2d)CL_ApFi_P z$V$iP*He_&mk*MozEQEdlWYu*tI(^LL$(mbNsKr(jNc!l8fU?WsMVMixaM`N(%5^6 z8iTJ?i*rom{%pa!J*9p*jZ5d3hMC)GU6TJZ>O)S*mnFPMvAxBS2Efwp#dXvOC&on^ zqXj44!}lq&l*Ac@19HSQw-y9i4Mydpt{z5zFg54~@+IWzQ8X~a16xTWVuxH)wFKt~ z%U%P_sr@QnCOceN7~q=Kf4AqAzmp$d3103bUFOn&WB-ox;5p*MNom)vov^_=%>*f! zGVuwoq^BVIv#B_r>gX;-6BN&76mTrHw^(W8mSB-uS5L{dkx2;X&U_}^M0Ypo>x1?@ zj3WOnQi2j3caJEjE`1+f@pjD-p9uXGE6!NY&-B2j(e^;z7TQ!XynJ63-TRk??Z}4@U)qh5tJU+bb@3e`I@w&yK20n>BZJ(M}EfBA!z{(=&VEp#dw{7pM zG8;}fst^B(A4ZP?J3Eqf)pZ>MF?*V~S3VJGifSriNz)a8omBD{dFwxmG#Xw^oGm`Y z1^KLzo_`KqWfpgT-ADwdzJG&${sM{q`tN_?CoH@gMRKGC-2kCxo_!mf5~+3lrlsf? ze>hX4cni#j_auC`K|3t(N96Gpm*Ww4bHUwpe`x`-t|P0NT>G(~{Qc+AGsJfQ2-}9L zT>ichkrKm*cfst>yPud?bmlcMqzfLthmlcKa==D_H**2e!`8IQaS@Vjq)b*xR7E2F zbaI#ZCj=m-N0E@~zC!-zbddST z@n+k7`mhoVm$Li+`4|I+sH^uN!V$dF*q^!BV~V2Y1F8z9XRji7|GfQ0^!n2EFg4^lgLA*%=UR`=LZ_AY_aR0I&XL_hj% zQ4pZp_DV$N`5!=#4|aBnD;@mS$i0oS8~_0#I8|HRb)j1xh@mqB$LkT+A zfQ7%m#{x&WXNP}v(7*i_i3^Ef`5l|l0#m2?hpWHl&|uHQA2@XATF{^FlXrEdBM^>w z2*V^K7r>Dg_f=^Z2@^d9ha(#QneR*Fm2tmQ zGKnTPUt*lC_LIBk&dgs>P|1um!_v3>K6XN@hyJw8NLd~BcHXyzqb!Q@^EIbUySF6G zPZG7R zLt?g1(;3?X>g5^?PTq35*loh*VYx=9<#&&1<|?B&N_lFI*1^jo4lCF>FGy_cvvsQf zvDyS1t+wv7vzPThIJez`M->xH?~e3;(P7%t&Ku_C%hq;nIx1H(`$Rx> z2k%$@P#5U$YK!2=yQnH4Dbcb#ik$(lHcat%1sc-S(rP|<$PkuAH^LwtSFanIb=d1j zZX0~Pe*1RUu7@t(4>ww}WJ%`{s~d@R_Py-C%kbNdClwbL_ulI`^Zci&8|4f2>hYV26An+`SQKEbb-uUt8#yu_?Q+SXid=y_nqT)x|LyzKfc*vWECkb4_c=5IgnK9PwS@47wV{y^x zYaSg5zXFwker}4`>>h>hS1|)ct!1=sXFDx zhRvI4-v@kwcoCkmVs9S)%93*d0gZ8>W2ZxtCr_RfR7OOk<@}Pijtd&p+oi;(zInqr zlpXBxWOE$%gD0l5V1Z0-;^}ilqC8ZpVn|W=NPv@~F)|DR#%|Q75x=frS@R7ySMW}z zg{Eox>1<0s0(iq~qd(pS&;NYGsOKfs0&C~(7TjvpL~c~qR%dOB2U*VyRd@NeazsW= z;Nro$y1G@m*^4%V*EU1CE4~1-P`+O)s*Q?MpQ>%d21Z~j@dr(sG^xO2ybJ?^VTScm zcE|tMaUA}pj>S9rYn@F?=?d$%FU({v&6L*X`~TXz@VDj4{|A;=`}fpUAM7-0)TmtH zh|cuOmj~_VpYp(CHjh`1=~A`ar#UlbG!}3sFqmI#Y)?F2gx@>28Vl8(snS@yz<1I} zHS^J^yelwzoW}I01Nfs>ip*n8Fpx>O^dt6cHgL92wWO*`Iyu@Rh`FK6o0bW$(XEp?n)A|@(1_Mb7>{w zG9YGZitB}do^jGYaOKKi5_Ml>ee~>&BtjR4i@xw8-xVu_*MQXz9eyS{2${9QG$YI9xln$z{T%L?4C)VW1TCw5#Mtf>J5M5 z-;@ZKCHzZ8X5jfVC9OGUPD|JjTgj9)Yx*6W+3(7gE6+1C&zLN z^q~Xv)T?j$`N;^80PaZw$E7gOMYlFXM@K<;#e(e!cU9IOTKM?pG+7}6M^JF^4E}5q zq1+vVBUFN2=$h5dGL%HnTP<6Y^y=(W-IXha%m2W^gZXY@%PrDgzurq7kPpH5kc*gC zS}KphsqXUSci+6}#F!#4X6lk99VNNKJ@IHCO>XI)Cr@TeMDxjFS#eXvb z8+fA=wFP|sVOQ4{28F+$_5NAKUB>xnH&n!& zX*fLF0%a6wQP@Ia#31UI>gpNu=C$IZh$YVwjSzQhTqhefX>ul&^E^XezsHIdE1o}p zZgg_go77al;NW@M#U>^uJdakm!v8pR>(&@TR>fdx_*gBQronTFyOi&1{o!=a_L1M# z&U9Cz;bm4kRgI{%M${+ z$LlOwwB}6{iC(nTyu+NAR?5elGXbF*WN2WJz0vSDoYp+kZqCEc9tyJCw{JIATg+dV z(0=|TCwwyQV_3xI2yrM@uIvVtSse}O~2N3(#^ zq4-7{PLj9+!073gfB;sEsz@Z<$0v_ZK_u@wI6Hv6B)3<=A}&NPYIkw53A(&?q!fw0 z_c1xglP5dD?uZmZkh>fdv`67ysW+pim#|pq&OW=cP`+{l@<*(4h{QgoK_=@Fb;Q;9`&k{Z+}dZTefl~iyGWoClzuH`wblUhruJw z^Dm4LGz&~nECv(i!)a-XybaG1W=p0v6P@>uC9+&M{0vElgf;zd_u)SnNX4UYCdfYF z!Eb5M2%LRTj_ZC7;-gIRYVvbjx3uixd+tg&G?&iW%syLYX>J}*78e$7(9F3aC{XfB zjz4aco0u^Rt4{XkhGCpQM(sUrTxZ~vf{xP3w5n#u8s(_e2i2rF{Aw=-5J0cTb^d*Y zRa>^c8)~>^%P{<}$16yGjBP@HZUL%q_odVCMM3_C&7Z|fvsT-`wh#S(*iZD=pZlWU zU|vCW@>-ipJxXk<9zBf@ zxOkDkba}o8c%7YT8pVRU(o}aPzIi+Y!n8&4yx{UVdhSZAkPZ5r>>}TUjM$HbmN8=78T`)P~#hW+E4IwW!7_DEQmap+;lZnZM*JW;EW!#uCou)O@qre0| znuZ{Nil8xwnM}7dByOFi?U$Jt_jv6zCTCmsn*1{;`kJtQ7RZ-qV8M2NxRst)(xRXk zEf&8D=ad}j9;&J@?IY2n!Sm%&E$*eZt~zz*OjluP$2SHAsW+J)xY$1?raP5#R?oEO z&n3Z2-SEq@PsE9qDA-2gh=draN)v{1u+$Jc0_DcsLdD(fdCF%%S)HI%>aBaBpYO$* z=gD&YvG@FLxJ?5d`T&B@_qYWRBh-=)$*J){TlCIslg`r^KRx(u778fy5 zI~Pu1g6ck)!z!{HH=zZiI-kw6U%p&OPi6$FK%o~8k!$|pX%|8YvW8Q0mBl_jMumym z!cv^2Sb90!Il69L<|&cAVcl{Ny`oC~cXSUUm=o63{kiQlzY&#_=rAVuv_`P38uV(B zH(e*oQxqAzYRRn!XKU@@;UP5HV1x2JRuojH`@d07sJ3KI@Oz@hFDGKhG4JBqZho^kD3v-|WWk?fL`~qo z&o}<`TxG8Msj>{z!TXBr`QW!>5-QUE2u(X571ad@yRn2TE7}F|jG&H0ChytvFgb4V z(xv<%vOv@0Y`+bKKVD#9U}_b6@uIR=bIz1D@c0yFu@E{-fNjvt+}kjUl_V{IA~iXY z@=fIM_dbN`lTiyf$zBBvB%H9KWoWc*w{C9ODTvyte3T1#OY4YUG*^mnrx>C>$h*If zE^+PBY<=%CJ0TEbfmCyvGoe>QEEo@|w-sxDyd?!fIn~1A`mSeZ-`7Sl6(%bf1tG@Z z|G}M!_&+20hU3T1(WC@w(?dAqrmE>pZH*LyT^$mO03$H9e2JUe~vqkif^kyO8t9)D6@T{yNPPxSB z)>}8M7cgx|4T=;d6j8$h79N0|s0uVwPk58@6)D2yB=ql2%@NeSSe5JMZ z>am9XUzAZ_9FB|cczM>+?z^29u+++Vnhenl;%JJyQs+Z6DW<)8Fkji6lnvw0;CMH& zVW4$uk#o5k5(%;rV4E4ZLvTI(77w22rB${_1JLsJu1-4VU!1#rdquYC{E_xOHKX}H zrun7$@>?Sc+2rD$UK}vNCuF|ernum+ptrRnW0j9c*B$bNZsbtXyGwW%U$#<=#U!&cVNBi=p7H##Y)m8_P>Vp=`%Itm5QpWf<#n!cu&mC zHlwCyIKt}mYvfvaAnheLc5wnDw|#PtDJv{&oSV2l|J@ps4I7Ro*|smbQ#?rJ=89p4 z^Rqrl-+<@WWOi{ffhBZa){U2T>*m!ud<*LqN-Lv_r3b5dX6On#J9Vl)_M5&g+e)=t z(c)PBl4Z;GUB5o^hq^fo*9KG5hbztQG?vi$K156;j9$?}#Ajr5V{Tn^w*uToX_Uvv z>|M(2K6|G?wu|Z7cMMmHO;&;p77>|lkq!m}l);2027yLwdNY&(ELn;^m2DGxh*=|% zWr^<<%$B_q!V8o^!k}#6uwi8tJ=O|W(d+BnV%Q9`Q%vLPh8wpMjub8~O+c5mRLTcw z2QRfvSre32V%u@qe4FBx^TVnGdI7;n9BI5ez_7fcSLN)4_Ke$le-Ce0UsVNKxA1c39R(hD5 z13l)q@Wc!XArwi}2fQWd2 zZ?BD`OiNxJrWV7COG?Dzvc1S7Iy06h9Icz|nfiGT!3TR1Cydhluid=ak&Z%vLV2BM zSUuFFC`*l7Isj<8BDwL?8OYq&HE~QjPuh7c=KHK2TW<|t-A++)fElW`mJ;KZSwBC` zcW4KR>>1%eUt^kIoZMIW&L{D_ULPUEABd|jGc(@uFd?BipNqyLK`ca={5@BW#H8Zc zYtl{~!q0xXhRMgI8as9O>4v?|76(w!h`r`_Y>w67s`#>KWjS%4k-_JeZX-~4R}9>F z0@r0R4sNVAM_sJ@LDeD_3;i-nln58~Dw{i#R!aZK*FG}yb0xVT5SVMt_bj&tYCNU3 z{&4#04mDSJ1c1x2w#H#e&I6RRM%vmxB}r~xH(l9W0~xy*`v#-C8+Wqqs=vQ1**|jE zkC6y<#`hN0@$2(VE95hgLDqSASG&;D{>;okfpZwt*>qX!gRZXksH%20t`fU(cRj9> zFsQxe_wvxVm`0zcR(|>7$cSQunmO2LU9#QV9dT}D2C8>EkL$it#EILAZ3_M@x%(Dt zv}`RSGFjWdfmeTR{QS533I6@B_+P?X{`(&OE48=G;^oT^bWt+Y6rHHi-8`NV!2%0n*J(U?znzE(@x^Xf)zH| zrbjC$KYxCTY5Pf9?&gF^!_?~cU?-RsZ;5~A5bApfo*TfD%{kA^q^wf$%YU`%F2iN0 z`f_04C!L7lXp)>!L^SJT&I$-FcXRIUxb4LqkXJO>tOv@zvRR)dr9Y|f0To4|-LSC9 z_wZv%&G9XG2*-Yi!hNemG}|BZl+0166149Dur#Mr|1<))NH@-2T}kWS1+C+?sb?1k zPPeum52$xrJp@dMK99z@{_u>&(*7KM zA0rRH0wy`87=vvHUmq@cQwp-yeZ`C2u9_R6gQ`jqu`%7FunZCty9EVn(Eui8*xc#K zPrQxZVHTIMXkZ6*R-JDRSY^jJGu9jew2Bc~4!jW)&BFIfNozN1Mcxm#bgj|i4fL3e=9S~IETsI? zrvoVMn3ZTJpajf^X)ryviiI%*oxVed+TWhbZ$zWAYW@1A6udnqTAfP$G)NoGH`ewo zIVR5F^H7)jz)@iR8-w?`EDcHkrhD41MAU}ld$PJ%v{DfZ0P%)v;+b0Ok@;3Z`Cij@lYt+1`u(US3N*U;OtS|M%tfdb@utuRR(T z_#QvLho_Xsl?N*YqMik~0ujQ?LFu@`Tiv!3KsC_B*olUV7PU7{Iok@LTuDi(cmMuk z^|GU{Z!aX2l#OC{I|8si{rbr@*&_qxBs`h{7iA>Vn$e305j>&-M6(GziLdb8JGyEv zSkRU}aN{jAC>6Xq#atP!;z57^zTp+0-)}CzkAj`Kyt$p_n+RV(A;uB%Lr_$BwjN^Q z10_zO<+l#Y4C?`7#aI`^W&6@o2Y~Stc8$4Hc3fc^lV-P*Qm~&OXgCE=>!PUG)MIvIkJ-*J zSg%u4A7?N_cSLV>=HxvexP72QauSl;xy6I2I{g*~>a1MpM%hFWu!`}0r27esPff6z zn9}kuEx^$9IDC##qxKmwqOBN~zEpNIr2-j{S6MH1v!(w4^P2edJH_udn`Z#7Ae>J! z*p?)ba7nk>?3%yzR&<@W$<3~kr=4uK0wkdvw&|FL3U+uzz~aFe;yW2Q%+%=B5_c5a zGpW&ao%8@{S)cN_{xb&dL+JPSHH3=DQh;QL91=?w)5`u`PNUYXGX5Pv-r}h>K|&GHgDd0=T5!m9n-(+YpK4b z__dsu)129}cRyY${$&p^-CkiCy-3{~O6*Oc?p^vc0%&Wh^oDARAAZzwJK$s!iFy9R zR-zy@)?j(7?3etJ70f11rT=9Bqks5mM7v{=-O}UA(k)cjYq=NXpi7aF2<6IA-;;koZJPq)Tq3wwZpN^u>5-r-SKOEFFAe2nQ93^^ zcXH!tT3V`Q+msBG2;*H!!6O7F5k}E`Ap4D{BKZQ1=y&z1yqLws{i}JOMxu}J(PPUS z7l0t9XAYvGU|g&n^^Rz^U>*UCbqov+lPXpr2Hc5M&JXCDQag`Qoj(6Wig0NKRui6l zRN9(!SDxiPTDEB6zRb9hBf9l`#+MSQNQFHSY?;U;7S{8(q93>Ix$=%dPEe%1DdG>I z(`7{M`OBBPg|CL@!fJkBKM+h3sQ7CatXSd7#JoXT`Lh%aFGYi$eu%};^*@*b((YNpI8?kQ&_q{r^p($n*fVZ+@p$*E!6 zDlci&Yl+pu*}tF_ZXXI#69n7?id|>ElNjqKQM9MLR9pF=z~NVsgVtAu>^2fL7IcXr3(scMR-)Eu<^Vin$4{bBQdLahG z_&OXixbvvaW0}FHO1BsmXZ)=`zkMkn+aXw#4cJG8FAqP9qOJ!C_$`A{4H0V`k*Tz@ zxnpoPN?O^~M*V9A`uaQy^yux$|GYq#SqxE44WSpis|ydkyL4!sNMPN>6mf0+>}NJm zA`9(5mof1+i{Y{ex6{J*27oI@)<(>~#_HC}z$^5`kK|yTd({~4aG7`8f92-0?FGO8{6aW zuob-&S5f|Lq&?zWmP@_;F;BTY$}D`w^7dId#bR(G7CsBxG1#XHziLf)C9-Z;aP%=^ zdd#e~XrF9G{SN`-n$c5+>qR=E+U6$y@@ojg7o$D%8VSIExkW{ZW^JS&C%4JZPEUY? z`;xV()sbcinifmZgH-U=D?`)z@e@eS%68bcaQ06uXeFVOXi~ad8HtVH{4rFT3Cton z7Z%o*(BgzXgNZ4De(15FH6+|DXR>^+$pYmUeqH7eDy@saE1jWg+3CQEZ6+EZKzk=8 zEe`q~UL8s^>{Vm|+;G8$xO-BquCC5@?*qU+_wL@6;UfJpcW&v(!+5Q9g+towoG{<> z04xPcR2GVyd-drW6FT7&vJ%EaC5v$y<3twwbR<~&Jlox*apSyR4d0vM{n--CikWKb zT{TEncu?#G1eJ?2%Sy=cjg@m;8suycn#ict_hjioI$|ulek9)1xkk6l0JD3X?Qdaj z{;{G{l3_piau#KXN?U>hloLRKSQpC7$KItuGbkk9y?duax5~H0noDdP6;(QbYWj~e zXU?c1m1XFlFQo^jH^QeCU{hzsiWXqHOgW0?j6M(?xwE>>DDW&8etC()wBEqYG;NPk zQf9I5R6I=dgE6lj$Wwy9|T z)Vr^C#JEd`s_s--ctnIE1gmk~?Afy)AZDn`Y%P(QayhlwAZPjHi|yMxq5v`3 zS6`Ikt0;Luds&dfzSe>Yuok};8>TZmgQ`Tm&Ag zQu|WtvFppG>hf|sIvI)te(+vamOjG+cdt%TRn-BJv+9}wJULwem08(hA3;oLOpIQ3 z+9L0H^XA>d8Iz(3Fl*qDA?@9j4$%LrB<=vk7MfqRjIqBFYnyO8^@N<9*oc*PY_@ym zOBJr8p7(q^_ypCmpxl9?gMu{m^?hP`C@R)G>i@7zZ3E8x;~aiXlJw@0%?@bCzbLt2 zO!=Gk&}m)N_HpH`F$;3xzI#2xw$qTHlIw(|W&1mWx-EN2uf}zxfK67DSFX%xt>(-m zpU>HFP$7`8if?cO5@E98(=%t0H)M^ls-q{6NZ!UdXploh!ON_cVaWN#gA3Q(9*MZx z)-^89&TRc(sI4y(=9DDj--|_8DPcK#!^k zHwZQ$qOC;mG7z4OO9Gg+4p^9;KG(#zHXY=>Fx;{0p(be6Dy(eZS5$U>$M@deZGeRL zL6a@d|L-l5TA>S<#0!D@trmgWm!i{77nmlM&&rVj&+f|Oi;)_|eDvFCq$VI~)zfqN z_gX~6zB_mB#Q4xaz6cQfiImID~8>5z8V?L;1Gj5M;K-d*W&T+=2^WF-`x$+fFhI~RPL zIA;Z}^0)OCZ2h;ew8S{&@aR#a9>vutKjSqr4%U|rLYR<%DK(YA*BB?(RCV3&TQcZZ z-HRQP$emyNGXDJV&*(p}XH=KS+FBd*8+RW+4$R0$S5eThZylcL;8~(3x|d?&D{R$F#;8%sxbl6(j%X7lh-4kgYJ)U05lA4p3|EW6WO?GN~kiI54|n&ermwPH{il?^%4J1Im9)@8 z9AKu3L82Dn`S7kYC^2!qX-g4!kIi0qZ7gcmXF7L}QLiwb`@P4HwM1D=9e--r>b`pw zut;vpT@qETKN=e`H7EpRl+7a;q+eiYIGl&k54XucSeDc9D*}DcsFiQevy~X_H+)VXzHb6_^8++Ng$Yw{yM<@5n4_^Iyz#=% z+uI%&NOO@KioB+8UJWUS5$aD3O-oV>5>I$~ zn|F=_%q8XwZ<1&(CDp{BVPqsEadTTY+thdOToDcAsE5BT3^#XII<2ljzrW$uyT0us zeX*bJ%`Jt{`980~5A{kstOi`R3rRh0{O_Q#vv*4Tyt9*{3?DBy6D@qoojaH?(l3`= zjW|xW5>_3{rnJF%CP8soexmc*Q!ye@yfEwQWc!@r8$X7OGWkrit^Myt=d8CHe(HvK zcj=$(ndg-G=i1xp_3Q8Ukv7f9&ZP5&)2Ac(kpA-zYRSKT#s3;`u6iy+k%D)p$FRFH zapOxR+UzeTA1S#T3+o&FY|rfZs<33~($&m+K)g9m^UHN4p|`D{sWq+H*MW^zZ`^nQ zqHS{O&1=^PJ)3-sZ%0M>UB6zDc=v=7_lXI+d>mKygoj%;X!O<+p&jeJw|>;HMwC7r zFu5@yOcZGHHxjd-uiJg;)h9N#IP(UxYQ7DacScB;;R4lfY+?m`%a)2N4D=2V6f>{b-j+sv#q`{}3*HP6kQedQ)VRpDnxX7+^+V zCOBsGBx4?->S(>aZZ*?D+(BmrS*&93B2Yl>e-Pz6w*2ejA6A1jCrtT}^KW73o+H7` z@jVgS8-Bl$Q}L|`F#iKW59--Eo0X;KH~a?>T9~W6FnjJee6=ufS5j6+q96td1rQCg zhztHuvyy5XequE?p7o~l{dB5M#mG1wI+X0FK4&eu2gcP`A>X4pZYmiyW{g~SFi4%Vi=p57X!7z7Q=WF4IjaY_EFgM)60-rcmcYx zyT;R|f}n{7ewmqiQL*3{1X^LCjbtJ|J-rLaxcA50o1H(WX z;#j80p#te4sYXZo=8JD3pHZn*z^~WB!|x-%5|t(_ zrV;Hqc(Cq`4adAs$#+@ zuRd)Pen7Gm3tfN|_Q(f@G&9l`kjetCyR&oy{}j`R3UA zsAfd4q5%(=tj)eysdz@{{_2WOT1d``NfI&GiQ}XZmKkieRl2ca7~cxK!Ub@h0M?s) zhjK&|&M>LT&xFX7sLC*0$QKJ5#W8eTDv&@$SV0zfM*=Sy;7OGVG3Lv?mTVL0E%q!{Rc#ZRVB|!ftJkOM`(`j! zt%+C$nb;}D$A2;Bm6ZQ(d9U;S{;Di~L7CMAQXv72W?{aqNhnfEa-xu;0Jk$;VPvJ> zQ2^WGv3`u0Eq{%w&lMOm+>Q$S9;n%7LoKZXx{>Cqd^2QvOPbwWkySDQLN+9A851k- z(WjSPYk<+FOy2hK=ucbfe?0_AeMfaYgr=_(;FCmQ=J~K!krZvy7cV}+@gK8}6j`rnIu-~Su(Em7#wg`lO11ba2_X{Yc_lt`r~gD*_*`Ruey z`_8Az;emG`!#D^PZ4Uk!A?OaLVN2!cYdp_n)26}-NX=|dE0FI#dmWXuvU(2K`>`@Q z$L8hln%>&)5JDu01j748;b1QcP2}fdy&JzlEXf`3gryUn?pJ>PTsdvpZoNzT!r2@T ziJZ-T3P`$86JJkSE3UZEBwZ?`F1}B_R%>9 zb?P#P*Dmdvcf(Mzrdl@Q`fi}jpHKFGyHIUVyGx@w;tu);Q6v2PAV3tf@f*kv1TVbe1kvj%%tid2&z2VRn`TM@Yn$2C@H@`xHiDjZ@?KbLS*T`Qn*P z*bB!ZoN|Q*aIb=B?b!{nyqnkpOl{5lsUzM#5cycaG{@P&`L59vxLuK^1gp&!JZJ4o z_woJShd+C7)`?F}fdW$K(4mp=GRe5rij<`vyKLydfz9YAjzyp=Kf)+@cYvF_XsuuH z$Vp?53)K?>Q%(A4wWFokM>7G^t*hOl=}RUo#O59N8ZogWHaUC${B|*=W|6}?6s4lb z_l|Ebijnq_b=m<7PiMI_m4G;vnd>o-zIbq|-Ns7P&TY0SFgfH(DkCJ&KfM=0DQWOpcGN7 z;VF-tGVyVUf?_kZc+$XX}SN*Ur-eikMz<4nxgR6L5rI{0sDs5WeHzIN?e)3foT$BcOo1_y%F{p8T)6^8m)hN1Y9krIk)5UJ$wcA6N=MY$h7xIpCJPftIsD4mCDA34hnM37mPXdkDN;;7JB=~?Anq7~cp+bEuV;WGK> z_v`-b6V}E1I{h9G@~^wUTXTx|K-2%B`u_(F_}_lTpUUxnK_$LDru$4?^6Us6)}m#~zv~H*sRLDVyg)X90}uyKNUnPl4Aem;ymWFk%Q2AA*ABzJEW` zD8Cka!PUJh%^2q5ICP)9>y*QwHpK0}B;dc*JyquI{)gn>#r~g5f^Wn%V!r7CoYdCO znd8MAcsJ?p(x>v@`zixo&tR~(%0^x2QW&r7%@Qz_-xaqELTB+40KpmM-#WCIapZ9~ z3DXhsZ!KriG2G4CJTexY|e}nkx-Ba%+JedxpU^5@X(kzx{r1rR1gS{7Sp4|*2bnUC@l|rFOpN> z2zFJxUDsWVZnGh}SxYxxmG=BbLJeg1)Jv}fJ7m25wwon??#>UV*FQa+!yF}H;;6%&@;{{q|Nga05bgvZoBc2W0cJw;+HW$WPTFgjUK6VilfNbZQ%N{l z3u@$(zFitQ5?VX+7LB#uXYEz^SA^mgz8XQXH(tEbwHn(x{zydG!v_zH81NpbqB2v= z0^eMOdE4(tS6tOARL&&tp0odj3lBE?0&RkDj?GxMaA98o85CJbnn|VwFRi(Kct!BZ zl4=jM9XqK@CYIs?8G{O>#{{JYgT;%LJR@%0Xm)63Keo9#qv@3FeX*f*R0vfJVxIo! z52r6#;-PnoO($YPkW!p!llGDa*w!T%(Dp^v3;4Et`DuVUV54p0V<~IImc$AxW8;gG-XNz1 zc0vgbQso(e+v8xS6NW^z!7XI%BQZMPN%8={qT0-vJJzJX8iy(!4DJDfuZf4OQ61~s zD~qUJmGLb;TMjAL{{gMaKhvk=>{jgFee*2`F-BDcz+R@hNO$4Fm!HN1!mL7LW@Z>^ zE+bKB*Y4$~uhc|31HVA7rfDJ!nO^U?82^JzlVtSd)#jk=+_+A|6XPI;J+!u8;Qyh)YZfgSw^L&5hT5vN&I)9{7wDrwRO{#q`~O`OE3oGkfSaQD|0>(|j)z=W2SJ;ZC+X|67`sUmCVMdUZ(f_}u1aM(_I)Ir&GM zBy0S~HXG7=pvwQl-kZSXoVR`dzl5^a*s_&%%!sUmq9SArV;{S;j9s!7MVp-vX2Q&% zFvO5FN>QnV>;L-yy}DobHALt6JHN|u ze756i^UXe&CVtlR-Oo=pSl1bR#AD97_7?{Ydwazq__nGS37CDWs=2| zewLOC-)--BV{4u7H8N`dXfs&nPM-IVs^vy`Z7m<=`7ikG&HdC@x15j7y|L;3s}(>X zh!V**YDi8h_`MXkw8Mk2mx2y?A_T?2N7Deok{tqTD!NNpFbxDw!lrKD-eB?5i#Ryf zq2LxVB%C3Pt$e_6UE;*W6MDT!$V#jrBCFx{7&~)jYDVukiZOn!kpm-r8iOkiC9N9$ z$rh+Ou(TWH<=OrrAzz^~b#Qy%3aMu-nEdFvo0x!gRsc=-c)!TVHlSyDy<_sc584{r zTv~6IarXzJ==>n!M&FZub@RamHT=h)C|n$?=|Kmx!uT{aau=WMEy1OGsq0VFUdnML zIU;B~QB2_k@_?{>hHcr=1g17(v#Q1Yv7IfSLvqAA5jwzR6!mAXG2juC&^+8J@|lx@Ii=~Nf1 za0iKrD^le>9hz1m_5kk)+-p#~c5S&;gpXn5Q4(h47-ExpLP59{z28NbO!xJzzD?`J z^b#VWrDdzdCyD^geAl_vUbEew-<8afmKA7zf?gQl#GOJO6 z74roA3|{2I3vt2@J}>~wg|qI?gj;}#cna^f`YPupsE>3SusI7a7cPgE(PMfElFJXH zuKaE;kw2Kyt{n+g?*s2v#k&0gAhg@@nI&c{Pty+=YWxV2-^eOrGcq*i>Dmbym$2-; zPPK@u)xo9Myz0HVcK!OTb?czMGnAwVDH4IUI~YC0?i+@g1_sUfnbbZB-G7MI7{s-g zR(D-&3}o5Cl5=#tcmj(q^s=KNBLD>*x-|41ULLxKUqNavtXNxE*4x9T4B!-{N5c`2 zxk1eWM9rvC5^Rk1E;ThWNjL1^OV{mlyv^4wYHRt8MLx4pu6cJ_HObC+nys2?irQx5 ztND>V7_(91f1pvwYTkQJ@QRM0l`N=rCP~O+`FJB*UKoeTgb1s~96GJX<%MJ41jrxC zg@Q-a{A(%9TQ;@4tv!PjMOv%cMK|u;(O(gcGPzm_6CJJKC4mu(q5k+Vw5-#J&!kAr zHKSNZ{b;j&;j(4Dz?KWkexX#%4C9`qmBy2ud&2E4!dU(l_Fa-;=-IObiwq&wASzQn z?mi0!`sm7cKd1V^E1vpx@`;HOl!&gYcB{6x^iz?`8U%Z&x|1@W#7JpR zZ-@6~_UukD)hN+6iJAM(oyCuyyS#t-t#-SO0d9z<;UL#AqAC7Otu>@15dt6xbqCb= zw3+)qxDf&Ofq6K>AGqCD@BTV7#0(`0>XdJ0UjQ|DLbsWL%YA}8^g)*#h zkDfhW7lm>3V3|4srF_j5D0vgKloCxb?LWqMBW&2i(=)v&cx=3KWtPV&-&6#CBJ@Nb zX!=8Q2b7E`LW7tEL?-DocJ*bD+)NeNoe-k<#%sWNyQRnrn|HZY@$@gy3GV#)XDQ~z zQi+XIOos@5UfA^`ve0_r z!g@$lIe^7kzcc>Ju3ax9&bPL;6+K}saZrtS03)IJmx);v+#<)>Ycz8$qL?L1Jopfa z&J%6R#4ey=_3<9wcoiNN=124a3CScGYzzqK#)Dq{CJw9S1_8^Xt<(387^8Y^*pS!s zfngkytH6OcFCKe-1r@LTlh@*>oKy2$GHD+2LP>~`E^s84d!HIz- z1L(wYG9bx1vACQp7*E>SMqzo8MgF1v74xTeV2i!LjHCv`+4VN)0BU_fZeG58iRUN= zOmHot7^l+Kr)NdoaWIj?YI|Kfy|vG99%w6s3q+IjwFHNxaG>XNe$gUP#CRtXel^_ht|v}@ zI@1P0;~cmXFVJga5g@vn?!YOzhH>FF3!u4<2-M=-jd6 zwhPf_EtgW)i;7l55XnERm0|8xW|BpLi~vo!4L#vn(dTDB|(=We2 zxwXDCH)z?mJo4r@@*ulTIip0!hi($=in`!IRlO_wdd{@WlvlsmvdfO>20w6+5!@5a z=MFu=!G_oX5tB>Y`LHksZY!Nf?;nKUmXvcjm5B9W@6?cC@_brbNwq`#OU6p^zCjHp zLS=a`*MNE_@#Fa9Iaon6i|@oWp2RcOFYmBE>#K&EOF6bytXPo_68PgybocK7JJ3r_ z-!YC{6a@9F28)|K;rP1;mgx{DD9!k?Uc9&=7_{>Me0*C%?gKvtes8JmNta~vdLbfJ zD8GDinqzO>st=f=sjy45sHYyRZqcfh<_G7;`JMMVuvlIZqc7SZ$GI+66_H9JLIq?nlqHKURI?PH$C}i z9wjFiKk}`-e8~K5TBH}ao zDc>LNSn_tJ^M-4OSQ8fCe!IP*br??-Yo85GgrZQw$P$Jw!=6v<=rGV|ZguAOYT&)H z2B~1obJO)YXjO)M|NXC4tuPZpkzGX*qk~)=={kT*I_xUh24d=E$`(bHxa|dJfyoBG z7%JRVya2>GIrW%tDl!$Y3RAPrw;=@ixh}KCCL13ghXra2c@zB0%`hBwmpK<4Zi>R$ zeowa1I&O}r=c?Z_;su*otf^gG8I17lwwKOzgHC*y{lk zINh26LN&F}PGJ85#t=K#b-mb~&Mo?B-u(Hy%6)$M1&i%-7-mtn;C`RJ!pUhX6{{8G ztGI*3mmxD_i+cF6td?k-;IbS(5ZFP~ObmPB4%1GZ&LMq%pPo6v;c932lK zz7^|D9fAdLj2Tt$OwAGXoeCzJ<5aiiu2#A1ETMDPQne*j%z-AQQT7u8mI})vf)XxO z7p8;wRHM|PrHm=`hOXWoR(Y{Fc_IAy&fym7TEOyxjW{BqhZ+6&wRgNYB1PE~v8}?I zJ?VGo(6jtqSM*<98nOG=e(tw!-1zP00_F3nFz@@Zugbu&7+f-WNIzI5btXR4affVI0*3842T*N_SVe1u)OklP9dF^u=Vv)= z*cCr3i0pNXlhDno14#7r^n^TuY?je2zF$Yt!O^LNr}`(%V}lJiwUi{xjb2_}R_=`( zHx6%&CUPoXHi&OipLh|0Eqk(k+qQQGRrv-VuxoYC`@dCWzPM73(?iTg9O)mJ>$nXl zi_=7AP;gHeta+y)=52W3pQ{fxf|LxX)6p`2h2jZ0^ zXlB%?Q7)#Zp}62%$vkVb%mDIEqOBBI>CqR;aN<=uXy`vDaZS+vkn zM1zS55ALeq9KR)o*0E!IybzSy7nB;WN&S>3Urd-VK^%>u@8!IfASIcE#sL96-W0zI zu@mOkUQwCZ61YNv8iQ+jEgFawCqfZgBBK^al$IC3c{4m6@iYKegZ%HeqoYA8L`{H# zwl>zl%=a^A%osay;(Eaw0w%>mIS^}OTAV@f@FjMvjdhQAH-Gi7ENrU9Yg)rNFTBhR zX?B9A*;iGy>^Wy!+S~>9_L6S3-`xG+-#!mQOb{&ub~Q9SdGkp}L<||-_H@|AJ4SxUJLa3XEImEs3?FBmgcVmLj*Oj zbMY;-Wii*TY4fp3$^g>9ca$m2>LgQP*Dg==F5;&WQMb~TVaZtd6%R2{A{@hQ^FzGz z3|@d}_n(yTdKas!vD=>Y2{aU`_M%trgi3K)c@`HtDTC0h(Mc8VXz~A!g0g9bB>n(+ zkhl~r)xGc!fYD{{hxB^aZe(EgqPn56to47qq&$j$8Z(wUOithu>Suw1%#HzcA>D{* ztL`@^u3FGx3GOtSa=v=d+hRhDIIw3=@#W;#Oe>izQs?2rDSoF;jmnFh*Qe!qRn^I}XB%V3%v!qP zDpA#v*Oy?pI%9jkCBzs92M1^Q7?6-By3>FFdvDe2F|9WqhO@Y-odJcuoxkz!7j@PI zcTX$Ng^L$k(hK=652ffd4Ae262(^g$eV4E1-XDKlPvws^tW9+Mks)+7AaO%oTui`n z$^Y4bmXJhh1rxi(Z{VA$)vhLWFItlmNnA_ykn~C9hUlk(-LRE}xt8}OwNuD_bapU4 zj5BIQ@hy^o>NMDnN#a7mVSz%p4j_pIK$Um=i1(!Qxwu@gno5TRW|c2N5x5kL{furH#DQv6Ehe=>I`cA*KLxLle-{B zNBno72NgA<4^b>yXt$$tyG#fbuWSQ0cwO|Pjk)udMbY&j$r`xk!&nLDpy~Izb7!<9 z(8xgs^3e`e-LU1$&q|7i#NCiNfFfcDpLeOLBzK6qn!i<#Gdus}EY&v^AOg8T4pmTt z>rwf!neG}!Eq}EGyKhsDY5eqJOcBxQZm+#t@6C%7Ze70oQsgG(MQ!s)&uUaQmUmi?i8}jCsQ7RusO8AWlLr|bgWPCu zus%0EJ^F=uTEV{P?KL@|kFi5!z9D^eI(${fwmM?t$n6Q|H>kVw&6_vg z@%W!mIeWF}JOoA zR-!=tz=xT3v;x%+p$N}=H$5V$ccK*{7ve!F9S$O=s?tllI?|jmA55E&U~s40yWLSo z;|F2fbn7q zjg#zQPCi9e7}x0D2fCz2z*L(K97sJA zvKj<(+wQ2Z)Jx1Xyv___plQw}cLjmE)9PEe+XP?10nQ-Lb|L-~yNn|xv2o)cth^V_ zpYI8aftGC3li~Q`=gxiQ?p5z9YTdUdIc!Gznl)f6F^IVt$V}|Rw*ZTA4ic=Ot4e8A zJZu!V@P7#+^t3pn_wZsKV?saw{BubyRusut1)UKG4^eHRM*^ji2~_B@3oZB2(467) z62Wzk-o1sk+lC@RlF2YC(a?THF;V#0SU6Ic92BCLPh`|nW7 zmu`vEDX&CIa`|#iR9$sNYj-qFbbA8^*nxYp|3yK;ERdS$7}C=fg-eR~^o_`rfBdEs zvqL<2;Dh6;(*>TId8XGI@W+e*#KgQLm)U4k(1+eLB;~?1&DMDQu;If+^~~9%sR&~Q zpUP-OB0lx4+*OX8QKB{GrjrTUFF5BU8w8;NHZki(i?)$lkS2hGC0TddK`dt- zVCeT>6mhQZoMwcq4dzIc>=K0glC}6@&v*(_DlZXkxIUcz-vTTZd`}*vdx8K^Z6qTpD(xAoWpTU3fs}ibJ!-gZr?7t0Zb-x6|GdU$k8?wmba$OFO7)# z8P2H(DSWi}1t)*~b!eJ9e3Ql?2)241I&@eH#IQK0PQ!-HDAfwip$R~g5D+mF9e}bK zj^WyDs^8Bf+cWgQ{{5GMSqih!gy?b^EIR;7!ew&WDzb|rrkc`6lzPH)qc{$C^+t_r z3qCdThC!kuZJt?9;)0MG9u&=~ZW}2^cqbNO>3$NqdU9Ix#*I7hPP;geOg>D}!9KXb zstp=~Wv$D%s(pb8U%!8FP;>9jol14c1etz)zWVBV3NN99Nu7oiowQFc_Dblp2<%ru=9=|b2rLAvBk^F_V|SZPP^fV-IE!2y zfk@hsBScpNTeisC-mK+@_wV1|H)Le<1*-$9?H}J&kB#m0Oh%5psc+Dt?fOCB4eVSn ze0Ov*==W+vI1AxmixfZ_pn4zUoD zTpHA`FLoXAS@I&lqo~-2@Lm;3XhE|{zK;c{I&l=$YuPa2S`%rlhxS{c(>c|Kz ztb0q)Bb9Fn27=URSF_`Y?4th2DtuLabtDg)xxQY&j*{U*9f5*UltIMMWcnC?J8INB z+Jw%@PP|qlOv3<)M{ZvHR9p7`)yEuF6W!F8-Ot_gb?G$X5*Q}j<_y6~5sNRY@e#6g zuAGkFa?PC#Y>0{iP%ny=%w_aiLW*kcP(MY~p|b{6vxj~ZSDH5;e+^WN90=ZIjnm13fE2v#jF>gJvAmkyGx*e_x=24Jc;u@9x-4{(n zWXnumx_I&QeP?1&!YI59n8Q_!zmP;}o=aP%Lf6sAyMJslu8K%=iTonMMR3 zh>0LDN^?u~{y97PvvmhXJs1NFL-zl|DE$|a#6k}Cws1xT9TBl+?5oi~^%`c?#IECV zC#S23aAlON;V1q1&CdsbBl{zOiOnJJjE|`Cxs`jn#kUQ(W*LV$x4;v_Jf6e|$&d z{&E|LSo~i&+7i0Yxi#IkHmhLfd%M?NqPIb^n4zmYftJUn6_b$BuK3k!S=OBOMDrB9tlf3G0nz z36a0mZ&5C)g~qX}(2Z;`P|wEr^{9x35`)Q7T*?CfdiUj7_2g-`RQ*rad;Q+HGM{fK zGpy7GUr7t0>|YyIrOJzcGOvrQG1cmp{~xOb4-fq8<-e>0uTZB$xIXU}Rk}Sbq~@Tv z&E+8_93PX8r;Q{UtEngwARh~FJXql99Xe&lMAn_eu)&loN~^w$JisQ%IS|RY)Wa-H zF0kQq=6r5e`l4~JIv;u#dwQ#3)+tD{Hf){KS81`a#4ax@?v5SE|)i1jT;eM*5nEleLHF)-6l=?q)-3Gbl^bdq=+iLWU9k|3tUvY+OUweBzQ@p zx*0M@f4P*KOCydb5Q*P_xm@{oH3uR1Uaa1K9y{A)!Ad}rs)X5FTBlrT<*0YCuUXIY6k85tdT-Y-lVgFfh3 z%!qXPPSIhiMnMolBMHf+Fj-ly&wpH@DY@{Y`EQb1@A~j$;(}TVdCuXg`VgR`Bdn)O zj|f{`ayp{>=bu}S!swNDaarb8rL7R)ktWb7nf;5KdZ#f|W-#LqRlx@|K&n7lll zyUlO>3BKT|*Hbb&4`|oUW@zUaK%y|G+@C87ii&(nM6-)#Lo$_7xYk0mp@vo^APQ(# z9GbumvF25!Ve}c4PQxCs6#qdyeo)A}U`l+T0C54~FteNC z`~5)u`2^o$H`m~tmMM=X$EbPjsJS)vBB!LPRI1$jyvCnaP>EUGe3z4niAh^*S>|aL zn+Kbh+qab&Kavj*{qDg%g{}tCo%l}idE78u{`05!RYf^)e@W}u;Uh{(6x>-vfQ zp8K_-`?=s?F(_FrI%;0@&F=LembNqkK%LPL*O@i%z*mU_vmz9gNa_B#(vST2JM?-t zGC2_>Q&Fq6_wehfs7aWm;UQLgSF^3^`)S^T&zFoD`42UwtL@2p*()v>g|^|{9Huiy zS`f#2?m6oda_>uxMMld+s93n}^6wn}JMv8tOW+w0Ss21B$;e~~r(B-&E}A z3K3ZzJ64-KkF+#>yQ@pi{H(sVHDXP#8xcQtb8S>6@+jf~Mdy70EDEY#%68 zHxL`csj0)KbNKAp2^IXz&mhMn-b~nTjXze37O`%#_OUB4 z@S&Q@H+Jxzbh!16ZtGD44jnQiHlu@=snH4~acTR(rwy&@$dAOp)KEc&rvoZ>%3iN! z%Ny_0&MkVpmVg4Q$z8Bc4kFwvP?3^H?1m$kVNeebUme(C2{VfH998;R?^7%XTva15 zmcRT@3m^X|YKs>CWy!h?DTw2$_qY2k1&E#dHZt+=Na{`M9G!K&7FecZT7anPd3>^y zQ?Xx)BdL!F3BrFQezqC;&F;r+Ur=SJ!+Y!3uTPHmdhq=UTBI?*l5+^>mbSQLexH^= z`wbUX!3-dPZtsxt=+QNmYavfa|6$493H7TZq0qNpnbk%fU&~4| zD)MCJ8(_{A70o$AUWXQ)vFepZBEXDJVnZb;mw|#Ml7*CNM6crWx_pGzKtDFV%qBp9V-B`P}26a9(fhI7YWCsY9h_A~zh2H`U!HTH2 zOoG4S(F8+_AIzT75uv9r?Rb$m5m2EZJ@6?BKY!jvOu!#$DH$F`-Z6c59OH%saKohk zy3>C4Jb>Ri#EM+4_$t;igU@DA-c4lB&@3{Sf$W|O=4Hwwn0wBNvTd6{YccOj(+*XN=!vU2B+gBoyv*q8%jzjh&6Ak)etWQuVG|tmUDAsdO!K-9c5pCe8YBN=iN2T$@FUPL=cm3YAzh9gEE@ z5N!qj&BeO|lF0f(Sjx@BLDLj%icbmUY8~Y{RQ9sR6a<$M!9$Jxt&*+$8`imcO(3&w zvd32*Kg}myGBt40$)*Z9ZMnt0DV~~gi`s&JKIe`txX5wSlQFGsaj~eZK&b~iM0tCA zgHz|6bD)}$aV;*hr2;H?T#@VG-q=E$SKXCOob>8dD{Am4|KUAH$%L7dr`+O*hHp3d>^W9)}*TED)g5SPk}=|y0QiWoI`!>xlxESWg53CiY^lh2V+ ziq+YjWY^+>#BWF19UJ3&I`l;(yP?8?9i!ZxK4oaYqztHA4TZPfRC%%M$Z*JhK(5|? zB~|lk-bOVQ?;>#`AGMty0;|fpOCk<$=Drt@yq1Jhvml*PtlTqf7A#1f{p&mW-qeSW z6A}(Jj~Xs>4CJ*J6lc7DW`!TZD6U_hKI$ZAOwKHq4Og#PiY3}5ZlGIEz^+}ow{G2f z$Kbgl!`h6FjiIJ0-K&;ZwfwPX{g}J>%$XGsH1e_Ck^N&LnCUPYnub^rDuPH?@9syR z8YBhI+Qf!M-%Z8t5+H=te@^u2)GvF$aWm$)m-Kf?VDK1%yO}ovPMx~2rmtzj>lMUI zn22$cTEUJi&Vq^%&#Z2>`KB|!|NeaMM)_oFXPz+CGD4k>OocC2EoZ{s(EIo99h@=% z)=c${&UzhAj8$D+OY-wI6tp9+eHQj<8JTd>bJdD8khLCA|B-uxf|f?*!0r#m8W*wZ z8~1FVj&)G841+R|Ok6;;iKpYM3tr;n?*CHWX~eyq&l4U$-U6gw80M0J@%}}^^_VWW z2$A5+I6@pH?BSw?gZEdR^v7=XiG;5{m}<{{us!;#e*HS24go-q)L)5;vvks(XD>Ow z2vr1Cv_|?QEYm^L)l#>^A`MP_P5i;TcS|I!&D69FIUK!@D(2={94{{ae-weL zeha12l>CCsh&RiBc&!S|cQVh=NC7A`hSi-zwXw5MG(Y6l;YmIsy^cST3*lJR~ zY^NDQ&(2CTwQOycx=5pO>9=@rq}v5Axb{ZG{-$+0p( z#mEGd(wXB~20$Y6EdMT$RcLW2nsSj|N0O3A12xK(=ne#n+Ojdk%fM+&WXctUQCo>@ z5nV5Zf8^DSe@16VdFN02I}?%p*!;r${K3c(CIwnGKz%3TE(6y>-O56L^9H|NtZKFH zPZpu>jX0@v8*J^k(QfTSJ0L?cj32t0URw=vzRqnY>%Jd&x0d5uq6%JY_$uqM43y## zwe8t6=;$~>V zQp~|=%`6K0Hy^#bW27-?&ZN}S)?arp^fY9>5Whi5{r*;wKaqA+Dl*lT@Pkqfu{0(4 z4fHWyLdL<6Z|;=E{=Fq=AKJxgOVGCV$N-$@80`KVv2JPkXX{V@(=|UVYL#{NjlT1q z#vMO*kOI2T#4(wl=2EmY`9BHJ{#~`JTXd07+Mp%REHG(cn|`-WRHBFVxBsjwBiGT0 z)z9`haKJRnsZHzFXF$J=G9^@qLc{ljo-y*f-5ogr>E{t>$UrGHU>S{1%-Y@YO=@^( zih#5j^bn!tJzG2Ij5rJ_b!NJfrEh!XW2W zYN!U&!=JjAq@F1jjEW908bjj2>tUfGA%|!O>1{1>35xU`KyE^s0sB~@Q^@&6rv0LO zweN1>BZotTqznS|#aG{B@ss}I078u^#aSp&A*BCSk`ddv7I*pbixYSH-TP-+ ze7tiMLn$Ob3<9pzoH=tO&qBO01V#-kd7?JVkiTSgiE$WP2{WQ}l}AUTFC#f?7hc3! zA&Fsf1R{{&wB=ne{(bG1Ep@D%Gn-=ZKQb~Bc_Wc!SCNkDV#ndglPS0yVKFg>;#aXw z{+&^1#edf*6ez%vu4-AG{eLzJJsn#4|#Xh=Jd>^w$joJo|y&x(>g66r({X(C{#SKS@=9m%+ zJp%LXp6e!xvyAwz}MF| z%~?>^=>=)rAC;lV^^~k`T@Oz>nNOLip`dT5EAzZIjz6)UFT_U7HDvs%x&pp@U0nf_ zC*9K_Z6M&D7Jz@=@87#qWTU3zu-f`}#qWA*&T2nX;d3nolW(fg{(|GTqN92Fh5arv z%*4VsUj<$$+yNZ0@}ac&u0-<@2kH{Hy+!Y1H;=0aVed+-YSCitA;d2b9kzRaull9O zz!500{^n>Z*Pr!Gl(~orm=cHRh{aMgEzr|b0|l_Cd--fc_Jj_J^<7J$xAWukq`1IZ zw|4xAH$6RD9!JBW|Ee3trNco%;{tCze0c6=?g8)4r{MZbi-&9HUw%$^_#Zl)K5P(( z@HomeR#DL;ciCV?I2vyxM`0}E*3l;o(IoNf}y!f;TJSO4b}Fo_rE^JVKYUO`PR28$SpYg`4R?S z4f+@UqXfU~6_}g;g&E%iTT$pM6sw1h9kX<6I0GNKD8f-CpsZrOvb@XetS+A*GYR}rg-2M5p9xwBIj9>e0hq{we(rX`neyMrTe4i^G ze*5$c`|i{3*#1VRw%V^shP&U2Yc=Wd^8yz${gQm^J3kSS{!^^$yO+22KgMLwUB|pn zZ|s(bfoD=newArvs7zoq?*A z?mJ{o62Oeu2tldSp#mF-|BM4Jz;CbmO!T?vc5N~Je?YU%APqA5Y5SyUM2HC)?cKcR z>$m=$z4lSH1b;ItWPwk_<}ErFg8bQ{dXRB+K%}x&w_^D-e){$zxC@ZRN1^!qc12JX>vOH5))UI^)iOE(6{)0uGl@VL3Sg?AlA1 zdOov^&!(QE7FlV*_b*J)Wpv)DQ%#6i5l#(Vp zvb7-d7PlF&;KA{RPoE7_Noy%N<0$0zdZU_>m6EMtMEgWVS_ua?u=zur4HoiL+EN77FjvXe4jrAfa8pmHeo$|#&F5-YdE zBkmfrv-Phxw@G>YxaTVA?hbG2?2+Su@{}0np__UynUS0Ktk^H__l5b#YY(oUrd~*f zWq;KD*~V?0KF*`l{3N$fs^u1!m5<^Ly^lkpbw7Pa?IltigTVjecl7j7H<;}Y`)*Im zxVICvbX%gbrpJ|i_|VqO?BJ1Sx|0#Ci;KkEylR(89-6ucvYVwG1#eu{uKIKGzFq%` z#A%Z&6A;h;xG*yi*`z>3U0i{K`7m6LmytKrP;Ji=0*t;BoKZ-O)koI=bAvDSeGj3R z{_I(Te=d3XYngdIX*CeZ^xTzvTG+D$Cm0z8p?h6*Ixx_C7IQvDNtC&UMT3-*Szqs3 zscUYN2iyqC~zr@-Y$t^wh-zlMlzd^YyJdhElWgEkd6rp3UDEj1#q5ar_yjWM!6=RrrMTU zEG4D<(3_RSc9)d1Ja^$m0FbgH3PtgN5wfOok`xa#PNlciYr;PJ{q!$DO1wb4A*}1` z57eW#kq!c_!V7yEWBx!ov$&!bc%564D=c7-nZvIM^Ui#K{WF-gXgoW7f>$7?GuI%~ z6>xzDn8N6aWc6ZRmvE62{s+0lFOzEo+)^@W>3`dLSS z`QgJuQ+BWh1oga|;QX##s?};S7^D6EoWstUH*VsTG zAlg`W=ukU|SRtM{qtIs6SzY{QFkaUgb9e`o1_BjHvV=I&@SAHs{p>eH0+7C7@hhh- z#-fGNLOLJ*+m12BJlKtsoS}!V(ERnVy{s*y0bsY}ZZfQH3xPQjT6Mylva&8`Gqsh7 zN@Q%}4g>SFIjw+G-aUc2c<1=~xaol+2dHGebt^CV8MBKq3*-b}Bp!teMH4L>!#o@u z+Yp&@t$Hyp@XfO0BRCu!Jkjtrg%8fH`9~RNu@&v~;v^~eff8q$iOk&WbU5J129|7( zK7AgPWr4t<4`Cp)xSo}^=n#)NzF{PuICpVez<;1^TwvUt{4GTXS=6#*-r;&o@fOE-wC=&6+gPRu235`Q2WKw(bj#-t|BH z@Po9PFCu{cMB}ycyg41n73Sg|^~s~rpwCTSl!DBYF~n>3Cja8&(@ELP@^?zP?^DSr zgeDZ|xhuBG?2rOIlsvl7>!KtMD4rf9tZnAgoY5anjoB24zmw0d5wGGsD!6;c#%W0G(L z!n|$UHu8R!yt>l{S%k{-PSotHQs&=ZhU1_P=po*A4GzdfA>UWAzhpQxo3_4Q55L=G z7m^JS;s?w*j>$2lt7I0RtWq#q`QP3!VcI<^-DLYQlgn2UCq6Sf0~$@V41D0C5I8gc z{^uM|lNK7#O;96vSAC~0ot<6>)pNN6-b|j_LZ9OM9*6pY#3BG<#SNkmG0dwxS{VKu z)p3s=Jv?}C{OAE)Cj-5M8xBJmB?&7Wuh{I>kr6W3g?`75e@-B4-fVIMKmCb#Z^Gld zO`9@BWM$ejdw*vi%a~@nt<{PHl24oCn}wOv;|WU_thH571n!K~ce}j89Vte>mxLkZp`UW97+P zdom!edooWh!28f4o4q$rFb4&PJn;798^GJ5Rt5bPjWu%HYnf;{Y^Y~MpTHTOxnjg_ zmj~ji#ehA3<%X-Mww_~cc<{|?&=E>xPtNy%LjI;Th9!v4#i6E=iBWB89Wg&(6S3m; zXB!)~x$$wYCE4}UoQ$7?M_a#j|1+^Fw-3*>oD;8HJU0GB59~_h6J$_{^(Gp6{TQ>- zns{#qV~z;DfsFEMg!6mJFX051ICiQSB)|hIvF*Zbo^zgoOoN8ZC`xNFPhVm|ME*4K zEvBV>(bG~1uGgtSdrL=__?sN9kl7OQD_R?ldR~uC(&?GvX;51#DkaJ4f49g^(ML|r z;VuOkFBm#?$k?$v_q)^n;PhQkD^h)N1r!zyal+GUA2R4N^X=sSg70yNi|Jr>#O4tz z%}u9X2AMqkT^X?b3-#<~LQI5(ZNd_|L~BjV$0YEy>!lc)rey|q4PIJRqX#*!7r;q& zhXQhn;7j~yWo2cy-1)ZXuG$=2IC3>{MYz5sRqHT8Ukjsl+(1$-7KBS2cs!G_;0Ige z16Kc35Wh?8cJUUF>Eq>avD6Y!qb?AMwCFf>Qf%B&Cwrj{^`ZpFx6?SE?YGsv^1W~F zx!mx)i;XX^1-y1}X3m~{l%}o;>Z(hKlOagvC*B{&Wi|^sQIskx=j;Bk$1MrbPSl4h z-7hoXpj#3?H4w;4&{jkp6kMMnn|Q(Aj%Cj^0?LW!%D_&Sch4&#iGnS+xidUBFyfi% zaXVUmmF=1KY?$l+UtRxI?fjpwuG`mMQaJBR&IN9m$GYZcsiNt&4j($?c|fLaQI(tY zVi4ZfyC1xq%Qc}|)=+HG8~|G}ZJuDb7z6NsGP9g8U)$yyS4t zQPg_0d7B2Wt6enmRU6=hgQX%>J{xc5C0QeiH6&^GS4`y4IXp{iJLDF}9yxQDp8EOz zL@X}RQX)-c#zfE%X;<{3i$)Rq#knhn^Lq8X`j(u>!3x96G_v%JjQasDl7L3V_zXBp z?t_Ca*(c2M22#nF&UJNlMH3MXtUIf_--#1n0(K<_Iv(@)2cKz;ILSOE8V>cPLtd2w zr4^$ebioCCkf-6K9+P2rD&FA`cU5=7$Eo2Y6jn-Fs4tF@A3_mvODeg@YLX_PwoqiQ zxJb!)bZ_V8KKjeL^hPN+sEnS%Y@onfaLp+SZV4gMP~Ar(?U3j!YBbR^`5$ztOQe_Z zYV_wb9*%KHY}IF;j!c#!4~7d!Xpf#f$KC19R8aDjYVun$HW;yCvF7dP;v7hC`sHA1A74Ef7xEVM= zulIHY`;!1qkx7%NBB=$yFH`rXOv0P->fq|phTYn>Rj3ikmAJC2!*J<9Gb<&Ci$#Ul z)m%*M3&Se4rM?;keYF%^L?6ipqZ%X(&O!ak6HG|XMJ z8lut!wnk7~PeF%0^p3-#MO<6W+8Y{<)NUuPV+?KfCzrwPT%pp=%*8LSF^E|q*XE;U z`V1Fx&OQ)o=M;2&NQ$nfAn~;T$ET}0dwaQWPrHrW#rB~QzAa5%f{E+d8%nWy+(s#^R&K!?3tyx}Dt-r7ew1W(Dq7lqJ!g znlmqKL_riR7kqN=E3NZJrY(9~Xp8(04S7e|+*$b#9ZrsACOJ9ve2D~;Lbt$)b1d)y z`r@U?d;)$76El?R;$;_zIz^~wKpqU=Yay4B3`lr{a}+Vv!Oju11r=vux|G~kx$t9H z2os+fli+gAoa;B1M`QMqqfeX_61pno23J`avdq0H%uM;!aff=ovgCD5SJ_xwdpxap z*-x_Z73-=>6$HH}#H}%eGOh*C|q$X>-Fnr+|Cu=QZ6Rg zjrN{-x110n<^oVi_~G62NlLg^t{O}Vk!MPtTgd?7v*@8znm%0i?aY^J4{F%jE%~9= zYj5@`BE9D|a$Om*%<8iaq#nG6xQF$jSn#O?!Iew82Y-)>Y%3 z``He}XzqHCDDYv133xnHSGr&G8X#jO(cervtFJngSu2T&AgNa0oelhc_H6a|-}v~w zlWSqIa`Suq%g6HaM=?bz6?u=t_MD>#FdgeItpR|mh{+HXcc-5lqHowOFn|go&^oG+_EPLU&oFO_ z%#Vu3elRr!{vW+)Ck;fg5m z`}Yu}jC=YC&>oS-_uj5f!vr@c{$N1Jlq>7Xs3UcoH{XPUDr8!gI{8n_V2uZOOkeLd zW^4M3dwIu3EfQ5+ZO@Iqx_o zAt5MM8MC`10MEcaNjG7Qm|g1qr2pBVAWw=WL@(~I<+DAw#6>mkdi9g9fkJ!EMUF*u z-948+zpP)Y7p01LcWLGxbUz@GOU{!n!-~b5m3K9(csE4xIB{Zr)c$okHNYF%Fzl!{ zLH{DpabH))fZ4yQ#t!_4u;cV1@$HDCgqmP0BjX1aJ(%E{<_xP)5KrSH>yiOiQC89^ zqqz&2l`{&nDQ7mO5`z;l2M-)jU8_8Nhe0F)!H*lK3;uN7!AM8@Q?m&WI7{J~@b0B~hcS9xk&DnC;kWcC*U}h)to8Gi0jrC`W;|(n4s^%8O6)K*&bj&h=L zvr60x*kxsS(fqg+TySOr-zKhfnKs82aFQKup8Pk@e2L;Qam=s99sBrqXlGhb4k5 zZ>^NUJ8tDEPh}dekx?^cD5kRgPai$P4BT}ngLA?r z&93`cv^(MId)Sj7UvN$o-dnfs4sF%4<$4)gbbk5VUtXD!SqnUyyx7_NE2a?W8W?nU zXs#CQihDd+f>(m?lx6U~(Y|~mM?ZQ8P!=>zhv~LcmuHPOrzWK|Q_j07?TwA6-idO| z*~1hBW+>*Ge1a<-PowW3nB@5I3y26{YAd2x1iGg-!w4-Cwgd^v>-YV&oqfG29(>&U_UotR zr;0dm^k^rF5|e>iG(XiH+Rs1Vh$8`_9&M8mZP+>(MHv#?&mry2vU0+Fg74%bR8~Ah zYH-pVuISw_Pb+E@>#isQxpOU0Dqo>WoLs60%j4{umaSd{Kpz3ZIS{s??_KW`?C2=V z-({`9j^QRlh?aAYk&~JmG7^2X zIMhEx{j?3r|5_=xR?gBkD7&Qzd$GY_VrgOZ2U@P$)Xt}Q*yGi^^dFjN}`Fe*gWTvG$;1Howv`P z{Cg)gXN_rur%236ll&5!$E-oB%4p$CeQz(itY;Vpo>lLO#&3e0cdeWrlcEZ2`~fU* z9ctIU<`j&PE=GV`a-m2H-ob%QCVDzAzniP+YzK!%icI*sSe9)lf%Ajr%z3Hl zLviB?VR9n{o>{N&B0Z|2Eil^{1TAxhy`1^F5hGOyDQZWuFI!;Q*hhQ03QOqPpP%Y|^-5~^N*WS)g+^`*)$2E=Y)$RahsMrJ zU92SmcMC#hk(W#wU}%mrEnsqkG)cgH{rd6S@ukQyBlV}K{%==r0h6=!`z>xQJTD;t z4H+yivMX?#KV8%nDpQHtc zBua+bg^?NOZred(-r4oeL+0jON=ho(rJc_F2=Z8FOYRO>r}vCmSk7cV10_f6RqA&Y zX6Ea8BrXYpz7hKAO_c*z<|Z>_OQhS+uZ7<dc%ulPhv%&J;B7#JHHgTT0`hc;L&JVQ31a!$p0W*zu!2`Z()k9D^JHIB&?t z5MzttLFd3U2^n`6U?=drq_~HL>Cx6v)K3oAc;j1DF?Yv2ImiyjO^Lb{eZa)AF8dH0 zwf#%OCUu21CcA`cphU|7w16rjcS#j0kS7;i!xMuVG1l2Y4EZ$3wT_Pe(%-%K@m$2P zE${f6H-g?XHs$msUx+4q!FPLfYKW#3dH`l0&l4Lv&ICtm`;#=nX9Q^Uen#eD>@OI3pek?P5t0&z4yJFGwbUgC3 z`!qlp#A*8P9=RX_Bj((45F6)m%p#7v%2_3$NyaLGsd||aE zIq0ONqw_+cs;Nj6Czyuyhj-6%_w*x|8VKtda-t9SeJdZ#S4k=#WJ?;FfgRt=`(^1q zXu)6#c``ESoGs){i_3Q3rf=Gk4Jp%FmGmlARFxK~UZZcO{64#$O$&g`BpgFgTGPnx1u)j(dylf{%v6>u$u)75*C7H<%ZPIKS{`FDv;+K3emΜ& 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%0DPO4%>Q14~td`8v?Sb>f& zjifE-7FN*i@eE>K@R>&G(o2j8LNXB-B+NIl2pp`hKigezazjmf=&JT816Mz8dVHN0 zUbb*+G6rP%JU`2b;bGB@`yV89^}M_(22nY{(x7FowRKJ2qS%*JAgcZs~ z)j$5l=BHIW!Kw%EJm>G#!y@e>xbe6S5!1f!INyxw#}}{PK+HZg6<8tcr4~OdKQ&o? z5;lgEC`h>7`2{7{2X05Vis~5>6;Xo~Pz4hdgI>}8moQ7@K@lT9(v23REao24_J9;A z{J9R|Zj6TNBT|WkAOH`Cv^%id!H^_r@g$uMIdRXh>{Qt2;^EL|ti1w6D&g0pgy^8| z$Xxu{E;Eo2-o1$(SOr7M>~q4uJ6V6tN;Ch?ydR$8#y|r;1FXj3=W`B3P7c6lng>xAjQ{mthF;|M6+tjUiZiGdO!4% zlKqZ(i#Yyk_=94)%wIxD%j3ExI8Jl${OT)h1bW5Z<%Gxst|VOe9i7B*w3Qwg@nYJ< znZn9$+cFXd*C(xib%_3Mzv-OU;u>=8E1F$8<{m(s6CV0eNX*?|H#3>G6n;5+k~Fgr z;}nBUvsVz~tUy>N-2NX5I($UaMtgnDaRl~`zCdW?BXqFeQKZ6kVNmO>il@!Hu;BjUYBr;H3Hht-6L z5d{@Te=zr8se|(+#vheM=OZX!e_dgWhbt)Gr+?7j9J4>8QTh8Xf2`&u;!qX~8F6Hl z-GiN-ilZiW?e6uLQh9a6U4^3DwMuqHle}v;ZD>vu-Rqg7I$3%i8y+MovNS+E$xA;<%lw1wr<+0CyIDGYytQY-~ZS^J38j+q%2eglhxpU{n)rlX1GJeS`h-`FS zBuyMIsw-!V7L<;$FbAss0okD_E$1NmW9`?jqT1VUn8g-Y(jx?AgVB(B>;3Pof3!Jb zXt*-PR>Hul-`$EfBo85_Q@!a#kE))MiOo?V5?zRi#?H@Tif@O3!o|6lXE#K&oV$)M zmUjjzm?8Vq_;|-8HBI^)pB+i2I_U_j&tRSe5N(7|T@PHLOQoa82dpuKyn*Q4*t-lc02%p^C+(xK0^}K7S6?_op`h;+ z2?+1*qD)VH92~G8*&?<**!&{d=xFw)-bMs&Q?)n~F)&KaONHZfk8_y)QZ6A@hBUQ- z4rOq~&;XKB5Wv$&;Mvk@GZ&sQzG-6N%S(BA9Th^#L^W*>5=1*Z-lc!&kFP2ytq3#R zJhso4HuT1!t-GCwR=n!0y@gJJ&FVgz1q48%dMUvs?bwl2LK`_&Lf{f475b87-c#{0 zkkh;uY~#fn6#HV>mqCDhA^dnd%EVEW#Da{nplL9nxU+(`5Rlm^aY5;?Lr2VU48P!n z+-5Uui4g92Y#o+o)7PvyjyOn%_n=36%`V-=t8A*)vzoipq`E@h*@Qhrn*r_>%46=mn60Io(Et3$KR zW|MA2={?KfA&$#p79y%t<@)Hz$RF3LfT+Zi#rAO^&6Idm0@#>bj|2q`DN$J`dwjN_ zv&eA(=>m;wmnA!YSJ>bC^{ZEV)6;MLypj#b&f66&X4$Y}HbB7QluQrsMEr;V-hXWH`*{W9++nGl6>jz)r zeKI~{?+}kC9S%c!M&e9Dl3Uc~1fpA*nOd9n|48ZC>v{ddwH17yk{!GHo@Kz^`7)J_ zETzRbGuqPHx(gEev+k$YUcwN|%56vDyiwnu)0^#txx=Y ou=w*6)~!Uyw+4%<t<8 literal 0 HcmV?d00001 diff --git a/doc/1.5.5/gug/_images/manage-groups.png b/doc/1.5.5/gug/_images/manage-groups.png new file mode 100644 index 0000000000000000000000000000000000000000..b7126f53dc90a6acd1d9fe917caf67b9e2380ba4 GIT binary patch literal 33629 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

    sLw@1 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 literal 0 HcmV?d00001 diff --git a/doc/1.5.5/gug/_images/manage-sessions.png b/doc/1.5.5/gug/_images/manage-sessions.png new file mode 100644 index 0000000000000000000000000000000000000000..c6d83255b28ba11c5f14e93d80fad24e7bf2ab3f GIT binary patch literal 61738 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 literal 0 HcmV?d00001 diff --git a/doc/1.5.5/gug/_images/manage-users.png b/doc/1.5.5/gug/_images/manage-users.png new file mode 100644 index 0000000000000000000000000000000000000000..d00b71c76d1751c4c5b0da93b6cbc769313adc41 GIT binary patch literal 33353 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 literal 0 HcmV?d00001 diff --git a/doc/1.5.5/gug/_images/recording-player-in-use.png b/doc/1.5.5/gug/_images/recording-player-in-use.png new file mode 100644 index 0000000000000000000000000000000000000000..d8dbfe9bb651b9a3b7dc819f8f0614233cafb5d0 GIT binary patch literal 1040397 zcmYIv1ymH#+de5sN;e21ASpf4X3m{6=gfQW+_#?hnFM`Z4RR7@5*!>HaxKkQhB!C`_&7LtABi8_-|<<# z@Vmd@`WkAe;8cyX{<|L#I4ZwU#=)scB}H2k-j5%8X}R_anS*!s(!!bbT7lb4``U zJRd(qcQp+)xQ+Dl8`p$1n>1#BYkmpya=#yHgNS`6$Hw&tpu!k~=vo{{4Y#xpHKroH4qGyKs4Xkq3 zMIuAM9#eVJQEMJhuXAkV((h2)<4}M8?cF58xW?>@(Tay_p1Mv>w^3 zjTapg*n^3&e9t0=R3_jJLmt`%5 z`ROpN4uXN?WjO@?Pt1G9$0>$O#K_BMqzOB+$;wNfrDm<;6BCYCR~h%d9jMN2p_}{e zh+qK&#IvPrf?t=o2Pqz_b=WD38od&ItIqlUrKrIx36u4Dp#`P=?pJlOs-dc0(#*P% z>dqPeksBp&eDdCfjC8KBY8|#gyTnjgGFz?8Lfu{?iSf-Z;ci|zIl7C+LI_<))ye5w zn=3EI<0%SLW+XbaP&^0M)9Sw`95NnZ*c|nCFZ*&D@93KUuYDlL5;>fb*aCuJBCa$6lZ(XnbGB2Z5vDEEF=&_j{6)pI^+0!ZSH zfqYzjD-IrcDrHl)oW{>;uVZzynw{;_oap=3TVCRu#@`~A53PycsI~u5|2=f3{i1f1 zQRcEp+3(s7u`(y5iPlB$n@1DJShkwD{MYjQ*9sL`e9PscH;rCB>8yDI1r2O=O6BGB zkrTB(x`s3dHR%u93a}4cs^FPqQHRC(L4Jjr7?fo=&m__^q*2mX{Y+*~g;X8^_dLa%-dU{c-gd=~ zVj9BI>N@d8pwid>grDv+p$AmJWEFC`BeK4qcDQ~P^kL86F37*#1Z$KL*@g49=yJO*uqxK3d3ZaHjD!&|+ zbZ8_G7w#BTdnmg8h{)i#Uy<1b+-iSWjS5%9DtYS#rF*yHBssu@phW&K9j2_9r4}MO z20I4c?7WQAt6!R2B}1oE#w)Y)Il9gxPTiOa_{nG$*t=+?Px|;f*5%NJ(9WK9RfP zg71w<9S=b6vX!EKf~!o$Zb*PPkoJfdyt;)s7X1)pbE9n&crNT(%F<EG}ucb#AojIE<*w9gENth$UbBAK9Q$J?*&9!@cTzE*AwoO&{J^= z$f1UJ^?)spN)h^McypMwMYgr3qsE2o9Q)e4Re>*?|1|jSw5h!nK0o59hs6e9Te)mLu?XF924?us2WWmviG!D@$Zh$DzjOk0)RYqEv(PvC0WJ zt=`beUlWQ4Ka|apeDkh=EMu56V=8tG-DOt#0=7r zc=bdc89s;!Vy_Rwm5|$$iA*^oGW|ie@4N})F{e>?(?Vb5Gyeuu|F6^BLA5y*tQTl> zL{b9RpCF@^(3a>04bYd5=uBj_{!-W7gm9;-A!goowK}aDVmwv9d4|*($AQ4~ayBF< z0OfYIOrzk64Hi9-_3d|rZ|J3RJXk~%((^NuX?{LEl7NocZ|rJ@4?0*UmXk(;MsCMBOY$wvMC}KY5lQHsGLB*`{Ocp1Y;fe{8PsJ;L>>^wYWe z$OPtS;zY4L+c21j1GQb$)beOKd~f+F?fF(V@GS1p!g%z((o3s5loA{!;E zu883oBYpO~cTZXu)ELOk_pRgwa+U+55r$D)Z&AJTT3m||`%UL{^Ut$j3B+>k=N$9* zVMmtLWkWFb;8k;04{1J11i9iz0M)CTRnXmzKhdXMJ+@xZiogVD<09^^^)_Ij1M9HE z8jaIITRm%+nb^oQc5!=SQHk2vlr(%N$|WpR7T?9bA`e6i!jytiM8c1O^5}&b>2M%< zL5+fw{~ev{HFG#t%947BF$(iYyM(Ks_xfk$(?l=6sE#$+CrfHQtgn2FnWmiN zjws|dm%X3REb**A(gMDh2|W?-SMNXD1D!DpI*NJ8jprX^PvpJ6&8Dm=*q z0PLOpyk<4G^(@sg5|M^$c%CE76NIrr59_s=6rrrsC3n9I*lUW~W3g}$B-!mP z&X|G75s)`$?)#V|umWN{j5B^Q}r^`4J*6hO!89nFRRXO1nM;j2su_HvTlND(r<3S`zxzw@fWgS)UFFj0n%8FFZGEG}ycG zDdi*L@)!G&l_;vPhgr2&x8V7YnpkOB)w;XZ{NLN@I>;m#hA`~t0@hnZ2?d|cextr# z5q|)4Rf!^*2j}#Jm62=kv~-YG@tBx)M1aHp%^;5eXeP|&h2xa};hTNGG8-c|%OK)> zWbMQzY5pB+UY?-MX{U75H9S_?g|9^NboAaTl(4g;yCbNRXVrHXwMDitu2f47+b&D$+Q%8GeBLaL^1iRt+ZNW#P#s{5qeBule5 zH6JDCIY3%kwMmIVDhdi#JZ6LO82I$ixD?pLTl+g_7XM~Du8dp-gtyMRs0mugM%Pnk z8VWw#Td=xB9-}`HCDfOHwM;mJb2&KdRX60u^{_-NcSP3@%`|=IiZuV)n|Wi;ok&kD zA;N2VWwSX1VG6RQx<*i@^`x*J3=SRqF@c{9<%+ zc(@{oHNiPS*Gv|RJofxgKl3kbT$q)8SdIS}W=5+f+8XmMi6N+6reYw;D_y>&@}1f8 z$X9y+cf-7weF$^X;WN{A&M(zGv^3>S6|mRP!)jaqix%Np@L|0U;mm{*$=(#?e)?yD zHUK>u-4%q9pcE`Z6okIll10pQrYT4(bdI6A!!kl{-4Wy+QhgjVO7BoAym5Xhm<4UX z4J4@38ti*NpmRXez-bVX{t^17$nbTQ?d>_CMcy>Rmhb(_Dazv4D%j{xi2(8v9!5Ra z!_k!*hFophSs*Cn&RlEIJ*vnXuvm%uFz5;dEGO8W_a*V&EUgQA)><)mJNrB!9XT94 zmbMn~T%XkmhkObekM*i0x~Y8n+RDz-ahGc3-TFDv`rl(lTOSE>yKLc&=}fiaVaXu3 zjLI_7CTWFKy98Ti?xFBIU3GaX)#r@rTs7`r4lP>z9$sAdX0$UE&pf;Cv1djLeBE)) zhsD`(4IyS62s?LtKyfeDM;G5RvgCH&2f6pJzCQ`tlY=EZ(MVyWJe{1Z7Uk2TJ`7V# zJv$Rc;^Q8D&H(5j-|}UhZcv5~O5>*h0((x3aIrCQRBe~y+sf6G#F8?@tRq}*%QFj# zbJ5e<41dfyxA&IPMhMrPEMuhp5+>Q8%jp+f=+@*k%FYW+k42$5c{*Dn`6Gqkfz(EJ zO3oQO<&+E0fw{;HC&thgOGc-_LIt}R2K%N9rX#PDCo0qM`U3TDB7J{Y2G=%R+W7A7j(uWvZ`73z;3orvj!s5 z=(&C6_%d9aQi(6xCE2MSOu}P?w#g;|?o2ByDV%wWUFwDLb`9NoPq~qU^sd}flCSV6 z#8H*vBSx>}<@lf#d?!r?WwZK%@SpESFYfSK%vbggj>5tY6#?=r3 zk7jR??`%&;0rE-p+{uSg!|sB(`y%2S0Um5R2Newl}WX z+}BIF+`0-u9C?dQJ#j#^h8NWTF5VLOU`CYkL7c3n{H|B9Feyj}2kK!U)OXt5p5N8? zOR{O?4WnWZt^0{l*bM?h?1~Q`(8KJvR+q{|Yj8-DV)O3y?I4x{UqImU9)}6rO!^ogZ9f_ zxa~1#Ratds?vS0Ismb5%M+cpt1?Qzqyl-wi*I6j@R0LUi76%{+8oICl<}I6A<_v6} z(}!MO=~RAsDetaa7f75tW&BEx$m{fWi;+y6vjfS+4m_1{+dY&J7F3D}Jqe~hj3N7_ zE1wd#7&pRVzF_)oU}Z)2Tn>DKqBcBy8+2LVxp_Iu)zDzq3v(f-CvAjS3gYuCWxfHeMim#)ggqLjLa=^=zXk-Zo zdoSb`6?!(J7=5%wfaRYd96JSw&W32Wi)(igw zTI`^}IZs5_mX>;FCKPc~p-C*BO@syd1QgVP)`U+Pjq6tbY1u$k2sv6pX`d~@u7Ys! zbAfJ-neoW0srYOt83Ep|w-DfECe#x4dh;+qQNuo7p&^!;jEm*PQ_8+M+Up? z&fh3cZHv!57GKWjUqmTJ@&-YmZiHv)*{@*eywu%lmds23JkSxYeE2QNyri*c_&E!5 z37X%NHRNs4bDfzUbkHq752ZirE&>cZnXpj*E{$3)d3d5Jb0@(VL~a zc|Omkdk_Q^ZSV0Z*|*H z3h*wJ(y8)_tbXr5hF?>(#{*s_0hS{Nec*sNF+5tq<>;FhGAC{q2` zuV#AM{>%<*j#~E9qAJ>JZ;WJDqsDszw{qb?sWnswVk5kfV(VbY*R-@-yCS!*Y)GDB z?M$%^8xHRaUAquwW%9Cdzm}(`QC_(WxE=^yiwkT&)f96A0787x?497IK0=n zvGGUj&Q(&MLW)MsgB zda}kkbSsO-*Ekct#)hsH#YZXEwHLx+kt~#TAC9|adIiIqwsI>DLt$}po_Q~AZn<}D zeGF#xy|33B8r##a+G*}m+y(8UnlRUa)go)D3Izneei@&VET8|e(G09iAb>b&wzch= zIQ)9!*ST`Cb;FQXLLb^0LONLBuc4hZ(74d zQ+-OhWoC!RUB%$ffON-RHrhI!-v9MHG1I#uNIQ> zTUv=Yf^>Mzo?P7}F747hY!>Y(C5OUhQx8-9JMFDksoyUkp;S&$J;)QPN=lx-PCizX%pQ0n)kat;_7#zuDs&CXW3-$d1rn#~`82&IQ@Rmg&K%`rl$hefZrb|?Cr$JOo z=2K=dm&^$9NiYj$O>ZTZekMkucvp8FGt;@O6viS84#qPT%#-xfIByC&;4)-Qtz3LB z_*AmGg%t~!slwv_2V#;k%`*14&}wfAv-Ue~rh;4xC`F6h4Jq}2ZtFQ-z#)h#Rpb!} z1vx9_KoQnm!%GTlxaw;nR2;J1^pSw_UT~i3@LEz{fYeHRTs171dBU=3*WFE}xSY}* zn0w=){CFC-u`(jaFkh;`HB5<1SU^xxL{=;Lt@)2Zhzs47*;I{JS*8(nsp938M9+?2 z_c3V~yr$4tYvcR{pbw6j2d@J#SRgqE=mW{nvHLavWhjz4y=25)xys1uA*nGXL3upz zJCw>d$)8B`=hMWjpQ(0}c#hREz0aZxB@(CB_}Oo_U;_h~%ModrcCEgxpw&r~Yl*Su zR>A~^1$_y_GNETc7c#W{N)a4wqUc-_8DByKCKc8N#*_p4J+V_JqJj2Q-skm4=Ul@b zR%B##U)v8oJRboa$?Nd4pOxh^xX6L0k(&0Vo-CexVd~7^k`*jUq>v!qBNfP8|e*CYJUwhk>A&-D`GQnlWR`p(#JY)Qnfw=LBBu`E1_i2(V$bx zGXX3-e{ zquEIa4IW!l#@q+Q`_IMrao|w7u5ymikd5;le-@JE?m*5cH1qFoTf!?#8G2(V^jWLc z(P}Hl*4EbkAzW2QN1)p}rHJgsP(uvmj~)+W#!I<7%uX8an?*sQblBKp1i75c9@}sC z(=~3CNKP|(K4t~dm5<#34Qy|J(ri5%l#R?J4L4PSKB%s$7e{@08O4_PONBhktX(7C zw)(Am_ox{~Xy|uQ`W0pI(_0rKT@p}9{O`&^;P38@5=NAa&IsXA@5MrJ?&-k)v<;jy zu$CjUv)sE3^pkU|Z(5seRge=oaxruDbj4b0bba^9At7xNp+#dUIbjkEEzIm)WaHgw z?-}*Uu1z}>Wv13pZz{-4RyZKx7_kPuR^HHx8&MtXhHr&cE!W% z*UXlhhGXesz#p2#4)dB2E@{6DIY3Llkgeh-TuUA?3q9ii-EeGiP`hHfMeZEs-=G`X zh1ym=WJVS@#&``ZnJ2;P34Z5qceB4G#!@bS4e*3V?o(?#5oo1u5=o zEO0CQ?qWaa+V^UG&syQYa8{`yQh@3=uMs&P-VsZxWZ*!elp=B~Q{+^9_=ovDKmzIV`IOv*rt;IZprlMVHs*@6<4PQCgWu~nk?$mQn*BDj2 z&U-wSv%z~+wlecR^>L6|nS(dxpQHDAbLd$)7P)tNp@jVrDeFHe-3yOWj4a2ulPmpJ@>+)S@BqIGgwBK8OD8Xx%&bgp-bnG)={-Ff>v1ijCe z%vCQRSH_#)H+M=dt+>5?*S>(7=jd0$mV!8>$Ys1R7^Pk~@JO+O?hp|i94?ea?19<< zbi(hZ2F@PNU+G~k(~;4zTizz`!2vzz50y~aS9eu+0fqls;a{)e9YMKVi(kC+b94I! zu-jY6&FqeN4UTZy2}KmERoEH#c&+W#fP2%Tp%hr54+EtVJrxlI^?S;6`# zk2lc3Z!fL#wf#UJ3>m68Y;t#<(QyaD%4fRbVm{*A|78lW?&(@^X` zrF9rK4%SHtTOv#yqhvsx?b!3CcL(_3Qig3d-rEtP7MTgVW!1F`qrh&ZVrciWW{AmP zp8&U%kT~plK8Ogr3qU^(X;-YPZ|wN^hGl0=hbcT20E-8|O9Lf= zu3bSMil}ar{5~S!5o{wLGYz-)KPTMYJlwr=wfEc49Qf+pQq*)q%d>@#Ot^m>Nlv4C z$%32%-8^x!3VFaVzis!Mv%!ndWPXz`!^hM-NBQrO#1N{EzBO!vaMax~ZLGpJ#DNZ% zUv}cq$#hQc< z28$MIK7k^4hgm!VZIQ-xjg6e!{v8gR-&{iQT^Ds(o2)5YzALasGa8D&=I^Ldl=i*& znrEdN>ptq^>&q0!PD|giT6 zw{GR`a|=|B-1=f(kMZqtc)lad#NI*{z3@G^d*xh`q>pPrB=*xMMjwB3RBTc_xNWC# z#peYOJpjVvxZ6)%Cjzb$o!Khg+9HXR?p`26LGaSkG)n9vATmxdG5@wKzdseTpIX@1 zm=~e<_x7Oh@Zlq;iZ;dIlRNGSV1;{yt>K2Fxw%&;pTH~PH;E+G@2vx+Z!Ez#c?VoY zzuTjr!zmL9hGOw%lfe9UZ-s=8;JkH@Gt%?WfY)LAI}w9@7g^@SlB91c)bzt6_Ks zT8!eCwVP=hY#zQdMRd=zj_1Eu`3=Gu!xb1#u=h#v@1b!UD?+Zr?$pq?!f`h-`Qen; zlpNiZ;g>|B^CzmDH7R2R@bG8#s z-5({gv#E6GGgQA^VE!>ZKX`F~UA1A0_?o=FJ;RB6DU=KqO5Nn;5b09&&?A(>F+YqL zvF1z39v1R|jb>mHda%p;=2YfO&;bU#PMVJu)AbDTM(^{nf@6mNM8Y?SEx|Ul<}x+l$a%<{B9iB|pIOLU5S*aS8Dvrr z>m3>nQ-2Y}OZem2x0t*M5H6)sYt;4KfGD%>dJP0ktvDeYp5PvIFf0D>^l)SqP{Jqn zvK%J673k`UU#bhyjD~!SV+Y3joZ)aFwpMOxgRYw$KQWk#eI2ssz>xQ871{7j=ur)2R{ap)rn>Kn6I=$98C z`eL3mXeCq1$Jy}5T7=>Mo0SzSBi|-1XFLdJ9_u4`v?bxbs=73Dhi zc6J#JqAG4LZP@fSzd7bBi)C^#fxi+fCCw!^u7uTg5ky zGfechF7h$r9cSD2g2Fjn0O~EJ;NTu~494iS$(fH{Nz;f8Haun*7|yiXs) z1@WCz$0dBMo9l9>)|GR6qxo7%8FMZZc3qo4Af@YOgT8Lu{4f$Y(lN*9S?qM7v*pw! zRn~Uv)DNw(M`mV4`}-&Ao`DQz-B#3+ zL}o3h$+APWLdK;)GAT=`5k3qo(0fB%7f=L-Fj(jAb)c#e=QfmGLm6Zj0Kz6X3O(V(&prySBz8@;OM7{d zDNH?YqhK&=y`7w5R@QWfA83F)TV0Ed+H!b{eY$MNHc5x^c|oCm_l9Ie(;0+7?$(({}P&a8_D`_fFbh?0XqAT0igi`e5=F<& zC3A{i)5cZs>)dx$_Ttw;@*2%V*MNKg>lTuUd6NkE_kK23H5SN02ip;Scb~kY&2g zG6C8Y|%tGZ&U?)r0x_33^fEiy2U z@po)>Vbho=o8lg3dt@91S5L&8JV{H-27B@!4#F>BS(~~5aU`X zjx8H!5MEdZoR~uQvTH9)VvSpp>x7~{b$#I~?zv_%bZsqV-V29f96#Zr%hBqh^wE~aU4)G=sB)IppM~>8DS)_WwZ)34hFuggpe9KBvZ;jpt_bCw zoF6Df!*Yf&mO2a9<7ioqhIuQLuj*B3TTQY{-f$jyG^8>%RMt|4QnK}=DJXcQleUNL zvuKcZ1govy^5^Rnq5YGt@gZ&K5m*NUsm`(!%R;LD08T|FtwlY7N2@if(&=@yrXvZm z5{44X1Ky6Fh;&%uaRac((vx0fpc@Sm%U91OtZ=I)|92^Y<7VBQ>|wjH%iO&m>;c6w z5MiDH&vM5;Re#2kC;BLH(@$&)AQThkmw`BN=@nJ68-Af%NK=md73%|{*s)>klx*7ZbrEG79#XtE15$66;=qz)OzTsgp-F%to@p0YsH>N2cv$J7XFqV+xW{`60i4xkN z_5i#){|Vy5yx%uM%Yfz8h{&R;EBwHP7r>7kEydv77g5+pkXtaw5++tMc(Z$(0RE}q z&osWv`aOq^D}%oi@-&X{hKJ>kS#jf0r|Zl!T(kuh8xW6#`NW1RO2u4hehu}+>(S%i z83IP=U3h-1Tzk|HPp6*2HQXbmCZe&itGh6;k+5*dY0U(n6TN7kVIJl0__99nE|(%~ zd!C-)?t0Zz^1rKC?V>PH#yxMa;rp=Y`u0{rXY3IW5-TQDtmfc(~?7x0FRST6MP;jxa12+9JhbYWMHt zu*3t)fab5)?S>~Uhr$(=?bivepUzDLM63_ggSY-e4GkzID$?-ioIsz7uCyt+Wau>L z_d7z)Sux94BtHNmnDedAqj8gH&7Tq86fQ!y3o!V%k8I}cNaUTDJ1s!0#7~ao;Qsz~ zhRjC`k6+%g0#B+m?{is*@}gN783#63q}yj3A6diEM0bqq&Wc>)7s&~G5Z)dggdXzT zNLj9@hS?>9drqEP1GFnl1nHbje~cbr4h~3!Et=f8o)x+u6UTKNlTEH5MIhK#*Tz<#4`il0zVcWdc~esF9b?&1Wayk0|bl;KKUA?;e-gM z%9H}eoYh1bdQ&8l%dw|Dr`L!Rt4gaZs2K7Xgy5FU4|}jyO*jB&?@2T7uZFJ^#A-Ys ze=KT1RuRWuGEH&Mb+4IfeYc^Z!8lu{gSQg(OsiB%<)iClO5KnRD&y_3?(|5sCA zAMOd?yg;85G`QQM=o2@;ytQ)^g;Q+^d92Ja+0WkBx! z!|)AOqrN+4TH^Ek-L}MZ3RetJ8n?8NoH%|b=-GTle9{t3`<}nCR8M!SMgtHO6O{q{ zcape1{$s#<H?<1_NZ$zd_w$_AgI68NJXZDRjgqK5F%#$+z>^aR zGBUEC3e0Neu5w&yyV=R*ImFmwN^Atd5_#Mm7@|@YhAU7mfXs$miU6!9M`FZ=^JU^X z;qAov?xZJKcy3i<6%=^HGI)Zm<2Xsi_(8c}*!qe&`n*^gfM{t!PX(Oik*d-{ySNER zQ=(otT1(njlvRE{PNga$6?3$@uo6%8xoL8B)m@Ci)w~yNNRPdOD8w!P6B1WLS2q%# zW^uBtg*q}sYWAo>|Cb-5w8P8^3HY0Wv3hch2s=ySX#=_Y(m-wmAU0o4t$OggNfC;& zF@`0vh&5Sa@E3lF?vz3u;n|XZ<_!Qk9qy~`l|91wP4h#r{o)6_aM)wIq`ujqE&rmD zdP3n+QmfSLUM1w;^epC`(3=0Esh2&uRu6tVT%L^CNg zP9LAG)tHj89p~X#f}Uo-vj&) zZ1AHc==H(TYlZw-nP7Z`zP2Djtb6wK zn80`M|8Q*HSsjz{WeR)+to832?@H*A>F>$qND_n#6Wnod# zokFWI{UgJhE);+c5N?vM%=TaV%c~%-i!)leHNZP)%7$B};{4=dbh)3h@`uiH*|;n=DIKSrnY&qw_K zE(|2HP>A?~)R$))Ac@`?q4G}>UKW1+SnM74wZ`Mvs853t@T>oJL%s#~+NIxXH~GI_ z@xMv3_vdpdlmAdP!T&K7o0~1ATll1veeh%VfYygHhQDhUu@eL1x>rvpwsh+sq%Pa9 zq?H&hR(zDTq_|+qRq&`^e6#T7+8T-wTST%t&>1W)Uc_(>?}nWF&G(dNX8$}Htbmku zRl+CcUu1eJK~d1evYAG}{75})&~kV$q@hc-M~KSIK=A2M&6`Vc-&n zvBBzP+h5xbPs|zfpCrt`=6}3NbVdzBZe`E0$3RC!XiHVkKkjjzkPy955n@kG02LZtlnuKYOYjsv9-lcus3=nj9W zZM0FIjTLxUmR8320Q;xvJ^%NRGSiAHf$y$ot;~Uz%gH?+EJi{K=_{te99NM8hZ4sE ze12mUrnMqLp6w?5w6FP=bp&8XQa|2m?Bm$Kr3B_*=}$SjM5}FhI8b6!ZpL&=iuHm& zg`oVbfNuoQ4q#BbXW&AVM{iyAiGalejlbzHaRBEv;aky3b z>MO;td)}4sg>1@d<@4Luw){*6cNsS(2))u;hm{J+I2p6*&m&)Dzsdcz5(esBm7jI& z_zcwzZEru{(q3Gb3U-{~xYeau{slYdQKz`GqD+iQcFwN?!}hHX1n!#N4PJyE5RI4n zbjiP)wOR!rMElSN?>?Rw=lkBKVI(D-DWq?5{B4#mtL&;rfhOjo$R7Y_vMaXG_KBO^ z#Qx75C_K(5p5L*3QT^pWayBXFTDgE1PY-{ocfVG0(ktHmy8GqCy8j2wT$iXMtdQ*Y zgus#1)u)qZi`ij^R++iqrv!GtyX<+a5&h%5pa+-5Ej{?UHd%5yWf084#LWsXtiVuNHn(JT6qLsLf}#@%6xW zjH+Ignqn3#@_tJ-yj;fZ^6Sm3t69e{gmY@1uE|J!xmkzsI2fei)5Kt>2V+e~QHvJu zVaTr|pq|LptOda5S85RDP_7+x9j9TAcIYX*46aQPZ0#$7@j+a;-u|>YxUg$HTGNBf zNzDSsM6Y7HbDtjmN#33u4_S(5@$>uf4eL?_?5Vj9Jax&CD>@{-@0e;3)3HVfvU!#hmHY`3-pV?@OfvvBo^TH!zG z&@D+@!5@`}<*9~4+*kGe{jnC3p0|C+XI*;;rV6i0_$-IIQVqMyw}YwxIp<}3T%`dC z($s+wQOG@i z*3oXR`zKN_kzT%KB5+vO1C>0u`env6#tE6~YROvKDtLWzqzF}Q>2(QYUYrx0s9nu8 zEU9{7y5aRa!j7N36q;bz;gn)6oK=3LG4xb4Hr@8vi~0S;)GvoxnHTgjDJ2glm!EZw z%Z8$_+<`;LhN-=$!^-a)(hxIQRzpp@iMxfDtM$zl1FDXr}gk(@`3HnSDNf8`XIE`uu@H`1LacKR_6WCFu=dp$DPou6=bc?5*b*=b0NkTu7goTFwNPI^5U6a3uI`+0z z>kBKll8o*q9`7g8ABW!jf1iIZVl#c8H87GmHfDrep=dgy=ND}q68$_p&A4o7x=WDa zyQziyaJ}_LAu`9%JDVH&s_A!5*~(Q*Lhb7ZFY+0l8B`uV*47?<pt=yfv`agG? zRz0o~yb`zRkC0v=_NVOHJ%7^C5$luUlV$p%e{J`?W=#27bO7?TaO&CQsjR*>?{5oy zrxSM7$4ha!VGkC2CBGB%jOEF$@v^{F%uRR$_(W=gm~VRNNwk>BfEt}KQtLr8FX?L^ zY`=fcp!b|4TO|JIntFMySGHwxPCfdAfOW7lq4}~_@~3m48<<^e*xX!H`eETUTrQ&F znmq@2CT1laOuu$*o#IdHm>=>vTz#=5@@@XB_q^Gq6rH1OXK|nP_ME?Jg>W4^pf?{f zKN)XkerP09pP{V{nJN6c%AY+ZTMZcZ!6 z!<$ONZEBqi(K79!$EYv8X12@Q)W3zRIf#3aWyv+SuOb$w?TWfwc_JSFEI9k(>se~1 zoaJM*%lMP$)In8xGQlZSNeNM;{)ip`umkOKHqICP@F>cWt9f~2VQMO_TWS%;M3-U& z8zcw`34Qp^H$yOL!6o6P8~%&hx8hA1z72iK>-&X@@pW~Dm6fZ5zta85UlHp|o0!lu ztUqlYy@|7Q-}O zD>jF>>zGEEuXHkBs*6FVB|58~5DW86^#*TmFGx^T)N4GccuS{@_x6~|61KtM^rVQy=Q<- zY|@K+wyy{Evje`Xxa`M+x)F8txlfvgnR2;#V{*kf<7^A`yIuwoc{FYC8UN=1O8J;v+gM)8!L*bBJQ%qnqFi6;dnO;~@%?dQ;_MQ)#T#bJpGB2~?yLi82?}4o z=PCO>xAW_}5XtN9pO^HvCZ>pj1aT!;HGox^&XGM8<~d@y{k?1WM-V}aIaVIWD(3c^ zhE}-x7hg;bZ(cE)<}u2gcu|in(Rs zlY0N!vcqn$JhNqi!?~+}7_V>^^3Fk%x@{n+eM^I4YZczaCOO=0_pYV);QCy^WAnx^ z_sGydM~^f@JG-|3N^3Z-vxWGJpIyu=WdegN4-K6Bi!L0)zxWJSUy{V^HTjafeSA(1 znZLY=455-Wjw}}W^y$rk>2OqBaSzAosa#!A4iWu$Akj`qNpyqGxCzkE7BalXtib>V z)4V<)Xie~+2@Ddr%QBirwb;fU14;!;F6g*rVAIY^ItPdHuowh0Ekw4-*m)rW1)XLq=RZ79+n z#(9kb@|hF{`UVgQN03dfoAH!$OZwHr{wb1RMw^>WTPwUzzD$zAvE15Rhnw@$O4(yC z83IymvQy4^4;RTP$38+_l5HX~(Qp_2wAcyug@rI6g4Yfuw zJkV#Ht3$)1{GNyNt&TmGmRGUL@jTBt7WLV%xV{YsKkw~mGlXe+=8BP{eG}vCBL_O# zqv+>+ck^Be-k%T(KGyT$haMs(a&nHjaryEraZ(cR{^(E8wzXn)`Vu^Hj#HktW9#_( zH@-=t?KMQwLLEE5x`~@^yB&K+`tjV;PvWLq??6XaFYUw%PM_hB`I%S z>>nLNit@{f;lR-Y@Kb-S&s;)VcQ2M#V>o?j8aLi@3%a6FV|VZS;ul#j8$SG#KZPBR zjk8unF*Xlxz=fcL{l2^i2Qkpp;s)l|Gt>)iUaQ~8dyabIx}*CrOx+?o9^YKTm;da~ z;J5A&zjTsFC*W@GM$i5mh#P2cE}WpfA~B{dc;@^(+ZN}T+p$fX!#emnJd6z9%NQfIhv z|07QsavdQ){kwnnBY5zUZ?fM{p*s@BLE7!!fquMr`3f=Pw$bk{_SaQnt>LjD>OCJ8 zE-qkX&we-x86=mNaejFV9?FVjKC?y)R;l6E+wVrOqZi+N=wWQnPvIAS?*F1pIyvW( zxVpGW3>HFHXD3!x7O_IP3Wi)LB#KyBTEzQ*{M}et$iQ2nZRL1!QX#!#!|(s@$575D zaAeUk%{#6VnKVTTo`--uu8wV%ELb-dsS2xO;l)jBzS7${R0odH-7d zX`{T+(mk-3pqB=i0Hi>|oX!x`)2KAJv>4(kA}+^3Dpw@vE?}FWFiTSIB%qYHa+`#! zOt5TL&Irot5d#F5RD$wA3h;Po_`;m1o!#98wSCx(Z6ZY_p2-vpAy#yOoB<;2B9%@m zbn6(}dZp}DOCDH%KA6M+?hBLPCYoC|y+M}eEl z+~;>usafE#@b|29DwQ=};|vW|oPecDLKDvxQRTJdo#ibI=+f$($gGE;L#uQ7Y#v#C zpY<>`APAC&lT|aGMG?+44N!_kCe3zh#nwe4GC-2v*4nDCV{>x@8}V(d^Ye8o!6cQL zh);BLue}5MZSr9RT<|09a#?GwH66Drbln4|F_DcM0b7ci{ zSLd;~u!M#AWz5elVs&X5vr`ucc()MW+N1&5LAbe%1jKI~3lA|z~0T2lKJc}4!x!%1XOvOS4;RT}YqX0X zuOI$U3!CQTI4jbDhS%SUo}N*(vya+ZI?xlg_nqn#$sT20(jA&HXzEM$z2aN8(8x$T@GV7LbmwaUM0XU;UI}AG$kQ z(cRSvFNvGOLBh&$(mc?rRh;@lM1}%Gvgkxl?+``AO`TAq{>>S1s+B6Kot3QwR@b-C z67r&*IzlTWs~a)ulnmxpHu=~Yo z*3LGI>?vZ&ME|glMD|rgu{CaT1gk%7>|ZzQWp}xab3>>77{|2kBb{YzLY>6xwXUF| zXo_vhPBu%qrcP{Ozv()fS52&o?7qk6GkRPR9Qv7}l%%swT}++oQAsOTucAakSD*~! zs5|l;ixT^#Rv}iP4UU9@w09BqQ!D3K3;McR37mUKM%y?~ZKlt(io3G3fOINhoQNwM z#0go>8xk+!0e-i0x{|#tr}_$YE?Eu z8BwH33-zv>x=kyD!|fs5c61L`x8k(>X;i2~g3%##l03Ju&Waal+9?tJ?`&(k2_5DYmeAeic7V5pQ$BEYF5Dp$bN?W?axsyU{eGTW& zoi{ouxxEQRac$D3XNhs5QO^5!yc5%tlSnLGr5>~zXJXLj$Ni5#hsha^8^_&69eVKK z9=wgjDIeP)_MvVV9>Wgp!aA?NMLm$99&uA9TEaez_qQQJ!q(mv#=!U<+H60jS%>|5 z$FR1sjVmOwa@sjq$G+|^ym;antYp@)U5(Ku2QfCX7c&MFeSgx&{Ze9Dt3vX~Z_y;h=0~cwa?_Dbh?j+)5Hn<$*{fWSqy_ z@ubN$P-Wd`7T2(_y2*YBAW40EX<-3t#4{`FN$M1r!6|3XU4-9O<$R@$8||Y03*yC- zlUU+7^>TiT2yYP24jwv+WwS^KOs~YTyu87&v2c#IBT0@icV!-7+SUxQv4`{7%{k@r zhiR88xP0ymw$#tm-^EJ7*!6)v;x~t%-*v<5Q^c6nIFqHxE?t;p9k)2g%4~NG9qfNO zxINSr^D8l&n_If290vkJCJdNul3~z~#W@6)Ty7e4O-}5hOw1|`-?Q2E`Mip z*2Rac36;_qRE!bP3XWNEq9QjTfi&tejB1;m212WC0$e6UkHky{M^&)cJS4+GDsl&} z8$p-=EU~r5?^(_7oHWv*)(-x@hH$`5!e@cUUd5iCAdc_p#=+qZ9Np88o3B5DTW-9L zMu3X@>MY7RlF029WJrS3oAbyeRtW^MroS>&xEpg9QOG7(&ytY`KaIYhhSC?HA#ppg zQ%IZW50M@#!MI3cnP4E?+>8U)-Dtq(*5WkEnQgW`Pq1d;{E*Y9NODRt8TJzJIE;J> z5G6AO+AIsfObda@Akv&0i)*U{`xcV$5L|4h+uuT9Hx7T>Amxl?j@RB;nZ@?T65?A+ z$Z{-psx*9Qoeq#8v2mhWX~m?e9iUdjxCq)42TN z(^$PajWoezIhQ~wpU@0Ine$4k%cZIvXMzojb|kt8^mgThOlb@b>#TzB136bK%Iyrzva zGff>E-;5ilqLZ@d=6%8eA9Z1lx_AeH=1vpoqjo6tRt{J>HBHz#<)B0bsQYzyMbSbK zCr8N=Nz#j#=JD*ANrHdsZR&H)-3mW*xqT+|Uy&Xb-pi)dJYG}8Q^eFs;%uj0Ikn^rW zI+Z2>)@m^kDVj;xwo-EbG#LW2u`*TJf!K32JR^F~nqv-`+$M2-NM=TQ2rVIN-(V#yb0Tjq~4)p}sBzIk(<&=N;I0^azH= zhB3Zp0v#kPA-{)m(~P0f5eyCwqO-f*I06O+`b=hUV<4!Pj7wD!W}H7SZOLOFNlfLx zQW5Ev1DXvpGO18iwcBi0kxeq+suDUwu$Ia7t%mVAId&xReNrB z4$~K}AeSjpAJXn{y!?JABD6(XY1aAW(wTKffa<6JIFEQA%?$;%v$KuETieR6Z4r}W zzScy^=6&Sg+@vndr?yGZ;wWZw{M}Anmao}&rw#4RKF+IFT$!E4%JPz#zX5-c;9gsu znn+q(&GjY!lFw`|2S4YC2%SQ$w@ENXmYsGBZFt5kXejhu_ZRVIr%{hlN0Y25GC+1w z5lJHUN!s~LzKAP}E5^B^2myr;Cs$|CJRo&hJ7TvtwkJRtD&9_96NFl69*5G5U-mEEfMsK=P%;w@*4IX+)v$|F%F^C zwM`Sfap>q_l$z`~`Pet%(*SZ_JoWsGCIozCbscRHKf0q4>ZKZPzV$W|_a5r|ETVlQ zXo+^<(wP_W)KgEB2qiE+Hfo|2wzdS+BZPC3DEX#U}|d8MDye*x>{t*=P2W|i}2cQICy9upD$scOBkTlIHI+X zw7j;CwOGdBT4AGS&Riu2C}EML{`~X|Hr6&Mhd{X3kM@JTXy(1X^^KD_adrw-+Vo~( z{~i+U?L>w)yn{M8g_(tE_$aHHWC0Fq4Tr`C(Hst7X7(ypmx$vi({fnFX$QARzBkAb zRyHEry0ZEc{HdPvUYm6bI>{xd$Fx!2cxgBT-o(;Ba=@%UNHh~PjA??R5)E5khM3AHPO>BLmZrf{ zP@)KXh8jkO#ekMt#ejuKC}6@Q15{uF-Ql1YUF~g%wuEUQO4y*$S>K8gxR#I;d8Xmr zj;BDrX^f89bG8eLbbo~n3-p@M)e?{r`RByeej$CPuwEH@vnQRPv#CmeqUZdL+9L9; zRSY=_bj?~#dwlr|KF<>zB{Mk_N-i>(CE!|TU6Q#1iZliW#PWMh1O~dFA`N;6I!Q)y zys%c?>)6X;zOssW65F|@1uPJR zY_V^WvA8zRqguA0i^RD#5=1!UBRGyCNkCtrA&w=|SXficHZ~|5m!~cfSY9Ov%&=W)^pYqaz2Rnb6J&MwkD`BYuOamotB)kkOLCbq z#(#;jB@cCiZHR4dz#Hy>(--E<;QZqFYJT$%=YR{r<|s*LJ3)?<{o^nW0Fl!x7cX!= z)R0_XBY;`Q*2)T27YTAFFR@?O2|(P26lUV9c;dblqyw?jOPe+gN`x@ z*dXH4OL-C$mk05!E#9Wg?HBnoL*miO&IR>@5A&0{XftA9Q zn@Emjq_qkYPbRUv9>e7;t61k8DN>i%sV77jlPS(q%9cWkeI&ioAxVyJf%+&$urzu8 zjFIaUNkEz7u6J=HX>~C#a9K(x(WPiNOvN#o+VS!?Lv^uRV{-rEy_$0Y%Qgc(#lyOY3HJUoxhBt{(Pj zg7e0ruz6nq`}glNM`V`RDQepe34qV;Fgkl^pdVx7!zOQl=DHlBQO*(R?UEPd zn)jehQzS+qv4#BhI#TNkD9d@ts%WmNE^@NUq3rhi;9+0L4puZ*+ySIGmYMjbaR>(~ zFX~GVRyNRIr7Gttrh63NS?L~aZYD5agqq>)E&5;PR=t$ zXyuWjZjeJ=wxg}R9bR5TeHbAjRv*aj%W+Vp-B84p>gZ|hK(5JIk1S)~%dTu~EMaYR ziS^y){I=0HmQ4hqww8FDb_C@l@p(;jhr+=#w4upl41U@x$>8Tc^J$zp{Q~E#-SmeD zd6+s@b6h;S!uD#eDiUX9eg>P%i#UArC;}ck<}RN_J{2>2!KW{sgWpxd-hJb^y0C=l zD>JZDk8W;nQ{Dp9>)Y5|UpIQJBkVVOo@4Q(AxTFFt~ZELZoilc}3!eMX1<;iIhqIHan4&&fWZ^36i{&7UT zPBhVG_K=Lq2{}M}l%xIbX$xU?bsGs{yLZ3;J*+3t+B*y%N!O|8p2Z{IdJ-P$>D0y+ z!eKW$so#bNyD&YsjFZowL2J(-EF8af}PM7mdZv)jQvWTk#Ed=C zjFaQ9E99lz$_XDe4m2%pq$oFX%&*aQZEq(Kjf5zZ%_fRbHcuhxvF#+{=_2t%jeYH; z-D^X^PQu7GZ!T=%+{`xCw(^LETzJdjVT>F&V)XR+v*(c{_8u7?ftQGUhV9VS8g0?) z>K{OadQ&+zo_+dh+IY@C%2_-^{Jj}B7r%zqNk%QwVVz5kdyt2FkEC0q4 zSvaZF{J{{;P0pEl6QHd*JkX3|d)qL2vAS`Y}4#i{<1xX0NWnsVKxuo^!;@?`@d5J~}o^ zn@fGd{>soEFD}g?xgCQ$9Kh`46%$?L_J-i{Q;$%eNq0VT;tX|p!8r64ttcIO?8rX6 z<lK^u1S?QbDAYNlP)wxA5Y^3YQlpd3}pa+-21X>+e! zxr%3K^SU|Cqr<(pN}F`x`1Np7f6ksiWwsXwX-8|6od+L(7B%+s?YG~K`Sm!q*JrT5 zKZw1(esniG5U^MA;`9b_NW&TMW|W3A;7u%DgL_Dt$|UF|RA{_uqs?lIn@U_BY>{@Y zW@?34lS5(s`i>Bd!qe?qfhNFCB=a=hSsJRi2~pkRC1U}am09B>_KZ9k= z%7xxADzb0j^BV`8gZ>I_y~{$R24=V4u?&&h0kTj@W>Db$M&LBb6|sGro0Gb zjBJ!0k(MaByL-^l-HYb-E;Gh?)suD9{#2XYZ5##`8n*-EeQ1eButac@rP58s)=^5w z*iSa}@%q~TT1ajig)1VZJ@Z;wD&*26DK+$Vw9;5~nw8d*r>8iEP3RryBk7#NV~;p*|8V8W}CqC7k?g0>D4LXsMr zL#udUGO|IItKJ}&Wc#nYFgQ>a8A^nW+FVAQ+9qQm)vB%>-(ddsznlKl4F4#l2EO_ zi4=zk+*a2&;fl0T-xR2unmA7gf;nCyTnZ7l^I;JYAzNtaZqoGq?9PX1ro&|_Us)c7!8`pn6AEI zk|{4`O!`J7(86owu(i5^>2s${RESpgl*~x0or)Baew0qKm~hVk{3NCVn=><0SYO#7 zKrK=iOc|2U8gQbotHq3m#!5*pB^wIwPNZ{YPp9gpu=+J^BPwX?P{}wZ{Qi*1KhjK@ zY$iDv8R|ob#AdLk%gkwZ4^YaQZCO(!^27}|TlM2KCUn#RCDKlUCvhLRk{ysm(o zBFbbZx;xu&^L2+XHZhLTi3#)%O82x=R!DkwtRzrD)<4C0rKDV01FUbj>A2Yr6(@L} zy>f;1ma`>;@$o(Q@gMy#KJ=jva%^iDCh%1_zQEeb`Wk_tA1z(|Y*W#!`ouQ3aQX5i z+gZf{0?DqP9<=xN()O%ib$J2J;d)Zb*j5ZqeqZ2qh5AnN+!_f`)~J&xˣWX}mt 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 z zR1y&($Wn--#z`5H2T8WP1VUOFQQJ)4(QqhSU#lm^DI#$A(u3boML8CFSlJdE$(l))}%b`I9UuVnOX` zX>K)6r4F`pq^}+Qy&dQy!EA2{nn)BS$m{NC=65(&G|F1|et^N?*3an)}WUN3#6xu%sab}^r`HJpRe z8c+^P64^NnXcbtHUQpZkBlDR;2KAXho~~<%pXRjgK@g>6VLBd9Nwc(n zTj7H`vsn5`K;Ih(vA^niQ}U`XT+JVyrR|iXiT#<(7I1|?evKqStEJkSAh4n2e*%-* z>ZFx@<5$?pbDZi4`Lv?LcTAgn%56dUy+Cl3R73{>pMb8$K1Cv%+FB<`X59iF6i8;% z3K?dbw6|HKDu;x&+jMnzqob$CMBm7X zOlEX#%~Eulq70OLZttEk43Hq{goC5Uj^gNbhfUrFMGt8kf%c6X-NgA|^24z6Ir2uv z^e`*%)IqWx92OSM8p)cTQg5(5lF7Q=p^fE0>vdg@_)Y3*$yc4|i{$cm)Pr(vWk^IS zCQ3~a0-VRJgFcpB*0qciK(fl$vXOePet%tGA^W>EVuh7$Ut6?{6M}75j+wf{UlpRg z(Bd0<}^n%kIfdA!Ctd6sy*MY*he~U((LQ*?1Gy*)9n@M*D;<+<4}-uTSr@lBVm(o;OguYmMK4*TX934 zMFixmlbzFw^)^Yr+9_v+bi4Kw%TXbxnliIT+gi-nsopWxPm3fvfn#xL$v7c&d}D~Z zv#+NO&=G8$gBLGeg5OSJH9lb+RVPnS#wpKojte_wDc_O>B@y+rEk;MPoj&Tp)s;08 z%j@g#hJ$$a%q8^D_DxRn8X-6OLrz$V8C+P1;g+|*1Lw|M z#29Vz8r!qFx^Cpz$+n!EoaNlK;^rHbyv=Qr_V&?62V0sshB?$+K|J~VXY<)qA^B5u*TQ<-%+)CMs~nt4mi^qb&tZErj^jrT zLB~hOH#aFa^^+eoHj*gENingT z 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

    afJyWd?+0Xo@4XPK+T~bAN4j%dL>RdXoI^~9 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�qebRP;C{$&{|=b}PHkl=uJi3}*@Q`7-iBx2^?!!6Z?DSP6D z;vGZ{h-9htfb$z+`@{D$=LHD=>0^324qlA>5hoiH0a280q&s8|y^$ zC!C$MJGdD0WYRlF{r0mFJciRSN>34uGb#`Kqyc_L;V&)D#;x^?3|{dd^*h$bz$u07 zOH<~=BPCzZA&6waQ4P#Qd6f!@=c7l!laUM7yF_mo)3hJEr%Yw?o(^?*u&Z}CE&HM& zwV|31`XYYwG(@X2#TZT(#a{%!PK;D!5&es4me3t?4s@X(fNOXPQCZCv&IX)&!kOx) ztc4>6TZjq-HPXXG!*Qjx{QA`VO$oJ`4c#;5#Kz6_A0C-h?qt=gypX|j)?>>r8 z-n}cs{~)FYGqLxi8;>3^0J9i_c1wMf=@Lw{VDM$y+ilO!m!*3y#`Wu0Dqat- zgf!tBtREl{O_QdfY5EbeZzARvGjaaba@@ba6L09oO?%P3N_(u5)4&w(Q$T_-C z#)N*WAR83Iy#=dI8`OHv_vui*;N;2|rtEs^DNM;msmjH3oc4fb#EbU&wEf(6QU=+> z9pjo2S8#jm{J^KwM>BS{o8bmFwIhWHUT~Vc$fO0Di4^{=k5Kp#ekd)T*RQhyc`lDbnyiUN^>CY~Pg5$@POdwy;%D#e^b0>J~y7lIaAw^KlA6I{BI4+315)bvUt zyqdOjxPC&!cm&1D3v{F_O4N)LI)pUu=>w@RpcF%Y{7%npfD%@YGOTYHMZ`(K3dF2Q zK-#flmSCe;=p&78=cV8?w#WzrbCDT6#VGga3W|-MqtG+280AHpgrB8Q#HnP6O6g%M zK*D_or;Oez35sc6&rrm3EJoIhyl{7dF(}$&jx-|?<}=4EsuYo{EJtZ>RmudTSt;rv zlO+m;m9IIaAgf%I9ZoN>1@4R+DPO81_yf1#iV-nJotZO_(hr`DOU@C`^fPb-Q9?sL zQ~Qj`2!+sXiUKjhxx@c;CCbI$>*QNI9N~c@{=)sIe1}!X)yJtn>EKJg@}6{jm(q?$ zlep)Ehmjv6kyEG5$f!7I>&eDe%q=acjaWUs77g`1oNz4Y*Ot-Q>k9_GBLadtviKkU z9)|#QizA?1l!7Q)U`>IpV1chtN1ibvPn3sOt`{L=Na9rJiB~{J@NeV;5g<&1U{SuT za6(%EpQn)MDl)M0NnU;AgdN1lhDlFDf*++az&AS%q!qI}ozWI}dIxUC^bFqw0{InOi1r~KIcVm>$Rof%q^X+3ZzIwvf?rMj_F zK8~@2Rwwoa!)~)58;9a;-C^9{t;OB_W}K=ou&8G5_*CBzcB`@lC%9)(!aXUTZRL#t zflIWdbO%RmkH``BzF$|~ER-nfVgwK)558e%rP6lwJrtPF$dDGSlV=0r9#@QbnrI@8 zauU)CZs4QIN#=t-p+01%t@;kmmtnu7%=_LR4`UL#BRzNoCyZk5Z0|<9(~Fjj0OrKw z)Ip!X>4*WCoLs_Hmjx=BzLD0mAi@MghOp$cV+h84B{DLiSwn_t2h@*zm;wbn^i@Vw zn<}T%@urOkb>TFeN&q zjf4aCN?*NlKBh|r(T@6Prxg=JwU20SJQxB_Aw=5L4nLjVZAI`SqhTnCH`6!Oz7y~@ z_&W{&-Rqh{me;qY6aCQ^mIdZx7_j2^@ISSObrL;K2DAQ@mVSky!#Dg!e`Lpv zluwcg$syn`OclUNHTW;Jy*c9OH!!8wrd!KdWT$>OS&}=Jar9g0l`GGbz*ptRdtl?V zyjI_!j?TyV^Nhg_^dNBzr86H8%*HA2RJMNjn-u+;j-(5v6L^$3F3nBE*KSCLPl~VU zGaP2nI&{SDAIJ_nbo32dud)UP5m@wVq9Lp5tKd zDhuDDX~{{Pb86Jcl`5WY<61%&;u1+-NYCrD@Ev@QK^pYCah*iRDhxfm)5a0p^*2JT zagrDPTSn!=i#jkKq7dhZuMk^8fTqG6A~P>48HP$Qm4nyF1a< zb#HqoriZ<_c4;l1lW~6I>P6k3kE<6iDNoiN%Ej!YbV(I^DtmnLMD2O3z92l&?--eH ziQjE+9mbQL?btmyi2b8Z)DGDmSN*Zojl+Yc-#>h?9Us4cFFtttqj>+VkK^5+y&vzr z`EGph*8B13lY3E9-|ng3!Y6k&4rADD#QKeVRL;R$Q{>>3_(n&0&gM?zm9O56*}`lb zs19g6*$it9;Y4Kj6!Zbf2sMkECkhn?C3K%Xja#o?ih8FWfAo9ryR2u&=Rc4)&zu2Y z(DBlD{%T^TFnck7Z&ihIicz3@6kG%W%-h@mrmBBpuUyP9IbdiATni2)yWV2__j?%q zeUA{pln9rDVW4n~727mYg`t-6LqJ;*Nm-{NN6)y2iNTo7^bsl+KKvdD6sOZkh8#+l z1Z9E|_!6wtT=g<%L@i3`4GTV%oYY~ri(JFG-JmJ-;OIl8G_(b zc%Q;CGA71X-{TxW@CrWCC$8-yg}WxkO0MJg)N@=eMyLg;1e@Uyj#;%nIR+4Pf>-a@ z&Iv`@-f;>36Dgz2$2`_~a>gjI+T6kqSkkC~tTH_ojG_q&##zvpvDZ`iJ(bJo2_ul> zMbJD?+@nE^?@dbJpx{dIwAx~-1&73e58!0GxRC;Cr`Y(!$)v z7S4<==xPUq%C&<)lFRRnXOt|X$)AqzX8aaDy|5hy#~HoH zNx(Y{eme%mf9*IRooEKWYo%{O=P9dF_Z?cze(CG$t9GpH?(E7KX8yAbGqn{4v=wn7 zn)(29HZ!AqrTEaEY60^T)kCZ$Iw}ilMCqk}s}b~0s*|oKI_>-tto?pkG>wRXmJCN6 zoa7J2n8GB&HXf5>6$c6m^sLGq$}mIe{gfv{hb(BtNE__}KVUr#4m$t@2UDEj^mJSB zi~BH&CQ9G&gF zS{+8==u`ADwU6>f>2Jws#H54=?~S5hno@M19M*Hyn*XCw_5e zgBjO_L!L*>iZwz=0d8m2XT6xFa8I8C+4L*swi6bgQD23&Xaf+NMgW@*A#O0z*J#+_ zXYCIR9Ip+de27qkU*k;cv|4GJ1UyycGFsUh!1JVJ=fqcZ zS_yWQzQVaRh;7IQn3ZZeFW-TkN?)ocji zs7+gR&PsN5)5YuHDYo(0jSTmY} ztHrdaEc{5ul-hnu2GBq_-m4vXE_7Eon^Jyk+sDFx>}D}`Len2O#&X6dZK8fknQlPk zg;9nR7H6uXKRDHH$;iiWAGvN+DfkZUYhJE8!~ar0O#Mq_;%}0HuChhX)~{R?yl%wr zpc8)k1eB31(!I$;8DU^M!>0#27QabL9+au4WKUf={Z`L~f1V||li=k(rBMpQk>ne2 zkDc{q9(qQ44^r_Bc!S<_jtg{Mb%+bAEc*ON#;aWgmh0eC&n_)w;%hf^QJg)FgTq=h znf@UQ5J&UwHoLHhmx#YJ1<nzn7*1(YGp>e7)dstoc5`p2mXuRS{^(uExf zgdfok`UQF4{8Z!=VDa-F}iM#+TB0Dw%Md^eMJBJdS#^>nOc}Xsy*9 zsDH@F9?>!~%Y#XRsUlomyKpX+7Z>Bg+WA;rT8k?eF2?hhuf(PG^HDBVq$lpv-j@1j?lfNi*7H%E%f|f=9|~ilBi3D+Os85*+?1!{ zuaKF_hBsZfzUb%w>UZ8&v7)JG$LBttIRn1HM$i1sNI*!?@f$vfpg~C6%Q`BX6G&hZ&WIm6Q4o0zK5S6y3bP(7 zc<&N;3>Yt1SMk_pDj{1#+*{28iN!N6Y z>(8hb#(pvY>uo z$S$>o@QZ>WBWxf=hXvgHUe5^Cl}hQ*S4MqjGRlk9bf;uc%t{edCTz*m>$c-q%n&1= zxo|iFnk*{SORL8>TaBnST2Y=`@F+56q0rF|&_XtkG9$bT39LSj5=R}0Qh|UHEuq*7 zr%F#9pjAdYQ1BV~$m*Wo7=Y09IHVrMFO87v#K;rI1bLWuj1P6^z z+d@D5qYQR@VAPTaDwl7mzw(BL6E!6GzzbP$KyMtTNqv)efxhRN(vJ;R6iAO^V?@hX zCJfPzB*AZET;*h>v{NPmpQ$E{lCW46yu1q$`OzNM`(K8C%HXsN3*ilUoUrI9fpIDCj4U3b9-Ux0?J9H$x31&gbbOpO7(_yvae$KM5mc3t)^Pw&G?u{76~}?= zpmJywcoT3@M-G0|pVO#*ir#tp8ye6vjQr$C<#$TwsQ@xG;RBrMc`{UJVa`M^I2)*g z%02Dr>^Rzj@YbwgW|VkuYs=1trNue#_K_S8s-rT&IC9?Ne>h1%E~7%MGT+4Ut9%&+ zXS9~Kf%kDT4T1K9wgw_T=Fk!v&pH_xcFaE&rd5XMO>mTDh~ZGcp-4DA#x>Ij@;Mw3 z@UXNRvry-A{DZo&3N%v;2=Pu)5$da>_5r^|wJmJ{KG+L>p_DUUA}qcjr5%MBlHolL zE9ekoo>4IjiBhQ=onz#}!2K?V@~(bDJ5~zpCCS|^dC>*im6oLJve+j) zgMIR$!-Z-|^mH1Btxg=tplGltn0_C12Jz&u<=-tStT;~Cu4}GbQvQj@HAVaIbs)yc z(mIaVJkmEJ&nL}6Z0SL*O%#aQj6SK_fp;~EDyY7$XJ^uKCx<=ZomI;vgH$Ku3;wTu z$Ix8AbrkK|f!F3h$ZZ@0G9opfBKTs2=;Zw939v9)(gtcw zg?>lDq74>zh0kR3iOz|HSy)&Q%uFkQR%YX8Z+#H;dQ0$!WuP*Q$B!P_A%O9Pf%CzK z4@3ttCsa-NByyU1GljwX^$RcXjwy^O!O#|N2jcxx`Dzpv&qY%*Z};(r>pdy_L03LD2=p;{&tW(9h z52PYe`f=B^Q8wa>ID?+*Z7Pg*vyP+;tgDeXc>$YJ_*7auVT}Ww{MHM~<{lYHUVg8W z@6E6MJqgFWTyj!%LY}4k^`-hLjS7C@3-o2+<0MbZ#$(BtLE8EjCst{87~g)e5}DJ6 z=qfK`w-Y(>g+gi0IHVjFv}OGZ7XGXs?8VXHL3HYkcyRY#>}+qEHvtEFF=bN+I~qkh z+=HjFo(SJz4n3pP;N$Fc;E1F%=|?j%%!dQZ@Le z_5Gi1MyCi*BSoK%HM;?L|#oI^9?&*H05M_=Qp%*9vEU)?Q{kg~ zurP+1b??{VRm---JsX;RSq)6~gS)(K|+R~Mwk8ng# zEMC45^Gi!o5DbCxffi2Vy?1}+ykC0#WeJ;V?C#d1USo^1VKk2#5~TZ5(8&A5p|vaL zR%6iZNkFqzQ^ENpZ#HmAVUu72XxbE`3dNhY5yqb4%5AN7wE;DHMtb8`r^A;mj4`mF z4~#=GbipL5aC(mMNHkf4dwNGk#w&(2^GTs+7S@}WK&w{g?O{g{Lm$urjNSY`0tOU$PQFbCG%Z0W zyfAV~zQFE7II^m-WmBuIdY198eO@BJLbzqQ7FC~_c z--2=Nkwox>vM!uZIU*@kQ5h7BfMuPp`H#v%QGyjvSNb{*CM$M~AgHbN+I9RCf6$2@ z3Rgr>c;2w`q_0yK`kM`6D=NZ`ai#oeZyoeMD}XYTy)c&w=R5MWbH+S#+#tH6KLe}N zB)&X;&o^)oy)^!m%K5?1&2L6HH6Iob`59e@M-E**+&hfZ4lBj?Jvz#ijn$>9zB!FY zTQw<9?CdaMLk#@VMvTl>%2J5cjwr6XM=})EFDaS+PG18xoa`SzEw~un?TeQB^_ttD zPgu8T3Fi?`0C2wp+GXlp_FBWU(l+JSiGldHkE%eh+usM+Lz(8&FbT{|T)tXPN@19*FLCoY^{iS@Mw(Qht(_h0=W?%dr` znaDT6BOI}-0{nL1#s8QKeiq%6UbLZCweRVS_|OznpYl;yycpYe-%`EzqO`K)jxjNn zi4&!pXw^JY$-<>)C+er-H>;I$T)X*tJld;CCLBaz{(KxhdFV02EMq*-`m#}7va35Vu!^lYUk z`j3O}p&xiXdRdw(kn}YoO?~j04vO}olDfh>;7#y0ZIowmq|_vR`8+E^e^S9_m)S{q3D_&X!L=fdw@&w&JiE#E8gB#G(w@& zfi&m=x6e<;b8E@TkAsScqw4a-*c2Vr_Ql(j9_KhR4JR$rr*ft{`0IhEJ>Gx3;bP=(?Sd%Uwyq78k z54`ldI822bm9MOHfj6o9qL&FzZSi=FVRT5L*8B(Ds!OXaWymj9K&Q&=m~Vn>BBy9` zadPu2^d|T-YaHMRXp3LATR7*Y(&D`8p9^!PSYBBWPw0BVR0eW#$O&YT+M`^~c}m#K z#4s9?AuJNRzPb<<^dj|#@iaFmiV^m%cxGQsg2SPua$Dk;^gsGQy>lFoH}<`~_2PUr z3e~C|2#fROSX@|$viN3QykTowZE$!XJn!4_4ZX4WA$_5Q^H#h)r}E3<%QHE4{^&-z zP!*qz*w}d({nL$j{o9ujZ1GS3(I3Z~fAUcbJ3`_KJV{q!1$l{mF(n2+IdvA#eW@D1 z`q#e{fBl#LZtU+!Z+doo?!#R&-99@$@9}s3pT93cMadCUP=`Q}*f{5^_apUEhpu9T zFjzBOHv=dC>pE@~y(0-qsufQZXB1(S2AFb6q-05GJT>-p!l%ayuKuM1gG6b@1~chC zdypcUyjl%M;D#)Md2Ui$@_5{0l*&&%ECx#QT)brA+42f^57HQgA*meDtMF6fHEFRZM`{NhUNJb4o5&tHs-=htnVxgHRg zVB>-SvnSi5fcg!63dVu*WEAlP1<~}%NL6wUc#4RG#z0DB3Js;75MGF)0J@=V9iWbA z2Ej}_QGe!d5-!j53D1?4&{S_NBlc_nx&aD1!ml*Y8JbSTB7#W|E#Z)Q{v zBX-*LBCMYG@CC2wRE7f+4)^m{73l6Ft;F){`wBIqRh=In4 z1;)CS#Tc@$`743Pf{(LN@k;sWcA#X0mJEOKBl8HIJGg30u2Xc^qpx-&@Jr)T~QYGNb9o<&Er^{FFEXV;uut$5+=+# z1_c?KIAFm)BUY>#Le!l=S3OU}^VGhy4V6{h*`kr%G+4{P3tTGS6&Z-<#25R5>;Bfh zVJiyfjb_{RAF5no*))h#!H2TT$pBy!ANps-^A)viIY+4PS>$9OFO-r3jG@339u^s6 zH2-)e7t=Vm%wyE|WK^C`i&qsZk)2;NpQFEJWf(VVd)^Wdp2JB025YF{7rXcP|@?_^B?)&f|XD;i&iJ3HZp`et)c7Y}36QrgY)>eXME-Z;Oo zsP>+Ug=${ciFoVXkK;#gK2)8FSdej7s*2tV?(@*_@C+Vu99;|(u4KjSaJ#+=ZJcc zY#KXk&5QIccz>$D@mznTfj3*%5k9Pgkh{`B%luMOALBj-&fHk~Cl26ym*InZ9;IhK zsh~2k9^}l__r(;<2UQn8)4gRRycxM9zKx9KH#`D|8ELKWkf-`B)1=ZG7z}g}wWKt< zTE^*Ja>$PO6IZqKx!LB$diTT3vvIGM{Wnou1m+kQB$qVDevQ0UsS&p z-`qb`+atV%tD0#4-u*{1PPg4&7q4E6)$^C6$FMD-jQ>u@dQnq-V1J)Q>smH+kM(?I zp%P8Wp-=8V5$MO#A=ojXsP>+Yd`bPYP*$-_+m!JwT_dt(JK^XPEJ8};g5|8LXL_OS z)c$S{;WamN8r5>50S0p5AFM~h2YY)p_3^Zg?1AnXV8MnMw>#V8R!c09n6YCSnr4el zaLPJDIANFOSaA4Eyp{HwvTR`yTO6U~{EYbl?MdXHBPGSZfvuzd+?MDfYKSQcOuK?_ zsTbOjLxcp54R{t2F6dcMY2)a~yu08*D#>}(DMP(fcjzCPg_E!-e4$fxB%3%|t(N*j ziWX&x0(wQhFdK8FiI|_y+WGNh<1p@T?8IB2JWw52d{}jn9!Hc^+IIRl=2s@;H~z-$ z_z(Wpe;#|=4d?yr_N7|;3V zvQl0yQwO|=-(!K{bM%hG**;Cp?@_&Z~R6v z!MMd>aUD?*boDcxo`216JxBRx>p({ZNZBRN@u8M5-f##|22Fu-PH38^B}lO@6iP9_ zysT@%eS@-DM9`t>IxubsolEN^9C+a!=G;0QRPUg6@RiYtz;i>>+faqxu3*8f7I98@XyX!fgFsIB;0H;HFrdd}Bj-AQ-_D zd;?sgOcGwm++4i)Eo)OTI3j_ELIk#xWk5;N%%knMDP4&mGYeDa3+U@m1vbYp7YEoJrNcv!s#*KF$loV*yyx@ z%t*8VPP_@@MQuS|qxb%p40X^aNt^hKaKm?c?)Kq3`kvoWUtrZg-Mep+!6+Y|S@|{1 z!k;np!NcSzUlg*`XW^GPQFxY|eJNxzMK~z$(_YL@b|W_}c)RUrG+H*yrew@8q5~gt z7^Rdg>ZR<{$ddBJoJGl{u586d_&hx1P<^l{gN!meQvB?U5sfhgrq$}Iu~YjI<_|oi zBZ7;!!$q_-KDd@9^=Rs+z;(t&-Blfh7zmp+OWChAPhBIi{IH=pfbYWgNg$Dt<6x%iZ zZc5Q)O#vJ=tm`8?#ykuBVhqyOIA{d2XdyYbaFp2rCA=|0$&?~+T2^10&+57AQP$N8 zzaV5P2MX|+cn8rI(=x<~3OHkwIX@RO3+p1{Su5qVe@n(sr(RPTQqoo5o!uR^bw|c( zioO9?@EyYL6E4GwJW~RCY~>}R2V)wg9>*b$5Ecz=$q-^c_6zH)qQz-DW@uwzR}<;G z<7m_lWnedAVPVc;+i8)(=O^#zdOGDgXJ+$;Gb6(TDIo5wx~q4nOdM8i)d}OA1q}&% zo~f=zU2Vcti{8&}Zn2;*H1* z|xhw2O9i-Z06?Vv@rf`8>m9mvmm zmHHgzayTFTF3q0A3+w846N9*X^`fWH;G`;6mg8W*X@@9LYNrfds9YR?tp89^e`hxV z)=r{$I4M)Bwsu9kYSaB%BewSTJpJ+NjhA97Ta8Ym7X8kVX_(!f3Zhk_Ys$rv`ov7s zM4#weL}o$PK)QEuU}r6I3r8@EaSYd6*Kyds1~N( zw7h*S4!nFWukYbyX#s1TAIEAN24=Fwy!5HQ2dF5IDW_c-`?)C`_R?cS2gtu6`m6XK zj_fp554yl+{fSf`+sJHa?t6_Y_0T-l=0C?XjoFv#lrR5N-#`Qe>QY2Xc7}8 zLzE*FM;oVN(9UCYwKA%7Ht==&8zn<2BE8cI9-m6@8zo6fx5{-{Nf?aF^hvVObu6$r zRHFVLF?Z#kU`Sgx>aQN9MpLFUwJ|ZjU%T21w*cssGt_!e(Z=J3)_dMpF4^z8w^*5ud@oB{( zDbfgk7MyYUq6v&q7TsdoCzKL|D0^75I2K0yj9Nc?UpY{b$q!A1$E$xG206I=^8dqvW7J!1UI{a4e z?aa^tofA=mA#vQ^iR`3|EYon7BJs$j6gWcj z86n9Fr-Z3DJ82(#YKSrluf~WZdI#B&mr;mfiIHuGn`i~66KiE)8h|I1K}N3$t!H~S z`abmF2q%F++fYaL&IeCNO?C*7A!gZx;+^P(^wgg=Mj>TdQ-di6dOlakc$6N8!|c?V zl>MRR3X0jq0j)rCk>1r1(qGZOVwn7;WplC@kis;9i(7dv$xZ8*H+ciuxfA zi^JZDr*E)WXCaGX%g9|mIUm5U`XjJlIup9u!`M;%pcj-~>WmX+R?oz;g)0o4iI^v( zUuDss%_W8J#kqXUFA9!o$!knZecEI6?NvQ6hi(bfnsCl(A$sh?$^A%U0(fvS$UPEGth6!GF+(z_@|#?XoF|?Zc)Z9 zvI<8SJUk{;H}#{s3{)KD4e46w5yzr^wIJf!$-#nrK8tdzX&kF%D#7SX63j*PaU2A9$M~w+a_%F^DoG1ms$u0$L!N!)+UhhJc!>L`!Ohk2_wIGBB)&FE- zCOYEJ?2ZGCu#*jg1FXH0bXmy)s7y3W`6}FPc5-$cljTADyZ?j#Fm`vDO7iUZya$@i zvjqgdpyNA#?SE{>nAj{=n0M+3bZUEyM~pXlg%LJNqjU6;JE$48o{Kpo z7cf(f5r6T2zISG+j^nxm`=`%7Uz5_=A6- zND>8s*L}PYRa&T#(fCwn@_E|tKhqa@juDm|Mz0d2J^%p!^hrcPR7uH1I1^5f0^pra zr1W^?L+_{_@G@Epogt)Io50ElSCyX@juifN;t=piH1!wU7z`N5;0Bt8)Bpm300Cx@No$p6 zq@@*QKvtI3OTAQmjQR%kP)}KAWo3Ybq$}wPNDy5iNcHz#-Fw>IMjvZMtmq@^_xq1I zV;`yV?ViUySIn55H^YYyA3nzL;qEHd){`q>FS@uNN?FZ!)njKiZrQfC5{ytZf!7h> z2;0zzLS1l3`NW0w=_s*fs-vRezwzkJ}DfzY4F*Yf1?R@}6$H(iB)>$kqq)(11~2fy!2)ZwV@92~`qQICwclS{*dg-lXU zR(AL)WfVW+Vs>V}_-1GjK68GOzHX9t(ug#rA|W1CfU~6=bd?|JWH%S`&_KI@0_P%+ z*-Frb0--&X_waj936V33HIKT6M{Y3=aHa1^I0`Lq_bSvWgE>m~8W?Od)t`&Ig3EjR z4x{#cmF2#P2TR^_b}6RLe2z@y4Nu|uoXQd!?PyjxlP~!@lAkGP@DmsL%fJI|ApC-# zc_}w23zP?+>U8Cs{)IDBMlC00us_KOak#clwut5VuJiJXfgh#z?)nT`K5aML-(H`$ ztBcckOD&=_KmNk^w1t)RwmpB@9&XOJ=dTWN1@zV}NpOwCMzf67N?z@IOngXy-6 zoHIk)(=ab@$bz5qD4*~gmG6Pu4I&4$3Hk`aEpI$%n-3mkfzxI9>FUxqNf4vwINS@9pfj;pn8Df_vM)z0K9#3~l=~ zTeV)e(BYXLI~rbG{JN%%*!M5#1xI}>pzyossGbb2iDNs}7-yRhZt2^u^5OR5_IUgK z_W$^Q{?E|NsmOSHe3ys)#am;*=XCtc-}^rz+$eWUqM^)$kISX#{i_keyY% zFD4uA>pz)2ok=61sjuhZu!mVAqFr;x#!M&1du3IK+Q zB{1m-Z*?Ytgv`d7o z&dVF`#X)zMGz_O;m$Cs{!A}`Gr8@ZFzK7T6&%%Fy@=K?i6XA=_IGr;0!eLp=It;w; zp!wFC zZl7H)#1q#n7#Uiz%tg$V`#D-4pJyL>OI%9+o1p)Uu*7~lSTLew% zH+4i=V}wztr*0{u`I3Uf9Jtd)>M>O=Eh&gNs%HJ9yrz|QFD#a|;0RsNK{}!-jXOH% zD4L3{N?WxB;IUl@cjCZfh?h2E`{&-#VXuC({i`S%w`kS;fDZswgt8DHG$p@K2vZ=_ zJ3)omQ@m>!h+;+_Vz6%)re}%@?J6NEO_oTZKJ|fMbc@iV!lOrshL^$mdPYlXRIFf% zA=Q|~NnL>(>n`okv=InZxTUe4wjxYNu_LNJZq=J0|XuoZO*B$75{CoE)Z#38M;0|hbR7G zEb!{I99Q}ujvV1sX`tQm&M5?rU~O$}0uu@*!d8re+>2Gq5akFVzl;nh%)~oII8!m) zSY3|Gr_&FNV;SP&Z8@YR-YL+zBDP13%-_;iXz1{HI&DS)EFK}$MfRH)mwX>AsLJygT4+bIrTdguJ^-DbgKz8Bh2QpdFD0&uys$XZXqk@2wtu(#Lih&hyC|+BlrJH?bOV>`XUy;oUJJignXrEb!gdON zFM#b1n9soDYtr~+f7A}C>nmWo0*3RGQD{;Ft!oLmh@kQ1?;1O;XV>!3^TMk&QLM@>i2vR-Z809ECNG9S+RP;F5x8dT)8r$T z8`>!Y0?N_l1q51)4yLV>chZuAh*t(E`Kv}GX$pQ0O=-ZZbzt=Bl6Ruef|K+NM6S_N zrwAxd6|alIK>h(-9^qA-8aG{RFO5Os;F@ndhC@Pw0G~5!A@-WJz3+x+r6 zGKHhc^5B`axVqWi`SSN=K|1k0dvn&7C!wSLJrv?md$PR&tkKtXm5C)d=_aCoM-5qQZ0 znN$ZXGUbwP7MGWRmG*jW|3y7eS9+9XcLK_xVyi+cANs=kPumaw$?tD#tMHJE^LB8s z*S4R&+pedOhs5O#{Xy2Skd%vtj4PkkgDAA-;LIg>rcb0Nh5wDE0`M?L8X8*_{p`!8 z!S`HShp&r!7e;*ic#HF4`Yb(u1_Szx0df&Ep~0jULUv{Ub7Z+!?diMQ;h86+qqJeS zzFb~$i|JXwIESa%zw7n4+}77t+S0;e>iziOkpAr?-j(tW4TZxY{hl;V8=KM-Xkr#P z!9VpX?wn4hF~qvbv;bte;VC%hoARUH7;cw(IvRs#<+9ce;19}|%D_qh(yw%>hlO?L zt_dGK-_4pg|Mcg69)2@U{l7iFyW_1f;B!2F=I{NJbj~tOnW&1Oo#~saoj|7q+0r>A z^j@G(2V-aBN#m6%g`3er5}vcWq>1>+&L&Dgmqy(apQs9Q84$4B z+WM}9@LpJ!spg;&$_z4c*)>?9s{DBjTtZc0z4u)@v+ndo6hqDu+^a*6^228j)AV1$ zkw)bqJOxwWwj6;^#@gderQZ&};7%CcYjjcAzkeq#`ZNf8kFzdbjZ2$2u?NI2}w%~t_lTxU_F9OOazQkr>*FFWY8;d~}fPJap)w#OLM z$j|!8R(|t~p|id{39V_^4$Rkhej|y1pJY>J>(cxXXi?;JK~&lGT>^5EZuA6jL_Uj8 znRl1JZC3hM_{lwa=bHB=tO{>vy+3)c;lvS71^UFNzJ(|Bo%%q*wOtX{wFFd>QwPFs zINKB75}a4oZ$`H)vOLe51O=Z4B43qz-}^~-c!f^|1j}l&(wr^Hwy43u{hKYf?KK7g z(oo^i712Xlb?S$BD@9cp^g^Ib0ae;IG%wyv)A->*T{%RtunJ`qddnL)iyo}6&w85p zy~k&a2mE*p?5{uiR$NCf5ad4i&WCMp_plwKm^sSkqG~DsM)%d$!@~TeDB)3IdhqaJ`annDHrH3c z{{l2~owlThmCBU7%0;dm@%P=tEqTBzq|neRKNlK2K0VLqmbB}1C8sHAEK6IKC{(mb zdxTOm9-r`D`V{Am&gz|I5c=BrrFM9J(_S8`1)R zBINVgB?2Dof@7QOt7$vJ?IMw@8DVt`KKFDVx80o`a4;2o91hRhoLd|M&z@5U%p3Yu znfS^Vo@Pe|jeX*N&u#y9cH7VV^pCXx%FE``Oja)69i69r*yhs?DUMStFM;2U99=BU zc4hmOSK63W%ym_E+Fi*je5B5K$akkrfXF<@C^8LS0p@8Gpeeqo?8gAWJA#MS=5}i#!XXc_{1fKJpwe2JXOLbl2a@N936Vl<@~fw`$ZN5aYOgQu;0xCzV9` z7@?s5&<}NPyAm#4?0X|{(g7Kc*jx0<1DON9tszK-ImS$Rz5U2ir$Ew2s~|f& zt>39GmOZ^8Wy-X{lTmoj3G{Xb{kbTpQ&u#F*)}y4%iq$DXs0Tw;#Im_Tv=_)tMI6` z^|reCux&hi+P2^QQhV^;m)i2?qqYDouCA`NgPm7x;cnQz|GjncJB$%%Z3VifEN-8f z9Z*n=^*DOs=w!wx=hB{abi0b$Sj>E6=zyi*kl# zbu|9+@`So^DuE;GH66n`TcmDn7p^a$!9sp>e2lV=lKrjU`R(@Ur^siA`)z|ZZClik zZk!eBNhAGublfgU&owrLAs&CwjYbP`TI){O$6mK*FJ5x3Hex%FUrGW|vmm>iR}xAa_6*pPa_Hw*VcxdxU-4)HJ*u zbh+cz88>@JCz;mv^V>csftf4tN1>(TD@EQjLF>C^Cu}T$h9P{y5hpm|T~3%vlroti-vzxt z1CMYD2lu?->PK_&9WZnKY1i(>q_AlxCrrPoX%$vxDRX|s8cK%)oES62W zy@?=sb$-&$T&Wp>$?c{}xub(UA0Z6V*;#HnumzL?_v+o*eVHw|vR5`8L~z3?t~@N0 zM@AULllKZZASJ6dSA_*9bz1k*0*VMQ>I#dfllKZlTEfe_Md7cMZ{fGDYZZL(L2}|L zb;NfSNMD+bql)6nJVF!F09Wgk1QWMFDLM%JfxF;y6hR@}MZMxVps=Xt0OePh$l_@# zF~DIP^e_plDe3cPU7Mf$q1sGRPu1BeI|6U#EYG7qE!|^|2)Es}H+rQl16!1D&QdhN=lwV0SP;`Av0e!71!2=SP3J== zbzTIW#4)YwC`uYJ?2-yjjT#yR17l=`GjRq zp>?Hx^RbK`S^d7_U)G^`mTxGqsmLAJb#;)D9o=n(Po=_oc41Sh zC+~`9IpPm*Qg|Z``KUOv?(TrWEwZdD>&Ouw^O9#B93q&Lw(p&1YB;?}^kxx`d4*B< zTD4u3*vSaqE}AGkTL-r1jPw&m;n^^H4y-NBqV&v1SamV61IlO{wJOa+yy{J1JCQHw zQ9zZ{)>^dLWB8xm6=x_+SMYP|L&eCEI61&6@b3*rnKCiry?uPGrhcB0M%|WOdn1W* z*uKRPP**<*92z=o?Q?oMP~HjJxCRI3!b{`wBUe%XEj^C=3TW8?C* zGze&S9YNi2u0t>$oydVRqPMF@0D`%zv#Tt5T|-&hK)F(WnS*z&shrGB$937=46OTa zeCq?0vV->I-KTN$&iVr=VIMxcI_HmS{H7KsN!!t53h6Np^LcTOU^5r z{A`#Q45(N0iFXKX-9CnY21poMd+0FvhJVq1Rg_e?$lvcC(ph+`WgS%-5QWG-<&o-M<3+~{$OLftv!6)2Gp^Jqc!TmsesB4G5oBo zWQ2HOf$;DpJwjBRJ@gJT-Lz-gkL@MAh-X0LJtYJd@oby3FYMdsEckKG{j296wxzq1 z_TJ`9`}o68!rulOgMq=(`Rm~UX`jRxK0G~ZkKcKxefcY2&Nj+7@G+;)oD5GW<3xLX zaNKr}9ATDM0sGQiY(MO+VU6kvK z)3m*<2ixJl-~NN|q`q9|V|aWVPa_9$>>r(0nyC%&84V$}Gy5K|o+|a5o15uBQZC@M zuhekmIs~ws@GAL>o;nkEdXJjc1vr`|e?8gsg42juX&eLh&hAlUQ4J!}y&hV6tJn%` zQ?@0Ika|g2N88Y>2J&D1`Y*pV27FG3r1{nu@Hrhn^*8?^#9bXq77p~94yI%3UU|=@ z-rF;C(4NA~>*xes!W&;k>#qdTt`p&3o)h1gzN|0`H!|BOxNwwSVTijh&v_>kx5FTO z1Z#fg$G-@aQU19PjFm~kM!+-=8GP5_n1A<|d&BXU&fBysWL->$w|VHU9Az9KUzkbZ zq{kUo1CW+uQpw+P<=W>{XY#H7xQ;HrDu-zn420?e7{omMp9j)`>F_;_n2tN;v%KW# zHF&Z9xTao%uELuzhiTF&lrmqqRD`h;{H#Ky643AKO~U3L7`*Gt)fc78AY6JFs6?RP z7$<4l*(y}a{2d{MvCFbUCEn`2 zhwvs}-dUzR@v`RuRo02N`}$RT`Rt>1;ojz#XKfK7b0YajqX>Kmze2yUJ_yd_na(>` za2Gz6TyeSpop}O98y%lyx=(L#F^ur{^*BO!(?B2{ID%#v%hI8ja;mPq;Tz_o;CXrF z)SipnTMh+W({a9MUv6>X$hPH>zv!0fca?Jm`*;=!98o&6Fv*~HTa;E^x?r4-a)Fs+BsK| zNbd*hO+&^Cia^>V<#%?K{LS_)EyOLJXK96InNhei^M^URWuo;VOe!B2!T)WHB4um@ zUm6BT!-cO#DAo$23g8-04-wjD!ILAi=IykMln+691{j4;W#tsSxz2-W5A_f@I%)gI zqj*;xj!wzv3jFBGd=_|Yhk6BExm_T<$&wzUt z1yOftM_M!80-Qd5vfaM-t6yx79&cx^@nBi64JeTENH5Ok{`lEWwo`lj_(|Ny-NWB$ zZhEo3+8I)A=tNqf{v1b@N2svH2q`WkRO=S{cRRwts*3D7@VJt>^SW)jXZKd6(QGBWAIXuQ-6MjJ2eCqNqO*1^X3mYCO zKQbRqM|)#n25+kyo9)4)$8GJw!?w2dsBLUNYU|!_ZnYKH2in*IuWK1W7H-pX_4`c} zF-OteF+;>jA1=sybTrCNL@N2mD4EXXcB{C4Zg}xr7Y>9!K|?P-{B}D&c$Kvt*5=@Y zK!0>R3~!iSf?rY>doQ0yv0c-nC+_NQJNU3II7OySw;SY-Z>P(caIIZLXmC(P+$h8h)k> z;(UA!UXEHj?L?(n&!Kh$uNfb?I=5+hl zgG;ZPRd7JL%Qcf}yf^Aa%1H}v{+ zdXfeby*|f0i#vA&a6KERV%U~6K!l%jzI^d2hAx|w#thfVkq;XGQDMCm9*b{X5PunjDD~B`V689c>s!F)5ja%vgSJ{B&Y)(>EOp z_gp;{vSXE&ane=ZFKM&kcx@f30popxxO$x{_<#lLF0bgdD#n9Qg23-;*t`h(TRd9)*t{4&xbK zd`3B>eiaVw3|-}4!C80KxyAX60N8;EO6oZ6r`n-;h*O1J>$YI%>znVys}X&K4}P{C zmDbR*6#iWd{f!axsVQ z%FP>o(BUXxh(CTJjzfH>Jl%8t`>%^rX>~X^Eic`*KaA`5T)FZ48yp#!j5(7x$n}f7 zN99H3(;X)wcxe=nA4w;KH64MecKN36GHs(X1XSMAHuW3cgpe0pfp_5+Adb*RM~4JY z*{UGm#kk_Q$Cq&WOH_gIhH%rf?W1pfBhzr)YuaX%=^EsFO*=7`a6*0A!p?fs1zRJY z0;&nB^e!TxMo0!H7nEDYvo|`$7zJ*mU5z9PWh%aUjHtZIze5Lv^YpNcy-}pXcB{~n zj&qB3#Z|ym@jM5=9(rRal-Umm?-@K|czOk zVRStL1wh?uUCc{GUa{1+A`YZGakH|#kd|$F;@mn~T}GG(y$ZV$l<620_=lDdwnD#Bc#H@xY-BPQOv%*j^pP__2?oq--!d>G}gsq0->x zC_fyWIA^4LL^(2V8~lw>sGv}A4gBJVU-sDsrdrUm<4feO@~U@%aJWuF(Q%7{va+Hp z@PPcT%dkMcjrSx*Q+u!*?b!CF0fV{r3F% ztG2PR4qnI`exw0(bn0CByG#*ToS$m%zyAc>IC5(_NJAqB0=#vv~i)`|qJxEwsI(GjK0~*t^k=EEzn)?Iq*kVu!=AfWqijt1g7LvAzzBx~!x0 zxiwi7{qinwod8E=!xzA(%v`+kFL;$lfG*Ni9fg<9Xars$F7LT_Yr!b+2?bb`Tbh-x zShnyJQ68cWVW(YJpJ%=*e0j-_9IPYLR%s$#4Gf;vqxb~8gfn#7g#3g!;b-KLzK<}b z<2zHXKBr`i>eH&fF`j)$M9m@wi^$a^3U&aGO*~B$dZIgPcXeeA;8vqOZ7`m1(Xw38bBFgIma5^nUZ<=wu znl!{H7mJ76wzf1w8qgX%LeCs)Abk}`y`Gq%U0(&~wqH5_0w|w%$`b8k9-5t99Hbq~ zBbAq(;?nhmF{;SBT{3w4;;;RN<@qR)VckG zBmb`JAb*nvc3;2Fl!M4cKb`AxZ5k20av5O{cW()RX` zTXQ<<+#+>VZOy3`cdqjRpOPnsZ-LW|Rb(nEBU=|kFY+DR2+>mZRrr;LNacR{SGFCd zSt>)hE())aJukq5(-P*}*S`L%N$c(L-5+m_0iWaXqkrWegjgfEaubFvt5I~2+X?maj-oI<#{?EVIUVQW4x2?Ie_A@{EeeG}j z%#XLf_R~Ms{_0QvMEk3M@h96~>(8J0GwrYag`aFc`_n(!e&(lswEdYM{p0ONf8fjQ zovr!S#yjoPZ~e#i={No}3~SgHSGTJpCU47_POiK6uvi{_`7E}@ zoQ$2n)MXX8;7eY9;5qKE<{4n=aOe=G5svJj?X-NIkrMKrnpD zKsr<7^my(&BR|J8fcJKYVlzL=r;K>EebX9gyJV)5-8A<;Tuj!A8YR<8+x%rdEir%a2 z!Wme-^4@FTetd7JqW=UZEn@P}<1QmwU06R#p?>P|Zg_L+kMIk>b!ns??_o5FK5uyk zWe_jiLzdu?c!Wv*fr-=SoW?H&H%g!dS>0I z*r?R$x-5Ml(#!g`&0OE0*pqMH2K3SrXUl`77=UY+l^K*I z7gDQ!%k-UR{P^JpG~*oI1HQR{Vr^rof#SjDDk>Ls!V8TKE*5rncG5Nw)So=s&R*_2 zd;9I3_ug-Ndk5r+wgaA2UJNTA-P~9~xIb$zUhK4Qq5O}IPs#VDJ%4?GGI-v8>d*d2 zls@4Fq!?L-$HTU^vDS{xuiNYW6PTAu_#9A44?;)#?E3-BjRG=-GN!@S@~*g$9rsSJ zP)W<2f3CXx*XsXzw-i0)3ce}21YC!FIpwH0PAABE0{qgJz;P6I@K3F#?MkoGNp_t< zfwFFVj>mx*g#eQWM~sfr3+>eYVS@Bx#H608|1uQ$5I3;#v%bvRX>rzdXc9b&GvOA0 z)lU+W=WujBn!b5uIw&7iwtSy0-yHo#kyC-SU1``-!MlLAY!|j+J+$OodL9VJ@o?0R z_V?2-9vvKnZljdlI5I!gwl@~rgMka!!Q0Nx+U0oEE>DlzyR{O$jxx{FiF1xzl) zr+a;E(@Z}?TgZZ^RIz==W1bUHbLiTnulY0~6}fzdvdCb~4_3n1}gAS>?7|tNBAf@knQ7y1Z8iRUq{2!+4ua z{YTKV)8qCBzwt}$+yDOm-Tw3sf2IAS|KabqzyG)YM*E3B^(Q0XK7018{pbJkU)wK! z?U&pC=b!$w_Df&;mG&=w>1*wme)(70*T4QR+t+{X*V^y?-tR}Cur%NE)vvU_{#Smc z{msAjSK3ei=^t%#cc<+?{__8;jgNQR^43!nBIh+#XA79!*((RI>EKCr4TK6|xpuIt zuyWeLDGWvt?aEh*BL#x-1UFT}F0y}B_TZXB+>6t42Q2&wlOc>}*d9O?v(%M&2?t?h zYQ1nH^E1m{(d>^tO@+KzTNMsCohDGq9*0-pHm*Xv=_%-B8UkULR#(~=zx2ge(HG_s zenrUw!l4)2!_jDgv4VyAn8}nJ(zXt&vs(gvdK3;H{cM8p=L>G># z%pRc`>c!{6pYJiT$Z?sbos=Hw$Nkfh^OlGiUj26zNG1Q=38sk&@W zw%pI!kv^1g!%KIR!uj2f#Uk>;971?22AqEH_J%$dt2^j(FFbLM z=h691TS7+B>qX^u|L7#NyS2919&WEk@mBHGaCth0woZ=PgY`x5U>m!ErlCvncW%2| z{K*R;q;`0$C)-sU9q+Z1;Stwk>gT$h(vG##9G_ma)rapPD-A>=aLLzbTgXFHK6PE* zTP_~GICTwgaM~DjLfy?x-=SEKTDusv>yv|aF+PSCUHgIZojFD0r0ws#CSP$ortZe= z_~@{`{P=@*_~N5BJlczQhFg-#r|I?Lo^Kn;ltaq(>iLVb2d9a;=;ARraQ}Yi?aR}K zN6-#@Rqv>s*N5RN)o&uFNdH`&W+Z<+*gv8z%*KFocu1Zau;~|XsUHUzEth4=4i(U6 z47cFYHEQDd2JK0!_O%*@r1>joMf}S1^=Oi=TbRd4K^b$CEM!1cTMY<%Uz!fD11{cMdU^4q&2=3t#Zqrn-*?;zpcK-Ue+MoKN zKi0nID_@R4@%!KSM*E%L{k?QhS*V4^y|%WN6-%{FIuF~uOPx>TD39r%jZZVb?2ry; zcW*z78|lvY?z``{AO68V0n=J;AAkC3`&YmIpWE!#_q4}f`4Jcp9i=bgRnU;p%ecIjt8JCZK&C+=!I7P)!bV2##c6l-h=G7`1jsW83(ka}1gm~XU$^@( zE;{*A6lwt!JGW8?O~QQYoJDw3aTlL427D%r0=a^zv}77WtkT3^6x}g`{I#7p^`>>4 z%rfdG3Zyt!wqAL#-Tu^%{&0Kva4lum+UvgDE-drxlTYa2U$nE+BSVvgWkH~%)3lB) zpUk%M?C8KB`Fnpu2QE$xXGc9v$28b{*yaao?et{W?#{<;^YJ?f%PXN*1soS7lEIsg zZNv1eo5CgeAz0XHSdURkqdQv~iWpRD98+*CrP%sc(J;RE?n|pTgrg`v_rj5MoAO!r zVw3Rcgn96L=z&wkQN_#=&{>r7(3v1`sH{4=n>pa*S#+gfrq%u`>G>R5Fdyn7WdL63 z$MT!L_;s|=gtdMKa!Zhzr_)^;q!OPAZ&R!`Tir#1$_o0fJ!p zE^R9~o4y937;iYLUDu(3D!7Z#UNj@@UeiVi3YQCxO;;F&Jo#{X&CC1pawYGiExe>D z-?Uy7xRYjuE}A2J&o5JMuJV<%cWOe|b>IH&-}rZJfA5nB#2Ui#=;)dU z@@{QorMwJI&aR{UTNcQi^d{Oe<#(iBqr&jyGKP^!*DOI0wg!bySMn2-fALmR0jw|D zCu~igl|GGjV7fjl)Q?d{;_eP$E~sigE6XUd^eM=(8O0xuuTaVth zya<7L-8sa3m_m_|>NRG$5SXssatS>HbghpU3-xd^I;N|j%+&9AG;A-Pf6`V5gSZFJ zEx0VLqm#8p!(eW*t*)$~7>&T+Q9LJh_79^(e)W65(smK@|KQsnwFg@p=~pbv_QMCE zy%=y>oU<+7W&G{NgI`OeL*D`k#%pLHp8|-c8xF69h{4%3vkij{S$<_`UYgi{1A6 z_^!P^R9UcHi+Qk~D|g}@Sks3<7t*u5dKm@N0Rt6jw_ml7us$-fi6Ug5C7+364oy}+ zz&lQHs&U`ZYU{#P@~8ADm_OexKTl){+*)XHjit_JQL7&DePBS z7vcov()w^3&5a5XX?e)|EzhLx)#Nchw-E0y;kK0FJHV-@ko}85O;K-px!4{G-s)Gf z2fTD39>9lzW3YzcLO1d#;FxvMMDl|321ZAY)24yVwv_e}e1Zqs;=%qw+uwbS@_8O( zg?TSoMk$4`7iXum;fb~}m_t@UQ3DSubKm~(leT|SVQx`OZ&6}}&8Zi23(M{LV%VN+ zuA*#HzsOvcZ)*6WeRch!efoO8J=tDs-}lGA(w4R!wkZt`)b)#l5pv9G+g_bVA-{>Y ziEC1=BpX>sI%d4xvHPud0(B)&>4<5CTp6$?1CfeocFjFVbq4)hm z;v$#2-jQ?e^+wV_GBwx^{%0qIb2fZew|o`S_nxewkWRHD+QHuOdCDRlrKjSN@R@mV zM$?oBpI%XS8&AM_i!oTft?_J{v}f+5zw5TTynsTyL`#7eWWK)nwYIXlob?!_DHn)6 zLn(G=h#C5jiA%Q`!d~g8IoNCKUGi`IrH6@@cWcma6gLG?M zOXt$V=7_*BB+KwH7DdT1B6yvlNkMs-Bxx1uT7W)Ku zv~ghR|MGwPzqZ4p!-RW#e0PU*_trDub2@(HXa50=Qc(f9f<~cm3;n|w6zKUvkb#jLa9gyC>C9e)AHtB3b_ z<@Y)xQ1U(nI@4u(SUT3}LFS&Hx5aizE!(@;(fsCb z{Z{+0zxi7*o#pm}Kk&Wn_|*q(d^yopHy+)?B=hkEVBQso9x-%)e}!HEx2iXNTn+DcucfRMQ;YJ^)k)QB)t_~#5Ry^J2qZJSN9gOqdQEuqNE+TN zboTEmocEbiW*ExlbLfM#Lo<$MC|vXG$cJ;wv{GAd&INQ`0l(RKtK81dYk*Ohm?O>U zShur%4GOqQxXNo>-8&rJ8&1RxX?k|V!XM>O08uF?y==upni-KGUX*b-ivqACO-WAy zj1&|Uqd=N|uvy{ETZK5Iim4at)%sO&EEvS2d5Rz55S}QG+(&q_j`Ei9zW4A2|5AS@ z=DjB!;uRgMa1pVBr7k8Bn&_|=KkM>I{m>?DbB^BE$gv}`3U#*0s=rFVYwv`w#X?D2 zx-qaPw+dFKt#B0&15eVdH3NJuC81p3>)yJrwkZx(&Wc8IkY@M|B_{}B{MUyUuI@Wm zVeIcstoRA>a+L>E98-pjawI)*otM6`J`z3Ogd^7uzTlyI7Ea^VApmvp>}guTrQ-0{ z!(c%yk7?u--@Ys5Ssp3u3cbNi2YHwjiw(96IIb>0&GlV{s z^3Byjgw{ipLPw^>fwbcYvFj+DqNw^_SUuvJP8sJc6Ypkt&Iq(^lej7_!fu}uyz$)~ z3yd!gu8{y;Z($t)ujt1S$eO>dhk$%iLeZ#WxgGskU7BkfDA|sPgWa~dR@>EGUfq$_ z0wpT9Y88EekDKV(MS1FwMC#I7)GNU9IXb1+Pft7IPsP;-&6 zb924d*dabb3*=|p)jMJte$msA3c@tJP&#&-L)~aqGWAZ#l{}77uEv&wG=}Gw?EnQt zg~2+JR^*`y#*Tb`;k~Er-FMzGTZ&jCiMq+k=dCkG04-~FFQU92;!7n_qm+uQhJ%yg zG39f8fHBJ5NoYa0dEKPNxtSgh zr8yLH;c&!N?*w<+aL%(X*(zW1GCe3fuf`+FQtfAn@6L7JT3>1#YYVh7Y2cdh)T6XS z+6AwC(>|_7_MMZhQ2=Je)iz2Smj9Dyc8~!d^1bv!)TiaCe#f>#TZjJbladzYkX-cu z(I6ow(_oe<04U2EL|i$3e`g0}akrh0hA5lxnRCvwlkD%W!g$EH;lVz1b(9fT4N8_@ zc-E28^qg|rO{WQo2iE{_8_AQS18`CUJJ%@A7dPN^b`d(AZnx9(ZDJPrZ*nHyPSTJI zlcH<3+sQd_ypsC5JlTO(&)Ng%WE(oj^c>P%1)s_~8V=;2qRJ^84Jqo7^x;%JcPH)2Lwz&fRkhY#ede$g|TQ}D?@TJ8; zj4?Bl?oe>muEF{3`7nltpScvkxCN+u+o=V%rv*J= z2FsLGLvoebof&Mq_8H2IH&=v(zV!6)s=|JDs*$$(nQ8cNb`Cs*w%$ZI#8yUU&_yZ-2a2-5&zby{d+tlC@$|4MSZkf(uDZ=;l z^h(NpHL=j{rWZ5cYHoQe`xMX24-k^3(-FXBBDj6>>8EXXcdz}~pZxLmZ~vEn*`9p$ zPX&&g9G2BG`YfoHPlh35%k%)QCBSv}odLja3i2@)bZ0NW z;y-m%iin-J_bTTa1-!}_b@Nr>ivnT?FN2pRQfH)BmMm->i%DFoKdxfq0E-jdT z(ljrwGFRQPbeZdwZbt(&0GM8c2~HVsZAS>Bg^?>X29s*>Nq-i`>q1HhBnW#ETvWsr z+IaST7Cp*2m(IC&ZLAgf>G+7V;MxHxLU{pL9`Pm`Lsz^=odHM6O1OLjKz{|3Mwz0` z&^|b-!+;7t9ORove!a45XIZ%AoA1frLj!IE-mH4sFjc5I*u6?FcOdWEXw)3m=z0aRC#YBW& z%jG-M_kGIgU6-%0a;>BA5QBs_-9eBJM#C43iRXRZ)mddXeg74nD{tcGT4(YzppcMH z-~_)NSUD;lC)d;o<#t3%oc47U!Phbq?%vo5ZmJzsyO1YpB&q2$)!w4`b2V=9#5eU; z`PJ!nuVq{?ELY%zy4ZfQgM`4J9eCt5hAB_M@I=eL$E=y zIT*RXnj_(JQO-PObgN%nKyey3ck~c8w^DIB!Cbs)w2)s|Khm9w?&b>Z zntZ2GIF?YdeV@^Pnvp!$v;haqw{i+UZQN`E9(w8l8Zpph)>FtF^L* zpe?OlgG70~t;lD2#$A-a;sw^d-ZmOXG6FkTL9twko9yD!Aox>B8J(UI7W_jGmiqAE zpe-)auR<#q2C?KgOwvuv?|>C9n9VR4Z&l@MVBxzzbg zj7@`i+bpl9Y@fgYPmmwjHeDgz`lxA{$|mItB2Fvsn$}=@uU%~HSICoc%Cq`@qiWJ@ zY3GFTn_fophDq9$h0^e0IW=~fr}XTWa|hJX2nFA%edEzlo4&hh)I^(|RB_cv)=;WY z=73u_ZTl|0Odf1)MtQ!w7`Kh(`F3@7iXsQE;uI$H+I{(gG>_pU=h;=_j=oSMs0+%u zfS5D!W%`8kc`3Z>WS4Xbk#Sv$jd@fwo+ zuCl6uN4e#Odbu8tGW|ub#KVK*HgX*Tn&Y4Qvp>Z&$ zbMQOcT(s5Ql&+evSD);{dQOWG$E&mnalU}!zPe1Cg^em-osLeMi}ATOh+Y7C1~_Hu zky8#3sb-hgka58Q^{Sj~-cT=jQs1PvwXsUuTYzRX6vCHj5AmFZw@EvCYG~ZEjzM)6 z>V&*fKN^nZMe;`bLXBE!-+a^~=#ta508WV`--jF`?-3+2ka3owc^3&ihp*^a>Uss) znswk7kIu`Nci5LmU$)_ewzat$4+hs^k>+dzP6--<|0wsj6SV0wczNx3s+DAh-)Q5c3tzm8N8s1${Q9~4g)24YO+;sbuum4JWyMW;5 zbBNuy#(>Z1_^H47zfY%YqwkgUDD*OX7`GjB3ArV(MR+wF?<+jty|)3Tqe>rWcgOu_ zo)f)hOyg#~cX8P^_^iSL0 z{X73n`)B|B=OV0XnfvMw{&;h5(uePTwaqWB#${`Aex=Raj%l?EVJI#hbJ6D8`ZSE< zZk{p%lsKW&n4P??73kqP3L6So&fjux=PNoerx5(m5C35M55NBF?MpxW7XpW6>#s7p zbhw@{Jm;#)L{tE4@3}yrW8Dd`7#Q`FwhD5Q2?X#REO_bMuk!`D;&QJ*Ep7un|0;YLC=`175%gY}>%%JGc@50eYwD2u z2*>=aW4~J$;wtZ`^TZ=PW0P875RcZE9kQKaDSTxxu@Ym@$yvg_XwL{d@aTT|#^A$A zdWN(9TUbua2LgKbR~+dbfDnJ)p>$;z9rm|E_oQo{O`-1`YPJ? zzS_Knu50KK_@#&Lb;?>dbz2HmAJ2ar5>${^j|Q)>oR&9fR{0aZdk#*L*PHfW+KJ~| zZt7R?o3Pl-cj8*c7{*YrigvB@;*-hGyt(g{{T&{5(4DgMV9e&WbKbb=6)D`ylBpAqzHih~Iw(2a%&hr^7XNQ?elA3*M` zz$;&ylNKBS=VyAlu{)P_IKFBl6d>VJ5fyJLG{WJk`}5$f6mL=k;H+&y`Axk%%EUhO zZ5Z;=P$A7&#nP%*w-;2|A17V2KwzXC-p3n=_`XXY7IcZ2t}Z#VuRd^^s-gFf&)W%t zv~{6Uw7P--M`9`?y6c0cxPKcuo(vt2)DUz*Ifi4sa|};=;k&fpNS6Jh87k-sL*Jg9 z>LA}VzWYosK|^lQr(&+*L6=?o56dE*C@{PF_Urvo7W{g&wv;*j(vLY`j~JaF_-fL0b2zPSb8dOgGioKvOC=?>z4jxsJ$zoB*Lx^E*IS^^ii zQps3>4px>IvjAeIOw3NFk61_1nM5hIUtDpe{LSr*psTow_cQuKVUVZ0xR!j^(eSL& zesq{Adlx8gXDCSW6-SlbF3@#jmK+Tv?SU@D@FQ2_ca+olzP3rJ1aUh&>*{tgWs>*n zF+h$fN9Y9H2$LiJDj2#S8$vI%GnH}683h|f=Zf}1-D!Mv+KcVag$ix|H#fRf)8CKX zn(inb3@Us}^HXhmYpv}KQTCu84I42iiAyR?TJT5MMoI**cM-`4jdD$4ek*;3HHinQ#%tV>6(WBj5U zy`;@K#pfDD$o6jh(^J=IsCo9`AHXK;y?34cs*2UD?U`$of9OB_nlt@T!rHf3QayMm zH`n5AqJd{_^zg7PS$_WL^Px+({sRYciW#(i`RLu%xZQHfuiV9Hd?N0L8KG54+unW{ zW$bKtnC<;8NaOn2ZRSqnO0P%L$!OGepMMOU9TBJ2OR(QxTHSzxG~NkVYO3%hjGXo# zvoQ=ffBf(}Yn*NJO2Id#=9WlznS2}xcd<}-hwXcA1=-d4_q2!6NgD!#eARl^SZa9rlZ)#` z4gn{b2l{D)0^sUi0vIWXdT0X$u;*G;Hgg;C6t^obUknh6a{-(iiVet(?50 zO~99=g^B6;whZr)uHEg!KC~aST3n`X2DPJ;UQl{-I7sSx7kYEq%Hub4}03T#(>Z1`1AkmKTM;oj+%x_Lo6cz%#UmCW!|0;x1D1DtngJME)~WG6RuB( zl@82KiF-TYba{4=b_|3y7#H%BIhbE{oF1hFCpbqU@ZW0^%Hb!|O@~<-RJi-wf;F8n z&ma7kueZPaGk>8yc(C36^}qV{_WeKfBkk3vAGEK0|BtoHvr!wYZNOMo+RXKFyPe%? z)3+zU2J@JlYa3Iec5t`V)}~I{@e~DBO%rj@z?OK5ako zlRu7du-X3Azy7!Fdw=X_1@Hb4zZ!j`NAmnuj~E`BLXDX68;sla(!Pf@CP zZw3l;>2Zl}e(B7pqrUD+kst{7DozogIj!fUO&+CO@-F$5!l%`_MmWn5pkN!LK-b|X zE@wJUt_mGm!OhzWponkki5ChpJ}Gb^!IY8?6Lqvm7rMBdB4}zLId%SIgvE<=UQQQq z1S5>tc%dQTEI}po1s=qgFk1%SIVuw`6~l7s1z^YSs{C0ApQ{${2r%N5_@(^%t~>~Q zXW1=h(QM(qR({q!lzOC`R&~LlLZy&ZMuA>I^}QXUY2M?-4pKt_&;4mtnjR0i`c9hg zFh6Oa3>2j2x3nSCtNIQMmc@3!eP2JJ1?pIj0_)8>kLqHY8f3tOr}ggl-Wa4Cs`t`B z6jI{b>GkOgV~ktip%-3r@J+Z9=QC%@;vc6xr0%5;LZ>|#*VBJRLp>fm5~cfAX;L<6 z*>dnK4VXvDn{xXtxpwg?F0qqVU?NOWXW`foP#nc^ezZcJxzy_R z3Yuj!^zHg!HSJgBUEBym){o&-z;m%D1y0@iEu(7)Ce-ea5dcX#mh*V6Ihe z@g^=}WCS*GEN0|&wwA0ujwux_kj>s>AvquP{ML*;VT;UI0eY)kL+ZC!ryCvG`8MvhkV}xuK zSXW73U3Ij3Idw*qTy^J{hM(^q2IsDL|7goa92e6+4>V>Vc&-n0_iYHDwSDT!qV08t zvR;Pn=Pc57)C;oiO9 zHJrjXh`VTg8vvf_Nb$f`z~P%C`a?-o+HnL_{-KMyYY9kGuV24x?$hq5`FK1;!8@kB z&;yFMQ^A}M4+?|h8l=#`I}e=GghyG@IPaW!V9+y9nmjr_g>TEl7TebLcH4eHe@;9X z19V=wil&N{^z+HH=ahG*9iKYKd?srJS=GlVjgB~5$L@-7e00#xPRHrz2TQJ>0b!s% zo(y%pcNBE8J$|^^wl|mB^VcWs>{h;03UJ`2-;s|78GhiOyjMlkR~{sjv`YDc4jnzF z{%TZSFEtH#)pm?x-@CrHmT8U7B{zNBw+g3q(kmSDLya0)6NY+3A8gKQ7YMsK%|?;e8)A~MZq;|V zzYqSXJL>b|b|Ud~FMs`Nx9z`rmc{HQQO-9uHru23zSwqm4%#)!oqWM0`+moEB+S)M zRzE9^*w>vyd*j2sc6Iy;_%;5tDEsd}-fX||yWeWxdG@+ZfWwW|rFMnP2-(Ge4q$C= zl0N?OJVulmluZ{jURz&}LG0DeVH+JE5mu#mItx|5di^>(zr1|;8sH|ghJ|Z6sO&y` z{GfgD{U^}CDma>JkDoq)C(R%~&9#RQ!4u_h2N$QiXfQh3eU)ia8=ITW-CZD<_F!u( zN~~T88X^~GU7z5fElg_+1#sH5Q#$2gdRJVZ?CFa@J1C>b@NfjpTt?~7VwJP58KZZT z20XVMMrI)G`T50m7f&5yQSTZ}vo*B5vSiJbL3t%*XB?W?*4ly<627I(crrW*-#nvW zHEd`q{{-I`#*K}d zekO#5b8Q6Mf<}PFW!HC@Ye$E)3mS@T=lJ9zaEm*q9JvNe=$^>-m6m-tIwkFylv$&f zo&j&C34A^WRrJ;v@Od47^Ish4B1oiF+gUmbIoK3lYHlTD? z3FQ|9*a6geFX+NFOF^|GtPU})m&1-Oag*PhcM3*zA`rrPGt$Lrei24x;6zn;_o$d0 zikGPm2GAY_jcOutLN=t?*)whqWyROyT226 zwcq~D-)Z0c_P5*j{HdP}?CI!Xz`6~^1AsGS>fjgFQUvUPR1&(n;2L9%^<<|@=M+WG zXX-DC3CySJ%CM%qimu;{#h>)%V z(KHO-kr|O_*;1F5-84zhvZo#`XK+zrguBOk2+Hz74+^-UjXaxTy*HhdIdLqTFjv~9 zB~DD&Zxx0+@|Om@_ArEIa!+`!(vs^7h^H8RI1OW&!Xr=+f|KOYoq@$P%*)KWcG}gE z?@ZU?_wB#JSq$Mxl)y>wE}r*X4b)x5gJt)7rq1|{IHpncYn@4JRc3RrO#D@TIZdhZ zH;(xj&i`>q=PvmsW8RXMBU6Pt)3V-(kvw>Be8X^-&|7$l0m@U{(dK$ydf!es%P3d; z)+G5_d6TbIT_AM-158ytg6;#Pa*q@JC7 ztAMK#>|Dy?Gc%QrG)en$QVe1i%GNo8vuzLfU3r@_D&LWOE0hd+4tJurw3jRTUBO8G2`?&`u!jbH(o zVI7H=_AIx`yrWH){S2kt?Fb!Bb|85=igK075%1!e)!tkjN`=$D$I<@qZ^~zW*70zJ z@#nmFG>n*G!sH;f0(z`;ot7;3UO4+A7`{a2}QC;Nm9ED{+Bg=PAi6B#zK1aJR zu4|f?qp6Ea^9b-N8q_20#(EMEjq}!n#vQj5RC%|~&rXLireu19{Fl>};q|-`7p^8w z5i^44_O!tJ^Cuy&?KUW^N|8RAA7Xwpy)&Q!Kadvh} zf4$hZ!VxR#$g7y1$fEgpy9U892UH6ZCWuA-Ky z8ncU(nZA&=E{=8YcI!+RQM|c4%L0bhF-VQuy#1kdNn&J09|$ckJgYCA#DaLMOC?t*fFVtssk0AHJK3#$*> z{GzV>)%S-_gHz#H0nclzYw^O6r@FA^_~=!;J=q68)y`b6Vq0=LUJZaNjlf5dU}J-hq}e&+d!w z)Eaj&aCLocURnMB^r&skU$^%kyEejF7U9zvR7Tmm;7pG%Whp&4Z`us_mX|2UY21Uh z?!b!%WWFoI7Y)IW!B@7am44tUkrP5b^6T;z(a<5x8u9cla*D$I(h58kp0&T%_Flh2 z_C9DYpFgLJlUa949=?tYE^V~yi|iKWk*#LIOLi9FrvZI?djn-(yt)Pf!Qr)&x0m!A zK!L2^;3@JO5~sh^8vtB(JV;}Jlpb#(+Kxtby?aVtkoUv8cyD=ZgTL}?Z;b(;*CF?K zYYh0D4vhg(iacTLc9iL?!mvBWZU4hR--SVX8pfv7y_1RCh;rBo5GMkMY1nz%0jH6h zHZk+f6cRk?^a7C2X4R_OqB%d+G7 z%YXT2+K>Fu4`qRwi__!w#djal8BMfT&;Fnt9-p=S*B`@RUbfe-_uBB)ciIO#qc(i~ zo%ZteYnaZf7!iht2kqe1$GJZ_+-YBW?{WJZfBk3M&;F&q7?-Kv`JLa(p0lp%{QjT# zsW48C?#c*SXVu##a-R8xSt}^PB0Ft^S z;nZEyFm3Paz5f)_Gn&g)0kc;yqCf~^PElU?F1YL6J;Fl|{#U@v6VIH<=S`ib-g)2G zwJw#CPSP&~H$f$*R2ky!_#*fN4_dTtJ_V_7~*%6wjc}wfbzko0N zh!c}Eo^d)j@6+Zmo+HEYc;K7)D1_N5)>MjG)!&8uvjPM} z(4KThxXg>=tTZZK(oQ-B8>D8=_tapRc$n}l3Nir9^haI)(tQmfQE@ z&vutnJks`zAK~9{+}E{?B1t2ud$nxbm`)&bwQcekT=ATR@kmqrWSc$;WZkHsNe6D# zXBsa4rOUl@-kl3CU0IM@(sof$;W3U1w{wS8bZTFJU?pT|5cu>6NL}!Ya>TQTqioqS z5ZtTq^l6!g?Z^=>1x42uux;ql>EX7B4-k$Okac@^r-Ko&-jPmEtJaUkNevQJ^?MB+a=JB?Rqu7- zAEMM6S7qX0be=Le=YInw+(ombzy0IWDECgA(B)rVoyA$j7yMCWN;JF%`+ zkX8C#@9f9$oP}kfA?20Fj~`|Vp$1TQUyz>WW>xrCQ?D9pV_zxOIy zPE9k7;y;8FH{_kee3D=eH|+`q`Et0^(C^bnT5jFv|HN0G(k_u% zsHb`AeS32Nuc!fzJ8-7q)v1u1+Yj1`+YQEu>;k|}$(v4F)EILMjk`#qi`_XQu3|nq z+C%x>fwsX5H0iX6XCHr*wxlsJ3kQ<#gGUe2M`^fokjwR4P7d`rKo)`4W~c8$H%=uo zKj+n3zXwOB@HyxWe&=9^>o_^xM#Ih1$6M)N_YU=bJs@16M%gbb3?qcl$GWu3sjm=3;zxFMs8|MR=#Y$#q}Ezh1ew zT@O2j&PG@2K{OEXScGVGZ+6nd@p`D(moeu9jJ^FBOvLzj0G+pzOQA8mM zj6Do~pKOb3+wIfe|BvmRciuthx`4snWDCJR@qORl{_LOm)9uS&{6c&8$-}m_v4-H} zYRhygQwXjzFmyZ4>8l8yi#!kb?kc=4xbnxo^2PR}Km3F3Cx7C{+gHE(6*`}R(6tvY zUbIg>`K0~cH~*l0=}-P_8*Dxf`~n`hfw2^-4(H;|Yl3uPID@nPG!EA&Z{m~ZDEr;> z8v{TIfeO<#Ize0$26ySa#c6UX{CBtfRXF=%1$>RSwPr&JCkg;nCv~m4>z<`_^!Ivf z6l1?Zh~Su! zTX!bW(NtFs(@R+65I=b&Jnw^VzxlfI?`g4DPz{-O!>NGlbOYy@Y7o#JR&N3g1HOx3 zgCJ>#V5e{RQnDRYF6HOGF1vb79p~ykfv*FtQ`#!4GkHbj5SqTA#1!BtCIMlh9-8nD13T)ff)a%bciHp-E`fH2VZOOuyhPSUnRtH+58*ieiK*@AxUGiSxd_ zdNoX?^#(5~uQ;>bK9erN6JE^SLlnUKi*2%NZ(TW4hI{&|aOT>lT4C$E3aj1#&acgg zdfKE$$1<9Q|4JWSeddH_VjN3ZEQc#MLsPT!nNyop@P$dhD2rhoA(j4md^@tE+oiB2 zEz-#P5*i2)QZ?|MpDV-_^m^tPUm7s&zyWNbTfRG$pjU!ad@QU=vG~ytntTljJhf#b za1lsF3z;i(PQ`n+H?&;918SmN2m!Sc!G8nA+XbgYy10t5nXq1|-567Q-eF#=2%Z`q z1j+5Byqb@KxOrFyzSD*O`eq_Rw2D`F32B&jylH^bdU54;%gzhpqWloqI4;`gc7O`o z?l~{-)JQ`O#>n6(wD>{mpG*t`t3$es=+IZm`n=Tu4p*eynl` zXpW>yHxvS%HA$Z~+t!zqs5LB9U0MAKw4fAtXHb|mhJceytw4b1^#x_p+se8tynzq@ zM-eDj_1RgcBrK#3^&ZIRJ8@4P{ru!rd+~BN+al_ba5_E@?VOO8i&!dL-y2=$oy&jO zj*s@i%1t{wJZLMcYY6y@C^mzP=1-v{=pL+Vv+hR=5kzYbw^!R43cv!0)N?}GTcTX@b@v~?ARk@0<;gEc zC`T&E(i8Y`BvCpOf9cV{m+ipQBfJH?TOapr3>t{?D-Cn6%%azVeX4xIHIBAXC^t93 z0qJXi%k&y(%J}Xtf2|isu$`o1?1D5<_JyGgWiFQN6dt{2lpCa6&=OqP?#LQgUtBMJ^4|l3}`x} z8NN!J>G^6ehxjCqN_&@=fNQ5isO;Zfp0&Al-5xC6ww0+-yBWT0)8{+w;lgEmxDKzg z2@?0==4yKfCHMH~xLu*3X&h1cHC=gt9tz4CR#b2g{auVtp^Z{JuZKIqS>~4mtMl(O z`cK%cwdEKeHa1pJDhKcgm3$Ow+TN<$SG!03*+~{0G@qpf4bPozBBOitRVQ`K|WyfC>)`P8hvuH%HpSAB%Hgq)Hx%=`# z2U(_2a5AGFN3#(>Z3_{)FqpM-tqYzt?xV}%}O^4TX!ZK{`IbS5jg1} zye_Y8XM}%sX}0a{@56{!+vdgw9V*NYA)*9&829>mdjK!@>xeepMoZ0rPkv(Wiu^4m6BI^>9Xd_D4upyeV&}< z5?cli=Wbd)(=m@y+6o5|f~XJcDc%~ur`6w44&ih}BKxp+bMn2<2#6>53SWzkY#@}V z0NAPc&2s8p;Jxn+*M|uXx{=hPhoTirRgeXfg$|E;^h0o2cqtr+i=MW`P0?1D9s#P& zRk(ZQH#qdWY4MGegd_L-GmU&prd{^rZ5>EIxd*pJTaHv#{Y25?eGj(RDnn{7>4ztD z1q)452YKY|!<%;wE`h@5{?%u{Njn{lcofV2pa)dJjrXs1#ti&?a7q; za`!MMA&-RX%1BsYzc0TDbVs#kU?7pSHQpr*_qHwDQr|vR7Q7lxh@-@Jv?c9?P7oNq zy2gcd{MmDM7KIJrMORTry;E8QW6LM)I;G|s1)@fz9I0N8qO76@1`wz;O1P@JuDFx| z+&H3YStp4H zD%8dyx!}uHoE=3HpT1L37V#MkCcX-%JZX4xmXR^>Gflu#ylM=v%%<&peT^X5QGplkqpmlD3;anpTPVjW@FJtOUv%+6lrIt% z&+_4ig9Vfg=j+Zy84u2hE1sQ3;Uba>;2Ud;F~W#fJu|FBg?C|bVJ~s1XTq%lK53kh zpNpYAaun3{BSt7@^Z~OdA}W_JclN;{`Di?#{L-|BE%8N>z>|x~xgO6bqy8@Nr81nA z@qt4H8_=Rq-CUkfU(hOLcX2=pk$SLxUccUt8@cYgP8$$zX~22eXzUsJO?uR;%Foy- z1JvjI+(cVhp3i>dahsl-j$vaCT*L#%{(v%T?98+p@TF3_cZ%RY0X>mVwMI_(DCCm- zGIb98s4Vb_19~R!-dG<57je|#JLoY%p)p;`A3S)_Hn-MejIb}V9&Gc*wXJA4sa*tA zT&lfkv~{~p^r@t&=ZQQo?#|Gqbmu~pcg97bw%rM@b)&aR$|}D|e_MP|9a-X{aq3!}b?gq19^d$N<(guv;JUkMOXRl(^u@1%NG=)0v#6P}3nu71&~A z5jP3l+TOEox3l4H3}2JyhwXCjJFT6*YIC!gug`1cw!4kcGy@RZJ6dH4D#A(uSfNE)R zmNt3OMx)bs8MspZJ5L_8t##zl<+&{2=~Myf-up$;9>de;7K={wQn|XDYR9zeOg~UT zr@mcm)-7M<*-zhn+D?!5b$=qfeTF0V*O^K*HM5xA37oP+BZwhkf-oxB!f#z`Y;&!R zc!U9m2DskHZ2h|BtbK&W8)dD@2|ae;%a`ZX7eO~F{o$p^MIbHHwD_Z~!^61I5T~)s z{#h6xqxNDKe385LHUZsSTu-)hl>WOLJ-DDDYE}M!LSJ=o2wwqS*Ot%-H5`ovC3Gbp z^l;(D7&b59*VbW2^BRa8(Aj#h5gclCksnyk_OfFf0eD2@Z>9=B{GU@*GV~xi0 z%+>EXWS;5&x@V50ljkn32aU{A#UhQ7#^$wzN*S)t3S|m1Dlgr8!t{#raQ}IGZ+nUS zuG^>2p0(fq#y4XK$O0bHL9ciPYY!oO%g_j5nr#^Vu;4o129v~4{3Djircm%^!q$t_2fC*|N;uldlyk|4R( zbN5)^I4eef@QxStt#IOfk6Cfv*O?u&sLgYC<~uJGO6&l8f!kjx`qeSoQ7Zg-Ryut+ zkFEpl(z07OOoV(o0psX0>d1f{Y!(c%^95J6Vlo`vgosZ9$y*?O1&UIaQFZ!+3@Wjti%+!U?;<1aX;OVG9=vG6BaB|j^1>OfY z;LG=1ql6fjJUoTjQN9?aaxI}o1*=!~9aUASih%&3+-Dcta%EeMPYQhTFyMO(3UPg` zIAv&1Y2iw`;wMU~c5>Zlgsu#Kf1hM?c<&+Z<8{K3edfC(F!;|n zeWWh!?lwHnBL*n~`K@m^Udtj>@Ow%hH4UJYQ=hF@@nU+(r^~>LY4&_i_)SDy#`B2> z=T9o+WJHg5h7-S`=j2g*t=e9tMZn-roRva|5R$Z{Lk0iZ*2%f28jJdoY2h{P@X+v4 zh5BA8;hB3~vInbcS)1b$WsMRC7ZKQb7CssZb?jVPN4e+HwiTdN7%jdo?82(+`opc& zD4e!QM@E$WTnEH9n}xzqMjV-uUj$)Y8(g4mtgo-OF=1_IQMyuD2&IJ86F|6x-&OHd zpvAiM?jb#78$J6Xe?04PaC&jw4iSt`DN8LRShS^J=g7Of$+#NxJY0D2U^s5W6GyBI zukpknEpevetlh)B*IkqiWidDc6V|D;BEJ_tjRCa<8cG>;8m|V*B>lVSqAszHu5k(e zTtu%7i71|__A+QlY2rMF3es>?cMn03T8P#8|Bzulv=b{Hdxqk1jd_ASC|+|6KRTBAuBLe>UL;O-hFqKp;dQ@q*! zq%B9A7g7F24Ac`tx^t)x4@PZtG*rh(9`5gdK?2f-ilVOPE}VA-o?K<#dJlb*uDD&@ z+@zim_o-*6H@GOGi-NgNxvkk%!6BfO`|9dEF1;!l2Zuuhe-u%K@hb#z+t&q3g5D0! z#a>xmL6KSxpT8vD`r4o^gU6HOLj?C4#oI>lcJFe%6?DgU5lBaSL1$<}yjWV@kog2I zZPR&`b`hS(S@hBIMCd?;$^JpO!$qJEf0og6n)-L-I7-UAo-NDZcDbz#RsyH}iT$Ru zn{*{clje*9W}gafyUPp8c+u{l9hB6m8Fy!Z&d5_4r(C6L zL|271ybnAt*$?%7k7c1ufy2TF7I|M8#H8z#kG3PvH4UFt*5XA-7!jlEwMX?~q)9%y z?AH`M`!qc*#9{F+`Qh&K58Ki6Z@0^{(=70Ka`dVl?d`Ocg_-unFFqx;>GnI{{Gc7| zAGGzAg|@SI7^Pj8d`HCfqEI=VK$#!zd;-nEr{?A}x84zay-UtD005`5oqgZs@I@3? zd9Uq3WCi1GIV*Zi}Uu2c1{p?)+r9O3-R#_U;A1czx53GTn>Bbx5j|a z>G-L?^^fSFs!0^F*L`&*#nf}k;O!`U^dN9AoO?}2m(JU>6iLqr!Ss>$hJfxgV(u%~ z`rpNs+2(|i`Yz#2#4tupXgic1tWu~wdjY+a#_l}15&_%=W(I38_{rtA`Q*#MppY1_I~?{mh4=d>%A&FmW!L+Z ztvbzKvFgt#E8TH_YhwL{f63F7{Ua?R-9J~p-E(({YlY*&x%VYV_jTOYdA@Thgm~)8 z7=^{>E`A@jG7@IXlWg+daCVlJ2Pbi36fiA1D&J+kBiGP{3Y5&1_G@qUES?KLXBQ4lgst@n+WKZ&S=-F_2x_w>m|OM>v>kcq>B%^X(PacXabP(sE!%`` zM}TTgdAOU!pIxYg15&6Wmy?G*V z6DM;@DVr2g1{TA;p+o+n+()@^G>7zThf$bF&&8kQE4IaJkmJ22F~5vZa!O+w5p?A@ zpLjNjUGldq;RBp1KCX=IJagM#44!-!HNveiU;%i2FLg>2#>ogRLbbJ33o%w*iCRa! z*HB_yys(UsS8-WaX;m>5lI7)@hPvC%`92!EaMf)aQ9laT8dZ)?E>XZQP>^QZ<}!Ja z@PPVuWbY4N9=C&&i_EoOS(=aAGL#L`P!^?cfY)f@Rbg7A!NKWeJ3J+CkSp%pp}>W? z6q=ov>xjEsm}$6t@p6Z9wzdxp8UjXR6>1a%%I!$AxVfb+=5#p@R*RmkFXKC^uS@)# zd%mL>>YgkA3m$+^{Af&Y&ay@o`J*GyF7Ru6vR>EM95J2D&H_#i(CyeMHKwmZwza+0 zKBXltY_zfudb}bsPdg>$Enj8 zkASP%E44(Mla8ca=_O}TQD{Hw1KAhIw|fts^bH!2;p-^z?x(*-<=HfK+RVZrJW!=tqnUhVZjrW4 zIxYzME_uYWl{9DO7qalCaAYxU+Lc7{V13Y5;T0f;uzlUE-T}U zy9U{}gTry^OgDYkjM1Aym7ii|t3Lb7dDj4e2M^|{ze%@UyaAqBWb-Ae^bVXkKVMp= zE@*>Z-Rd}f1$A@@37w#*AHjdlZf4r}nzlYMmqq>bOj9w}3r6FcUR@e(kB&~m|D7Ur zHok<9IIuE98=7qow%3rCYRv}7F7)e-v@0*uP%B~U5wr~6)>oHPuTrAk3o@_hIN(>F ztqu?xp{+ROVqtkX?Ol5KxnKB&x5j|a>3C}l_#BTv|F@kc07=6o?2JRrA@N-Docr#< zFm@RChdoYr7|yeQ_LCI|yFnnbR_Ua_%DJ2l_03HGBzAROmy7)%0d-xNkJELHE22X{nidpx*?(3)zVQ~NTq4Trz z<=vaJl)Q9`!CjraO8ETmzUQ0a?L_mdpoNYeyqAfW z^54;kjMirbC+=m|J|_c?z}0o=WfbT}SLuOt#aBReKA;_M3lM zEeLxB(5Euc__hvnPkB2S71CoM=&zjd7~rZ96u5~Ke5P&-*QR+72jA?_?KmPVA!ucU zUm;PL`_p<*pyIs>dgA0=;UETwgst@M6<6Mo5r9h%)>pN^H?>sd3MhHyXsuT5YFEP9 z2kqlp*Y)hZX<9#(V(8uH1R&4UX=f-QjCAJ+s<2x2s`H8)yl{=8&$a5p{G~Q7m1VL9J8^M786Cz8Nf+b8qhr3kZqJ`RZy$a1aeMyad3*VKuf2G++X+`A z6l+JQWFq3X6Rta$6pVFs&Zsnal;)y1hZc(i-zlti^eC-LpXJ8cx2rN*X;?5_S8}IT zf=jn&t9kaNbj&FvBD^_bYx^wx7d|e?N2Sf_K`O~bXC2KDx934TlAmqX(Q*Yi6exu! z%CL&ysv_q?e=1^v*W=p74yQ>&m(pe0wueSIQBw7z5?yV;)7;A_D4khWB5;~kzw&!e zKM_1RW6KZtB5{G<^Q103?8sg;mevR@^xg6y;GZ$HmYd3Ad#ilfXlp#Tw ziA6s1bGCT}YU+eo!81aqqr29X1_5^`n3=q58!Pi|b)ok4zP`O`$0#>?ML1VhH&+)W zY*Tkx4?zV;cm53oZ$#dBFIvqoo z+!N|u8qr9l;wuh#0gaw!WO){$`(%99_VZ!DD|x9S@mkCKm50>C~r47?ZD)EkO((nYg@UaVnPuTT5AC>L+NBJ>RS zt#7_8?-Ov61wJ|B0Yz9%+Tr`@v&wtKwvaw+W-bb-3mU4hII8S@jK#j=n+k?g#YDAz zL)wDrdV)`<2*i-ib4Dk@D^-Z%TJFvBu8$Cf&T~M1^T47aRBgk0m2Op@+;jfa)!?OQ z;8khVAfZ==@Cs{oBcPsa*TomA?bMnWj+z($mOof#;=kX;TXTYWBjkF|A{AL?) znvd;Yny}6+tL;!4G@W>^K$Dm7#Qo;!Trj61)?ajv(J%oweCEj2D9Kn(W%-EpVwE zPS$jrCED>j4_C7ufv)yW@6kg@Zw(Eso7-D4%DB+q^@Zze%(ct$3C;Bim}p}Qi-GIv ze4I9*Qa^>9I@s7~t7|CkmuGEhd9kgoZ?;DdAGCMgdEC}FHnSeq_S1J`ICIfFcjRza ziG$ZKGtEJ)pB(N2Z}IF2@`bqC?c{9RLEe3}cND{)i!V+$@|>u3OPv1UIwTrpHRkHM zVcSqS*O+>yA&$D7qzx$7&(KEamR8yvSK)9AP7OlF8G{oI+)kBIwxQD7)!k$ao3MGn zSpba-ZE9}0%`Pk>pD(wII~4z$>2`iIM;%(9;Cmh%f%geulqQ_wqrC0T02;~l+`QJ% zLfz?Ia-;mtdlhwng2v%hm(uG*c(F=8B$z(M!50k%nXW+H>Dg6VjuHSm&*r0#YV zOOl2p@Zb~)5>MYEPlH^;&or9;+`ssFc;j1Rz~^ziH3oc+$DjY(|2S7@7NRXdt?nUS zt|jQ#8N%kBAN`hluZH!TFZwG)|JkDisQ%~zC7jO{HXQ?JIs;FIGt!B`W#co99YOcb zYesxI>zU?9IBvUZmljv=&tbCX2Oq&SHxX)1Yvh7XaeaL~E_ZGrv$(R=uBMjT_0(Fs znO$plGiz{#&DLhu+r+|Vn_k>%gY}1P`_a?3>DD!?D*~R*UJLW_(P6B|c4C?Twen6| z*?L#N1AigSd%M6ofG*zyr{(Wp&zJhtJ@-f9u7p-Y)jLu8CRp9%d;W>P!b5*{U%PnS z`wsVZ)Cx%VinSfJf{JI?3FmtkraE`Sm9^hAB3SsdV$6y3Epzuo7*67sf@}U<`O*u8 zz2YCz3BB;%$X>f}Dl<_YyLU;Qe9S+}Kwwme2L4&+mwk(0A zuaBZ96HlJ}qL>D*?xkF-5{N{NruD$5d<&ce z?qLs{IixL~Ni%8nVZ3qzMpy4|(k`!{ir>TM(Z}~WI29*`@p}cSbUu@wXU`k>>+-6w z9``uNwLbLE{ZaTVoK;(JgiiVL!ZH8;dyj&()MF?}x6lG9%Zl?xFOQ|PtC6p>kwDcoqB(skX1 zF0%#+;bX8-AhnK2TU=Pz;bYWY;_{rnBlYWIX?`nyq1(Ou4oXb^peOh+SB=fil`of1 zc?+U4`Gy|NkME0fq+wae#%TzS)~S4$k$7>@zifp!F5`wq4|iVB%fNL4N*TBAT+cv- zXd=RBJWJ% z=ULLVJzP9#Or(J0bP#L>M*;9EBU4UnIE9ke5U0zxY&Dd|Ot}J9q!1NSlSMi}O zxVWIoTGn;AB0rQ6>BI%+_728vcYm1rok5AYx|wL-`~b!4+_t76u4pN=qT$Cjmb2&Y z)kdVp`~H@^#6!GAP_{Lg#9+obgOXz3D{@sZr0=*Ud!`M;v#C=J0TQsSRAYcGO&B%i zB?MP_M-~;O+`I_QY1q03udaJ=sS7{vXHoDpMyR-1_dP5wl30CBmoD|~*?azE9(^E4 z%d2*mKAHTe?`m5$qOCEYi~`jbi*E?ErKxsM@`i0;vMuoJD7aH$RB{h@U$toz=C!q@ zco)30y$UeZ?`k~S-8*c%2cwj|228jDpGqQ-lo3TQCt#v>_(p$?!tI>;iMdtqNk+Xrn!7 za&+8gXeX1mSAofC6&EK%Yo@Kg^F8gG-~6DxeEAA~CXbhH?I*5D1FUI4xqv^Q%w|0p z=xu3vK5a>y3iIp~c%u&V?zB#=V_ou%Z}+SvTUAbpo~n?6gv0bVqyXhx%$v@h4csA(GVTn$-NM)(U&nzjSIQZG)4aq6Yh zOys>90Bp~Ca@fzDX&eGR`x9x}_TxGXHFZG)C3VktWqUmjG{)-9B%hQg+c#+3&-zmw zPLI+%O4y`#cdPiP|NNhWKWOId@m(KpjRBwI@#p^5KMI4EDf-K`F5%qyRsq83WH6;5 z_>p@qiXjG(efk^*+r{ZF9NzifP@g%HnFnuW{K>e7qZ8;lfV|XMonM{x{Mj&GlV1Mb zcb=LLuEtu6zTVGoX6SYiJbmWJlaV(_r6Pe87vRklRWUihJ%EhME zVc@s7m$9CX$8O^@4ik9&`V}GQd|?K5gfr`3Y=aGV68J1m>Lzg4O+Ze0xbd+scYifb z!g>%rQT*PYhD(239q4^vuI5&XO2zTBAMO<=;@D}(Y&~V*{k;q^&zw<|ITcDh71Ufs zSod`AwW8XY#hMz6YUir%eb>nwzhL~s%2+QTM3DD;51XI@dzdiHU!~|CksjQpe0kl| zU%kvN>BJ~NM_?IJu9OFX3Rv|Nm_x{!MHqB+#CLw{!??u|NdyliloY%Ip0;3~zVkG% z2uW3jjLdTyzR%kdS%!47oaxYeA(7L2M^^0ca?*)ZmISp9YICbHQW&b;_;hg);)i*`fL)`j#W{tX!T`gpmiclmi&-%KxA z@S<-IAvgSTWQI-t~xEg6eN4)L|9$u zYkjbk5oo6vxW0jDIwB^{CkYS(063J46=1D;*Iclqrs=VY5UC>TXt(vCBBTPNusb|G zPyVLAdpz#qii?@{aDAn#Pn0;WE(#{>yT@l)cx(xNEZsUG2`;K^>!9 zsC;Pny@7UVc*p=}gr{5@K~@GRRw!8Td`GL7z_-e+3jnKRImN@WXA}?RLEf%1k?r-O zR;z#AwZr34b3w*~;c4)#3%W*g>0;;T4Bns;QM`>;X)mU05hc--)muK;_WfoXfvmg! z*1l6^y?Bs#ww=gxtRoYFlP13XgIC{~j(kNIYaa40Q`w-e@FLO>-njAGHi&2XMt3a_ zm48Q}(*|w1(mimfKnj=bz_zQWg6&u+_?L2-TllXh->Ofnez5mspx}Yk(=c(V=bK@x z7cr3*g;;tCFXVd$AULIeM{hN9xRb)CAAZn|4|ZZ8&_H;0a@-z0SZ{0VPE)DHdfl6T z|7b|~;>lTmg1V1kgK~uqscYBkFljSWf2&r1FwWVSw&EuZ?uE%T?^7}g6uod`@QTo5| zg)hReYh_ZE!dE-{Fue8la_1l&z8&4(-a&iv_)$ANI7sK<2+HO8N&CXPPutF`m+7p| z#%FD3myT$Dx;^{!!?wNkpzZD-wZWtBZOiKqJNU#)!5xdbB8akbG^62t1{Xcs0QATapT=NcifWZ#FVEMz(GCoJw^ayaPIKz9jqw<^O zmx+3Hn<|A?pFR5#t@@_Le>$#m8V1Zqz=b_!=wHZ*d=Pv;vnb@=5Vc;08n3Dfeqhs#qTl8({NHE?n24jQH2 zGQ}!hG-(;LxE>FE9SV=Qmqv*~$T#7I*TZ|mBt<*(B4tanB4D$7ON{d4gh!V@;M z#6x~v^rY9NRCgTRd*Sh&aq`X|*FMcYu84A^IHT&|B6t=*;+gvKEM!{8yjRfV+4zp& ziLc^gDrP01o3h^>A+)_%XGlQcT*0*)#h11d&{HADk^hVA{k*@o(_TD(mU?qEG$SdA zYkjHw_e#E_hcybX!k~cTVd+C-)<5A=r@*5kmhICJAT>ZZx@#UWl6lfC+Xj}G7mHqO ze#GN1I52Ggq3WNuPb`gbwhh~*3<8*}3dF->vv*(u?l_Y(YH+h)T zF%yfS)F;~;;DfNl4?N^Qa)o;G7%U@9lZG&xu4M^MK$gmY%2};3P<3q^ zmv1OYN*B`G@hJ)gFuEgvuG_kEi?3P2tt~qjb}C^+`|8qM%A)~6d~FOCqMVqYyA%x1 zTqWFkarAdCik$QzFMnrascjCNQ!c_(j$L=56h|TiK1cbao}-hic0zq+;l|Jtv<<$U zK43W8gLyjNdF{c2wzBykyws6>UDTzq$te|c=&4iw+<{_hZayQ^CnzSSt+B`cC`KHr za)ct}qJ*cz{fyx1qI-w3lf~Yy#KCP0WiAYNf)K8|we$L&2Rsk2cfPnIc%cjF6Ub+$ zp)=auxocEFLr%N#&_L|KfNjGC=w9v}wUeM;!N z#7D>ryyX;`yht12pZ!v{jD*gLm+_JIp3!}3rI#7xN8-Njy)8bHg#r_$>leGWo&KV0 z-_o3P;_3TK>CJX_cHZ3KBCGiW*DVR#w`mA)7Y2EVO0(XN$%MnUW}COaE91Szpq$np z59u!n#IT;#_DO zYb$NAFlg_5;VW%?LHk|agqO^vpSps^=BJNnbI`WR9rSIx&0>mbDHO!E623S)(Z1)4 zPr>s=d%ZVo6EkydOgnd-sr{YZwzq)mwZvGNx4&;v&!cbZi=V;N}O-NIIT>2`~7An|Iy?bek8 z3gnt9dO%b=plwhtxAT-Pt$Pi}^GnOrd94d0ufGA`*;??eG2nAK-Wmfw$K%ict(qo~ z7SJEvy^S;{4a|mOXH|-hR$!OVxRzSX|?-qW_bv(vut#V;Y) z4%^cwPswMhjbTtL>s#&HAAJJzSjxzUqXLf~J#3$T`e}Qx{Q%}krw9{#=gGtN;?qy~ z_Mjac9>DlcW2pFpZ+)w6KiJ5w1G97@3tL}mORIDsmh%t6&sl$Upa0!^4jEt_6+Ur& z>f(zpg;#N7$M^<6gt0&Nd%_tA`eec$7mcQLMXXOHjxUBw|TIdfa-8IHKUAs}%K z2Z?x9*sZ$bI_+s#giNnIb0KZ#@%nCxjrOpUXK5$I>tW@gD{qzFwv+6A;u-;qcM5=uC{T{ZI@08d%fc8; z$X6(nw4*{)il7I0F%OQO&K2Z@-)#zmOrB=uP%;s|@`1y;b>vAe2XS<#O@*J{1-Bqc zgTdrf8DbRv#IoU3^z}rNHYZ^;8M#Kl_Pz7#b;Vb)az4HzSQ;r^)4)+-J)BmT7oqJd zzRkwt>(qt!_~uAj7WktcQm4S@9QYH;dd@p}go=)66nFA57oIimPhTCzi^6#4)S+(l zuH-MSmKSH^-fUYizN>p{c!`3-vxW@kw(E8;{F0sccB?vdS+dkbriJ-pd=#}^*uKX{HxPjlr1@HjRs;LOm?IFUxLUBfJ0dQ@}J;-NZUJK-T z7A0F3W%*w57uPP(ZN8;k;!L`^H;e(WyhePHWnfu@hMc2rUE2qkm-Bu#q`0bo42>E+ zP;#Vg`SA>Nd^b7YrskG{0Cxls7uLDE4!F?Y(ZMKNAFizq+Un*Oyy_|n(&UYbg>{4y zkJ98;d+v{}F<@=uL33sIITSUg1lS*`aH`CWQKIIYegd7jeX#W>ZuG=BJU%6@F$&dk zn}nXF4a;pE3i}e_ww5N_(=FhhnQx!$j)A}CyxX!QbB!H6|4DoEq`c0lUL^k*(SgT) z)I!@ngTvhrtC)u_wo;ss|{VN}>3;BLrzj?26rXq8B?i_2| z4obI+I1*VSrMxHo3f~1*gMrU!bJ9x6LB6CL-bKDW-w&_mTX;OM@G5BtySLTn=8iL; zV&uA_?TF793&kT4K~AeaQ%@=(m&e{hFSS^si^VOs{ezwM(FfmY2d_WP$nwnMM(9p& zlj*Bn_zSq9ogz8FKWw{Ykkcq!I3z#dRiSixkjA7L-aC(8y3l~$!`2y2{+YC}~$`~4NoX4+BdyZnM95YY**UQE4HW0trv)HFBt*th9qL`(P zIY1%LT3SW9w|)q7u(#K?HkLD;XbHvEX*tTUo9lzNxk4L(4NTFNgwu5lj3;f(a6dc* zr`+p#d*-6Ihoi_7*(#8}!o>((S3#PT58YiuXW&j==Z+QGxrRD$T?D72>FuG%k8-3m zGy@NiZ%a#|apX7YIsGjBS%uvCRIXA+sXn;m7NUnKcBkJ=y`JUs-uKtMTGb$@#Iz4sE)1&DMLf4zIq7M54r4vbfUS-00il>M!(tu{P9%CoCC z%edZs@(?DvL-{7@D9_qH4AuFUyRV-oyo)mp9)3?-7_0?`;D%FN6)p-d;_V)H`IV5L zcfo_<>MHL2)?fQDM9R_Eqvels$9)(uH!3mdtbH%m`0M@!$6XS6Ww8E}am>RIDjQ^b zpKtBWU*EdW_1ryr@eI7Yl*yKXKw+WE8P`DG<*HqP2r(jAh8||p^}ctpk87px2^(0z zkNNbYMY;~l+&y*ooQ+{ZfsHVMS!=DXwRAGT;pzOZ7%NC93J{E3tGpnlxeT<7H|^-i#YclJlTft1DgjhR(f6CavDE^ zuEGg4l@SW)z%n`K*6<28{e6^G!gxADRxq0;R}z~g>>^5C;N{uV`Wqe}r%vZ)5lo>4 z-+2gHYQ;3Xas-#a-qT^)9H+d!ym(Mf$a{HZmHU}2u4UE6;6-?8*_2h-EgOKPoaPn0 z2M^FeM|;w+`RS46d{f()bG*f`JVAPqCm7x%(+o&QxNJZ26WeM=QEjl?_l6l^bp`1o zN5%mlG?jX}gLk7;5+}Ien@Y89GJ+#vRQS`DDUW>EDPi&|SJ$`BH57;w=f3-FJ*8jd zCoPzUYR;){^n?+5pKV7p-mF5Mg~1TE?Sm}SSdS23bO!{IjBu%;!nS6eSG~Z$xOYTL z!B+)HMO<@?3Uug^@@oXBX|EG;^)|iX_&kOMut2<-;M6qaq1L;KmQx3gP83j`YEUEZ z8diABIs+qwe79(OvawRG#pDUb;;rB)vgR)hL>gH%{0elZl zCwzBdu#&|N_1*wH;2&k$hI#s(6bS3~is03)^+F3GP6a{*8yLX529|8?>XbLql15*? zI&8y}i*|(k;7GN~OO%Y6i6{vhYfBDFw!POcDBD7NafG6D_Zj1I=!*cHwqGiXKl!Kq zPqpjtOHSKP-BuV^cvpD=c(5;Bl~NSL7&tR>=!Etjg$bIIHl^?C3o3m0y7Xq6pjidn zH7jByBn?l!Nq7vM@E96(-2!>OJLZ^1;O4z~)_Or@Sc_L2_wgq5cH6_FuPy zot<{LzlT!nUig>b`mP-xp9KFJTuCCdGaN zGw~rE(X^-&=!Nz=K0SrbuW9FyKlqczEo%%n04vSeE+nV5fkqK|h}-%({X@?d=>Wv> zPJ@C5P}f@-fOofMmZ#b_HH5`84;U5~X4?Rm>|!$5Lmo7V;OzALHdBH0o*~zGlxTpI zzQcDwxb4cm(OqEd$H&zF*S_`(Z#@G(r{k?L;B!2F`tSUYAzDw5{u*wRvkrKR|HEAD zTNxf?MD9>NQZkE zd;~-2!LwJAWcJc`6xYCAXUeFe;IoM9kN&;y_=`b+GTWJ{NEMyb_o{c(uZ~KA(r@Cm zPc!w!S;ms86X`qi!4cZI$fV9XSNlV2(^ zwV6Xuq}ROb;1*`@{aJT)cooK0-Idq)l<}V46NGDb7EZ*^XWsYe@$0{b*W{bm z4qC2#9=;_LD(?{AD&%h-7go|N<0D62l;x|As^1F3zyUu98 z_zPU-@1J;}JwnsM(U;A7iSn(W#i3B?YSn{P7kQHA0feGU`!RI!tRiU|!D5HJ66WO# zyx=rj!`L>Yue0p8tuT(jMO)K2oAhnBmYF!IbMJvIu*x@R^D6XycZ68wLEfWRfbVOH zO5p`om__%pt^)WKPgM^!%B6B7VDiUFZo#% zc;XAUd_zU3Uy)kH$hfw37v9rbKzDTw0he4=$b>_sU#3|!p+VF6^}tAbcC?%>mS-T)!Sit3? ziPE?{-L2sqsSTZSQU&0CBHJata^W=iziSj^Dh!H>{rxTPlGoi$J3KyXC+F8`Z^{ME zQD4@}VurTWuG{17_4aUkqy4Af_?>LyIJ#MESFIGU$(dTLwhYG|uP0r|F7y&w4<0na z*5a9^v{&WXhJq97!Gqwu_VOw71hPN620`=WXxx>$EWyvl;sAnd!Ok ztL&g69h0@nz1xRozPQNePyAe=>^jo!qS6|Ec6VR5(dZ;}8Y4P5bqe9)>Vr1Fyh5#B z0_#ybJ<%ATSAlNjH`=)|>O_K%5wb=QW&lhoh--eKx|d1X1H{8`@t+K?oqBb8}A8(g%`DKFB#H0Le{ zmemn?+e_$)JcD1_*1^Fs^ix}-4#300V4XI*nsThKyJmnMl8bF|Wt}#8k&$+Jhdj!B zroqW1cy#KlMvyraZx`V#15S%UZglGOn_9CV3+NKYsao&6^C)dqIW69&lMv~3Ey#CH zo0B(4t@gQmPWg$NQF)bmiU%ynZt_e%01}PC`lxvEprAeL4V3-|981S;N2rmJWTV{M zhE@mY2Bf)!Oj-Jd{i2JhUXk%MeT;1iz6}nYKIb&Lo^CCt<%&!OExPM~>5JE&`-Qi= z34C71TVufIc>MI={>S!l{~HIbf%jp>^#_sHbMa1y-m4${Ce!BL23CUhA3poeidfzK zo3OcZ8ZMwDeT5W-M`WTjLa%nlhN&|F`Ch{DX9__&|69im9s2q3ReP{ff|1IVE>&(V zq%pt)`JuW0u~&sJb5ikh)X%GMFU(ECz!3s(>EcO9fxx+RS1_=X;Ss`_h?;EYZN9BP z{%S@%3J(QZ7)5e3SiSF$Dn?fpE-9P$AmYA^-6awGdk*vPUGnnBH63rRcC2si!I`_fxpzzN@3|_V`kcBXY{3c>2d=DD&FaBQwz;;{R+biGk+%aduAPA{uA|YY9qjM7lcU3S zae9$@J}Cg{BhYFLAP<#|%meFA-+6sA5`uuosX;&-zrmg5 ztM-z2+*IB4WwC6;u_MX1{>o_>zx|QZFdjh4Ke1j%+6)~~De~f(llyDR<25G&kQY_I*M=g=}GSlijML{NC zAxQg5{Z(EX98|`1{q+E<(5Y>#FH;9i!P&u=dZ$dLo%yv0`(*@kfza6qnOj?%ZF6&r z?=u;-F@B$@2D0!6@zR%*UpO}b`#MN@DZAlj9ib(^Lb4aiBpm!yCRCs@O@L1-Ekw?} zsb+LL3O9nYw9PjPZz4s1ro}sP65d4uD$c^9z^+iIA}kHdH&k}SErDYQaCFI$Ea%X= zvw=#z^JX>dD5#T6DL?WnVYU3iPJYP?f!hVQgwwFn%n9j~LEt*u`l)PGeS;fLQD+*3 zCt-ELKm|+Fn2a*v>euG$7KAFby4^a0MXc~Mw{@JOOy(`J@S4ru?UQfeIY7iP)IZ3Im_u#&D<-FXclf7df$ZLkE&qbgiSAc7p;uIiu0O=-vADDlQ$_RN=MXu=~A(-;1aD zrA5Ly`Z?QY!N7bmcFMVPeAYgGHEh>&8|`kg6tS#o-qQ)~CZn3*z3=D3 zGeXxY=C%!uc*Vy7GI*9IgfsiV6Eba z?mI&yai|Ke1`_WPHi|Q zT&B2jFNSTSb11Sd_@?6OT=R=dx1799-R$oj(ALMaUBinn0pK6;rskKjW!{}I!t^_3-Paw%nw;toy7p&fjX zk22-D7^bhs?c{L33|R0S@#h*RD@$|jOJ8`BX$B6c-M}Mlm$oSy zd)5wcw;ZQ#x!vH+9Wr(5s&@C#_)x~+q8n-4=?E?!t6c6vgYzok;BS$uGNJrVT9VIN zc6mz{aMh5=sVpbI(i=kX7w5~!ad~AQq!EvL0sauFwM8E3!)S}7NSXCkx=mkXdx;?v zy<-YI=tbpj760Owe(|j_;Bz{tiMPgp&+GW}|Ls4PqjyhrYv*D|AHlOb^W42tkg(&5 zt1gXBrL0%j;;z=k;g9A*f+p{UZ#IzRk!$~40n)y@!+X1&oZfrdS#T=s-iJ-{_4Ab} znL*O*&%CS4`Dmvtw6nIgxz_gf58BhG@1-$25~Z+maBvihuPe?v(qhNrN~&8hz*7VQ z=K~F3czOjqe6Z1u4-ZlnJExgTdycZA+_#cjNYeQJ`*19FPMt>U7fR0{}|GNR#TX=%Q#(SdHz z5w5STv^B2ow;O{EkxeUt5FPK;867E|%C3e0IzC<1T>M9CxT7bYu12gy+SRZDD8)4X z2_3aG=e$uz`Fder#UKU%ItoWios%YPb~u?LkWK?ZNc#3Fo=7z1?@nP;=<%I+Hi$j9 zZ70GyXGQD|ffD7stEx~Cta{2d`IIne`Vk2Ed2c?cwCzY}V*aM%loiY9eT)by)0Q1UOQEDj&ZPzD2q8^g z)O(zShpUi;R-{kitM|P@%W!7qcNGI&M{QSGjhi-L7@r;OU0oftCyyUyJFDT*ag<(h z7n-7c8uUVM0xXOj4ivSD_zB8YUMv{j0so*B+9jRAIml#%-7bq_!5+}g?dha-V zV1U4BTUR+(5nr0Gg%B;bi*%-(XI}x0bZOw2s{;UY=%1pRG^JxwX0y<>3@X z-WTyQW<6S4h#_Nib{#=p4~bpv%OFPs@JO$)W-8JRPv+mCFV#_CGRl66yjQm3b8I_0Ln+8oJAfWc|eGkhH7cN;&jGp?=ChKs_0T zQ&U0T?)x<)JiMs*+qbHO#fZgojl4q~rbVFY153s<*OK{)=gKEf&&Jta(vk3_M;?wA z>j~#*xBdBuI#S_2gO|9*hl=Fv+!C}q0IwRMs4HFOxmRI#{=RtPV`$elW4SYxuGm51 zOfRgqxuwmFjGvzzwezEA;Lk4>wN5b1<-^> z1&wp@YPo|igG;9mEr1V?Irxe+4=PD_it^H*>XpIgsdn8KY0IwhvM^7(qrPp=60PgB zNRPgge*+fO-SK8<_kvExDFvHri=k;3ij=OT1M5|9W81_W`TVnA_{Dgpygk1A!&-f7 z4EUUmzxa3mr!e^liv0=k#{CpR&pi#P+`Q`4CFkC)JEy{Bg;mH_(6SL%$A)6(bJFEq zm%fa{d=*BJc+v^*mG7m@q_w5vt5djP*$ZEO_9_eoze4UrJKX!UJzOCV znCGKMkJbFp2X9%iND zN86k2<4-v2!Ib|0xG_APb`Gaq^FMi?u_Tt40gn-TV;JxpqymmYS)LjJGqh1Bh z&%zAX$j7`BHTMgmGINoOxC7TC;rNO`3vX^Z+( zKwY3?a*-WZs9j!KiX~b@fk*O&DeGou2jgnC8Ml`6uyrR_R<~}mzLAXN@t$w9Qu3CzWvxy^=k%bAh3;;@<|@zqmWHr zWvr;Z;K`3pMBIr>@e}&x6gT~-aW540%6HL7(Y>YcSs2VO&&jEj44;I-+g`A{Z!bO= zA$fH5$JO_K=OOU+h6{Sybo@pN4w7%dWO?Ni1W6hmm51N`|3;|&?2&xDnkG}R6N8)q= zo%1g5F~z{tUx};m8UdDj1>C?H9H%i<8T;_vX*$w)=2Avkt5JLFr4;9y-eP%Fs;n2M zLOGfl;a*zQaAi9}KvU7zg;XPG_QXc`S0FQ-uKKR(pQ$n2myxTRB10I%#ZbppTHoAU zYYVi?qx~b1PV*HGXp%AtxAZ!L;$Yk0A^7R}$gD!+3cMBNSN>+7F=4+!u+S~|Fs$E% z|N2s|2;FLR3q=?s4_Ec)HOeMl4nNct_;w<@12|HrfHyurPkHPUSC?E@q&x@!3m)V4SB@;9pb=jKhvk3t zcq86S%P0T?1YCEXNqd4q+>%iDeT@X?8g?kBpy<-9@+AGLck_Y){R zm&8+{LCK|VoFZUhutmjZ^rLIL$5z(4sEQj&d$i1`Pnu zc8@7;DIaJj>~@3c;dC-&FY*FuNFDIG|=rEHf`$+mBKtXuhvX~k#(oyxzBXWQ{KeR50N>-!36 zm50=`abp-IVD)9Z<=Riv@x3%}dCF)CzY|{Go1Wa=c5h#OZohweLf@}T{zc%HCiM^~ zcr*agMtE;o+@4j1GNbW!TW7>eH}P&+u81i zZLr99SleKItDT>qgrWq7_fb|2q#Ejy7L}o~(L%qswN8CO8*DymUx1ztM(6F__ug&qzxSxkpJMH%3w7v7i zFJ?={8`_oaaP7gvY{BiIihTz+dGErtwlOFo-V6J?`>A861xZh9+mC4@@DX_A!}X=M z1isGpUbeM`Ny>fIcK43j@Kn!@+qSl*(PlOy=ojagqzJ{_UPUg~Q%m}D>VXR>y7PiY zaHn-x*VdH$3@nFMG#2aH??9#Q`YP@_N7VUkd3D{KkK3ay`pMP#7#gHc$Ru>`+9<;@ zeJe1{&Aas@eH5g-HqbEc;-}TGOis_!9%#eY7j1iU1^CpF;CaB~6cRnJCB zZ8LW_?a70+wz0C%#-oGw7y9yJ~S)XjI9)3jB2% z)|h=gt2iTn*C8z_xJp}mH)Ircln5=>=X4AgbRMo6eRw#`$j#C55F!4A`q2mg(Uu5Yfg0F^jUfs($2Q+O>)aL?&G)5-zNp*!gjcoq1f zj7_5uQ3lIcK}A%Jcqr&7q(nebh`G4PNJXU!ehp_Grhck!%&)HpkJJZg8D6yY;G_+b zZ`vSu>_R90n^43xEq%XxX#$63aU@0B8~|UoRHV(h)>DNk z;noq<9&ZaMYqpmtIJ6OkKdZ&Gr9F)py3{)5E2GYQ6BZ~n@QOCqdogWClEkSPH~B6& za1;-)Z>SK$zcuAQ=sk|7+r@cW#_ zv?!B%-j5JW$DHEIT?M4MgV6 zU*tSEK4}Lh@K|tlIJ`*T;|Sd0#cdn8%KFj(rDqLALf3uy_;i~ephPeDtl|mIQH)MU z$7IP6JJ4G|ei;uT zVAKGW{t22;nGM~0PzDuxry-q>PvdpzitVN=42BP1Aua17JEjOVitE&rQ!~8kX+fIc zhbYOn4xUKF@Rl*}Z6v%4FV&l4dJfoJbaWA=9o#KLzw_La=N&LE!0*Pp&)Q(_I`pTj z|NQJcwJFX_pEd`qdei9TA`Wd!*;(XlOgnY`3v!1xU8!DPyMHulwEnm(WT^3LnYz4gFQ2_`cbDU~wy_>r z8m!ZHYWn5bXurAkfs1su33*S8aX~NJ;GH_Q-HedQX78XQ!tcC#(UxbyyS$$7D)}pG zD{Y1JXNe1$A(v0Lb>wY#F_B*=YpcMEN8>pfe{<`=j(vp&%Z1RAGQEUt-IEMyuEbF4 zbS$_-y8%YMS0_osZCK?2AT|6yjg~r*@4IGzylsNc$Z5l5O8vS$tj2?-(68a7piC*4 zpO5#cec%|ru1A6Ek7W%I;$FaifBu(#F;hC;9^d`())??P9)I<}`#*(A*NMo%nT`|& zABBmQ6s3mKdmC1N&Hs+E`u~lvUT-Q4p%OoLxz9CUVVN|%2v9Vt1S0YKFkI~*B4l;% zOW@*rf1hWA1AA_~H>{U}S#T=N)<*j;+uF=|=2>agw8L~eqKpi{CR{8|tFjDRB~U@q zZ9=qAy0(A}N7wMx)s-k~UgK_l=@v#eD4_eKx8C;m58BntYTJJIdy;P*g{vG&Ivl}L z@aA9lj^|Rqc+S;Mwo?M>RQ*=>-PLb|wIg=~OU1U7MimFXd&1=IpN#_}tZO}Ifv@Bv zAO(jstp8opbM2Xa^nzS~&8ZaD??Lyv9p;y5|@)OoQi) z_y`*5^Ev{DZv9z^O2&IKPRHnU0Oy$v>7ZN?N^7xm0xu92U1Um^-%LAzzN5qghlg&0 zvvcl8TU!S%FRf7D2u}!sx=ku*ot_NoG~6Fo;YX{mZmKm}VrOYt`!ZHNQM)8xI4blw zTCA{B^FAJPL4{B`x(#mhDKeK@Y9W0~v#)8;tqS_TMj7_m^O+w}`>G${| zLh>N2;Z3DWDX@6tx%-w|?h?*Cx@Qmn#~2ymwL18ETkv+V1TklSBzBip9Tg@Y1PeGV zlSkpO@Z@2%r0mr^_--AQ0iegX<*PCmUhC`^$x;k9$J~dn!Q+x$rB!hhq)TAFL%@)a zN<%RMz}FU`+10_IZEkI~rA6u5k$)9?zC&+r9aTJ@le&saZuor%J3oaSPrs>H^?iaP zEa@+JuJA%i9N>5K*!*pi!kW=%l*cTL2(43M(wGL83a5Z)LCwQ(rqt7Pa6;PQ5svhC zl_U?|+TI2^waT^OrFY?xH(NH>?Z`G^d`p2yS-z5KY~X2e!G*=dD-aQ6u(XgeUxQ2g z6vL>@S3jVU4q;!V6Znl63=z(K`c=YRDC-m@US8mw^%aCjrx+--x<~y6eT?l<;Zgcm z>83~-f!{wK#YhnMQrkM;DNILW)Gg1}{~WN$7Y*kpajzS^<jUVn zZ#xhVR-uZz?dSaRT*)Ex{pX=0%WS-O516jBBe6hR&aHO!eRl_PO2Im~(W^k1T&(T# ze4If5t3RDjRNpR-?J{bX%iJ**prN3o7bi;i~g0c%T zgAxf2G%U#bq>Gb_WJMXYB_x$XsylqR=ZdNw>;E(w0*f+(F>v zV6R>2X@lGh=Z%3)!{pZ1S`1T9-uq%(T3JsUT3DKI8xJdB->25o18_~2nEXh73rLB1hv|LU)O{jD+Jb2{D{13t&2i~$OJ6KNdf?p%Uk-#OSBebx=Sm{|#g zb}*iQ=)Sx1m(znbT!;OKm%N|@?4ENZ?3;AD7x!uTFM@HGR|L}jK4JQJpE>@>^Xbt} zTev-L54X3{fhm;gUS~ON;0kXic0ywpY&qpw<|<=WAW)G}@O0H#7X#rvSKTf(2t+yL z-ZW(fH?!+)i3!WNy}^9n;JKHPRjkg*Zlf;eV&~XPiHS~(#eCbzD#!f6<%eM zxcrL%U|jC|(fNCKzV4mYZaY-d%{m0)o>TX+xQf{kq7+=xVVqHKV@{R!7-^`_2q7p2 z`tMtiy> zc>Z-zB>m7MX&a@F*QeQ3;&91XhbjNzL)iT9Un$fbjCo~eULoq4e}6QA ze629`NthBN&!2_&&Dq6D+Wh2AzVw@A63H=}92s;fxm;Ul{(s=1eRRsMQoaE__RFgh&NsTm&+2z?KXKMBV)h~1>aebC9 zV-WDWX&8qxBxYCV=4T?(mhocj^#y;XmGw0G^!Vn;y8HPHhXOs=At`Yu{rjp@prmW^ zGOhx$bJMfxHqY4^2F1m4n6GV3ye=#v*prX<;>|_n0KeJ+ZRrkSPesR3J>!CSPRfS> znB59!n|V!K7sayNrbUyEAUGOdB)oi2d@Pc_Th}_uX1O$cn06U65iU`3RT^yTW8&Jj ztrG>=GEBZPQd&d0>Dv!0hyq6F$*YTVDWHn~d?!7kr3@-YZdaJ?P$Q`81ITIJ{|RwBB$?Y;c89ld(ihP%%x zEA&D8e(>-?Tie`hTMr+$?MDw|Y`HvhW&P{6>^6c6i&6B&Tc#LL&Pf%26#HptMCE^a zjxZ?JD)bA>D=47@cnSD&D?xBYqznwWVBYkceg0D7%n-&cC^ZN;XdqpPQ*n4PI*dU8 zG_{M{F?D{CE%~M>tFs?7#o=KBaye|#RAKIpVcTv*C z>3E3zfn55*NB=+e{w&znZoA9F=IZ-??e^O0T)i}GNf#X?KpNE zUnEYdQkB@1+$81r%2mEdm0gJwx&ShWLIMPc5Wt8d)L5V+>9k+7`@L7+w|So5c;|nu z@5sJ7`*P2<=Kr1VY{wjP%rVE9-TMhj@>p922TtA`?(TuV!(5g~F|=3F(*f`MD4`zX zIzB#cAAj<+?eFeqvV!ga&BFtrQMb`M*|oKQ+z#Oj&t7hWv$_vNKDM!W2fW|UR(%!x ztBd2v%sbnAIg;tlE&G=%^QVWq?RbB;og5sty{(sRWpx?le=T)$XJ)=Oq6O!+k)Q3H zhEKVhHaoz;{le^Iz6|Asr1p7f+b=}fcOqMzol-}~A$1hufKzE*zHxl8-FBXT9Dd`Z z!1)n#c429K>Y8-q?~yX&I?*AIkXJJ_0OwWvtAF!vy*VcEn#`NYfY)gL;J^0o z!#qm3vm?n!qUgun1vcFkCwBngr!Bv7E6l_Xj#w)c=7B$HW71*D4Ud9VmGL>mC=-uj zl*V_kG>^&$>;I5v;H3;%;cmyKlGsy}h=&x{Ci* z7>UA&Tb{fqONCOUOo2*fvA(_@0YN4vGk4`{31NF@dnaWocJl>09yQ25-UftvVatmF=FQ#5Q|I?gaWUC9d5 zN2n@gewc_cZw5stZB+D2$yO=G(gs;!L+EfjsqO9R4Zu);gwEhzxMcP+cIa0|J-^h} z?%YG5SV5?pjX+T=nbNVVP7GA83Mp(LbmcsvE0Vx&JLkMV`9(Pw9&8kJ;C2ABc=$5QS!-<@6~9FmaCiI`phKrm$Z0Vp^Z(<*a^$t>jx z6Kf-cK6v(a6aHGE*V;bo5emVd=5t8em&qhiH5xO%xs zhe@9DA57Xe^%n*M^|Mdf*GWgXZ7L3g(cJw@ar`(LW*qaB1jN65*bGf3%_vY!sdTCs zL7xhTo*niqWu3b&Wix!ze1u{6>+Q}@S&VRGQp$S7UH#s4eGKr=Tq;dHi#Dr1rm?T6 z$QvW8o$*5n0oGXHahFc+AV{7VezG+>D=`T4l&3H?3bZK7a2JqU?akeK318?Q8V^k; zeodfAsMgiElj2L&hI;E39*zB1m@{@zekME+-W1AB=UpW#MYfxhhxWT%3J71yL^64J zNtRprtKVyjmmMG&dX&LQkV9a;v%Zoxa)oJ5#hE%CGG@p-iyl1(U46#GwEibF=JZ)3qSD93~7v3Db0$$xl z$SwkveBh7|lWpqeGj7mr4-V{Dyiylw%kk6IXw8LVB8rAz5b%h>xR;E9*NYPsi>X}d zC+|5z85bTeCz}IDvr_;G&yWlz$=}IZKi7M7fYMF7Ev?qXe(f>@|KxE+62qLdb!)u& z`wjU?@>`gn$;zBtguV6KiKItQo@A2ObI(rtUJkpm{LG%`xm^Jk*V3bkl&h?6vG!q2~knc!^TkHQJu@>vL}#;3tAiZo+Zg%9Hd zWu>0rm8jw0XZX2FJ_juwX5uC1`w#HkoD&N6DX_TWqtg@?+70oi>j$ z>R4~b_kuf*k~k^grGtL@(jx~xy`Ykcg;z`>H@bu5;MKD>PF)ulDR26WH1L*d+@4EE z!4xM>49XkjtJ1k`BY$_YO*!SRE6RI2?d;?*JAR}OC!%(CcH6RJXaC?R;K1$m1h@NdKg ze)4gl+(p@Le|NXN zdiuD1<7;1UkG}P-DEHI!t^KVRZTHo4?9+C2yxUgiCcxc6JJ^1Kd=JgM_g?zL+WIQ_ z&$qcrCnUXV1^l0av+ZYXVG`MY3|hT7Y7;2((m9O^Of#YV$ZD4|*70_5aveN6aq7JT zmsj#uncoFm*4;5zZDR@i(I;PS(_W$cv38;i3yz&|bTR5@|K`uXnGASM=FMclYczl0 zU;SS~uH8twB}YYgqQkl(H8MCARq)2tz@I;u;>c~ZFydS3G(|fBvl9y>~B6NQH8f0p;IF-TAj|sjuwVk%7EJn6_Obov<$E+%9#XWkc%KqMo}&V zpu-YVZD^R)iIOQ?_~qN$$PfCPMy4tpHnl6!NrTN%g1iGacu^3^%9Dz%_*4;~4Kl!< zpW)}N>VrTv2qxoxvsSScf9sr!(GZ#zT=_>Rus#Bj2>=F11%tqXp8~T&lxM6NIbr7R z5Kzch*z&R}k0T617j7AUCNsdb14;>a)gG~gnKp0-{%U(owQ(sbx7(stb&KA+!fhKD zF3qz~LR7vfgQt@ub@>v03U9#VQ@H$uVsDGko^+_~`3h_3MSc*{$`9S_<^_1VaG0GB zp4E8DQ7SRqqt0_ zCg)wZq5U1hlkPTTW32`cgW^~5Zs3q+tYg(X{@5N~G#zK^kcj}5siE(iP8u*xDN*D> zT&k7)6#6?(?1!#KjU%*)UC+fztGSN?fz4H%x(}cPnrw-+pHi+i`I51GAUi#T(}H5U zVvXg^_%-=A0zUPQ5jNA7BUU9{I+o_7AM>H`(0kEv36@S0_>{I)(kw&%5hVk@;?`yh z$R%(1*$)B}Z6Ix?xZp@W07U$!|4_b4ZZ7bn3>9SK`rU7F>xp%aG-^Rp;^N9}ZXI}^4M zz-Lvy*V`cqz$wbUrMRNDIO|st#xprEaRz-oIKIgZSnlmXL93u z@Z{O?iJbL)`EtMg##cXS-}>Y^^m^HT>+2u21r+2JKZ}S0@7D|b6x!*@F=f;RX@1f! zsx6)U;P5Eto5jtCAES)$%#G2h@y|OuW~t0*xce$n_FJZO7x_k1mrp6N_tR(g$is<%4?lU_j#ZkW zI|v>{{zC_!w9&^Of7I4DH!}Xs%}IaI9sOILCy(b&CPa) z_z#?V#ML8=dGs(_b3mTT@8AJpgULv#H7GKNsMFsO75>eiCft#`obv& z_s9n{=Vq_z`65KWCOswjZ^2y4Swzi(hCjU%Y5K!lk&v--|E@3f~+pJpe4g7xn1PJ2jxPoF$RNJN+% zn`twvZ|96+2L0f|!A~ZqaHmqHBFF%V%`BuVG6^%jN4u`oPh0d^Wm*pgS=`y)3U0415weCj zhAZAoK*Rx!0apAuSorB4&-8gyc!U7TRsg88daek#A}Git#JUx`+Wfp7BG@<^?*vhO z0!Ql^F$6b-I_UtL8<2Tc8!FTnTwVDV#KK?Mzzm?ai-NO?M|5iCJ{9qPEAiEt){(+mvgTCrw>RgX%FJy zpZ>%%LTK=(qNc!WA4PaXsB=5CTRC%y9W?3WRX-CPfnLGYKkH0BLSk8^I9pD&#n2j| zCGitpTtLU9pINWK=2LodGC_C?=Fpsc41q}6_vxpo+@+%ulR9IAQ}PYUt618LAOA(J zbxi}tL-v$D5In0I8i&Yu2lh(JpOP<6@h^Rc9){<+OV^2L-G_-S`q4RgxkttA!|qIS zyStafh5v%1>FL?@+lveGr!3Fmo4@^Cm~<;x`&9tjz_L76kT#@jw`?nL`zcf!Ai}w; z_}d7Y3b_aSNBPv<_0@R<`B{{y(6I24mqs}3KMJh!Hdjm^-rI=3I8HsO$JuG^LVCWn zp9u}mtLA7Qe8P0Lj}seCQm7#NZE-(2C}xj{E6h%ysF-B(i8x&$geYo42Aug71Qk9n zPYaKP{xXRP+#WMj=+6!5#1|fwPR9`^IlRXLbr3<@ThmY5%-9vUn+|@3#Z^%2a)Cm$ zzw?T*@i;WSIFI5+*4}i!h*IN(yen;f4sCXEEti*h@#4&^7rTLDV7x#BQfODnaDvHx z;#lSC&?blb+w?2m4-ebH$zkfJf!`B3)Q~Qf;raTa9zwimZ`^2`qG(1}V zOWs;1n%x@RZ^5q>W$&1%9bxuoX~<6?8fPD6%roF#O6lD>$5@pzCkAo}pj$&s6 z71XMq_c2N1e)`Va^J)G}PPvWzcyFh@dj6z+>ubN!KKbTX+s@0UZFg%c_b`QbVUHMh z_jeE45z1*FLmg+uo65aAIkZj;EYc6%a<9AKoI_D`%YPlCagw7ZC5!%TAICKF3jf7Q z@3J6yu@f&@2vMGbzE)7o4RnRtt>*XcFG6RhZ4H{aL}&J_cqU=&*W_Uzx4-qt8)cF# zWPpEpipK<`pA-0&mvMgh_(j{=-bcZl4G)tJAKr!bq0`47KcY^v@T80Ot7lK2Q=752 z#Yu@TeeZW6|6gRAyRyjQ;v6(_nfnJGefX$-__eRMlfAv%*<@XxJblp~d#T~! zX?yzoRr~e-_Sf21zVch`w|?uZ@IZGPU9^WN_8z~qkGbe*UpPXBR_;<+-t_|Ly`${d z$!8zIg|w^E4*J5cyc5Se37qs<@uJ+7wd85NohXv;sju4cK>VvhZ$)d=rXejvru`8(rg%cXUjGD z)|PTtl&cH{gOrCgUI|DQCj8dJ)#9Ury|(lGqqaPKk-_SN_uh{J?=Aoti|{zGx!qrZ zT3nc)=Wd;~RROf_=IKR)UZ~;#D03DUrZH?|W3zqy$;WN?1V*&zt^@sDp@QKvczZ6% zXD*1NzHTGSMRck6V28L-uu?Y%LGZyd_4Zv0%r&4ZBs(OPK<|oDCID3EVMd)HW~G_I ztdvWYOx%RWpJ!K=90W~U%19|BrTi;CmZ>%r7VrvLsgrdS z2f}UK1k%9?hgT@@@+H=a@Ih|`VvWwts?POpoA^h*w0qzp zPM-deiE)yAF!3)(OyyOtvBt+ys3@RxhsOQmMH~MfIK21xK9g@{okwtKJiTLu-K4Y& z);Ou3@w)YoXX=BsovW|Z)3D0D`js^An{C`LK(ueGfY?u+l*~>42rs&&QEAmx+k9^v zcj_jXWR!lAG6xv&yy3~^?|bnS>96`@`k%Bx`l4svvC?wwe32K|E%|xd~uQWMl%aed0S1S@F&bz+rZrHldkfM2aBs) z_z{?a&0S$vfT5q~?RSn&Pz(_$Nq@|E=hk3XcU`T{>MuAlu5BiN_Hs1)qMvtLcEvUA z=_jogo1aXLk_K#9btfOk&_i)e8jnBNuHJcIo#O`PMR!6WoVq)rDTSl(zR_Je&{#{=;BR$I5BCwStq9mmp>d)ABeX(CVKCIX`FOFbWDR!OBY^x zCNJ}j3)?8X8wLJM;s5d^tDVzxO9$58Zvd(z!B^HDsECP7gvI%H|sQ#Q7Ah*-h>Hwich&i1)R~Ibv$X9kc7Sh8)==S&qPEF z%F)42o1Zw#{RCr|XKm-nCvETfqjt3OygmB(8}M3ULAy?boYOYm33LFw`};?k^g5?) zgvs4F(v-(Ht)o22_Ukf_bP39V3*I4*#J|S&;-Tqx(g?75#8AAs8zZs={<&xnI5O^% zpY3ByT33016JsZPuX5Y|l*d~pSK50kEA-c;oWXYjs$?n1gtn1h-8HCu8+nbq?C;(+ z@oM+Def)ek=l37OGrs!C3+RVF2cKA;pF-|D%BSrv=@U)@%X?qEc-6MI_kpdx>TwFc zQMq;X-TMO8)|P`8JGd*=-j(5wq{*3u_Q~Vt?H7OfAGiPZSAV^|eQ&MZBfhuv3zwhL z^n%m7tFtKY_nMz+_TCA1Eabw>z1>#a7Dw~ z9`<{cZ+VyPt8K~27ZUlUfJ6HD%iYs_sbKu#sEu75h7P^h(23+%`|^_G@M2n;HXmz$ z<8S>Oao$V@ybkkbGT=3u-}guU&0&y{r8^io@YFNI5>JIl2V&#di6R*CUdp$FP6>n# z=3#JjFvGJVVH&cE!e|G)l{V>z!OOv|z6a}sKq*d9kR5n<&k7BGwR(<)F*;yH$c2fP z5L-$_!Bz277S^q4Ck)=(PrljC4_{=}#@YV&-g__g^}-zo3{3!*<1;}R1;=`?0W;pvP*-|{wbPUDIf@ctr{WOEKX?&WLwidHT~QfhkSXP|=V$xd z?hdXBLQVo0MTx=A{prp2AD&qEs&K20zE5T5v0o)vcx5W5+@h$CsQ$E$qEBJWP>IG9EFiNIoo zf!PS+IXQ@TaX!=m|1y<#V(F)rGX&klu@6_9Sa01G20x&0ihlvhL=!MrpTY+*c$%+% z)n23v90iYIo&RWR;2zqRv_?;yDlXPA-+cztL*APHG=hIY6XDtz-TDr%zJI&+l`RAKJNisIVJeZD&&#?;@Od^5^UbKqz&^CyImp zRvt~{A~*40G#|+~mB+!;US_=#Hkh;_)_zvlk(}Yfp%W+U3MauC@p5^hc@Te$Fli`# z%Pg~SE$qNzUi=hDrTl7DXtUeK@+_A>>#Lx@xU`T-1t+0hxmI}?@i2H!T8{qa%F_w) zE~(cseL{iJi2!fmS6Q$KZlLx|dcv9P?Z4ZwC`1HHnZsoVExw)B| zbU~P(M3HqjoBiDF+1b`h`%B|9GqnX+UZ861_IoD^Ya*a{ku)d|$>#xqf6;P-qn7i^ zp6x$9D>^N@LDUA9wx{<6`2B6it^tj?0J4v}8u5EcnT6*X|8@_Kqg1ItNfX}7;`!?t zVVjvHE#I1Q2g-1%?tb5v+2j5(@DKH`13|?=vB5 zUZiu3otR!Ak6G}946t&iJ$v>npFHz?G|dL>p0}A<#z4|I8Q_I{#rL5*aP0Aqo$XyJ zN!y}yO#tsQ`16Q_mx_rW>$8qhb%F4I=!b^JX8-`&3eD3OX#?@D)h&+g??I+Sns~ko zh41oI(g35uLKEIN$PTt!`ij;FR24pg50O9!SyD*G+E_G0m&S!#!ho_2>w12q!DhmGT5z6G*ew(~F zZhi*RPbsPZS_{W|ch5*o)u*i^{0EutV0S0GT{ z?FZKbo@{~C;kLv2^V;a&pFY17F}OlT`Fop|L;ub&^Bc#8vfetTbs?bIZ9C zo-P)oFHeF;>ix+Rap)Ho#@Z&zzxN5)zMHEH?atlJb_ZqFHgM(NHhT8tStdT*EBTF& zp0uC;d%xVi`i+mFrOWm^e(<}(H}=7)inkXR`qcwJQMv$MafgWvb^qY7J$m}0edV`4 z1n=XNv6@A$-NVC_;X=usyBo;Fi*09X4`uln-gnjBxxd-wf&H6b|7LrDLNDA;A3cG0 zU!i=@=Mrd-+X}A}3{Jp_pZ)Eve0tD0P6p(2ne=tX9gXcOkMk&J(J}N1t-6a-yt;Vd zM6a}wz6bti;G5Eb6O3M@n6JU8%a9HNF>i zI&I4fGi`ZsKI7maZ6~c6*lMd@3JF*G|be242c(H@v2qSd%x^HXD_tas4u98Q9 z%mlz~fzo)xgaB^yC;?UB)Pb(x)!+8;!%MI z_aEk%fGfRzwnv6wUan|3)4778?+kg}#Ory)v9`9lhFxuU@7#s)-Ob$s&!4|+U;gr! z+oR{N+Uewan_apCzi|7btEvUJFw3kXWCv89Sg~xr4*xaa6w0kbxru{EDVqxT)fUF? zf^T1O@EOH{cnZnh8hrCq_^z)xys#Ep0nPqum5&vTW-Do1cu0-C1cO2ah)Q2x#qUr`2SB@X%X z;|zAn<2~u1O;>v+{iKk>g7M5nxWnu#ZWJp9ecR1JB4>yhl+3HPc;bsYN*jYxeZ!qW zi@~eTaI3VrDpA`JGdZ9jpwb4N_5AZR4;#m7P`o%XZ?WTFaHlnnb;CN@W7=8`8S+2~ zQxJ=wDHg1EG85-RLXGY`D!gd2`c;_$t0Hk^=-1R+rO!TCf|iN>w=GJUhycpFup||6 z&8733%Cqv--Tljh|Ik7pqnwIAgbrc-Z7`;ZSEU(Vg1=O5_#Hw=D9P`TZj|RJj39&Y zu5>prbkpPIIg}Mx#UpSQ9Q8~-{8U`Ms;^X^sdh5dmGCaWM%jUWRQlyZHxmH^P2t~< z2`ChGg*o}Aj}2wMq~@1Y*tjdtz-|gW z{gZx7q4VizvCmaA#vBy9AsVcU9fhYunm9#EoN>xH$B4 zTh!ZruYhc|&Z(<+1Xw3)Ca<+x@-OMfvCr~_tCUl>EeB1-zbHqcUjEhlL)w!v6s)uQ zhIc{;552(?eRtyInmEYT$x~&@GuJBbDnZswd^_=_l4U#ksWdN3t<`NT%31Kon4B_z zCzGJk673=^%WEs`Pj~6CMGm)$m#cR|)$1w?1sUC@Pkx0%Tj*UiP0W>M2e())v~`yNv%R zHm~-M+vz1r2;++|JFW!DgOTo|=!;Xz2Eq7JN9!Wqc>1y=hLyQ%UkwokG@47<7xk^Ndc7SVN7=CW%?0Te5rsZ zE%`WpD|6%?4C%V+60CB{1~P4 zLRf@P`G9hjuc(w?3GgdGi&$5drFAEJ_II|U@E;%SptkPLF9{aps)@xkzv}im7sySaOwKKwVv5K?d~V!V46 z`@4H>Z~Ij{*xPLzcki@W+SubD!69@kPn0iZTqC|{Q}NF+t@(wFIr2N(FmbVdslooC zzmrFRO&6>kO183m&)r*I1n4JZU91#N`;Ps^$rF#htgbG!`Dy99CY%xn8PnYWvkV__ zgdB%*r<0$r{F$Hox$H)IW4?1^?|CyB@S4o;{TKfA8VFRZ=|m0&JYwxocDBBn?|_}v zAp9J}eP$+2zu~FSqIyBWFfp=hp+D_^Z3>?qukQK+L!cE3bsk6WCH0eTKMZXB?l&nxCYt zNT$*e2A)5?us#Q;GFKegL6CQk0Vs;|F6{=MvhEU4=!xK?#ZQqhaWR$=Oc7|AN`k_b zRV@UPtY9#x+FqqZJL62a$*~H2b%~&PS6@ka;*i0}fkg#v2I0ZgA#Z7R5b%ge6gLJ$ zx5c{R=nS{k2`7~|g*V&P!K#!yEM-~djVT;;{O2ABClH8}`U)f_bdk2L{2cV$RvjhG zFzJMf=N&sVPU_L=L%~NH9EB%q@ghyt3PrYI`xIZMiCcccJ22{JAHGpC3wA9KB)^nv z{uW`Mz-ttbXDOfLHT)$W0dewr|IyOoAfEW>SuZtt@r?cCLn1)mHwignpo<}duW9?qlp6O z!LV#;CB1E0r5B8vDuebVUigf(mUIJM3^3%ei9Eniu=IHTN$>W>WRDe{^^}K5cQr=X5cbbX&JWDrdd$*4`;Mi; z1SS>Y-^d2=jBp4}9gF&%2eKizo{BdGMOV^2gMNZyprG!p-N?{Uc-)4qqGHxs`HK_V z(<+3%M~SI^a&}72l&R8Fe5T-V98JsFCkAi4aCcH2MlE{QW>y=*%>du@CBh&H%xhexhTUbWR66Yvh1i#7(& z_r`WtMLlxh=hF5LPTQ*kc-Z)`G7Wu%2TSkZKDPa{oKpQL?kU-0aNm3NG!VS5?Gy*tKgTsLOf}U zHp(P8R$0w3YsOySszV47r%tuKin z*Ap`+_M5o`&b~dpu-fKU?zV;X`)v;SYH96GCIH+mGD*JTs1$dP@twEFk3Mc6{`xPs zN5A!}?fFMvZ7&~vqisL`r0u@=s2yxS%MJO5dpjue-mBnFKa@c)6I@tpQ?pBLYJM>| zmgfCYDZWY{yb2BbSwp`xb%>(6_xz*Wg>Yw?_JE$D%C@z$-wsaQGC!NeBH5!mbj0b9 zWqz~JKqq(ctagFXCqP2vZ1VJ0dXJu5fLABTa_WDM}02K(<@4>sw) ze(th9gL$~Ok1R6mz`-sqFNGez__@!vFMaR#v=2UbTaswoueNe`!1B^U8wVHn@2ur+ zfCH5FuYLWalxtr#Zzl}D=X*cjzWMR9d`?gJ-+t>Za7?ys>V0-b-^1??3jF-SJav-y zA-_?#ciz6AiHLjm?}QdV`sO#=)ma@6a(BuUZRtgmek~!N^hC}UekWwzIqU?4H0Kup zYR3dL1Wd=Ik^W>nwo$$&0)MoRK-9FQyO>nu>taO5Qn&Tzldk|MPn6FqmpOqm;f~R8 zR`I65XmfcHtj7vwL&IK5DK7lnZ7$CAm<92atvzn#ySR4p@UQ&!H*$T88sLfj-w0arI0-1tfR!SDb6_7gw;dvk|?pX5=nK0G>XFJ8WE&tJZ1TU)QvdEHXy#Kj`a zWpi`0ZLV*$CEQ!v+wB*={N?tGzx>N>`w$_aEw_ya@3+Oxw-8?D1HZV*su{L$R5%mH zDEbb{)(eKE0v7>@zbI2^ssI50^hrcPRH};uyK&^1{20Q+Iz?beogLH%yis4@HCa6- ztyWYdzt{xFn9LR!nqheMcC?)m${*zp=>r=@7&IhHM!rYLm1)Y16QSzu1dnykL{Arn z^&?!tH3GK+33v%T>4pFu45c%Tb@WS94l0zE>iRVQeoQ3g!OT6M$mmWCV7Tynt1F6E zfqQzIAIlLuaDF{G+a_ig+Vbief{I&E>+GWwLm9*v7)o(s@Q_9rFr3t>2`4G)kCFhfMX5w6&8@-22|j|0fu>A@pKgJ$Znlp`MM@Lph5QmH?SG>(XsDCINb$QATQEyhG*%|NpaY-wyIxD{ zuhaJE_%GgB%3@7MCTiiz_?T+*qF?h29Sl#)$wV&o^_l)|82-jlkTa~)Pu=Yy9)Osq zv~I=6vFZOPA?Fvv*=OD}31xZ2Rbe(?SJPabOj=truqbSu1htrCut! z!ZvnA+e1dwG(x|VjrM<6L$CdAG}#EJc(KmnD)pqD^zthJPMFIFe3$iROFxR`1mzVU zlOM`=W+H_8KJP_)z&4ztCO)JsX(6TAfl~OqZNGTbW+yJ&y*qV7z5UIJ5KxJ~_aaPymlnKbLKmIx za}QVBS|(2>+X001jZa>-WfTN2ef!{ZAGDWym+c??`ir)Gf)YuA_F7?-Ph_zJ9_)mO z?J4nO=YUS=OaRl@^b=U%v0wTwU8le6$Gf=iMx47d%8HPJvxAvT%GkY#G~9;-^OhbCrrp^c0Q}clYUMRS-?dc$JI0FNb-#m zOKc}I#N+wdaa&edoE&RMd#`ewdDjK`rvXbUr9JbVRnVt ze(&U=tLw@Vx!(ii2)~~O%}rg@vX=V!Ny82D{p6FUZFZh|fn|@` z9Fxc1!C{o%U;UM@w3pAG)8D7EJ7E&O@dy9;9}k|L0KG#wp2PQ(t1fssDfi;#4m1L< zK~~C_A(Y7|e{E$sUsdsl?(X(pd-~{6_|z;s?UN@jb7{9<0-5Ih^lGX-dAZm81nb?q z_n?!5wt06wpChgA0Dm~8t)FjY`@aP^en=a_pq!?x19E8NnRW#KcZWsp*MX5pqtcvr zPB=+Oqo!~A=|l5y62jeGHC~QoqEf1MCy^AL`gv4?GQDKge&mrZ?@+KaJ0T*SUxM#H z{_p>X?bX&6{%_28YG@6x`^LN$^B@1eej$T^Tw272OK2Trf@KFIpY>{oQMge6tZifp zm(k*aN#3*AAhV=O9i>$(2PAs&GaTLeZyKQ;nelDf+2Gklvx*}J?aPSiR2pq7b zdNr7fr%Z4#NUBUmsiJPyv*RFDvTkwfuQCHZde{(d6PmAS#k9dGgJ)sJ;Z{(py%aih zJE-2YUF8*f3%7kI!H`YGO>@?OUwKLsz6^r9^g;clm2(CJ1#ua!G}I>pv{wv0K!>uH{&yZR{B~Wu+*kv?-BGkO}NCcj+kQTQ&Z|Kr? zAe^>xQUgdLsE7WrY5(|EdBWW3*>>(U;*@@<_0GUNOa@qgp)CcMxcrS) zrSa3)g#4xsX;TO+I~)`=2{BDp%8WJ`)9WEh!h`S&&!D_aVhnMj{0f8R>rdW&0 zi~iz0bu%6HaOa25g1le~F3CQy1x8?_Y~xsJ;*y8`p-(iJMq79>LgyQms@J*G8IHhW zU(We#1jyLb6+inr^cKOEx;q(=I+G?i5m&rBDV07MoKTc`>*kqHu-d=qYo^iPI@$Lu z!<}cQt?D{~Ks?u##UX;2bz4}RYYR*B+2Sov=`<{#0ejHyZ2IxJ=Rb*0X!^PJQh{;{ zy!nb7SCm}&CTox@ehVjsvnvG6#eCMy$=w`70-9=X%PO-1uknJw^Yha-O?lR1k~XX{ z3OkbS~8`M@&mA>F7PiBpxV@LK5{l6DuNt9_zY#r#s<#5g<#>>fezVzK$z zr3Q3uX+gwMX@pFpyH~9SAB6LHU0C;$?m(R0#q{F<9j`mR~_Q~4|f|uJoik#oS zfARE5JKulR78hpP%Eo3pyQWW3*XfBX+UOb_%Gba~ID<=e0y2C@9RKYLfC3qh}LEP$7(x*HgLt=3wuc8A~Kf*7Q zgrrJ81usR<(t%*Bpj(b-x}8umkD5F)Psg#qM`SO=bTxLK_ArM-=)?;!b7?ZP>n;#w zF4GllL%%A9(1%LCa+$EJr0M6xiAr8pj>+2z5bGoSeu?0d-~3f*DJV*a8i@lfrt)U!+Y}dyN;~X??{FZFYLJ*JeoL*9n}6b1VMt%g62D(LZiW zTWkpHBcCsbB%rIj& zh_LK&;C2GaJXdktU!H46*YG821^*@RE@FiF3-8{|u?WAwv9`M0UcK7R#M<8B8A|Rk zG>)vZwobo=FM$6o!tZV@1b653;RTd^SK43h><5OWwGG;GrhWZuUqklY&({VX-dk_) zzjME>%umrrytiRClcMr_nT9(fy?k4F?cngZJ%71N{^RZ5J>+EIauR>SPDV3N23=sK$J{0Gk2M zr={|rEpT)`86g3ICGnFm|M8D-s!blldorlJBdjJL-)q25yu?oyBcre=16E)?Jw9wl zdt2>je+S`U2j;*4ad}LgPO-HbrIKe&BCLn$ItekuAUxZ~XXX$(mSISK=4d6~wv{;$ zallax_ECDtOZ@-VIStvEjG zP5{CaNB<$sP_BbZ4RST;3$Frc+RX&~l)~iX3wcEVE2Y-CiNbZ|{V7w;o_zf4%25P6 z+`$XDkba_&GB|roL_xoliBb?kZ^q|2QXt4r+OT|u<_OM~LY-6?h+OdyWSkHv<@O?O z0@cq zFys+o5*WpMUGgNpstu%ZB2iA!r(v#yDVR^92)N>tQpwo7G{Td9Z(ihMS>nrqUixq~ z&6R5Dql8eQh0Yb)XuJ-t{(U!(xGw%M1Y(R?b)j72lAn2)fnk=FcsxhRhP;A5(uxoH zgLx0EEaf>lG2%Pe#7Vp%((vqcF1*%LQ}5+rDT#+W9?BUL#Ewj=-sY}RCu zlU9}?&v2rF7Ec}IDNfqcZ-E^F)vU8)2RsV9+r!O2{2k+@vO8H+Ydv3>3%B8#Rsq@b!_EiyQYcd3=3-K!M;J+FhInUSLOELOyUjv#aHoXI~phWw2xA=$R%2E zM_%?33kpAGoXXuI(rD<^pyC+fSKd&4*-pnhX$;K79C*pC>(aRX#5KNoOS^{a7dXOG zYXUhFVdPOVo)a7G67O%L6gyb~9O6uR6n6Wq zCODx$d6<1Qyn!HB-kltf?k{n>Gr%#@Bc$>M<$*(B+y2@=Y*)wIZIPyycRX00qI%bD z`|6bbY&o>&#bjGuUTZIQ4)Qr``+e=mkq#}7b_1rGR27bzNbz{VobsWx2)})MajqSM zO)uh<--zdp<@tQJbYpd%`1U>Ir_)nt)!i5~ZU6ML#&q&O1-FhXaKzBX-F1%=LB|Kj z?GA3`m&eau(moUPpX;`=w%%rFFL%%SHGuK!v&hd6H|uT_6@GWb_(iUDzu`YCpM-yc zGi41I&K8!urGKeSja}wW0FNt#cY*_HY;R{jd}im+9YZs17MZ%}<05w+%rDG>@44oM zt4CP3@_UKu%Eo%z-#f_t4xc=Ek)tAO8yk_?Y*gjSYk4j8_BhG$-hL)QCh4(jYb$Ac zX&OMXitm^*v$zmglp)Q5Pt_DVW@g&M$h5b0oQX$b4x2Zceb=~pTYk@TUdXq&8@%P=GNY6a~topnYDM@ z4DZuCXV>3pv-r<%zSEZPzS|b>yxo@8@3(mv`{c|V^;0#?P+3^)g~k*tbw&>uh2MJM z?h_rU7uNTZNq1-0EztHD)n|6>P- z9$0BI?*q=e>3J33DZks{8k1II4eyEPPo*(!83pAEANdSnmH$wN;kpyxkH#A0k)PhS z@*Z(90t$bHz2L`w5IojolI>J&ty>zB9>q9_s9)oZz1%rtgZVK+3O1StX`iMFgio>gmHjpZxUl zO{YIDvnp80*S-??g8w8A%5{rBFV?aj`{_MR(vwzY%|33%{v}h=I3eau^0tBSI+5Wd zg|vKn;&%35nk7TVFdyE6~eB$r+mu= z{axX6oXR~u2)$O{a*3F}E*ex&#l7{G_QaK2bR8?gGZ4~krkeDCzkw$&MsuQqWWjaN z%Aajxi-}rS&>UwRuibs80%dtMDLG8yP;h7_bX~_9%rpuv0=i@NEMu*c#nPzoxwSXv zy{V6W2Pk3gxVRwQ9*W6{+mp$sn+D)6es&TZQ|;r&5T{N zv5T`dF8{Y(Q0g|9r`vn?)}e*t!0k3*@jAD>+$Lt`+pCv*?fe=zpcO6T)Q*l$+wp}8 zJQf&3Z@^Q0zK;p=f%2!h!V_w;)MqLBwL6OTOk8m*a;%pL9Cyfzew!|pK2_sb#&%$} zO>LX>b>dkrujEw=4qA7NnOX4(#|;!!>6tt%$+*7Xp0p5-ltcdFBIVFVq1_?|0V2%Z zBPv_cw5zVA(3?Zr+W!G3zBqwxzP;Ywd*Kd%jFnWdy2xh zo681W8J-yAv%ZVKE#7`-KVuX5ns;~ClM|@lEg%O1|6vmu5;HH;or_ACs5#=N$k$`$xkUPOj+x7j5_8sO?}~ zEU|pY6322^wC6lSkEeWYVQ~>9eXs5B?ogHrwUcVc?G-rot^^Oj$O}LG_*quq*Vk9t z0*e0D)-L5x7S)m0I?hOME}T4h`jUDy`p`-Gu5IkG4`GpZrkvQhd$%pPQR_3T5HmK(*-!1{z zRbD%XD>N`7tg~rZ8K6_1$;9PSLtLc?8C?m3KCuq?FxSjjkKUL-Q{TPMC<7i2!{~V;#uAIOZ4nz|J55DqNNVQE>J4a;sRi8A(lV z7Um^{JS|^ABbP*p7a4f0t7WyK*y*XhEOB02^%%`+rvPvkf&mQy!E(~BmIF?08;jSA zxcuZLtF6>q+O)2M=(bPkX55>C=T~u0w!?fH#}&4^`C8%FPi^^BC{S>4TipUoUEyBg zAVLZmR*}^X5oU?6vL#JNaHGs>qr%U%aGNOL4}#F}T9jnF@K)ZulDB`AQH2E$)y{nf zPmJ%tVp~UvNSoJtt)z-;>9JOGrH2xBYQmwEP6bU2KT%qE_O?x1+J5x&zUrH^g828z zAM0JlK9HOu;3gyTBT8VmZ8}cu-*HuiM*fvvyqc)ebyM*Rzw(xtAx`hlhNUcQ_?jM= z^ezAJ3qQfnG7>(-v1Dz?j;Fp=og2Cyz3Y}v6E{EjRo@D2`0VdJjP}V20)A1*DYx_E z@JjG09d)H&6UdCm!=g>gPpCZ}80#)o-o{nJc)g9+o>$&=@@F#}M|2t@ZCRhdExbJY zKyfI`DzYZYaZys}T#9VW$vw3>(GO zCuwmc{}EjiW*Xm3A3iS5@spR%FU}$Ox^n2Y&Ve@%{nGv}TD*~48v>|?Df<JPP4wKJ#9C@@%i2w3&863(6y< zLcd4;@@TrD6N;{wtez*djBP5f4PJTg{kj|Bk8(=5y&-*w`q)>C_rW)SHGEV)W*T!M zj~c(=?>x&_<*fL0_yFl?9^5r%*q4)zyfYcixL`cD>8HQP$Peffz)}6!KB0_MieD+( zRhP&KmQ8+DUdapd&~;Y*!G)wK+~`r^)zYRrQvCW9uc@13vv+^k7f<}M01fQ!quj?L z48SH|nWsJ7b>I#VCl7M=9~)djW2pmhx|k*Y#e0o|#e=2U@EY^B@8UL&wCE@Cjt=%i zD>JjD(V57!hSNDK(_7S z#&YfmkZ+wp>rVLZ!fTvFTLSitwdE-8a;N)u*R#UEe{cldkGK1qE0IYbKizHf^E2)4 zoz+~NDqU~A^a~A#X+w_|9FqU{e(}Bb1K;!6_Hui_ee=V|;05`JKCi;RFhAX1QI2%8 zvAN#vug`~%syn!duz6=Aa@DJsFX^+>?asruX&;pC>G|Ac@YUb^D)pEP{O(9xTk|f2 zskXJV*Cyr`!z1PwYRBfu5%|BXJ6N`M4%)){Mqtb(h42X{1N?#sgx#LKc-3A!eV&~W zU;NyA^y3v|L3a~fv?=fdRb;1%@}6{e)Ian`|1HXU2~=;)cWUHhZ*~T}CiA=g;2#g89tmkMJO=;=nl3QPkaT9{8HbFt z1b&%)SK4m|8W~fRe3(E4Di~RmMf_@jsB{VmBqhu;uoSIeITV@lBNWRB!=Ni-4SZPP zF<rLFvB{Bauz=rWkmt`6?50(sGv zgNWPC92hfj+V(uHUnx)JUlu`zXXRB-8Jh7NTsNRiApM9Y2+)sZ2lM0hnwJ-Qq}Je{Dg*wk;Jb0FxlwS;c?> zAA5z6>pZ+UD7@H?P8ujwI?J5N2m}u6oO~Rl&4$0Cz1oJU@ah&jxBKO$S^ON}GJ!+G z+}nMhW;SV(trc(VjnyP-g-A~^~G9wR!ceBsV7!<@Bi}4 z;A*f{#!Z?^Ck_o4x`CJI?|XTT>J*R(OTDbY5QWr9*ZH6CyF=LipVS8x}b;>xkvcJl(jZC9}H_fuS=d=drL?Y>a} zDEI{4Rkz=_limeZrTNl)OjvSy<>a@3aoU!Kg655vlZTyUlyxS*HOdKnPJzoGA#!af3_L3LK6HJ$W zN}3+WXWA<8kuT*bM}!Yy5=I)^DQRp_;$)IoJdSLQk*0OL(ydbJj*U$C;?c_pPa&R9 z>4z7yPd~6+WrLJI#K#pQ7{$*#YDZleGo)wZ35zS;_SnQ1Mdppom}MJK7ss1yF<)HD z_U-IWaWafP;bnshD06;ZaDH)_K7i6kxUh8US5n$v$N}$24?8H^X=ouPk_TM{pV??^h?@S zKgaWv)06g%j~=(ZgX6XfPZVF$^EU5CbjGKzcA_jlf4<$0Pp_!wZYD!reRn62H2!M$ zpuKpx)gIitL%Yyd=k2T4@t4kQ4{1jHdS8>12^qJp&)dfOYTLNGfil0+wzhWK<=GK= zj3K)$ggNL{o<08<{B$QQaTpk3geq4Kavg?B3z6hm z?`Dx2!VDa!6u4w?RaXWq>KetJcL%#f<(UDgP>}Zlk{I=KM=rp!5C}Vov!q~(^;8x%-t1v8MOTA-#I0&jxDkwO3CDXx>x3HzWN@IBnkFFXx z!|awXt+UV0ZjR3A6W#?#SDP{+fHi$(orK9ZxFOPMYX#T1&OIeK$f^G`jK| zg(Qr%+QsKpp5P(XWI*PL-dQ-Y9v~TKXu`8{)6)t8TEg+KbY=6&4Ez=Olp7+g`upvSP3n)5=P@G6m|Mg(RIbp%Y#(>6?mf%+lH~gs1i*Dy5ePi zDcNU%Fu1{qZEHUeC&uExmz6|T$A@(imefZ-+rNkROb7h?XI9v*Jc^%EF0qtpJ?yX9 z{eWPmGH)LqDV)Tw$%Mh;&I)z%>GiZPtNhzWg$D&E^X?M{p?B~)>XUh|{5uXJR1Q`4 z(fvko5fCE0;V<1;Tib@$_}O=o+<+k;o&My>Z}RM(*rJZ|Gt7j+amW2&eET*IfGwZI zyd53S+kW-96+veK5u?kpJ1&A#>Kk6*Gw+>-D!%c2l?PUxu;R7nHCS<%d`1>L-hNM8 z=$1x!l0)(u{Z)QOFisi!`mHeI4;AjU4DIS~I8I*;D}Fol%iA`ossQ;2)QtjOJf)2( zfa4QeF*V7L-+1wp$xHL%sQ_JDldV(HkF;W3h0)|fI9Y~Q`tGEb%CIzRf7b}BeeD#% zG8Z8tK!!hqjPzBJLZ%n+Rd1|Ui7qCf>e`1;|SjsK39cCjfIUYJfWb7z zRWMcAa7=IqgD^WTT9!Dp`uQAc;3@v(4eip8ig6S${KSngY8(eLkxdy2%HGtSZQ#T^ zCtvF=IY@W5gG!Q-+b%oDKTX#_T$w6Vy z=V$q&n%S0ZBdT@{2Wz2=Q zAWP-W0AwgXZFzRMi<0S9`_#JKfBy^lQiUz*Jt`-M2Pm|QwD)+sv#|iZUbL562hc8H zBg@P$OttkpetvGIEu(>ak}-ZyaU z!b`2FD_7VCZr{JS@G`{3?830A+=+7xT<$oq)a|{KOh%j^9_DTj`R*0<9Gh_>aHjdi zlYD(;Z@=yBY|}?3+VaYBKAY%eh<8>N+GpOr3oP(cWkL9l{Mvg&vf~RJI-zRaJu>Fq z2_Acr5Dm*XO&xjUt_x*Odz=>tMuvr-T9-fh=lz3j?Fawq?`i+c(a*P^`^HL}n-3rZTvd-^f(jB<@6@l?Sv(jA zcdfW!!HIZLu~JZSRVa9Y$rsgZl6AXw7wnH1GEW&kTlPT~-$-u@?w}i!=|0oi|bQ9p_;ipO9Ss=jk*&rE!3q>z`Hz2|3UWoK z+FCKG@bv4XsXp#tT=9yYZAZiVgn+iwLE4hq_Zsv*7I$!h9sIgKj#Sfn>s7d~aIi6o zmo&yqc@Nf%qjvXZ7=hd4JT$$K6=b!w9iBV64ST=lH?`soV0{-G%Y z{MXMYLtNv<3}IC5CXUbe`Iac7JY&U!f4BW&lQ>~X< ziq6pg`k#J;$Ka?-y3SD)Ye!Iy6Ak?}x!4~ZyA-bB&+={gvRix|Kjo`6aX{aM*Gl*6 z>#HQCuc5riUr$czVkz@BzI0#X+!%e@Pu0yw5s)8GO}m0No_H#HZaWo}OiC)00#$Z+ z@pRS9GVNb(-L-$KbU9ww0FF1F0~Xaz{Mimp5?e1#1a4q(McVPecN1C%qo`op9`YV1 z0_@+`%XjYykdO3nB;ykNz)KnBPrAdifXj*h**RDEOzVVArCD;@uiLqYok!L)+oTDX z{;R!gqpNmsbX+?!fY8N?Gulj8Y|m+gevj0+3Yo3B-aan@qDXjo;oXhpz?!xqzF$C? zy!HaI^Grm0X{?vBxwY6a)}t4~=jYhO8K}<~0EoG(VPb9}II}*fKS)Ylp}lL$ADddt z=g!X0p=0>r{^1ejK!@O^O)uJTnIx)auns=$FU1eVrRC}^97V_EP5eA<6wHW+(q5rU z^7Qyg^61aB3-oJTX^uGBOjOBlfUnA}aZW40O?{!iEZR_4O;?PqYbMC!Th$1!FdeW6 zM;|L{3}@`2oa}Jo-MCh!WCPlrC#XwC)=5RzcBsDQ_yq0XPTJ5AxCNK_?DNoH?OPs+ z2~LK3h*;xhmm~RWEj#d$pYOI^WFQK!GMoe{er34I-62Z-;r@O*KG<)5BJbRzHqgIE zp4xRCce*$|%4aHP7FTlT#5HtBKxo;OcPHj{_fOjXfsnG z7{)PF6d5PD7RDe58X-)lJM`j{vA`A(&)ydR{}XobDyMTNsC{mh$}CuC$~=bWxHD2t zDKBwb|L)Fi$!O%|ZVO>h=25w~4!LIpInv3=u}S!XxWjs4UhaKLxgIaly>sX;pv$&| z%}u@!obW2wz!V3_m_Tq7AlQw&}5p zT#6{qTb!F^jB!`hX)b=WUMGwP)?1$E(@9}@zDV~nL*-~O*!!d7j*~0)DbqM;{t^L}6)_(e1Uuq8?&POP#dRxy@lDfhbB?@L+ik3o< zgRZNpPME-iapx&R&a(!t4C)G|Lw?p(;AA#38qd$2p2M(ly9F>u1RO-tuGNNd`{&bl z!)<8XX*cR+S!p9}+NTEKG{5a@y(nLJlE?s_&hAH~52|WVsds5YPff>ZZ^tU9@NF70 zGk$2L%66L?kdY7R_)GiPz5{IHS~~OTjsmx>1uU|%ZoZ{-!Zp@kV_mCUpZJ+BbuHNX zM3!d`y+p@}fcd%k=7o9@CTN?qfp`Sh3MJayci;fd0GvVG;;fcGRdirT8`Mjl{k_mv zFsHo?$2!nhPVcMT*dD@Bv^cyE{uRsm*(HW};>!AAqv#{yYBMpQ!XLU+p->4jPQ?u! z`^@f)+BMLRJcK5BMgY_f`CFcK@xAdq=-@Ayi>(+hfa8S~OS6(XgzWRBod}0crRG#gHT2Yiy z8gfROIDKN+yv!iNFLBLB_sCGL6OXw&U~W!G!e4wkQQ>5OWloMWhLHCH{7Q7GEIHPQ zvnUiQE~IhNKmalxFivRtaWUbE!e?E;V~rW;uhX;OY%KR0)c3gEl_0*sy;%Tbec?eK zg`&-vCcG++mMIO$4|O{}sIZtOhOn9W8O93R3xAB4EauZ-l%L5RytDg&@-)Jg^TsG- zPISwk-NNi-K(_P~XPG?Z*^bY%lb3Dl)hinbzNR2~l^e~y7;qd4n^K`WJI*~6J9~R5 zQ*JGH$H1TjTaT0v{;s4qXzcp3tuDKhVJw%j?V{4irlL&)O0E&Iv`k zta&@p;&Bdlh}v$-L(&+TWa7bmBhOCP(IPL=oSvC&t1By!2i*l=8+%OQ?%mDwSKFfK zq3#(`VRiz*IMRhT_1n(k)!hi<(l3}S%%R9H&bO7-W&E$(^1^Jpx;TaYTU(hMZ|f`Y zOYkpFo!FEoJ-ols-h2098^1blt7|m@;nz2u2-w>3LcxQ!yLZsGw{~g1i*|HyKrOB_ z5h5&0OWrTyrx&3uke-QR{6l*nIkX9{>CeMoA!@pxBQcdNgaT)jteQ-Xas0p*au@4Bz)K zx`EjVkM3`aEAw_WJOWhQHCU*WR2~jADNt^ovW3e5Q(?jv&mum0zTZCHMi6-SyW0D^ zKhyqie{Q#J{_yW=Kl-K5wfDdD#r6k&;C@?eXKn4R2kj?+@U8Z{Kflo)&R@6Z+h>iT zBA+n%eZS-V_Rs(DTkW6vV682VowujEm+juWciQIDUu)Ap`bXNo{(IkPpIe@2+xutj z?0Ohnhx*n{{|=N0ok%4<9jJ2?ypsUKL_kdp$YdCZ!9f%)thmw0WE?0|_-i|vt5h&( ztPHicpY=~WjvCB%8QLjGs=={euxK0mDEtd|SJ=uOAz@5Gy9SXM(i=v^)YCBY&g6gs zwNbE@bqP3e+f+U8;7B2Ze8?|Zr$K$U&RF14NOB-ap131yNC)JR-4diRekDa7g&b*RlZgK;b~s=kM)-){y{lE zh5G^L@$lW(o4AA1D7PO&``sA*jX!$f2k^?Tdk^oUc$oB0v%>1zgX}Y-c!t{v^ICqD zu6S;}=XX?vZf+G-W{5EIC*Sqg|M4F#5!!Ps`CSWYMNDhtY z&@G&vP4?`&m+z_ErXB#JvXGm^d6(Z>M-zqKD7xq?)I}M^d+k>WtJ1qls}lhpEfV$` zXXV!_wVpv$h^C&Fg}*$=RcDU?2vc}I@x+lUcy7Zdm~tIQ-~*JAqXGB}%fj+%;>&-` zTe$W2YXH_+rCkL;{^ss6@nd;aU&>E??7RF>FBL1t9OHRLTf7Pr(Rr38q7dw-^>R!g ztERPzdxervywG~n0_5#wtSUf`Un*J(*YYfHKCj6}S2>*+A#dTQ-ZN7(;Sm?WV!7hV zV-^SdJJ`L%J9L{ixVr`~PMRF=@3-km>bks~)m<;Fbjxs7b18FaX&yxm#gca~1l&5h z3hty8>*scFS0ioLtkUBz{>1r#lRhYOdnZ?I@7UYOTl?H+KcFsGIfv}_U{@nk@3Ui+ zLX=G6k4-NCpOjqfVqJnjOR*r|te-S0o$!>(LbqDOv3>(xS~E$Kk*N2@;`f!AusYEt z&y?5piGn@>p})pw^&c#F*4w9L8s<2wT%vO51Tw@C8kep@|CUP{P(<2+|6-+?QN@gh zpOF;J(l;%aF|3bcmfz{maWi)4FVb3IB)xY~NZ*>81aQZN<$1)TXjymol5{5sBGv~l zD(X?Jd6!O|6w9PO{l;T7St({b&yEAz0IS>MDduaPFHR5XXGdu(cMEvg-@@jDcC^3S zPTe6uoKw%ML+iq-LTXzsOgrJO;y>N|?4V_OIi)+4RO0ml8HT+(gz8gI~# ze8->sB1Z{$CVpa6RU>CYgFCKf&pI?aEiKLOHLLb0+MO^!$cX%8eo#Yd#I|qmPV$sFfNn53_dy%5M zj_jYVzR%Bj|Ikz}fV@Ppw;i55e%5wgZRINw(x5y{^XlcR@JYXJbc_sU_#w)>yLT2B zX4=8QKKaZ5&skeG8ho zMfxmHcPgBMmwdqlz7RPC7$QRfn{=A?f`2KSh#%XG~pZ~A_r}npg`D<-)WxDxu^+kD7Ju`n+yCZ&`+sbI>2G|wee&qzwtuqHKKBEkX}|k- zey%CL^+`~2pqk4P_Y}6%#B`^d}!sq({bFK92u7Ng!9X7N3gS!MWY64Ss z&?yrn5BVAHyN|+U;nqQyx>FX78|%QFFqL{n1e2MEIMpqj_~gGX^XqLJ1{nN#S84Bk#;wKakGPHNAZEdq-SMMe!9ls^ z>oajoV|i6(O%RCBf}{7oGnI-d~U#KUcQ8sqgcLl4x~_%(rr zUwEp$2VN4mzU(ZVpfWaB^4Yhk5T%u_6IM~vX8mL$g$}F9)hkJMWmE*gh+UucaoUr*pw^c z7n#Vugqh{Ykdp`Slsjunf}gJosHE3+eXW@r{OQwnu(R9lf~U=m^>%)A7#NO^T-kN9WvY!)M|V~not)(JW8tTZOZkSl z+q$KntU~8o^;c02JXbAm^7w`d(c#H?J2*obqb}d|`S;qLJ9pZ%XS?7G`~c^y7qc!c zwe43sIew6@0!-7sDuI}e6X{hePBPBx$BXiVh&N6e09vds64_*qNpU7^=$a^5wN%lQ z9+lOIE`4ZCAY9#;Ub+wMTX;HFwR?CZakRakSa-*o?2rq+*cYm7-MkDi`J{YY$`I9u zjb(1W77t9FDLefNKb6;vGl?Z^H!!G-XClY|Jh~`UvVeWQ^0WMs{R(eh5wiqI-ynG7T!cV$=~YjSbsrEw=Ue#P$^x;bpi>-XB7w?7N; z6VS_PbN8paG}BLMJ12*{NbvO7BM7c~6GqwNW0UkBaaODPWMD<$2PoFGB`MTTE+bu9 zS&3Y>>{kJZ04r)QpFL}jpFR(Mg==nh5v&Ok@Z-4MkTk!}3I8erLLSu1xxh6fpt#Xf( zo6?TFUMmj5GoTsi^UwU$PrsQAcunTbWWZ}QKlX?J?F{-cdCCy^9hkI)9QNZAo57c- z{sz=wEYoz*VSv})T>3M4R{X9=bSu;D?yflGsUUwV3@^ut2nO-PqYJ26krY-LG4DN& zj9UgG0M?^wQG%%F7yVS->cczj{i83pzw(b}+Gl_0v+e$qpKky0fBp~J!=L@3ysX{q6S42kUJCMy?55z#}enci2nV9$@Dk#}Ie0 zzMGzU+)fvq4)6No5oC#r3}!=o8E}+D27oABJWDYvhE;y1f%6xtDjit{HvaM)(l}r{ z_|1@~+Y$o^&>+{oXWgcOafg~#*gejoc z`NR^sZ4H(G=PzHi?XB&$zkk4hi}Igsgte03N}K18P2&KofZ^G^2pZHq=YNGq3mj>$ z0R_V&CU}=F;x3HVs=RGcbRk{qcEY3-=z%T>lol$Tcs2IWmu|(;iuc5eEnzC&{ci{} zP4YAkV30P2B{=NigI~obT@_Gn|8N-QGqlG`!F&sLY0Z3ireBQGLE{0p$}f7XJo_S`b31##xYbWixdm2!Qhi8~W-OOuWy>%^qkft2oT@&RoniQ8 zWe$P8>V}YyQ0xkw^|SuckytR_Q^q(~^%Sr#DO=%qpK|@IpnTB@1h+wp3U?~FIV_&0b>W0;#VJRWED4+ zMBxsO#;2i+Ink2v-QB~S7k1~^-rin2Iyem9KL?&;Ke{erP;M^A+#%v?r-L%mpvL?v zPojq=CWFV|lr+I_Vv;_2(Ej?DXZncaRW}~9p!CRX8Got2e|>Vr+~m6!TJ09Ew2f`2 zu}sr-<5(iRHH5PoC@@-+hLn(>3WUXGXIDjkUL2Kk%)!_4>r2U)@+=Uk|@JhqrBS@3uMMd;a7_d-nWQd$n`W_70qUp%0Bs z=1U2``5RxQo(;af(C*&7*Ou4TOO_*#&9~oe`=|7JdCB!Lu?Q}vu9x=$#5%5{Npd2e|LQkCjsXzbb0>Rg1;p)GW0Zss9o1rxCpq*z4{;nQ5;CY8b z?hwGORe*GBYVSi4y2Q0e@5Xxjs5eZ77o7~gLp>tkh!ewj##Ythmp|O5^IhT1_oAc9 z&**yUpO*qD#%K38W_jC272iuAE4(84+so4UODj});Iz_I%qZ=~B}|y(r`vYKKlGS3 zuJ)_8zU^mShdRVvco=Kw>&QR)0MM#dTXM=(nmdVFMZ1xn+l{|^1z zHjD5drJza&n3R*;1OjV3cclbg+k>YxBp*v2M6(Yoc>DCC(7KFn#;kHFS7?QZD#@zoTYBbbU5b=rfaRTpvPq=ccvRm<7ZG?xAw>tq8vU4t) zx;r`IWP{t^sX!(fG$X!C4#oSbzqp$zIJCa_39~RcabbP}w~QcdUvrF9*^x$t$9R35 z@Mwd4dWte!jayn?p&nH^=~X2}tXsAdE^bLqUxk;-=hCNxcWE1V(PW&QmOj%L%>&ph z&$GC$Xzm@H04L*zaG?M#F1tDh4s0agy`oI>h&%Nu{_BNqZV6uAyqgtBSKk+AP~udi zC`)Bo8Ni7o&+$(Qo9!jsuJ8e`<@rSlCvSyO97rbsle(w~x-yS5{D0i97N`(1M)_3% z+fv2NofwjJftVy(W0NypV|v`~sKxn5Tc{#h<^08{GJ5 zd?-%@X8e^4L-$nIvXpOnUL6SYv7ZU6<>ozk4dbtI#oHCMLAb{Tj`p{x$3>f6TqCW0 zk-m4LB3Kyn_=!6<_3wSNCI+ZKo+^{_L2)RkPU4x=coXoM>oF$>$J*&h)xmyz0sYCJ zJQ6}KDESxE|2jO(-6GQe$yt@lIT0YupMh8T#O0WD?soUFwvXbf+-`ne1n7j; zE;5mm30~mojw5&4jM)z2g}i2`ooMrmC6{e?@31|2@d}0hq%Ba!40ygoiI#Oo>XF1!;9IqKK{$ydR@M{)MrHE_8jV0(M7-MzEX z?yj%oet@aj`uwWL560nz@{_~ki?+43pFZqvk;RQWnM9B$*>7IH+5u}$WQnI*#IeqM zd%NvuZ!ffO%b%Z}W+KreN={(9AoSw-%jRchi}q}%q8WEm^*cBI-+%Tmz<1tE2D}dQ zW-{P4n&0gOf)K2X!JiB^SZFx}T})Mm&U0Y?nhZ49QnDR1ctZXvelmm%Ty*T}5x$q7 zCV9u@`ylKM{uYsUpSP`p%ivCA^ZIR;Ana|EK@jV#UBRWVwHj}0_cz+RM_+C~`>PA> z3qSI?_Tb=`+JE!-VcWRB-rjzDqrJWJi|x<;>A%(f!8f+r_WXP8ODiwhKm129p1T|E zn;$)HAAR(3yBeQuU$}eGKK^jGt$%>h|Bb)g{`TIFw$07ywzj#{)?WSn_T?AvwYv{i zGS~#C*cu?qU50^y-^`R_3+@_-jS`4)6#N*NeYKBuwE7N0)dtoxhQJ!oN?=O4z@T50 zf0)$Gv#dfaOatS&$T(D?>B4x?(i&b zh0a;6D^5HeY-R^RJ`*VjCzlL(3ZMDTE&d7#o)`3dtL+n5<2SfRaOiJY0}MAbE({evX>*RtmrO&JpdCv(%r+e8~yFim0o+3u*%5qr_C*o4tLpaf7c_C61V5< zn>Er~TGZ#JTwx_ZSbX!DunGqw8E-Ttn#WOmfD9FQ!vh_JQmiR(SeET+9PnDSWc+G} z@Tjy4a2e(kYeM_4ikp47zQ}UfmX{V2CO>jATqQPV=@Cd3{2lk?V8S|@6zqWqI%FI%BJJP#g&(T!BY^BJAUL%)+eh_))RM*OC&S} z!~|F5s&S%V0eqqtQFRP+r$<{f2Nj|GTuzJKm8N&G1!EO6FLNK&<@$~Vm5C%u4Lz#2+U1eM( z8m^JY`we;R*fCn&d% zotCMxYPrJhgnRlLrg$^5PRiD&;;Z!M7zy!&-!e)z5qGtn+qO4MzMEBD^B~M@tec8r zCeeL2YjKN>59w4a)4u~Jv=JN>-p)@B+S$=wc*E4}Lhv**w@~+GoS&MTV5WZ6Uh%5B zkiR<m?SU&w)F4Dp2(J)ODL%@y-nLP|hH|FuD`f#hTrHFC}z$fD>FO$J5k`3izH& z3CU-1b(Z?WtGveq*p5%H=x5UCRWANJP}ZSrcW1hz_5j*D2GWz;@lWt~ zV!@qIkDqO$)Sr_3b#^=*9QnD?$n9 zyGtBv(yy@fHGwyi0k6ZnnGAT1=6C*!eW6~4uA_I$)XSe;m$Blxf z#mB*>#<3b0%sw;IypNl2c@QU&!q_UO6o)BBY%wWMuf(zJfg#6K8a-v&J&_M<;lOSu zmD$UvGSiA5JfW>-GT;~6&;CkH2HZRNrS^Bfwb?cwuH~YU)$Omguk5b0`#<#K?GOEP zpKFWT-)R5v*U#IR{s&)b_mBtqQ8^lYpbWo1^^dSis%^ZA|u z%z%I(=|xu=sHvybE9xCg>RZ(n!oWJzbJUK82!BN~cEU_#@*BK$bK70UIvb}*BAF2D zCZ5ShZ-ZOEQQUgD1w)TLM2@p^G_KL(HTp~N5T+f%aEvCAc=WzoUPC-Q^W-Ns@70dg zSEQ$+p&lpng{^|k>&6(~pRuGfPJFvx{Ciy7{B;}_zALQ1_r4R_>VAg%N8Czt<6pM- zyBojcX+1`;ROvc`n|KWIOdp!UJ;0_-z$k7x%dcKO)qJ;%{_!5tC$GWi>hC??O?YyQ zfkKAl`W3xMGWwP6uqTIjj@q0*w4`Poi1Etu`9kF&Clo3@;?DimH!AIGp%*0d<+){e%{YB^bTilpvCkLL@w_eI%HCZ>00_+O9iznnt>dH4?xS$_7 zi8nD#8faQfjg5;3cr7qX`*f4^e-&X@$h{|E-^l^2@5+tt^po{E@n|~%9DQ#-WqJ9Z zpB1zo%90*e5HEi1!(9aXDD#Ju=dLI36)+!_dGqx$K`&ihK=C%MZK&+7xwuBQMzLS; z9*%{%c6xH&_79HJug$}LIltgVe@<+i!N*SH_u|EN+uh%9E692e-+4C^1arjmQ;!et zu7z&=#GyTEc6z)W?t9GRR4$NDNlNp=Cat*d>*C}%7b|-VOL{Tg-G}$!RkPK8j4k5M zyHi{|@@R*bO#jqh`Pm#NePh0JV=sO)8St9S5B%gG%OKFVC_>w;_1lGN2fUJB)mI zhS=%&C7kO$glo)0!NZLBH{Tk>!ZilJVyyPviZF!bRd>B-vS9EZaxa-GWf3kMmJKX{ z!9Sj|Gnrbg$U1;s!xV2O1}uN=!Df5!=oi~x{nf?xg&+QGyMOSH+TZ)uM%#F>k`BK4 zh3{(r@<00{?RR~!&_4dw<2HWzt@ca5cGbT3cYk;LvG2a$e&PonwzsFZ+t2)kpK8Cd zbH9DxkAA6beCwy%Uw`sFZDDD=t;1k8xBp@Lg{N<|&ATfZfJQhHR^8YrIll8JP94O% zsXE0Gn60{K)x_=Kqko~Oo@VP`^6s`283&0>0MKr6%cyZHL~C>Y9yk^9N?;jQ%2jj; zli7z^D|8J5)2L1u+s3!@D}Q0hz?U}-kpd`|f%15Nuf2Nq2qAO79q#S$+-kco9=C1m z>da-kzsf*ydXRz5?Uvd8pZW}SV?c^Kb*s7vS1!l%=|l%`M+k@@;9US%1%CuwZ>7yn z0S2*YCjv4VFh80Q@LX7*5Xl_{2n;0zBluxE?q(T?9Ykhlz#HXC|7i}&u68Y4bs2_p2`yN_M1o%lMu+qj)_;+LNRej&gy;&WKj z8~Xd=&+q3eBK8tLNtDq(ITlz)$f{`TW@* z3ftMw8tn1 zly83F*-2FBv8mvQl1`t6-LdqH@pM4 z=ZW3wn~7UsvhIT5r0m@M@OedevO5rJhlZ)a;3aloV3uVY`73B_X( zo;?#hr(NOEODpTVUq&hMvw*X6i@|}H_BoN`q=pj)wt-uHSJu~p>vI$b<%1J1PMe&A zw|k*t(TFg(%IA6iGw~^I1(jzmh9&$0B?(Gktn^65b;b&nA)Ji0lev97Uso7od|>>! zxHx4jS!@^0Nft9pWs^46e&869wo@e;433P&#OdRTb=iqPG^ z)De0VKGI!CJBeGeoG`me>?b8-D5qez@AdZ@^Q}+6m^5){wDfJ`Ssz^bd!!?GWnev; zsuE~@%!9-!vzw}uG$0OD;>9aDLSJ!9`{}<_fVA5BLYGH^grOCF08DsXF_l$7ky8(LwO8wy^s)HzfDqzlWvE=a86(FsMVc~jVR{I=^jN=rkf`H zneWJ9&$su%4a&83A@7y7_1uG^pD;XmwcCzpBR`AiMWLIU8}0bwI$tl?J*dwG5-mtw zTUluHvy<)q+i$fkl>h0ev3BqNCT%*_zV)p~gfF($g}Ju2yZ~Hl`BdS_-fkxN{Bp?S z=R0j@=b+6^%A+nDpf)dimG@4A7mp5jp|d4&VYV~v&gXxu{owEUXJLXT?HB*#|D_!~{5RWM?6e2H^CAk@6}y7;9zKw7qSNK2$fR{H^Eh_~w1{>^)3(J^TCMF_^;tjk$R*TnB&H z`0|v-q%WhDU}`|U^P8tmQzVRbNFM3OgEdCt4`%QaKizygob@`?p~vfwQQh+RHuGsu z;|!q21eS6P5B_iuuSwl;P;^sFE-uc(Qzx<-W!aO!^7g~~ZEJ78?HwFcJxSu2 zRA`4^(w|jSt$U|~WXq3nbPJFDTH!p~&?(C-#VPou1>&OM?ZIXafu?NTik+!$Q_jJ_I{O{gPpyqmpqU1P7$D^9BVS} z$WICh#q(SZzRIoYZo{6O_6P*&r{>!E(HZ_TZB8Nm>MT3EKoa%ZhbK?vxCH8AJJ>(S z1TbibGJnzhwAfj`B;cip?j*RlKoQMKA@nsi)eaAKQSJ@`iM)Mj^Fdo$-GqiN+Ty}= zyW_=Y;u&SdIMRTtvxg@~?P_YholLBxJyn`36S1Y?+1+`l5Z211`6V9|kDBZ;D)=Ce zEP#M(6~I0jP-9ma@vOob9zy}=8E+@T$Z_+x}xQO7` zA32O?0W2*$As~;h{v@oSE7MX&V5T0`m*R+DJWX#}+T7e+L6&YSjd_DF+`{X)=y5=4 z#gtK+DMO_;{b1;GG0C4ez-j$MbF_6}Ab)v*XUR>csmTmKE66x*UnMUmBE;Jj@l^cJ z>F?(!hwVybpL$-Ods(1o%2oEAys~}I@VnVHU>&dgB1h^%y`euZu1r6$?SSR<_%L(? z^GjVKU-9$^kvju~VQFnT+s`L}Z+haQ&7$b~HH~Xvp=I0o#9Z4yIHzAZ0p+CTRU=B` z9r~3HwR|d<9Y;9j&C2`Imw3s9D75S6M}<=yq>V5cyQ$CG(tLY(|4z=ri@${#zwT6b z2b=-EtNTx%ZAUqtAG>UO#5;mE9DgVVnnFxoTWYJzOZkTX;npkacik3OSKBdt(z^l{ zoX7yc3FM?Tl>O5qzru3bUT)F<y!4~U;IqlSYHh<^HS0AiJ7*$^|DPZEVli_ z)Aq@u7un`NGj`S<++ELIBu<3x!DC(lw{@6@2UG1fHZu?1UuA~_khd2vciO-4@BRnv z73ID$-?@#D!D3`Y0#*u!j7o)89?}(C+`>DAD};1o9b|wq zw+MTr2|UzWrl>&W01}1E=P=+{vbZr{w*+~6@c#aBCLx4x7RKQDB+pivUvMQLCd7SX z%(HM-gTvrE)Xit2^Qya!SYVUS@X*ij`iWoMF~U>tvS57yCyYOnJ&D}o8l&>_&y^3; z=N-I=&)~=Wz=QP{Zt-)|<|YBB2&P9nFWSNGF8E~tW`I06JZL9=fA{i`!Sn=yjKP>P zCy2kYIM?2~f46<`!F%og-Hmp({}RSL*1rDD58F4t`ANG%cw1cFY_sccwduvpocVH# zo9TP8!rGsGhF%{)&NHC^X|+rz6_m(PxYyXW}sqXT`FwX1cBQl$3p;yyF-J%0DaZ>$LmOgM;qM1;ADVjj-|hBw`1VR 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�DDf32(i(jV@9hdMzO7+cp?t1uQ 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

      5+Ii{IguY`fm9|?zX)$S-F#xSJGyAq|Y|J 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

      O@a)ZtB~Ka0IWU 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

      OfEkD=ws1dwY!FaIwxf)uf9QHTDCC>T1L=B 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 YN=WCe=ny3#B7F38UOcJMvVZe`0Nh_RSO5S3 literal 0 HcmV?d00001 diff --git a/doc/1.5.5/gug/_images/recording-storage-connection-config-option1-recommended.png b/doc/1.5.5/gug/_images/recording-storage-connection-config-option1-recommended.png new file mode 100644 index 0000000000000000000000000000000000000000..8ed2fb6cd6de5ee24aa7733b955dde10ce04ebc8 GIT binary patch literal 17344 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 literal 0 HcmV?d00001 diff --git a/doc/1.5.5/gug/_images/session-filter-example-1.png b/doc/1.5.5/gug/_images/session-filter-example-1.png new file mode 100644 index 0000000000000000000000000000000000000000..a72bbb6ca1ecbb4a11133855b90583b3e4b90e3a GIT binary patch literal 3038 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 literal 0 HcmV?d00001 diff --git a/doc/1.5.5/gug/_images/totp-auth-factor-1.png b/doc/1.5.5/gug/_images/totp-auth-factor-1.png new file mode 100644 index 0000000000000000000000000000000000000000..3a82976a5c9b5d03522f6dafa7e678b4054e815f GIT binary patch literal 12418 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 Uc{>XJw*X2>UQMn<#?1eJ0TVRJssI20 literal 0 HcmV?d00001 diff --git a/doc/1.5.5/gug/_images/totp-auth-factor-2.png b/doc/1.5.5/gug/_images/totp-auth-factor-2.png new file mode 100644 index 0000000000000000000000000000000000000000..c2a649f873f410566006fbc2636ea9c9be64775d GIT binary patch literal 14088 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 B2^jzY literal 0 HcmV?d00001 diff --git a/doc/1.5.5/gug/_images/totp-enroll.png b/doc/1.5.5/gug/_images/totp-enroll.png new file mode 100644 index 0000000000000000000000000000000000000000..97474b6a7389cbc68af20d8ec9ce3eab56eb6a03 GIT binary patch literal 33722 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 z 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 Se*j+}B9!FS<%(slh5R2rjlypL literal 0 HcmV?d00001 diff --git a/doc/1.5.5/gug/_images/touchpad.png b/doc/1.5.5/gug/_images/touchpad.png new file mode 100644 index 0000000000000000000000000000000000000000..fa9df427c6765bcd3a655cf1f3f85ecf8a081109 GIT binary patch literal 16504 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 z≶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 >S%r%SEnkl4>3`5?o6qb}fFUXDbcc~URc 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 literal 0 HcmV?d00001 diff --git a/doc/1.5.5/gug/_images/vault-ksm-001b-create-shared-folder.png b/doc/1.5.5/gug/_images/vault-ksm-001b-create-shared-folder.png new file mode 100644 index 0000000000000000000000000000000000000000..1324ef1bc4fa753dd53b1c77425b861e459fc7ca GIT binary patch literal 24038 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 rsaOl zR`Pp486VfqVWq{*D_S}EJ+y1X`LveC$MZai+~oYAAiE>G9WgjHOTN@{Zov(Yl{l{Z z(|drmMLo?$M8@%089Kq^`r>m<+5JA=I47(BEB0LF7FVjh+A;2Aa3b!0+M3|>RLCaJc;QlO%T6U(16Sx zuDsXEOwqre=UO*swe`9rhj;qg={Pt`KK$7X+=3exJGg{xw2_>X!YxUz;R^OH8uef}=asksH$3gX&h88q)FTYd0xF)Q`3GGOd|vHLWw2Y54< z*y$L~r`Paua%V@ETX4M)H&{4~)85!JL2A}+fTHD2pBNzeei8v$&zAyX(&nq(`C}D{ zEz6J2v5&8r#-#~DB*f*5Gun+4njxV%CnVR0nsP+L`K#jP-dj$Q%PrmOVCx^lVe9(& zSe`Abobw@=BRk2_y)8dqPOi*qx=+TuT={G6uGjelS4Lc?G*_7*o70+|g(Oz@g%0GN zUS+ZGFxd~R?+cE7i_6q^z=7nsyO!_?t}n;6!V!6Mo9+19xW310Ge=Wzp`S1z*G30^ z!nj_~n}l)Qa+A$94TEIb|KuQ+X_!|$_n4o1TR~iwCMXjm4K$|<#OZmg9r-I;xfM$w zP^SR0=9ANwo1gmp$Xo7CZp0l@;s{3|Ij7fkuyLj!YLDRvOnHMblEamCxhba%qW%kt z_8ATmvlYiLvB+^t1zBmDFAxaGtMPe}upI5pRW9PlyeAUyj-!+J@p5u!ky;3GIoYGN z+jzIAqJ_J&iMsf|1c?i43i>JdWRpo&|Hays&U&$S_rrXK&RABL

      wdCa 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 FV1ffihh6{x literal 0 HcmV?d00001 diff --git a/doc/1.5.5/gug/_images/vault-ksm-003a-create-application.png b/doc/1.5.5/gug/_images/vault-ksm-003a-create-application.png new file mode 100644 index 0000000000000000000000000000000000000000..6f8881320d9adececca7ac2253aed7805989d293 GIT binary patch literal 5347 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 literal 0 HcmV?d00001 diff --git a/doc/1.5.5/gug/_sources/adhoc-connections.md.txt b/doc/1.5.5/gug/_sources/adhoc-connections.md.txt new file mode 100644 index 000000000..056dab5ff --- /dev/null +++ b/doc/1.5.5/gug/_sources/adhoc-connections.md.txt @@ -0,0 +1,139 @@ +Ad-hoc Connections +================== + +The quickconnect extension provides a connection bar on the Guacamole Client +home page that allows users to type in the URI of a server to which they want +to connect and the client will parse the URI and immediately establish the +connection. The purpose of the extension is to allow situations where +administrators want to allow users the flexibility of establishing their own +connections without having to grant them access to edit connections or even to +have to create the connections at all, aside from typing the URI. + +:::{important} +There are several implications of using this extension that should be +well-understood by administrators prior to implementing it: + +* Connections established with this extension are created in-memory and only + persist until the Guacamole session ends. + +* Connections created with this extension are not accessible to other users, + and cannot be shared with other users. + +* This extension provides no functionality for authenticating users - it does + not allow anonymous logins, and requires that users are successfully + authenticated by another authentication module before it can be used. + +* The extension provides users the ability not only to establish connections, + but also to set any of the parameters for a connection. There are security + implications for this - for example, RDP file sharing can be used to pass + through any directory available on the server running guacd to the remote + desktop. This should be taken into consideration when enabling this extension + and making sure that guacd is configured in a way that does not compromise + sensitive system files by allowing access to them. +::: + +(quickconnect-downloading)= + +Downloading the quickconnect extension +-------------------------------------- + +The quickconnect extension is available separately from the main +`guacamole.war`. The link for this and all other officially-supported and +compatible extensions for a particular version of Guacamole are provided in the +release notes for that version. You can find the release notes for current +versions of Guacamole here: . + +The quickconnect extension is packaged as a `.tar.gz` file containing only the +extension itself, `guacamole-auth-quickconnect-1.5.5.jar`, which must +ultimately be placed in `GUACAMOLE_HOME/extensions`. + +(installing-quickconnect)= + +Installing the quickconnect extension +------------------------------------- + +Guacamole extensions are self-contained `.jar` files which are located within +the `GUACAMOLE_HOME/extensions` directory. *If you are unsure where +`GUACAMOLE_HOME` is located on your system, please consult +[](configuring-guacamole) before proceeding.* + +To install the extension, you must: + +1. Create the `GUACAMOLE_HOME/extensions` directory, if it does not already + exist. + +2. Place the `guacamole-auth-quickconnect-1.5.5.jar` file in the + `GUACAMOLE_HOME/extensions` directory. + +(guac-quickconnect-config)= + +### Configuring Guacamole for the quickconnect extension + +The quickconnect extension has two configuration properties that allow for +controlling what connection parameters can be used in the URIs that are opened +with the quickconnect extension: + +`quickconnect-allowed-parameters` +: An optional list of parameters that are allowed to be used by connections + that are created and accessed via the quickconnect extension. If this + property is present, only parameters in this list will be allowed. If this + property is absent, any/all parameters will be allowed unless explicitly + denied using the `quickconnect-denied-parameters` property. + +`quickconnect-denied-parameters` +: An optional list of parameters that are explicitly denied from being used by + connections created and accessed via the quickconnect extension. If this + property is present, any parameters in this list will be removed from the + connection configuration when it is created, *even if those parameter are + listed above in the `quickconnect-allowed-parameters` property.* If this + property is not present, no connection parameters will be explicitly denied. + +(completing-quickconnect-install)= + +### Completing the installation + +Guacamole will only load newly-installed extensions during startup, so your +servlet container will need to be restarted before the quickconnect extension +can be used. *Doing this will disconnect all active users, so be sure that it +is safe to do so prior to attempting installation.* When ready, restart your +servlet container and give the extension a try. + +(using-quickconnect)= + +Using the quickconnect extension +-------------------------------- + +The quickconnect extension provides a field on the home page that allows you to +enter a Uniform Resource Identifier (URI) to create a connection. A URI is in +the form: + +{samp}`{protocol}://{username}:{password}@{host}:{port}/?{parameters}` + +The `protocol` field can have any of the protocols supported by Guacamole, as +documented in [](configuring-guacamole). Many of the protocols define a default +`port` value, with the exception of VNC. The `parameters` field can specify any +of the protocol-specific parameters as documented on the configuration page. + +To establish a connection, simply type in a valid URI and either press "Enter" +or click the connect button. This extension will parse the URI and create a new +connection, and immediately start that connection in the current browser. + +Here are a few examples of URIs: + +`ssh://linux1.example.com/` +: Connect to the server linux1.example.com using the SSH protocol on the + default SSH port (22). This will result in prompting for both username and + password. + +`vnc://linux1.example.com:5900/` +: Connect to the server linux1.example.com using the VNC protocol and + specifying the port as 5900. + +`rdp://localuser@windows1.example.com/?security=rdp&ignore-cert=true&disable-audio=true&enable-drive=true&drive-path=/mnt/usb` +: Connect to the server windows1.example.com using the RDP protocol and the + user "localuser". This URI also specifies several RDP-specific parameters on + the connection, including forcing security mode to RDP (security=rdp), ignoring + any certificate errors (ignore-cert=true), disabling audio pass-through + (disable-audio=true), and enabling filesystem redirection (enable-drive=true) + to the /mnt/usb folder on the system running guacd (drive-path=/mnt/usb). + diff --git a/doc/1.5.5/gug/_sources/administration.md.txt b/doc/1.5.5/gug/_sources/administration.md.txt new file mode 100644 index 000000000..d273257bd --- /dev/null +++ b/doc/1.5.5/gug/_sources/administration.md.txt @@ -0,0 +1,321 @@ +Administration +============== + +Users, user groups, connections, and active sessions can be administered from +within the web interface if the underlying authentication module supports this. +The only officially-supported authentication modules supporting this are the +database extensions, which are documented in [](jdbc-auth). + +If you are using the default authentication mechanism, or another +authentication extension, this chapter probably does not apply to you, and the +management options will not be visible in the Guacamole interface. If, on the +other hand, you are using one of the database authentication providers, and you +are logged in as a user with sufficient privileges, you will see management +sections listed within the settings screen: + +![Sections within the Guacamole settings screen.](images/guacamole-settings-sections.png) + +Clicking any of these options will take you to a corresponding management +section where you can perform administrative tasks. + +(session-management)= + +Managing sessions +----------------- + +Clicking "Active Sessions" navigates to the session management screen. The +session management screen displays all active sessions and allows system +administrators to kill them as needed. + +When any user accesses a particular remote desktop connection, a unique session +is created and will appear in the list of active sessions in the session +management screen. Each active session is displayed in a sortable table, +showing the corresponding user's username, how long the session has been +active, the IP address of the machine from which the user is connecting, and +the name of the connection being used. + +![Session management interface](images/manage-sessions.png) + +To kill one or more sessions, select the sessions by clicking their checkboxes. +Once all desired sessions have been selected, clicking "Kill Sessions" will +immediately disconnect those users from the associated connection. + +(filtering-sessions)= + +### Filtering and sorting + +The table can be resorted by clicking on the column headers. Clicking any +column will resort the table by the values within that column, while clicking a +column which is already sorted will toggle between ascending and descending +order. + +The content of the table can be limited through search terms specified in the +"Filter" field. Entering search terms will limit the table to only sessions +containing those terms. For example, to list only connections by the user +"guacadmin" which have been active since March, 2015, you would enter: +"guacadmin 2015-03". Beware that if a search term needs to contain spaces, it +must be enclosed in double quotes to avoid being interpreted as multiple terms. + +![](images/session-filter-example-1.png) + +If you wish to narrow the content of the table to only those connections which +originate from a particular block of IP addresses, you can do this by +specifying the block in standard CIDR notation, such "10.0.0.0/8" or +"2001:db8:1234::/48". This will work with both IPv4 and IPv6 addresses. + +![](images/session-filter-example-2.png) + +Connection history +------------------ + +Clicking "History" navigates to the connection history screen. The connection +history screen displays a table of the most recent connections, including the +user that used that connection, the time the connection began, how long the +connection was used, and whether a corresponding recording is available for +viewing: + +![Connection history interface with recordings](images/history-table-with-recordings.png) + +Recordings are only made for a connection if an administrator explicitly +configures the connection to produce recordings, and those recordings are only +available from this screen if the administrator explicitly configures the +connection to [store those recordings in a location dedicated for future +in-browser playback](recording-playback). + +(filtering-history)= + +### Filtering and sorting + +Initially, the connection history table will display only the most recent +history records. You can page through these records to see how and when +Guacamole has been used. + +Just as with the table of active sessions described earlier, the table of +history records can be resorted by clicking on the column headers or filtered +by entering search terms within the "Filter" field. + +The same filtering format applies - a search term containing spaces must be +enclosed in double quotes to avoid being interpreted as multiple terms, and +only history records which contain each term will be included in the history +table. Unlike the table of active sessions, however, the filter will only take +effect once you click the "Search" button. This is due to the nature of the +connection history, as the number of records may be quite extensive. + +(user-management)= + +User management +--------------- + +Clicking "Users" within the list of settings sections will take you to the user +management screen. Here you can add new users, edit the properties and +privileges of existing users, and view the times that each user last logged in. +If you have a large number of users, you can also enter search terms within the +"Filter" field to filter the list of users by username. + +To add a new user, click the "New User" button. This will take you to a screen +where you will be allowed to enter the details of the new user, such as the +password and username. Note that, unless you specify otherwise, the new user +will have no access to any existing connections, nor any administrative +privileges, and you will need to manually set the user's password before they +will be able to log in. + +![User management interface](images/manage-users.png) + +To edit a user, just click on the user you wish to edit. You will be taken to a +screen which allows you to change the user's password, expire their password +(such that it must be changed at next login), add or remove administrative +permissions, and add or remove read access to specific connections, sharing +profiles, or groups. If you are managing a large number of connections or +groups and wish to reduce the size of the list displayed, you can do so by +specifying search terms within the "Filter" field. Groups will be filtered by +name and connections will be filtered by name or protocol. + +If you have delete permission on the user, you will also see a "Delete" button. +Clicking this button will permanently delete the user. Alternatively, if you +only wish to temporarily disable the account, checking "Login disabled" will +achieve the same effect while not removing the user entirely. If they attempt +to log in, the attempt will be rejected as if their account did not exist at +all. + +![Editing a user](images/edit-user.png) + +(user-group-membership)= + +### Editing group membership + +When editing a user, the groups that user is a member of may be modified within +the "Groups" section. By default, only groups that the user is already a member +of will be displayed. If you have permission to modify the user's membership +within a group, an "X" icon will be available next to that group's name. +Clicking the "X" will remove the user from that group, taking effect after the +user is saved. + +To add users to a group, the arrow next to the list of groups must be clicked +to expand the section and reveal all available groups. Available groups may +then be checked/unchecked to modify the user's membership within those groups: + +![Editing group membership of a user](images/edit-user-membership.png) + +If you have a large number of available groups, you can also enter search terms +within the "Filter" field to filter the list of groups by name. + +(user-group-management)= + +User group management +--------------------- + +Clicking "Groups" within the list of settings sections will take you to the +user group management screen. Here you can add new groups and edit the +properties and privileges of existing groups. If you have a large number of +user groups, you can also enter search terms within the "Filter" field to +filter the list of groups by name: + +![User group management interface](images/manage-groups.png) + +To add a new group, click the "New Group" button. This will take you to a +screen where you will be allowed to enter the details of the new group, +including membership and any permissions that members of the group should have. + +To edit a group, just click on the group you wish to edit. You will be taken to +a screen which allows you to modify membership, add or remove administrative +permissions, and add or remove read access to specific connections, sharing +profiles, or connection groups. If you are managing a large number of +connections or groups and wish to reduce the size of the list displayed, you +can do so by specifying search terms within the "Filter" field. Connection +groups will be filtered by name and connections will be filtered by name or +protocol. + +If you have delete permission on the group, you will also see a "Delete" +button. Clicking this button will permanently delete the group. Alternatively, +if you only wish to temporarily disable the effects of membership in the group, +checking "Disabled" will achieve the same effect while not removing the group +entirely. + +![Editing a user group](images/edit-user-group.png) + +### Group membership of groups + +Managing the group membership of groups is more complex than that of users, as +groups may contain both users and groups, with permissions from parent groups +possibly being inherited. Parent groups, member groups, and member users, can +all be managed identically to the [group memberships of users](user-group-membership), +with a corresponding section dedicated to each within the user group editor: + +![Editing the various membership relations of a user group](images/edit-group-memberships.png) + +Note that it is ultimately up to the extension providing the group to determine +how permissions granted to that group are inherited, if at all. The [database +authentication extension](jdbc-auth) implements full recursive inheritance of +group permissions, with permissions granted to a group being granted to all +members/descendants of that group, regardless of how deeply those members are +nested. + +(connection-management)= + +Connections and connection groups +--------------------------------- + +Clicking "Connections" within the list of settings sections will take you to +the connection management screen. The connection management screen allows +administrators to create and edit connections, sharing profiles, and connection +groups. If you have a large number of connections, you can also enter search +terms within the "Filter" field to filter the list of connections by name or +protocol. + +To add a new connection or connection group, click the "New Connection" or "New +Group" button, or the "New Connection" or "New Group" placeholders which appear +when you expand an existing connection group. These options will take you to a +screen where you will be allowed to enter the details of the new object, such +as its location, parameters, and name. This name should be descriptive, but +must also be unique with respect to other objects in the same location. + +Once you click "Save", the new object will be added, but will initially only be +usable by administrators and your current user. To grant another user access to +the new connection or connection group, you must [edit that user](user-management) +or [a user group that the user is a member of](user-group-management), checking +the box corresponding to the connection or connection group you created. + +![Connection management interface](images/manage-connections.png) + +Editing connections, sharing profiles, and connection groups works identically +to editing a user. Click on the object you wish to edit, and you will be taken +to screen which allows you to edit it. The screen will display all properties +of the object, including its usage history, if applicable. + +If you have delete permission on the object, you will also see a "Delete" +button. Clicking this button will permanently delete the object being edited. + +![Editing a connection](images/edit-connection.png) + +(connection-group-management)= + +### Connection organization and balancing + +Connection groups can be either "organizational" or "balancing". Each group can +contain any number of other connections or groups, but the semantics of the +group change depending on the type. + +An organizational group behaves exactly as a folder or directory in a file +system. It simply contains connections and other groups, but provides no other +behavior. Clicking on an organizational group within a connection list will +expand the group, revealing its contents. + +A balancing group behaves as a connection. It dynamically balances load across +the connections it contains, choosing the connection with the fewest number of +active users. Unlike organizational groups, clicking on a balancing group +causes a new connection to be opened. The actual underlying connection used +depends on which connection has the least load at the time the group was +clicked, and whether session affinity is enabled on that group. + +Enabling session affinity for a balancing group ensures that users are +consistently routed to the same underlying connections until they log out of +Guacamole. The load balancing behavior of the balancing group will apply only +for the first time a particular user connects to the group. If your users may +lose their desktop state if they are routed to a different underlying +connection, this option should be enabled. + +![Editing a connection group](images/edit-group.png) + +### Connection sharing + +The ability to share a connection is governed through the use of "sharing +profiles". If a sharing profile is created for a connection, users with access +to both that connection and that sharing profile will be able to share the +connection with other users by [generating connection sharing +links](client-share-menu), even if those users do not otherwise have user +accounts within Guacamole. + +The name of the sharing profile will be presented as an option within the +[share menu](client-share-menu) for any users with access, while the level of +access granted to users of generated share links will be dictated by the +parameters specified for the sharing profile. + +:::{important} +*The only extension which ships with Guacamole and implements enough of the +[Guacamole extension API](guacamole-ext) to share its connections is the +[database authentication extension](jdbc-auth).* If you wish to share +connections (or allow your users to share connections), you will need to use +the database authentication extension to store those connections. + +If you need to use other authentication schemes, keep in mind that the database +authentication extension can be used [alongside other extensions](ldap-and-database), +with the database handling connection storage and permissions only. Writing +your own extension which supports sharing is another alternative, though that +may be overly complicated if everything you need is already provided. +::: + +Unlike connections and groups, there is no "New Sharing Profile" button. +Sharing profiles are created through clicking the "New Sharing Profile" +placeholders which appear when connections are expanded. Just as +expanding a connection group reveals the connections or groups therein, +expanding a connection reveals the sharing profiles associated with that +connection. This holds true with both [the list of connections in the +connection management screen](connection-management) and [the list of +connections in the user editor](user-management). + +Creating or editing a sharing profile is virtually identical to creating or +editing a connection, with the exception that not all connection parameters are +available: + +![Editing a sharing profile](images/edit-sharing-profile.png) + diff --git a/doc/1.5.5/gug/_sources/cas-auth.md.txt b/doc/1.5.5/gug/_sources/cas-auth.md.txt new file mode 100644 index 000000000..9628cb42b --- /dev/null +++ b/doc/1.5.5/gug/_sources/cas-auth.md.txt @@ -0,0 +1,154 @@ +CAS Authentication +================== + +CAS is an open-source Single Sign On (SSO) provider that allows multiple +applications and services to authenticate against it and brokers those +authentication requests to a back-end authentication provider. This module +allows Guacamole to redirect to CAS for authentication and user services. This +module must be layered on top of other authentication extensions that provide +connection information, as it only provides user authentication. + +(cas-downloading)= + +Downloading the CAS authentication extension +-------------------------------------------- + +```{include} include/sso-download.md +``` + +The extension for the desired SSO method, in this case +`guacamole-auth-sso-cas-1.5.5.jar` from within the `cas/` subdirectory, must +ultimately be placed in `GUACAMOLE_HOME/extensions`. + +(installing-cas-auth)= + +Installing CAS authentication +----------------------------- + +Guacamole extensions are self-contained `.jar` files which are located within +the `GUACAMOLE_HOME/extensions` directory. *If you are unsure where +`GUACAMOLE_HOME` is located on your system, please consult +[](configuring-guacamole) before proceeding.* + +To install the CAS authentication extension, you must: + +1. Create the `GUACAMOLE_HOME/extensions` directory, if it does not already + exist. + +2. Copy `guacamole-auth-sso-cas-1.5.5.jar` within `GUACAMOLE_HOME/extensions`. + +3. Configure Guacamole to use CAS authentication, as described below. + +(guac-cas-config)= + +### Configuring Guacamole for CAS Authentication + +Guacamole's CAS support requires specifying two properties that describe the +CAS authentication server and the Guacamole deployment. These properties are +*absolutely required in all cases*, as they dictate how Guacamole should +connect to the CAS and how CAS should redirect users back to Guacamole once +their identity has been confirmed: + +`cas-authorization-endpoint` +: The URL of the CAS authentication server. This should be the full path to the + base of the CAS installation. + +`cas-redirect-uri` +: The URI to redirect back to upon successful authentication. Normally this + will be the full URL of your Guacamole installation. + +Additional optional properties are available to control how CAS tokens are +processed, including whether [CAS ClearPass](cas-clearpass) should be used and +how user group memberships should be derived: + +`cas-clearpass-key` +: If using CAS ClearPass to pass the SSO password to Guacamole, this parameter + specifies the private key file to use to decrypt the password. See [the section + on ClearPass](cas-clearpass) below. + +`cas-group-attribute` +: The CAS attribute that determines group membership, typically "memberOf". + This parameter is only required if using CAS to define user group memberships. + If omitted, groups aren't retrieved from CAS, and all other group-related + properties for CAS are ignored. + +`cas-group-format` +: The format that CAS will use for its group names. Possible values are + `plain`, for groups that are simple text names, or `ldap`, for groups that are + represented as LDAP DNs. If set to `ldap`, group names are always determined + from the last (leftmost) attribute of the DN. If omitted, `plain` is used by + default. + + This property has no effect if cas-group-attribute is not set. + +`cas-group-ldap-base-dn` +: The base DN to require for LDAP-formatted CAS groups. If specified, only CAS + groups beneath this DN will be included, and all other CAS groups will be + ignored. + + This property has no effect if cas-group-format is not `ldap`. + +`cas-group-ldap-attribute` +: The LDAP attribute to require for LDAP-formatted CAS groups. If specified, + only CAS groups that use this attribute for the name of the group will be + included. Note that LDAP group names are *always determined from the last + (leftmost) attribute of the DN*. Specifying this property will only have the + effect of ignoring any groups that do not use the specified attribute to + represent the group name. + + This property has no effect if cas-group-format is not `ldap`. + +(cas-login)= + +### Controlling login behavior + +```{include} include/sso-login-behavior.md +``` + +#### Automatically redirecting all unauthenticated users + +To ensure users are redirected to the CAS identity provider immediately +(without a Guacamole login screen), ensure the CAS extension has priority over +all others: + +``` +extension-priority: cas +``` + +#### Presenting unauthenticated users with a login screen + +To ensure users are given a normal Guacamole login screen and have the option +to log in with traditional credentials _or_ with CAS, ensure the CAS extension +does not have priority: + +``` +extension-priority: *, cas +``` + +(completing-cas-install)= + +### Completing the installation + +Guacamole will only reread `guacamole.properties` and load newly-installed +extensions during startup, so your servlet container will need to be restarted +before CAS authentication can be used. *Doing this will disconnect all active +users, so be sure that it is safe to do so prior to attempting installation.* +When ready, restart your servlet container and give the new authentication a +try. + +(cas-clearpass)= + +### Using CAS ClearPass + +CAS has a function called ClearPass that can be used to cache the password used +for SSO authentication and make that available to services at a later time. +Configuring the CAS server for ClearPass is beyond the scope of this article - +more information can be found on the Apereo CAS wiki at the following URL: +. + +Once you have CAS configured for credential caching, you need to configure the +service with a keypair for passing the credential securely. The public key gets +installed on the CAS server, while the private key gets configured with the +cas-clearpass-key property. The private key file needs to be in RSA PKCS8 +format. + diff --git a/doc/1.5.5/gug/_sources/configuring-guacamole.md.txt b/doc/1.5.5/gug/_sources/configuring-guacamole.md.txt new file mode 100644 index 000000000..ddf74c0a5 --- /dev/null +++ b/doc/1.5.5/gug/_sources/configuring-guacamole.md.txt @@ -0,0 +1,2857 @@ +Configuring Guacamole +===================== + +After installing Guacamole, you need to configure users and connections before +Guacamole will work. This chapter covers general configuration of Guacamole and +the use of its default authentication method. + +Guacamole's default authentication method reads all users and connections from +a single file called `user-mapping.xml`. This authentication method is intended +to be: + +1. Sufficient for small deployments of Guacamole. + +2. A relatively-easy means of verifying that Guacamole has been properly set + up. + +Other, more complex authentication methods which use backend databases, LDAP, +etc. are discussed in a separate, dedicated chapters. + +Regardless of the authentication method you use, Guacamole's configuration +always consists of two main pieces: a directory referred to as +`GUACAMOLE_HOME`, which is the primary search location for configuration files, +and `guacamole.properties`, the main configuration file used by Guacamole and +its extensions. + +(guacamole-home)= + +`GUACAMOLE_HOME` (`/etc/guacamole`) +--------------------------------------- + +`GUACAMOLE_HOME` is the name given to Guacamole's configuration directory, +which is located at `/etc/guacamole` by default. All configuration files, +extensions, etc. reside within this directory. The structure of +`GUACAMOLE_HOME` is rigorously defined, and consists of the following optional +files: + +`guacamole.properties` +: The main Guacamole configuration file. Properties within this file dictate + how Guacamole will connect to guacd, and may configure the behavior of + installed authentication extensions. + +`logback.xml` +: Guacamole uses a logging system called Logback for all messages. By + default, Guacamole will log to the console only, but you can change this + by providing your own Logback configuration file. + +`extensions/` +: The install location for all Guacamole extensions. Guacamole will + automatically load all `.jar` files within this directory on startup. + +`lib/` +: The search directory for libraries required by any Guacamole extensions. + Guacamole will make the `.jar` files within this directory available to + all extensions. If your extensions require additional libraries, such as + database drivers, this is the proper place to put them. + +(overriding-guacamole-home)= + +### Overriding `GUACAMOLE_HOME` + +If you cannot or do not wish to use `/etc/guacamole` for `GUACAMOLE_HOME`, the +location can be overridden through any of the following methods: + +1. Creating a directory named `.guacamole`, within the home directory of *the + user running the servlet container*. This directory will automatically be + used for `GUACAMOLE_HOME` if it exists. + +2. Specifying the full path to an alternative directory with the environment + variable `GUACAMOLE_HOME`. *Be sure to consult the documentation for your + servlet container to determine how to properly set environment variables.* + +3. Specifying the full path to an alternative directory with the system + property guacamole.home. + +(initial-setup)= + +`guacamole.properties` +------------------------ + +The Guacamole web application uses one main configuration file called +`guacamole.properties`. This file is the common location for all configuration +properties read by Guacamole or any extension of Guacamole, including +authentication providers. + +In previous releases, this file had to be in the classpath of your servlet +container. Now, the location of `guacamole.properties` can be explicitly +defined with environment variables or system properties, and the classpath is +only used as a last resort. When searching for `guacamole.properties`, +Guacamole will check, in order: + +1. Within `GUACAMOLE_HOME`, as defined above. + +2. The classpath of the servlet container. + +The `guacamole.properties` file is optional and is used to configure Guacamole +in situations where the defaults are insufficient, or to provide additional +configuration information for extensions. There are several standard properties +that are always available for use: + +`api-session-timeout` +: The amount of time, in minutes, to allow Guacamole sessions + (authentication tokens) to remain valid despite inactivity. If omitted, + Guacamole sessions will expire after 60 minutes of inactivity. + +`api-max-request-size` +: The maximum number of bytes to accept within the entity body of any + particular HTTP request, where 0 indicates that no limit should be + applied. If omitted, requests will be limited to 2097152 bytes (2 MB) by + default. This limit does not apply to file uploads. + + If using a reverse proxy for SSL termination, *keep in mind that reverse + proxies may enforce their own limits independently of this*. For example, + [Nginx will enforce a 1 MB request size limit by + default](nginx-file-upload-size). + +`allowed-languages` +: A comma-separated whitelist of language keys to allow as display language + choices within the Guacamole interface. For example, to restrict Guacamole + to only English and German, you would specify: + + ``` + allowed-languages: en, de + ``` + + As English is the fallback language, used whenever a translation key is + missing from the chosen language, English should only be omitted from this + list if you are absolutely positive that no strings are missing. + + The corresponding JSON of any built-in languages not listed here will + still be available over HTTP, but the Guacamole interface will not use + them, nor will they be used automatically based on local browser language. + If omitted, all defined languages will be available. + +`enable-environment-properties` +: If set to "true", Guacamole will first evaluate its environment to obtain + the value for any given configuration property, before using a value + specified in `guacamole.properties` or falling back to a default value. By + enabling this option, you can easily override any other configuration + property using an environment variable. + + ``` + enable-environment-properties: true + ``` + + When searching for a configuration property in the environment, the name + of the property is first transformed by converting all lower case + characters to their upper case equivalents, and by replacing all hyphen + characters (`-`) with underscore characters (`_`). For example, the + `guacd-hostname` property would be transformed to `GUACD_HOSTNAME` when + searching the environment. + +`extension-priority` +: A comma-separated list of the namespaces of all extensions that should be + loaded in a specific order. The special value `*` can be used in lieu of a + namespace to represent all extensions that are not listed. All extensions + explicitly listed will be sorted in the order given, while all extensions + not explicitly listed will be sorted by their filenames. + + For example, to ensure support for SAML is loaded _first_: + + ``` + extension-priority: saml + ``` + + Or to ensure support for SAML is loaded _last_: + + ``` + extension-priority: *, saml + ``` + + If unsure which namespaces apply or the order that your extensions are + loaded, check the Guacamole logs. The namespaces and load order of all + installed extensions are logged by Guacamole during startup: + + ``` + ... + 23:32:06.467 [main] INFO o.a.g.extension.ExtensionModule - Multiple extensions are installed and will be loaded in order of decreasing priority: + 23:32:06.468 [main] INFO o.a.g.extension.ExtensionModule - - [postgresql] "PostgreSQL Authentication" (/etc/guacamole/extensions/guacamole-auth-jdbc-postgresql-1.5.5.jar) + 23:32:06.468 [main] INFO o.a.g.extension.ExtensionModule - - [ldap] "LDAP Authentication" (/etc/guacamole/extensions/guacamole-auth-ldap-1.5.5.jar) + 23:32:06.468 [main] INFO o.a.g.extension.ExtensionModule - - [openid] "OpenID Authentication Extension" (/etc/guacamole/extensions/guacamole-auth-sso-openid-1.5.5.jar) + 23:32:06.468 [main] INFO o.a.g.extension.ExtensionModule - - [saml] "SAML Authentication Extension" (/etc/guacamole/extensions/guacamole-auth-sso-saml-1.5.5.jar) + 23:32:06.468 [main] INFO o.a.g.extension.ExtensionModule - To change this order, set the "extension-priority" property or rename the extension files. The default priority of extensions is dictated by the sort order of their filenames. + ... + ``` + +`guacd-hostname` +: The host the Guacamole proxy daemon (guacd) is listening on. If omitted, + Guacamole will assume guacd is listening on localhost. + +`guacd-port` +: The port the Guacamole proxy daemon (guacd) is listening on. If omitted, + Guacamole will assume guacd is listening on port 4822. + +`guacd-ssl` +: If set to "true", Guacamole will require SSL/TLS encryption between the + web application and guacd. By default, communication between the web + application and guacd will be unencrypted. + + Note that if you enable this option, you must also configure guacd to use + SSL via command line options. These options are documented in the manpage + of guacd. You will need an SSL certificate and private key. + +`skip-if-unavailable` +: A comma-separated list of the identifiers of authentication providers that + should be allowed to fail internally without aborting the authentication + process. For example, to request that Guacamole ignore failures due to the + LDAP directory or MySQL server being unexpectedly down, allowing other + authentication providers to continue functioning: + + ``` + skip-if-unavailable: mysql, ldap + ``` + + By default, Guacamole takes a conservative approach to internal failures, + aborting the authentication process if an internal error occurs within any + authentication provider. Depending on the nature of the error, this may + mean that no users can log in until the cause of the failure is dealt + with. The `skip-if-unavailable` property may be used to explicitly inform + Guacamole that one or more underlying systems are expected to occasionally + experience failures, and that other functioning systems should be relied + upon if they do fail. + +A typical `guacamole.properties` that defines explicit values for the +`guacd-hostname` and `guacd-port` properties would look like: + +``` +# Hostname and port of guacamole proxy +guacd-hostname: localhost +guacd-port: 4822 +``` + +(webapp-logging)= + +Logging within the web application +---------------------------------- + +By default, Guacamole logs all messages to the console. Servlet containers like +Tomcat will automatically redirect these messages to a log file, `catalina.out` +in the case of Tomcat, which you can read through while Guacamole runs. +Messages are logged at four different log levels, depending on message +importance and severity: + +`error` +: Errors are fatal conditions. An operation, described in the log message, + was attempted but could not proceed, and the failure of this operation is + a serious problem that needs to be addressed. + +`warn` +: Warnings are generally non-fatal conditions. The operation continued, but + encountered noteworthy problems. + +`info` +: "Info" messages are purely informational. They may be useful or + interesting to administrators, but are not generally critical to proper + operation of a Guacamole server. + +`debug` +: Debug messages are highly detailed and oriented toward development. Most + debug messages will contain stack traces and internal information that is + useful when investigating problems within code. It is expected that debug + messages, though verbose, will not affect performance. + +`trace` +: Trace messages are similar to debug messages in intent and verbosity, but + are so low-level that they may affect performance due to their frequency. + Trace-level logging is rarely necessary, and is mainly useful in providing + highly detailed context around issues being investigated. + +Guacamole logs messages using a logging framework called +[Logback](http://logback.qos.ch/) and, by default, will only log messages at +the "`info`" level or higher. If you wish to change the log level, or configure +how or where Guacamole logs messages, you can do so by providing your own +`logback.xml` file within `GUACAMOLE_HOME`. For example, to log all messages +to the console, even "`debug`" messages, you might use the following +`logback.xml`: + +```xml + + + + + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + + + + + + + + +``` + +Guacamole and the above example configure only one appender which logs to the +console, but Logback is extremely flexible and allows any number of appenders +which can each log to separate files, the console, etc. based on a number of +criteria, including the log level and the source of the message. + +More thorough [documentation on configuring +Logback](http://logback.qos.ch/manual/configuration.html) is provided on the +Logback project's web site. + +(basic-auth)= + +Using the default authentication +-------------------------------- + +Guacamole's default authentication module is simple and consists of a mapping +of usernames to configurations. This authentication module comes with Guacamole +and simply reads usernames and passwords from an XML file. It is always +enabled, but will only read from the XML file if it exists, and is always last +in priority relative to any other authentication extensions. + +There are other authentication modules available. The Guacamole project +provides database-backed authentication modules with the ability to manage +connections and users from the web interface, and other authentication modules +can be created using the extension API provided along with the Guacamole web +application, guacamole-ext. + +(user-mapping)= + +### `user-mapping.xml` + +The default authentication provider used by Guacamole reads all username, +password, and configuration information from a file called the "user mapping" +located at `GUACAMOLE_HOME/user-mapping.xml`. An example of a user mapping file +is included with Guacamole, and looks something like this: + +```xml + + + + + vnc + localhost + 5900 + VNCPASS + + + + + + + + vnc + localhost + 5901 + VNCPASS + + + + + vnc + otherhost + 5900 + VNCPASS + + + + + +``` + +Each user is specified with a corresponding `` tag. This tag +contains all authorized connections for that user, each denoted with a +`` tag. Each `` tag contains a corresponding protocol +and set of protocol-specific parameters, specified with the `` and +`` tags respectively. + +(user-setup)= + +#### Adding users + +When using `user-mapping.xml`, username/password pairs are specified with +`` tags, which each have a `username` and `password` attribute. Each +`` tag authorizes a specific username/password pair to access all +connections within the tag: + +```xml + + ... + +``` + +In the example above, the password would be listed in plaintext. If you don't +want to do this, you can also specify your password hashed with MD5: + +```xml + + ... + +``` + +After modifying `user-mapping.xml`, the file will be automatically reread by +Guacamole, and your changes will take effect immediately. The newly-added user +will be able to log in - no restart of the servlet container is needed. + +(connection-setup)= + +#### Adding connections to a user + +To specify a connection within an `` tag, you can either list a +single protocol and set of parameters (specified with a `` tag and +any number of `` tags), in which case that user will have access to only +one connection named "DEFAULT", or you can specify one or more connections with +one or more `` tags, each of which can be named and contains a +`` tag and any number of `` tags. + +(connection-configuration)= + +Configuring connections +----------------------- + +Each protocol supported by Guacamole has its own set of configuration +parameters. These parameters typically describe the hostname and port of the +remote desktop server, the credentials to use when connecting, if any, and the +size and color depth of the display. If the protocol supports file transfer, +options for enabling that functionality will be provided as well. + +### VNC + +The VNC protocol is the simplest and first protocol supported by Guacamole. +Although generally not as fast as RDP, many VNC servers are adequate, and VNC +over Guacamole tends to be faster than VNC by itself due to decreased bandwidth +usage. + +VNC support for Guacamole is provided by the libguac-client-vnc library, which +will be installed as part of guacamole-server if the required dependencies are +present during the build. + +:::{note} +In addition to the VNC-specific parameters below, Guacamole's VNC support also +accepts the parameters of several features that Guacamole provides for multiple +protocols: + +* [](disable-clipboard) +* [](common-sftp) +* [](graphical-recording) +* [](wake-on-lan) +::: + +(vnc-network-parameters)= + +#### Network parameters + +With the exception of reverse-mode VNC connections, VNC works by making +outbound network connections to a particular host which runs one or more VNC +servers. Each VNC server is associated with a display number, from which the +appropriate port number is derived. + +`hostname` +: The hostname or IP address of the VNC server Guacamole should connect to. + +`port` +: The port the VNC server is listening on, usually 5900 or 5900 + display + number. For example, if your VNC server is serving display number 1 + (sometimes written as `:1`), your port number here would be 5901. + +`autoretry` +: The number of times to retry connecting before giving up and returning an + error. In the case of a reverse connection, this is the number of times + the connection process is allowed to time out. + +(vnc-authentication)= + +#### Authentication + +The VNC standard defines only password based authentication. Other +authentication mechanisms exist, but are non-standard or proprietary. +Guacamole currently supports both standard password-only based authentication, +as well as username and password authentication. + +`username` +: The username to use when attempting authentication, if any. This parameter + is optional. + +`password` +: The password to use when attempting authentication, if any. This parameter + is optional. + +(vnc-display-settings)= + +#### Display settings + +VNC servers do not allow the client to request particular display sizes, so you +are at the mercy of your VNC server with respect to display width and height. +However, to reduce bandwidth usage, you may request that the VNC server reduce +its color depth. Guacamole will automatically detect 256-color images, but this +can be guaranteed for absolutely all graphics sent over the connection by +forcing the color depth to 8-bit. Color depth is otherwise dictated by the VNC +server. + +If you are noticing problems with your VNC display, such as the lack of a mouse +cursor, the presence of multiple mouse cursors, or strange colors (such as blue +colors appearing more like orange or red), these are typically the result of +bugs or limitations within the VNC server, and additional parameters are +available to work around such issues. + +`color-depth` +: The color depth to request, in bits-per-pixel. This parameter is optional. + If specified, this must be either 8, 16, 24, or 32. Regardless of what + value is chosen here, if a particular update uses less than 256 colors, + Guacamole will always send that update as a 256-color PNG. + +`swap-red-blue` +: If the colors of your display appear wrong (blues appear orange or red, + etc.), it may be that your VNC server is sending image data incorrectly, + and the red and blue components of each color are swapped. If this is the + case, set this parameter to "true" to work around the problem. This + parameter is optional. + +`cursor` +: If set to "remote", the mouse pointer will be rendered remotely, and the + local position of the mouse pointer will be indicated by a small dot. A + remote mouse cursor will feel slower than a local cursor, but may be + necessary if the VNC server does not support sending the cursor image to + the client. + +`encodings` +: A space-delimited list of VNC encodings to use. The format of this + parameter is dictated by libvncclient and thus doesn't really follow the + form of other Guacamole parameters. This parameter is optional, and + libguac-client-vnc will use any supported encoding by default. + + Beware that this parameter is intended to be replaced with individual, + encoding-specific parameters in a future release. + +`read-only` +: Whether this connection should be read-only. If set to "true", no input + will be accepted on the connection at all. Users will only see the desktop + and whatever other users using that same desktop are doing. This parameter + is optional. + +`force-lossless` +: Whether this connection should only use lossless compression for graphical + updates. If set to "true", lossy compression will not be used. This + parameter is optional. By default, lossy compression will be used when + heuristics determine that it would likely outperform lossless compression. + +#### VNC Repeater + +There exist VNC repeaters, such as UltraVNC Repeater, which act as +intermediaries or proxies, providing a single logical VNC connection which is +then routed to another VNC server elsewhere. Additional parameters are required +to select which VNC host behind the repeater will receive the connection. + +`dest-host` +: The destination host to request when connecting to a VNC proxy such as + UltraVNC Repeater. This is only necessary if the VNC proxy in use requires + the connecting user to specify which VNC server to connect to. If the VNC + proxy automatically connects to a specific server, this parameter is not + necessary. + +`dest-port` +: The destination port to request when connecting to a VNC proxy such as + UltraVNC Repeater. This is only necessary if the VNC proxy in use requires + the connecting user to specify which VNC server to connect to. If the VNC + proxy automatically connects to a specific server, this parameter is not + necessary. + +(vnc-reverse-connections)= + +#### Reverse VNC connections + +Guacamole supports "reverse" VNC connections, where the VNC client listens for +an incoming connection from the VNC server. When reverse VNC connections are +used, the VNC client and server switch network roles, but otherwise function as +they normally would. The VNC server still provides the remote display, and the +VNC client still provides all keyboard and mouse input. + +`reverse-connect` +: Whether reverse connection should be used. If set to "true", instead of + connecting to a server at a given hostname and port, guacd will listen on + the given port for inbound connections from a VNC server. + +`listen-timeout` +: If reverse connection is in use, the maximum amount of time to wait for an + inbound connection from a VNC server, in milliseconds. If blank, the + default value is 5000 (five seconds). + +(vnc-audio)= + +#### Audio support (via PulseAudio) + +VNC does not provide its own support for audio, but Guacamole's VNC support can +obtain audio through a secondary network connection to a PulseAudio server +running on the same machine as the VNC server. + +Most Linux systems provide audio through a service called PulseAudio. This +service is capable of communicating over the network, and if PulseAudio is +configured to allow TCP connections, Guacamole can connect to your PulseAudio +server and combine its audio with the graphics coming over VNC. + +Configuring PulseAudio for network connections requires an additional line +within the PulseAudio configuration file, usually `/etc/pulse/default.pa`: + +``` +load-module module-native-protocol-tcp auth-ip-acl=192.168.1.0/24 auth-anonymous=1 +``` + +This loads the TCP module for PulseAudio, configuring it to accept connections +without authentication and *only* from the `192.168.1.0/24` subnet. You will +want to replace this value with the subnet or IP address from which guacd will +be connecting. It is possible to allow connections from absolutely anywhere, +but beware that you should only do so if the nature of your network prevents +unauthorized access: + +``` +load-module module-native-protocol-tcp auth-anonymous=1 +``` + +In either case, the `auth-anonymous=1` parameter is strictly required. +Guacamole does not currently support the cookie-based authentication used by +PulseAudio for non-anonymous connections. If this parameter is omitted, +Guacamole will not be able to connect to PulseAudio. + +Once the PulseAudio configuration file has been modified appropriately, restart +the PulseAudio service. PulseAudio should then begin listening on port 4713 +(the default PulseAudio port) for incoming TCP connections. You can verify this +using a utility like {command}`netstat`: + +```console +$ netstat -ln | grep 4713 +tcp 0 0 0.0.0.0:4713 0.0.0.0:* LISTEN +tcp6 0 0 :::4713 :::* LISTEN +$ +``` + +The following parameters are available for configuring the audio support for +VNC: + +`enable-audio` +: If set to "true", audio support will be enabled, and a second connection + for PulseAudio will be made in addition to the VNC connection. By default, + audio support within VNC is disabled. + +`audio-servername` +: The name of the PulseAudio server to connect to. This will be the hostname + of the computer providing audio for your connection via PulseAudio, most + likely the same as the value given for the `hostname` parameter. + + If this parameter is omitted, the default PulseAudio device will be used, + which will be the PulseAudio server running on the same machine as guacd. + +(vnc-clipboard-encoding)= + +#### Clipboard encoding + +While Guacamole will always use UTF-8 for its own clipboard data, the VNC +standard requires that clipboard data be encoded in ISO 8859-1. As most VNC +servers will not accept data in any other format, Guacamole will translate +between UTF-8 and ISO 8859-1 when exchanging clipboard data with the VNC +server, but this behavior can be overridden with the `clipboard-encoding` +parameter. + +:::{important} +*The only clipboard encoding guaranteed to be supported by VNC servers is ISO +8859-1.* You should only override the clipboard encoding using the +`clipboard-encoding` parameter of you are absolutely positive your VNC server +supports other encodings. +::: + +`clipboard-encoding` +: The encoding to assume for the VNC clipboard. This parameter is optional. + By default, the standard encoding ISO 8859-1 will be used. *Only use this + parameter if you are sure your VNC server supports other encodings beyond + the standard ISO 8859-1.* + + Possible values are: + + ISO8859-1 + : ISO 8859-1 is the clipboard encoding mandated by the VNC standard, and + supports only basic Latin characters. Unless your VNC server specifies + otherwise, this encoding is the only encoding guaranteed to work. + + UTF-8 + : UTF-8 - the most common encoding used for Unicode. Using this encoding + for the VNC clipboard violates the VNC specification, but some servers + do support this. This parameter value should only be used if you know + your VNC server supports this encoding. + + UTF-16 + : UTF-16 - a 16-bit encoding for Unicode which is not as common as UTF-8, + but still widely used. Using this encoding for the VNC clipboard + violates the VNC specification. This parameter value should only be used + if you know your VNC server supports this encoding. + + CP1252 + : Code page 1252 - a Windows-specific encoding for Latin characters which + is mostly a superset of ISO 8859-1, mapping some additional displayable + characters onto what would otherwise be control characters. Using this + encoding for the VNC clipboard violates the VNC specification. This + parameter value should only be used if you know your VNC server supports + this encoding. + +(adding-vnc)= + +#### Adding a VNC connection + +If you are using the default authentication built into Guacamole, and you wish +to grant access to a VNC connection to a particular user, you need to locate +the `` section for that user within your `user-mapping.xml`, and add +a section like the following within it: + +```xml + + vnc + localhost + 5901 + +``` + +If added exactly as above, a new connection named "`Unique Name`" will be +available to the user associated with the `` section containing it. +The connection will use VNC to connect to localhost at port 5901. Naturally, +you will want to change some or all of these values. + +If your VNC server requires a password, or you wish to specify other +configuration parameters (to reduce the color depth, for example), you will +need to add additional `` tags accordingly. + +Other authentication methods will provide documentation describing how to +configure new connections. If the authentication method in use fully implements +the features of Guacamole's authentication API, you will be able to add a new +VNC connection easily and intuitively using the administration interface built +into Guacamole. You will not need to edit configuration files. + +(vnc-servers)= + +#### Which VNC server? + +The choice of VNC server can make a big difference when it comes to +performance, especially over slower networks. While many systems provide VNC +access by default, using this is often not the fastest method. + +(realvnc)= + +##### RealVNC or TigerVNC + +RealVNC, and its derivative TigerVNC, perform quite well. In our testing, they +perform the best with Guacamole. If you are okay with having a desktop that can +only be accessed via VNC, one of these is likely your best choice. Both +optimize window movement and (depending on the application) scrolling, giving a +very responsive user experience. + +##### TightVNC + +TightVNC is widely-available and performs generally as well as RealVNC or +TigerVNC. If you wish to use TightVNC with Guacamole, performance should be +just fine, but we highly recommend disabling its JPEG encoding. This is because +images transmitted to Guacamole are always encoded losslessly as PNG images. +When this operation is performed on a JPEG image, the artifacts present from +JPEG's lossy compression reduce the compressibility of the image for PNG, thus +leading to a slower experience overall than if JPEG was simply not used to +begin with. + +##### x11vnc + +The main benefit of using x11vnc is that it allows you to continue using your +desktop normally, while simultaneously exposing control of your desktop via +VNC. Performance of x11vnc is comparable to RealVNC, TigerVNC, and TightVNC. If +you need to use your desktop locally as well as via VNC, you will likely be +quite happy with x11vnc. + +##### vino + +vino is the VNC server that comes with the Gnome desktop environment, and is +enabled if you enable "desktop sharing" via the system preferences available +within Gnome. If you need to share your local desktop, we recommend using +x11vnc rather vino, as it has proven more performant and feature-complete in +our testing. If you don't need to share a local desktop but simply need an +environment you can access remotely, using a VNC server like RealVNC, TigerVNC, +or TightVNC is a better choice. + +(qemu)= + +##### QEMU or KVM + +QEMU (and thus KVM) expose the displays of virtual machines using VNC. If you +need to see the virtual monitor of your virtual machine, using this VNC +connection is really your only choice. As the VNC server built into QEMU cannot +be aware of higher-level operations like window movement, resizing, or +scrolling, those operations will tend to be sent suboptimally, and will not be +as fast as a VNC server running within the virtual machine. + +If you wish to use a virtual machine for desktop access, we recommend +installing a native VNC server inside the virtual machine after the virtual +machine is set up. This will give a more responsive desktop. + +### RDP + +The RDP protocol is more complicated than VNC and was the second protocol +officially supported by Guacamole. RDP tends to be faster than VNC due to the +use of caching, which Guacamole does take advantage of. + +RDP support for Guacamole is provided by the libguac-client-rdp library, which +will be installed as part of guacamole-server if the required dependencies are +present during the build. + +:::{note} +In addition to the RDP-specific parameters below, Guacamole's RDP support also +accepts the parameters of several features that Guacamole provides for multiple +protocols: + +* [](disable-clipboard) +* [](common-sftp) +* [](graphical-recording) +* [](wake-on-lan) +::: + +(rdp-network-parameters)= + +#### Network parameters + +RDP connections require a hostname or IP address defining the +destination machine. The RDP port is defined to be 3389, and will be +this value in most cases. You only need to specify the RDP port if you +are not using port 3389. + +`hostname` +: The hostname or IP address of the RDP server Guacamole should connect to. + +`port` +: The port the RDP server is listening on. This parameter is optional. If + this is not specified, the standard port for RDP (3389) or Hyper-V's + default port for VMConnect (2179) will be used, depending on the security + mode selected. + +(rdp-authentication)= + +#### Authentication and security + +RDP provides authentication through the use of a username, password, and +optional domain. All RDP connections are encrypted. + +Most RDP servers will provide a graphical login if the username, password, and +domain parameters are omitted. One notable exception to this is Network Level +Authentication, or NLA, which performs all authentication outside of a desktop +session, and thus in the absence of a graphical interface. + +Servers that require NLA can be handled by Guacamole in one of two ways. The +first is to provide the username and password within the connection +configuration, either via static values or by passing through the Guacamole +credentials with [parameter tokens](parameter-tokens) and [](ldap-auth). +Alternatively, if credentials are not configured within the connection +configuration, Guacamole will attempt to prompt the user for the credentials +interactively, if the versions of both guacd and Guacamole Client in use +support it. If either component does not support prompting and the credentials +are not configured, NLA-based connections will fail. + +`username` +: The username to use to authenticate, if any. This parameter is optional. + +`password` +: The password to use when attempting authentication, if any. This parameter + is optional. + +`domain` +: The domain to use when attempting authentication, if any. This parameter + is optional. + +`security` +: The security mode to use for the RDP connection. This mode dictates how + data will be encrypted and what type of authentication will be performed, + if any. By default, a security mode is selected based on a negotiation + process which determines what both the client and the server support. + + Possible values are: + + any + : Automatically select the security mode based on the security protocols + supported by both the client and the server. *This is the default*. + + nla + : Network Level Authentication, sometimes also referred to as "hybrid" or + CredSSP (the protocol that drives NLA). This mode uses TLS encryption + and requires the username and password to be given in advance. Unlike + RDP mode, the authentication step is performed before the remote desktop + session actually starts, avoiding the need for the Windows server to + allocate significant resources for users that may not be authorized. + + If the versions of guacd and Guacamole Client in use support prompting + and the username, password, and domain are not specified, the user will + be interactively prompted to enter credentials to complete NLA and + continue the connection. Otherwise, when prompting is not supported and + credentials are not provided, NLA connections will fail. + + nla-ext + : Extended Network Level Authentication. This mode is identical to NLA + except that an additional "[Early User Authorization + Result](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-rdpbcgr/d0e560a3-25cb-4563-8bdc-6c4cc625bbfc)" + is required to be sent from the server to the client immediately after the + NLA handshake is completed. + + tls + : RDP authentication and encryption implemented via TLS (Transport Layer + Security). Also referred to as RDSTLS, the TLS security mode is + primarily used in load balanced configurations where the initial RDP + server may redirect the connection to a different RDP server. + + vmconnect + : Automatically select the security mode based on the security protocols + supported by both the client and the server, limiting that negotiation + to only the protocols known to be supported by [Hyper-V / + VMConnect](rdp-preconnection-pdu). + + rdp + : Legacy RDP encryption. This mode is generally only used for older + Windows servers or in cases where a standard Windows login screen is + desired. Newer versions of Windows have this mode disabled by default + and will only accept NLA unless explicitly configured otherwise. + +`ignore-cert` +: If set to "true", the certificate returned by the server will be ignored, + even if that certificate cannot be validated. This is useful if you + universally trust the server and your connection to the server, and you + know that the server's certificate cannot be validated (for example, if it + is self-signed). + +`disable-auth` +: If set to "true", authentication will be disabled. Note that this refers + to authentication that takes place while connecting. Any authentication + enforced by the server over the remote desktop session (such as a login + dialog) will still take place. By default, authentication is enabled and + only used when requested by the server. + + If you are using NLA, authentication must be enabled by definition. + +(rdp-clipboard-normalization)= + +#### Clipboard normalization + +Windows uses a different sequence of characters at the end of each line +compared to other operating systems. As RDP preserves the format of line +endings within the clipboard, this can cause trouble when using a non-Windows +machine to access Windows or vice versa. + +If clipboard normalization is used, Guacamole will automatically translate the +line endings within clipboard data to compensate for the expectations of the +remote system. + +`normalize-clipboard` +: The type of line ending normalization to apply to text within the clipboard, + if any. By default, line ending normalization is not applied. + + Possible values are: + + preserve + : Preserve all line endings within the clipboard exactly as they are, + performing no normalization whatsoever. This is the default. + + unix + : Automatically transform all line endings within the clipboard to Unix-style + line endings (LF). This format of line ending is the format used by both + Linux and Mac. + + windows + : Automatically transform all line endings within the clipboard to + Windows-style line endings (CRLF). + +(rdp-session-settings)= + +#### Session settings + +RDP sessions will typically involve the full desktop environment of a normal +user. Alternatively, you can manually specify a program to use instead of the +RDP server's default shell, or connect to the administrative console. + +Although Guacamole is independent of keyboard layout, RDP is not. This is +because Guacamole represents keys based on what they *do* ("press the Enter +key"), while RDP uses identifiers based on the key's location ("press the +rightmost key in the second row"). To translate between a Guacamole key event +and an RDP key event, Guacamole must know ahead of time the keyboard layout of +the RDP server. + +By default, the US English qwerty keyboard will be used. If this does not match +the keyboard layout of your RDP server, keys will not be properly translated, +and you will need to explicitly choose a different layout in your connection +settings. If your keyboard layout is not supported, please notify the Guacamole +team by [opening an issue in +JIRA](https://issues.apache.org/jira/browse/GUACAMOLE). + + +`client-name` +: When connecting to the RDP server, Guacamole will normally provide its own + hostname as the name of the client. If this parameter is specified, + Guacamole will use its value instead. + + On Windows RDP servers, this value is exposed within the session as the + `CLIENTNAME` environment variable. + +`console` +: If set to "true", you will be connected to the console (admin) session of + the RDP server. + +`initial-program` +: The full path to the program to run immediately upon connecting. This + parameter is optional. + +`server-layout` +: The server-side keyboard layout. This is the layout of the RDP server and + has nothing to do with the keyboard layout in use on the client. *The + Guacamole client is independent of keyboard layout.* The RDP protocol, + however, is *not* independent of keyboard layout, and Guacamole needs to + know the keyboard layout of the server in order to send the proper keys + when a user is typing. + + Possible values are generally in the format + {samp}`{LANGUAGE}-{REGION}-{VARIANT}`, where `LANGUAGE` is the standard + two-letter language code for the primary language associated with the + layout, `REGION` is a standard representation of the location that the + keyboard is used (the two-letter country code, when possible), and + `VARIANT` is the specific keyboard layout variant (such as "qwerty", + "qwertz", or "azerty"): + + | Keyboard layout | Parameter value | + | ------------------------------ | ---------------------- | + | Brazilian (Portuguese) | `pt-br-qwerty` | + | English (UK) | `en-gb-qwerty` | + | English (US) | `en-us-qwerty` | + | French | `fr-fr-azerty` | + | French (Belgian) | `fr-be-azerty` | + | French (Swiss) | `fr-ch-qwertz` | + | German | `de-de-qwertz` | + | German (Swiss) | `de-ch-qwertz` | + | Hungarian | `hu-hu-qwertz` | + | Italian | `it-it-qwerty` | + | Japanese | `ja-jp-qwerty` | + | Norwegian | `no-no-qwerty` | + | Spanish | `es-es-qwerty` | + | Spanish (Latin American) | `es-latam-qwerty` | + | Swedish | `sv-se-qwerty` | + | Turkish-Q | `tr-tr-qwerty` | + + If you server's keyboard layout is not yet supported, and it is not possible + to set your server to use a supported layout, the `failsafe` layout may be used + to force Unicode events to be used for all input, however beware that doing so + may prevent keyboard shortcuts from working as expected. + +`timezone` +: The timezone that the client should send to the server for configuring the + local time display of that server. The format of the timezone is in the + standard IANA key zone format, which is the format used in UNIX/Linux. + This will be converted by RDP into the correct format for Windows. + + The timezone is detected and will be passed to the server during the + handshake phase of the connection, and may used by protocols, like RDP, + that support it. This parameter can be used to override the value detected + and passed during the handshake, or can be used in situations where guacd + does not support passing the timezone parameter during the handshake phase + (guacd versions prior to 1.3.0). + + Support for forwarding the client timezone varies by RDP server + implementation. For example, with Windows, support for forwarding + timezones is only present in Windows Server with Remote Desktop Services + (RDS, formerly known as Terminal Services) installed. Windows Server + installations in admin mode, along with Windows workstation versions, do + not allow the timezone to be forwarded. Other server implementations, for + example, xrdp, may not implement this feature at all. Consult the + documentation for the RDP server to determine whether or not this feature + is supported. + +(rdp-display-settings)= + +#### Display settings + +Guacamole will automatically choose an appropriate display size for RDP +connections based on the size of the browser window and the DPI of the device. +The size of the display can be forced by specifying explicit width or height +values. + +To reduce bandwidth usage, you may also request that the server reduce its +color depth. Guacamole will automatically detect 256-color images, but this can +be guaranteed for absolutely all graphics sent over the connection by forcing +the color depth to 8-bit. Color depth is otherwise dictated by the RDP server. + +`color-depth` +: The color depth to request, in bits-per-pixel. This parameter is optional. + If specified, this must be either 8, 16, or 24. Regardless of what value + is chosen here, if a particular update uses less than 256 colors, + Guacamole will always send that update as a 256-color PNG. + +`width` +: The width of the display to request, in pixels. This parameter is + optional. If this value is not specified, the width of the connecting + client display will be used instead. + +`height` +: The height of the display to request, in pixels. This parameter is + optional. If this value is not specified, the height of the connecting + client display will be used instead. + +`dpi` +: The desired effective resolution of the client display, in DPI. This + parameter is optional. If this value is not specified, the resolution and + size of the client display will be used together to determine, + heuristically, an appropriate resolution for the RDP session. + +`resize-method` +: The method to use to update the RDP server when the width or height of the + client display changes. This parameter is optional. If this value is not + specified, no action will be taken when the client display changes size. + + Normally, the display size of an RDP session is constant and can only be + changed when initially connecting. As of RDP 8.1, the "Display Update" + channel can be used to request that the server change the display size. + For older RDP servers, the only option is to disconnect and reconnect with + the new size. + + Possible values are: + + display-update + : Uses the "Display Update" channel added with RDP 8.1 to signal the + server when the client display size has changed. + + reconnect + : Automatically disconnects the RDP session when the client display size + has changed, and reconnects with the new size. + +`force-lossless` +: Whether this connection should only use lossless compression for graphical + updates. If set to "true", lossy compression will not be used. This + parameter is optional. By default, lossy compression will be used when + heuristics determine that it would likely outperform lossless compression. + +(rdp-device-redirection)= + +#### Device redirection + +Device redirection refers to the use of non-display devices over RDP. +Guacamole's RDP support currently allows redirection of audio, printing, and +disk access, some of which require additional configuration in order to +function properly. + +Audio redirection will be enabled by default. If Guacamole was correctly +installed, and audio redirection is supported by your RDP server, sound should +play within remote connections without manual intervention. + +Printing requires GhostScript to be installed on the Guacamole server, and +allows users to print arbitrary documents directly to PDF. When documents are +printed to the redirected printer, the user will receive a PDF of that document +within their web browser. + +Guacamole provides support for file transfer over RDP by emulating a virtual +disk drive. This drive will persist on the Guacamole server, confined within +the drive path specified. If drive redirection is enabled on a Guacamole RDP +connection, users will be able to upload and download files as described in +[](using-guacamole). + +`disable-audio` +: Audio is enabled by default in both the client and in libguac-client-rdp. + If you are concerned about bandwidth usage, or sound is causing problems, + you can explicitly disable sound by setting this parameter to "true". + +`enable-audio-input` +: If set to "true", audio input support (microphone) will be enabled, + leveraging the standard "`AUDIO_INPUT`" channel of RDP. By default, audio + input support within RDP is disabled. + +`enable-touch` +: If set to "true", support for multi-touch events will be enabled, leveraging + the standard "`RDPEI`" channel of RDP. By default, direct RDP support for + multi-touch events is disabled. + + Enabling support for multi-touch allows touch interaction with applications + inside the RDP session, however the touch gestures available will depend on + the level of touch support of those applications and the OS. + + If multi-touch support is not enabled, pointer-type interaction with + applications inside the RDP session will be limited to mouse or emulated + mouse events. + +`enable-printing` +: Printing is disabled by default, but with printing enabled, RDP users can + print to a virtual printer that sends a PDF containing the document + printed to the Guacamole client. Enable printing by setting this parameter + to "true". + + *Printing support requires GhostScript to be installed.* If guacd cannot + find the `gs` executable when printing, the print attempt will fail. + +`printer-name` +: The name of the redirected printer device that is passed through to the + RDP session. This is the name that the user will see in, for example, the + Devices and Printers control panel. + + If printer redirection is not enabled, this option has no effect. + +`enable-drive` +: File transfer is disabled by default, but with file transfer enabled, RDP + users can transfer files to and from a virtual drive which persists on the + Guacamole server. Enable file transfer support by setting this parameter + to "true". + + Files will be stored in the directory specified by the "`drive-path`" + parameter, which is required if file transfer is enabled. + +`disable-download` +: If set to true downloads from the remote server to client (browser) will + be disabled. This includes both downloads done via the hidden Guacamole + menu, as well as using the special "Download" folder presented to the + remote server. The default is false, which means that downloads will be + allowed. + + If file transfer is not enabled, this parameter is ignored. + +`disable-upload` +: If set to true, uploads from the client (browser) to the remote server + location will be disabled. The default is false, which means uploads will + be allowed if file transfer is enabled. + + If file transfer is not enabled, this parameter is ignored. + +`drive-name` +: The name of the filesystem used when passed through to the RDP session. + This is the name that users will see in their Computer/My Computer area + along with client name (for example, "Guacamole on Guacamole RDP"), and is + also the name of the share when accessing the special `\\tsclient` network + location. + + If file transfer is not enabled, this parameter is ignored. + +`drive-path` +: The directory on the Guacamole server in which transferred files should be + stored. This directory must be accessible by guacd and both readable and + writable by the user that runs guacd. *This parameter does not refer to a + directory on the RDP server.* + + If file transfer is not enabled, this parameter is ignored. + +`create-drive-path` +: If set to "true", and file transfer is enabled, the directory specified by + the `drive-path` parameter will automatically be created if it does not + yet exist. Only the final directory in the path will be created - if other + directories earlier in the path do not exist, automatic creation will + fail, and an error will be logged. + + By default, the directory specified by the `drive-path` parameter will not + automatically be created, and attempts to transfer files to a non-existent + directory will be logged as errors. + + If file transfer is not enabled, this parameter is ignored. + +`console-audio` +: If set to "true", audio will be explicitly enabled in the console (admin) + session of the RDP server. Setting this option to "true" only makes sense + if the `console` parameter is also set to "true". + +`static-channels` +: A comma-separated list of static channel names to open and expose as + pipes. If you wish to communicate between an application running on the + remote desktop and JavaScript, this is the best way to do it. Guacamole + will open an outbound pipe with the name of the static channel. If + JavaScript needs to communicate back in the other direction, it should + respond by opening another pipe with the same name. + + Guacamole allows any number of static channels to be opened, but protocol + restrictions of RDP limit the size of each channel name to 7 characters. + +(rdp-preconnection-pdu)= + +#### Preconnection PDU (Hyper-V / VMConnect) + +Some RDP servers host multiple logical RDP connections behind a single server +listening on a single TCP port. To select between these logical connections, an +RDP client must send the "preconnection PDU" - a message which contains values +that uniquely identify the destination, referred to as the "RDP source". This +mechanism is defined by the ["Session Selection +Extension](https://msdn.microsoft.com/en-us/library/cc242359.aspx) for the RDP +protocol, and is implemented by Microsoft's Hyper-V hypervisor. + +If you are using Hyper-V, you will need to specify the ID of the destination +virtual machine within the `preconnection-blob` parameter. This value can be +determined using PowerShell: + +```ps1con +PS C:\> Get-VM VirtualMachineName | Select-Object Id + +Id +-- +ed272546-87bd-4db9-acba-e36e1a9ca20a + + +PS C:\> +``` + +The preconnection PDU is intentionally generic. While its primary use is as a +means for selecting virtual machines behind Hyper-V, other RDP servers may use +it as well. It is up to the RDP server itself to determine whether the +preconnection ID, BLOB, or both will be used, and what their values mean. + +*If you do intend to use Hyper-V, beware that its built-in RDP server requires +different parameters for authentication and Guacamole's defaults will not +work.* In most cases, you will need to do the following when connecting to +Hyper-V: + +1. Specify both "`username`" and "`password`" appropriately, and set + "`security`" to "`vmconnect`". Selecting the "`vmconnect`" security mode + will configure Guacamole to automatically negotiate security modes known to + be supported by Hyper-V, and will automatically select Hyper-V's default RDP + port (2179). + +2. If necessary, set "`ignore-cert`" to "`true`". Hyper-V may use a self-signed + certificate. + +`preconnection-id` +: The numeric ID of the RDP source. This is a non-negative integer value + dictating which of potentially several logical RDP connections should be + used. This parameter is optional, and is only required if the RDP server + is documented as requiring it. *If using Hyper-V, this should be left + blank.* + +`preconnection-blob` +: An arbitrary string which identifies the RDP source - one of potentially + several logical RDP connections hosted by the same RDP server. This + parameter is optional, and is only required if the RDP server is + documented as requiring it, such as Hyper-V. In all cases, the meaning of + this parameter is opaque to the RDP protocol itself and is dictated by the + RDP server. *For Hyper-V, this will be the ID of the destination virtual + machine.* + +(rdp-gateway)= + +#### Remote desktop gateway + +Microsoft's remote desktop server provides an additional gateway service which +allows external connections to be forwarded to internal RDP servers which are +otherwise not accessible. If you will be using Guacamole to connect through +such a gateway, you will need to provide additional parameters describing the +connection to that gateway, as well as any required credentials. + +`gateway-hostname` +: The hostname of the remote desktop gateway that should be used as an + intermediary for the remote desktop connection. *If omitted, a gateway + will not be used.* + +`gateway-port` +: The port of the remote desktop gateway that should be used as an + intermediary for the remote desktop connection. By default, this will be + "443". + +`gateway-username` +: The username of the user authenticating with the remote desktop gateway, + if a gateway is being used. This is not necessarily the same as the user + actually using the remote desktop connection. + +`gateway-password` +: The password to provide when authenticating with the remote desktop + gateway, if a gateway is being used. + +`gateway-domain` +: The domain of the user authenticating with the remote desktop gateway, if + a gateway is being used. This is not necessarily the same domain as the + user actually using the remote desktop connection. + +(rdp-connection-broker)= + +#### Load balancing and RDP connection brokers + +If your remote desktop servers are behind a load balancer, sometimes referred +to as a "connection broker" or "TS session broker", that balancer may require +additional information during the connection process to determine how the +incoming connection should be routed. RDP does not dictate the format of this +information; it is specific to the balancer in use. + +If you are using a load balancer and are unsure whether such information is +required, *you will need to check the documentation for your balancer*. If your +balancer provides `.rdp` files for convenience, look through the contents of +those files for a string field called "loadbalanceinfo", as that field is where +the required information/cookie would be specified. + +`load-balance-info` +: The load balancing information or cookie which should be provided to the + connection broker. *If no connection broker is being used, this should be + left blank.* + +(rdp-perf-flags)= + +#### Performance flags + +RDP provides several flags which control the availability of features that +decrease performance and increase bandwidth for the sake of aesthetics, such as +wallpaper, window theming, menu effects, and smooth fonts. These features are +all disabled by default within Guacamole such that bandwidth usage is +minimized, but you can manually re-enable them on a per-connection basis if +desired. + +`enable-wallpaper` +: If set to "true", enables rendering of the desktop wallpaper. By default, + wallpaper will be disabled, such that unnecessary bandwidth need not be + spent redrawing the desktop. + +`enable-theming` +: If set to "true", enables use of theming of windows and controls. By + default, theming within RDP sessions is disabled. + +`enable-font-smoothing` +: If set to "true", text will be rendered with smooth edges. Text over RDP + is rendered with rough edges by default, as this reduces the number of + colors used by text, and thus reduces the bandwidth required for the + connection. + +`enable-full-window-drag` +: If set to "true", the contents of windows will be displayed as windows are + moved. By default, the RDP server will only draw the window border while + windows are being dragged. + +`enable-desktop-composition` +: If set to "true", graphical effects such as transparent windows and + shadows will be allowed. By default, such effects, if available, are + disabled. + +`enable-menu-animations` +: If set to "true", menu open and close animations will be allowed. Menu + animations are disabled by default. + +`disable-bitmap-caching` +: In certain situations, particularly with RDP server implementations with + known bugs, it is necessary to disable RDP's built-in bitmap caching + functionality. This parameter allows that to be controlled in a Guacamole + session. If set to "true" the RDP bitmap cache will not be used. + +`disable-offscreen-caching` +: RDP normally maintains caches of regions of the screen that are currently + not visible in the client in order to accelerate retrieval of those + regions when they come into view. This parameter, when set to "true," will + disable caching of those regions. This is usually only useful when dealing + with known bugs in RDP server implementations and should remain enabled in + most circumstances. + +`disable-glyph-caching` +: In addition to screen regions, RDP maintains caches of frequently used + symbols or fonts, collectively known as "glyphs." As with bitmap and + offscreen caching, certain known bugs in RDP implementations can cause + performance issues with this enabled, and setting this parameter to "true" + will disable that glyph caching in the RDP session. + + **Glyph caching is currently universally disabled, regardless of the value of + this parameter, as glyph caching support is not considered stable by FreeRDP + as of the FreeRDP 2.0.0 release. See: {jira}`GUACAMOLE-1191`.** + +(rdp-remoteapp)= + +#### RemoteApp + +Recent versions of Windows provide a feature called RemoteApp which allows +individual applications to be used over RDP, without providing access to the +full desktop environment. If your RDP server has this feature enabled and +configured, you can configure Guacamole connections to use those individual +applications. + +`remote-app` +: Specifies the RemoteApp to start on the remote desktop. If supported by + your remote desktop server, this application, and only this application, + will be visible to the user. + + Windows requires a special notation for the names of remote applications. + The names of remote applications must be prefixed with two vertical bars. + For example, if you have created a remote application on your server for + `notepad.exe` and have assigned it the name "notepad", you would set this + parameter to: "`||notepad`". + +`remote-app-dir` +: The working directory, if any, for the remote application. This parameter + has no effect if RemoteApp is not in use. + +`remote-app-args` +: The command-line arguments, if any, for the remote application. This + parameter has no effect if RemoteApp is not in use. + +(adding-rdp)= + +#### Adding an RDP connection + +If you are using the default authentication built into Guacamole, and you wish +to grant access to a RDP connection to a particular user, you need to locate +the `` section for that user within your `user-mapping.xml`, and add +a section like the following within it: + +```xml + + rdp + localhost + 3389 + +``` + +If added exactly as above, a new connection named "`Unique Name`" will be +available to the user associated with the `` section containing it. +The connection will use RDP to connect to localhost at port 3389. Naturally, +you will want to change some or all of these values. + +If you want to login automatically rather than receive a login prompt upon +connecting, you can specify a username and password with additional `` +tags. Other options are available for controlling the color depth, size of the +screen, etc. + +Other authentication methods will provide documentation describing how to +configure new connections. If the authentication method in use fully implements +the features of Guacamole's authentication API, you will be able to add a new +RDP connection easily and intuitively using the administration interface built +into Guacamole. You will not need to edit configuration files. + +### SSH + +Unlike VNC or RDP, SSH is a text protocol. Its implementation in Guacamole is +actually a combination of a terminal emulator and SSH client, because the SSH +protocol isn't inherently graphical. Guacamole's SSH support emulates a +terminal on the server side, and draws the screen of this terminal remotely on +the client. + +SSH support for Guacamole is provided by the libguac-client-ssh library, which +will be installed as part of guacamole-server if the required dependencies are +present during the build. + +:::{note} +In addition to the SSH-specific parameters below, Guacamole's SSH support also +accepts the parameters of several features that Guacamole provides for multiple +protocols: + +* [](disable-clipboard) +* [](graphical-recording) +* [](typescripts) +* [](stdin-pipe) +* [](terminal-behavior) +* [](terminal-display-settings) +* [](wake-on-lan) +::: + +(ssh-host-verification)= + +#### SSH Host Verification + +By default, Guacamole does not do any verification of host identity before +establishing SSH connections. While this may be safe for private and trusted +networks, it is not ideal for large networks with unknown/untrusted systems, or +for SSH connections that traverse the Internet. The potential exists for +Man-in-the-Middle (MitM) attacks when connecting to these hosts. + +Guacamole includes two methods for verifying SSH (and SFTP) server identity +that can be used to make sure that the host you are connecting to is a host +that you know and trust. The first method is by reading a file in +`GUACAMOLE_HOME` called `ssh_known_hosts`. This file should be in the format of +a standard OpenSSH `known_hosts` file. If the file is not present, no +verification is done. If the file is present, it is read in at connection time +and remote host identities are verified against the keys present in the file. + +The second method for verifying host identity is by passing a connection +parameter that contains an OpenSSH known hosts entry for that specific host. +The `host-key` parameter is used for SSH connections, while the SFTP +connections associated with RDP and VNC use the `sftp-host-key` parameter. If +these parameters are not present on their respective connections no host +identity verification is performed. If the parameter is present then the +identity of the remote host is verified against the identity provided in the +parameter before a connection is established. + +(ssh-network-parameters)= + +#### Network parameters + +SSH connections require a hostname or IP address defining the destination +machine. SSH is standardized to use port 22 and this will be the proper value +in most cases. You only need to specify the SSH port if you are not using the +standard port. + +`hostname` +: The hostname or IP address of the SSH server Guacamole should connect to. + +`port` +: The port the SSH server is listening on, usually 22. This parameter is + optional. If this is not specified, the default of 22 will be used. + +`host-key` +: The known hosts entry for the SSH server. This parameter is optional, and, + if not provided, no verification of host identity will be done. If the + parameter is provided the identity of the server will be checked against + the data. + + The format of this parameter is that of a single entry from an OpenSSH + `known_hosts` file. + + For more information, please see [](ssh-host-verification). + +`server-alive-interval` +: By default the SSH client does not send keepalive requests to the server. + This parameter allows you to configure the the interval in seconds at + which the client connection sends keepalive packets to the server. The + default is 0, which disables sending the packets. The minimum value is 2. + +(ssh-authentication)= + +#### Authentication + +SSH provides authentication through passwords and public key authentication, +and also supports the "NONE" method. + +SSH "NONE" authentication is seen occasionally in appliances and items like +network or SAN fabric switches. Generally for this authentication method you +need only provide a username. + +For Guacamole to use public key authentication, it must have access to your +private key and, if applicable, its passphrase. If the private key requires a +passphrase, but no passphrase is provided, you will be prompted for the +passphrase upon connecting. + +If no private key is provided, Guacamole will attempt to authenticate using a +password, reading that password from the connection parameters, if provided, or +by prompting the user directly. + +`username` +: The username to use to authenticate, if any. This parameter is optional. + If not specified, you will be prompted for the username upon connecting. + +`password` +: The password to use when attempting authentication, if any. This parameter + is optional. If not specified, you will be prompted for your password upon + connecting. + +`private-key` +: The entire contents of the private key to use for public key + authentication. If this parameter is not specified, public key + authentication will not be used. The private key must be in OpenSSH + format, as would be generated by the OpenSSH {command}`ssh-keygen` + utility. + +`passphrase` +: The passphrase to use to decrypt the private key for use in public key + authentication. This parameter is not needed if the private key does not + require a passphrase. If the private key requires a passphrase, but this + parameter is not provided, the user will be prompted for the passphrase + upon connecting. + +(ssh-command)= + +#### Running a command (instead of a shell) + +By default, SSH sessions will start an interactive shell. The shell which will +be used is determined by the SSH server, normally by reading the user's default +shell previously set with `chsh` or within `/etc/passwd`. If you wish to +override this and instead run a specific command, you can do so by specifying +that command in the configuration of the Guacamole SSH connection. + +`command` +: The command to execute over the SSH session, if any. This parameter is + optional. If not specified, the SSH session will use the user's default + shell. + +#### Internationalization/Locale settings + +The language of the session is normally set by the SSH server. If the SSH +server allows the relevant environment variable to be set, the language can be +overridden on a per-connection basis. + +`locale` +: The specific locale to request for the SSH session. This parameter is + optional and may be any value accepted by the `LANG` environment variable + of the SSH server. If not specified, the SSH server's default locale will + be used. + + As this parameter is sent to the SSH server using the `LANG` environment + variable, the parameter will only have an effect if the SSH server allows + the `LANG` environment variable to be set by SSH clients. + +`timezone` +: This parameter allows you to control the timezone that is sent to the + server over the SSH connection, which will change the way local time is + displayed on the server. + + The mechanism used to do this over SSH connections is by setting the `TZ` + variable on the SSH connection to the timezone specified by this + parameter. This means that the SSH server must allow the `TZ` variable to + be set/overriden - many SSH server implementations have this disabled by + default. To get this to work, you may need to modify the configuration of + the SSH server and explicitly allow for `TZ` to be set/overriden. + + The available values of this parameter are standard IANA key zone format + timezones, and the value will be sent directly to the server in this + format. + +(ssh-sftp)= + +#### SFTP + +Guacamole provides support for file transfer over SSH using SFTP, the +file transfer protocol built into most SSH servers. If SFTP is enabled +on a Guacamole SSH connection, users will be able to upload and download +files as described in [](using-guacamole) + +`enable-sftp` +: Whether file transfer should be enabled. If set to "true", the user will + be allowed to upload or download files from the SSH server using SFTP. + Guacamole includes the {program}`guacctl` utility which controls file + downloads and uploads when run on the SSH server by the user over the SSH + connection. + +`sftp-root-directory` +: The directory to expose to connected users via Guacamole's [file + browser](file-browser). If omitted, the root directory will be used by + default. + +`sftp-disable-download` +: If set to true downloads from the remote system to the client (browser) + will be disabled. The default is false, which means that downloads will be + enabled. + + If SFTP is not enabled, this parameter will be ignored. + +`sftp-disable-upload` +: If set to true uploads from the client (browser) to the remote system will + be disabled. The default is false, which means that uploads will be + enabled. + + If SFTP is not enabled, this parameter will be ignored. + +(adding-ssh)= + +#### Adding an SSH connection + +If you are using the default authentication built into Guacamole, and +you wish to grant access to a SSH connection to a particular user, you +need to locate the `` section for that user within your +`user-mapping.xml`, and add a section like the following within it: + +```xml + + ssh + localhost + 22 + +``` + +If added exactly as above, a new connection named "`Unique Name`" will be +available to the user associated with the `` section containing it. +The connection will use SSH to connect to localhost at port 22. Naturally, you +will want to change some or all of these values. + +If you want to login automatically rather than receive a login prompt upon +connecting, you can specify a username and password with additional `` +tags. Other options are available for controlling the font. + +Other authentication methods will provide documentation describing how to +configure new connections. + +### Telnet + +Telnet is a text protocol and provides similar functionality to SSH. By nature, +it is not encrypted, and does not provide support for file transfer. As far as +graphics are concerned, Guacamole's telnet support works in the same manner as +SSH: it emulates a terminal on the server side which renders to the Guacamole +client's display. + +Telnet support for Guacamole is provided by the libguac-client-telnet library, +which will be installed as part of guacamole-server if the required +dependencies are present during the build. + +:::{note} +In addition to the telnet-specific parameters below, Guacamole's telnet support +also accepts the parameters of several features that Guacamole provides for +multiple protocols: + +* [](disable-clipboard) +* [](graphical-recording) +* [](typescripts) +* [](stdin-pipe) +* [](terminal-behavior) +* [](terminal-display-settings) +* [](wake-on-lan) +::: + +(telnet-network-parameters)= + +#### Network parameters + +Telnet connections require a hostname or IP address defining the +destination machine. Telnet is standardized to use port 23 and this will +be the proper value in most cases. You only need to specify the telnet +port if you are not using the standard port. + +`hostname` +: The hostname or IP address of the telnet server Guacamole should connect + to. + +`port` +: The port the telnet server is listening on, usually 23. This parameter is + optional. If this is not specified, the default of 23 will be used. + +(telnet-authentication)= + +#### Authentication + +Telnet does not actually provide any standard means of authentication. +Authentication over telnet depends entirely on the login process running on the +server and is interactive. To cope with this, Guacamole provides non-standard +mechanisms for automatically passing the username and entering password. +Whether these mechanisms work depends on specific login process used by your +telnet server. + +The de-facto method for passing the username automatically via telnet is to +submit it via the `USER` environment variable, sent using the NEW-ENVIRON +option. This is the mechanism used by most telnet clients, typically via the +`-l` command-line option. + +Passwords cannot typically be sent automatically - at least not as reliably as +the username. There is no `PASSWORD` environment variable (this would actually +be a horrible idea) nor any similar mechanism for passing the password to the +telnet login process, and most telnet clients provide no built-in support for +automatically entering the password. The best that can be done is to +heuristically detect the password prompt, and type the password on behalf of +the user when the prompt appears. The prescribed method for doing this with a +traditional command-line telnet is to use a utility like `expect`. Guacamole +provides similar functionality by searching for the password prompt with a +regular expression. + +If Guacamole receives a line of text which matches the regular expression, the +password is automatically sent. If no such line is ever received, the password +is not sent, and the user must type the password manually. Pressing any key +during this process cancels the heuristic password prompt detection. + +If the password prompt is not being detected properly, you can try using your +own regular expression by specifying it within the `password-regex` parameter. +The regular expression must be written in the POSIX ERE dialect (the dialect +typically used by `egrep`). + +`username` +: The username to use to authenticate, if any. This parameter is optional. + If not specified, or not supported by the telnet server, the login process + on the telnet server will prompt you for your credentials. For this to + work, your telnet server must support the NEW-ENVIRON option, and the + telnet login process must pay attention to the `USER` environment + variable. Most telnet servers satisfy this criteria. + +`password` +: The password to use when attempting authentication, if any. This parameter + is optional. If specified, your password will be typed on your behalf when + the password prompt is detected. + +`username-regex` +: The regular expression to use when waiting for the username prompt. This + parameter is optional. If not specified, a reasonable default built into + Guacamole will be used. The regular expression must be written in the + POSIX ERE dialect (the dialect typically used by `egrep`). + +`password-regex` +: The regular expression to use when waiting for the password prompt. This + parameter is optional. If not specified, a reasonable default built into + Guacamole will be used. The regular expression must be written in the + POSIX ERE dialect (the dialect typically used by `egrep`). + +`login-success-regex` +: The regular expression to use when detecting that the login attempt has + succeeded. This parameter is optional. If specified, the terminal display + will not be shown to the user until text matching this regular expression + has been received from the telnet server. The regular expression must be + written in the POSIX ERE dialect (the dialect typically used by `egrep`). + +`login-failure-regex` +: The regular expression to use when detecting that the login attempt has + failed. This parameter is optional. If specified, the connection will be + closed with an explicit login failure error if text matching this regular + expression has been received from the telnet server. The regular + expression must be written in the POSIX ERE dialect (the dialect typically + used by `egrep`). + +(adding-telnet)= + +#### Adding a telnet connection + +If you are using the default authentication built into Guacamole, and you wish +to grant access to a telnet connection to a particular user, you need to locate +the `` section for that user within your `user-mapping.xml`, and add +a section like the following within it: + +```xml + + telnet + localhost + 23 + +``` + +If added exactly as above, a new connection named "`Unique Name`" will be +available to the user associated with the `` section containing it. +The connection will use telnet to connect to localhost at port 23. Naturally, +you will want to change some or all of these values. + +As telnet is inherently insecure compared to SSH, you should use SSH instead +wherever possible. If Guacamole is set up to use HTTPS then communication with +the Guacamole *client* will be encrypted, but communication between guacd and +the telnet server will still be unencrypted. You should not use telnet unless +the network between guacd and the telnet server is trusted. + +### Kubernetes + +Kubernetes provides an API for attaching to the console of a container over the +network. As with SSH and telnet, Guacamole's Kubernetes support emulates a +terminal on the server side which renders to the Guacamole client's display. + +Kubernetes support for Guacamole is provided by the libguac-client-kubernetes +library, which will be installed as part of guacamole-server if the required +dependencies are present during the build. + +:::{note} +In addition to the Kubernetes-specific parameters below, Guacamole's Kubernetes +support also accepts the parameters of several features that Guacamole provides +for multiple protocols: + +* [](disable-clipboard) +* [](graphical-recording) +* [](typescripts) +* [](stdin-pipe) +* [](terminal-behavior) +* [](terminal-display-settings) +* [](wake-on-lan) +::: + + +(kubernetes-network-parameters)= + +#### Network/Container parameters + +Attaching to a Kubernetes container requires the hostname or IP address of the +Kubernetes server and the name of the pod containing the container in question. +By default, Guacamole will attach to the first container in the pod. If there +are multiple containers in the pod, you may wish to also specify the container +name. + +`hostname` +: The hostname or IP address of the Kubernetes server + that Guacamole should connect to. + +`port` +: The port the Kubernetes server is listening on for + API connections. *This parameter is optional.* If + omitted, port 8080 will be used by default. + +`namespace` +: The name of the Kubernetes namespace of the pod containing the container + being attached to. *This parameter is optional.* If omitted, the namespace + "default" will be used. + +`pod` +: The name of the Kubernetes pod containing with the container being + attached to. + +`container` +: The name of the container to attach to. *This parameter is optional.* If + omitted, the first container in the pod will be used. + +`exec-command` +: The command to run within the container, with input and output attached to + this command's process. *This parameter is optional.* If omitted, no + command will be run, and input/output will instead be attached to the main + process of the container. + + When this parameter is specified, the behavior of the connection is + analogous to running {command}`kubectl exec`. When omitted, the behavior + is analogous to running {command}`kubectl attach`. + +(kubernetes-authentication)= + +#### Authentication and SSL/TLS + +If enabled, Kubernetes uses SSL/TLS for both encryption and authentication. +Standard SSL/TLS client authentication requires both a client certificate and +client key, which Guacamole will use to identify itself to the Kubernetes +server. If the certificate used by Kubernetes is self-signed or signed by a +non-standard certificate authority, the certificate for the certificate +authority will also be needed. + +`use-ssl` +: If set to "true", SSL/TLS will be used to connect to the Kubernetes + server. *This parameter is optional.* By default, SSL/TLS will not be + used. + +`client-cert` +: The certificate to use if performing SSL/TLS client authentication to + authenticate with the Kubernetes server, in PEM format. *This parameter is + optional.* If omitted, SSL client authentication will not be performed. + +`client-key` +: The key to use if performing SSL/TLS client authentication to authenticate + with the Kubernetes server, in PEM format. *This parameter is optional.* + If omitted, SSL client authentication will not be performed. + +`ca-cert` +: The certificate of the certificate authority that signed the certificate + of the Kubernetes server, in PEM format. *This parameter is optional.* If + omitted, verification of the Kubernetes server certificate will use only + system-wide certificate authorities. + +`ignore-cert` +: If set to "true", the validity of the SSL/TLS certificate used by the + Kubernetes server will be ignored if it cannot be validated. *This + parameter is optional.* By default, SSL/TLS certificates are validated. + +(adding-kubernetes)= + +#### Adding a Kubernetes connection + +If you are using the default authentication built into Guacamole, and you wish +to grant access to a Kubernetes connection to a particular user, you need to +locate the `` section for that user within your `user-mapping.xml`, +and add a section like the following within it: + +```xml + + kubernetes + localhost + mypod + +``` + +If added exactly as above, a new connection named "`Unique Name`" will be +available to the user associated with the `` section containing it. +The connection will connect to the Kubernetes server running on localhost and +attach to the first container of the pod "mypod". + +### Common configuration options + +(disable-clipboard)= + +#### Disabling clipboard access + +Guacamole provides bidirectional access to the clipboard by default for all +supported protocols. For protocols that don't inherently provide a clipboard, +Guacamole implements its own clipboard. This behavior can be overridden on a +per-connection basis with the `disable-copy` and `disable-paste` parameters. + +`disable-copy` +: If set to "true", text copied within the remote desktop session will not + be accessible by the user at the browser side of the Guacamole session, + and will be usable only within the remote desktop. This parameter is + optional. By default, the user will be given access to the copied text. + +`disable-paste` +: If set to "true", text copied at the browser side of the Guacamole session + will not be accessible within the remote ddesktop session. This parameter + is optional. By default, the user will be able to paste data from outside + the browser within the remote desktop session. + +(common-sftp)= + +#### File transfer via SFTP + +Guacamole can provide file transfer over SFTP even when the remote desktop is +otherwise being accessed through a different protocol, like VNC or RDP. If SFTP +is enabled on a Guacamole RDP connection, users will be able to upload and +download files as described in [](using-guacamole). + +This support is independent of the file transfer that may be provided by the +protocol in use, like RDP's own "drive redirection" (RDPDR), and is +particularly useful for remote desktop servers which do not support file +transfer features. + +`enable-sftp` +: Whether file transfer should be enabled. If set to "true", the user will + be allowed to upload or download files from the specified server using + SFTP. If omitted, SFTP will be disabled. + +`sftp-hostname` +: The hostname or IP address of the server hosting SFTP. This parameter is + optional. If omitted, the hostname of the remote desktop server associated + with the connection will be used. + +`sftp-port` +: The port the SSH server providing SFTP is listening on, usually 22. This + parameter is optional. If omitted, the standard port of 22 will be used. + +`sftp-host-key` +: The known hosts entry for the SFTP server. This parameter is optional, + and, if not provided, no verification of SFTP host identity will be done. + If the parameter is provided the identity of the server will be checked + against the data. + + The format of this parameter is that of a single entry from an OpenSSH + `known_hosts` file. + + For more information, please see [](ssh-host-verification). + +`sftp-username` +: The username to authenticate as when connecting to the specified SSH + server for SFTP. This parameter is optional if a username is specified for + the remote desktop connection. If omitted, the username specified for the + remote desktop connection will be used. + +`sftp-password` +: The password to use when authenticating with the specified SSH server for + SFTP. + +`sftp-private-key` +: The entire contents of the private key to use for public key + authentication. If this parameter is not specified, public key + authentication will not be used. The private key must be in OpenSSH + format, as would be generated by the OpenSSH {command}`ssh-keygen` + utility. + +`sftp-passphrase` +: The passphrase to use to decrypt the private key for use in public key + authentication. This parameter is not needed if the private key does not + require a passphrase. + +`sftp-directory` +: The directory to upload files to if they are simply dragged and dropped, + and thus otherwise lack a specific upload location. This parameter is + optional. If omitted, the default upload location of the SSH server + providing SFTP will be used. + +`sftp-root-directory` +: The directory to expose to connected users via Guacamole's + [](file-browser). If omitted, the root directory will be used by default. + +`sftp-server-alive-interval` +: The interval in seconds at which to send keepalive packets to the SSH + server for the SFTP connection. This parameter is optional. If omitted, + the default of 0 will be used, disabling sending keepalive packets. The + minimum value is 2. + +`sftp-disable-download` +: If set to true downloads from the remote system to the client (browser) + will be disabled. The default is false, which means that downloads will be + enabled. + + If sftp is not enabled, this parameter will be ignored. + +`sftp-disable-upload` +: If set to true uploads from the client (browser) to the remote system will + be disabled. The default is false, which means that uploads will be + enabled. + + If sftp is not enabled, this parameter will be ignored. + +(graphical-recording)= + +#### Graphical session recording + +Sessions of all supported protocols can be recorded graphically. These +recordings take the form of Guacamole protocol dumps and are recorded +automatically to a specified directory. Recordings can be subsequently +[played back directly in the browser from the connection history screen](recording-playback) +or translated to a normal video stream using the {program}`guacenc` utility +provided with guacamole-server. + +For example, to produce a video called {samp}`{NAME}.m4v` from the recording +"`NAME`", you would run: + +```console +$ guacenc /path/to/recording/NAME +``` + +The {program}`guacenc` utility has additional options for overriding default +behavior, including tweaking the output format, which are documented in detail +within the manpage: + +```console +$ man guacenc +``` + +If recording of key events is explicitly enabled using the +`recording-include-keys` parameter, recordings can also be translated into +human-readable interpretations of the keys pressed during the session using the +{program}`guaclog` utility. The usage of {program}`guaclog` is analogous to +{program}`guacenc`, and results in the creation of a new text file containing +the interpreted events: + +```console +$ guaclog /path/to/recording/NAME +guaclog: INFO: Guacamole input log interpreter (guaclog) version 1.5.5 +guaclog: INFO: 1 input file(s) provided. +guaclog: INFO: Writing input events from "/path/to/recording/NAME" to "/path/to/recording/NAME.txt" ... +guaclog: INFO: All files interpreted successfully. +$ +``` + +:::{important} +Guacamole will never overwrite an existing recording. If necessary, a numeric +suffix like ".1", ".2", ".3", etc. will be appended to to avoid +overwriting an existing recording. If even appending a numeric suffix does not +help, the session will simply not be recorded. +::: + +`recording-path` +: The directory in which screen recording files should be created. *If a + graphical recording needs to be created, then this parameter is required.* + Specifying this parameter enables graphical screen recording. If this + parameter is omitted, no graphical recording will be created. + +`create-recording-path` +: If set to "true", the directory specified by the `recording-path` + parameter will automatically be created if it does not yet exist. Only the + final directory in the path will be created - if other directories earlier + in the path do not exist, automatic creation will fail, and an error will + be logged. + + *This parameter is optional.* By default, the directory specified by the + `recording-path` parameter will not automatically be created, and attempts + to create recordings within a non-existent directory will be logged as + errors. + + This parameter only has an effect if graphical recording is enabled. If + the `recording-path` is not specified, graphical session recording will be + disabled, and this parameter will be ignored. + +`recording-name` +: The filename to use for any created recordings. *This parameter is + optional.* If omitted, the value "recording" will be used instead. + + This parameter only has an effect if graphical recording is enabled. If + the `recording-path` is not specified, graphical session recording will be + disabled, and this parameter will be ignored. + +`recording-exclude-output` +: If set to "true", graphical output and other data normally streamed from + server to client will be excluded from the recording, producing a + recording which contains only user input events. *This parameter is + optional.* If omitted, graphical output will be included in the recording. + + This parameter only has an effect if graphical recording is enabled. If + the `recording-path` is not specified, graphical session recording will be + disabled, and this parameter will be ignored. + +`recording-exclude-mouse` +: If set to "true", user mouse events will be excluded from the recording, + producing a recording which lacks a visible mouse cursor. *This parameter + is optional.* If omitted, mouse events will be included in the recording. + + This parameter only has an effect if graphical recording is enabled. If + the `recording-path` is not specified, graphical session recording will be + disabled, and this parameter will be ignored. + +`recording-include-keys` +: If set to "true", user key events will be included in the recording. The + recording can subsequently be passed through the {program}`guaclog` utility + to produce a human-readable interpretation of the keys pressed during the + session. *This parameter is optional.* If omitted, key events will be not + included in the recording. + + This parameter only has an effect if graphical recording is enabled. If + the `recording-path` is not specified, graphical session recording will be + disabled, and this parameter will be ignored. + +(typescripts)= + +#### Text session recording (typescripts) + +The full, raw text content of SSH sessions, including timing information, can +be recorded automatically to a specified directory. This recording, also known +as a "typescript", will be written to two files within the directory specified +by `typescript-path`: {samp}`{NAME}`, which contains the raw text data, and +{samp}`{NAME}.timing`, which contains timing information, where `NAME` is the +value provided for the `typescript-name` parameter. + +This format is compatible with the format used by the standard UNIX +{command}`script` command, and can be replayed using {command}`scriptreplay` +(if installed). For example, to replay a typescript called "`NAME`", you would +run: + +```console +$ scriptreplay NAME.timing NAME +``` + +:::{important} +Guacamole will never overwrite an existing recording. If necessary, a numeric +suffix like ".1", ".2", ".3", etc. will be appended to `NAME` to avoid +overwriting an existing recording. If even appending a numeric suffix does not +help, the session will simply not be recorded. +::: + +`typescript-path` +: The directory in which typescript files should be created. *If a + typescript needs to be recorded, this parameter is required.* Specifying + this parameter enables typescript recording. If this parameter is omitted, + no typescript will be recorded. + +`create-typescript-path` +: If set to "true", the directory specified by the `typescript-path` + parameter will automatically be created if it does not yet exist. Only the + final directory in the path will be created - if other directories earlier + in the path do not exist, automatic creation will fail, and an error will + be logged. + + *This parameter is optional.* By default, the directory specified by the + `typescript-path` parameter will not automatically be created, and + attempts to record typescripts in a non-existent directory will be logged + as errors. + + This parameter only has an effect if typescript recording is enabled. If + the `typescript-path` is not specified, recording of typescripts will be + disabled, and this parameter will be ignored. + +`typescript-name` +: The base filename to use when determining the names for the data and + timing files of the typescript. *This parameter is optional.* If omitted, + the value "typescript" will be used instead. + + Each typescript consists of two files which are created within the + directory specified by `typescript-path`: {samp}`{NAME}`, which contains + the raw text data, and {samp}`{NAME}.timing`, which contains timing + information, where `NAME` is the value provided for the `typescript-name` + parameter. + + This parameter only has an effect if typescript recording is enabled. If + the `typescript-path` is not specified, recording of typescripts will be + disabled, and this parameter will be ignored. + +(terminal-behavior)= + +#### Controlling terminal behavior + +In most cases, the default behavior for a terminal works without modification. +However, when connecting to certain systems, particularly operating systems +other than Linux, the terminal behavior may need to be tweaked to allow it to +operate properly. The settings in this section control that behavior. + +`backspace` +: This parameter controls the ASCII code that the backspace key sends to the + remote system. Under most circumstances this should not need to be + adjusted; however, if, when pressing the backspace key, you see control + characters (often either ^? or ^H) instead of seeing the text erased, you + may need to adjust this parameter. By default the terminal sends ASCII + code 127 (Delete) if this option is not set. + +`terminal-type` +: This parameter sets the terminal emulator type string that is passed to + the server. This parameter is optional. If not specified, "`linux`" is used + as the terminal emulator type by default. + +(stdin-pipe)= + +##### Providing terminal input directly from JavaScript + +If Guacamole is being used in part to automate an SSH, telnet, or other +terminal session, it can be useful to provide input directly from JavaScript as +a raw stream of data, rather than attempting to translate data into keystrokes. +This can be done through opening a pipe stream named "STDIN" within the +connection using the [`createPipeStream()`](http://guacamole.apache.org/doc/guacamole-common-js/Guacamole.Client.html#createPipeStream) +function of [`Guacamole.Client`](http://guacamole.apache.org/doc/guacamole-common-js/Guacamole.Client.html): + +```javascript +var outputStream = client.createPipeStream('text/plain', 'STDIN'); +``` + +The resulting [`Guacamole.OutputStream`](http://guacamole.apache.org/doc/guacamole-common-js/Guacamole.OutputStream.html) +can then be used to stream data directly to the input of the terminal session, +as if typed by the user: + +```javascript +// Wrap output stream in writer +var writer = new Guacamole.StringWriter(outputStream); + +// Send text +writer.sendText("hello"); + +// Send more text +writer.sendText("world"); + +// Close writer and stream +writer.sendEnd(); +``` + +(terminal-display-settings)= + +#### Terminal display settings + +Guacamole's terminal emulator (used by SSH, telnet, and Kubernetes support) +provides options for configuring the font used and its size. In this case, *the +chosen font must be installed on the server*, as it is the server that will +handle rendering of characters to the terminal display, not the client. + +`color-scheme` +: The color scheme to use for the terminal session. It consists of a + semicolon-separated series of name-value pairs. Each name-value pair is + separated by a colon and assigns a value to a color in the terminal + emulator palette. For example, to use blue text on white background by + default, and change the red color to a purple shade, you would specify: + + ``` + foreground: rgb:00/00/ff; + background: rgb:ff/ff/ff; + color9: rgb:80/00/80 + ``` + + This format is similar to the color configuration format used by Xterm, so + Xterm color configurations can be easily adapted for Guacamole. This + parameter is optional. If not specified, Guacamole will render text as + gray over a black background. + + Possible color names are: + + `foreground` + : Set the default foreground color. + + `background` + : Set the default background color. + + {samp}`color{N}` + : Set the color at index `N` on the Xterm 256-color palette. For example, + `color9` refers to the red color. + + Possible color values are: + + {samp}`rgb:{RR}/{GG}/{BB}` + : Use the specified color in RGB format, with each component in + hexadecimal. For example, `rgb:ff/00/00` specifies the color red. Note + that each hexadecimal component can be one to four digits, but the + effective values are always zero-extended or truncated to two digits; + for example, `rgb:f/8/0`, `rgb:f0/80/00`, and `rgb:f0f/808/00f` all + refer to the same effective color. + + {samp}`color{N}` + : Use the color currently assigned to index `N` on the Xterm 256-color + palette. For example, `color9` specifies the current red color. Note + that the color value is used rather than the color reference, so if + `color9` is changed later in the color scheme configuration, that new + color will not be reflected in this assignment. + + For backward compatibility, Guacamole will also accept four special values as + the color scheme parameter: + + `black-white` + : Black text over a white background. + + `gray-black` + : Gray text over a black background. This is the default color scheme. + + `green-black` + : Green text over a black background. + + `white-black` + : White text over a black background. + +`font-name` +: The name of the font to use. This parameter is optional. If not specified, + the default of "monospace" will be used instead. + +`font-size` +: The size of the font to use, in points. This parameter is optional. If not + specified, the default of 12 will be used instead. + +`scrollback` +: The maximum number of rows to allow within the terminal scrollback buffer. + This parameter is optional. If not specified, the scrollback buffer will + be limited to a maximum of 1000 rows. + +(wake-on-lan)= + +#### Wake-on-LAN + +Guacamole implements the support to send a "magic wake-on-lan packet" to a +remote host prior to attempting to establish a connection with the host. The +below parameters control the behavior of this functionality, which is disabled +by default. + +:::{important} +There are several factors that can impact the ability of Wake-on-LAN (WoL) to +function correctly, many of which are outside the scope of Guacamole +configuration. If you are configuring WoL within Guacamole you should also be +familiar with the other components that need to be configured in order for it +to function correctly. +::: + +`wol-send-packet` +: If set to "true", Guacamole will attempt to send the Wake-On-LAN packet + prior to establishing a connection. This parameter is optional. By + default, Guacamole will not send the WoL packet. Enabling this option + requires that the `wol-mac-addr` parameter also be configured, otherwise + the WoL packet will not be sent. + +`wol-mac-addr` +: This parameter configures the MAC address that Guacamole will use in the + magic WoL packet to attempt to wake the remote system. If + `wol-send-packet` is enabled, this parameter is required or else the WoL + packet will not be sent. + +`wol-broadcast-addr` +: This parameter configures the IPv4 broadcast address or IPv6 multicast + address that Guacamole will send the WoL packet to in order to wake the + host. This parameter is optional. If no value is provided, the default + local IPv4 broadcast address (255.255.255.255) will be used. + +`wol-udp-port` +: This parameter configures the UDP port that will be set in the WoL packet. + In most cases the UDP port isn't processed by the system that will be + woken up; however, there are certain cases where it is useful for the port + to be set, as in situations where a router is listening for the packet and + can make routing decisions depending upon the port that is used. If not + configured the default UDP port 9 will be used. + +`wol-wait-time` +: By default after the WoL packet is sent Guacamole will attempt immediately + to connect to the remote host. It may be desirable in certain scenarios to + have Guacamole wait before the initial connection in order to give the + remote system time to boot. Setting this parameter to a positive value + will cause Guacamole to wait the specified number of seconds before + attempting the initial connection. This parameter is optional. + +(parameter-tokens)= + +### Parameter tokens + +The values of connection parameters can contain "tokens" which will be replaced +by Guacamole when used. These tokens allow the values of connection parameters +to vary dynamically by the user using the connection, and provide a simple +means of forwarding authentication information without storing that information +in the connection configuration itself, so long as the remote desktop +connection uses the same credentials as Guacamole. + +Each token is of the form {samp}`$\{{TOKEN_NAME}\}` or +{samp}`$\{{TOKEN_NAME}:{MODIFIER}\}`, where `TOKEN_NAME` is some descriptive +name for the value the token represents, and the optional `MODIFIER` is one of +the modifiers documented below to dynamically modify the token. Tokens with no +corresponding value will never be replaced, but should you need such text +within your connection parameters, and wish to guarantee that this text will +not be replaced with a token value, you can escape the token by adding an +additional leading "$", as in "{samp}`$$\{{TOKEN_NAME}\}`". + +`${GUAC_USERNAME}` +: The username of the current Guacamole user. When a user accesses a + connection, this token will be dynamically replaced with the username they + provided when logging in to Guacamole. + +`${GUAC_PASSWORD}` +: The password of the current Guacamole user. When a user accesses a + connection, this token will be dynamically replaced with the password they + used when logging in to Guacamole. + +`${GUAC_CLIENT_ADDRESS}` +: The IPv4 or IPv6 address of the current Guacamole user. This will be the + address of the client side of the HTTP connection to the Guacamole server + at the time the current user logged in. + +`${GUAC_CLIENT_HOSTNAME}` +: The hostname of the current Guacamole user. This will be the hostname of + the client side of the HTTP connection to the Guacamole server at the time + the current user logged in. If no such hostname can be determined, the + IPv4 or IPv6 address will be used instead, and this token will be + equivalent to `${GUAC_CLIENT_ADDRESS}`. + +`${GUAC_DATE}` +: The current date in the local time zone of the Guacamole server. This will + be written in "YYYYMMDD" format, where "YYYY" is the year, "MM" is the + month number, and "DD" is the day of the month, all zero-padded. When a + user accesses a connection, this token will be dynamically replaced with + the date that the connection began. + +`${GUAC_TIME}` +: The current time in the local time zone of the Guacamole server. This will + be written in "HHMMSS" format, where "HH" is hours in 24-hour time, "MM" + is minutes, and "SS" is seconds, all zero-padded. When a user accesses a + connection, this token will be dynamically replaced with the time that the + connection began. + +Note that these tokens are replaced dynamically each time a connection is used. +If two different users access the same connection at the same time, both users +will be connected independently of each other using different sets of +connection parameters. + +#### Token modifiers + +At times it can be useful to use the value provided by a token, but with slight +modifications. These modifers are optionally specified at the end of the token, +separated from the token name by a colon (`:`), in the format +{samp}`$\{{TOKEN_NAME}:{MODIFIER}\}`. The following modifiers are currently +supported: + +`LOWER` +: Convert the entire value of the token to lower-case. This can be useful in + situations where users log in to Guacamole with a mixed-case username, but + a remote system requires the username be lower-case. + +`UPPER` +: Convert the entire value of the token to upper-case. + +(extension-tokens)= + +#### Extension-specific tokens + +Each extension can also implement its own arbitrary tokens that can +dynamically fill in values provided by the extension. Within these +extensions, attribute names are canonicalized into a standard format +that consists of all capital letters separated by underscores. + +(cas-tokens)= + +##### CAS Extension Tokens + +The CAS extension will read attributes provided by the CAS server when a user +is authenticated and will make those attributes available as tokens. The CAS +server must be specifically configured to release certain attributes to the +client (Guacamole), and configuration of that is outside the scope of this +document. Any attribute that the CAS server is configured to release should be +available to Guacamole as a token for use within a connection. The token name +will be prepended with the `CAS_` prefix. A CAS server configured to release +attributes `firstname`, `lastname`, `email`, and `mobile` would produce the +following tokens: + +* `${CAS_FIRSTNAME}` +* `${CAS_LASTNAME}` +* `${CAS_EMAIL}` +* `${CAS_MOBILE}` + +(ldap-tokens)= + +##### LDAP Extension Tokens + +The LDAP extension will read user attributes provided by the LDAP server and +specified in the `guacamole.properties` file. The attributes retrieved for a +user are configured using the `ldap-user-attributes` parameter. The user must +be able to read the attribute values from their own LDAP object. The token name +will be prepended with the `LDAP_` prefix. As an example, configuring the +following line in `guacamole.properties`: + +``` +ldap-user-attributes: cn, givenName, sn, mobile, mail +``` + +will produce the below tokens that can be used in connection parameters: + +* `${LDAP_CN}` +* `${LDAP_GIVENNAME}` +* `${LDAP_SN}` +* `${LDAP_MOBILE}` +* `${LDAP_MAIL}` + +### Parameter prompting + +In certain situations Guacamole may determine that additional information is +required in order to successfully open or continue a connection. In these +scenarios guacd will send an instruction back to the client to retrieve that +information, which will result in the user being prompted for those additional +parameters. + +Currently the only parameters that will trigger this prompt to the user are +authentication requests for the RDP and VNC protocols where authenticators were +not provided as part of the connection configuration. + +:::{important} +It is important to note that requests for parameters will only be generated in +the case where that information has not already been provided as part of the +connection. **The user will never be asked for parameters that replace or +override connection parameters where values have been provided**, including +authentication information. + +For example, if the configuration of a connection to a RDP server specifies a +username and password, and that username or password is incorrect and results +in an authentication failure, Guacamole will not prompt the user for additional +credentials. For RDP servers where NLA is enforced, this will result in a +connection failure. Other RDP servers may behave differently and give the user +the ability to try other credentials, but this is outside the control of +Guacamole - **Guacamole will not override pre-configured authentication values +with input from the user**. +::: + +(guacd.conf)= + +Configuring guacd +----------------- + +### `guacd.conf` + +guacd is configured with a configuration file called `guacd.conf`, by +default located in `/etc/guacamole`. This file follows a simple, +INI-like format: + +``` +# +# guacd configuration file +# + +[daemon] + +pid_file = /var/run/guacd.pid +log_level = info + +[server] + +bind_host = localhost +bind_port = 4822 + +# +# The following parameters are valid only if +# guacd was built with SSL support. +# + +[ssl] + +server_certificate = /etc/ssl/certs/guacd.crt +server_key = /etc/ssl/private/guacd.key +``` + +Configuration options are given as parameter/value pairs, where the name of the +parameter is specified on the left side of an "`=`", and the value is specified +on the right. Each parameter must occur within a proper section, indicated by a +section name within brackets. The names of these sections are important; it is +the pairing of a section name with a parameter that constitutes the +fully-qualified parameter being set. + +For the sake of documentation and readability, comments can be added anywhere +within guacd.conf using "`#`" symbols. All text following a "`#`" until +end-of-line will be ignored. + +If you need to include special characters within the value of a parameter, such +as whitespace or any of the above symbols, you can do so by placing the +parameter within double quotes: + +``` +[ssl] + +# Whitespace is legal within double quotes ... +server_certificate = "/etc/ssl/my certs/guacd.crt" + +# ... as are other special symbols +server_key = "/etc/ssl/#private/guacd.key" +``` + +Note that even within double quotes, some characters still have special +meaning, such as the double quote itself or newline characters. If you need to +include these, they must be "escaped" with a backslash: + +``` +# Parameter value containing a double quote +parameter = "some\"value" + +# Parameter value containing newline characters +parameter2 = "line1\ +line2\ +line3" + +# Parameter value containing backslashes +parameter3 = "c:\\windows\\path\\to\\file.txt" +``` + +Don't worry too much about the more complex formatting examples - they are only +rarely necessary, and guacd will complain with parsing errors if the +configuration file is somehow invalid. To ensure parameter values are entered +correctly, just follow the following guidelines: + +1. If the value contains no special characters, just include it as-is. + +2. If the value contains any special characters (whitespace, newlines, `#`, + `\`, or `"`), enclose the entire value within double quotes. + +3. If the value is enclosed within double quotes, escape newlines, `\`, and `"` + with a backslash. + +(guacd-conf-daemon)= + +#### `[daemon]` section + +`pid_file` +: The name of the file in which the PID of the main guacd process should be + written. This is mainly needed for startup scripts, which need to monitor + the state of guacd, killing it if necessary. If this parameter is + specified, the user running guacd must have sufficient permissions to + create or modify the specified file, or startup will fail. + +`log_level` +: The maximum level at which guacd will log messages to syslog and, if + running in the foreground, the console. If omitted, the default level of + `info` will be used. + + Legal values are `trace`, `debug`, `info`, `warning`, and `error`. + +(guacd-conf-server)= + +#### `[server]` section + +`bind_host` +: The host that guacd should bind to when listening for connections. If + unspecified, guacd will bind to localhost, and only connections from + within the server hosting guacd will succeed. + +`bind_port` +: The port that guacd should bind to when listening for connections. If + unspecified, port 4822 will be used. + +(guacd-conf-ssl)= + +#### `[ssl]` section + +`server_certificate` +: The filename of the certificate to use for SSL encryption of the Guacamole + protocol. If this option is specified, SSL encryption will be enabled, and + the Guacamole web application will need to be configured within + `guacamole.properties` to use SSL as well. + +`server_key` +: The filename of the private key to use for SSL encryption of the Guacamole + protocol. If this option is specified, SSL encryption will be enabled, and + the Guacamole web application will need to be configured within + `guacamole.properties` to use SSL as well. + +### Command-line options + +You can also affect the configuration of guacd with command-line +options. If given, these options take precendence over the system-wide +configuration file: + +{samp}`-b {HOST}` +: Changes the host or address that guacd listens on. + + This corresponds to the `bind_host` parameter within the [`[server]` section + of `guacd.conf`](guacd-conf-server). + +{samp}`-l {PORT}` +: Changes the port that guacd listens on (the default is port 4822). + + This corresponds to the `bind_port` parameter within the [`[server]` section + of `guacd.conf`](guacd-conf-server). + +{samp}`-p {PIDFILE}` +: Causes guacd to write the PID of the daemon process to the specified file. + This is useful for init scripts and is used by the provided init script. + + This corresponds to the `pid_file` parameter within the [`[daemon]` section + of `guacd.conf`](guacd-conf-daemon). + +{samp}`-L {LEVEL}` +: Sets the maximum level at which guacd will log messages to syslog and, if + running in the foreground, the console. Legal values are `trace`, `debug`, + `info`, `warning`, and `error`. The default value is `info`. + + This corresponds to the `log_level` parameter within the [`[daemon]` section + of `guacd.conf`](guacd-conf-daemon). + +`-f` +: Causes guacd to run in the foreground, rather than automatically forking + into the background. + +If guacd was built with support for SSL, data sent via the Guacamole protocol +can be encrypted with SSL if an SSL certificate and private key are given with +the following options: + +{samp}`-C {CERTIFICATE}` +: The filename of the certificate to use for SSL encryption of the Guacamole + protocol. If this option is specified, SSL encryption will be enabled, and + the Guacamole web application will need to be configured within + `guacamole.properties` to use SSL as well. + + This corresponds to the `server_certificate` parameter within the [`[ssl]` + section of `guacd.conf`](guacd-conf-ssl). + +{samp}`-K {KEY}` +: The filename of the private key to use for SSL encryption of the Guacamole + protocol. If this option is specified, SSL encryption will be enabled, and + the Guacamole web application will need to be configured within + `guacamole.properties` to use SSL as well. + + This corresponds to the `server_key` parameter within the [`[ssl]` section of + `guacd.conf`](guacd-conf-ssl). + diff --git a/doc/1.5.5/gug/_sources/custom-auth.md.txt b/doc/1.5.5/gug/_sources/custom-auth.md.txt new file mode 100644 index 000000000..2655a48ed --- /dev/null +++ b/doc/1.5.5/gug/_sources/custom-auth.md.txt @@ -0,0 +1,495 @@ +Custom authentication +===================== + +Guacamole's authentication layer is designed to be extendable such that users +can integrate Guacamole into existing authentication systems without having to +resort to writing their own web application around the Guacamole API. + +The web application comes with a default authentication mechanism which uses an +XML file to associate users with connections. Extensions for Guacamole that +provide LDAP-based authentication or database-based authentication have also +been developed. + +To demonstrate the principles involved, we will implement a very simple +authentication extension which associates a single user/password pair with a +single connection, with all this information saved in properties inside the +`guacamole.properties` file. + +In general, all other authentication extensions for Guacamole will use the +principles demonstrated here. This tutorial demonstrates the simplest way to +create an authentication extension for Guacamole - an authentication extension +that does not support management of users and connections via the web +interface. + +(custom-auth-model)= + +Guacamole's authentication model +-------------------------------- + +When you view any page in Guacamole, whether that be the login screen or the +client interface, the page makes an authentication attempt with the web +application, sending all available credentials. After entering your username +and password, the exact same process occurs, except the web application +receives the username and password as well. + +The web application handles this authentication attempt by collecting all +credentials available and passing them to designated classes called +"authentication providers". Given the set of credentials, authentication +providers return a context object that provides restricted access to other +users and connections, if any. + +(custom-auth-skeleton)= + +A Guacamole extension skeleton +------------------------------ + +For simplicity's sake, and because this is how things are done upstream in the +Guacamole project, we will use Maven to build our extension. + +The bare minimum required for a Guacamole authentication extension is a +`pom.xml` file listing guacamole-ext as a dependency, a single .java file +implementing our stub of an authentication provider, and a `guac-manifest.json` +file describing the extension and pointing to our authentication provider +class. + +In our stub, we won't actually do any authentication yet; we'll just +universally reject all authentication attempts by returning `null` for any +credentials given. You can verify that this is what happens by checking the +server logs. + +```xml + + + 4.0.0 + org.apache.guacamole + guacamole-auth-tutorial + jar + 1.5.5 + guacamole-auth-tutorial + + + UTF-8 + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.3 + + 1.8 + 1.8 + + + + + + + + + + + org.apache.guacamole + guacamole-ext + 1.5.5 + provided + + + + + +``` + +We won't need to update this `pom.xml` throughout the rest of the tutorial. +Even after adding new files, Maven will just find them and compile as +necessary. + +Naturally, we need the actual authentication extension skeleton code. While +you can put this in whatever file and package you want, for the sake of this +tutorial, we will assume you are using +`org.apache.guacamole.auth.TutorialAuthenticationProvider`. + +```java +package org.apache.guacamole.auth; + +import java.util.Map; +import org.apache.guacamole.GuacamoleException; +import org.apache.guacamole.net.auth.simple.SimpleAuthenticationProvider; +import org.apache.guacamole.net.auth.Credentials; +import org.apache.guacamole.protocol.GuacamoleConfiguration; + +/** + * Authentication provider implementation intended to demonstrate basic use + * of Guacamole's extension API. The credentials and connection information for + * a single user are stored directly in guacamole.properties. + */ +public class TutorialAuthenticationProvider extends SimpleAuthenticationProvider { + + @Override + public String getIdentifier() { + return "tutorial"; + } + + @Override + public Map + getAuthorizedConfigurations(Credentials credentials) + throws GuacamoleException { + + // Do nothing ... yet + return null; + + } + +} +``` + +To conform with Maven, this skeleton file must be placed within +`src/main/java/org/apache/guacamole/auth` as +`TutorialAuthenticationProvider.java`. + +Notice how simple the authentication provider is. The +`SimpleAuthenticationProvider` base class simplifies the +`AuthenticationProvider` interface, requiring nothing more than a unique +identifier (we will use "tutorial") and a single getAuthorizedConfigurations() +implementation, which must return a `Map` of `GuacamoleConfiguration` each +associated with some arbitrary unique ID. This unique ID will be presented to +the user in the connection list after they log in. + +For now, `getAuthorizedConfigurations()` will just return `null`. This will +cause Guacamole to report an invalid login for every attempt. Note that there +is a difference in semantics between returning an empty map and returning +`null`, as the former indicates the credentials are authorized but simply have +no associated configurations, while the latter indicates the credentials are +not authorized at all. + +The only remaining piece for the overall skeleton to be complete is a +`guac-manifest.json` file. *This file is absolutely required for all Guacamole +extensions.* The `guac-manifest.json` format is described in more detail in +[](guacamole-ext). It provides for quite a few properties, but for our +authentication extension we are mainly interested in the Guacamole version +sanity check (to make sure an extension built for the API of Guacamole version +X is not accidentally used against version Y) and telling Guacamole where to +find our authentication provider class. + +The Guacamole extension format requires that `guac-manifest.json` be placed in +the root directory of the extension `.jar` file. To accomplish this with Maven, +we place it within the `src/main/resources` directory. Maven will automatically +pick it up during the build and include it within the `.jar`. + +```json +{ + + "guacamoleVersion" : "1.5.5", + + "name" : "Tutorial Authentication Extension", + "namespace" : "guac-auth-tutorial", + + "authProviders" : [ + "org.apache.guacamole.auth.TutorialAuthenticationProvider" + ] + +} +``` + +(custom-auth-building)= + +Building the extension +---------------------- + +Once all three of the above files are in place, the extension will build, and +can even be installed within Guacamole (see [](custom-auth-installing) at the +end of this chapter), even though it is just a skeleton at this point. It won't +do anything yet other than reject all authentication attempts, but it's good to +at least try building the extension to make sure nothing is missing and that +all steps have been followed correctly so far: + +```console +$ mvn package +[INFO] Scanning for projects... +[INFO] ------------------------------------------------------------------------ +[INFO] Building guacamole-auth-tutorial 1.5.5 +[INFO] ------------------------------------------------------------------------ +... +[INFO] ------------------------------------------------------------------------ +[INFO] BUILD SUCCESS +[INFO] ------------------------------------------------------------------------ +[INFO] Total time: 2.345 s +[INFO] Finished at: 2015-12-16T13:39:00-08:00 +[INFO] Final Memory: 14M/138M +[INFO] ------------------------------------------------------------------------ +$ +``` + +Assuming you see the "`BUILD SUCCESS`" message when you build the extension, +there will be a new file, `target/guacamole-auth-tutorial-1.5.5.jar`, which can +be installed within Guacamole and tested. If you changed the name or version of +the project in the `pom.xml` file, the name of this new `.jar` file will be +different, but it can still be found within `target/`. + +(custom-auth-config)= + +Configuration and authentication +-------------------------------- + +Once we receive credentials, we need to validate those credentials against the +associated properties in `guacamole.properties` (our source of authentication +information for the sake of this tutorial). + +We will define four properties: + +`tutorial-user` +: The name of the only user we accept. + +`tutorial-password` +: The password we require for the user specified to be authenticated. + +`tutorial-protocol` +: The protocol of the configuration this user is authorized to use, which + will be sent to guacd when the user logs in and selects their connection. + +`tutorial-parameters` +: A comma-delimited list of `name=value` pairs. For the sake of simplicity, + we'll assume there will never be any commas in the values. + +If the username and password match what is stored in the file, we read the +configuration information, store it in a `GuacamoleConfiguration`, and return +the configuration within a set, telling Guacamole that this user is authorized +but only to access the configurations returned. + +Upstream, we always place the properties of authentication providers in their +own class, and so we will also do that here in this tutorial, as it keeps +things organized. + +```java +package org.apache.guacamole.auth; + +import org.apache.guacamole.properties.StringGuacamoleProperty; + +/** + * Utility class containing all properties used by the custom authentication + * tutorial. The properties defined here must be specified within + * guacamole.properties to configure the tutorial authentication provider. + */ +public class TutorialGuacamoleProperties { + + /** + * This class should not be instantiated. + */ + private TutorialGuacamoleProperties() {} + + /** + * The only user to allow. + */ + public static final StringGuacamoleProperty TUTORIAL_USER = + new StringGuacamoleProperty() { + + @Override + public String getName() { return "tutorial-user"; } + + }; + + /** + * The password required for the specified user. + */ + public static final StringGuacamoleProperty TUTORIAL_PASSWORD = + new StringGuacamoleProperty() { + + @Override + public String getName() { return "tutorial-password"; } + + }; + + + /** + * The protocol to use when connecting. + */ + public static final StringGuacamoleProperty TUTORIAL_PROTOCOL = + new StringGuacamoleProperty() { + + @Override + public String getName() { return "tutorial-protocol"; } + + }; + + + /** + * All parameters associated with the connection, as a comma-delimited + * list of name="value" + */ + public static final StringGuacamoleProperty TUTORIAL_PARAMETERS = + new StringGuacamoleProperty() { + + @Override + public String getName() { return "tutorial-parameters"; } + + }; + +} +``` + +Normally, we would define a new type of `GuacamoleProperty` to handle the +parsing of the parameters required by `TUTORIAL_PARAMETERS`, but for the sake +of simplicity, parsing of this parameter will be embedded in the authentication +function later. + +You will need to modify your existing `guacamole.properties` file, adding each +of the above properties to describe one of your available connections. + +``` +# Username and password +tutorial-user: tutorial +tutorial-password: password + +# Connection information +tutorial-protocol: vnc +tutorial-parameters: hostname=localhost, port=5900 +``` + +Once these properties and their accessor class are in place, it's simple enough +to read the properties within `getAuthorizedConfigurations()` and authenticate +the user based on their username and password. + +```java +@Override +public Map + getAuthorizedConfigurations(Credentials credentials) + throws GuacamoleException { + + // Get the Guacamole server environment + Environment environment = LocalEnvironment.getInstance(); + + // Get username from guacamole.properties + String username = environment.getRequiredProperty( + TutorialGuacamoleProperties.TUTORIAL_USER + ); + + // If wrong username, fail + if (!username.equals(credentials.getUsername())) + return null; + + // Get password from guacamole.properties + String password = environment.getRequiredProperty( + TutorialGuacamoleProperties.TUTORIAL_PASSWORD + ); + + // If wrong password, fail + if (!password.equals(credentials.getPassword())) + return null; + + // Successful login. Return configurations (STUB) + return new HashMap(); + +} +``` + +As is, the authentication provider will work in its current state in that the +correct username and password will authenticate the user, while an incorrect +username or password will not, but we still aren't returning an actual map of +configurations. We need to construct the configuration based on the properties +in the `guacamole.properties` file after the user has been authenticated, and +return that configuration to the web application. + +(custom-auth-more-config)= + +Parsing the configuration +------------------------- + +The only remaining task before we have a fully-functioning authentication +provider is to actually parse the configuration from the `guacamole.properties` +file. + +```java +@Override +public Map + getAuthorizedConfigurations(Credentials credentials) + throws GuacamoleException { + + // Get the Guacamole server environment + Environment environment = LocalEnvironment.getInstance(); + + // Get username from guacamole.properties + String username = environment.getRequiredProperty( + TutorialGuacamoleProperties.TUTORIAL_USER + ); + + // If wrong username, fail + if (!username.equals(credentials.getUsername())) + return null; + + // Get password from guacamole.properties + String password = environment.getRequiredProperty( + TutorialGuacamoleProperties.TUTORIAL_PASSWORD + ); + + // If wrong password, fail + if (!password.equals(credentials.getPassword())) + return null; + + // Successful login. Return configurations. + Map configs = + new HashMap(); + + // Create new configuration + GuacamoleConfiguration config = new GuacamoleConfiguration(); + + // Set protocol specified in properties + config.setProtocol(environment.getRequiredProperty( + TutorialGuacamoleProperties.TUTORIAL_PROTOCOL + )); + + // Set all parameters, splitting at commas + for (String parameterValue : environment.getRequiredProperty( + TutorialGuacamoleProperties.TUTORIAL_PARAMETERS + ).split(",\\s*")) { + + // Find the equals sign + int equals = parameterValue.indexOf('='); + if (equals == -1) + throw new GuacamoleServerException("Required equals sign missing"); + + // Get name and value from parameter string + String name = parameterValue.substring(0, equals); + String value = parameterValue.substring(equals+1); + + // Set parameter as specified + config.setParameter(name, value); + + } + + configs.put("Tutorial Connection", config); + return configs; + +} +``` + +The extension is now complete and can be built as described earlier in +[](custom-auth-building). + +(custom-auth-installing)= + +Installing the extension +------------------------ + +Guacamole extensions are self-contained `.jar` files which are installed by +being placed within `GUACAMOLE_HOME/extensions`, and this extension is no +different. As described in [](configuring-guacamole), `GUACAMOLE_HOME` is a +placeholder used to refer to the directory that Guacamole uses to locate its +configuration files and extensions. Typically, this will be the `.guacamole` +directory within the home directory of the user running Tomcat. + +To install your extension, ensure that the required properties have been added +to your `guacamole.properties`, copy the +`target/guacamole-auth-tutorial-1.5.5.jar` file into +`GUACAMOLE_HOME/extensions` and restart Tomcat. Guacamole will automatically +load your extension, logging an informative message that it has done so: + +``` +Extension "Tutorial Authentication Extension" loaded. +``` + diff --git a/doc/1.5.5/gug/_sources/custom-protocols.md.txt b/doc/1.5.5/gug/_sources/custom-protocols.md.txt new file mode 100644 index 000000000..5fa10adf3 --- /dev/null +++ b/doc/1.5.5/gug/_sources/custom-protocols.md.txt @@ -0,0 +1,828 @@ +Adding new protocols +==================== + +Guacamole's support for multiple remote desktop protocols is provided through +plugins which guacd loads dynamically. The Guacamole API has been designed such +that protocol support is easy to create, especially when a C library exists +providing a basic client implementation. + +In this tutorial, we will implement a simple "client" which renders a bouncing +ball using the Guacamole protocol. After completing the tutorial and installing +the result, you will be able to add a connection to your Guacamole +configuration using the "ball" protocol, and any users using that connection +will see a bouncing ball. + +This example client plugin doesn't actually act as a client, but this isn't +important. The Guacamole client is really just a remote display, and this +client plugin functions as a simple example application which renders to this +display, just as Guacamole's own VNC or RDP plugins function as VNC or RDP +clients which render to the remote display. + +Each step of this tutorial is intended to exercise a new concept, while also +progressing towards the goal of a nifty bouncing ball. At the end of each step, +you will have a buildable and working client plugin. + +This tutorial will use the GNU Automake build system, which is the build system +used by Guacamole for libguac, guacd, etc. There will be four files involved: + +`configure.ac` +: Used by GNU Automake to generate the `configure` script which ultimately + serves to generate the `Makefile` which {command}`make` will use when + building. + +`Makefile.am` +: Used by GNU Automake and the `configure` script to generate the `Makefile` + which {command}`make` will use when building. + +`src/ball.c` +: The main body of code defining the bouncing ball "client". + +`src/ball.h` +: A header file defining the structure representing the state of the bouncing + ball (once it becomes necessary to do so). + +All source files will be within the `src` subdirectory, as is common with C +projects, with build files being at the root level directory. The main +`src/ball.c` and the build-related `configure.ac` and `Makefile.am` files will +be created first, with each successive step building upon those files +iteratively, with `src/ball.h` being added when it becomes necessary. After +each step, you can build/rebuild the plugin by running {command}`make`, and +then install it (such that guacd can find the plugin) by running {command}`make +install` and {command}`ldconfig` as root: + +```console +$ make + CC src/ball.lo + CCLD libguac-client-ball.la +# make install +make[1]: Entering directory '/home/user/libguac-client-ball' + /usr/bin/mkdir -p '/usr/local/lib' + /bin/sh ./libtool --mode=install /usr/bin/install -c libguac-client-ball.la '/usr/local/lib' +... +---------------------------------------------------------------------- +Libraries have been installed in: + /usr/local/lib + +If you ever happen to want to link against installed libraries +in a given directory, LIBDIR, you must either use libtool, and +specify the full pathname of the library, or use the '-LLIBDIR' +flag during linking and do at least one of the following: + - add LIBDIR to the 'LD_LIBRARY_PATH' environment variable + during execution + - add LIBDIR to the 'LD_RUN_PATH' environment variable + during linking + - use the '-Wl,-rpath -Wl,LIBDIR' linker flag + - have your system administrator add LIBDIR to '/etc/ld.so.conf' + +See any operating system documentation about shared libraries for +more information, such as the ld(1) and ld.so(8) manual pages. +---------------------------------------------------------------------- +make[1]: Nothing to be done for 'install-data-am'. +make[1]: Leaving directory '/home/user/libguac-client-ball' +# ldconfig +``` + +Prior to the first time {command}`make` is invoked, you will need to run the +`configure` script, which will first need to be generated using +{command}`autoreconf`: + +```console +$ autoreconf -fi +libtoolize: putting auxiliary files in '.'. +libtoolize: copying file './ltmain.sh' +libtoolize: putting macros in AC_CONFIG_MACRO_DIRS, 'm4'. +libtoolize: copying file 'm4/libtool.m4' +libtoolize: copying file 'm4/ltoptions.m4' +libtoolize: copying file 'm4/ltsugar.m4' +libtoolize: copying file 'm4/ltversion.m4' +libtoolize: copying file 'm4/lt~obsolete.m4' +configure.ac:10: installing './compile' +configure.ac:4: installing './missing' +Makefile.am: installing './depcomp' +$ ./configure +checking for a BSD-compatible install... /usr/bin/install -c +checking whether build environment is sane... yes +... +configure: creating ./config.status +config.status: creating Makefile +config.status: executing depfiles commands +config.status: executing libtool commands +$ +``` + +This process is almost identical to that of building guacamole-server from git, +as documented in [](building-guacamole-server). + +:::{important} +The libguac library which is part of guacamole-server is a required dependency +of this project. *You must first install libguac, guacd, etc. by [building and +installing guacamole-server](building-guacamole-server)*. If guacamole-server +has not been installed, and libguac is thus not present, the `configure` script +will fail with an error indicating that it could not find libguac: + +```console +$ ./configure +checking for a BSD-compatible install... /usr/bin/install -c +checking whether build environment is sane... yes +... +checking for guac_client_stream_png in -lguac... no +configure: error: "libguac is required for communication via " + "the Guacamole protocol" +$ +``` + +You will need to install guacamole-server and then rerun `configure`. +::: + +(libguac-client-ball-skeleton)= + +Minimal skeleton client +----------------------- + +Very little needs to be done to implement the most basic client plugin +possible. We begin with `src/ball.c`, containing the absolute minimum required +for a client plugin: + +```c +#include + +#include + +/* Client plugin arguments (empty) */ +const char* TUTORIAL_ARGS[] = { NULL }; + +int guac_client_init(guac_client* client) { + + /* This example does not implement any arguments */ + client->args = TUTORIAL_ARGS; + + return 0; + +} +``` + +Notice the structure of this file. There is exactly one function, +`guac_client_init`, which is the entry point for all Guacamole client plugins. +Just as a typical C program has a main function which is executed when the +program is run, a Guacamole client plugin has `guac_client_init` which is +called when guacd loads the plugin when a new connection is made and your +protocol is selected. + +`guac_client_init` receives a single `guac_client` which it must initialize. +Part of this initialization process involves declaring the list of arguments +that joining users can specify. While we won't be using arguments in this +tutorial, and thus the arguments assigned above are simply an empty list, a +typical client plugin implementation would register arguments which define the +remote desktop connection and its behavior. Examples of such parameters can be +seen in the connection parameters for the protocols supported by Guacamole +out-of-the-box (see [](connection-configuration)). + +The `guac_client` instance given to `guac_client_init` will be shared by the +user that starts the connection, and any users which join the connection via +screen sharing. It lives until the connection is explicitly closed, or until +all users leave the connection. + +For this project to build with GNU Automake, we a `configure.ac` file which +describes the name of the project and what it needs configuration-wise. In +this case, the project is "libguac-client-ball", and it depends on the +"libguac" library used by guacd and all client plugins: + +``` +# Project information +AC_PREREQ([2.61]) +AC_INIT([libguac-client-ball], [0.1.0]) +AM_INIT_AUTOMAKE([-Wall -Werror foreign subdir-objects]) +AM_SILENT_RULES([yes]) + +AC_CONFIG_MACRO_DIRS([m4]) + +# Check for required build tools +AC_PROG_CC +AC_PROG_CC_C99 +AC_PROG_LIBTOOL + +# Check for libguac +AC_CHECK_LIB([guac], [guac_client_stream_png],, + AC_MSG_ERROR("libguac is required for communication via " + "the Guacamole protocol")) + +AC_CONFIG_FILES([Makefile]) +AC_OUTPUT +``` + +We also need a `Makefile.am`, describing which files should be built and how +when building libguac-client-ball: + +``` +AUTOMAKE_OPTIONS = foreign + +ACLOCAL_AMFLAGS = -I m4 +AM_CFLAGS = -Werror -Wall -pedantic + +lib_LTLIBRARIES = libguac-client-ball.la + +# All source files of libguac-client-ball +libguac_client_ball_la_SOURCES = src/ball.c + +# libtool versioning information +libguac_client_ball_la_LDFLAGS = -version-info 0:0:0 +``` + +The GNU Automake files will remain largely unchanged throughout the rest of the +tutorial. + +Once you have created all of the above files, you will have a functioning +client plugin. It doesn't do anything yet, and any connection will be extremely +short-lived (the lack of any data sent by the server will lead to the client +disconnecting under the assumption that the connection has stopped responding), +but it does technically work. + +(libguac-client-ball-display-init)= + +Initializing the remote display +------------------------------- + +Now that we have a basic functioning skeleton, we need to actually do something +with the remote display. A good first step would be simply initializing the +display - setting the remote display size and providing a basic background. + +In this case, we'll set the display to a nice default of 1024x768, and fill the +background with gray. Though the size of the display *can* be chosen based on +the size of the user's browser window (which is provided by the user during the +[Guacamole protocol handshake](guacamole-protocol-handshake), or even updated +when the window size changes (provided by the user via ["size" +instructions](client-size-instruction)), we won't be doing that here for +simplicity's sake: + +```c +#include +#include +#include +#include + +#include + +... + +int ball_join_handler(guac_user* user, int argc, char** argv) { + + /* Get client associated with user */ + guac_client* client = user->client; + + /* Get user-specific socket */ + guac_socket* socket = user->socket; + + /* Send the display size */ + guac_protocol_send_size(socket, GUAC_DEFAULT_LAYER, 1024, 768); + + /* Prepare a curve which covers the entire layer */ + guac_protocol_send_rect(socket, GUAC_DEFAULT_LAYER, + 0, 0, 1024, 768); + + /* Fill curve with solid color */ + guac_protocol_send_cfill(socket, + GUAC_COMP_OVER, GUAC_DEFAULT_LAYER, + 0x80, 0x80, 0x80, 0xFF); + + /* Mark end-of-frame */ + guac_protocol_send_sync(socket, client->last_sent_timestamp); + + /* Flush buffer */ + guac_socket_flush(socket); + + /* User successfully initialized */ + return 0; + +} + +int guac_client_init(guac_client* client) { + + /* This example does not implement any arguments */ + client->args = TUTORIAL_ARGS; + + /* Client-level handlers */ + client->join_handler = ball_join_handler; + + return 0; + +} +``` + +The most important thing to notice here is the new `ball_join_handler()` +function. As it is assigned to `join_handler` of the `guac_client` given to +`guac_client_init`, users which join the connection (including the user that +opened the connection in the first place) will be passed to this function. It +is the duty of the join handler to initialize the provided `guac_user`, taking +into account any arguments received from the user during the connection +handshake (exposed through `argc` and `argv` to the join handler). We aren't +implementing any arguments, so these values are simply ignored, but we do need +to initialize the user with respect to display state. In this case, we: + +1. Send a ["size" instruction](size-instruction), initializing the display size + to 1024x768. + +2. Draw a 1024x768 gray rectangle over the display using the + ["rect"](rect-instruction) and ["cfill"](cfill-instruction) instructions. + +3. Send a ["sync" instruction](sync-instruction), informing the remote display + that a frame has been completed. + +4. Flush the socket, ensuring that all data written to the socket thus far is + immediately sent to the user. + +At this point, if you build, install, and connect using the plugin, you will +see a gray screen. The connection will still be extremely short-lived, however, +since the only data ever sent by the plugin is sent when the user first joins. +The lack of any data sent by the server over the remaining life of the +connection will lead to the client disconnecting under the assumption that the +connection has stopped responding. This will be rectified shortly once we add +the bouncing ball. + +(libguac-client-ball-layer)= + +Adding the ball +--------------- + +This tutorial is about making a bouncing ball "client", so naturally we need a +ball to bounce. While we could repeatedly draw and erase a ball on the remote +display, a more efficient technique would be to leverage Guacamole's layers. + +The remote display has a single root layer, `GUAC_DEFAULT_LAYER`, but there can +be infinitely many other child layers, which can themselves have child layers, +and so on. Each layer can be dynamically repositioned within and relative to +another layer. Because the compositing of these layers is handled by the remote +display, and is likely hardware-accelerated, this is a much better way to +repeatedly reposition something we expect to move a lot. + +Since we're finally adding the ball, and there needs to be some structure which +maintains the state of the ball, we must create a header file, +`src/ball.h`, to define this: + +```c +#ifndef BALL_H +#define BALL_H + +#include + +typedef struct ball_client_data { + + guac_layer* ball; + +} ball_client_data; + +#endif +``` + +To make the build system aware of the existence of the new `src/ball.h` header +file, `Makefile.am` must be updated as well: + +``` +... + +# All source files of libguac-client-ball +noinst_HEADERS = src/ball.h +libguac_client_ball_la_SOURCES = src/ball.c + +... +``` + +This new structure is intended to house the client-level state of the ball, +independent of any users which join or leave the connection. The structure must +be allocated when the client begins (within `guac_client_init`), freed when the +client terminates (via a new client free handler), and must contain the layer +which represents the ball within the remote display. As this layer is part of +the remote display state, it must additionally be initialized when a user +joins, in the same way that the display overall was initialized in earlier +steps: + +```c +#include "ball.h" + +#include +#include +#include +#include +#include + +#include + +... + +int ball_join_handler(guac_user* user, int argc, char** argv) { + + /* Get client associated with user */ + guac_client* client = user->client; + + /* Get ball layer from client data */ + ball_client_data* data = (ball_client_data*) client->data; + guac_layer* ball = data->ball; + + ... + + /* Set up ball layer */ + guac_protocol_send_size(socket, ball, 128, 128); + + /* Prepare a curve which covers the entire layer */ + guac_protocol_send_rect(socket, ball, + 0, 0, 128, 128); + + /* Fill curve with solid color */ + guac_protocol_send_cfill(socket, + GUAC_COMP_OVER, ball, + 0x00, 0x80, 0x80, 0xFF); + + /* Mark end-of-frame */ + guac_protocol_send_sync(socket, client->last_sent_timestamp); + + /* Flush buffer */ + guac_socket_flush(socket); + + /* User successfully initialized */ + return 0; + +} + +int ball_free_handler(guac_client* client) { + + ball_client_data* data = (ball_client_data*) client->data; + + /* Free client-level ball layer */ + guac_client_free_layer(client, data->ball); + + /* Free client-specific data */ + free(data); + + /* Data successfully freed */ + return 0; + +} + +int guac_client_init(guac_client* client) { + + /* Allocate storage for client-specific data */ + ball_client_data* data = malloc(sizeof(ball_client_data)); + + /* Set up client data and handlers */ + client->data = data; + + /* Allocate layer at the client level */ + data->ball = guac_client_alloc_layer(client); + + ... + + /* Client-level handlers */ + client->join_handler = ball_join_handler; + client->free_handler = ball_free_handler; + + return 0; + +} +``` + +The allocate/free pattern for the client-specific data and layers should be +pretty straightforward - the allocation occurs when the objects (the layer and +the structure housing it) are first needed, and the allocated objects are freed +once they are no longer needed (when the client terminates) to avoid leaking +memory. The initialization of the ball layer using the Guacamole protocol +should be familiar as well - it's identical to the way the screen was +initialized, and involves the same instructions. + +Beyond layers, Guacamole has the concept of buffers, which are identical in use +to layers except they are invisible. Buffers are used to store image data for +the sake of caching or drawing operations. We will use them later when we try +to make this tutorial prettier. If you build and install the ball client as-is +now, you will see a large gray rectangle (the root layer) with a small blue +square in the upper left corner (the ball layer). + +(libguac-client-ball-bounce)= + +Making the ball bounce +---------------------- + +To make the ball bounce, we need to track the ball's state, including current +position and velocity, as well as a thread which updates the ball's state (and +the remote display) as time progresses. The ball state and thread can be stored +alongside the ball layer in the existing client-level data structure: + +```c +... + +#include + +#include + +typedef struct ball_client_data { + + guac_layer* ball; + + int ball_x; + int ball_y; + + int ball_velocity_x; + int ball_velocity_y; + + pthread_t render_thread; + +} ball_client_data; + +... +``` + +The contents of the thread will update these values at a pre-defined rate, +changing ball position with respect to velocity, and changing velocity with +respect to collisions with the display boundaries: + +```c +#include "ball.h" + +#include +#include +#include +#include +#include + +#include +#include + +... + +void* ball_render_thread(void* arg) { + + /* Get data */ + guac_client* client = (guac_client*) arg; + ball_client_data* data = (ball_client_data*) client->data; + + /* Update ball position as long as client is running */ + while (client->state == GUAC_CLIENT_RUNNING) { + + /* Sleep a bit */ + usleep(30000); + + /* Update position */ + data->ball_x += data->ball_velocity_x * 30 / 1000; + data->ball_y += data->ball_velocity_y * 30 / 1000; + + /* Bounce if necessary */ + if (data->ball_x < 0) { + data->ball_x = -data->ball_x; + data->ball_velocity_x = -data->ball_velocity_x; + } + else if (data->ball_x >= 1024 - 128) { + data->ball_x = (2 * (1024 - 128)) - data->ball_x; + data->ball_velocity_x = -data->ball_velocity_x; + } + + if (data->ball_y < 0) { + data->ball_y = -data->ball_y; + data->ball_velocity_y = -data->ball_velocity_y; + } + else if (data->ball_y >= 768 - 128) { + data->ball_y = (2 * (768 - 128)) - data->ball_y; + data->ball_velocity_y = -data->ball_velocity_y; + } + + guac_protocol_send_move(client->socket, data->ball, + GUAC_DEFAULT_LAYER, data->ball_x, data->ball_y, 0); + + /* End frame and flush socket */ + guac_client_end_frame(client); + guac_socket_flush(client->socket); + + } + + return NULL; + +} + +... +``` + +Just as with the join handler, this thread sends a "sync" instruction to denote +the end of each frame, though here this is accomplished with +`guac_client_end_frame()`. This function sends a "sync" containing the current +timestamp, and updates the properties of the `guac_client` with the last-sent +timestamp (the value that our join handler uses to send *its* sync). Note that +we don't redraw the whole display with each frame - we simply update the +position of the ball layer using a ["move" instruction](move-instruction), and +rely on the remote display to handle compositing on its own. + +We now need to update `guac_client_init` to actually create this thread, +initialize the ball state within the structure, and store the thread for future +cleanup when the client terminates: + +```c +... + +int ball_free_handler(guac_client* client) { + + ball_client_data* data = (ball_client_data*) client->data; + + /* Wait for render thread to terminate */ + pthread_join(data->render_thread, NULL); + + ... + +} + +int guac_client_init(guac_client* client) { + + ... + + /* Start ball at upper left */ + data->ball_x = 0; + data->ball_y = 0; + + /* Move at a reasonable pace to the lower right */ + data->ball_velocity_x = 200; /* pixels per second */ + data->ball_velocity_y = 200; /* pixels per second */ + + /* Start render thread */ + pthread_create(&data->render_thread, NULL, ball_render_thread, client); + + ... + +} +``` + +The thread contains a render loop which continually checks the state property +of the `guac_client`. This property is set to `GUAC_CLIENT_RUNNING` when the +connection begins, and remains that way for the duration of the connection. +When guacd needs to terminate the connection (such as when the last user +leaves), the value will change to `GUAC_CLIENT_STOPPING`. The free handler +we've written can thus rely on `pthread_join()` to block until the data +previously used by the plugin is no longer being used and can safely be freed. + +Once built and installed, our ball client now has a bouncing ball, albeit a +very square and plain one. Now that the display is continually updating, and +data is being continually received from the server, connected clients will no +longer automatically disconnect. + +(libguac-client-ball-pretty)= + +A prettier ball +--------------- + +Now that we have our ball bouncing, we might as well try to make it actually +look like a ball, and try applying some of the fancier graphics features that +Guacamole offers. Guacamole provides instructions common to most 2D drawing +APIs, including HTML5's canvas and Cairo. This means you can draw arcs, curves, +apply fill and stroke, and even use the contents of another layer or buffer as +the pattern for a fill or stroke. In complex cases involving many draw +operations, it will actually be more efficient to render to a server-side Cairo +surface and send only image data to the client, but it's perfect for relatively +simple cases like our ball. + +We will try creating a simple gray checkerboard pattern in a buffer, using that +for the background instead of the previous gray rectangle, and will modify the +ball by replacing the rectangle with an arc, in this case a full circle, +complete with stroke (border) and translucent-blue fill: + +```c +int ball_join_handler(guac_user* user, int argc, char** argv) { + + ... + + /* Create background tile */ + guac_layer* texture = guac_client_alloc_buffer(client); + + guac_protocol_send_rect(socket, texture, 0, 0, 64, 64); + guac_protocol_send_cfill(socket, GUAC_COMP_OVER, texture, + 0x88, 0x88, 0x88, 0xFF); + + guac_protocol_send_rect(socket, texture, 0, 0, 32, 32); + guac_protocol_send_cfill(socket, GUAC_COMP_OVER, texture, + 0xDD, 0xDD, 0xDD, 0xFF); + + guac_protocol_send_rect(socket, texture, 32, 32, 32, 32); + guac_protocol_send_cfill(socket, GUAC_COMP_OVER, texture, + 0xDD, 0xDD, 0xDD, 0xFF); + + + /* Prepare a curve which covers the entire layer */ + guac_protocol_send_rect(socket, GUAC_DEFAULT_LAYER, + 0, 0, 1024, 768); + + /* Fill curve with texture */ + guac_protocol_send_lfill(socket, + GUAC_COMP_OVER, GUAC_DEFAULT_LAYER, + texture); + + /* Set up ball layer */ + guac_protocol_send_size(socket, ball, 128, 128); + + /* Prepare a circular curve */ + guac_protocol_send_arc(socket, data->ball, + 64, 64, 62, 0, 6.28, 0); + + guac_protocol_send_close(socket, data->ball); + + /* Draw a 4-pixel black border */ + guac_protocol_send_cstroke(socket, + GUAC_COMP_OVER, data->ball, + GUAC_LINE_CAP_ROUND, GUAC_LINE_JOIN_ROUND, 4, + 0x00, 0x00, 0x00, 0xFF); + + /* Fill the circle with color */ + guac_protocol_send_cfill(socket, + GUAC_COMP_OVER, data->ball, + 0x00, 0x80, 0x80, 0x80); + + /* Free texture (no longer needed) */ + guac_client_free_buffer(client, texture); + + /* Mark end-of-frame */ + guac_protocol_send_sync(socket, client->last_sent_timestamp); + + ... + +} +``` + +Again, because we put the ball in its own layer, we don't have to worry about +compositing it ourselves. The remote display will handle this, and will likely +do so with hardware acceleration, even though the ball is now translucent. +Build and install the ball client after this step, and you will have a rather +nice-looking bouncing ball. + +(libguac-client-ball-time)= + +Handling the passage of time +---------------------------- + +There are never any guarantees when it comes to timing, threads, and network +performance. We cannot necessarily rely on the remote display to handle updates +in a timely manner (it may be slow), nor can we rely on the network or server +to give priority to communication from guacd. + +The render thread needs to be modified to take this into account, by tracking +the actual time spent within each frame, and estimating the amount of time the +client spends rendering each frame: + +```c +#include "ball.h" + +#include +#include +#include +#include +#include +#include + +#include +#include + +... + +void* ball_render_thread(void* arg) { + + ... + + /* Init time of last frame to current time */ + guac_timestamp last_frame = guac_timestamp_current(); + + /* Update ball position as long as client is running */ + while (client->state == CLIENT_RUNNING) { + + /* Default to 30ms frames */ + int frame_duration = 30; + + /* Lengthen frame duration if client is lagging */ + int processing_lag = guac_client_get_processing_lag(client); + if (processing_lag > frame_duration) + frame_duration = processing_lag; + + /* Sleep for duration of frame, then get timestamp */ + usleep(frame_duration); + guac_timestamp current = guac_timestamp_current(); + + /* Calculate change in time */ + int delta_t = current - last_frame; + + /* Update position */ + data->ball_x += data->ball_velocity_x * delta_t / 1000; + data->ball_y += data->ball_velocity_y * delta_t / 1000; + + ... + + /* Update timestamp */ + last_frame = current; + + } + + ... + +} +``` + +The calculations are pretty simple. Rather than hard-code the duration of each +frame, we us a default of 30 milliseconds, lengthening the frame if Guacamole's +built-in lag estimation determines that the client is having trouble. The +physics portion of the update no longer assumes that the frame will be exactly +30 milliseconds, instead relying on the actual time elapsed since the previous +frame. + +At this point, we now have a robust Guacamole client plugin. It handles +joining/leaving users correctly, continually updates the remote display state +while taking into account variable network/server/client conditions, and cleans +up after itself when the connection finally terminates. + diff --git a/doc/1.5.5/gug/_sources/duo-auth.md.txt b/doc/1.5.5/gug/_sources/duo-auth.md.txt new file mode 100644 index 000000000..bdf37ef7e --- /dev/null +++ b/doc/1.5.5/gug/_sources/duo-auth.md.txt @@ -0,0 +1,188 @@ +Duo two-factor authentication +============================= + +Guacamole supports Duo as a second authentication factor, layered on top +of any other authentication extension, including those available from +the main project website. The Duo authentication extension allows users +to be additionally verified against the Duo service before the +authentication process is allowed to succeed. + +:::{important} +This chapter involves modifying the contents of `GUACAMOLE_HOME` - the +Guacamole configuration directory. If you are unsure where `GUACAMOLE_HOME` is +located on your system, please consult [](configuring-guacamole) before +proceeding. +::: + +(duo-architecture)= + +How Duo works with Guacamole +---------------------------- + +Guacamole provides support for Duo as a second authentication factor. To +make use of the Duo authentication extension, some other authentication +mechanism will need be configured, as well. When a user attempts to log +into Guacamole, other installed authentication methods will be queried +first: + +![](images/duo-auth-factor-1.png) + +Only after authentication has succeeded with one of those methods will +Guacamole reach out to Duo to obtain additional verification of user +identity: + +![](images/duo-auth-factor-2.png) + +If both the initial authentication attempt and verification through Duo +succeed, the user will be allowed in. If either mechanism fails, access +to Guacamole is denied. + +(duo-downloading)= + +Downloading the Duo extension +----------------------------- + +The Duo authentication extension is available separately from the main +`guacamole.war`. The link for this and all other officially-supported +and compatible extensions for a particular version of Guacamole are +provided on the release notes for that version. You can find the release +notes for current versions of Guacamole here: +http://guacamole.apache.org/releases/. + +The Duo authentication extension is packaged as a `.tar.gz` file +containing only the extension itself, `guacamole-auth-duo-1.5.5.jar`, +which must ultimately be placed in `GUACAMOLE_HOME/extensions`. + +(installing-duo-auth)= + +Installing Duo authentication +----------------------------- + +Guacamole extensions are self-contained `.jar` files which are located +within the `GUACAMOLE_HOME/extensions` directory. To install the Duo +authentication extension, you must: + +1. Create the `GUACAMOLE_HOME/extensions` directory, if it does not already + exist. + +2. Copy `guacamole-auth-duo-1.5.5.jar` within `GUACAMOLE_HOME/extensions`. + +3. Configure Guacamole to use Duo authentication, as described below. + +:::{important} +You will need to restart Guacamole by restarting your servlet container in +order to complete the installation. Doing this will disconnect all active +users, so be sure that it is safe to do so prior to attempting installation. If +you do not configure the Duo authentication properly, Guacamole will not start +up again until the configuration is fixed. +::: + +### Adding Guacamole to Duo + +Duo does not provide a specific integration option for Guacamole, but +Guacamole's Duo extension uses Duo's generic authentication API which +they refer to as the "Web SDK". To use Guacamole with Duo, you will need +to add it as a new "Web SDK" application from within the "Applications" +tab of the admin panel of your Duo account: + +![](images/duo-add-guacamole.png) + +Within the settings of the newly-added application, rename the +application to something more representative than "Web SDK". This +application name is what will be presented to your users when they are +prompted by Duo for additional authentication: + +![](images/duo-rename-guacamole.png) + +Once you've finished adding Guacamole as an "Web SDK" application, the +configuration information required to configure Guacamole is listed +within the application's "Details" section. You will need to copy the +integration key, secret key, and API hostname - they will later be +specified within `guacamole.properties`: + +![](images/duo-copy-details.png) + +(guac-duo-config)= + +### Configuring Guacamole for Duo + +The application-specific configuration information retrieved from Duo +must be added to `guacamole.properties` to describe how Guacamole +should connect to the Duo service: + +duo-api-hostname +: The hostname of the Duo API endpoint to be used to verify user identities. + This will usually be in the form `api-XXXXXXXX.duosecurity.com`, where + "XXXXXXXX" is some arbitrary alphanumeric value assigned by Duo. This + value will have been generated by Duo when you added Guacamole as an "Web + SDK" application, and can be found within the application details in the + "API hostname" field. *This value is required.* + +duo-integration-key +: The integration key provided for Guacamole by Duo. This value will + have been generated by Duo when you added Guacamole as an "Web SDK" + application, and can be found within the application details in the + "Integration key" field. *This value is required and must be EXACTLY + 20 characters.* + +duo-secret-key +: The secret key provided for Guacamole by Duo. This value will have + been generated by Duo when you added Guacamole as an "Web SDK" + application, and can be found within the application details in the + "Secret key" field. *This value is required and must be EXACTLY 40 + characters.* + +In addition to the above, *you must also manually generate an +"application key"*. The application key is required by Duo's +authentication API, but is not provided by Duo. It is an arbitrary value +meant to be unique to each deployment of an application using their API. + +duo-application-key +: An arbitrary, random key which you manually generated for Guacamole. + *This value is required and must be AT LEAST 40 characters.* + +The application key can be generated with any method as long as it is +sufficiently random. There exist utilities which will do this for you, like +`pwgen`: + +```console +$ pwgen 40 1 +em1io4zievohneeseiwah0zie2raQuoo2ci5oBoo +$ +``` + +Alternatively, one quick and fairly portable way to do this is to use the `dd` +utility to copy random bytes from the secure random device `/dev/random`, +sending the data through a cryptographic hash tool with a sufficiently-long +result, like `sha256sum`: + +```console +$ dd if=/dev/random count=1 | sha256sum +5d16d6bb86da73e7d1abd3286b21dcf3b3e707532e64ceebc7a008350d0d485d - +$ +``` + +(completing-duo-install)= + +### Completing the installation + +Guacamole will only reread `guacamole.properties` and load newly-installed +extensions during startup, so your servlet container will need to be restarted +before Duo authentication will take effect. Restart your servlet container and +give the new authentication a try. + +:::{important} +You only need to restart your servlet container. *You do not need to restart +guacd*. + +guacd is completely independent of the web application and does not deal with +`guacamole.properties` or the authentication system in any way. Since you are +already restarting the servlet container, restarting guacd as well technically +won't hurt anything, but doing so is completely pointless. +::: + +If Guacamole does not come back online after restarting your servlet +container, check the logs. Problems in the configuration of the Duo +extension may prevent Guacamole from starting up, and any such errors +will be recorded in the logs of your servlet container. + diff --git a/doc/1.5.5/gug/_sources/event-listeners.md.txt b/doc/1.5.5/gug/_sources/event-listeners.md.txt new file mode 100644 index 000000000..ca50f4b03 --- /dev/null +++ b/doc/1.5.5/gug/_sources/event-listeners.md.txt @@ -0,0 +1,371 @@ +Event listeners +=============== + +Guacamole supports the delivery of event notifications to custom extensions. +Developers can use listener extensions to integrate custom handling of events +such as successful and failed authentications, and requests to connect and +disconnect tunnels to desktop environments. + +A listener extension could be used, for example, to record authentication +attempts in an external database for security auditing or alerting. By +listening to tunnel lifecycle events, a listener extension could be used to +help coordinate startup and shutdown of machine resources; particularly useful +in cloud environments where minimizing running-but-idle resources is an +important cost savings measure. + +For certain *vetoable* events, an event listener can even influence Guacamole's +behavior. For example, a listener can veto a successful authentication, +effectively causing the authentication to be considered failed. Similarly, a +listener can veto a tunnel connection, effectively preventing the tunnel from +being connected to a virtual desktop resource. + +Custom event listeners are packaged using the same extension mechanism used for +custom authentication providers. A single listener extension can include any +number of classes that implement the listener interface. A single extension +module can also include any combination of authentication providers and +listeners, so developers can easily combine authentication providers with +listeners designed to support them. + +To demonstrate the principles involved in receiving Guacamole event +notifications, we will implement a simple listener extension that logs +authentication events. While our approach simply writes event details to the +same log used by the Guacamole web application, a listener could process these +events in arbitrary ways, limited only by the imagination and ingenuity of the +developer. + +(custom-event-listener-skeleton)= + +A Guacamole listener extension skeleton +--------------------------------------- + +For simplicity's sake, and because this is how things are done upstream in the +Guacamole project, we will use Maven to build our extension. + +The bare minimum required for a Guacamole listener extension is a `pom.xml` +file listing guacamole-ext as a dependency, a single `.java` file implementing +our stub of a listener, and a `guac-manifest.json` file describing the +extension and pointing to our listener class. + +```xml + + + 4.0.0 + org.apache.guacamole + guacamole-listener-tutorial + jar + 1.5.5 + guacamole-listener-tutorial + + + UTF-8 + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.3 + + 1.8 + 1.8 + + + + + + + + + + + org.apache.guacamole + guacamole-ext + 1.5.5 + provided + + + + + + org.slf4j + slf4j-api + 1.7.7 + provided + + + + + +``` + +Naturally, we need the actual listener extension skeleton code. While you can +put this in whatever file and package you want, for the sake of this tutorial, +we will assume you are using `org.apache.guacamole.event.TutorialListener`. + +For now, we won't actually do anything other than log the fact that an event +notification was received. At this point, we're just creating the skeleton for +our listener extension. + +```java +package org.apache.guacamole.event; + +import org.apache.guacamole.GuacamoleException; +import org.apache.guacamole.net.event.listener.Listener; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * A Listener implementation intended to demonstrate basic use + * of Guacamole's listener extension API. + */ +public class TutorialListener implements Listener { + + private static final Logger logger = + LoggerFactory.getLogger(TutorialListener.class); + + @Override + public void handleEvent(Object event) throws GuacamoleException { + logger.info("received Guacamole event notification"); + } + +} +``` + +To conform with Maven, this skeleton file must be placed within +`src/main/java/org/apache/guacamole/event` as `TutorialListener.java`. + +As you can see, implementing a listener is quite simple. There is a single +`Listener` interface to implement. All Guacamole event notifications will be +delivered to your code by invoking the handleEvent method. We will see shortly +how to use the passed event object to get the details of the event itself. + +The only remaining piece for the overall skeleton to be complete is a +`guac-manifest.json` file. *This file is absolutely required for all Guacamole +extensions.* The `guac-manifest.json` format is described in more detail in +[](guacamole-ext). It provides for quite a few properties, but for our listener +extension we are mainly interested in the Guacamole version sanity check (to +make sure an extension built for the API of Guacamole version X is not +accidentally used against version Y) and telling Guacamole where to find our +listener class. + +The Guacamole extension format requires that `guac-manifest.json` be placed in +the root directory of the extension `.jar` file. To accomplish this with Maven, +we place it within the `src/main/resources` directory. Maven will automatically +pick it up during the build and include it within the `.jar`. + +```json +{ + + "guacamoleVersion" : "1.5.5", + + "name" : "Tutorial Listener Extension", + "namespace" : "guac-listener-tutorial", + + "listeners" : [ + "org.apache.guacamole.event.TutorialListener" + ] + +} +``` + +(custom-listener-building)= + +Building the extension +---------------------- + +Once all three of the above files are in place, the extension should build +successfully even though it is just a skeleton at this point. + +```console +$ mvn package +[INFO] Scanning for projects... +[INFO] --------------------------------------------------------------- +[INFO] Building guacamole-listener-tutorial 1.5.5 +[INFO] --------------------------------------------------------------- +... +[INFO] --------------------------------------------------------------- +[INFO] BUILD SUCCESS +[INFO] --------------------------------------------------------------- +[INFO] Total time: 1.297 s +[INFO] Finished at: 2017-10-08T13:12:39-04:00 +[INFO] Final Memory: 19M/306M +[INFO] --------------------------------------------------------------- +$ +``` + +Assuming you see the "`BUILD SUCCESS`" message when you build the extension, +there will be a new file, `target/guacamole-listener-tutorial-1.5.5.jar`, which +can be installed within Guacamole (see [](custom-listener-installing) at the +end of this chapter). It should log event notifications that occur during, for +example, authentication attempts. If you changed the name or version of the +project in the `pom.xml` file, the name of this new `.jar` file will be +different, but it can still be found within `target/`. + +(custom-listener-event-handling)= + +Handling events +--------------- + +The Guacamole `Listener` interface represents a low-level event handling API. A +listener is notified of every event generated by Guacamole. The listener must +examine the event type to determine whether the event is of interest, and if so +to dispatch the event to the appropriate entry point. + +The event types that can be produced by Guacamole are described in the +`org.apache.guacamole.net.event` package of the guacamole-ext API. In this +package you will find several concrete event types as well as interfaces that +describe common characteristics of certain of event types. You can use any of +these types to distinguish the events received by your listener, and to examine +properties of an event of a given type. + +Suppose we wish to log authentication success and failure events, while +ignoring all other event types. The `AuthenticationSuccessEvent` and +`AuthenticationFailureEvent` types are used to notify a listener of +authentication events. We can simply check whether a received event is of one +of these types and, if so, log an appropriate message. + +```java +package org.apache.guacamole.event; + +import org.apache.guacamole.GuacamoleException; +import org.apache.guacamole.net.event.AuthenticationFailureEvent; +import org.apache.guacamole.net.event.AuthenticationSuccessEvent; +import org.apache.guacamole.net.event.listener.Listener; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * A Listener that logs authentication success and failure events. + */ +public class TutorialListener implements Listener { + + private static final Logger logger = + LoggerFactory.getLogger(TutorialListener.class); + + @Override + public void handleEvent(Object event) throws GuacamoleException { + + if (event instanceof AuthenticationSuccessEvent) { + logger.info("successful authentication for user {}", + ((AuthenticationSuccessEvent) event) + .getCredentials().getUsername()); + } + else if (event instanceof AuthenticationFailureEvent) { + logger.info("failed authentication for user {}", + ((AuthenticationFailureEvent) event) + .getCredentials().getUsername()); + } + } + +} +``` + +In our example, we use `instanceof` to check for the two event types of +interest to our listener. Once we have identified an event of interest, we can +safely cast the event type to access properties of the event. + +The extension is now complete and can be built as described earlier in +[](custom-listener-building) and installed as described below in +[](custom-listener-installing). + +(custom-listener-veto)= + +Influencing Guacamole by event veto +----------------------------------- + +An implementation of the handleEvent method is permitted to throw any +`GuacamoleException`. For certain *vetoable* event types, throwing a +`GuacamoleException` serves to effectively veto the action that resulted in the +event notification. See the API documentation for guacamole-ext to learn more +about vetoable event types. + +As an (admittedly contrived) example, suppose we want to prevent a user named +"guacadmin" from accessing Guacamole. For whatever reason, we don't wish to +remove or disable the auth database entry for this user. In this case we can +use a listener to block this user, preventing access to Guacamole. In the +listener, when we get an `AuthenticationSuccessEvent` we can check to see if +the user is "guacadmin" and, if so, throw an exception to prevent this user +from logging in to Guacamole. + +```java +package org.apache.guacamole.event; + +import org.apache.guacamole.GuacamoleException; +import org.apache.guacamole.GuacamoleSecurityException; +import org.apache.guacamole.net.event.AuthenticationFailureEvent; +import org.apache.guacamole.net.event.AuthenticationSuccessEvent; +import org.apache.guacamole.net.event.listener.Listener; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * A Listener that logs authentication success and failure events + * and prevents the "guacadmin" user from logging in by throwing + * a GuacamoleSecurityException. + */ +public class TutorialListener implements Listener { + + private static final Logger logger = + LoggerFactory.getLogger(TutorialListener.class); + + @Override + public void handleEvent(Object event) throws GuacamoleException { + + if (event instanceof AuthenticationSuccessEvent) { + final String username = ((AuthenticationSuccessEvent) event) + .getCredentials().getUsername(); + + if ("guacadmin".equals(username)) { + logger.warn("user {} has been blocked", username); + throw new GuacamoleSecurityException( + "User '" + username + "' is currently blocked"); + } + + logger.info("successful authentication for user {}", username); + } + else if (event instanceof AuthenticationFailureEvent) { + logger.info("failed authentication for user {}", + ((AuthenticationFailureEvent) event) + .getCredentials().getUsername()); + } + } + +} +``` + +If our Guacamole user database contains a user named "guacadmin", and we build +and install this listener extension, we will find that an attempt to log in as +this user now results in a message in the UI indicating that the user is +blocked. If we examine the Guacamole log, we will see the message indicating +that the user was blocked. Because the successful authentication was vetoed, +Guacamole sends a subsequent authentication failure notification, which we see +logged as well. + +(custom-listener-installing)= + +Installing the extension +------------------------ + +Guacamole extensions are self-contained `.jar` files which are installed by +being placed within `GUACAMOLE_HOME/extensions`, and this extension is no +different. As described in [](configuring-guacamole), `GUACAMOLE_HOME` is a +placeholder used to refer to the directory that Guacamole uses to locate its +configuration files and extensions. Typically, this will be the `.guacamole` +directory within the home directory of the user running Tomcat. + +To install your extension, copy the +`target/guacamole-listener-tutorial-1.5.5.jar` file into +`GUACAMOLE_HOME/extensions` and restart Tomcat. Guacamole will automatically +load your extension, logging an informative message that it has done so: + +``` +Extension "Tutorial Listener Extension" loaded. +``` + diff --git a/doc/1.5.5/gug/_sources/guacamole-architecture.md.txt b/doc/1.5.5/gug/_sources/guacamole-architecture.md.txt new file mode 100644 index 000000000..d17597854 --- /dev/null +++ b/doc/1.5.5/gug/_sources/guacamole-architecture.md.txt @@ -0,0 +1,142 @@ +Implementation and architecture +=============================== + +Guacamole is not a self-contained web application and is made up of many parts. +The web application is actually intended to be simple and minimal, with the +majority of the gruntwork performed by lower-level components. + +:::{image} images/guac-arch.png +:width: 2.5in +::: + +Users connect to a Guacamole server with their web browser. The Guacamole +client, written in JavaScript, is served to users by a webserver within the +Guacamole server. Once loaded, this client connects back to the server over +HTTP using the Guacamole protocol. + +The web application deployed to the Guacamole server reads the Guacamole +protocol and forwards it to guacd, the native Guacamole proxy. This proxy +actually interprets the contents of the Guacamole protocol, connecting to any +number of remote desktop servers on behalf of the user. + +The Guacamole protocol combined with guacd provide protocol agnosticism: +neither the Guacamole client nor the web application need to be aware of what +remote desktop protocol is actually being used. + +(guacamole-protocol-architecture)= + +The Guacamole protocol +---------------------- + +The web application does not understand any remote desktop protocol at all. It +does not contain support for VNC or RDP or any other protocol supported by the +Guacamole stack. It actually only understands the Guacamole protocol, which is +a protocol for remote display rendering and event transport. While a protocol +with those properties would naturally have the same abilities as a remote +desktop protocol, the design principles behind a remote desktop protocol and +the Guacamole protocol are different: the Guacamole protocol is not intended to +implement the features of a specific desktop environment. + +As a remote display and interaction protocol, Guacamole implements a superset +of existing remote desktop protocols. Adding support for a particular remote +desktop protocol (like RDP) to Guacamole thus involves writing a middle layer +which "translates" between the remote desktop protocol and the Guacamole +protocol. Implementing such a translation is no different than implementing any +native client, except that this particular implementation renders to a remote +display rather than a local one. + +The middle layer that handles this translation is guacd. + +guacd +----- + +guacd is the heart of Guacamole which dynamically loads support for remote +desktop protocols (called "client plugins") and connects them to remote +desktops based on instructions received from the web application. + +guacd is a daemon process which is installed along with Guacamole and runs in +the background, listening for TCP connections from the web application. guacd +also does not understand any specific remote desktop protocol, but rather +implements just enough of the Guacamole protocol to determine which protocol +support needs to be loaded and what arguments must be passed to it. Once a +client plugin is loaded, it runs independently of guacd and has full control of +the communication between itself and the web application until the client +plugin terminates. + +guacd and all client plugins depend on a common library, libguac, which makes +communication via the Guacamole protocol easier and a bit more abstract. + +(web-application)= + +The web application +------------------- + +The part of Guacamole that a user actually interacts with is the web +application. + +The web application, as mentioned before, does not implement any remote desktop +protocol. It relies on guacd, and implements nothing more than a spiffy web +interface and authentication layer. + +We chose to implement the server side of the web application in Java, but +there's no reason that it can't be written in a different language. In fact, +because Guacamole is intended be an API, we encourage this. + +RealMint +-------- + +Guacamole is now a generalized remote desktop gateway, but this was not always +the case. Guacamole began as a purely text-based Telnet client written in +JavaScript called RealMint ("RealMint" is an anagram for "terminal"). It was +written mainly as a demonstration and, while intended to be useful, its main +claim to fame was only that it was pure JavaScript. + +The tunnel used by RealMint was written in PHP. In contrast to Guacamole's HTTP +tunnel, RealMint's tunnel used only simple long-polling and was inefficient. +RealMint had a decent keyboard implementation which lives on now in parts of +Guacamole's keyboard code, but this was really the extent of RealMint's +features and usability. + +Given that it was just an implementation of a legacy protocol, and that several +other JavaScript terminal emulators exist, most of which well-established and +stable, the project was dropped. + +VNC Client +---------- + +Once the developers learned of the HTML5 canvas tag, and saw that it was +already implemented in Firefox and Chrome, work started instead on a +proof-of-concept JavaScript VNC client. + +This client was purely JavaScript with a Java server component, and worked by +translating VNC into an XML-based version of the same. Its development was +naturally driven by VNC's features, and its scope was limited to forwarding a +single connection to a set of users. Although relatively slow, the +proof-of-concept worked well enough that the project needed an online place to +live, and was registered with SourceForge as "Guacamole" - an HTML5 VNC client. + +As Guacamole grew and became more than a proof-of-concept, the need for speed +increased, and the old RealMint-style long polling was dropped, as was the use +of XML. + +As WebSocket could not be trusted to be supported at the time, and Java had no +WebSocket standard for servlets, an equivalent HTTP-based tunnel was developed. +This tunnel is still used today if WebSocket cannot be used for any reason. + +(gateway)= + +Remote Desktop Gateway +---------------------- + +A faster text-based protocol was developed which could present the features of +multiple remote desktop protocols, not just VNC. The entire system was +rearchitected into a standard daemon, guacd, and a common library, libguac, +which drove both the daemon and protocol support, which became extendable. + +The scope of the project expanded from an adequate VNC client to a performant +HTML5 remote desktop gateway and general API. In its current state, Guacamole +can be used as a central gateway to access any number of machines running +different remote desktop servers. It provides extendable authentication, and in +the case you need something more specialized, a general API for HTML5-based +remote access. + diff --git a/doc/1.5.5/gug/_sources/guacamole-common-js.md.txt b/doc/1.5.5/gug/_sources/guacamole-common-js.md.txt new file mode 100644 index 000000000..a1dc12267 --- /dev/null +++ b/doc/1.5.5/gug/_sources/guacamole-common-js.md.txt @@ -0,0 +1,379 @@ +guacamole-common-js +=================== + +The Guacamole project provides a JavaScript API for interfacing with other +components that conform to the design of Guacamole, such as projects using +libguac or guacamole-common. This API is called guacamole-common-js. + +guacamole-common-js provides a JavaScript implementation of a Guacamole client, +as well as tunneling mechanisms for getting protocol data out of JavaScript and +into guacd or the server side of a web application. + +For convenience, it also provides mouse and keyboard abstraction objects that +translate JavaScript mouse, touch, and keyboard events into consistent data +that Guacamole can more easily digest. The extendable on-screen keyboard that +was developed for the Guacamole web application is also included. + +Guacamole client +---------------- + +The main benefit to using the JavaScript API is the full Guacamole client +implementation, which implements all Guacamole instructions, and makes use of +the tunnel implementations provided by both the JavaScript and Java APIs. + +Using the Guacamole client is straightforward. The client, like all other +objects within the JavaScript API, is within the `Guacamole` namespace. It is +instantiated given an existing, unconnected tunnel: + +```javascript +var client = new Guacamole.Client(tunnel); +``` + +Once you have the client, it won't immediately appear within the DOM. You need +to add its display element manually: + +```javascript +document.body.appendChild(client.getDisplay().getElement()); +``` + +At this point, the client will be visible, rendering all updates as soon as +they are received through the tunnel. + +```javascript +client.connect(); +``` + +It is possible to pass arbitrary data to the tunnel during connection which can +be used for authentication or for choosing a particular connection. When the +`connect()` function of the Guacamole client is called, it in turn calls the +`connect()` function of the tunnel originally given to the client, establishing +a connection. + +:::{important} +When creating the `Guacamole.Client`, the tunnel used must not already be +connected. The `Guacamole.Client` will call the `connect()` function for you +when its own `connect()` function is invoked. If the tunnel is already +connected when it is given to the `Guacamole.Client`, connection may not work +at all. +::: + +In general, all instructions available within the Guacamole protocol are +automatically handled by the Guacamole client, including instructions related +to audio and video. The only instructions which you must handle yourself are +"name" (used to name the connection), "clipboard" (used to update clipboard +data on the client side), and "error" (used when something goes wrong +server-side). Each of these instructions has a corresponding event handler; you +need only supply functions to handle these events. If any of these event +handlers are left unset, the corresponding instructions are simply ignored. + +HTTP tunnel +----------- + +Both the Java and JavaScript API implement corresponding ends of an HTTP +tunnel, based on `XMLHttpRequest`. + +The tunnel is a true stream - there is no polling. An initial request is made +from the JavaScript side, and this request is handled on the Java side. While +this request is open, data is streamed along the connection, and instructions +within this stream are handled as soon as they are received by the client. + +While data is being streamed along this existing connection, a second +connection attempt is made. Data continues to be streamed along the original +connection until the server receives and handles the second request, at which +point the original connection closes and the stream is transferred to the new +connection. + +This process repeats, alternating between active streams, thus creating an +unbroken sequence of instructions, while also allowing JavaScript to free any +memory used by the previously active connection. + +The tunnel is created by supplying the relative URL to the server-side tunnel +servlet: + +```javascript +var tunnel = new Guacamole.Tunnel("tunnel"); +``` + +Once created, the tunnel can be passed to a `Guacamole.Client` for use in a +Guacamole connection. + +The tunnel actually takes care of the Guacamole protocol parsing on behalf of +the client, triggering "oninstruction" events for every instruction received, +splitting each element into elements of an array so that the client doesn't +have to. + +Input abstraction +----------------- + +Browsers can be rather finicky when it comes to keyboard and mouse input, not +to mention touch events. There is little agreement on which keyboard events get +fired when, and what detail about the event is made available to JavaScript. +Touch and mouse events can also cause confusion, as most browsers will generate +*both* events when the user touches the screen (for compatibility with +JavaScript code that only handles mouse events), making it more difficult for +applications to support both mouse and touch independently. + +The Guacamole JavaScript API abstracts mouse, keyboard, and touch interaction, +providing several helper objects which act as an abstract interface between you +and the browser events. + +(guacamole-mouse)= + +### Mouse + +Mouse event abstraction is provided by the `Guacamole.Mouse` object. Given an +arbitrary DOM element, `Guacamole.Mouse` triggers onmousedown, onmousemove, and +onmouseup events which are consistent across browsers. This object only +responds to true mouse events. Mouse events which are actually the result of +touch events are ignored. + +```javascript +var element = document.getElementById("some-arbitrary-id"); +var mouse = new Guacamole.Mouse(element); + +mouse.onmousedown = +mouse.onmousemove = +mouse.onmouseup = function(state) { + + // Do something with the mouse state received ... + +}; +``` + +The handles of each event are given an instance of `Guacamole.Mouse.State` +which represents the current state of the mouse, containing the state of each +button (including the scroll wheel) as well as the X and Y coordinates of the +pointer in pixels. + +(guacamole-touch)= + +### Touch + +Touch event abstraction is provided by either `Guacamole.Touchpad` (emulates a +touchpad to generate artificial mouse events) or `Guacamole.Touchscreen` +(emulates a touchscreen, again generating artificial mouse events). Guacamole +uses the touchpad emulation, as this provides the most flexibility and +mouse-like features, including scrollwheel and clicking with different buttons, +but your preferences may differ. + +```javascript +var element = document.getElementById("some-arbitrary-id"); +var touch = new Guacamole.Touchpad(element); // or Guacamole.Touchscreen + +touch.onmousedown = +touch.onmousemove = +touch.onmouseup = function(state) { + + // Do something with the mouse state received ... + +}; +``` + +Note that even though these objects are touch-specific, they still provide +mouse events. The state object given to the event handlers of each event is +still an instance of `Guacamole.Mouse.State`. + +Ultimately, you could assign the same event handler to all the events of both +an instance of `Guacamole.Mouse` as well as `Guacamole.Touchscreen` or +`Guacamole.Touchpad`, and you would magically gain mouse and touch support. +This support, being driven by the needs of remote desktop, is naturally geared +around the mouse and providing a reasonable means of interacting with it. For +an actual mouse, events are translated simply and literally, while touch events +go through additional emulation and heuristics. From the perspective of the +user and the code, this is all transparent. + +(guacamole-keyboard)= + +### Keyboard + +Keyboard events in Guacamole are abstracted with the `Guacamole.Keyboard` +object as only keyup and keydown events; there is no keypress like there is in +JavaScript. Further, all the craziness of keycodes vs. scancodes vs. key +identifiers normally present across browsers is abstracted away. All your event +handlers will see is an X11 keysym, which represent every key unambiguously. +Conveniently, X11 keysyms are also what the Guacamole protocol requires, so if +you want to use `Guacamole.Keyboard` to drive key events sent over the +Guacamole protocol, everything can be connected directly. + +Just like the other input abstraction objects, `Guacamole.Keyboard` requires a +DOM element as an event target. Only key events directed at this element will +be handled. + +```javascript +var keyboard = new Guacamole.Keyboard(document); + +keyboard.onkeydown = function(keysym) { + // Do something ... +}; + +keyboard.onkeyup = function(keysym) { + // Do something ... +}; +``` + +In this case, we are using `document` as the event target, thus receiving all +key events while the browser window (or tab) has focus. + +On-screen keyboard +------------------ + +The Guacamole JavaScript API also provides an extendable on-screen keyboard, +`Guacamole.OnScreenKeyboard`, which requires the URL of an XML file describing +the keyboard layout. The on-screen keyboard object provides no hard-coded +layout information; the keyboard layout is described entirely within the XML +layout file. + +### Keyboard layouts + +The keyboard layout XML included in the Guacamole web application would be a +good place to start regarding how these layout files are written, but in +general, the keyboard is simply a set of rows or columns, denoted with `` +and `` tags respectively, where each can be nested within the other as +desired. + +Each key is represented with a `` tag, but this is not what the user sees, +nor what generates the key event. Each key contains any number of `` tags, +which represent the visible part of the key. The cap describes which X11 +keysym will be sent when the key is pressed. Each cap can be associated with +any combination of arbitrary modifier flags which dictate when that cap is +active. + +For example: + +```xml + + + + Shift + + + a + A + + + +``` + +Here we have a very simple keyboard which defines only two keys: "shift" (a +modifier) and the letter "a". When "shift" is pressed, it sets the "shift" +modifier, affecting other keys in the keyboard. The "a" key has two caps: one +lowercase (the default) and one uppercase (which requires the shift modifier to +be active). + +Notice that the shift key needed the keysym explicitly specified, while the "a" +key did not. This is because the on-screen keyboard will automatically derive +the correct keysym from the text of the key cap if the text contains only a +single character. + +(displaying-osk)= + +### Displaying the keyboard + +Once you have a keyboard layout available, adding an on-screen keyboard to your +application is simple: + +```javascript +// Add keyboard to body +var keyboard = new Guacamole.OnScreenKeyboard("path/to/layout.xml"); +document.body.appendChild(keyboard.getElement()); + +// Set size of keyboard to 100 pixels +keyboard.resize(100); +``` + +Here, we have explicitly specified the width of the keyboard as 100 pixels. +Normally, you would determine this by inspecting the width of the containing +component, or by deciding on a reasonable width beforehand. Once the width is +given, the height of the keyboard is determined based on the arrangement of +each row. + +### Styling the keyboard + +While the `Guacamole.OnScreenKeyboard` object will handle most of the layout, +you will still need to style everything yourself with CSS to get the elements +to render properly and the keys to change state when clicked or activated. It +defines several CSS classes, which you will need to manually style to get +things looking as desired: + +`guac-keyboard` +: This class is assigned to the root element containing the entire keyboard, + returned by `getElement()`, + +`guac-keyboard-row` +: Assigned to the `div` elements which contain each row. + +`guac-keyboard-column` +: Assigned to the `div` elements which contain each column. + +`guac-keyboard-gap` +: Assigned to any `div` elements created as a result of `` tags in the + keyboard layout. `` tags are intended to behave as keys with no visible + styling or caps. + +`guac-keyboard-key-container` +: Assigned to the `div` element which contains a key, and provides that key + with its required dimensions. It is this element that will be scaled relative + to the size specified in the layout XML and the size given to the `resize()` + function. + +`guac-keyboard-key` +: Assigned to the `div` element which represents the actual key, not the cap. + This element will not directly contain text, but it will contain all caps + that this key can have. With clever CSS rules, you can take advantage of this + and cause inactive caps to appear on the key in a corner (for example), or + hide them entirely. + +`guac-keyboard-cap` +: Assigned to the `div` element representing a key cap. Each cap is a child of + its corresponding key, and it is up to the author of the CSS rules to hide or + show or reposition each cap appropriately. Each cap will contain the display + text defined within the `` element in the layout XML. + +{samp}`guac-keyboard-requires-{MODIFIER}` +: Added to the cap element when that cap requires a specific modifier. + +{samp}`guac-keyboard-uses-{MODIFIER}` +: Added to the key element when any cap contained within it requires a specific + modifier. + +{samp}`guac-keyboard-modifier-{MODIFIER}` +: Added to and removed from the root keyboard element when a modifier key is + activated or deactivated respectively. + +`guac-keyboard-pressed` +: Added to and removed from any key element as it is pressed and released + respectively. + +:::{important} +The CSS rules required for the on-screen keyboard to work as expected can be +quite complex. Looking over the CSS rules used by the on-screen keyboard in the +Guacamole web application would be a good place to start to see how the +appearance of each key can be driven through the simple class changes described +above. + +Inspecting the elements of an active on-screen keyboard within the Guacamole +web application with the developer tools of your favorite browser is also a +good idea. +::: + +(osk-event-handling)= + +### Handling key events + +Key events generated by the on-screen keyboard are identical to those of +`Guacamole.Keyboard` in that they consist only of a single X11 keysym. Only +keyup and keydown events exist, as before; there is no keypress event. + +```javascript +// Assuming we have an instance of Guacamole.OnScreenKeyboard already +// called "keyboard" + +keyboard.onkeydown = function(keysym) { + // Do something ... +}; + +keyboard.onkeyup = function(keysym) { + // Do something ... +}; +``` + diff --git a/doc/1.5.5/gug/_sources/guacamole-common.md.txt b/doc/1.5.5/gug/_sources/guacamole-common.md.txt new file mode 100644 index 000000000..bd5d609ab --- /dev/null +++ b/doc/1.5.5/gug/_sources/guacamole-common.md.txt @@ -0,0 +1,137 @@ +guacamole-common +================ + +The Java API provided by the Guacamole project is called guacamole-common. It +provides a basic means of tunneling data between the JavaScript client provided +by guacamole-common-js and the native proxy daemon, guacd, and for dealing with +the Guacamole protocol. The purpose of this library is to facilitate the +creation of custom tunnels between the JavaScript client and guacd, allowing +your Guacamole-driven web application to enforce its own security model, if +any, and dictate exactly what connections are established. + +(java-http-tunnel)= + +HTTP tunnel +----------- + +The Guacamole Java API implements the HTTP tunnel using a servlet called +`GuacamoleHTTPTunnelServlet`. This servlet handles all requests coming to it +over HTTP from the JavaScript client, and translates them into connect, read, +or write requests, which each get dispatched to the `doConnect()`, `doRead()`, +and `doWrite()` functions accordingly. + +Normally, you wouldn't touch the `doRead()` and `doWrite()` functions, as these +have already been written to properly handle the requests of the JavaScript +tunnel, and if you feel the need to touch these functions, you are probably +better off writing your own tunnel implementation, although such a thing is +difficult to do in a performant way. + +When developing an application based on the Guacamole API, you should use +`GuacamoleHTTPTunnelServlet` by extending it, implementing your own version of +`doConnect()`, which is the only abstract function it defines. The tutorial +later in this book demonstrating how to write a Guacamole-based web application +shows the basics of doing this, but generally, `doConnect()` is an excellent +place for authentication or other validation, as it is the responsibility of +`doConnect()` to create (or not create) the actual tunnel. If `doConnect()` +does not create the tunnel, communication between the JavaScript client and +guacd cannot take place, which is an ideal power to have as an authenticator. + +The `doConnect()` function is expected to return a new `GuacamoleTunnel`, but +it is completely up to the implementation to decide how that tunnel is to be +created. The already-implemented parts of `GuacamoleHTTPTunnelServlet` then +return the unique identifier of this tunnel to the JavaScript client, allowing +its own tunnel implementation to continue to communicate with the tunnel +existing on the Java side. + +Instances of `GuacamoleTunnel` are associated with a `GuacamoleSocket`, which +is the abstract interface surrounding the low-level connection to guacd. +Overall, there is a socket (`GuacamoleSocket`) which provides a TCP connection +to guacd. This socket is exposed to `GuacamoleTunnel`, which provides abstract +protocol access around what is actually (but secretly, through the abstraction +of the API) a TCP socket. + +The Guacamole web application extends this tunnel servlet in order to implement +authentication at the lowest possible level, effectively prohibiting +communication between the client and any remote desktops unless they have +properly authenticated. Your own implementation can be considerably simpler, +especially if you don't need authentication: + +```java +public class MyGuacamoleTunnelServlet + extends GuacamoleHTTPTunnelServlet { + + @Override + protected GuacamoleTunnel doConnect(HttpServletRequest request) + throws GuacamoleException { + + // Connect to guacd here (this is a STUB) + GuacamoleSocket socket; + + // Return a new tunnel which uses the connected socket + return new SimpleGuacamoleTunnel(socket); + + } + +} +``` + +(java-protocol-usage)= + +Using the Guacamole protocol +---------------------------- + +guacamole-common provides basic low-level support for the Guacamole protocol. +This low-level support is leveraged by the HTTP tunnel implementation to +satisfy the requirements of the JavaScript client implementation, as the +JavaScript client expects the handshake procedure to have already taken place. +This support exists through the `GuacamoleReader` and `GuacamoleWriter` +classes, which are similar to Java's `Reader` and `Writer` classes, except that +they deal with the Guacamole protocol specifically, and thus have slightly +different contracts. + +(java-reading-protocol)= + +### `GuacamoleReader` + +`GuacamoleReader` provides a very basic `read()` function which is required to +return one or more complete instructions in a `char` array. It also provides +the typical `available()` function, which informs you whether `read()` is +likely to block the next time it is called, and an even more abstract version +of `read()` called `readInstruction()` which returns one instruction at a time, +wrapped within a `GuacamoleInstruction` instance. + +Normally, you would not need to use this class yourself. It is used by +`ConfiguredGuacamoleSocket` to complete the Guacamole protocol handshake +procedure, and it is used by `GuacamoleHTTPTunnelServlet` within `doRead()` to +implement the reading half of the tunnel. + +The only concrete implementation of `GuacamoleReader` is +`ReaderGuacamoleReader`, which wraps a Java `Reader`, using that as the source +for data to parse into Guacamole instructions. Again, you would not normally +directly use this class, nor instantiate it yourself. A working, concrete +instance of `GuacamoleReader` can be retrieved from any `GuacamoleSocket` or +`GuacamoleTunnel`. + +(java-writing-protocol)= + +### `GuacamoleWriter` + +`GuacamoleWriter` provides a very basic `write()` function and a more abstract +version called `writeInstruction()` which writes instances of +`GuacamoleInstruction`. These functions are analogous to the `read()` and +`readInstruction()` functions provided by `GuacamoleReader`, and have similar +restrictions: the contract imposed by `write()` requires that written +instructions be complete. + +The only concrete implementation of `GuacamoleWriter` is +`WriterGuacamoleWriter`, which wraps a Java `Writer`, using that as the +destination for Guacamole instruction data, but you would not normally directly +use this class, nor instantiate it yourself. It is used by +`ConfiguredGuacamoleSocket` to complete the Guacamole protocol handshake +procedure, and it is used by `GuacamoleHTTPTunnelServlet` within `doWrite()` to +implement the writing half of the tunnel. + +If necessary, a `GuacamoleWriter` can be retrieved from any `GuacamoleSocket` +or `GuacamoleTunnel`, but in most cases, the classes provided by the Guacamole +Java API which already use `GuacamoleWriter` will be sufficient. + diff --git a/doc/1.5.5/gug/_sources/guacamole-docker.md.txt b/doc/1.5.5/gug/_sources/guacamole-docker.md.txt new file mode 100644 index 000000000..e351ead25 --- /dev/null +++ b/doc/1.5.5/gug/_sources/guacamole-docker.md.txt @@ -0,0 +1,1032 @@ +Installing Guacamole with Docker +================================ + +Guacamole can be deployed using Docker, removing the need to build +guacamole-server from source or configure the web application manually. The +Guacamole project provides officially-supported Docker images for both +Guacamole and guacd which are kept up-to-date with each release. + +A typical Docker deployment of Guacamole will involve three separate +containers, linked together at creation time: + +`guacamole/guacd` +: Provides the guacd daemon, built from the released guacamole-server source + with support for VNC, RDP, SSH, telnet, and Kubernetes. + +`guacamole/guacamole` +: Provides the Guacamole web application running within Tomcat 8 with support + for WebSocket. The configuration necessary to connect to guacd, MySQL, + PostgreSQL, LDAP, etc. will be generated automatically when the image starts + based on Docker links or environment variables. + +`mysql` or `postgresql` +: Provides the database that Guacamole will use for authentication and storage + of connection configuration data. + +This separation is important, as it facilitates upgrades and maintains proper +separation of concerns. With the database separate from Guacamole and guacd, +those containers can be freely destroyed and recreated at will. The only +container which must persist data through upgrades is the database. + +(guacd-docker-image)= + +Running the guacd Docker image +------------------------------ + +The guacd Docker image is built from the released guacamole-server source with +support for VNC, RDP, SSH, telnet, and Kubernetes. Common pitfalls like +installing the required dependencies, installing fonts for SSH, telnet, or +Kubernetes, and ensuring the FreeRDP plugins are installed to the correct +location are all taken care of. It will simply just work. + +(guacd-docker-guacamole)= + +### Running guacd for use by the Guacamole Docker image + +When running the guacd image with the intent of linking to a Guacamole +container, no ports need be exposed on the network. Access to these ports will +be handled automatically by Docker during linking, and the Guacamole image will +properly detect and configure the connection to guacd. + +```console +$ docker run --name some-guacd -d guacamole/guacd +``` +When run in this manner, guacd will be listening on its default port 4822, but +this port will only be available to Docker containers that have been explicitly +linked to `some-guacd`. + +The log level of guacd can be controlled with the `GUACD_LOG_LEVEL` environment +variable. The default value is `info`, and can be set to any of the valid +settings for the guacd log flag (-L). + +```console +$ docker run -e GUACD_LOG_LEVEL=debug -d guacamole/guacd +``` + +(guacd-docker-external)= + +### Running guacd for use by services outside Docker + +If you are not going to use the Guacamole image, you can still leverage the +guacd image for ease of installation and maintenance. By exposing the guacd +port, 4822, services external to Docker will be able to access guacd. + +:::{important} +*Take great care when doing this* - guacd is a passive proxy and does not +perform any kind of authentication. + +If you do not properly isolate guacd from untrusted parts of your network, +malicious users may be able to use guacd as a jumping point to other systems. +::: + +```console +$ docker run --name some-guacd -d -p 4822:4822 guacamole/guacd +``` + +guacd will now be listening on port 4822, and Docker will expose this port on +the same server hosting Docker. Other services, such as an instance of Tomcat +running outside of Docker, will be able to connect to guacd directly. + +(guacamole-docker-image)= + +The Guacamole Docker image +-------------------------- + +The Guacamole Docker image is built on top of a standard Tomcat 8 image and +takes care of all configuration automatically. The configuration information +required for guacd and the various authentication mechanisms are specified with +environment variables or Docker links given when the container is created. + +:::{important} +If using [PostgreSQL](guacamole-docker-postgresql) or [MySQL](guacamole-docker-mysql) +for authentication, *you will need to initialize the database manually*. +Guacamole will not automatically create its own tables, but SQL scripts are +provided to do this. +::: + +Once the Guacamole image is running, Guacamole will be accessible at +{samp}`http://{HOSTNAME}:8080/guacamole/`, where `HOSTNAME` is the hostname or +address of the machine hosting Docker. + +(guacamole-docker-config-via-env)= + +### Configuring Guacamole when using Docker + +When running Guacamole using Docker, the traditional approach to configuring +Guacamole by editing `guacamole.properties` is less convenient. When using +Docker, you may wish to make use of the `enable-environment-properties` +configuration property, which allows you to specify values for arbitrary +Guacamole configuration properties using environment variables. This is covered +in [](configuring-guacamole). + +(guacamole-docker-guacd)= + +### Connecting Guacamole to guacd + +The Guacamole Docker image needs to be able to connect to guacd to establish +remote desktop connections, just like any other Guacamole deployment. The +connection information needed by Guacamole will be provided either via a Docker +link or through environment variables. + +If you will be using Docker to provide guacd, and you wish to use a Docker link +to connect the Guacamole image to guacd, the connection details are implied by +the Docker link: + +```console +$ docker run --name some-guacamole \ + --link some-guacd:guacd \ + ... + -d -p 8080:8080 guacamole/guacamole +``` + +If you are not using Docker to provide guacd, you will need to provide the +network connection information yourself using additional environment variables: + +`GUACD_HOSTNAME` +: The hostname of the guacd instance to use to establish remote desktop + connections. *This is required if you are not using Docker to provide guacd.* + +`GUACD_PORT` +: The port that Guacamole should use when connecting to guacd. This environment + variable is optional. If not provided, the standard guacd port of 4822 will + be used. + +The `GUACD_HOSTNAME` and, if necessary, `GUACD_PORT` environment variables can +thus be used in place of a Docker link if using a Docker link is impossible or +undesirable: + +```console +$ docker run --name some-guacamole \ + -e GUACD_HOSTNAME=172.17.42.1 \ + -e GUACD_PORT=4822 \ + ... + -d -p 8080:8080 guacamole/guacamole +``` + +*A connection to guacd is not the only thing required for Guacamole to work*; +some authentication mechanism needs to be configured, as well. +[MySQL](guacamole-docker-mysql), [PostgreSQL](guacamole-docker-postgresql), and +[LDAP](guacamole-docker-ldap) are supported for this, and are described in more +detail in the sections below. If the required configuration options for at +least one authentication mechanism are not provided, the Guacamole image will +not be able to start up, and you will see an error. + +(guacamole-docker-mysql)= + +### MySQL authentication + +To use Guacamole with the MySQL authentication backend, you will need either a +Docker container running the `mysql` image, or network access to a working +installation of MySQL. The connection to MySQL can be specified using either +environment variables or a Docker link. + +(initializing-guacamole-docker-mysql)= + +#### Initializing the MySQL database + +If your database is not already initialized with the Guacamole schema, you will +need to do so prior to using Guacamole. A convenience script for generating the +necessary SQL to do this is included in the Guacamole image. + +To generate a SQL script which can be used to initialize a fresh MySQL database +as documented in [](jdbc-auth): + +```console +$ docker run --rm guacamole/guacamole /opt/guacamole/bin/initdb.sh --mysql > initdb.sql +``` + +Alternatively, you can use the SQL scripts included with the database +authentication. + +Once this script is generated, you must: + +1. Create a database for Guacamole within MySQL, such as `guacamole_db`. + +2. Create a user for Guacamole within MySQL with access to this database, such + as `guacamole_user`. + +3. Run the script on the newly-created database. + +The process for doing this via the {command}`mysql` utility included with MySQL +is documented [](jdbc-auth). + +(guacamole-docker-mysql-connecting)= + +#### Connecting Guacamole to MySQL + +If your MySQL database is provided by another Docker container, and you wish to +use a Docker link to connect the Guacamole image to your database, the +connection details are implied by the Docker link itself: + +```console +$ docker run --name some-guacamole \ + --link some-guacd:guacd \ + --link some-mysql:mysql \ + ... + -d -p 8080:8080 guacamole/guacamole +``` + +If you are not using Docker to provide your MySQL database, you will need to +provide the network connection information yourself using additional +environment variables: + +`MYSQL_HOSTNAME` +: The hostname of the database to use for Guacamole authentication. *This is + required if you are not using Docker to provide your MySQL database.* + +`MYSQL_PORT` +: The port that Guacamole should use when connecting to MySQL. This environment + variable is optional. If not provided, the standard MySQL port of 3306 will + be used. + +The `MYSQL_HOSTNAME` and, if necessary, `MYSQL_PORT` environment variables can +thus be used in place of a Docker link if using a Docker link is impossible or +undesirable: + +```console +$ docker run --name some-guacamole \ + --link some-guacd:guacd \ + -e MYSQL_HOSTNAME=172.17.42.1 \ + ... + -d -p 8080:8080 guacamole/guacamole +``` + +Note that a Docker link to guacd (the `--link some-guacd:guacd` option above) +is not required any more than a Docker link is required for MySQL. The +connection information for guacd can be specified using environment variables, +as described in [](guacamole-docker-guacd). + +(guacamole-docker-mysql-required-vars)= + +#### Required environment variables + +Using MySQL for authentication requires additional configuration parameters +specified via environment variables. These variables collectively describe how +Guacamole will connect to MySQL: + +`MYSQL_DATABASE` +: The name of the database to use for Guacamole authentication. + +`MYSQL_USER` +: The user that Guacamole will use to connect to MySQL. + +`MYSQL_PASSWORD` +: The password that Guacamole will provide when connecting to MySQL as + `MYSQL_USER`. + +If any required environment variables are omitted, you will receive an error +message in the logs, and the image will stop. You will then need to recreate +the container with the proper variables specified. + +(guacamole-docker-mysql-optional-vars)= + +#### Optional environment variables + +Additional optional environment variables may be used to override Guacamole's +default behavior with respect to concurrent connection use by one or more +users. Concurrent use of connections and connection groups can be limited to an +overall maximum and/or a per-user maximum: + + +`MYSQL_ABSOLUTE_MAX_CONNECTIONS` +: The absolute maximum number of concurrent connections to allow at any time, + regardless of the Guacamole connection or user involved. If set to "0", this + will be unlimited. Because this limit applies across all Guacamole + connections, it cannot be overridden if set. + + *By default, the absolute total number of concurrent connections is unlimited + ("0").* + +`MYSQL_DEFAULT_MAX_CONNECTIONS` +: The maximum number of concurrent connections to allow to any one Guacamole + connection. If set to "0", this will be unlimited. This can be overridden on + a per-connection basis when editing a connection. + + *By default, overall concurrent use of connections is unlimited ("0").* + +`MYSQL_DEFAULT_MAX_GROUP_CONNECTIONS` +: The maximum number of concurrent connections to allow to any one Guacamole + connection group. If set to "0", this will be unlimited. This can be + overridden on a per-group basis when editing a connection group. + + *By default, overall concurrent use of connection groups is unlimited ("0").* + +`MYSQL_DEFAULT_MAX_CONNECTIONS_PER_USER` +: The maximum number of concurrent connections to allow a single user to + maintain to any one Guacamole connection. If set to "0", this will be + unlimited. This can be overridden on a per-connection basis when editing a + connection. + + *By default, per-user concurrent use of connections is unlimited ("0").* + +`MYSQL_DEFAULT_MAX_GROUP_CONNECTIONS_PER_USER` +: The maximum number of concurrent connections to allow a single user to + maintain to any one Guacamole connection group. If set to "0", this will be + unlimited. This can be overridden on a per-group basis when editing a + connection group. + + *By default, per-user concurrent use of connection groups is limited to one + ("1")*, to prevent a balancing connection group from being completely + exhausted by one user alone. + +`MYSQL_AUTO_CREATE_ACCOUNTS` +: Whether or not accounts that do not exist in the MySQL database will be + automatically created when successfully authenticated through other modules. + If set to "true" accounts will be automatically created. Otherwise, and by + default, accounts will not be automatically created and will need to be + manually created in order for permissions within the MySQL database extension + to be assigned to users authenticated with other modules. + +(guacamole-docker-postgresql)= + +### PostgreSQL authentication + +To use Guacamole with the PostgreSQL authentication backend, you will +need either a Docker container running the `postgres` image, or +network access to a working installation of PostgreSQL. The connection +to PostgreSQL can be specified using either environment variables or a +Docker link. + +(initializing-guacamole-docker-postgresql)= + +#### Initializing the PostgreSQL database + +If your database is not already initialized with the Guacamole schema, you will +need to do so prior to using Guacamole. A convenience script for generating the +necessary SQL to do this is included in the Guacamole image. + +To generate a SQL script which can be used to initialize a fresh PostgreSQL +database as documented in [](jdbc-auth): + +```console +$ docker run --rm guacamole/guacamole /opt/guacamole/bin/initdb.sh --postgresql > initdb.sql +``` + +Alternatively, you can use the SQL scripts included with the database +authentication. + +Once this script is generated, you must: + +1. Create a database for Guacamole within PostgreSQL, such as + `guacamole_db`. + +2. Run the script on the newly-created database. + +3. Create a user for Guacamole within PostgreSQL with access to the tables and + sequences of this database, such as `guacamole_user`. + +The process for doing this via the {command}`psql` and {command}`createdb` +utilities included with PostgreSQL is documented in [](jdbc-auth). + +(guacamole-docker-postgresql-connecting)= + +#### Connecting Guacamole to PostgreSQL + +If your PostgreSQL database is provided by another Docker container, and you +wish to use a Docker link to connect the Guacamole image to your database, the +connection details are implied by the Docker link itself: + +```console +$ docker run --name some-guacamole \ + --link some-guacd:guacd \ + --link some-postgres:postgres \ + ... + -d -p 8080:8080 guacamole/guacamole +``` + +If you are not using Docker to provide your PostgreSQL database, you will need +to provide the network connection information yourself using additional +environment variables: + +`POSTGRESQL_HOSTNAME` +: The hostname of the database to use for Guacamole authentication. *This is + required if you are not using Docker to provide your PostgreSQL database.* + +`POSTGRESQL_PORT` +: The port that Guacamole should use when connecting to PostgreSQL. This + environment variable is optional. If not provided, the standard PostgreSQL + port of 5432 will be used. + +The `POSTGRESQL_HOSTNAME` and, if necessary, `POSTGRESQL_PORT` environment +variables can thus be used in place of a Docker link if using a Docker link is +impossible or undesirable: + +```console +$ docker run --name some-guacamole \ + --link some-guacd:guacd \ + -e POSTGRESQL_HOSTNAME=172.17.42.1 \ + ... + -d -p 8080:8080 guacamole/guacamole +``` + +Note that a Docker link to guacd (the `--link some-guacd:guacd` option above) +is not required any more than a Docker link is required for PostgreSQL. The +connection information for guacd can be specified using environment variables, +as described in [](guacamole-docker-guacd). + +(guacamole-docker-postgresql-required-vars)= + +#### Required environment variables + +Using PostgreSQL for authentication requires additional configuration +parameters specified via environment variables. These variables collectively +describe how Guacamole will connect to PostgreSQL: + +`POSTGRESQL_DATABASE` +: The name of the database to use for Guacamole authentication. + +`POSTGRESQL_USER` +: The user that Guacamole will use to connect to PostgreSQL. + +`POSTGRESQL_PASSWORD` +: The password that Guacamole will provide when connecting to PostgreSQL as + `POSTGRESQL_USER`. + +If any required environment variables are omitted, you will receive an +error message in the logs, and the image will stop. You will then need +to recreate the container with the proper variables specified. + +(guacamole-docker-postgresql-optional-vars)= + +#### Optional environment variables + +Additional optional environment variables may be used to override Guacamole's +default behavior with respect to concurrent connection use by one or more +users. Concurrent use of connections and connection groups can be limited to an +overall maximum and/or a per-user maximum: + +`POSTGRESQL_ABSOLUTE_MAX_CONNECTIONS` +: The absolute maximum number of concurrent connections to allow at any time, + regardless of the Guacamole connection or user involved. If set to "0", this + will be unlimited. Because this limit applies across all Guacamole + connections, it cannot be overridden if set. + + *By default, the absolute total number of concurrent connections is unlimited + ("0").* + +`POSTGRESQL_DEFAULT_MAX_CONNECTIONS` +: The maximum number of concurrent connections to allow to any one Guacamole + connection. If set to "0", this will be unlimited. This can be overridden on + a per-connection basis when editing a connection. + + *By default, overall concurrent use of connections is unlimited ("0").* + +`POSTGRESQL_DEFAULT_MAX_GROUP_CONNECTIONS` +: The maximum number of concurrent connections to allow to any one Guacamole + connection group. If set to "0", this will be unlimited. This can be + overridden on a per-group basis when editing a connection group. + + *By default, overall concurrent use of connection groups is unlimited ("0").* + +`POSTGRESQL_DEFAULT_MAX_CONNECTIONS_PER_USER` +: The maximum number of concurrent connections to allow a single user to + maintain to any one Guacamole connection. If set to "0", this will be + unlimited. This can be overridden on a per-connection basis when editing a + connection. + + *By default, per-user concurrent use of connections is unlimited ("0").* + +`POSTGRESQL_DEFAULT_MAX_GROUP_CONNECTIONS_PER_USER` +: The maximum number of concurrent connections to allow a single user to + maintain to any one Guacamole connection group. If set to "0", this will be + unlimited. This can be overridden on a per-group basis when editing a + connection group. + + *By default, per-user concurrent use of connection groups is limited to one + ("1")*, to prevent a balancing connection group from being completely + exhausted by one user alone. + +`POSTGRESQL_AUTO_CREATE_ACCOUNTS` +: Whether or not accounts that do not exist in the PostgreSQL database will be + automatically created when successfully authenticated through other modules. + If set to "true", accounts will be automatically created. Otherwise, and by + default, accounts will not be automatically created and will need to be + manually created in order for permissions within the PostgreSQL database + extension to be assigned to users authenticated with other modules. + +Optional environment variables may also be used to override Guacamole's default +behavior with respect to timeouts at the database and network level: + +`POSTGRESQL_DEFAULT_STATEMENT_TIMEOUT` +: The number of seconds the driver will wait for a response from the database, + before aborting the query. A value of 0 (the default) means the timeout is + disabled. + +`POSTGRESQL_SOCKET_TIMEOUT` +: The number of seconds to wait for socket read operations. If reading from the + server takes longer than this value, the connection will be closed. This can + be used to handle network problems such as a dropped connection to the + database. Similar to `POSTGRESQL_DEFAULT_STATEMENT_TIMEOUT`, it will also abort + queries that take too long. A value of 0 (the default) means the timeout is + disabled. + +(guacamole-docker-ldap)= + +### LDAP authentication + +To use Guacamole with the LDAP authentication backend, you will need network +access to an LDAP directory. Unlike MySQL and PostgreSQL, the Guacamole Docker +image does not support Docker links for LDAP; the connection information *must* +be specified using environment variables: + + +`LDAP_HOSTNAME` +: The hostname or IP address of your LDAP server. + +`LDAP_PORT` +: The port your LDAP server listens on. By default, this will be 389 for + unencrypted LDAP or LDAP using STARTTLS, and 636 for LDAP over SSL (LDAPS). + +`LDAP_ENCRYPTION_METHOD` +: The encryption mechanism that Guacamole should use when communicating with + your LDAP server. Legal values are "none" for unencrypted LDAP, "ssl" for + LDAP over SSL/TLS (commonly known as LDAPS), or "starttls" for STARTTLS. If + omitted, encryption will not be used. + +Only the `LDAP_HOSTNAME` variable is required, but you may also need to specify +`LDAP_PORT` or `LDAP_ENCRYPTION_METHOD` if your LDAP directory uses encryption +or listens on a non-standard port: + +```console +$ docker run --name some-guacamole \ + --link some-guacd:guacd \ + -e LDAP_HOSTNAME=172.17.42.1 \ + ... + -d -p 8080:8080 guacamole/guacamole +``` + +Note that a Docker link to guacd (the `--link some-guacd:guacd` option above) +is not required. Similar to LDAP, the connection information for guacd can be +specified using environment variables, as described in [](guacamole-docker-guacd). + +(guacamole-docker-ldap-required-vars)= + +#### Required environment variables + +Using LDAP for authentication requires additional configuration parameters +specified via environment variables. These variables collectively describe how +Guacamole will query your LDAP directory: + +`LDAP_USER_BASE_DN` +: The base of the DN for all Guacamole users. All Guacamole users that will be + authenticating against LDAP must be descendents of this base DN. + +As with the other authentication mechanisms, if any required environment +variables are omitted (including those required for connecting to the LDAP +directory over the network), you will receive an error message in the logs, and +the image will stop. You will then need to recreate the container with the +proper variables specified. + +(guacamole-docker-ldap-optional-vars)= + +#### Optional environment variables + +Additional optional environment variables may be used to configure the details +of your LDAP directory hierarchy, or to enable more flexible searching for user +accounts: + +`LDAP_GROUP_BASE_DN` +: The base of the DN for all groups that may be referenced within Guacamole + configurations using the standard seeAlso attribute. All groups which will be + used to control access to Guacamole configurations must be descendents of + this base DN. *If this variable is omitted, the seeAlso attribute will have + no effect on Guacamole configurations.* + +`LDAP_GROUP_SEARCH_FILTER` +: The search filter used to query the LDAP tree for groups that may be used by + other extensions to define permissions. *If this property is omitted the + default of `(objectClass=*)` will be used.* + +`LDAP_GROUP_NAME_ATTRIBUTE` +: The attribute or attributes which define the unique name of user groups in + the LDAP directory. Usually, and by default, this will simplify be "cn". If + your LDAP directory contains groups whose names are dictated by different + attributes, multiple attributes can be specified here, separated by + commas. + +`LDAP_MEMBER_ATTRIBUTE` +: The attribute which contains the members within all group objects in the + LDAP directory. Usually, and by default, this will simply be "member". If + your LDAP directory contains groups whose members are dictated by a + different attribute it can be specified, here. + +`LDAP_MEMBER_ATTRIBUTE_TYPE` +: Specify whether the attribute defined in `LDAP_MEMBER_ATTRIBUTE` identifies + a group member by DN or usercode (user id). Valid values are "dn" (the + default, if not specified) or "uid". + +`LDAP_SEARCH_BIND_DN` +: The DN (Distinguished Name) of the user to bind as when authenticating users + that are attempting to log in. If specified, Guacamole will query the LDAP + directory to determine the DN of each user that logs in. If omitted, each + user's DN will be derived directly using the base DN specified with + `LDAP_USER_BASE_DN`. + +`LDAP_SEARCH_BIND_PASSWORD` +: The password to provide to the LDAP server when binding as + `LDAP_SEARCH_BIND_DN` to authenticate other users. This variable is only + used if `LDAP_SEARCH_BIND_DN` is specified. If omitted, but + `LDAP_SEARCH_BIND_DN` is specified, Guacamole will attempt to bind with the + LDAP server without a password. + +`LDAP_USERNAME_ATTRIBUTE` +: The attribute or attributes which contain the username within all Guacamole + user objects in the LDAP directory. Usually, and by default, this will simply + be "uid". If your LDAP directory contains users whose usernames are dictated + by different attributes, multiple attributes can be specified here, separated + by commas, but beware: *doing so requires that a search DN be provided with + `LDAP_SEARCH_BIND_DN`*. + +`LDAP_USER_ATTRIBUTES` +: The attribute or attributes to retrieve from the LDAP directory for users + when they log in, with multiple attributes separated by commas. If specified, + the attributes listed are retrieved from each authenticated users and + dynamically applied to the parameters of that user's connections as + parameter tokens with the prefix `LDAP_`. + +`LDAP_CONFIG_BASE_DN` +: The base of the DN for all Guacamole configurations. If omitted, the + configurations of Guacamole connections will simply not be queried from the + LDAP directory, and you will need to store them elsewhere, such as within a + MySQL or PostgreSQL database. + +`LDAP_DEREFERENCE_ALIASES` +: Controls whether or not the LDAP connection follows (dereferences) aliases + as it searches the tree. Possible values for this property are "never" + (the default), so that aliases will never be followed, "searching", to + dereference during the search operations after the base object is located, + "finding", to dereference in order to locate the search base but not during + the actual search, and "always", to always dereference aliases. + +`LDAP_FOLLOW_REFERRALS` +: This option controls whether or not the LDAP module follows referrals when + processing search results. Referrals can be pointers to another part of the + current LDAP tree, or to a completely different tree altogether, hosted on + a different server and/or port. Valid options are "false" (the default), + which means that referrals will be ignored, or "true", where the client + will attempt to follow the referrals in order to continue the search. The + referral will be followed with the same credentials used to search the + initial tree. + +`LDAP_MAX_REFERRAL_HOPS` +: When LDAP referrals are enabled, this option controls how many hops the + LDAP client will follow before refusing to continue. The default is 5. + +`LDAP_MAX_SEARCH_RESULTS` +: The maximum number of search results that can be returned by a single LDAP + query. LDAP queries which exceed this number of results may fail. By default + the maximum number of results for a single LDAP query is 1000. + +`LDAP_OPERATION_TIMEOUT` +: The timeout, in seconds, of any single LDAP operation, after which the + operation will be aborted. The default is 30 seconds. + +As documented in [](ldap-auth), Guacamole does support combining LDAP with a +MySQL or PostgreSQL database, and this can be configured with the Guacamole +Docker image, as well. Each of these authentication mechanisms is independently +configurable using their respective environment variables, and by providing the +required environment variables for multiple systems, Guacamole will +automatically be configured to use each when the Docker image starts. + +(guacamole-docker-header-auth)= + +### Header Authentication + +The header authentication extension can be used to authenticate Guacamole +through a trusted third-party server, where the authenticated user's username +is passed back to Guacamole via a specific HTTP header. The following are +valid Docker variables for enabling and configuring header authentication: + +`HEADER_ENABLED` +: Enables authentication via the header extension, which causes the extension + to be loaded when Guacamole starts. By default this is false and the header + extension will not be loaded. + +`HTTP_AUTH_HEADER` +: Optional environment variable that, if set, configures the name of the HTTP + header that will be used used to authenticate the user to Guacamole. If this + is not specified the default value of REMOTE_USER will be used. + +(guacamole-docker-saml-auth)= + +### SAML Authentication + +SAML authentication can be configured to allow the Guacamole Client instance +running in a Docker container to authentication with a SAML Identity Provider +(IdP). The IdP verifies the user authentication and then provides a response +back to Guacamole with the name of the user and any other configured +attributes contained in the SAML assertion. More details on SAML +authentication with Guacamole can be found on the [](saml-auth) page. + +(guacamole-docker-saml-auth-required-vars)= + +#### Required environment variables + +Configuration of SAML authentication requires that either a metadata file +or a few other basic configuration parameters be provided to the container: + +`SAML_IDP_METADATA_URL` +: The URI of a file that provides information about the SAML IdP that will + be used to authenticate users. This can either be a local file on the + filesystem, or it can be the URL of a file on a remote server. Note that + if the file is located on a local filesystem it will have to be made + available to the Docker container by either copying the file in or using + a file located on a volume that is shared with the container. Metadata + files for SAML authentication are generally obtained from the IdP. + +`SAML_IDP_URL` +: If a metadata file is not provided, or does not contain the URL of the + Identity Provider, then this variable must be present in order to + tell Guacamole the location of the IdP, which is where users will be + redirected for authentication. + +`SAML_ENTITY_ID` +: The SAML Entity Identifier of the Guacamole Client instance that will + be provided to the SAML IdP. This is generally the URL of the + Guacamole server. If the metadata URL is not provided, or the + metadata file does not contain an entity ID, this variable must + be provided. + +`SAML_CALLBACK_URL` +: The URL of the Guacamole instance that will be given to the SAML IdP, + which will be used by the IdP to redirect the user back to the Guacamole + instance after the user has been validated. If the metadata file is not + provided, or does not contain a callback URL for the Guacamole instance, + this variable must be provided. + +(guacamole-docker-saml-auth-optional-vars)= + +#### Optional environment variables + +Other environment variables can be provided to adjust the behavior of the +SAML authentication extension. + +`SAML_STRICT` +: A boolean value that configures whether or not the Guacamole SAML client + will perform strict security checks on servers and certificates. This is + normally enabled and should never be disabled in a production environment. + +`SAML_COMPRESS_REQUEST` +: A boolean value that configures whether or not the Guacamole SAML client + will enable compression on requests sent to the IdP. This defaults to + enabled (true). + +`SAML_COMPRESS_RESPONSE` +: A boolean value that configures whether or not the Guacamole SAML client + will request that responses from the IdP be compressed. This defaults to + enabled (true). + +`SAML_GROUP_ATTRIBUTE` +: The name of the attribute within the SAML assertion that contains the + group membership of the user who is being authenticated, if any. This + property is optional and defaults to "groups". + +`SAML_DEBUG` +: Whether or not the Guacamole SAML client should provide verbose logging + that may be helpful in debugging problems with SAML authentication. This + is optional and defaults to false - debugging will not be enabled. + +(guacamole-docker-totp-auth)= + +### TOTP Authentication + +TOTP authentication can be configured to allow the Guacamole Client instance +running in a Docker container to use a second layer of authentication using a +two factor authenticator application and short one-time codes. More details +on TOTP authentication with Guacamole can be found on the [](totp-auth) page. + +(guacamole-totp-auth-required-vars)= + +#### Required environment variables + +Configuration of TOTP authentication requires that the following enviroment +variable be provided to the container: + +`TOTP_ENABLED` +: If the environment variable is provided with the value of "true" then the + extension is enabled inside the docker container. + +(guacamole-docker-totp-auth-optional-vars)= + +#### Optional environment variables + +Other environment variables can be provided to adjust the behavior of the +TOTP authentication extension. + +:::{important} +The duration and/or hash algorithm are not settable in some widely used autenticator +apps. Setting these values to something other than the defaults might make the codes +unusable if your authenticator app does not support setting these parameters. +::: + +`TOTP_ISSUER` +: The human-readable name of the entity issuing user accounts. If not specified, + "Apache Guacamole" will be used by default. + +`TOTP_DIGITS` +: The number of digits which should be included in each generated TOTP code. + Legal values are 6, 7, or 8. By default, 6-digit codes are generated. + +`TOTP_PERIOD` +: The duration that each generated code should remain valid, in seconds. + By default, each code remains valid for 30 seconds. + +`TOTP_MODE` +: The hash algorithm that should be used to generate TOTP codes. Legal values are + "sha1", "sha256", and "sha512". By default, "sha1" is used. + +(guacamole-docker-history-recording-storage)= + +### History Recording Storage Extension + +The extension that enables viewing historical recordings from within the +Guacamole Client interface can be enabled by settings the search path +variable, as noted below, to a location where the extension will look +to find available recordings. + +When setting this up in a container environment, you'll likely need +to use volumes to make the same directory available to both the +guacd container and the guacamole (client) container. In addition +to setting up the volume to share data between the two, you'll also +need to configure permissions on the volume such that the users +running each of the containers have access. The guacamole/guacd +container, which will need write access to this shared location, +runs with an effective UID and GID of 1000. The guacamole/guacamole +(client) container, which will require read access to this location, +runs with an effective UID and GID of 1001. + +For more information on this extension, please see the [](recording-playback) +page in the manual. + +(guacamole-docker-history-recording-storage-required-vars)= + +#### Required environment variables + +In order to enable this extension you must set the following +environment variable in your guacamole container configuration: + +`RECORDING_SEARCH_PATH` +: Set to the absolute path of the folder **within the guacamole container** + where the extension should look for past recordings. + +(guacamole-docker-tomcat-remote-ip-valve)= + +### Running Guacamole behind a proxy + +To run Guacamole behind a reverse proxy, Tomcat's +[`RemoteIpValve`](https://tomcat.apache.org/tomcat-8.5-doc/config/valve.html#Remote_IP_Valve) +must be configured as described in [](tomcat-remote-ip) to ensure that the +user's IP address can be correctly determined and logged. The Guacamole Docker +image provides environment variables for configuring this. + +(guacamole-docker-tomcat-remote-ip-valve-required-vars)= + +#### Required environment variables + +The following environment variable must be set in order to configure Tomcat's +[`RemoteIpValve`](https://tomcat.apache.org/tomcat-8.5-doc/config/valve.html#Remote_IP_Valve): + +`REMOTE_IP_VALVE_ENABLED` +: Set to `true` to enable Tomcat's [`RemoteIpValve`](https://tomcat.apache.org/tomcat-8.5-doc/config/valve.html#Remote_IP_Valve). + **If this is not set, all other variables related to `RemoteIpValve` will be + ignored.** + +(guacamole-docker-tomcat-remote-ip-valve-optional-vars)= + +#### Optional environment variables + +Additional environment variables are available to fine tune the configuration +of `RemoteIpValve`. **It is not typically necessary to set these variables.** +The default values are correct for most deployments. + +`PROXY_ALLOWED_IPS_REGEX` +: A regular expression matching only the IP addresses that should be trusted to + send proxy headers, corresponding to the `internalProxies` attribute of + `RemoteIpValve`. Proxy headers from other addresses will be ignored. The + regular expression must conform to the format accepted by [Java's `Pattern` + class](https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html), + which is largely compatible with Perl. + + If omitted, Tomcat's default which matches private IPv4 and IPv6 addresses + will be used. + +`PROXY_BY_HEADER` +: The HTTP header sent by the proxy that contains the list of proxies that have + processed the request. This corresponds to the `proxiesHeader` attribute of + `RemoteIpValve`. By default, this will be `X-Forwarded-By`. + +`PROXY_IP_HEADER` +: The HTTP header sent by the proxy that contains the user's browser's IP + address. This corresponds to the `remoteIpHeader` attribute of + `RemoteIpValve`. By default, this will be `X-Forwarded-For`. + +`PROXY_PROTOCOL_HEADER` +: The HTTP header sent by the proxy that contains the protocol used by the + user's browser to connect to the proxy. This corresponds to the + `protocolHeader` attribute of `RemoteIpValve`. By default, this will be + `X-Forwarded-Proto`. + +(guacamole-docker-guacamole-home)= + +### Custom extensions and `GUACAMOLE_HOME` + +If you have your own or third-party extensions for Guacamole which are not +supported by the Guacamole Docker image, but are compatible with the version of +Guacamole within the image, you can still use them by providing a custom base +configuration using the `GUACAMOLE_HOME` environment variable: + +`GUACAMOLE_HOME` +: The absolute path to the directory within the Docker container to use *as a + template* for the image's automatically-generated [`GUACAMOLE_HOME`](guacamole-home). + Any configuration generated by the Guacamole Docker image based on other + environment variables will be applied to an independent copy of the contents + of this directory. + +You will *still* need to follow the steps required to create the contents of +[`GUACAMOLE_HOME`](guacamole-home) specific to your extension (placing the +extension itself within `GUACAMOLE_HOME/extensions/`, adding any properties to +`guacamole.properties`, etc.), but the rest of Guacamole's configuration will +be handled automatically, overlaid on top of a copy of the `GUACAMOLE_HOME` you +provide. + +Because the Docker image's `GUACAMOLE_HOME` environment variable must point to +a directory *within the container*, you will need to expose your custom +`GUACAMOLE_HOME` to the container using the `-v` option of `docker run`. The +container directory chosen can then be referenced in the `GUACAMOLE_HOME` +environment variable, and the image will handle the rest automatically: + +```console +$ docker run --name some-guacamole \ + ... + -v /local/path:/some-directory \ + -e GUACAMOLE_HOME=/some-directory \ + -d -p 8080:8080 guacamole/guacamole +``` + +(extension-priority)= + +### Extension priority and load order + +Guacamole extensions are loaded and evaluated in a specific, deterministic +order. This order can be important when multiple authentication extensions are +installed, as it dictates which extensions will be given the first chance to +accept or reject a user's credentials. By default, this order is dictated by +the sort order of their corresponding filenames. If necessary, extension +priority can be overridden with the `EXTENSION_PRIORITY` environment variable. + +`EXTENSION_PRIORITY` +: A comma-separated list of the namespaces of all extensions that should be + loaded in a specific order. The special value `*` can be used in lieu of a + namespace to represent all extensions that are not listed. All extensions + explicitly listed will be sorted in the order given, while all extensions + not explicitly listed will be sorted by their filenames. + + For example, to ensure support for SAML is loaded _first_: + + ``` + -e EXTENSION_PRIORITY="saml" + ``` + + Or to ensure support for SAML is loaded _last_: + + ``` + -e EXTENSION_PRIORITY="*, saml" + ``` + + If unsure which namespaces apply or the order that your extensions are + loaded, check the Guacamole logs. The namespaces and load order of all + installed extensions are logged by Guacamole during startup: + + ``` + ... + 23:32:06.467 [main] INFO o.a.g.extension.ExtensionModule - Multiple extensions are installed and will be loaded in order of decreasing priority: + 23:32:06.468 [main] INFO o.a.g.extension.ExtensionModule - - [postgresql] "PostgreSQL Authentication" (/etc/guacamole/extensions/guacamole-auth-jdbc-postgresql-1.5.5.jar) + 23:32:06.468 [main] INFO o.a.g.extension.ExtensionModule - - [ldap] "LDAP Authentication" (/etc/guacamole/extensions/guacamole-auth-ldap-1.5.5.jar) + 23:32:06.468 [main] INFO o.a.g.extension.ExtensionModule - - [openid] "OpenID Authentication Extension" (/etc/guacamole/extensions/guacamole-auth-sso-openid-1.5.5.jar) + 23:32:06.468 [main] INFO o.a.g.extension.ExtensionModule - - [saml] "SAML Authentication Extension" (/etc/guacamole/extensions/guacamole-auth-sso-saml-1.5.5.jar) + 23:32:06.468 [main] INFO o.a.g.extension.ExtensionModule - To change this order, set the "extension-priority" property or rename the extension files. The default priority of extensions is dictated by the sort order of their filenames. + ... + ``` + +(verifying-guacamole-docker)= + +### Verifying the Guacamole install + +Once the Guacamole image is running, Guacamole should be accessible at +{samp}`http://{HOSTNAME}:8080/guacamole/`, where `HOSTNAME` is the hostname or +address of the machine hosting Docker, and you *should* see a login screen. If +using MySQL or PostgreSQL, the database initialization scripts will have +created a default administrative user called "`guacadmin`" with the password +"`guacadmin`". *You should log in and change your password immediately.* If +using LDAP, you should be able to log in as any valid user within your LDAP +directory. + +If you cannot access Guacamole, or you do not see a login screen, check +Docker's logs using the `docker logs` command to determine if something is +wrong. Configuration parameters may have been given incorrectly, or the +database may be improperly initialized: + +```console +$ docker logs some-guacamole +``` + diff --git a/doc/1.5.5/gug/_sources/guacamole-ext.md.txt b/doc/1.5.5/gug/_sources/guacamole-ext.md.txt new file mode 100644 index 000000000..c8d9dc549 --- /dev/null +++ b/doc/1.5.5/gug/_sources/guacamole-ext.md.txt @@ -0,0 +1,699 @@ +guacamole-ext +============= + +While not strictly part of the Java API provided by the Guacamole project, +guacamole-ext is an API exposed by the Guacamole web application within a +separate project such that extensions, specifically authentication providers, +can be written to tweak Guacamole to fit well in existing deployments. + +Extensions to Guacamole can: + +1. Provide alternative authentication methods and sources of connection/user + data. + +2. Provide event listeners that will be notified as Guacamole performs tasks + such as authentication and tunnel connection. + +3. Theme or brand Guacamole through additional CSS files and static resources. + +4. Extend Guacamole's JavaScript code by providing JavaScript that will be + loaded automatically. + +5. Add additional display languages, or alter the translation strings of + existing languages. + +(ext-file-format)= + +Guacamole extension format +-------------------------- + +Guacamole extensions are standard Java `.jar` files which contain all classes, +library `.jar` files, and resources required by the extension, as well as the +Guacamole extension manifest. There is no set structure to an extension except +that: + +1. The `guac-manifest.json` manifest must be in the root of the archive. +2. Any required library `.jar` files that will not be placed within + [`GUACAMOLE_HOME/lib/`](guacamole-home) must be in the root of the archive. +3. Java classes and packages for the extension itself (or for unpacked + dependencies of the extension) will be read relative to the archive root, + as well. + +Beyond this, the semantics and locations associated with all other resources +within the extension are determined by the extension manifest alone. + +(ext-manifest)= + +### Extension manifest + +The Guacamole extension manifest is a single JSON file, `guac-manifest.json`, +which describes the location of each resource, the type of each resource, and +the version of Guacamole that the extension was built for. The manifest can +contain the following properties: + +`guacamoleVersion` +: The version string of the Guacamole release that this extension is written + for. *This property is required for all extensions.* The special version + string `"*"` can be used if the extension does not depend on a particular + version of Guacamole, but be careful - this will bypass version compatibility + checks, and should never be used if the extension does more than basic + theming or branding. + +`name` +: A human-readable name for the extension. *This property is required for all + extensions.* When your extension is successfully loaded, a message + acknowledging the successful loading of your extension by name will be + logged. + +`namespace` +: A unique string which identifies your extension. *This property is required + for all extensions.* This string should be unique enough that it is unlikely + to collide with the namespace of any other extension. + + If your extension contains static resources, those resources will be served + at a path derived from the namespace provided here. + +`authProviders` +: An array of the classnames of all `AuthenticationProvider` subclasses + provided by this extension. + +`listeners` +: An array of the classnames of all `Listener` subclasses provided by this + extension. + +`js` +: An array of all JavaScript files within the extension. All paths within this + array must be relative paths, and will be interpreted relative to the root of + the archive. + + JavaScript files declared here will be automatically loaded when the web + application loads within the user's browser. + +`css` +: An array of all CSS files within the extension. All paths within this array + must be relative paths, and will be interpreted relative to the root of the + archive. + + CSS files declared here will be automatically applied when the web + application loads within the user's browser. + +`html` +: An array of all HTML files within the extension that should be used to update + or replace existing HTML within the Guacamole interface. All paths within + this array must be relative paths, and will be interpreted relative to the + root of the archive. + + HTML files declared here will be automatically applied to other HTML within + the Guacamole interface when the web application loads within the user's + browser. The manner in which the files are applied is dictated by + `` tags within those same files. + +`translations` +: An array of all translation files within the extension. All paths within this + array must be relative paths, and will be interpreted relative to the root of + the archive. + + Translation files declared here will be automatically added to the available + languages. If a translation file provides a language that already exists + within Guacamole, its strings will override the strings of the existing + translation. + +`resources` +: An object where each property name is the name of a web resource file, and + each value is the mimetype for that resource. All paths within this object + must be relative paths, and will be interpreted relative to the root of the + archive. + + Web resources declared here will be made available to the application at + {samp}`app/ext/{NAMESPACE}/{PATH}`, where `NAMESPACE` is the value of the + namespace property, and `PATH` is the declared web resource filename. + +The only absolutely required properties are `guacamoleVersion`, `name`, and +`namespace`, as they are used to identify the extension and for compatibility +checks. The most minimal `guac-manifest.json` will look something like this: + +```json +{ + "guacamoleVersion" : "1.5.5", + "name" : "My Extension", + "namespace" : "my-extension" +} +``` + +This will allow the extension to load, but does absolutely nothing otherwise. +Lacking the semantic information provided by the other properties, no other +files within the extension will be used. A typical `guac-manifest.json` for an +extension providing theming or branding would be more involved: + +```json +{ + + "guacamoleVersion" : "1.5.5", + + "name" : "My Extension", + "namespace" : "my-extension", + + "css" : [ "theme.css" ], + + "html" : [ "loginDisclaimer.html" ], + + "resources" : { + "images/logo.png" : "image/png", + "images/cancel.png" : "image/png", + "images/delete.png" : "image/png" + } + +} +``` + +(ext-patch-html)= + +### Updating existing HTML + +The existing HTML structure of Guacamole's interface can be modified by +extensions through special "patch" HTML files declared by the html property in +`guac-manifest.json`. These files are HTML fragments and are identical to any +other HTML file except that they contain Guacamole-specific meta tags that +instruct Guacamole to modify its own HTML in a particular way. Each meta tag +takes the following form: + +```html + +``` + +where `SELECTOR` is a CSS selector that matches the elements within the +Guacamole interface that serve as a basis for the modification, and `NAME` is +any one of the following defined modifications: + +`before` +: Inserts the specified HTML immediately before any element matching the CSS + selector. + +`after` +: Inserts the specified HTML immediately after any element matching the CSS + selector. + +`replace` +: Replaces any element matching the CSS selector with the specified HTML. + +`before-children` +: Inserts the specified HTML immediately before the first child (if any) of any + element matching the CSS selector. If a matching element has no children, the + HTML simply becomes the entire contents of the matching element. + +`after-children` +: Inserts the specified HTML immediately after the last child (if any) of any + element matching the CSS selector. If a matching element has no children, the + HTML simply becomes the entire contents of the matching element. + +`replace-children` +: Replaces the entire contents of any element matching the CSS selector with + the specified HTML. + +For example, to add a welcome message and link to some corporate privacy policy +(a fairly common need), you would add an HTML file like the following: + +```html + + +

      +``` + +After the extension is installed and Guacamole is restarted, the "welcome" div +and its contents will automatically be inserted directly below the login dialog +(the only element that would match `.login-ui .login-dialog`) as if they were +part of Guacamole's HTML in the first place. + +An example of an extension that modifies style and HTML components for the +purpose of providing custom "branding" of the Guacamole interface can be found +in the `doc/guacamole-branding-example` directory of the guacamole-client +source code, which can be found here: + + +(ext-environment)= + +Accessing the server configuration +---------------------------------- + +The configuration of the Guacamole server is exposed through the `Environment` +interface, specifically the `LocalEnvironment` implementation of this +interface. Through `Environment`, you can access all properties declared within +`guacamole.properties`, determine the proper hostname/port of guacd, and access +the contents of `GUACAMOLE_HOME`. + +(ext-simple-config)= + +### Custom properties + +If your extension requires generic, unstructured configuration parameters, +`guacamole.properties` is a reasonable and simple location for them. The +`Environment` interface provides direct access to `guacamole.properties` and +simple mechanisms for reading and parsing the properties therein. The value of +a property can be retrieved by calling `getProperty()`, which will return +`null` or a default value for undefined properties, or `getRequiredProperty()`, +which will throw an exception for undefined properties. + +For convenience, guacamole-ext contains several pre-defined property base +classes for common types: + +`BooleanGuacamoleProperty` +: The values "true" and "false" are parsed as their corresponding `Boolean` + values. Any other value results in a parse error. + +`IntegerGuacamoleProperty` +: Numeric strings are parsed as `Integer` values. Non-numeric strings will + result in a parse error. + +`LongGuacamoleProperty` +: Numeric strings are parsed as `Long` values. Non-numeric strings will result + in a parse error. + +`StringGuacamoleProperty` +: The property value is returned as an untouched `String`. No parsing is + performed, and parse errors cannot occur. + +`FileGuacamoleProperty` +: The property is interpreted as a filename, and a new `File` pointing to that + filename is returned. If the filename is invalid, a parse error will be + thrown. Note that the file need not exist or be accessible for the filename + to be valid. + +To use these types, you must extend the base class, implementing the +`getName()` function to identify your property. Typically, you would declare +these properties as static members of some class containing all properties +relevant to your extension: + +```java +public class MyProperties { + + public static MY_PROPERTY = new IntegerGuacamoleProperty() { + + @Override + public String getName() { return "my-property"; } + + }; + +} +``` + +Your property can then be retrieved with `getProperty()` or +`getRequiredProperty()`: + +```java +Integer value = environment.getProperty(MyProperties.MY_PROPERTY); +``` + +If you need more sophisticated parsing, you can also implement your own +property types by implementing the `GuacamoleProperty` interface. The only +functions to implement are `getName()`, which returns the name of the property, +and `parseValue()`, which parses a given string and returns its value. + +(ext-advanced-config)= + +### Advanced configuration + +If you need more structured data than provided by simple properties, you can +place completely arbitrary files in a hierarchy of your choosing anywhere +within `GUACAMOLE_HOME` as long as you avoid placing your files in directories +reserved for other purposes as described above. + +The `Environment` interface exposes the location of `GUACAMOLE_HOME` through +the `getGuacamoleHome()` function. This function returns a standard Java `File` +which can then be used to locate other files or directories within +`GUACAMOLE_HOME`: + +```java +File myConfigFile = new File(environment.getGuacamoleHome(), "my-config.xml"); +``` + +There is no guarantee that `GUACAMOLE_HOME` or your file will exist, and you +should verify this before proceeding further in your extension's configuration +process, but once this is done you can simply parse your file as you see fit. + +(ext-auth-providers)= + +Authentication providers +------------------------ + +Guacamole's authentication system is driven by authentication providers, which +are classes which implement the `AuthenticationProvider` interface defined by +guacamole-ext. When any page within Guacamole is visited, the following process +occurs: + +1. All currently installed extensions are polled, in lexicographic order of + their filenames, by invoking the `getAuthenticatedUser()` function with a + `Credentials` object constructed with the contents of the HTTP request. + + The credentials given are abstract. While the `Credentials` object provides + convenience access to a traditional username and password, *implementations + are not required to use usernames and passwords*. The entire contents of + the HTTP request is at your disposal, including parameters, cookies, and SSL + information. + +2. If an authentication attempt fails, the extension throws either a + `GuacamoleInsufficientCredentialsException` (if more credentials are needed + before validity can be determined) or `GuacamoleInvalidCredentialsException` + (if the credentials are technically sufficient, but are invalid as + provided). If all extensions fail to authenticate the user, the contents of + the exception thrown by the first extension to fail are used to produce the + user login prompt. + + *Note that this means there is no "login screen" in Guacamole per se; the + prompt for credentials for unauthenticated users is determined purely based + on the needs of the extension as declared within the authentication failure + itself.* + + If an authentication attempt succeeds, the extension returns an instance of + `AuthenticatedUser` describing the identity of the user that just + authenticated, and no further extensions are polled. + +3. If authentication has succeeded, and thus an `AuthenticatedUser` is + available, that `AuthenticatedUser` is passed to the `getUserContext()` + function of all extensions' authentication providers. Each extension now has + the opportunity to provide access to data for a user, even if that extension + did not originally authenticate the user. If no `UserContext` is returned + for the given `AuthenticatedUser`, then that extension has simply refused to + provide data for that user. + + The Guacamole interface will transparently unify the data from each + extension, providing the user with a view of all available connections. If + the user has permission to modify or administer any objects associated with + an extension, access to the administrative interface will be exposed as + well, again with a unified view of all applicable objects. + +:::{important} +Because authentication is decoupled from data storage/access, *you do not need +to implement full-blown data storage if you only wish to provide an additional +authentication mechanism*. You can instead implement only the authentication +portion of an `AuthenticationProvider`, and otherwise rely on the storage and +features provided by other extensions, such as the [database authentication +extension](jdbc-auth). +::: + +The Guacamole web application includes a basic authentication provider +implementation which parses an XML file to determine which users exist, their +corresponding passwords, and what configurations those users have access to. +This is the part of Guacamole that reads the `user-mapping.xml` file. If you +use a custom authentication provider for your authentication, this file will +probably not be required. + +The community has implemented authentication providers which access databases, +use LDAP, or even perform no authentication at all, redirecting all users to a +single configuration specified in `guacamole.properties`. + +A minimal authentication provider is implemented in the tutorials later, and +the upstream authentication provider implemented within Guacamole, as well as +the authentication providers implemented by the community, are good examples +for how authentication can be extended without having to implement a whole new +web application. + +(ext-simple-auth)= + +### `SimpleAuthenticationProvider` + +The `SimpleAuthenticationProvider` class provides a much simpler means of +implementing authentication when you do not require the ability to add and +remove users and connections. It is an abstract class and requires only one +function implementation: `getAuthorizedConfigurations()`. + +This function is required to return a `Map` of unique IDs to configurations, +where these configurations are all configurations accessible with the provided +credentials. As before, the credentials given are abstract. You are not +required to use usernames and passwords. + +The configurations referred to by the function name are instances of +`GuacamoleConfiguration` (part of guacamole-common), which is just a wrapper +around a protocol name and set of parameter name/value pairs. The name of the +protocol to use and a set of parameters is the minimum information required for +other parts of the Guacamole API to complete the handshake required by the +Guacamole protocol. + +When a class that extends `SimpleAuthenticationProvider` is asked for more +advanced operations by the web application, `SimpleAuthenticationProvider` +simply returns that there is no permission to do so. This effectively disables +all administrative functionality within the web interface. + +If you choose to go the simple route, most of the rest of this chapter is +irrelevant. Permissions, security model, and various classes will be discussed +that are all handled for you automatically by `SimpleAuthenticationProvider`. + +(ext-user-context)= + +The `UserContext` +----------------- + +The `UserContext` is the root of all data-related operations. It is used to +list, create, modify, or delete users and connections, as well as to query +available permissions. If an extension is going to provide access to data of +any sort, it must do so through the `UserContext`. + +The Guacamole web application uses permissions queries against the +`UserContext` to determine what operations to present, but *beware that it is +up to the `UserContext` to actually enforce these restrictions*. The Guacamole +web application will not enforce restrictions on behalf of the `UserContext`. + +The `UserContext` is the sole means of entry and the sole means of modification +available to a logged-in user. If the `UserContext` refuses to perform an +operation (by throwing an exception), the user cannot perform the operation at +all. + +(ext-object-directories)= + +`Directory` classes +------------------- + +Access to objects beneath the `UserContext` is given through `Directory` +classes. These `Directory` classes are similar to Java collections, but they +also embody update and batching semantics. Objects can be retrieved from a +`Directory` using its `get()` function and added or removed with `add()` and +`remove()` respectively, but objects already in the set can also be updated by +passing an updated object to its `update()` function. + +An implementation of a `Directory` can rely on these functions to define the +semantics surrounding all operations. The `add()` function is called only when +creating new objects, the `update()` function is called only when updating an +object previously retrieved with `get()`, and `remove()` is called only when +removing an existing object by its identifier. + +When implementing an `AuthenticationProvider`, you must ensure that the +`UserContext` will only return `Directory` classes that automatically enforce +the permissions associated with all objects and the associated user. + +(ext-rest-resources)= + +REST resources +-------------- + +Arbitrary REST resources may be exposed by extensions at the +`AuthenticationProvider` level, if the resource does not require an associated +authenticated user, or at the `UserContext` level, if the resource should be +available to authenticated users only. In both cases, the REST resource is +provided through implementing the `getResource()` function, returning an object +which is annotated with JAX-RS annotations (JSR 311). + +The resource returned by `getResource()` functions as the root resource, +providing access to other resources beneath itself. The root resource for the +`AuthenticationProvider` is exposed at {samp}`{PATH}/api/ext/{IDENTIFIER}`, and +the root resource for the `UserContext` is exposed at +{samp}`{PATH}/api/session/ext/{IDENTIFIER}`, where `PATH` is the path to which +Guacamole has been deployed (typically `/guacamole/`) and `IDENTIFIER` is the +unique identifier for the `AuthenticationProvider`, as returned by +`getIdentifier()`. + +The behavior of extension REST resources is generally left entirely to the +implementation, with the exception that the "token" request parameter is +reserved for use by Guacamole. This parameter contains the user's +authentication token when the user is logged in, and must be present on all +requests which require authentication. Though not relevant to REST resources +exposed at the `AuthenticationProvider` level, resources exposed at the +`UserContext` level inherently require the "token" parameter to be present, as +it is the sole means of locating the user's session. + +(ext-permissions)= + +Permissions +----------- + +The permissions system within guacamole-ext is an advisory system. It is the +means by which an authentication module describes to the web application what a +user is allowed to do. The body of permissions granted to a user describes +which objects that user can see and what they can do to those objects, and thus +suggests how the Guacamole interface should appear to that user. + +*Permissions are not the means by which access is restricted*; they are purely +a means of describing access level. An implementation may internally use the +permission objects to define restrictions, but this is not required. It is up +to the implementation to enforce its own restrictions by throwing exceptions +when an operation is not allowed, and to correctly communicate the abilities of +individual users through these permissions. + +The permissions available to a user are exposed through the +`SystemPermissionSet` and `ObjectPermissionSet` classes which are accessible +through the `UserContext`. These classes also serve as the means for +manipulating the permissions granted to a user. + +### System permissions + +System permissions describe access to operations that manipulate the system as +a whole, rather than specific objects. This includes the creation of new +objects, as object creation directly affects the system, and per-object +controls cannot exist before the object is actually created. + +`ADMINISTER` +: The user is a super-user - the Guacamole equivalent of root. They are allowed + to manipulate of system-level permissions and all other objects. This + permission implies all others. + +`CREATE_CONNECTION` +: The user is allowed to create new connections. If a user has this permission, + the management interface will display components related to connection + creation. + +`CREATE_CONNECTION_GROUP` +: The user is allowed to create new connection groups. If a user has this + permission, the management interface will display components related to + connection group creation. + +`CREATE_SHARING_PROFILE` +: The user is allowed to create new sharing profiles. If a user has this + permission, the management interface will display components related to + sharing profile creation. + +`CREATE_USER` +: The user is allowed to create other users. If a user has this permission, the + management interface will display components related to user creation. + +### Object permissions + +Object permissions describe access to operations that affect a particular +object. Guacamole currently defines four types of objects which can be +associated with permissions: users, connections, connection groups, and sharing +profiles. Each object permission associates a single user with an action that +may be performed on a single object. + +`ADMINISTER` +: The user may grant or revoke permissions involving this object. "Involving", + in this case, refers to either side of the permission association, and + includes both the user to whom the permission is granted and the object the + permission affects. + +`DELETE` +: The user may delete this object. This is distinct from the `ADMINISTER` + permission which deals only with permissions. A user with this permission + will see the "Delete" button when applicable. + +`READ` +: The user may see that this object exists and read the properties of that + object. + + Note that the implementation is *not required to divulge the true underlying + properties of any object*. The parameters of a connection or sharing profile, + the type or contents of a connection group, the password of a user, etc. all + need not be exposed. + + This is particularly important from the perspective of security when it comes + to connections, as the parameters of a connection are only truly needed when + a connection is being modified, and likely should not be exposed otherwise. + The actual connection operation is always performed internally by the + authentication provider, and thus does not require client-side knowledge of + anything beyond the connection's existence. + +`UPDATE` +: The user may change the properties of this object. + + In the case of users, this means the user's password can be altered. + *Permissions are not considered properties of a user*, nor objects in their + own right, but rather associations between a user and an action which may + involve another object. + + The properties of a connection include its name, protocol, parent connection + group, and parameters. The properties of a connection group include its name, + type, parent connection group, and children. The properties of a sharing + profile include its name, primary connection, and parameters. + +(ext-connections)= + +Connections +----------- + +Guacamole connections are organized in a hierarchy made up of connection +groups, which each act as folders organizing the connections themselves. The +hierarchy is accessed through the root-level connection group, exposed by +`getRootConnectionGroup()` by the `UserContext`. The connections and connection +groups exposed beneath the root connection group must also be accessible +directly through the connection and connection group directories exposed by +`getConnectionDirectory()` and `getConnectionGroupDirectory()` of the +`UserContext`. + +When a user attempts to use a connection the `connect()` of the associated +`Connection` object will be invoked. It is then up to the implementation of +this function to establish the TCP connection to guacd, perform the connection +handshake (most likely via an `InetGuacamoleSocket` wrapped within a +`ConfiguredGuacamoleSocket`), and then return a `GuacamoleTunnel` which +controls access to the established socket. + +Extensions may maintain historical record of connection use via +`ConnectionRecord` objects, which are exposed both at the `Connection` level +and across all connections via the `UserContext`. Such record maintenance is +optional, and it is expected that most implementations will simply return empty +lists. + +:::{important} +If connection state will not be tracked by the extension, and the parameters +associated with the connection will be known at the time the connection object +is created, the `SimpleConnection` implementation of `Connection` can be used +to make life easier. +::: + +(ext-active-connections)= + +Managing/sharing active connections +----------------------------------- + +After a connection has been established, its underlying `GuacamoleTunnel` can +be exposed by a `UserContext` through the `Directory` returned by +getActiveConnectionDirectory(). The `ActiveConnection` objects accessible +through this `Directory` are the means by which an administrator may monitor or +forcibly terminate another user's connection, ultimately resulting in Guacamole +invoking the `close()` function of the underlying `GuacamoleTunnel`, and also +serve as the basis for screen sharing. + +Screen sharing is implemented through the use of `SharingProfile` objects, +exposed through yet another `Directory` beneath the `UserContext`. Each sharing +profile is associated with a single connection that it can be used to share, +referred to as the "primary connection". If a user has read access to a sharing +profile associated with their current connection, that sharing profile will be +displayed as an option within [the share menu of the Guacamole +menu](client-share-menu). + +The overall sharing process is as follows: + +1. A user, having access to a sharing profile associated with their current + active connection, clicks its option within the [share menu](client-share-menu). + +2. Guacamole locates the `ActiveConnection` and invokes its + `getSharingCredentials()` function with the identifier of the sharing + profile. The contents of the returned `UserCredentials` object is used by + Guacamole to generate a sharing link which can be given to other users. + +3. When another user visits the sharing link, the credentials embedded in the + link are passed to the authentication providers associated with each + installed extension. *It is up to the extension that originally provided + those credentials to authenticate the user and provide them with access to + the shared connection.* + +4. When the user attempts to connect to the shared connection, the extension + establishes the connection using the ID of the connection being joined. + *This is not the connection identifier as dictated by guacamole-ext, but + rather [the unique ID assigned by guacd as required by the Guacamole + protocol](guacamole-protocol-joining).* This ID can be retrieved from a + `ConfiguredGuacamoleSocket` via `getConnectionID()`, and can be passed + through a `GuacamoleConfiguration` through `setConnectionID()` (instead of + specifying a protocol, as would be done for a brand new connection). + diff --git a/doc/1.5.5/gug/_sources/guacamole-protocol.md.txt b/doc/1.5.5/gug/_sources/guacamole-protocol.md.txt new file mode 100644 index 000000000..06abb6111 --- /dev/null +++ b/doc/1.5.5/gug/_sources/guacamole-protocol.md.txt @@ -0,0 +1,414 @@ +The Guacamole protocol +====================== + +This chapter is an overview of the Guacamole protocol, describing its design +and general use. While a few instructions and their syntax will be described +here, this is not an exhaustive list of all available instructions. The intent +is only to list the general types and usage. If you are looking for the syntax +or purpose of a specific instruction, consult the protocol reference included +with the appendices. + +(guacamole-protocol-design)= + +Design +------ + +The Guacamole protocol consists of instructions. Each instruction is a +comma-delimited list followed by a terminating semicolon, where the first +element of the list is the instruction opcode, and all following elements are +the arguments for that instruction: + +``` +OPCODE,ARG1,ARG2,ARG3,...; +``` + +Each element of the list has a positive decimal integer length prefix separated +by the value of the element by a period. This length denotes the number of +Unicode characters in the value of the element, which is encoded in UTF-8: + +``` +LENGTH.VALUE +``` + +Any number of complete instructions make up a message which is sent from client +to server or from server to client. Client to server instructions are generally +control instructions (for connecting or disconnecting) and events (mouse and +keyboard). Server to client instructions are generally drawing instructions +(caching, clipping, drawing images), using the client as a remote display. + +For example, a complete and valid instruction for setting the display size to +1024x768 would be: + +``` +4.size,1.0,4.1024,3.768; +``` + +Here, the instruction would be decoded into four elements: "size", the opcode +of the size instruction, "0", the index of the default layer, "1024", the +desired width in pixels, and "768", the desired height in pixels. + +The structure of the Guacamole protocol is important as it allows the protocol +to be streamed while also being easily parsable by JavaScript. JavaScript does +have native support for conceptually-similar structures like XML or JSON, but +neither of those formats is natively supported in a way that can be streamed; +JavaScript requires the entirety of the XML or JSON message to be available at +the time of decoding. The Guacamole protocol, on the other hand, can be parsed +as it is received, and the presence of length prefixes within each instruction +element means that the parser can quickly skip around from instruction to +instruction without having to iterate over every character. + +(guacamole-protocol-handshake)= + +Handshake phase +--------------- + +The handshake phase is the phase of the protocol entered immediately upon +connection. It begins with a "select" instruction sent by the client which +tells the server which protocol will be loaded: + +``` +6.select,3.vnc; +``` + +After receiving the "select" instruction, the server will load the associated +client support and respond with its protocol version and a list of accepted +parameter names using an "args" instruction: + +``` +4.args,13.VERSION_1_1_0,8.hostname,4.port,8.password,13.swap-red-blue,9.read-only; +``` + +The protocol version is used to negotiate compatibility between differing +versions of client and server, allowing the two sides to negotiate the highest +supported version and enable or disable features associated with that version. +Older implementations of the Guacamole protocol that do not support version +negotiation will silently ignore it as if it were an unspecified connection +parameter. + +Valid protocol versions are as follows: + +`VERSION_1_5_0` +: Protocol version 1.5.0 introduced two new instructions - the `msg` + instruction, which is used to send arbitrary messages to the client, and + the `name` handshake instruction, which allows the client to set the + human-readable name of the user joining a connection. + +`VERSION_1_3_0` +: Protocol version 1.3.0 introduced the `require` instruction, used by the + server to indicate that the client must provide additional arguments (such + as a username and password). + +`VERSION_1_1_0` +: Protocol version 1.1.0 introduced support for protocol version + negotiation, arbitrary order of the handshake instructions, and support + for passing the timezone instruction during the handshake. + +`VERSION_1_0_0` +: This is the default version and applies to any versions prior to 1.1.0. + Version 1.0.0 of the protocol does not support protocol negotiation, and + requires that the handshake instructions are delivered in a certain order, + and that they are present (even if empty). + +After receiving the list of arguments, the client is required to respond with +the list of supported audio, video, and image mimetypes, the optimal display +size and resolution, and the values for all arguments available, even if blank. + +``` +4.size,4.1024,3.768,2.96; +5.audio,9.audio/ogg; +5.video; +5.image,9.image/png,10.image/jpeg; +8.timezone,16.America/New_York; +7.connect,13.VERSION_1_1_0,9.localhost,4.5900,0.,0.,0.; +``` + +For clarity, we've put each instruction on its own line, but in the real +protocol, no newlines exist between instructions. In fact, if there is anything +after an instruction other than the start of a new instruction, the connection +is closed. + +The following are valid instructions during the handshake: + +`audio` +: The audio codec(s) supported by the client. In the example above the + client is specifying audio/ogg as the supported codec. + +`connect` +: This is the final instruction of the handshake, terminating the handshake + and indicating that the connection should continue. This instruction has + as its parameters values for the connection parameters sent by the server + in the `args` instruction. In the example above, this is connection to + localhost on port 5900, with no values for the last three connection + parameters. + +`image` +: The image formats that the client supports, in order of preference. The + client in the example above is supporting both PNG and JPEG. + +`name` +: The human-readable name of the user joining the connection. + +`timezone` +: The timezone of the client, in IANA zone key format. More information on + this instruction is available in [](configuring-guacamole), under + documentation related to the `timezone` connection parameters for the + protocols that support it. + +`video` +: The video codec(s) supported by the client. The above example is a client + that does not support any video codecs. + +The order of the instructions sent by the client in the handshake is arbitrary, +with the exception that the final instruction, connect, will end the handshake +and attempt to start the connection. + +Once these instructions have been sent by the client, the server will attempt +to initialize the connection with the parameters received and, if successful, +respond with a "ready" instruction. This instruction contains the ID of the new +client connection and marks the beginning of the interactive phase. The ID is +an arbitrary string, but is guaranteed to be unique from all other active +connections, as well as from the names of all supported protocols: + +``` +5.ready,37.$260d01da-779b-4ee9-afc1-c16bae885cc7; +``` + +The actual interactive phase begins immediately after the "ready" instruction +is sent. Drawing and event instructions pass back and forth until the +connection is closed. + +(guacamole-protocol-joining)= + +### Joining an existing connection + +Once the handshake phase has completed, that connection is considered active +and can be joined by other connections if the ID is provided instead of a +protocol name via the "select" instruction: + +``` +6.select,37.$260d01da-779b-4ee9-afc1-c16bae885cc7; +``` + +The rest of the handshake phase for a joining connection is identical. Just as +with a new connection, the restrictions or features which apply to the joining +connection are dictated by the parameter values supplied during the handshake. + +(guacamole-protocol-drawing)= + +Drawing +------- + +(guacamole-protocol-compositing)= + +### Compositing + +The Guacamole protocol provides compositing operations through the use of +"channel masks". The term "channel mask" is simply a description of the +mechanism used while designing the protocol to conceptualize and fully +enumerate all possible compositing operations based on four different sources +of image data: source image data where the destination is opaque, source image +data where the destination is transparent, destination image data where the +source is opaque, and destination image data where the source is transparent. +Assigning a binary value to each of these "channels" creates a unique integer +ID for every possible compositing operation, where these operations parallel +the operations described by Porter and Duff in their paper. As the HTML5 canvas +tag also uses Porter/Duff to describe their compositing operations (as do other +graphical APIs), the Guacamole protocol is conveniently similar to the +compositing support already present in web browsers, with some operations not +yet supported. The following operations are all implemented and known to work +correctly in all browsers: + +B out A (0x02) +: Clears the destination where the source is opaque, but otherwise draws + nothing. This is useful for masking. + +A atop B (0x06) +: Fills with the source where the destination is opaque only. + +A xor B (0x0A) +: As with logical XOR. Note that this is a compositing operation, not a + bitwise operation. It draws the source where the destination is + transparent, and draws the destination where the source is transparent. + +B over A (0x0B) +: What you would typically expect when drawing, but reversed. The source + appears only where the destination is transparent, as if you were + attempting to draw the destination over the source, rather than the source + over the destination. + +A over B (0x0E) +: The most common and sensible compositing operation, this draws the source + everywhere, but includes the destination where the source is transparent. + +A + B (0x0F) +: Simply adds the components of the source image to the destination image, + capping the result at pure white. + +The following operations are all implemented, but may work incorrectly in +WebKit browsers which always include the destination image where the source is +transparent: + +B in A (0x01) +: Draws the destination only where the source is opaque, clearing anywhere + the source or destination are transparent. + +A in B (0x04) +: Draws the source only where the destination is opaque, clearing anywhere + the source or destination are transparent. + +A out B (0x08) +: Draws the source only where the destination is transparent, clearing + anywhere the source or destination are opaque. + +B atop A (0x09) +: Fills with the destination where the source is opaque only. + +A (0x0C) +: Fills with the source, ignoring the destination entirely. + +The following operations are defined, but not implemented, and do not exist as +operations within the HTML5 canvas: + +Clear (0x00) +: Clears all existing image data in the destination. + +B (0x03) +: Does nothing. + +A xnor B (0x05) +: Adds the source to the destination where the destination or source are + opaque, clearing anywhere the source or destination are transparent. This + is similar to A + B except the aspect of transparency is also additive. + +(A + B) atop B (0x07) +: Adds the source to the destination where the destination is opaque, + preserving the destination otherwise. + +(A + B) atop A (0x0D) +: Adds the destination to the source where the source is opaque, copying the + source otherwise. + +(guacamole-protocol-images)= + +### Image data + +The Guacamole protocol, like many remote desktop protocols, provides a method +of sending an arbitrary rectangle of image data and placing it either within a +buffer or in a visible rectangle of the screen. Raw image data in the Guacamole +protocol is streamed as PNG, JPEG, or WebP data over a stream allocated with +the "img" instruction. Depending on the format used, image updates sent in this +manner can be RGB or RGBA (alpha transparency) and are automatically palettized +if sent using libguac. The streaming system used for image data is generalized +and used by Guacamole for other types of streams, including audio and file +transfer. For more information about streams in the Guacamole protocol, see +[](guacamole-protocol-streaming). + +Image data can be sent to any specified rectangle within a layer or buffer. +Sending the data to a layer means that the image becomes immediately visible, +while sending the data to a buffer allows that data to be reused later. + +(guacamole-protocol-copying-images)= + +### Copying image data between layers + +Image data can be copied from one layer or buffer into another layer or buffer. +This is often used for scrolling (where most of the result of the graphical +update is identical to the previous state) or for caching parts of an image. + +Both VNC and RDP provide a means of copying a region of screen data and placing +it somewhere else within the same screen. RDP provides an additional means of +copying data to a cache, or recalling data from that cache and placing it on +the screen. Guacamole takes this concept and reduces it further, as both +on-screen and off-screen image storage is the same. The Guacamole "copy" +instruction allows you to copy a rectangle of image data, and place it within +another layer, whether that layer is the same as the source layer, a different +visible layer, or an off-screen buffer. + +(guacamole-graphical-primitives)= + +### Graphical primitives + +The Guacamole protocol provides basic graphics operations similar to those of +Cairo or the HTML5 canvas. In many cases, these primitives are useful for +remote drawing, and desirable in that they take up less bandwidth than sending +corresponding PNG images. Beware that excessive use of primitives leads to an +increase in client-side processing, which may reduce the performance of a +connected client, especially if that client is on a lower-performance machine +like a mobile phone or tablet. + +(guacamole-protocol-layers)= + +### Buffers and layers + +All drawing operations in the Guacamole protocol affect a layer, and each layer +has an integer index which identifies it. When this integer is negative, the +layer is not visible, and can be used for storage or caching of image data. In +this case, the layer is referred to within the code and within documentation as +a "buffer". Layers are created automatically when they are first referenced in +an instruction. + +There is one main layer which is always present called the "default layer". +This layer has an index of 0. Resizing this layer resizes the entire remote +display. Other layers default to the size of the default layer upon creation, +while buffers are always created with a size of 0x0, automatically resizing +themselves to fit their contents. + +Non-buffer layers can be moved and nested within each other. In this way, +layers provide a simple means of hardware-accelerated compositing. If you need +a window to appear above others, or you have some object which will be moving +or you need the data beneath it automatically preserved, a layer is a good way +of accomplishing this. If a layer is nested within another layer, its position +is relative to that of its parent. When the parent is moved or reordered, the +child moves with it. If the child extends beyond the parents bounds, it will +be clipped. + +(guacamole-protocol-streaming)= + +Streams and objects +------------------- + +Guacamole supports transfer of clipboard contents, audio, video, and image +data, as well as files and arbitrary named pipes. + +Streams are allocated directly with instructions that associate the new stream +with particular semantics and metadata, such as the "audio" or "video" +instructions used for playing media, the "file" instruction used for file +transfer, and the "pipe" instruction for transfer of completely arbitrary data +between client and server. In some cases, the availability and semantics of +streams may be explicitly advertised using structured sets of named streams +known as "objects". + +Once a stream is allocated, data is sent along the stream in chunks using +"blob" instructions, which may be acknowledged by the receiving end by "ack" +instructions. The end of the stream is finally signalled with an "end" +instruction. + +(guacamole-protocol-events)= + +Events +------ + +When something changes on either side, client or server, such as a key being +pressed, the mouse moving, or clipboard data changing, an instruction +describing the event is sent. + +(guacamole-protocol-disconnecting)= + +Disconnecting +------------- + +The server and client can end the connection at any time. There is no +requirement for the server or the client to communicate that the connection +needs to terminate. When the client or server wish to end the connection, and +the reason is known, they can use the "disconnect" or "error" instructions. + +The disconnect instruction is sent by the client when it is disconnecting. This +is largely out of politeness, and the server must be written knowing that the +disconnect instruction may not always be sent in time (guacd is written this +way). + +If the client does something wrong, or the server detects a problem with the +client plugin, the server sends an error instruction, including a description +of the problem in the parameters. This informs the client that the connection +is being closed. + diff --git a/doc/1.5.5/gug/_sources/header-auth.md.txt b/doc/1.5.5/gug/_sources/header-auth.md.txt new file mode 100644 index 000000000..f741d492a --- /dev/null +++ b/doc/1.5.5/gug/_sources/header-auth.md.txt @@ -0,0 +1,78 @@ +HTTP header authentication +========================== + +Guacamole supports delegating authentication to an arbitrary external service, +relying on the presence of an HTTP header which contains the username of the +authenticated user. This authentication method must be layered on top of some +other authentication extension, such as those available from the main project +website, in order to provide access to actual connections. + +:::{important} +All external requests must be properly sanitized if this extension is used. The +chosen HTTP header must be stripped from untrusted requests, such that the +authentication service is the only possible source of that header. *If such +sanitization is not performed, it will be trivial for malicious users to add +this header manually, and thus gain unrestricted access.* +::: + +(header-downloading)= + +Downloading the HTTP header authentication extension +---------------------------------------------------- + +The HTTP header authentication extension is available separately from the main +`guacamole.war`. The link for this and all other officially-supported and +compatible extensions for a particular version of Guacamole are provided on the +release notes for that version. You can find the release notes for current +versions of Guacamole here: . + +The HTTP header authentication extension is packaged as a `.tar.gz` file +containing only the extension itself, `guacamole-auth-header-1.5.5.jar`, which +must ultimately be placed in `GUACAMOLE_HOME/extensions`. + +(installing-header-auth)= + +Installing HTTP header authentication +------------------------------------- + +Guacamole extensions are self-contained `.jar` files which are located within +the `GUACAMOLE_HOME/extensions` directory. *If you are unsure where +`GUACAMOLE_HOME` is located on your system, please consult +[](configuring-guacamole) before proceeding.* + +To install the HTTP header authentication extension, you must: + +1. Create the `GUACAMOLE_HOME/extensions` directory, if it does not already + exist. + +2. Copy `guacamole-auth-header-1.5.5.jar` within `GUACAMOLE_HOME/extensions`. + +3. Configure Guacamole to use HTTP header authentication, as described below. + +(guac-header-config)= + +### Configuring Guacamole for HTTP header authentication + +The HTTP header authentication extension provides only one configuration +property, and it is optional. By default, the extension will pull the username +of the authenticated user from the `REMOTE_USER` header, if present. If your +authentication system uses a different HTTP header, you will need to override +this by specifying the `http-auth-header` property within +[`guacamole.properties`](initial-setup): + +`http-auth-header` +: The HTTP header containing the username of the authenticated user. This + property is optional. If not specified, `REMOTE_USER` will be used by + default. + +(completing-header-install)= + +### Completing the installation + +Guacamole will only reread `guacamole.properties` and load newly-installed +extensions during startup, so your servlet container will need to be restarted +before HTTP header authentication can be used. *Doing this will disconnect all +active users, so be sure that it is safe to do so prior to attempting +installation.* When ready, restart your servlet container and give the new +authentication a try. + diff --git a/doc/1.5.5/gug/_sources/index.md.txt b/doc/1.5.5/gug/_sources/index.md.txt new file mode 100644 index 000000000..9804098bf --- /dev/null +++ b/doc/1.5.5/gug/_sources/index.md.txt @@ -0,0 +1,81 @@ +Apache Guacamole Manual +======================= + +:::{note} +Licensed to the Apache Software Foundation (ASF) under one or more contributor +license agreements. See the [NOTICE] file distributed with this work for +additional information regarding copyright ownership. The ASF licenses this +file to you under the Apache License, Version 2.0 (the "License"); you may not +use this file except in compliance with the License. You may obtain a copy of +the License at: + + + +Unless required by applicable law or agreed to in writing, software distributed +under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR +CONDITIONS OF ANY KIND, either express or implied. See the License for the +specific language governing permissions and limitations under the License. + +[NOTICE]: https://raw.githubusercontent.com/apache/guacamole-manual/master/NOTICE +::: + +:::{toctree} +:caption: Overview +:name: overview +:maxdepth: 1 + +introduction +::: + +:::{toctree} +:caption: User's Guide +:name: users-guide +:maxdepth: 1 + +guacamole-architecture +installing-guacamole +guacamole-docker +reverse-proxy +configuring-guacamole +jdbc-auth +ldap-auth +vault +duo-auth +totp-auth +header-auth +json-auth +cas-auth +openid-auth +saml-auth +radius-auth +adhoc-connections +using-guacamole +recording-playback +administration +troubleshooting +::: + +:::{toctree} +:caption: Developer's Guide +:name: developers-guide +:maxdepth: 1 + +guacamole-protocol +libguac +guacamole-common +guacamole-common-js +guacamole-ext +custom-protocols +custom-auth +event-listeners +writing-you-own-guacamole-app +::: + +:::{toctree} +:caption: Appendices +:name: appendices +:maxdepth: 1 + +protocol-reference +::: + diff --git a/doc/1.5.5/gug/_sources/installing-guacamole.md.txt b/doc/1.5.5/gug/_sources/installing-guacamole.md.txt new file mode 100644 index 000000000..9e5517561 --- /dev/null +++ b/doc/1.5.5/gug/_sources/installing-guacamole.md.txt @@ -0,0 +1,770 @@ +Installing Guacamole natively +============================= + +Guacamole is separated into two pieces: guacamole-server, which provides the +guacd proxy and related libraries, and guacamole-client, which provides the +client to be served by your servlet container, usually [Apache +Tomcat](http://tomcat.apache.org/). + +guacamole-client is available in binary form, but guacamole-server must be +built from source. Don't be discouraged: building the components of Guacamole +from source is *not* as difficult as it sounds, and the build process is +automated. You just need to be sure you have the necessary tools installed +ahead of time. With the necessary dependencies in place, building Guacamole +only takes a few minutes. + +(building-guacamole-server)= + +Building guacamole-server +------------------------- + +guacamole-server contains all the native, server-side components required by +Guacamole to connect to remote desktops. It provides a common C library, +libguac, which all other native components depend on, as well as separate +libraries for each supported protocol, and guacd, the heart of Guacamole. + +guacd is the proxy daemon that runs on your Guacamole server, accepts users' +connections that are tunneled through the Guacamole web application, and then +connects to remote desktops on their behalf. Building guacd creates an +executable called {program}`guacd` which can be run manually or, if you wish, +automatically when your computer starts up. + +To build guacamole-server, you will need a C compiler (such as gcc) and the +libraries that guacamole-server depends on. Some dependencies are absolutely +required, while others are optional. The presence of optional dependencies +enables additional features. + +:::{important} +Many Linux distributions separate library packages into binary and +"development" packages; *you will need to install the development packages*. +These will usually end in a "-dev" or "-devel" suffix. +::: + +### Required dependencies + +In order to build guacamole-server, you will need Cairo, libjpeg (or +libjpeg-turbo), libpng, and libuuid (or the OSSP UUID library). These libraries +are strictly required *in all cases* - Guacamole cannot be built without them. + +[Cairo](http://cairographics.org/) +: Cairo is used by libguac for graphics rendering. Guacamole cannot function + without Cairo installed. + + :::{list-table} + :stub-columns: 1 + * - Debian / Ubuntu package + - `libcairo2-dev` + * - Fedora / CentOS / RHEL package + - `cairo-devel` + ::: + +[libjpeg-turbo](http://libjpeg-turbo.virtualgl.org/) +: libjpeg-turbo is used by libguac to provide JPEG support. Guacamole will not + build without this library present: + + :::{list-table} + :stub-columns: 1 + * - Debian package + - `libjpeg62-turbo-dev` + * - Ubuntu package + - `libjpeg-turbo8-dev` + * - Fedora / CentOS / RHEL package + - `libjpeg-turbo-devel` + ::: + + If libjpeg-turbo is unavailable on your platform, and you do not wish to + build it from source, [libjpeg](http://www.ijg.org/) will work as well, + though it will not be quite as fast: + + :::{list-table} + :stub-columns: 1 + * - Debian / Ubuntu package + - `libjpeg62-dev` + * - Fedora / CentOS / RHEL package + - `libjpeg-devel` + ::: + +[libpng](http://www.libpng.org/pub/png/libpng.html) +: libpng is used by libguac to write PNG images, the core image type used by + the Guacamole protocol. Guacamole cannot function without libpng. + + :::{list-table} + :stub-columns: 1 + * - Debian / Ubuntu package + - `libpng-dev` + * - Fedora / CentOS / RHEL package + - `libpng-devel` + ::: + + In some previous versions of Debian such as Debian 8 / Ubuntu 16.04, you need + the `libpng12-dev` package. + + :::{list-table} + :stub-columns: 1 + * - Debian / Ubuntu package + - `libpng12-dev` + ::: + +[libtool](https://www.gnu.org/software/libtool/manual/libtool.html) +: libtool is used during the build process. libtool creates compiled libraries + needed for Guacamole. + + :::{list-table} + :stub-columns: 1 + * - Debian / Ubuntu package + - `libtool-bin` + * - Fedora / CentOS / RHEL package + - `libtool` + ::: + +libuuid (part of [util-linux](https://www.kernel.org/pub/linux/utils/util-linux/)) +: libuuid is used by libguac to assign unique, internal IDs to each Guacamole + user and connection. These unique IDs are the basis for connection sharing + support. + + :::{list-table} + :stub-columns: 1 + * - Debian / Ubuntu package + - `uuid-dev` + * - Fedora / CentOS / RHEL package + - `libuuid-devel` + ::: + + If libuuid is unavailable, the [OSSP UUID](http://www.ossp.org/pkg/lib/uuid/) + library may also be used: + + :::{list-table} + :stub-columns: 1 + * - Debian / Ubuntu package + - `libossp-uuid-dev` + * - Fedora / CentOS / RHEL package + - `uuid-devel` + ::: + +### Optional dependencies + +The optional dependencies of Guacamole dictate which parts of guacamole-server +will be built. This includes the support for various remote desktop protocols, +as well as any additional features of those protocols: + +* VNC support depends on the libvncclient library, which is part of + libVNCServer. + +* RDP support depends on a recent version of FreeRDP (2.0.0 or higher, but + please *not a non-release version from git*). + +* SSH support depends on libssh2, OpenSSL and Pango (a font rendering and text + layout library, used by Guacamole's built-in terminal emulator). + +* Telnet depends on libtelnet and Pango. + +* Kubernetes support depends on libwebsockets, OpenSSL, and Pango. + +The `guacenc` utility, provided by guacamole-server to translate screen +recordings into video, depends on FFmpeg, and will only be built if at least +the libavcodec, libavformat, libavutil, and libswscale libraries provided by +FFmpeg are installed. + +:::{important} +If you lack these dependencies, *then the features or protocols which +depend on them will not be enabled*. Please read this section +carefully before deciding not to install an optional dependency. +::: + +[FFmpeg](https://ffmpeg.org/) +: The libavcodec, libavformat, libavutil, and libswscale libraries provided by + FFmpeg are used by `guacenc` to encode video streams when translating + recordings of Guacamole sessions. Without FFmpeg, the `guacenc` utility will + simply not be built. + + If you do not wish to make graphical recordings of Guacamole sessions, or do + not wish to translate such recordings into video, then FFmpeg is not needed. + + :::{list-table} + :stub-columns: 1 + * - Debian / Ubuntu package + - `libavcodec-dev`, `libavformat-dev`, `libavutil-dev`, `libswscale-dev` + * - Fedora / CentOS / RHEL package + - `ffmpeg-devel` + ::: + +[FreeRDP](http://www.freerdp.com/) +: FreeRDP 2.0.0 or later is required for RDP support. If you do not wish to + build RDP support, this library is not needed. + + :::{list-table} + :stub-columns: 1 + * - Debian / Ubuntu package + - `freerdp2-dev` + * - Fedora / CentOS / RHEL package + - `freerdp-devel` + ::: + +[Pango](http://www.pango.org/) +: Pango is a text layout library which Guacamole uses to render text for + protocols that require a terminal (Kubernetes, SSH, and telnet). If you do + not wish to build any terminal-based protocol support, this library is not + needed. + + :::{list-table} + :stub-columns: 1 + * - Debian / Ubuntu package + - `libpango1.0-dev` + * - Fedora / CentOS / RHEL package + - `pango-devel` + ::: + +[libssh2](http://www.libssh2.org/) +: libssh2 is required for SSH and SFTP support. If you do not wish to build SSH + or SFTP support, this library is not needed. + + :::{list-table} + :stub-columns: 1 + * - Debian / Ubuntu package + - `libssh2-1-dev` + * - Fedora / CentOS / RHEL package + - `libssh2-devel` + ::: + +[libtelnet](https://github.com/seanmiddleditch/libtelnet) +: libtelnet is required for telnet support. If you do not wish to build telnet + support, this library is not needed. + + :::{list-table} + :stub-columns: 1 + * - Debian / Ubuntu package + - `libtelnet-dev` + * - Fedora / CentOS / RHEL package + - `libtelnet-devel` + ::: + +[libVNCServer](http://libvnc.github.io/) +: libVNCServer provides libvncclient, which is required for VNC support. If you + do not wish to build VNC support, this library is not needed. + + :::{list-table} + :stub-columns: 1 + * - Debian / Ubuntu package + - `libvncserver-dev` + * - Fedora / CentOS / RHEL package + - `libvncserver-devel` + ::: + +[libwebsockets](https://libwebsockets.org/) +: libwebsockets is required for Kubernetes support. If you do not wish to build + Kubernetes support, this library is not needed. + + :::{list-table} + :stub-columns: 1 + * - Debian / Ubuntu package + - `libwebsockets-dev` + * - Fedora / CentOS / RHEL package + - `libwebsockets-devel` + ::: + +[PulseAudio](http://www.freedesktop.org/wiki/Software/PulseAudio/) +: PulseAudio provides libpulse, which is used by Guacamole's VNC support to + provide experimental audio support. If you are not going to be using the + experimental audio support for VNC, you do not need this library. + + :::{list-table} + :stub-columns: 1 + * - Debian / Ubuntu package + - `libpulse-dev` + * - Fedora / CentOS / RHEL package + - `pulseaudio-libs-devel` + ::: + +[OpenSSL](https://www.openssl.org/) +: OpenSSL provides support for SSL and TLS - two common encryption schemes that + make up the majority of encrypted web traffic. + + If you have libssl installed, guacd will be built with SSL support, allowing + communication between the web application and guacd to be encrypted. This + library is also required for SSH support, for manipulating public/private keys, + and for Kubernetes support, for SSL/TLS connections to the Kubernetes server. + + Without SSL support, there will be no option to encrypt communication to + guacd, and support for SSH and Kubernetes cannot be built. + + :::{list-table} + :stub-columns: 1 + * - Debian / Ubuntu package + - `libssl-dev` + * - Fedora / CentOS / RHEL package + - `openssl-devel` + ::: + +[libvorbis](http://xiph.org/vorbis/) +: libvorbis provides support for Ogg Vorbis - a free and open standard for + sound compression. If installed, libguac will be built with support for Ogg + Vorbis, and protocols supporting audio will use Ogg Vorbis compression when + possible. + + Otherwise, sound will only be encoded as WAV (uncompressed), and will only be + available if your browser also supports WAV. + + :::{list-table} + :stub-columns: 1 + * - Debian / Ubuntu package + - `libvorbis-dev` + * - Fedora / CentOS / RHEL package + - `libvorbis-devel` + ::: + +[libwebp](https://developers.google.com/speed/webp/) +: libwebp is used by libguac to write WebP images. Though support for WebP is + not mandated by the Guacamole protocol, WebP images will be used if supported + by both the browser and by libguac. + + Lacking WebP support, Guacamole will simply use JPEG in cases that it would + have preferred WebP. + + :::{list-table} + :stub-columns: 1 + * - Debian / Ubuntu package + - `libwebp-dev` + * - Fedora / CentOS / RHEL package + - `libwebp-devel` + ::: + +(guacamole-server-source)= + +### Obtaining the source code + +You can obtain a copy of the guacamole-server source from the Guacamole project +web site. These releases are stable snapshots of the latest code which have +undergone enough testing that the Guacamole team considers them fit for public +consumption. Source downloaded from the project web site will take the form of +a `.tar.gz` archive which you can extract +from the command line: + +```console +$ tar -xzf guacamole-server-1.5.5.tar.gz +$ cd guacamole-server-1.5.5/ +$ +``` + +If you want the absolute latest code, and don't care that the code hasn't been +as rigorously tested as the code in stable releases, you can also clone the +Guacamole team's git repository on GitHub: + +```console +$ git clone git://github.com/apache/guacamole-server.git +Cloning into 'guacamole-server'... +remote: Counting objects: 6769, done. +remote: Compressing objects: 100% (2244/2244), done. +remote: Total 6769 (delta 3058), reused 6718 (delta 3008) +Receiving objects: 100% (6769/6769), 2.32 MiB | 777 KiB/s, done. +Resolving deltas: 100% (3058/3058), done. +$ +``` + +(guacamole-server-build-process)= + +### The build process + +Once the guacamole-server source has been downloaded and extracted, you need to +run `configure`. This is a shell script automatically generated by GNU +Autotools, a popular build system used by the Guacamole project for +guacamole-server. Running `configure` will determine which libraries are +available on your system and will select the appropriate components for +building depending on what you actually have installed. + +:::{important} +Source downloaded directly from git will not contain this `configure` script, +as autogenerated code is not included in the project's repositories. If you +downloaded the code from the project's git repositories directly, you will need +to generate `configure` manually: + +```console +$ cd guacamole-server/ +$ autoreconf -fi +$ +``` + +Doing this requires GNU Autotools to be installed. + +Source archives downloaded from the project website contain the `configure` +script and all other necessary build files, and thus do not require GNU +Autotools to be installed on the build machine. +::: + +Once you run `configure`, you can see what a listing of what libraries were +found and what it has determined should be built: + +```console +$ ./configure --with-init-dir=/etc/init.d +checking for a BSD-compatible install... /usr/bin/install -c +checking whether build environment is sane... yes +... + +------------------------------------------------ +guacamole-server version 1.5.5 +------------------------------------------------ + + Library status: + + freerdp2 ............ yes + pango ............... yes + libavcodec .......... yes + libavformat ......... yes + libavutil ........... yes + libssh2 ............. yes + libssl .............. yes + libswscale .......... yes + libtelnet ........... yes + libVNCServer ........ yes + libvorbis ........... yes + libpulse ............ yes + libwebsockets ....... yes + libwebp ............. yes + wsock32 ............. no + + Protocol support: + + Kubernetes .... yes + RDP ........... yes + SSH ........... yes + Telnet ........ yes + VNC ........... yes + + Services / tools: + + guacd ...... yes + guacenc .... yes + guaclog .... yes + + Init scripts: /etc/init.d + Systemd units: no + +Type "make" to compile guacamole-server. + +$ +``` + +The `--with-init-dir=/etc/init.d` shown above prepares the build to install a +startup script for guacd into the `/etc/init.d` directory, such that we can +later easily configure guacd to start automatically on boot. If you do not wish +guacd to start automatically at boot, leave off the `--with-init-dir` option. +If the directory containing your distribution's startup scripts differs from +the common `/etc/init.d`, replace `/etc/init.d` with the proper directory here. +You may need to consult your distribution's documentation, or do a little +digging in `/etc`, to determine the proper location. + +Here, `configure` has found everything, including all optional libraries, and +will build all protocol support, even support for Ogg Vorbis sound in RDP. If +you are missing some libraries, some of the "`yes`" answers above will read +"`no`". If a library which is strictly required is missing, the script will +fail outright, and you will need to install the missing dependency. If, after +running `configure`, you find support for something you wanted is missing, +simply install the corresponding dependencies and run `configure` again. + +:::{important} +All protocols that require a terminal (Kubernetes, SSH, and telnet) require +that fonts are installed on the Guacamole server in order to function, as +output from the terminal cannot be rendered otherwise. Support for these +protocols will build just fine if fonts are not installed, but it will fail to +connect when used: + +``` +Aug 23 14:09:45 my-server guacd[5606]: Unable to get font "monospace" +``` + +If terminal-based connections are not working and you see such a message in +syslog, you should make sure fonts are installed and try again. +::: + +Once `configure` is finished, just type "`make`", and it will guacamole-server +will compile: + +```console +$ make +Making all in src/libguac +make[1]: Entering directory `/home/mjumper/guacamole/guacamole-server/src/libguac' +... +make[1]: Leaving directory `/home/mjumper/guacamole/guacamole-server/src/protocols/vnc' +make[1]: Entering directory `/home/mjumper/guacamole/guacamole-server' +make[1]: Nothing to be done for `all-am'. +make[1]: Leaving directory `/home/mjumper/guacamole/guacamole-server' +$ +``` + +Quite a bit of output will scroll up the screen as all the components are +compiled. + +(guacamole-server-installation)= + +### Installation + +Once everything finishes, all you have left to do is type "`make install`" to +install the components that were built, and then "`ldconfig`" to update your +system's cache of installed libraries: + +```console +# make install +Making install in src/libguac +make[1]: Entering directory `/home/mjumper/guacamole/guacamole-server/src/libguac' +make[2]: Entering directory `/home/mjumper/guacamole/guacamole-server/src/libguac' +... +---------------------------------------------------------------------- +Libraries have been installed in: + /usr/local/lib + +If you ever happen to want to link against installed libraries +in a given directory, LIBDIR, you must either use libtool, and +specify the full pathname of the library, or use the `-LLIBDIR' +flag during linking and do at least one of the following: + - add LIBDIR to the `LD_LIBRARY_PATH' environment variable + during execution + - add LIBDIR to the `LD_RUN_PATH' environment variable + during linking + - use the `-Wl,-rpath -Wl,LIBDIR' linker flag + - have your system administrator add LIBDIR to `/etc/ld.so.conf' + +See any operating system documentation about shared libraries for +more information, such as the ld(1) and ld.so(8) manual pages. +---------------------------------------------------------------------- +make[2]: Nothing to be done for `install-data-am'. +make[2]: Leaving directory `/home/mjumper/guacamole/guacamole-server/src/protocols/vnc' +make[1]: Leaving directory `/home/mjumper/guacamole/guacamole-server/src/protocols/vnc' +make[1]: Entering directory `/home/mjumper/guacamole/guacamole-server' +make[2]: Entering directory `/home/mjumper/guacamole/guacamole-server' +make[2]: Nothing to be done for `install-exec-am'. +make[2]: Nothing to be done for `install-data-am'. +make[2]: Leaving directory `/home/mjumper/guacamole/guacamole-server' +make[1]: Leaving directory `/home/mjumper/guacamole/guacamole-server' +# ldconfig +# +``` + +At this point, everything is installed, but guacd is not running. You will need +to run guacd in order to use Guacamole once the client components are installed +as well. + +Beware that even after installing guacd and its startup script, you will likely +still have to activate the service for it to start automatically. Doing this +varies by distribution, but each distribution will have documentation +describing how to do so. + +(building-guacamole-client)= + +guacamole-client +---------------- + +:::{important} +Normally, you don't need to build guacamole-client, as it is written in Java +and is cross-platform. You can easily obtain the latest version of +guacamole-client from the release archives of the Guacamole project web site, +including all supported extensions, without having to build it yourself. + +If you do not want to build guacamole-client from source, just download +`guacamole.war` from the project web site, along with any desired extensions, +and skip ahead to [](deploying-guacamole). +::: + +guacamole-client contains all Java and JavaScript components of Guacamole +(guacamole, guacamole-common, guacamole-ext, and guacamole-common-js). These +components ultimately make up the web application that will serve the HTML5 +Guacamole client to users that connect to your server. This web application +will then connect to guacd, part of guacamole-server, on behalf of connected +users in order to serve them any remote desktop they are authorized to access. + +To compile guacamole-client, all you need is Apache Maven and a copy of the +Java JDK. Most, if not all, Linux distributions will provide packages for +these. + +You can obtain a copy of the guacamole-client source from the Guacamole project +web site. These releases are stable snapshots of the latest code which have +undergone enough testing that the Guacamole team considers them fit for public +consumption. Source downloaded from the project web site will take the form of +a `.tar.gz` archive which you can extract from the command line: + +```console +$ tar -xzf guacamole-client-1.5.5.tar.gz +$ cd guacamole-client-1.5.5/ +$ +``` + +As with guacamole-server, if you want the absolute latest code, and don't care +that the code hasn't been as rigorously tested as the code in stable releases, +you can also clone the Guacamole team's git repository on GitHub: + +```console +$ git clone git://github.com/apache/guacamole-client.git +Cloning into 'guacamole-client'... +remote: Counting objects: 12788, done. +remote: Compressing objects: 100% (4183/4183), done. +remote: Total 12788 (delta 3942), reused 12667 (delta 3822) +Receiving objects: 100% (12788/12788), 3.23 MiB | 799 KiB/s, done. +Resolving deltas: 100% (3942/3942), done. +$ +``` + +Unlike guacamole-server, even if you grab the code from the git repositories, +you won't need to run anything before building. There are no scripts that need +to be generated before building - all Maven needs is the `pom.xml` file +provided with the source. + +To build guacamole-client, just run "`mvn package`". This will invoke Maven +to automatically build and package all components, producing a single `.war` +file, which contains the entire web application: + +```console +$ mvn package +[INFO] Scanning for projects... +[INFO] ------------------------------------------------------------------------ +[INFO] Reactor Build Order: +[INFO] +[INFO] guacamole-client [pom] +[INFO] guacamole-common [jar] +[INFO] guacamole-ext [jar] +[INFO] guacamole-common-js [pom] +[INFO] guacamole [war] +[INFO] extensions [pom] +[INFO] guacamole-auth-duo [jar] +[INFO] guacamole-auth-header [jar] +[INFO] guacamole-auth-jdbc [pom] +[INFO] guacamole-auth-jdbc-base [jar] +[INFO] guacamole-auth-jdbc-mysql [jar] +[INFO] guacamole-auth-jdbc-postgresql [jar] +[INFO] guacamole-auth-jdbc-sqlserver [jar] +[INFO] guacamole-auth-jdbc-dist [pom] +[INFO] guacamole-auth-json [jar] +[INFO] guacamole-auth-ldap [jar] +[INFO] guacamole-auth-quickconnect [jar] +[INFO] guacamole-auth-sso [pom] +[INFO] guacamole-auth-sso-base [jar] +[INFO] guacamole-auth-sso-cas [jar] +[INFO] guacamole-auth-sso-openid [jar] +[INFO] guacamole-auth-sso-saml [jar] +[INFO] guacamole-auth-sso-dist [pom] +[INFO] guacamole-auth-totp [jar] +[INFO] guacamole-history-recording-storage [jar] +[INFO] guacamole-vault [pom] +[INFO] guacamole-vault-base [jar] +[INFO] guacamole-vault-ksm [jar] +[INFO] guacamole-vault-dist [pom] +[INFO] guacamole-example [war] +[INFO] guacamole-playback-example [war] +... +[INFO] ------------------------------------------------------------------------ +[INFO] Reactor Summary for guacamole-client 1.5.5: +[INFO] +[INFO] guacamole-client ................................... SUCCESS [ 11.879 s] +[INFO] guacamole-common ................................... SUCCESS [ 15.140 s] +[INFO] guacamole-ext ...................................... SUCCESS [ 14.764 s] +[INFO] guacamole-common-js ................................ SUCCESS [ 23.530 s] +[INFO] guacamole .......................................... SUCCESS [01:09 min] +[INFO] extensions ......................................... SUCCESS [ 0.601 s] +[INFO] guacamole-auth-duo ................................. SUCCESS [ 6.680 s] +[INFO] guacamole-auth-header .............................. SUCCESS [ 3.379 s] +[INFO] guacamole-auth-jdbc ................................ SUCCESS [ 0.239 s] +[INFO] guacamole-auth-jdbc-base ........................... SUCCESS [ 6.755 s] +[INFO] guacamole-auth-jdbc-mysql .......................... SUCCESS [ 6.523 s] +[INFO] guacamole-auth-jdbc-postgresql ..................... SUCCESS [ 4.756 s] +[INFO] guacamole-auth-jdbc-sqlserver ...................... SUCCESS [ 4.600 s] +[INFO] guacamole-auth-jdbc-dist ........................... SUCCESS [ 3.381 s] +[INFO] guacamole-auth-json ................................ SUCCESS [ 6.449 s] +[INFO] guacamole-auth-ldap ................................ SUCCESS [ 10.611 s] +[INFO] guacamole-auth-quickconnect ........................ SUCCESS [ 6.908 s] +[INFO] guacamole-auth-sso ................................. SUCCESS [ 0.216 s] +[INFO] guacamole-auth-sso-base ............................ SUCCESS [ 4.174 s] +[INFO] guacamole-auth-sso-cas ............................. SUCCESS [ 12.180 s] +[INFO] guacamole-auth-sso-openid .......................... SUCCESS [ 5.119 s] +[INFO] guacamole-auth-sso-saml ............................ SUCCESS [ 5.263 s] +[INFO] guacamole-auth-sso-dist ............................ SUCCESS [ 6.400 s] +[INFO] guacamole-auth-totp ................................ SUCCESS [ 9.445 s] +[INFO] guacamole-history-recording-storage ................ SUCCESS [ 2.370 s] +[INFO] guacamole-vault .................................... SUCCESS [ 0.177 s] +[INFO] guacamole-vault-base ............................... SUCCESS [ 3.899 s] +[INFO] guacamole-vault-ksm ................................ SUCCESS [ 8.084 s] +[INFO] guacamole-vault-dist ............................... SUCCESS [ 3.555 s] +[INFO] guacamole-example .................................. SUCCESS [ 2.363 s] +[INFO] guacamole-playback-example ......................... SUCCESS [ 1.040 s] +[INFO] ------------------------------------------------------------------------ +[INFO] BUILD SUCCESS +[INFO] ------------------------------------------------------------------------ +[INFO] Total time: 04:20 min +[INFO] Finished at: 2023-01-10T17:20:33-08:00 +[INFO] ------------------------------------------------------------------------ +$ +``` + +Once the Guacamole web application is built, there will be a .war file in the +`guacamole/target/` subdirectory of the current directory (the directory you +were in when you ran mvn), ready to be deployed to a servlet container like +Tomcat. + +(deploying-guacamole)= + +Deploying Guacamole +------------------- + +The web application portion of Guacamole is packaged as a fully self-contained +`.war` file. If you downloaded Guacamole from the main project web site, this +file will be called `guacamole.war`. Deploying this involves copying the file +into the directory your servlet container uses for `.war` files. In the case of +Tomcat, this will be `CATALINA_HOME/webapps/`. The location of `CATALINA_HOME` +will vary by how Tomcat was installed, but is commonly `/var/lib/tomcat`, +`/var/lib/tomcat7`, or similar: + +```console +# cp guacamole.war /var/lib/tomcat/webapps +# +``` + +If you have built guacamole-client from source, the required `.war` file will +be within the `guacamole/target/` directory and will contain an additional +version suffix. As Tomcat will determine the location of the web application +from the name of the `.war` file, you will likely want to rename this to simply +`guacamole.war` while copying: + +```console +# cp guacamole/target/guacamole-1.5.5.war /var/lib/tomcat/webapps/guacamole.war +# +``` + +Again, if you are using a different servlet container or if Tomcat is installed +to a different location, you will need to check the documentation of your +servlet container, distribution, or both to determine the proper location for +deploying `.war` files like `guacamole.war`. + +Once the `.war` file is in place, you may need to restart Tomcat to force +Tomcat to deploy the new web application, and the guacd daemon must be started +if it isn't running already. The command to restart Tomcat and guacd will vary +by distribution. Typically, you can do this by running the corresponding init +scripts with the "restart" option: + +```console +# /etc/init.d/tomcat7 restart +Stopping Tomcat... OK +Starting Tomcat... OK +# /etc/init.d/guacd start +Starting guacd: SUCCESS +guacd[6229]: INFO: Guacamole proxy daemon (guacd) version 1.5.5 started +# +``` + +:::{important} +If you want Guacamole to start on boot, you will need to configure +the Tomcat and guacd services to run automatically. Your distribution +will provide documentation for doing this. +::: + +After restarting Tomcat and starting guacd, Guacamole is successfully +installed, though it will not be fully running. In its current state, it is +completely unconfigured, and further steps are required to add at least one +Guacamole user and a few connections. This is covered in +[](configuring-guacamole). + +### What about WebSocket? + +Guacamole will use WebSocket automatically if supported by the browser and your +servlet container. In the event that Guacamole cannot connect using WebSocket, +it will immediately and transparently fall back to using HTTP. + +WebSocket is supported in Guacamole for Tomcat 7.0.37 or higher, Jetty 8 or +higher, and any servlet container supporting JSR 356, the standardized Java API +for WebSocket. + diff --git a/doc/1.5.5/gug/_sources/introduction.md.txt b/doc/1.5.5/gug/_sources/introduction.md.txt new file mode 100644 index 000000000..95f49135a --- /dev/null +++ b/doc/1.5.5/gug/_sources/introduction.md.txt @@ -0,0 +1,161 @@ +Introduction +============ + +This book is the official Apache Guacamole manual, written by the upstream +developers of the Guacamole project. It is also the official general +documentation, with an online version available at +. It is a work in progress which will be +continuously updated as Guacamole changes with each release. + +We decided to maintain the documentation for Guacamole as a book, as there is +an awful lot that can be done with the Guacamole web application, and even more +that can be done with the API. This book is intended to explore the +possibilities of Guacamole as an application, and to provide documentation +necessary to install, maintain, and use Guacamole. + +For the sake of users and administrators, we have provided a high-level +overview of Guacamole's architecture and technical design, as well as basic +usage instructions and installation instructions for common platforms. + +For the sake of developers, we have provided a protocol reference and tutorials +for common tasks (implementing protocol support, integrating Guacamole into +your own application, etc.) to give a good starting point beyond simply looking +at the Guacamole codebase. + +This particular edition of the Guacamole Manual covers Guacamole version +{{ version }}. New releases which create new features or break compatibility +will result in new editions of the user's guide, as will any necessary +corrections. As the official documentation for the project, this book will +always be freely available in its entirety online. + +(what-is-guac)= + +What is Guacamole? +------------------ + +Guacamole is an HTML5 web application that provides access to desktop +environments using remote desktop protocols (such as VNC or RDP). +Guacamole is also the project that produces this web application, and +provides an API that drives it. This API can be used to power other +similar applications or services. + +"Guacamole" is most commonly used to refer to the web application +produced by the Guacamole project using their API. This web application +is part of a stack that provides a protocol-agnostic remote desktop +gateway. Written in JavaScript and using only HTML5 and other standards, +the client part of Guacamole requires nothing more than a modern web +browser or web-enabled device when accessing any of the desktops served. + +Historically, Guacamole was an HTML5 VNC client, and before that, a +JavaScript Telnet client called RealMint ("RealMint" is an anagram for +"terminal"), but this is no longer the case. Guacamole's architecture +has grown to encompass remote desktop in general, and can be used as a +gateway for any number of computers. Originally a proof-of-concept, +Guacamole is now performant enough for daily use, and all Guacamole +development is done over Guacamole. + +As an API, Guacamole provides a common and efficient means of streaming +text data over a JavaScript-based tunnel using either HTTP or WebSocket, +and a client implementation which supports the Guacamole protocol and +renders the remote display when combined with a Guacamole protocol +stream from the tunnel. + +It provides cross-browser mouse and keyboard events, an XML-driven +on-screen keyboard, and synchronized nestable layers with +hardware-accelerated compositing. Projects that wish to provide remote +desktop support over HTML5 can leverage the years of research and +development that went into Guacamole by incorporating the API into their +application or service. + +(access-from-anywhere)= + +Why use Guacamole? +------------------ + +The principle reason to use Guacamole is constant, world-wide, +unfettered access to your computers. + +Guacamole allows access one or more desktops from anywhere remotely, +without having to install a client, particularly when installing a +client is not possible. By setting up a Guacamole server, you can +provide access to any other computer on the network from virtually any +other computer on the internet, anywhere in the world. Even mobile +phones or tablets can be used, without having to install anything. + +As a true web application whose communication is over HTTP or HTTPS +only, Guacamole allows you to access your machines from anywhere without +violating the policy of your workplace, and without requiring the +installation of special clients. The presence of a proxy or corporate +firewall does not prevent Guacamole use. + +(access-from-anything)= + +Access your computers from any device +------------------------------------- + +As Guacamole requires only a reasonably-fast, standards-compliant +browser, Guacamole will run on many devices, including mobile phones and +tablets. + +Guacamole is specifically designed to not care whether you have a mouse, +keyboard, touchscreen, or any combination of those. + +One of the major design philosophies behind Guacamole is that it should +never assume you have a particular device (ie: a mobile phone) just +because your browser has or is missing a specific feature (ie: touch +events or a smallish screen). Guacamole's codebase provides support for +both mouse and touch events simultaneously, without choosing one over +the other, while the interface is intended to be usable regardless of +screen size. + +Barring bugs, you should be able to use Guacamole on just about any +modern device with a web browser. + +(non-physical-computer)= + +Keep a computer in the "cloud" +------------------------------ + +Ignoring the buzzword, it's often useful to have a computer that has no +dedicated physical hardware, where its processing and storage power are +handled transparently by redundant systems in some remote datacenter. + +Computers hosted on virtualized hardware are more resilient to failures, +and with so many companies now offering on-demand computing resources, +Guacamole is a perfect way to access several machines that are only +accessible over the internet. + +In fact, all Guacamole development is done on computers like this. This +is partly because we like the mobility, and partly because we want to +ensure Guacamole is always performant enough for daily use. + +(group-access)= + +Provide easy access to a group +------------------------------ + +Guacamole allows you to centralize access to a large group of machines, +and specify on a per-user basis which machines are accessible. Rather +than remember a list of machines and credentials, users need only log +into a central server and click on one of the connections listed. + +If you have multiple computers which you would like to access remotely, +or you are part of a group where each person has a set of machines that +they need remote access to, Guacamole is a good way to provide that +access while also ensuring that access is available from anywhere. + +(adding-remote-access)= + +Adding HTML5 remote access to your existing infrastructure +---------------------------------------------------------- + +As Guacamole is an API, not just a web application, the core components +and libraries provided by the Guacamole project can be used to add HTML5 +remote access features to an existing application. You need not use the +main Guacamole web application; you can write (or integrate with) your +own rather easily. + +If you host an on-demand computing service, adding HTML5-based remote +access allows users of your service more broad access; users need +nothing more than a web browser to see their computers' screens. + diff --git a/doc/1.5.5/gug/_sources/jdbc-auth.md.txt b/doc/1.5.5/gug/_sources/jdbc-auth.md.txt new file mode 100644 index 000000000..d943be1a3 --- /dev/null +++ b/doc/1.5.5/gug/_sources/jdbc-auth.md.txt @@ -0,0 +1,1879 @@ +Database authentication +======================= + +Guacamole supports authentication via MySQL, PostgreSQL, or SQL Server +databases through extensions available from the project website. Using a +database for authentication provides additional features, such as the ability +to use load balancing groups of connections and a web-based administrative +interface. Unlike the default, XML-driven authentication module, all changes to +users and connections take effect immediately; users need not logout and back +in to see new connections. + +While most authentication extensions function independently, the database +authentication can act in a subordinate role, allowing users and user groups +from other authentication extensions to be associated with connections within +the database. Users and groups are considered identical to those within the +database if they have the same names, and the authentication result of another +extension will be trusted if it succeeds. A user with an account under multiple +systems will thus be able to see data from each system after successfully +logging in. For more information on using the database authentication alongside +other mechanisms, see [](ldap-and-database) within [](ldap-auth). + +To use the database authentication extension, you will need: + +1. A supported database - currently MariaDB, MySQL, PostgreSQL, or SQL Server. + +2. Sufficient permission to create new databases, to create new users, and to + grant those users permissions. + +3. Network access to the database from the Guacamole server. + +:::{important} +This chapter involves modifying the contents of `GUACAMOLE_HOME` - the +Guacamole configuration directory. If you are unsure where `GUACAMOLE_HOME` is +located on your system, please consult [](configuring-guacamole) before +proceeding. +::: + +Downloading the database authentication extension +------------------------------------------------- + +The database authentication extension is available separately from the main +`guacamole.war`. The link for this and all other officially-supported and +compatible extensions for a particular version of Guacamole are provided on the +release notes for that version. You can find the release notes for current +versions of Guacamole here: . + +The database authentication extension is packaged as a `.tar.gz` file +containing several database-specific directories. Only one of the directories +within the archive will be applicable to you, depending on whether you are +using MariaDB, MySQL, PostgreSQL, or SQL Server. + +Each database-specific directory contains a `schema/` directory and `.jar` file +(the actual Guacamole extension). The Guacamole extension `.jar` will +ultimately need to be placed within `GUACAMOLE_HOME/extensions`, while the JDBC +driver must be downloaded separately from the database vendor and placed within +`GUACAMOLE_HOME/lib`. + +::::{tab} MySQL +:::{list-table} +:stub-columns: 1 +* - Guacamole extension + - `mysql/guacamole-auth-jdbc-mysql-1.5.5.jar` +* - SQL schema scripts + - `mysql/schema/` +* - JDBC driver + - *See below* +::: + +Any of the following MySQL-compatible JDBC drivers are supported for connecting Guacamole with MySQL or MariaDB: + +* [MySQL Connector/J](http://dev.mysql.com/downloads/connector/j/) +* [MariaDB Connector/J](https://mariadb.com/kb/en/about-mariadb-connector-j/) + +If using the JDBC driver from MySQL, the required `.jar` will be within a +`.tar.gz` archive. +:::: + +::::{tab} PostgreSQL +:::{list-table} +:stub-columns: 1 +* - Guacamole extension + - `postgresql/guacamole-auth-jdbc-postgresql-1.5.5.jar` +* - SQL schema scripts + - `postgresql/schema/` +* - JDBC driver + - [PostgreSQL JDBC Driver](https://jdbc.postgresql.org/download/#latest-versions) +::: +:::: + +::::{tab} SQL Server +:::{list-table} +:stub-columns: 1 +* - Guacamole extension + - `sqlserver/guacamole-auth-jdbc-sqlserver-1.5.5.jar` +* - SQL schema scripts + - `sqlserver/schema/` +* - JDBC driver + - *See below* +::: + +Any of the following TDS-compatible JDBC drivers are supported for connecting +Guacamole to SQL Server: + +* [Microsoft JDBC Driver for SQL Server](https://docs.microsoft.com/en-us/sql/connect/jdbc/download-microsoft-jdbc-driver-for-sql-server) +* [jTDS](http://jtds.sourceforge.net/) +* [Progress DataDirect’s JDBC Driver for SQL Server](https://www.progress.com/jdbc/microsoft-sql-server) +* Microsoft SQL Server 2000 JDBC Driver (legacy) +:::: + +(jdbc-auth-database-creation)= + +Creating the Guacamole database +------------------------------- + +The database authentication module will need a database to store +authentication data and a user to use only for data access and +manipulation. You can use an existing database and existing user, but +for the sake of simplicity and security, these instructions assume you +will be creating a new database and new user that will be used only by +Guacamole and only for this authentication module. + +You need MariaDB, MySQL, PostgreSQL, or SQL Server installed, and must +have sufficient access to create and administer databases. If this is +not the case, install your database of choice now. Most distributions +will provide a convenient MySQL or PostgreSQL package which will set up +everything for you, including the root database user, if applicable. If +you're using SQL Server, you need to install the packages on your +platform of choice, and also make sure that you obtain the proper +licensing for the version and edition of SQL Server you are running. + +For the sake of clarity, these instructions will refer to the database +as "guacamole_db", but the database can be named whatever you like. + +:::{tab} MySQL +```console +$ mysql -u root -p +Enter password: +Welcome to the MySQL monitor. Commands end with ; or \g. +Your MySQL connection id is 233 +Server version: 5.5.29-0ubuntu0.12.10.1 (Ubuntu) + +Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. + +Oracle is a registered trademark of Oracle Corporation and/or its +affiliates. Other names may be trademarks of their respective +owners. + +Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. + +mysql> CREATE DATABASE guacamole_db; +Query OK, 1 row affected (0.00 sec) + +mysql> quit +Bye +$ ls schema/ +001-create-schema.sql 002-create-admin-user.sql upgrade +$ cat schema/*.sql | mysql -u root -p guacamole_db +Enter password: +$ +``` +::: + +:::{tab} PostgreSQL +```console +$ createdb guacamole_db +$ ls schema/ +001-create-schema.sql 002-create-admin-user.sql +$ cat schema/*.sql | psql -d guacamole_db -f - +CREATE TYPE +CREATE TYPE +CREATE TYPE +CREATE TABLE +CREATE INDEX +... +INSERT 0 1 +INSERT 0 4 +INSERT 0 3 +$ +``` +::: + +:::{tab} SQL Server +```console +$ /opt/mssql-tools/bin/sqlcmd -S localhost -U SA +Password: +1> CREATE DATABASE guacamole_db; +2> GO +1> quit +$ /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -d guacamole_db -i schema/001-create-schema.sql +Password: +Rule bound to data type. +The new rule has been bound to column(s) of the specified user data type. +Rule bound to data type. +The new rule has been bound to column(s) of the specified user data type. +$ /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -d guacamole_db -i schema/002-create-admin-user.sql +Password: + +(1 rows affected) + +(3 rows affected) + +(5 rows affected) +$ +``` +::: + +Granting Guacamole access to the database +----------------------------------------- + +For Guacamole to be able to execute queries against the database, you must +create a new user for the database and grant that user sufficient privileges to +manage the contents of all tables in the database. The user created for +Guacamole needs only `SELECT`, `UPDATE`, `INSERT`, and `DELETE` permissions on +all Guacamole tables. Additionally, if using PostgreSQL, the user will need +`SELECT` and `USAGE` permission on all sequences within all Guacamole tables. +*No other permissions should be granted.* + +These instructions will refer to the user as "guacamole_user" but the user can +be named whatever you like. Naturally, you should also choose a real password +for your user rather than the string "some_password" used as a placeholder +below. + +:::{tab} MySQL +```console +$ mysql -u root -p +Enter password: +Welcome to the MySQL monitor. Commands end with ; or \g. +Your MySQL connection id is 233 +Server version: 5.5.29-0ubuntu0.12.10.1 (Ubuntu) + +Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. + +Oracle is a registered trademark of Oracle Corporation and/or its +affiliates. Other names may be trademarks of their respective +owners. + +Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. + +mysql> CREATE USER 'guacamole_user'@'localhost' IDENTIFIED BY 'some_password'; +Query OK, 0 rows affected (0.00 sec) + +mysql> GRANT SELECT,INSERT,UPDATE,DELETE ON guacamole_db.* TO 'guacamole_user'@'localhost'; +Query OK, 0 rows affected (0.00 sec) + +mysql> FLUSH PRIVILEGES; +Query OK, 0 rows affected (0.02 sec) + +mysql> quit +Bye +$ +``` +::: + +:::{tab} PostgreSQL +```console +$ psql -d guacamole_db +psql (9.3.6) +Type "help" for help. + +guacamole=# CREATE USER guacamole_user WITH PASSWORD 'some_password'; +CREATE ROLE +guacamole=# GRANT SELECT,INSERT,UPDATE,DELETE ON ALL TABLES IN SCHEMA public TO guacamole_user; +GRANT +guacamole=# GRANT SELECT,USAGE ON ALL SEQUENCES IN SCHEMA public TO guacamole_user; +GRANT +guacamole=# \q +$ +``` +::: + +:::{tab} SQL Server +```console +$ /opt/mssql-tools/bin/sqlcmd -S localhost -U SA +Password: +1> CREATE LOGIN guacamole_user WITH PASSWORD = 'some_password'; +2> GO +1> USE guacamole_db; +2> GO +1> CREATE USER guacamole_user; +2> GO +1> ALTER ROLE db_datawriter ADD MEMBER guacamole_user; +2> ALTER ROLE db_datareader ADD MEMBER guacamole_user; +3> GO +1> quit +$ +``` +::: + +(jdbc-auth-installation)= + +Upgrading an existing Guacamole database +---------------------------------------- + +If you are upgrading from an older version of Guacamole, you may need to run +one or more database schema upgrade scripts located within the +`schema/upgrade/` directory. Each of these scripts is named +{samp}`upgrade-pre-{VERSION}.sql` where `VERSION` is the version of Guacamole +where those changes were introduced. They need to be run when you are upgrading +from a version of Guacamole older than `VERSION`. + +If there are no {samp}`upgrade-pre-{VERSION}.sql` scripts present in the +`schema/upgrade/` directory which apply to your existing Guacamole database, +then the schema has not changed between your version and the version your are +installing, and there is no need to run any database upgrade scripts. + +These scripts are incremental and, when relevant, *must be run in order*. For +example, if you are upgrading an existing database from version +0.9.13-incubating to version 1.0.0, you would need to run the +`upgrade-pre-0.9.14.sql` script (because 0.9.13-incubating is older than +0.9.14), followed by the `upgrade-pre-1.0.0.sql` script (because +0.9.13-incubating is also older than 1.0.0). + +:::{important} +Because the permissions granted to the Guacamole-specific PostgreSQL user when +the database was first created will not automatically be granted for any new +tables and sequences, you will also need to re-grant those permissions after +applying any upgrade relevant scripts: + +``` +$ psql -d guacamole_db +psql (9.3.6) +Type "help" for help. + +guacamole=# GRANT SELECT,INSERT,UPDATE,DELETE ON ALL TABLES IN SCHEMA public TO guacamole_user; +GRANT +guacamole=# GRANT SELECT,USAGE ON ALL SEQUENCES IN SCHEMA public TO guacamole_user; +GRANT +guacamole=# \q +$ +``` +::: + +Installing database authentication +---------------------------------- + +Guacamole extensions are self-contained `.jar` files which are located within +the `GUACAMOLE_HOME/extensions` directory. To install the database +authentication extension, you must: + +1. Create the `GUACAMOLE_HOME/extensions` and `GUACAMOLE_HOME/lib` directories, + if they do not already exist. + +2. Copy `guacamole-auth-jdbc-mysql-1.5.5.jar` *or* + `guacamole-auth-jdbc-postgresql-1.5.5.jar` *or* + `guacamole-auth-jdbc-sqlserver-1.5.5.jar` within + `GUACAMOLE_HOME/extensions`, depending on whether you are using + MySQL/MariaDB, PostgreSQL, or SQL Server. + +3. Copy the JDBC driver for your database to `GUACAMOLE_HOME/lib`. Without a + JDBC driver for your database, Guacamole will not be able to connect and + authenticate users. + +4. Configure Guacamole to use database authentication, as described below. + +:::{important} +You will need to restart Guacamole by restarting your servlet container in +order to complete the installation. Doing this will disconnect all active +users, so be sure that it is safe to do so prior to attempting installation. If +you do not configure the database authentication properly, Guacamole will not +start up again until the configuration is fixed. +::: + +(jdbc-auth-configuration)= + +### Configuring Guacamole for database authentication + +Additional properties must be added to `guacamole.properties` for Guacamole to +properly connect to your database. These properties are specific to the +database being used, and must be set correctly for authentication to work. + +The properties absolutely required by the database authentication extension are +relatively few and self-explanatory, describing only how the connection to the +database is to be established, and how Guacamole will authenticate when +querying the database: + +:::{tab} MySQL +`mysql-hostname` +: The hostname or IP address of the server hosting your database. + +`mysql-database` +: The name of the database that you created for Guacamole. This is given as + "guacamole_db" in the examples given in this chapter. + +`mysql-username` +: The username of the user that Guacamole should use to connect to the + database. This is given as "guacamole_user" in the examples given in this + chapter. + +`mysql-password` +: The password Guacamole should provide when authenticating with the database. + This is given as "some_password" in the examples given in this chapter. +::: + +:::{tab} PostgreSQL +`postgresql-hostname` +: The hostname or IP address of the server hosting your database. + +`postgresql-database` +: The name of the database that you created for Guacamole. This is given as + "guacamole_db" in the examples given in this chapter. + +`postgresql-username` +: The username of the user that Guacamole should use to connect to the + database. This is given as "guacamole_user" in the examples given in this + chapter. + +`postgresql-password` +: The password Guacamole should provide when authenticating with the database. + This is given as "some_password" in the examples given in this chapter. +::: + +:::{tab} SQL Server +`sqlserver-hostname` +: The hostname or IP address of the server hosting your database. + +`sqlserver-database` +: The name of the database that you created for Guacamole. This is given as + "guacamole_db" in the examples given in this chapter. + +`sqlserver-username` +: The username of the user that Guacamole should use to connect to the + database. This is given as "guacamole_user" in the examples given in this + chapter. + +`sqlserver-password` +: The password Guacamole should provide when authenticating with the database. + This is given as "some_password" in the examples given in this chapter. +::: + +A minimal `guacamole.properties` configured to connect to a locally-hosted +database would look like the following: + +:::{tab} MySQL +``` +# MySQL properties +mysql-hostname: localhost +mysql-database: guacamole_db +mysql-username: guacamole_user +mysql-password: some_password +``` +::: + +:::{tab} PostgreSQL +``` +# PostgreSQL properties +postgresql-hostname: localhost +postgresql-database: guacamole_db +postgresql-username: guacamole_user +postgresql-password: some_password +``` +::: + +:::{tab} SQL Server +``` +# SQL Server properties +sqlserver-hostname: localhost +sqlserver-database: guacamole_db +sqlserver-username: guacamole_user +sqlserver-password: some_password +``` +::: + +:::{important} +Be sure to specify the correct username and password for the database user you +created, and to specify the correct database. Authentication will not work if +these parameters are not correct. +::: + +Additional optional properties are available to control how Guacamole connects +to the database server: + +:::{tab} MySQL +`mysql-port` +: The port number of the MySQL or MariaDB database to connect to. If not + specified, the standard MySQL / MariaDB port 3306 will be used. + +`mysql-driver` +: Controls which JDBC driver the extension attempts to load. By default, the + installed JDBC driver will be automatically detected. Possible values are: + + mysql + : [The **MySQL** Connector/J JDBC driver](https://dev.mysql.com/downloads/connector/j/). + + mariadb + : [The **MariaDB** Connector/J JDBC driver](https://mariadb.com/kb/en/about-mariadb-connector-j/). + +`mysql-server-timezone` +: Specifies the timezone the MySQL server is configured to run in. While the + MySQL driver attempts to auto-detect the timezone in use by the server, there + are many cases where the timezone provided by the operating system is either + unknown by Java, or matches multiple timezones. In these cases MySQL may + either complain or refuse the connection unless the timezone is specified as + part of the connection. This property allows the timezone of the server to be + specified so that the connection can continue and the JDBC driver can + properly translate timestamps. The property accepts timezones in the + following formats: + + Region/Locale + : Well-known TimeZone Identifiers, in the Region/Locale format. Examples are: + + ``` + mysql-server-timezone: America/Los_Angeles + mysql-server-timezone: Africa/Johannesburg + mysql-server-timezone: China/Shanghai + ``` + + GMT+/-HH:MM + : GMT or custom timezones specified by GMT offset. Examples of valid GMT + specifications are: + + ``` + mysql-server-timezone: GMT + mysql-server-timezone: GMT-00:00 + mysql-server-timezone: GMT+0000 + mysql-server-timezone: GMT-0 + ``` + + Examples of custom timezones specified by GMT offsets are: + + ``` + mysql-server-timezone: GMT+0130 + mysql-server-timezone: GMT-0430 + mysql-server-timezone: GMT+06:00 + mysql-server-timezone: GMT-9 + ``` + + The MySQL Driver implements several parameters specific to + configuring SSL for secure connections to MySQL servers that support + or require encrypted communications. *Older versions of MySQL + Connector/J have known issues with SSL verification - if you + experience problems connecting to SSL-secured MySQL databases it is + recommended that you update to a current version of the driver.* + +`mysql-ssl-mode` +: This property sets the SSL mode that the JDBC driver will attempt to use when + communicating with the remote MySQL server. The values for this property + match the standard values supported by the MySQL and MariaDB JDBC drivers: + + disabled + : Do not use SSL, and fail if the server requires it. For compatibility this + will also set the legacy JDBC driver property useSSL to false. + + preferred + : Prefer SSL, but fall back to plain-text if an SSL connection cannot be + negotiated. This is the default. + + required + : Require SSL connections, and fail if SSL cannot be negotiated. This mode + does not perform any validition checks on the certificate in use by the + server, the issuer, etc. + + verify-ca + : Require SSL connections, and check to make sure that the certificate issuer + is known to be valid. + + verify-identity + : Require SSL connections, and check to make sure that the server certificate + is issued by a known authority, and that the identity of the server + matches the identity on the certificate. + +`mysql-ssl-trust-store` +: The file that will store trusted SSL certificates for the JDBC driver to use + when validating CA and server certificates. This should be a JKS-formatted + certificate store. This property is optional and defaults to Java's normal + trusted certificate locations, which vary based on the version of Java in + use. + +`mysql-ssl-trust-password` +: The password to use to access the SSL trusted certificate store, if one is + required. By default no password will be used. + +`mysql-ssl-client-store` +: The file that contains the client certificate to use when making SSL + connections to the MySQL server. This should be a JKS-formatted certificate + store that contains a private key and certificate pair. This property is + optional, and by default no client certificate will be used for the SSL + connection. + +`mysql-ssl-client-password` +: The password to use to access the client certificate store, if one is + required. By default no password will be used. + +`mysql-batch-size` +: Controls how many objects may be retrieved from the database in a single + query. If more objects than this number are requested, retrieval of those + objects will be automatically and transparently split across multiple + queries. + + By default, MySQL/MariaDB queries will retrieve no more than 1000 objects. +::: + +:::{tab} PostgreSQL +`postgresql-port` +: The port number of the PostgreSQL database to connect to. If not specified, + the standard PostgreSQL port 5432 will be used. + +`postgresql-ssl-mode` +: This property sets the SSL mode that the JDBC extension will attempt to use + when communicating with the remote Postgres server. The values for this + property match the standard values supported by the Postgres JDBC driver: + + disable + : Do not use SSL, and fail if the server requires it. + + allow + : If the server requires encryption use it, otherwise prefer unencrypted + connections. + + prefer + : Try SSL connections, first, but allow unencrypted connections if the server + does not support SSL or if SSL negotiations fail. This is the + default. + + require + : Require SSL connections, but implicitly trust all server certificates and + authorities. + + verify-ca + : Require SSL connections, and verify that the server certificate is issued + by a known certificate authority. + + verify-full + : Require SSL connections, verifying that the server certificate is issued + by a known authority, and that the name on the certificate matches the name of + the server. + +`postgresql-ssl-cert-file` +: The file containing the client certificate to be used when making an + SSL-encrtyped connection to the Postgres server, in PEM format. This property + is optional, and will be ignored if the SSL mode is set to disable. + +`postgresql-ssl-key-file` +: The file containing the client private key to be used when making an + SSL-encrypted connection to the Postgres server, in PEM format. This property + is optional, and will be ignored if the SSL mode is set to disable. + +`postgresql-ssl-root-cert-file` +: The file containing the root and intermedidate certificates against which the + server certificate will be verified when making an SSL-encrypted connection to + the Postgres server. This file should contain one or more PEM-formatted + authority certificates. This property is optional, and will only be used if SSL + mode is set to verify-ca or verify-full. + + If SSL is set to one of the verification modes and this property is not + specified, the JDBC driver will attempt to use the `.postgresql/root.crt` + file from the home directory of the user running the web application server + (e.g. Tomcat). If this property is not specified and the default file does + not exist, the Postgres JDBC driver will fail to connect to the server. + +`postgresql-ssl-key-password` +: The password that will be used to access the client private key file, if the + client private key is encrypted. This property is optional, and is only used if + the `postgresql-ssl-key-file` property is set and SSL is enabled. + +`postgresql-default-statement-timeout` +: The number of seconds the driver will wait for a response from the database, + before aborting the query. A value of 0 (the default) means the timeout is + disabled. + +`postgresql-socket-timeout` +: The number of seconds to wait for socket read operations. If reading from the + server takes longer than this value, the connection will be closed. This can + be used to handle network problems such as a dropped connection to the + database. Similar to `postgresql-default-statement-timeout`, it will also + abort queries that take too long. A value of 0 (the default) means the + timeout is disabled. + +`postgresql-batch-size` +: Controls how many objects may be retrieved from the database in a single + query. If more objects than this number are requested, retrieval of those + objects will be automatically and transparently split across multiple + queries. + + By default, PostgreSQL queries will retrieve no more than 5000 objects. +::: + +:::{tab} SQL Server +`sqlserver-port` +: The port number of the SQL Server database to connect to. If not specified, + the standard SQL Server port 1433 will be used. + +`sqlserver-driver` +: The specific TDS-compatible JDBC driver to expect to have been installed. + Multiple JDBC drivers are available that support SQL Server. If not using the + Microsoft driver, this property must be specified to define the driver that + will be used. Possible values are: + + microsoft2005 + : The current [Microsoft JDBC Driver for SQL Server](https://docs.microsoft.com/en-us/sql/connect/jdbc/download-microsoft-jdbc-driver-for-sql-server), + supporting SQL Server 2005 and later. This is the default. + + microsoft + : The legacy Microsoft driver for SQL Server 2000. + + jtds + : The open source [jTDS](http://jtds.sourceforge.net/) driver. + + datadirect + : [Progress DataDirect’s JDBC Driver for SQL Server](https://www.progress.com/jdbc/microsoft-sql-server). + +`sqlserver-instance` +: The instance name that the SQL Server driver should attempt to connect to, if + not the default SQL Server instance. This instance name is configured during + the SQL Server installation. This property is optional, and most installations + should work without the need to specify an instance name. + +`sqlserver-batch-size` +: Controls how many objects may be retrieved from the database in a single + query. If more objects than this number are requested, retrieval of those + objects will be automatically and transparently split across multiple + queries. + + By default, SQL Server queries will retrieve no more than 500 objects. +::: + +#### Enforcing password policies + +Configuration options are available for enforcing rules intended to encourage +password complexity and regular changing of passwords. None of these options +are enabled by default, but can be selectively enabled through additional +properties in `guacamole.properties`. + +##### Password complexity + +Administrators can require that passwords have a certain level of complexity, +such as having both uppercase and lowercase letters ("multiple case"), at least +one digit, or at least one symbol, and can prohibit passwords from containing +the user's own username. + +With respect to password content, the database authentication defines a "digit" +as any numeric character and a "symbol" is any non-alphanumeric character. This +takes non-English languages into account, thus a digit is not simply "0" +through "9" but rather [any character defined in Unicode as +numeric](https://en.wikipedia.org/wiki/Numerals_in_Unicode), and a symbol is +any character which Unicode does not define as alphabetic or numeric. + +The check for whether a password contains the user's own username is performed +in a case-insensitive manner. For example, if the user's username is "phil", +the passwords "ch!0roPhil" and "PHIL-o-dendr0n" would still be prohibited. + +:::{tab} MySQL +``` +mysql-user-password-min-length: 8 +mysql-user-password-require-multiple-case: true +mysql-user-password-require-symbol: true +mysql-user-password-require-digit: true +mysql-user-password-prohibit-username: true +``` +::: + +:::{tab} PostgreSQL +``` +postgresql-user-password-min-length: 8 +postgresql-user-password-require-multiple-case: true +postgresql-user-password-require-symbol: true +postgresql-user-password-require-digit: true +postgresql-user-password-prohibit-username: true +``` +::: + +:::{tab} SQL Server +``` +sqlserver-user-password-min-length: 8 +sqlserver-user-password-require-multiple-case: true +sqlserver-user-password-require-symbol: true +sqlserver-user-password-require-digit: true +sqlserver-user-password-prohibit-username: true +``` +::: + +##### Password age / expiration + +"Password age" refers to two separate concepts: + +1. Requiring users to change their password after a certain amount of time has + elapsed since the last password change (maximum password age). + +2. Preventing users from changing their password too frequently (minimum + password age). + +While it may seem strange to prevent users from changing their password too +frequently, it does make sense if you are concerned that rapid password changes +may defeat password expiration (users could immediately change the password +back) or tracking of password history (users could cycle through passwords +until the history is exhausted and their old password is usable again). + +By default, the database authentication does not apply any limits to password +age, and users with permission to change their passwords may do so as +frequently or infrequently as they wish. Password age limits can be enabled +using a pair of properties, each accepting values given in units of days: + +:::{tab} MySQL +``` +mysql-user-password-min-age: 7 +mysql-user-password-max-age: 90 +``` +::: + +:::{tab} PostgreSQL +``` +postgresql-user-password-min-age: 7 +postgresql-user-password-max-age: 90 +``` +::: + +:::{tab} SQL Server +``` +sqlserver-user-password-min-age: 7 +sqlserver-user-password-max-age: 90 +``` +::: + +:::{important} +So that administrators can always intervene in the case that a password needs +to be reset despite restrictions, the minimum age restriction does not apply to +any user with permission to administer the system. +::: + +##### Preventing password reuse + +If desired, Guacamole can keep track of each user's most recently used +passwords, and will prohibit reuse of those passwords until the password has +been changed sufficiently many times. By default, Guacamole will not keep track +of old passwords. + +Note that these passwords are hashed in the same manner as each user's current +password. When a user's password is changed, the hash, salt, etc. currently +stored for that user is actually just copied verbatim (along with a timestamp) +into a list of historical passwords, with older entries from this list being +automatically deleted. + +:::{tab} MySQL +``` +mysql-user-password-history-size: 6 +``` +::: + +:::{tab} PostgreSQL +``` +postgresql-user-password-history-size: 6 +``` +::: + +:::{tab} SQL Server +``` +sqlserver-user-password-history-size: 6 +``` +::: + +(jdbc-auth-concurrency)= + +#### Concurrent use of Guacamole connections + +The database authentication module provides configuration options to restrict +concurrent use of connections or connection groups. These options are set +through `guacamole.properties` and specify the default concurrency policies for +connections and connection groups. The values set through the properties can be +overridden later on a per-connection basis using the administrative interface: + +:::{tab} MySQL +``` +mysql-default-max-connections: 1 +mysql-default-max-group-connections: 1 +``` +::: + +:::{tab} PostgreSQL +``` +postgresql-default-max-connections: 1 +postgresql-default-max-group-connections: 1 +``` +::: + +:::{tab} SQL Server +``` +sqlserver-default-max-connections: 1 +sqlserver-default-max-group-connections: 1 +``` +::: + +These properties are not required, but with the above properties in place, +users attempting to use a connection or group that is already in use will be +denied access. By default, concurrent access is allowed. + +Concurrent access can also be restricted such that a particular user may only +use a connection or group a certain number of times. By default, per-user +concurrent use is limited for connection groups (to avoid allowing a single +user to exhaust the contents of the group) but otherwise unrestricted. This +default behavior can be modified through `guacamole.properties` or the +per-connection settings exposed in the administrative interface: + +:::{tab} MySQL +``` +mysql-default-max-connections-per-user: 0 +mysql-default-max-group-connections-per-user: 0 +``` +::: + +:::{tab} PostgreSQL +``` +postgresql-default-max-connections-per-user: 0 +postgresql-default-max-group-connections-per-user: 0 +``` +::: + +:::{tab} SQL Server +``` +sqlserver-default-max-connections-per-user: 0 +sqlserver-default-max-group-connections-per-user: 0 +``` +::: + +If you wish to impose an absolute limit on the number of connections that can +be established through Guacamole, ignoring which users or connections are +involved, this can be done as well. By default, Guacamole will impose no such +limit: + +:::{tab} MySQL +``` +mysql-absolute-max-connections: 0 +``` +::: + +:::{tab} PostgreSQL +``` +postgresql-absolute-max-connections: 0 +``` +::: + +:::{tab} SQL Server +``` +sqlserver-absolute-max-connections: 0 +``` +::: + +(jdbc-auth-restrict)= + +### Restricting authentication to database users only + +By default, users will be allowed access to Guacamole as long as they are +authenticated by at least one extension. If database authentication is in use, +and a user is not associated with the database, then that user will be allowed +access to Guacamole if another extension grants this access, and will be +provided with a view of the data exposed by other extensions for that user +account. + +In some situations, such as when [combining LDAP with a +database](ldap-and-database), it would be preferable to let the database have +the last word regarding whether a user should be allowed into the system: +restricting access to only those users which exist in the database, and +explicitly denying authentication through all other means unless that user has +been associated with the database as well. This behavior can be forced by +setting properties which declare that database user accounts are required: + +:::{tab} MySQL +``` +mysql-user-required: true +``` +::: + +:::{tab} PostgreSQL +``` +postgresql-user-required: true +``` +::: + +:::{tab} SQL Server +``` +sqlserver-user-required: true +``` +::: + +With the above properties set, successful authentication attempts for users +which are not associated with the database will be vetoed by the database +authentication. Guacamole will report that the login is invalid, as if the user +does not exist at all. + +(jdbc-auth-auto-create)= + +### Auto-creating database users + +Guacamole supports the ability to layer authentication modules on top of one +another such that users successfully authenticated from one extension (e.g. +LDAP) can be assigned permissions to connections in another extension (e.g. +JDBC). Other extensions, like the TOTP extension, rely on the database +extension to be able to store information for various user accounts. In these +situations it can be difficult to have to manually create user accounts within +the database extension. + +The database extension provides a mechanism for enabling auto-creation of user +accounts that successfully authenticate from other extensions. This +functionality is disabled by default, but can be enabled in each of the +supported database extensions by enabling the appropriate option in +`guacamole.properties`. The resulting accounts will only have `READ` access to +themselves until additional permissions are granted, either explicitly by the +administrator or by permissions assigned to groups of which the user is a +member. + +:::{tab} MySQL +``` +mysql-auto-create-accounts: true +``` +::: + +:::{tab} PostgreSQL +``` +postgresql-auto-create-accounts: true +``` +::: + +:::{tab} SQL Server +``` +sqlserver-auto-create-accounts: true +``` +::: + +### Completing the installation + +Guacamole will only reread `guacamole.properties` and load newly-installed +extensions during startup, so your servlet container will need to be restarted +before the database authentication will take effect. Restart your servlet +container and give the new authentication a try. + +:::{important} +You only need to restart your servlet container. *You do not need to restart +guacd*. + +guacd is completely independent of the web application and does not deal with +`guacamole.properties` or the authentication system in any way. Since you are +already restarting the servlet container, restarting guacd as well technically +won't hurt anything, but doing so is completely pointless. +::: + +If Guacamole does not come back online after restarting your servlet container, +check the logs. Problems in the configuration of the database authentication +extension will prevent Guacamole from starting up, and any such errors will be +recorded in the logs of your servlet container. + +(jdbc-auth-default-user)= + +Logging in +---------- + +The default Guacamole user created by the provided SQL scripts is +"`guacadmin`", with a default password of "`guacadmin`". Once you have verified +that the database authentication is working, *you should change your password +immediately*. + +More detailed instructions for managing users and connections is given in +[](administration). + +(jdbc-auth-schema)= + +Modifying data manually +----------------------- + +If necessary, it is possible to modify the data backing the authentication +module manually by executing SQL statements against the database. In general +use, this will not be common, but if you need to bulk-insert a large number of +users or connections, or you wish to translate an existing configuration +automatically, you will need to know how everything is laid out at a high +level. + +This section assumes knowledge of SQL and your chosen database, and that +whatever you need to do can be accomplished if only you had high-level +information about Guacamole's SQL schema. + +(jdbc-auth-schema-entities)= + +### Entities + +Every user and user group has a corresponding entry in the `guacamole_entity` +table which serves as the basis for assignment of a unique name, permissions, +as well as relations which are common to both users and groups like group +membership. Each entity has a corresponding name which is unique across all +other entities of the same type. + +If deleting a user or user group, the corresponding entity should also be +deleted. As any user or group which points to the entity will be deleted +automatically when the entity is deleted through cascading deletion, *it is +advisable to use the entity as the basis for any delete operation*. + +The `guacamole_entity` table contains the following columns: + +`entity_id` +: The unique integer associated with each entity (user or user group). This + value is generated automatically when a new entry is inserted into the + `guacamole_entity` table and is distinct from the unique integer associated + with the user entry in [`guacamole_user`](jdbc-auth-schema-users) or the user + group entry in [`guacamole_user_group`](jdbc-auth-schema-groups). + +`name` +: The unique name associated with each user or group. This value must be + specified manually, and must be different from any existing user or group in + the table. The name need only be unique relative to the names of other entities + having the same type (a user may have the same name as a group). + +`type` +: The type of this entity. This can be either `USER` or `USER_GROUP`. + +(jdbc-auth-schema-users)= + +### Users + +Every user has a corresponding entry in the `guacamole_user` and +[`guacamole_entity`](jdbc-auth-schema-entities) tables. Each user has a +corresponding unique username, specified via `guacamole_entity`, and salted +password. The salted password is split into two columns: one containing the +salt, and the other containing the password hashed with SHA-256. + +If deleting a user, the [corresponding entity](jdbc-auth-schema-entities) +should also be deleted. As any user which points to the entity will be deleted +automatically when the entity is deleted through cascading deletion, *it is +advisable to use the entity as the basis for any delete operation*. + +The `guacamole_user` table contains the following columns: + +`user_id` +: The unique integer associated with each user. This value is generated + automatically when a new entry is inserted into the `guacamole_user` table. + +`entity_id` +: The value of the `entity_id` column of the `guacamole_entity` entry + representing this user. + +`password_hash` +: The result of hashing the user's password concatenated with the contents of + `password_salt` using SHA-256. The salt is appended to the password prior to + hashing. + + Although passwords set through Guacamole will always be salted, it is + possible to use unsalted password hashes when inserted manually or through an + external system. If `password_salt` is `NULL`, the `password_hash` will be + handled as a simple unsalted hash of the password. + +`password_salt` +: A 32-byte random value. When a new user is created from the web interface, + this value is randomly generated using a cryptographically-secure random + number generator. + + This will always be set for users whose passwords are set through Guacamole, + but it is possible to use unsalted password hashes when inserted manually or + through an external system. If `password_salt` is `NULL`, the `password_hash` + will be handled as a simple unsalted hash of the password. + +`password_date` +: The date (and time) that the password was last changed. When a password is + changed via the Guacamole interface, this value is updated. This, along with + the contents of the `guacamole_user_password_history` table, is used to + enforce password policies. + +`disabled` +: Whether login attempts as this user account should be rejected. If this + column is set to `TRUE` or `1`, login attempts by this user will be rejected + as if the user did not exist. By default, user accounts are not disabled, and + login attempts will succeed if the user provides the correct password. + +`expired` +: If set to `TRUE` or `1`, requires that the user reset their password prior to + fully logging in. The user will be presented with a password reset form, and + will not be allowed to log into Guacamole until the password has been changed. + By default, user accounts are not expired, and no password reset will be + required upon login. + +`access_window_start` +: The time of day (not date) after which this user account may be used. If + `NULL`, this restriction does not apply. If set to non-`NULL`, attempts to log + in after the specified time will be allowed, while attempts to log in before + the specified time will be denied. + +`access_window_end` +: The time of day (not date) after which this user account may *not* be used. + If `NULL`, this restriction does not apply. If set to non-`NULL`, attempts to + log in after the specified time will be denied, while attempts to log in + before the specified time will be allowed. + +`valid_from` +: The date (not time of day) after which this user account may be used. If + `NULL`, this restriction does not apply. If set to non-`NULL`, attempts to + log in after the specified date will be allowed, while attempts to log in + before the specified date will be denied. + +`valid_until` +: The date (not time of day) after which this user account may *not* be used. + If `NULL`, this restriction does not apply. If set to non-`NULL`, attempts to + log in after the specified date will be denied, while attempts to log in + before the specified date will be allowed. + +`timezone` +: The time zone to use when interpreting the `access_window_start`, + `access_window_end`, `valid_from`, and `valid_until` values. This value may + be any Java `TimeZone` ID, as defined by + [`getAvailableIDs()`](http://docs.oracle.com/javase/7/docs/api/java/util/TimeZone.html#getAvailableIDs()) + though the Guacamole management interface will only present a subset of these + time zones. + +`full_name` +: The user's full name. Unlike the username, this name need not be unique; it + is optional and is meant for display purposes only. Defining this value has + no bearing on user identity, which is dictated purely by the username. User + accounts with no associated full name should have this column set to `NULL`. + +`email_address` +: The user's email address, if any. This value is optional, need not be unique + relative to other defined users, and is meant for display purposes only. + Defining this value has no bearing on user identity, which is dictated purely + by the username. If the user has no associated email address, this column + should be set to `NULL`. + +`organization` +: The name of the organization, company, etc. that the user is affiliated with. + This value is optional and is meant for display purposes only. Defining this + value has no bearing on user identity, which is dictated purely by the + username. Users with no associated organization should have this column set + to `NULL`. + +`organizational_role` +: The role or title of the user at the organization described by the + organization column. This value is optional and is used for display purposes + only. Defining this value has no bearing on user identity, which is dictated + purely by the username. Users with no associated organization (or specific + role/title at that organization) should have this column set to `NULL`. + +:::{important} +If you choose to manually set unsalted password hashes, please be sure you +understand the security implications of doing so. + +In the event that your database is compromised, finding the password for a +*salted* hash is computationally infeasible, but finding the password for an +*unsalted* hash is often not. In many cases, the password which corresponds to +an unsalted hash can be found simply by entering the hash into a search engine +like Google. +::: + +If creating a user manually, the main complication is the salt, which must be +determined before the `INSERT` statement can be constructed, but this can be +dealt with using variables. For MySQL: + +```mysql +-- Generate salt +SET @salt = UNHEX(SHA2(UUID(), 256)); + +-- Create base entity entry for user +INSERT INTO guacamole_entity (name, type) +VALUES ('myuser', 'USER'); + +-- Create user and hash password with salt +INSERT INTO guacamole_user ( + entity_id, + password_salt, + password_hash, + password_date +) +SELECT + entity_id, + @salt, + UNHEX(SHA2(CONCAT('mypassword', HEX(@salt)), 256)), + CURRENT_TIMESTAMP +FROM guacamole_entity +WHERE + name = 'myuser' + AND type = 'USER'; +``` + +This sort of statement is useful for both creating new users or for changing +passwords, especially if all administrators have forgotten theirs. + +If you are not using MySQL, or you are using a version of MySQL that lacks the +SHA2 function, you will need to calculate the SHA-256 value manually (by using +the `sha256sum` command, for example). + +(jdbc-auth-schema-password-history)= + +#### Password history + +When a user's password is changed, a copy of the previous password's +hash and salt is made within the `guacamole_user_password_history`. +Each entry in this table is associated with the user whose password +changed, along with the date that password first applied. + +Old entries within this table are automatically deleted on a per-user +basis depending on the requirements of the password policy. For example, +if the password policy has been configured to require that users not +reuse any of their previous six passwords, then there will be no more +than six entries in this table for each user. + +`password_history_id` +: The unique integer associated with each password history record. This + value is generated automatically when a new entry is inserted into the + `guacamole_user_password_history` table. + +`user_id` +: The value of the `user_id` column from the entry in `guacamole_user` + associated with the user who previously had this password. + +`password_hash` +: The hashed password specified within the `password_hash` column of + `guacamole_user` prior to the password being changed. + + In most cases, this will be a salted hash, though it is possible to force + the use of unsalted hashes when making changes to the database manually or + through an external system. + +`password_salt` +: The salt value specified within the `password_salt` column of + `guacamole_user` prior to the password being changed. + + This will always be set for users whose passwords are set through + Guacamole, but it is possible to use unsalted password hashes when + inserted manually or through an external system, in which case this may be + `NULL`. + +`password_date` +: The date (and time) that the password was set. The time that the password + ceased being used is recorded either by the `password_date` of the next + related entry in `guacamole_user_password_history` or `password_date` of + `guacamole_user` (if there is no such history entry). + +(jdbc-auth-schema-login-history)= + +#### Login history + +When a user logs in or out, a corresponding entry in the +`guacamole_user_history` table is created or updated respectively. +Each entry is associated with the user that logged in and the time their +session began. If the user has logged out, the time their session ended +is also stored. + +It is very unlikely that a user will need to update this table, but +knowing the structure is potentially useful if you wish to generate a +report of Guacamole usage. The `guacamole_user_history` table has the +following columns: + +`history_id` +: The unique integer associated with each history record. This value is + generated automatically when a new entry is inserted into the + `guacamole_user_history` table. + +`user_id` +: The value of the `user_id` from the entry in `guacamole_user` associated + with the user that logged in. If the user no longer exists, this will be + `NULL`. + +`username` +: The username associated with the user at the time that they logged in. + This username value is not guaranteed to uniquely identify a user, as the + original user may be subsequently renamed or deleted. + +`remote_host` +: The hostname or IP address of the machine that the user logged in from, if + known. If unknown, this will be `NULL`. + +`start_date` +: The time at which the user logged in. Despite its name, this column also + stores time information in addition to the date. + +`end_date` +: The time at which the user logged out. If the user is still active, the + value in this column will be `NULL`. Despite its name, this column also + stores time information in addition to the date. + +(jdbc-auth-schema-groups)= + +### User groups + +Similar to [users](jdbc-auth-schema-users), every user group has a +corresponding entry in the `guacamole_user_group` and +[`guacamole_entity`](jdbc-auth-schema-entities) tables. Each user group has a +corresponding unique name specified via `guacamole_entity`. + +If deleting a user group, the [corresponding entity](jdbc-auth-schema-entities) +should also be deleted. As any user group which points to the entity will be +deleted automatically when the entity is deleted through cascading deletion, +*it is advisable to use the entity as the basis for any delete operation*. + +The `guacamole_user_group` table contains the following columns: + +`user_group_id` +: The unique integer associated with each user group. This value is + generated automatically when a new entry is inserted into the + `guacamole_user_group` table. + +`entity_id` +: The value of the `entity_id` column of the `guacamole_entity` entry + representing this user group. + +`disabled` +: Whether membership within this group should be taken into account when + determining the permissions granted to a particular user. If this column + is set to `TRUE` or `1`, membership in this group will have no effect on + user permissions, whether those permissions are granted to this group + directly or indirectly through the groups that this group is a member of. + By default, user groups are not disabled, and permissions granted to a + user through the group will be taken into account. + +Membership within a user group is dictated through entries in the +`guacamole_user_group_member` table. As both users and user groups may be +members of groups, each entry associates the containing group with the entity +of the member. + +The `guacamole_user_group_member` table contains the following columns: + +`user_group_id` +: The `user_group_id` value of the user group having the specified member. + +`member_entity_id` +: The `entity_id` value of the user or user group that is a member of the + specified group. + +(jdbc-auth-schema-connections)= + +### Connections and parameters + +Each connection has an entry in the `guacamole_connection` table, with a +one-to-many relationship to parameters, stored as name/value pairs in the +`guacamole_connection_parameter` table. + +The `guacamole_connection` table is simply a pairing of a unique and +descriptive name with the protocol to be used for the connection. It contains +the following columns: + +`connection_id` +: The unique integer associated with each connection. This value is + generated automatically when a new entry is inserted into the + `guacamole_connection` table. + +`connection_name` +: The unique name associated with each connection. This value must be + specified manually, and must be different from any existing connection + name in the same connection group. References to connections in other + tables use the value from `connection_id`, not `connection_name`. + +`protocol` +: The protocol to use with this connection. This is the name of the protocol + that should be sent to guacd when connecting, for example "`vnc`" or + "`rdp`". + +`parent_id` +: The unique integer associated with the connection group containing this + connection, or `NULL` if this connection is within the root group. + +`max_connections` +: The maximum number of concurrent connections to allow to this connection + at any one time *regardless of user*. `NULL` will use the default value + specified in `guacamole.properties` and a value of `0` denotes unlimited. + +`max_connections_per_user` +: The maximum number of concurrent connections to allow to this connection + at any one time *from a single user*. `NULL` will use the default value + specified in `guacamole.properties` and a value of `0` denotes unlimited. + +`proxy_hostname` +: The hostname or IP address of the Guacamole proxy daemon (guacd) which + should be used for this connection. If `NULL`, the value defined with the + `guacd-hostname` property in `guacamole.properties` will be used. + +`proxy_port` +: The TCP port number of the Guacamole proxy daemon (guacd) which should be + used for this connection. If `NULL`, the value defined with the + `guacd-port` property in `guacamole.properties` will be used. + +`proxy_encryption_method` +: The encryption method which should be used when communicating with the + Guacamole proxy daemon (guacd) for this connection. This can be either + `NONE`, for no encryption, or `SSL`, for SSL/TLS. If `NULL`, the + encryption method will be dictated by the `guacd-ssl` property in + `guacamole.properties`. + +`connection_weight` +: The weight for a connection, used for applying weighted load balancing + algorithms when connections are part of a `BALANCING` group. This is an + integer value, where values `1` or greater will weight the connection + relative to other connections in that group, and values below `1` cause + the connection to be disabled in the group. If `NULL`, the connection will + be assigned a default weight of `1`. + +`failover_only` +: Whether this connection should be used for failover situations only, also + known as a "hot spare". If this column is set to `TRUE` or `1`, this + connection will be used only when another connection within the same + `BALANCING` connection group has failed due to an error within the remote + desktop. + + *Connection groups will always transparently switch to the next available + connection in the event of remote desktop failure, regardless of the value + of this column.* This column simply dictates whether a particular + connection should be *reserved* for such situations, and left unused + otherwise. + + This column only has an effect on connections within `BALANCING` groups. + +As there are potentially multiple parameters per connection, where the names of +each parameter are completely arbitrary and determined only by the protocol in +use, every parameter for a given connection has an entry in table +`guacamole_connection_parameter` table associated with its corresponding +connection. This table contains the following columns: + +`connection_id` +: The `connection_id` value from the connection this parameter is for. + +`parameter_name` +: The name of the parameter to set. This is the name listed in the + documentation for the protocol specified in the associated connection. + +`parameter_value` +: The value to assign to the parameter named. While this value is an + arbitrary string, it must conform to the requirements of the protocol as + documented for the connection to be successful. + +Adding a connection and corresponding parameters is relatively easy compared to +adding a user as there is no salt to generate nor password to hash: + +```mysql +-- Create connection +INSERT INTO guacamole_connection (connection_name, protocol) VALUES ('test', 'vnc'); + +-- Determine the connection_id +SELECT * FROM guacamole_connection WHERE connection_name = 'test' AND parent_id IS NULL; + +-- Add parameters to the new connection +INSERT INTO guacamole_connection_parameter VALUES (1, 'hostname', 'localhost'); +INSERT INTO guacamole_connection_parameter VALUES (1, 'port', '5901'); +``` + +(jdbc-auth-schema-connection-history)= + +#### Usage history + +When a connection is initiated or terminated, a corresponding entry in the +`guacamole_connection_history` table is created or updated respectively. Each +entry is associated with the user using the connection, the connection itself, +the [sharing profile](jdbc-auth-schema-sharing-profiles) in use (if the +connection is being shared), and the time the connection started. If the +connection has ended, the end time is also stored. + +It is very unlikely that a user will need to update this table, but knowing the +structure is potentially useful if you wish to generate a report of Guacamole +usage. The `guacamole_connection_history` table has the following columns: + +`history_id` +: The unique integer associated with each history record. This value is + generated automatically when a new entry is inserted into the + `guacamole_connection_history` table. + +`user_id` +: The value of the `user_id` from the entry in `guacamole_user` associated + with the user using the connection. If the user no longer exists, this + will be `NULL`. + +`username` +: The username associated with the user at the time that they used the + connection. This username value is not guaranteed to uniquely identify a + user, as the original user may be subsequently renamed or deleted. + +`connection_id` +: The value of the `connection_id` from the entry in `guacamole_connection` + associated the connection being used. If the connection associated with + the history record no longer exists, this will be `NULL`. + +`connection_name` +: The name associated with the connection at the time that it was used. + +`sharing_profile_id` +: The value of the `sharing_profile_id` from the entry in + `guacamole_sharing_profile` associated the sharing profile being used to + access the connection. If the connection is not being shared (no sharing + profile is being used), or if the sharing profile associated with the + history record no longer exists, this will be `NULL`. + +`sharing_profile_name` +: The name associated with the sharing profile being used to access the + connection at the time this history entry was recorded. If the connection + is not being shared, this will be `NULL`. + +`start_date` +: The time at which the connection was started by the user specified. + Despite its name, this column also stores time information in addition to + the date. + +`end_date` +: The time at which the connection ended. If the connection is still active, + the value in this column will be `NULL`. Despite its name, this column + also stores time information in addition to the date. + +(jdbc-auth-schema-sharing-profiles)= + +### Sharing profiles and parameters + +Each sharing profile has an entry in the `guacamole_sharing_profile` table, +with a one-to-many relationship to parameters, stored as name/value pairs in +the `guacamole_sharing_profile_parameter` table. + +The `guacamole_sharing_profile` table is simply a pairing of a unique and +descriptive name with the connection that can be shared using the sharing +profile, also known as the "primary connection". It contains the following +columns: + +`sharing_profile_id` +: The unique integer associated with each sharing profile. This value is + generated automatically when a new entry is inserted into the + `guacamole_sharing_profile` table. + +`sharing_profile_name` +: The unique name associated with each sharing profile. This value must be + specified manually, and must be different from any existing sharing + profile name associated with the same primary connection. References to + sharing profiles in other tables use the value from `sharing_profile_id`, + not `sharing_profile_name`. + +`primary_connection_id` +: The unique integer associated with the primary connection. The "primary + connection" is the connection which can be shared using this sharing + profile. + +As there are potentially multiple parameters per sharing profile, where the +names of each parameter are completely arbitrary and determined only by the +protocol associated with the primary connection, every parameter for a given +sharing profile has an entry in the `guacamole_sharing_profile_parameter` table +associated with its corresponding sharing profile. This table contains the +following columns: + +`sharing_profile_id` +: The `sharing_profile_id` value from the entry in the + `guacamole_sharing_profile` table for the sharing profile this parameter + applies to. + +`parameter_name` +: The name of the parameter to set. This is the name listed in the + documentation for the protocol of the primary connection of the associated + sharing profile. + +`parameter_value` +: The value to assign to the parameter named. While this value is an + arbitrary string, it must conform to the requirements of the protocol as + documented. + +(jdbc-auth-schema-connection-groups)= + +### Connection groups + +Each connection group has an entry in the `guacamole_connection_group` table, +with a one-to-many relationship to other groups and connections. + +The `guacamole_connection_group` table is simply a pairing of a unique and +descriptive name with a group type, which can be either `ORGANIZATIONAL` or +`BALANCING`. It contains the following columns: + +`connection_group_id` +: The unique integer associated with each connection group. This value is + generated automatically when a new entry is inserted into the + `guacamole_connection_group` table. + +`connection_group_name` +: The unique name associated with each connection group. This value must be + specified manually, and must be different from any existing connection + group name in the same connection group. References to connections in + other tables use the value from `connection_group_id`, not + `connection_group_name`. + +`type` +: The type of this connection group. This can be either `ORGANIZATIONAL` or + `BALANCING`. + +`parent_id` +: The unique integer associated with the connection group containing this + connection group, or `NULL` if this connection group is within the root + group. + +`max_connections` +: The maximum number of concurrent connections to allow to this connection + group at any one time *regardless of user*. `NULL` will use the default + value specified in `guacamole.properties` and a value of `0` denotes + unlimited. This only has an effect on `BALANCING` groups. + +`max_connections_per_user` +: The maximum number of concurrent connections to allow to this connection + group at any one time *from a single user*. `NULL` will use the default + value specified in `guacamole.properties` and a value of `0` denotes + unlimited. This only has an effect on `BALANCING` groups. + +`enable_session_affinity` +: Whether session affinity should apply to this connection group. If this + column is set to `TRUE` or `1`, users will be consistently routed to the + same underlying connection until they log out. The normal balancing + behavior will only apply for each user's first connection attempt during + any one Guacamole session. By default, session affinity is not enabled, + and connections will always be balanced across the entire connection + group. This only has an effect on `BALANCING` groups. + +Adding a connection group is even simpler than adding a new connection as there +are no associated parameters stored in a separate table: + +```mysql +-- Create connection group +INSERT INTO guacamole_connection_group (connection_group_name, type) + VALUES ('test', 'ORGANIZATIONAL'); +``` + +(jdbc-auth-schema-permissions)= + +### Permissions + +There are several permissions tables in the schema which correspond to the +types of permissions in Guacamole's authentication model: system permissions, +which control operations that affect the system as a whole, and permissions +which control operations that affect specific objects within the system, such +as users, connections, or groups. + +(jdbc-auth-schema-system-permissions)= + +#### System permissions + +System permissions are defined by entries in the `guacamole_system_permission` +table. Each entry grants permission for a specific user or user group to +perform a specific system operation. + +The `guacamole_system_permission` table contains the following columns: + +`entity_id` +: The value of the `entity_id` column of the entry associated with the user + or user group owning this permission. + +`permission` +: The permission being granted. This column can have one of six possible + values: `ADMINISTER`, which grants the ability to administer the entire + system (essentially a wildcard permission), `CREATE_CONNECTION`, which + grants the ability to create connections, `CREATE_CONNECTION_GROUP`, which + grants the ability to create connections groups, `CREATE_SHARING_PROFILE`, + which grants the ability to create sharing profiles, `CREATE_USER`, which + grants the ability to create users, or `CREATE_USER_GROUP`, which grants + the ability to create user groups. + +(jdbc-auth-schema-user-permissions)= + +#### User permissions + +User permissions are defined by entries in the `guacamole_user_permission` +table. Each entry grants permission for a specific user or user group to +perform a specific operation on an existing user. + +The `guacamole_user_permission` table contains the following columns: + +`entity_id` +: The value of the `entity_id` column of the entry associated with the user + or user group owning this permission. + +`affected_user_id` +: The value of the `user_id` column of the entry associated with the user + *affected* by this permission. This is the user that would be the object + of the operation represented by this permission. + +`permission` +: The permission being granted. This column can have one of four possible + values: `ADMINISTER`, which grants the ability to add or remove + permissions which affect the user, `READ`, which grants the ability to + read data associated with the user, `UPDATE`, which grants the ability to + update data associated with the user, or `DELETE`, which grants the + ability to delete the user. + +(jdbc-auth-schema-group-permissions)= + +#### User group permissions + +User group permissions are defined by entries in the +`guacamole_user_group_permission` table. Each entry grants permission for a +specific user or user group to perform a specific operation on an existing user +group. + +The `guacamole_user_group_permission` table contains the following columns: + +`entity_id` +: The value of the `entity_id` column of the entry associated with the user + or user group owning this permission. + +`affected_user_group_id` +: The value of the `user_group_id` column of the entry associated with the + user group *affected* by this permission. This is the user group that + would be the object of the operation represented by this permission. + +`permission` +: The permission being granted. This column can have one of four possible + values: `ADMINISTER`, which grants the ability to add or remove + permissions which affect the user group, `READ`, which grants the ability + to read data associated with the user group, `UPDATE`, which grants the + ability to update data associated with the user group, or `DELETE`, which + grants the ability to delete the user group. + +(jdbc-auth-schema-connection-permissions)= + +#### Connection permissions + +Connection permissions are defined by entries in the +`guacamole_connection_permission` table. Each entry grants permission for a +specific user or user group to perform a specific operation on an existing +connection. + +The `guacamole_connection_permission` table contains the following columns: + +`entity_id` +: The value of the `entity_id` column of the entry associated with the user + or user group owning this permission. + +`connection_id` +: The value of the `connection_id` column of the entry associated with the + connection affected by this permission. This is the connection that would + be the object of the operation represented by this permission. + +`permission` +: The permission being granted. This column can have one of four possible + values: `ADMINISTER`, which grants the ability to add or remove + permissions which affect the connection, `READ`, which grants the ability + to read data associated with the connection (a prerequisite for + connecting), `UPDATE`, which grants the ability to update data associated + with the connection, or `DELETE`, which grants the ability to delete the + connection. + +(jdbc-auth-schema-sharing-profile-permissions)= + +#### Sharing profile permissions + +Sharing profile permissions are defined by entries in the +`guacamole_sharing_profile_permission` table. Each entry grants permission for +a specific user or user group to perform a specific operation on an existing +sharing profile. + +The `guacamole_sharing_profile_permission` table contains the following +columns: + +`entity_id` +: The value of the `entity_id` column of the entry associated with the user + or user group owning this permission. + +`sharing_profile_id` +: The value of the `sharing_profile_id` column of the entry associated with + the sharing profile affected by this permission. This is the sharing + profile that would be the object of the operation represented by this + permission. + +`permission` +: The permission being granted. This column can have one of four possible + values: `ADMINISTER`, which grants the ability to add or remove + permissions which affect the sharing profile, `READ`, which grants the + ability to read data associated with the sharing profile (a prerequisite + for using the sharing profile to share an active connection), `UPDATE`, + which grants the ability to update data associated with the sharing + profile, or `DELETE`, which grants the ability to delete the sharing + profile. + +(jdbc-auth-schema-connection-group-permissions)= + +#### Connection group permissions + +Connection group permissions are defined by entries in the +`guacamole_connection_group_permission` table. Each entry grants permission for +a specific user or user group to perform a specific operation on an existing +connection group. + +The `guacamole_connection_group_permission` table contains the following +columns: + +`entity_id` +: The value of the `entity_id` column of the entry associated with the user + or user group owning this permission. + +`connection_group_id` +: The value of the `connection_group_id` column of the entry associated with + the connection group affected by this permission. This is the connection + group that would be the object of the operation represented by this + permission. + +`permission` +: The permission being granted. This column can have one of four possible + values: `ADMINISTER`, which grants the ability to add or remove + permissions which affect the connection group, `READ`, which grants the + ability to read data associated with the connection group, `UPDATE`, which + grants the ability to update data associated with the connection group, or + `DELETE`, which grants the ability to delete the connection group (and + implicitly its contents). + diff --git a/doc/1.5.5/gug/_sources/json-auth.md.txt b/doc/1.5.5/gug/_sources/json-auth.md.txt new file mode 100644 index 000000000..282e4ca77 --- /dev/null +++ b/doc/1.5.5/gug/_sources/json-auth.md.txt @@ -0,0 +1,319 @@ +Encrypted JSON authentication +============================= + +Guacamole supports delegating authentication to an arbitrary external service, +relying on receipt of JSON data which has been [signed using HMAC/SHA-256 and +encrypted with 128-bit AES in CBC mode](#generating-encrypted-json). This JSON +contains [all information describing the user being authenticated](#json-format), +as well as any connections they have access to, and is accepted only if the +configured secret key was used to sign and encrypt the data. + +(json-downloading)= + +Downloading the JSON authentication extension +--------------------------------------------- + +The JSON authentication extension is available separately from the main +`guacamole.war`. The link for this and all other officially-supported and +compatible extensions for a particular version of Guacamole are provided on the +release notes for that version. You can find the release notes for current +versions of Guacamole here: . + +The JSON authentication extension is packaged as a `.tar.gz` file containing +only the extension itself, `guacamole-auth-json-1.5.5.jar`, which must +ultimately be placed in `GUACAMOLE_HOME/extensions`. + +(installing-json-auth)= + +Installing JSON authentication +------------------------------ + +Guacamole extensions are self-contained `.jar` files which are located within +the `GUACAMOLE_HOME/extensions` directory. *If you are unsure where +`GUACAMOLE_HOME` is located on your system, please consult +[](configuring-guacamole) before proceeding.* + +To install the JSON authentication extension, you must: + +1. Create the `GUACAMOLE_HOME/extensions` directory, if it does not already + exist. + +2. Copy `guacamole-auth-json-1.5.5.jar` within `GUACAMOLE_HOME/extensions`. + +3. Configure Guacamole to use JSON authentication, as described below. + +(json-config)= + +### Configuring Guacamole to accept encrypted JSON + +To verify and decrypt the received signed and encrypted JSON, a secret key must +be generated which will be shared by both the Guacamole server and systems that +will generate the JSON data. As guacamole-auth-json uses 128-bit AES, this key +must be 128 bits. + +An easy way of generating such a key is to echo a passphrase through the +"md5sum" utility. This is the technique OpenSSL itself uses to generate 128-bit +keys from passphrases. For example: + + $ echo -n "ThisIsATest" | md5sum + 4c0b569e4c96df157eee1b65dd0e4d41 - + +The generated key must then be saved within [`guacamole.properties`](initial-setup) +as the full 32-digit hex value using the `json-secret-key` property: + + json-secret-key: 4c0b569e4c96df157eee1b65dd0e4d41 + +(completing-json-install)= + +### Completing the installation + +Guacamole will only reread `guacamole.properties` and load newly-installed +extensions during startup, so your servlet container will need to be restarted +before JSON authentication can be used. *Doing this will disconnect all active +users, so be sure that it is safe to do so prior to attempting installation.* +When ready, restart your servlet container and give the new authentication a +try. + +(json-format)= + +JSON format +----------- + +The general format of the JSON (prior to being encrypted, signed, and sent to +Guacamole), is as follows: + + { + + "username" : "arbitraryUsername", + "expires" : TIMESTAMP, + "connections" : { + + "Connection Name" : { + "protocol" : "PROTOCOL", + "parameters" : { + "name1" : "value1", + "name2" : "value2", + ... + } + }, + + ... + + } + + } + +where `TIMESTAMP` is a standard UNIX epoch timestamp with millisecond +resolution (the number of milliseconds since midnight of January 1, 1970 UTC) +and `PROTOCOL` is the internal name of any of Guacamole's supported protocols, +such as `vnc`, `rdp`, or `ssh`. + +The JSON will cease to be accepted as valid after the server time passes the +timestamp. If no timestamp is specified, the data will not expire. + +The top-level JSON object which must be submitted to Guacamole has the +following properties: + +:::{list-table} +:widths: auto +:header-rows: 1 + +* - Property name + - Type + - Description + +* - `username` + - `string` + - The unique username of the user authenticated by the JSON. If the user is + anonymous, this should be the empty string (`""`). + +* - `expires` + - `number` + - The absolute time after which the JSON should no longer be accepted, even + if the signature is valid, as a standard UNIX epoch timestamp with + millisecond resolution (the number of milliseconds since midnight of + January 1, 1970 UTC). + +* - `connections` + - `object` + - The set of connections which should be exposed to the user by their + corresponding, unique names. If no connections will be exposed to the user, + this can simply be an empty object (`{}`). +::: + +Each normal connection defined within each submitted JSON object has the +following properties: + +:::{list-table} +:widths: auto +:header-rows: 1 + +* - Property name + - Type + - Description + +* - `id` + - `string` + - An optional opaque value which uniquely identifies this connection across + all other connections which may be active at any given time. This property + is only required if you wish to allow the connection to be shared or + shadowed. + +* - `protocol` + - `string` + - The internal name of a supported protocol, such as `vnc`, `rdp`, or `ssh`. + +* - `parameters` + - `object` + - An object representing the connection parameter name/value pairs to apply + to the connection, as documented in [](connection-configuration). + +::: + +Connections which share or shadow other connections use a `join` property +instead of a `protocol` property, where `join` contains the value of the `id` +property of the connection being joined: + +:::{list-table} +:widths: auto +:header-rows: 1 + +* - Property name + - Type + - Description + +* - `id` + - `string` + - An optional opaque value which uniquely identifies this connection across + all other connections which may be active at any given time. This property + is only required if you wish to allow the connection to be shared or + shadowed. (Yes, a connection which shadows another connection may itself be + shadowed.) + +* - `join` + - `string` + - The opaque ID given within the `id` property of the connection being joined + (shared / shadowed). + +* - `parameters` + - `object` + - An object representing the connection parameter name/value pairs to apply + to the connection, as documented in [](connection-configuration). + + Most of the connection configuration is inherited from the connection being + joined. In general, the only property relevant to joining connections is + `read-only`. + +::: + +If a connection is configured to join another connection, that connection will +only be usable if the connection being joined is currently active. If two +connections are established having the same `id` value, only the last +connection will be joinable using the given `id`. + +(generating-encrypted-json)= + +Generating encrypted JSON +------------------------- + +To authenticate a user with the above JSON format, the JSON must be both signed +and encrypted using the same 128-bit secret key specified with the +`json-secret-key` within `guacamole.properties`: + +1. Generate JSON in the format described above +2. Sign the JSON using the secret key (the same 128-bit key stored within + `guacamole.properties` with the `json-secret-key` property) with + **HMAC/SHA-256**. Prepend the binary result of the signing process to the + plaintext JSON that was signed. +3. Encrypt the result of (2) above using **AES in CBC mode**, with the initial + vector (IV) set to all zero bytes. +4. Encode the encrypted result using base64. +5. POST the encrypted result to the `/api/tokens` REST endpoint as the value of + an HTTP parameter named `data` (or include it in the URL of any Guacamole + page as a query parameter named `data`). + + For example, if Guacamole is running on localhost at `/guacamole`, and + `BASE64_RESULT` is the result of the above process, the equivalent run of + the "curl" utility would be: + + $ curl --data-urlencode "data=BASE64_RESULT" http://localhost:8080/guacamole/api/tokens + + **NOTE:** Be sure to URL-encode the base64-encoded result prior to POSTing + it to `/api/tokens` or including it in the URL. Base64 can contain both "+" + and "=" characters, which have special meaning within URLs. + +If the data is invalid in any way, if the signature does not match, if +decryption or signature verification fails, or if the submitted data has +expired, the REST service will return an invalid credentials error and fail +without user-visible explanation. Details describing the error that occurred +will be in the Tomcat logs, however. + +Reference implementation +------------------------ + +The source includes a shell script, [`doc/encrypt-json.sh`](https://raw.githubusercontent.com/apache/guacamole-client/master/extensions/guacamole-auth-json/doc/encrypt-json.sh), +which uses the OpenSSL command-line utility to encrypt and sign JSON in the +manner that guacamole-auth-json requires. It is thoroughly commented and should +work well as a reference implementation, for testing, and as a point of +comparison for development. The script is run as: + + $ ./encrypt-json.sh HEX_ENCRYPTION_KEY file-to-sign-and-encrypt.json + +For example, if you have a file called `auth.json` containing the following: + + { + "username" : "test", + "expires" : "1446323765000", + "connections" : { + "My Connection" : { + "protocol" : "rdp", + "parameters" : { + "hostname" : "10.10.209.63", + "port" : "3389", + "ignore-cert": "true", + "recording-path": "/recordings", + "recording-name": "My-Connection-${GUAC_USERNAME}-${GUAC_DATE}-${GUAC_TIME}" + } + }, + "My OTHER Connection" : { + "protocol" : "rdp", + "parameters" : { + "hostname" : "10.10.209.64", + "port" : "3389", + "ignore-cert": "true", + "recording-path": "/recordings", + "recording-name": "My-OTHER-Connection-${GUAC_USERNAME}-${GUAC_DATE}-${GUAC_TIME}" + } + } + } + } + +and you run: + + $ ./encrypt-json.sh 4C0B569E4C96DF157EEE1B65DD0E4D41 auth.json + +You will receive the following output: + + A2Pf5Kpmm97I2DT1PifIrfU6q3yzoGcIbNXEd60WNangT8DAVjAl6luaqwhBJnCK + uqcf9ZZlRo3uDxTHvUM3eq1YvdghL0GbosOn8Mn38j2ydOMk+Cd15a8ggb4/ddt/ + yIBK4DxrN7MNbouZ091KYtXC6m20E6sGzLy676BlMSg1cmsENRIihOynsSLSCvo0 + diif6H7T+ZuIqF7B5SW+adGfMaHlfknlIvSpLGHhrIP4aMYE/ZU2vYNg8ez27sCS + wDBWu5lERtfCYFyU4ysjRU5Hyov+yKa+O7jcRYpw3N+fHbCg7/dxVNW07qNOKssv + pzUciGvDPUCPpa02WmPJNEBowwQireO1952/MNAI77cW2UepbljD/bwOiZl2THJz + LrENo7K5acimBa+EjWEesgn7lx/WTCF3zxR6TH1CWrQM8Et1aUK1Nf8K11xEQbTy + klyaNtCmTfyahRZ/fUPxDNrdJVpPOSELkf7RJO5tOdK/FFIFIbze3ZUyXgRq+pHY + owpgOmudDBTBlxhXiONdutRI/RZbFM/7GBMdmI8AR/401OCV3nsI4jLhukjMXH3V + f3pQg+xKMhi/QExHhDk8VTNYk7GurK4vgehn7HQ0oSGh8pGcmxB6W43cz+hyn6VQ + On6i90cSnIhRO8SysZt332LwJCDm7I+lBLaI8NVHU6bnAY1Axx5oH3YTKc4qzHls + HEAFYLkD6aHMvHkF3b798CMravjxiJV3m7hsXDbaFN6AFhn8GIkMRRrjuevfZ+q9 + enWN14s24vt5OVg69DljzALobUNKUXFx69SR8EpSBvUcKq8s/OgbDpFvKbwsDY57 + HGT4T0CuRIA0TGUI075uerKBNApVhuBA1BmWJIrI4JXw5MuX6pdBe+MYccO3vfo+ + /frazj8rHdkDa/IbueMbvq+1ozV2+UuxrbaTrV2i4jSRgd74U0QzOh9e8Q0i7vOi + l3hnIfOfg+v1oULmZmJSeiAYWxeGvPptp+n7rNFqHGM= + +The resulting base64 data above, if submitted using the `data` parameter to +Guacamole, will authenticate a user and grant them access to the connections +described in the JSON (at least until the expires timestamp is reached, at +which point the JSON will no longer be accepted). + + diff --git a/doc/1.5.5/gug/_sources/ldap-auth.md.txt b/doc/1.5.5/gug/_sources/ldap-auth.md.txt new file mode 100644 index 000000000..d3b33333d --- /dev/null +++ b/doc/1.5.5/gug/_sources/ldap-auth.md.txt @@ -0,0 +1,671 @@ +LDAP authentication +=================== + +Guacamole supports LDAP authentication via an extension available from the main +project website. This extension allows users and connections to be stored +directly within an LDAP directory. If you have a centralized authentication +system that uses LDAP, Guacamole's LDAP support can be a good way to allow your +users to use their existing usernames and passwords to log into Guacamole. + +To use the LDAP authentication extension, you will need: + +1. An LDAP directory as storage for all authentication data, such as OpenLDAP. + +2. The ability to modify the schema of your LDAP directory. + +The instructions here assume you already have an LDAP directory installed and +working, and do not cover the initial setup of such a directory. + +:::{important} +This chapter involves modifying the contents of `GUACAMOLE_HOME` - the +Guacamole configuration directory. If you are unsure where `GUACAMOLE_HOME` is +located on your system, please consult [](configuring-guacamole) before +proceeding. +::: + +(ldap-architecture)= + +How Guacamole uses LDAP +----------------------- + +If the LDAP extension is installed, Guacamole will authenticate users against +your LDAP server by attempting a bind as that user. The given username and +password will be submitted to the LDAP server during the bind attempt. + +If the bind attempt is successful, the set of available Guacamole connections +is queried from the LDAP directory by executing an LDAP query as the bound +user. Each Guacamole connection is represented within the directory as a +special type of group: `guacConfigGroup`. Attributes associated with the group +define the protocol and parameters of the connection, and users are allowed +access to the connection only if they are associated with that group. + +This architecture has a number of benefits: + +1. Your users can use their existing usernames and passwords to log into + Guacamole. + +2. You can manage Guacamole connections using the same tool that you already + use to manage your LDAP directory, such as [Apache Directory + Studio](https://directory.apache.org/studio/). + +3. Existing security restrictions can limit visibility/accessibility of + Guacamole connections. + +4. Access to connections can easily be granted and revoked, as each connection + is represented by a group. + +:::{important} +Though Guacamole connections can be stored within the LDAP directory, this is +not required. Connection data can alternatively be stored within a database +like MySQL or PostgreSQL as long as the LDAP username matches the username of +the database user. Configuring Guacamole to use a database for authentication +or connection storage is covered in [](jdbc-auth) and later in this chapter in +[](ldap-and-database). +::: + +(ldap-downloading)= + +Downloading the LDAP extension +------------------------------ + +The LDAP authentication extension is available separately from the main +`guacamole.war`. The link for this and all other officially-supported and +compatible extensions for a particular version of Guacamole are provided on the +release notes for that version. You can find the release notes for current +versions of Guacamole here: . + +The LDAP authentication extension is packaged as a `.tar.gz` file containing: + +`guacamole-auth-ldap-1.5.5.jar` +: The Guacamole LDAP support extension itself, which must be placed in + `GUACAMOLE_HOME/extensions`. + +`schema/` +: LDAP schema files. An `.ldif` file compatible with OpenLDAP is provided, as + well as a `.schema` file compliant with RFC-2252. The `.schema` file can be + transformed into the `.ldif` file automatically. + +(ldap-schema-changes)= + +Preparing your LDAP directory (optional) +---------------------------------------- + +Although your LDAP directory already provides a means of storing and +authenticating users, Guacamole also needs storage of connection configuration +data, such as hostnames and ports, and a means of associating users with +connections that they should have access to. You can do this either through +modifying the LDAP directory schema, or through using a database like MySQL or +PostgreSQL. If you do not wish to use the LDAP directory for connection +storage, skip ahead to [](ldap-and-database). + +If you wish to store connection data directly within the LDAP directory, the +required modifications to the LDAP schema are made through applying one of the +provided schema files. These schema files define an additional object class, +`guacConfigGroup`, which contains all configuration information for a +particular connection, and can be associated with arbitrarily-many users and +groups. Each connection defined by a `guacConfigGroup` will be accessible only +by users who are members of that group (specified with the member attribute), +or who are members of associated groups (specified with the `seeAlso` +attribute). + +:::{important} +The instructions given for applying the Guacamole LDAP schema changes are +specific to OpenLDAP, but other LDAP implementations, including Active +Directory, will have their own methods for updating the schema. + +If you are not using OpenLDAP, a standards-compliant schema file is provided +that can be used to update the schema of any LDAP directory supporting +RFC-2252. Please consult the documentation of your LDAP directory to determine +how such schema changes can be applied. +::: + +The schema files are located within the `schema/` directory of the archive +containing the LDAP extension. You will only need one of these files: + +`guacConfigGroup.schema` +: A standards-compliant file describing the schema. This file can be used with + any LDAP directory compliant with RFC-2252. + +`guacConfigGroup.ldif` +: An LDIF file compatible with OpenLDAP. This file was automatically built from + the provided `.schema` file for convenience. + +This chapter will cover applying `guacConfigGroup.ldif` to an OpenLDAP server. +If you are not using OpenLDAP, your LDAP server should provide documentation +for modifying its schema. If this is the case, please consult the documentation +of your LDAP server before proceeding. + +### Applying the schema changes to OpenLDAP + +Schema changes to OpenLDAP are applied using the {command}`ldapadd` utility +with the provided `guacConfigGroup.ldif` file: + +```console +# ldapadd -Q -Y EXTERNAL -H ldapi:/// -f schema/guacConfigGroup.ldif +adding new entry "cn=guacConfigGroup,cn=schema,cn=config" + +# +``` + +If the `guacConfigGroup` object was added successfully, you should see output +as above. You can confirm the presence of the new object class using +{command}`ldapsearch`: + +```console +# ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn=schema,cn=config dn +dn: cn=schema,cn=config + +dn: cn={0}core,cn=schema,cn=config + +dn: cn={1}cosine,cn=schema,cn=config + +dn: cn={2}nis,cn=schema,cn=config + +dn: cn={3}inetorgperson,cn=schema,cn=config + +dn: cn={4}guacConfigGroup,cn=schema,cn=config + +# +``` + +(ldap-and-database)= + +Associating LDAP with a database +-------------------------------- + +If you install both the LDAP authentication as well as support for a database +(following the instructions in [](jdbc-auth)), Guacamole will automatically +attempt to authenticate against both systems whenever a user attempts to log +in. In addition to any visible objects within the LDAP directory, that user +will have access to any data associated with their account in the database, as +well as any data associated with user groups that they belong to. LDAP user +accounts and groups will be considered equivalent to database users and groups +if their unique names are identical, as determined by the attributes given for +[the `ldap-username-attribute` and `ldap-group-name-attribute` +properties](guac-ldap-config). + +Data can be manually associated with LDAP user accounts or groups by creating +corresponding users or groups within the database which each have the same +names. As long as the names are identical, a successful login attempt against +LDAP will be trusted by the database authentication, and that user's associated +data will be visible. + +If an administrator account (such as the default `guacadmin` user provided with +the database authentication) has a corresponding user in the LDAP directory +with permission to read other LDAP users and groups, the Guacamole +administrative interface will include them in the lists presented to the +administrator, and will allow connections from the database to be associated +with those users or groups directly. + +(installing-ldap-auth)= + +Installing LDAP authentication +------------------------------ + +Guacamole extensions are self-contained `.jar` files which are located within +the `GUACAMOLE_HOME/extensions` directory. To install the LDAP authentication +extension, you must: + +1. Create the `GUACAMOLE_HOME/extensions` directory, if it does not already + exist. + +2. Copy `guacamole-auth-ldap-1.5.5.jar` within `GUACAMOLE_HOME/extensions`. + +3. Configure Guacamole to use LDAP authentication, as described below. + +:::{important} +You will need to restart Guacamole by restarting your servlet container in +order to complete the installation. Doing this will disconnect all active +users, so be sure that it is safe to do so prior to attempting installation. If +you do not configure the LDAP authentication properly, Guacamole will not start +up again until the configuration is fixed. +::: + +(guac-ldap-config)= + +### Configuring Guacamole for LDAP + +Additional properties may be added to `guacamole.properties` to describe how +your LDAP directory is organized and how Guacamole should connect (and bind) to +your LDAP server. Among these properties, only the ldap-user-base-dn property +is required: + +`ldap-hostname` +: The hostname of your LDAP server. If omitted, "localhost" will be used by + default. You will need to use a different value if your LDAP server is + located elsewhere. + +`ldap-port` +: The port your LDAP server listens on. If omitted, the standard LDAP or LDAPS + port will be used, depending on the encryption method specified with + `ldap-encryption-method` (if any). Unencrypted LDAP uses the standard port of + 389, while LDAPS uses port 636. Unless you manually configured your LDAP + server to do otherwise, your LDAP server probably listens on port 389. + +`ldap-encryption-method` +: The encryption mechanism that Guacamole should use when communicating with + your LDAP server. Legal values are "none" for unencrypted LDAP, "ssl" for + LDAP over SSL/TLS (commonly known as LDAPS), or "starttls" for STARTTLS. If + omitted, encryption will not be used. + + If you do use encryption when connecting to your LDAP server, you will need + to ensure that its certificate chain can be verified using the certificates + in Java's trust store, often referred to as `cacerts`. If this is not the + case, you will need to use Java's `keytool` utility to either add the + necessary certificates or to create a new trust store containing those + certificates. + + If you will be using your own trust store and not the default `cacerts`, you + will need to specify the full path to that trust store using the system + property `javax.net.ssl.trustStore`. Note that this is a system property and + *not* a Guacamole property; it must be specified when starting the JVM using + the `-D` option. Your servlet container will provide some means of specifying + startup options for the JVM. + +`ldap-max-search-results` +: The maximum number of search results that can be returned by a single LDAP + query. LDAP queries which exceed this maximum will fail. *This property is + optional.* If omitted, each LDAP query will be limited to a maximum of 1000 + results. + +`ldap-search-bind-dn` +: The DN (Distinguished Name) of the user to bind as when authenticating users + that are attempting to log in. If specified, Guacamole will query the LDAP + directory to determine the DN of each user that logs in. If omitted, each + user's DN will be derived directly using the base DN specified with + `ldap-user-base-dn`. + +`ldap-search-bind-password` +: The password to provide to the LDAP server when binding as + `ldap-search-bind-dn` to authenticate other users. This property is only used + if ldap-search-bind-dn is specified. If omitted, but `ldap-search-bind-dn` is + specified, Guacamole will attempt to bind with the LDAP server without a + password. + +`ldap-user-base-dn` +: The base of the DN for all Guacamole users. *This property is absolutely + required in all cases.* All Guacamole users must be descendents of this base + DN. + + If a search DN is provided (via `ldap-search-bind-dn`), then Guacamole users + need only be somewhere within the subtree of the specified user base DN. + + If a search DN *is not* provided, then all Guacamole users must be *direct + descendents* of this base DN, as the base DN will be appended to the username + to derive the user's DN. For example, if `ldap-user-base-dn` is + "`ou=people,dc=example,dc=net`", and `ldap-username-attribute` is "uid", then + a person attempting to login as "`user`" would be mapped to the following + full DN: "`uid=user,ou=people,dc=example,dc=net`". + +`ldap-username-attribute` +: The attribute or attributes which contain the username within all Guacamole + user objects in the LDAP directory. Usually, and by default, this will simply + be "uid". If your LDAP directory contains users whose usernames are dictated + by different attributes, multiple attributes can be specified here, separated + by commas, but beware: *doing so requires that a search DN be provided with + `ldap-search-bind-dn`*. + + If a search DN *is not* provided, then the single username attribute + specified here will be used together with the user base DN to directly derive + the full DN of each user. For example, if `ldap-user-base-dn` is + "`ou=people,dc=example,dc=net`", and `ldap-username-attribute` is "uid", then + a person attempting to login as "`user`" would be mapped to the following + full DN: "`uid=user,ou=people,dc=example,dc=net`". + +`ldap-member-attribute` +: The attribute which contains the members within all group objects in the LDAP + directory. Usually, and by default, this will simply be "member". If your + LDAP directory contains groups whose members are dictated by a different + attribute, it can be specified here. + +`ldap-member-attribute-type` +: Specify whether the attribute defined in `ldap-member-attribute` (Usually + "member") identifies a group member by DN or by usercode. Possible values: + "dn" (the default, if not specified) or "uid". + + Example: an LDAP server may present groups using the `groupOfNames` + scheme: + + ``` + dn: cn=group1,ou=Groups,dc=example,dc=net + objectClass: groupOfNames + cn: group1 + gidNumber: 12345 + member: user1,ou=People,dc=example,dc=net + member: user2,ou=People,dc=example,dc=net + ``` + + `ldap-member-attribute` is `member` and `ldap-member-attribute-type` is `dn`. + + Example: an LDAP server may present groups using the `posixGroup` + scheme: + + ``` + dn: cn=group1,ou=Groups,dc=example,dc=net + objectClass: posixGroup + cn: group1 + gidNumber: 12345 + memberUid: user1 + memberUid: user2 + ``` + + `ldap-member-attribute` is `memberUid` and `ldap-member-attribute-type` is + `uid` + +`ldap-user-attributes` +: The attribute or attributes to retrieve from the LDAP directory for the + currently logged-in user, separated by commas. If specified, the attributes + listed here are retrieved from each authenticated user and dynamically + applied to the parameters of that user's connections as [parameter + tokens](parameter-tokens) with the prefix "`LDAP_`". + + When a user authenticates with LDAP and accesses a particular Guacamole + connection, the values of these tokens will be the values of their + corresponding attributes at the time of authentication. If the attribute has + no value for the current user, then the corresponding token is not applied. + If the attribute has multiple values, then the first value of the attribute + is used. + + When converting an LDAP attribute name into a parameter token name, the name + of the attribute is transformed into uppercase with each word separated by + underscores, a naming convention referred to as "uppercase with underscores" + or "[screaming snake case](https://en.wikipedia.org/wiki/Naming_convention_(programming)#Multiple-word_identifiers)". + + For example: + + | LDAP Attribute | Parameter Token | + | ---------------------------------- | ---------------------------------------------- | + | `lowercase-with-dashes` | `${LDAP_LOWERCASE_WITH_DASHES}` | + | `CamelCase` | `${LDAP_CAMEL_CASE}` | + | `headlessCamelCase` | `${LDAP_HEADLESS_CAMEL_CASE}` | + | `lettersAndNumbers1234` | `${LDAP_LETTERS_AND_NUMBERS_1234}` | + | `aRANDOM_mixOf-3NAMINGConventions` | `${LDAP_A_RANDOM_MIX_OF_3_NAMING_CONVENTIONS}` | + + Usage of parameter tokens is discussed in more detail in + [](configuring-guacamole) in [](parameter-tokens). + +`ldap-user-search-filter` +: The search filter used to query the LDAP tree for users that can log into and + be granted privileges in Guacamole. *If this property is omitted the default of + `(objectClass=*)` will be used.* + +`ldap-config-base-dn` +: The base of the DN for all Guacamole configurations. *This property is + optional.* If omitted, the configurations of Guacamole connections will + simply not be queried from the LDAP directory. If specified, this base DN + will be used when querying the configurations accessible by a user once they + have successfully logged in. + + Each configuration is analogous to a connection. Within Guacamole's LDAP + support, each configuration functions as a group, having user members (via + the `member` attribute) and optionally group members (via the `seeAlso` + attribute), where each member of a particular configuration group will have + access to the connection defined by that configuration. + +`ldap-group-base-dn` +: The base of the DN for all user groups that may be used by other extensions + to define permissions or that may referenced within Guacamole configurations + using the standard seeAlso attribute. All groups which will be used to + control access to Guacamole configurations must be descendents of this base + DN. *If this property is omitted, the `seeAlso` attribute will have no effect + on Guacamole configurations.* + +`ldap-group-name-attribute` +: The attribute or attributes which define the unique name of user groups in + the LDAP directory. Usually, and by default, this will simply be "cn". If + your LDAP directory contains groups whose names are dictated by different + attributes, multiple attributes can be specified here, separated by commas. + +`ldap-group-search-filter` +: The search filter used to query the LDAP tree for groups that may be used by + other extensions to define permissions. *If this property is omitted the + default of `(objectClass=*)` will be used.* + +`ldap-dereference-aliases` +: Controls whether or not the LDAP connection follows (dereferences) aliases as + it searches the tree. Possible values for this property are "never" (the + default) so that aliases will never be followed, "searching" to dereference + during search operations after the base object is located, "finding" to + dereference in order to locate the search base, but not during the actual + search, and "always" to always dereference aliases. + +`ldap-follow-referrals` +: This option controls whether or not the LDAP module follow referrals when + processing search results from a LDAP search. Referrals can be pointers to + other parts of an LDAP tree, or to a different server/connection altogether. + This is a boolean parameter, with valid options of "true" or "false." The + default is false. When disabled, LDAP referrals will be ignored when + encountered by the Guacamole LDAP client and the client will move on to the + next result. When enabled, the LDAP client will follow the referral and + process results within the referral, subject to the maximum hops parameter + below. + +`ldap-max-referral-hops` +: This option controls the maximum number of referrals that will be processed + before the LDAP client refuses to follow any more referrals. The default is + 5. If the `ldap-follow-referrals` property is set to false (the default), + this option has no effect. If the `ldap-follow-referrals` option is set + to true, this will limit the depth of referrals followed to the number + specified. + +`ldap-operation-timeout` +: This option sets the timeout, in seconds, of any single LDAP operation. The + default is 30 seconds. When this timeout is reached LDAP operations will be + aborted. + +Again, even if the defaults are sufficient for the other properties, *you must +still specify the `ldap-user-base-dn` property*. An absolutely minimal +configuration for LDAP authentication will look like the following: + +``` +# LDAP properties +ldap-user-base-dn: ou=people,dc=example,dc=net +``` + +(guac-multi-ldap-config)= + +### Using multiple LDAP servers + +If you have several LDAP servers that Guacamole should authenticate against, it +is possible to provide the configuration details for multiple servers by +creating or editing a YAML file within `GUACAMOLE_HOME` called +`ldap-servers.yml`. This file consists of a single list of servers (a YAML +array of objects) and any number of corresponding configuration options (the +key/value pairs within each YAML object). The available options correspond +_exactly_ to the properties described above except that they lack an `ldap-` +prefix. + +For example, the following `guacamole.properties`: + +``` +ldap-hostname: dc1.example.net +ldap-user-base-dn: ou=Users,dc=example,dc=net +ldap-username-attribute: sAMAccountName +ldap-search-bind-dn: cn=Guacamole,ou=Service Users,dc=example,dc=net +ldap-search-bind-password: SomePassword! +``` + +is exactly equivalent to the following `ldap-servers.yml` + +``` +- hostname: dc1.example.net + user-base-dn: ou=Users,dc=example,dc=net + username-attribute: sAMAccountName + search-bind-dn: cn=Guacamole,ou=Service Users,dc=example,dc=net + search-bind-password: SomePassword! +``` + +The benefit of using `ldap-servers.yml` is that the format allows multiple +servers to be defined, relying on the properties within `guacamole.properties` +as defaults. For example, the following `ldap-servers.yml` defines two LDAP +servers: + +``` +- hostname: dc1.example.net + user-base-dn: ou=Users,dc=example,dc=net + username-attribute: sAMAccountName + search-bind-dn: cn=Guacamole,ou=Service Users,dc=example,dc=net + search-bind-password: SomePassword! + +- hostname: dc2.example.net + user-base-dn: ou=Users,dc=example,dc=net + username-attribute: sAMAccountName + search-bind-dn: cn=Guacamole,ou=Service Users,dc=example,dc=net + search-bind-password: SomePassword! +``` + +Leveraging the fact that values within `guacamole.properties` are used as the +default values for all LDAP servers in `ldap-servers.yml`, the above can be +abbreviated by moving the common options into `guacamole.properties`: + +``` +ldap-user-base-dn: ou=Users,dc=example,dc=net +ldap-username-attribute: sAMAccountName +ldap-search-bind-dn: cn=Guacamole,ou=Service Users,dc=example,dc=net +ldap-search-bind-password: SomePassword! +``` + +Leaving `ldap-servers.yml` containing, simply: + +``` +- hostname: dc1.example.net +- hostname: dc2.example.net +``` + +If multiple LDAP servers are listed within `ldap-servers.yml`, and a user +attempts to log into Guacamole, each defined LDAP server is tried, in order, +until one server successfully authenticates the user or until all servers fail. + +If not all LDAP servers are relevant to all users, and it is reasonable to +determine which user is relevant to which LDAP server by the format of their +username, patterns can be specified on a per-server basis to narrow which +servers apply to which login attempts. For example: + +``` +- hostname: dc1.example.net + match-usernames: COMPANYA\\(.*) + +- hostname: dc2.example.net + match-usernames: COMPANYB\\(.*) +``` + +The value for `match-usernames` can be any regular expression accepted by Java, +where the capturing group dictates the portion that should be considered the +user's username with respect to Guacamole. If multiple patterns should apply to +a particular LDAP server, this can be specified with a list of patterns for +`match-usernames`: + +``` +- hostname: dc1.example.net + match-usernames: + - COMPANYA\\(.*) + - (.*)@a\.example\.net + +- hostname: dc2.example.net + match-usernames: + - COMPANYB\\(.*) + - (.*)@b\.example\.net +``` + +### Completing the installation + +Guacamole will only reread `guacamole.properties` and load newly-installed +extensions during startup, so your servlet container will need to be restarted +before the LDAP authentication will take effect. Restart your servlet container +and give the new authentication a try. + +:::{important} +You only need to restart your servlet container. *You do not need to restart +guacd*. + +guacd is completely independent of the web application and does not deal with +`guacamole.properties` or the authentication system in any way. Since you are +already restarting the servlet container, restarting guacd as well technically +won't hurt anything, but doing so is completely pointless. +::: + +If Guacamole does not come back online after restarting your servlet container, +check the logs. Problems in the configuration of the LDAP extension will +prevent Guacamole from starting up, and any such errors will be recorded in the +logs of your servlet container. If properly configured, you will be able to log +in as any user within the defined ldap-user-base-dn. + +(ldap-auth-schema)= + +The LDAP schema +--------------- + +Guacamole's LDAP support allows users and connections to be managed purely +within an LDAP directory defined in `guacamole.properties`. This is +accomplished with a minimum of changes to the standard LDAP schema - all +Guacamole users are traditional LDAP users and share the same mechanism of +authentication. The only new type of object required is a representation for +Guacamole connections, `guacConfigGroup`, which was added to your server's +schema during the install process above. + +### Users + +All Guacamole users, as far as the LDAP support is concerned, are LDAP users +with standard LDAP credentials. When a user signs in to Guacamole, their +username and password will be used to bind to the LDAP server. If this bind +operation is successful, the available connections are queried from the +directory and the user is allowed in. + +### Connections and parameters + +Each connection is represented by an instance of the `guacConfigGroup` object +class, an extended version of the standard LDAP `groupOfNames`, which provides +a protocol and set of parameters. Only members of the `guacConfigGroup` will +have access to the corresponding connection. + +The `guacConfigGroup` object class provides two new attributes in addition to +those provided by `groupOfNames`: + +`guacConfigProtocol` +: The protocol associated with the connection, such as "`vnc`" or "`rdp`". This + attribute is required for every `guacConfigGroup` and can be given only once. + +`guacConfigParameter` +: The name and value of a parameter for the specified protocol. This is given + as `name=value`, where "name" is the name of the parameter, as defined by the + documentation for the protocol specified, and "value" is any allowed value for + that parameter. + + This attribute can be given multiple times for the same connection. + +For example, to create a new VNC connection which connects to "localhost" at +port 5900, while granting access to `user1` and `user2`, you could create an +`.ldif` file like the following: + +``` +dn: cn=Example Connection,ou=groups,dc=example,dc=net +objectClass: guacConfigGroup +objectClass: groupOfNames +cn: Example Connection +guacConfigProtocol: vnc +guacConfigParameter: hostname=localhost +guacConfigParameter: port=5900 +guacConfigParameter: password=secret +member: cn=user1,ou=people,dc=example,dc=net +member: cn=user2,ou=people,dc=example,dc=net +``` + +The new connection can then be created using the {command}`ldapadd` utility: + +```console +$ ldapadd -x -D cn=admin,dc=example,dc=net -W -f example-connection.ldif +Enter LDAP Password: +adding new entry "cn=Example Connection,ou=groups,dc=example,dc=net" + +$ +``` + +Where `cn=admin,dc=example,dc=net` is an administrator account with permission +to create new entries, and `example-connection.ldif` is the name of the `.ldif` +file you just created. + +There is, of course, no need to use only the standard LDAP utilities to create +connections and users. There are useful graphical environments for manipulating +LDAP directories, such as [Apache Directory Studio](https://directory.apache.org/studio/), +which make many of the tasks given above much easier. + diff --git a/doc/1.5.5/gug/_sources/libguac.md.txt b/doc/1.5.5/gug/_sources/libguac.md.txt new file mode 100644 index 000000000..d59363949 --- /dev/null +++ b/doc/1.5.5/gug/_sources/libguac.md.txt @@ -0,0 +1,411 @@ +libguac +======= + +The C API for extending and developing with Guacamole is libguac. All native +components produced by the Guacamole project link with this library, and this +library provides the common basis for extending the native functionality of +those native components (by implementing client plugins). + +libguac is used mainly for developing client plugins like libguac-client-vnc or +libguac-client-rdp, or for developing a proxy supporting the Guacamole protocol +like guacd. This chapter is intended to give an overview of how libguac is +used, and how to use it for general communication with the Guacamole protocol. + +(libguac-error-handling)= + +Error handling +-------------- + +Most functions within libguac handle errors by returning a zero or non-zero +value, whichever is appropriate for the function at hand. If an error is +encountered, the `guac_error` variable is set appropriately, and +`guac_error_message` contains a statically-allocated human-readable string +describing the context of the error. These variables intentionally mimic the +functionality provided by `errno` and `errno.h`. + +Both `guac_error` and `guac_error_message` are defined within `error.h`. A +human-readable string describing the error indicated by `guac_error` can be +retrieved using `guac_status_string()`, which is also statically allocated. + +If functions defined within client plugins set `guac_error` and +`guac_error_message` appropriately when errors are encountered, the messages +logged to syslog by guacd will be more meaningful for both users and +developers. + +(libguac-client-plugins)= + +Client plugins +-------------- + +Client plugins are libraries which follow specific conventions such that they +can be loaded dynamically by guacd. All client plugins *must*: + +1. Follow a naming convention, where the name of the library is + {samp}`libguac-client-{PROTOCOL}`. *This is necessary for guacd to locate + the library for a requested protocol.* + +2. Be linked against libguac, the library used by guacd to handle the Guacamole + protocol. The structures which are given to functions invoked by guacd are + defined by libguac, and are expected to be manipulated via the functions + provided by libguac or as otherwise documented within the structure itself. + *Communication between guacd and client plugins is only possible if they + share the same core structural and functional definitions provided by + libguac.* + +3. Implement the standard entry point for client plugins, `guac_client_init()`, + described in more detail below. It is this function which initializes the + structures provided by guacd such that users can join and interact with the + connection. + +(libguac-lifecycle-entry)= + +### Entry point + +All client plugins must provide a function named `guac_client_init` which +accepts, as its sole argument, a pointer to a `guac_client` structure. This +function is similar in principle to the main() function of a C program, and it +is the responsibility of this function to initialize the provided structure as +necessary to begin the actual remote desktop connection, allow users to +join/leave, etc. + +The provided `guac_client` will already have been initialized with handlers for +logging, the broadcast socket, etc. The absolutely critical pieces which must +be provided by `guac_client_init` are: + +1. A handler for users which join the connection (`join_handler`). The join + handler is also usually the most appropriate place for the actual remote + desktop connection to be established. + +2. A `NULL`-terminated set of argument names which the client plugin accepts, + assigned to the args property of the given `guac_client`. As the handshake + procedure is completed for each connecting user, these argument names will + be presented as part of the handshake, and the values for those arguments + will be passed to the join handler once the handshake completes. + +3. A handler for users leaving the connection (`leave_handler`), if any + cleanup, updates, etc. are required. + +4. A handler for freeing the data associated with the `guac_client` after the + connection has terminated (`free_handler`). If your plugin will allocate any + data at all, implementing the free handler is necessary to avoid memory leaks. + +If `guac_client_init` returns successfully, guacd will proceed with allowing +the first use to join the connection, and the rest of the plugin lifecycle +commences. + +(libguac-lifecycle-users)= + +### Joining/leaving a connection + +Whenever a user joins a connection, including the very first user of a +connection (the user which is establishing the remote desktop connection in the +first place), the join handler of the `guac_client` will be invoked. This +handler is provided with the `guac_user` structure representing the user that +just joined, along with the arguments provided during the handshake procedure: + +```c +int join_handler(guac_user* user, int argc, char** argv) { + /* Synchronize display state, init the user, etc. */ +} + +... + +/* Within guac_client_init */ +client->join_handler = join_handler; +``` + +As the parameters and user information provided during the Guacamole protocol +handshake are often required to be known before the remote desktop connection +can be established, the join handler is usually the best place to create a +thread which establishes the remote desktop connection and updates the display +accordingly. + +If necessary, the user which first established the connection can be +distinguished from all other users by the owner flag of `guac_user`, which will +be set to a non-zero value. + +Once a user has disconnected, the leave handler of `guac_client` will be +invoked. Just as with the join handler, this handler is provided the +`guac_user` structure of the user that disconnected. The `guac_user` structure +will be freed immediately after the handler completes: + +```c +int leave_handler(guac_user* user) { + /* Free user-specific data and clean up */ +} + +... + +/* Within guac_client_init */ +client->leave_handler = leave_handler; +``` + +(libguac-lifecycle-termination)= + +### Termination + +Once the last user of a connection has left, guacd will begin freeing resources +allocated to that connection, invoking the free handler of the `guac_client`. +At this point, the "leave" handler has been invoked for all previous users. All +that remains is for the client plugin to free any remaining data that it +allocated, such that guacd can clean up the rest: + +```c +int free_handler(guac_client* client) { + /* Disconnect, free client-specific data, etc. */ +} + +... + +/* Within guac_client_init */ +client->free_handler = free_handler; +``` + +(libguac-layers)= + +Layers and buffers +------------------ + +The main operand of all drawing instructions is the layer, represented within +libguac by the `guac_layer` structure. Each `guac_layer` is normally allocated +using `guac_client_alloc_layer()` or `guac_client_alloc_buffer()`, depending on +whether a layer or buffer is desired, and freed with `guac_client_free_layer()` +or `guac_client_free_buffer()`. + +:::{important} +Care must be taken to invoke the allocate and free pairs of each type of layer +correctly. `guac_client_free_layer()` should only be used to free layers +allocated with `guac_client_alloc_layer()`, and `guac_client_free_buffer()` +should only be used to free layers allocated with `guac_client_alloc_buffer()`, +all called using the same instance of `guac_client`. + +If these restrictions are not observed, the effect of invoking these functions +is undefined. +::: + +Using these layer management functions allows you to reuse existing layers or +buffers after their original purpose has expired, thus conserving resources on +the client side, as allocation of new layers within the remote client is a +relatively expensive operation. + +It is through layers and buffers that Guacamole provides support for +hardware-accelerated compositing and cached updates. Creative use of layers and +buffers leads to efficient updates on the client side, which usually translates +into speed and responsiveness. + +Regardless of whether you allocate new layers or buffers, there is always one +layer guaranteed to be present: the default layer, represented by libguac as +`GUAC_DEFAULT_LAYER`. If you only wish to affect the main display of the +connected client somehow, this is the layer you want to use as the operand of +your drawing instruction. + +(libguac-streams)= + +Streams +------- + +In addition to drawing, the Guacamole protocol supports streaming of arbitrary +data. The main operand of all streaming instructions is the stream, represented +within libguac by the `guac_stream` structure. Each `guac_stream` exists +either at the user or client levels, depending on whether the stream is +intended to be broadcast to all users or just one, and is thus allocated using +either `guac_client_alloc_stream()` or `guac_user_alloc_stream()`. +Explicitly-allocated streams must eventually be freed with +`guac_client_free_stream()` or `guac_user_free_stream()`. + +:::{important} +Just as with layers, care must be taken to invoke the allocate and free pairs +correctly for each explicitly-allocated stream. `guac_client_free_stream()` +should only be used to free streams allocated with +`guac_client_alloc_stream()`, and `guac_user_free_stream()` should only be used +to free streams allocated with `guac_user_alloc_stream()`. + +If these restrictions are not observed, the effect of invoking these functions +is undefined. +::: + +Streams are the means by which data is transmitted for clipboard (via the +["clipboard" instruction](clipboard-instruction)), audio (via the ["audio" +instruction](audio-instruction)), and even the images which make up typical +drawing operations (via the ["img" instruction](img-instruction)). They will +either be allocated for you, when an inbound stream is received from a user, or +allocated manually, when an outbound stream needs to be sent to a user. As with +`guac_client` and `guac_user`, each `guac_stream` has a set of handlers which +correspond to instructions received related to streams. These instructions are +documented in more detail in [](guacamole-protocol-streaming) and +[](protocol-reference). + +(libguac-sending-instructions)= + +Sending instructions +-------------------- + +All drawing in Guacamole is accomplished through the sending of instructions to +the connected client using the Guacamole protocol. The same goes for streaming +audio, video, or file content. All features and content supported by Guacamole +ultimately reduce to one or more instructions which are part of the documented +protocol. + +Most drawing using libguac is done using Cairo functions on a `cairo_surface_t` +(see the Cairo API documentation) which is later streamed to the client using +an img instruction and subsequent blob instructions, sent via +`guac_client_stream_png()`. Cairo was chosen as a dependency of libguac to +provide developers an existing and stable means of drawing to image buffers +which will ultimately be sent as easy-to-digest PNG images. + +The Guacamole protocol also supports drawing primitives similar to those +present in the Cairo API and HTML5's canvas tag. These instructions are +documented individually in the Guacamole Protocol Reference in a section +dedicated to drawing instructions, and like all Guacamole protocol +instructions, each instruction has a corresponding function in libguac +following the naming convention {samp}`guac_protocol_send_{OPCODE}()`. + +Each protocol function takes a `guac_socket` as an argument, which is the +buffered I/O object used by libguac. For each active connection, there are two +important types of `guac_socket` instance: the broadcast socket, which exists +at the client level within the `guac_client`, and the per-user socket, which is +accessible within each `guac_user`. Data sent along the client-level broadcast +socket will be sent to all connected users beneath that `guac_client`, while +data sent along a user-level socket will be sent only to that user. + +For example, to send a "size" instruction to all connected users via the +client-level broadcast socket, you could invoke: + +```c +guac_protocol_send_size(client->socket, GUAC_DEFAULT_LAYER, 1024, 768); +``` + +Or, if the instruction is only relevant to a particular user, the socket +associated with that user can be used instead: + +```c +guac_protocol_send_size(user->socket, GUAC_DEFAULT_LAYER, 1024, 768); +``` + +The sockets provided by libguac are threadsafe at the protocol level. +Instructions written to a socket by multiple threads are guaranteed to be +written atomically with respect to that socket. + +(libguac-event-handling)= + +Event handling +-------------- + +Generally, as guacd receives instructions from the connected client, it invokes +event handlers if set within the associated `guac_user` or `guac_client`, +depending on the nature of the event. Most events are user-specific, and thus +the event handlers reside within the `guac_user` structure, but there are +client-specific events as well, such as a user joining or leaving the current +connection. Event handlers typically correspond to Guacamole protocol +instructions received over the socket by a connected user, which in turn +correspond to events which occur on the client side. + +(libguac-key-events)= + +### Key events + +When keys are pressed or released on the client side, the client sends key +instructions to the server. These instructions are parsed and handled by +calling the key event handler installed in the `key_handler` member of the +`guac_user`. This key handler is given the keysym of the key that was changed, +and a boolean value indicating whether the key was pressed or released. + +```c +int key_handler(guac_user* user, int keysym, int pressed) { + /* Do something */ +} + +... + +/* Within the "join" handler of guac_client */ +user->key_handler = key_handler; +``` + +(libguac-mouse-events)= + +### Mouse events + +When the mouse is moved, and buttons are pressed or released, the client sends +mouse instructions to the server. These instructions are parsed and handled by +calling the mouse event handler installed in the `mouse_handler` member of the +`guac_user`. This mouse handler is given the current X and Y coordinates of the +mouse pointer, as well as a mask indicating which buttons are pressed and which +are released. + +```c +int mouse_handler(guac_user* user, int x, int y, int button_mask) { + /* Do something */ +} + +... + +/* Within the "join" handler of guac_client */ +user->mouse_handler = mouse_handler; +``` + +The file `client.h` also defines the mask of each button for convenience: + +`GUAC_CLIENT_MOUSE_LEFT` +: The left mouse button, set when pressed. + +`GUAC_CLIENT_MOUSE_MIDDLE` +: The middle mouse button, set when pressed. + +`GUAC_CLIENT_MOUSE_RIGHT` +: The right mouse button, set when pressed. + +`GUAC_CLIENT_MOUSE_UP` +: The button corresponding to one scroll in the upwards direction of the mouse + scroll wheel, set when scrolled. + +`GUAC_CLIENT_MOUSE_DOWN` +: The button corresponding to one scroll in the downwards direction of the + mouse scroll wheel, set when scrolled. + +(libguac-clipboard-events)= + +### Clipboard, file, and other stream events + +If a connected user sends data which should be sent to the clipboard of the +remote desktop, guacd will trigger the clipboard handler installed in the +`clipboard_handler` member of the `guac_user` associated with that user. + +```c +int clipboard_handler(guac_user* user, guac_stream* stream, char* mimetype) { + /* Do something */ +} + +... + +/* Within the "join" handler of guac_client */ +user->clipboard_handler = clipboard_handler; +``` + +The handler is expected to assign further handlers to the provided +`guac_stream` as necessary, such that the ["blob"](blob-instruction) and +["end"](end-instruction) instructions received along the stream can be handled. +A similar handler is provided for received files: + +```c +int file_handler(guac_user* user, guac_stream* stream, + char* mimetype, char* filename) { + /* Do something */ +} + +... + +/* Within the "join" handler of guac_client */ +user->file_handler = file_handler; +``` + +This pattern continues for all other types of streams which can be received +from a user. The instruction which begins the stream has a corresponding +handler within `guac_user`, and the metadata describing that stream and +provided with the instruction is included within the parameters passed to that +handler. + +These handlers are, of course, optional. If any type of stream lacks a +corresponding handler, guacd will automatically close the stream and respond +with an ["ack" instruction](ack-instruction) and appropriate error code, +informing the user's Guacamole client that the stream is unsupported. + diff --git a/doc/1.5.5/gug/_sources/openid-auth.md.txt b/doc/1.5.5/gug/_sources/openid-auth.md.txt new file mode 100644 index 000000000..2eeaeb341 --- /dev/null +++ b/doc/1.5.5/gug/_sources/openid-auth.md.txt @@ -0,0 +1,184 @@ +OpenID Connect Authentication +============================= + +[OpenID Connect](http://openid.net/connect/) is a widely-adopted open standard +for implementing single sign-on (SSO). [Not to be confused with +OAuth](https://oauth.net/articles/authentication/), which is *not* an +authentication protocol, OpenID Connect defines an authentication protocol in +the form of a simple identity layer on top of OAuth 2.0. + +Guacamole's OpenID Connect support implements the "[implicit +flow](https://openid.net/specs/openid-connect-core-1_0.html#ImplicitFlowAuth)" +of the OpenID Connect standard, and allows authentication of Guacamole users to +be delegated to an identity provider which implements OpenID Connect, removing +the need for users to log into Guacamole directly. This module must be layered +on top of other authentication extensions that provide connection information, +such as the [database authentication extension](jdbc-auth), as it only provides +user authentication. + +(openid-downloading)= + +Downloading the OpenID Connect authentication extension +------------------------------------------------------- + +```{include} include/sso-download.md +``` + +The extension for the desired SSO method, in this case +`guacamole-auth-sso-openid-1.5.5.jar` from within the `openid/` subdirectory, +must ultimately be placed in `GUACAMOLE_HOME/extensions`. + +(installing-openid-auth)= + +Installing support for OpenID Connect +------------------------------------- + +Guacamole extensions are self-contained `.jar` files which are located within +the `GUACAMOLE_HOME/extensions` directory. *If you are unsure where +`GUACAMOLE_HOME` is located on your system, please consult +[](configuring-guacamole) before proceeding.* + +To install the OpenID Connect authentication extension, you must: + +1. Create the `GUACAMOLE_HOME/extensions` directory, if it does not already + exist. + +2. Copy `guacamole-auth-sso-openid-1.5.5.jar` within + `GUACAMOLE_HOME/extensions`. + +3. Configure Guacamole to use OpenID Connect authentication, as described + below. + +(guac-openid-config)= + +### Configuring Guacamole for single sign-on with OpenID Connect + +Guacamole's OpenID connect support requires several properties which describe +both the identity provider and the Guacamole deployment. These properties are +*absolutely required in all cases*, as they dictate how Guacamole should +connect to the identity provider, how it should verify the identity provider's +response, and how the identity provider should redirect users back to Guacamole +once their identity has been confirmed: + +`openid-authorization-endpoint` +: The authorization endpoint (URI) of the OpenID service. + + This value should be provided to you by the identity provider. For identity + providers that implement [OpenID Connect + Discovery](https://openid.net/specs/openid-connect-discovery-1_0.html), this + value can be retrieved from the `authorization_endpoint` property of the JSON + file hosted at + {samp}`{https://identity-provider}/.well-known/openid-configuration`, where + `https://identity-provider` is the base URL of the identity provider. + +`openid-jwks-endpoint` +: The endpoint (URI) of the JWKS service which defines how received ID tokens + ([JSON Web Tokens](https://jwt.io/) or JWTs) shall be validated. + + This value should be provided to you by the identity provider. For + identity providers that implement [OpenID Connect + Discovery](https://openid.net/specs/openid-connect-discovery-1_0.html), + this value can be retrieved from the `jwks_uri` property of the JSON + file hosted at + {samp}`{https://identity-provider}/.well-known/openid-configuration`, where + `https://identity-provider` is the base URL of the identity provider. + +`openid-issuer` +: The issuer to expect for all received ID tokens. + + This value should be provided to you by the identity provider. For + identity providers that implement [OpenID Connect + Discovery](https://openid.net/specs/openid-connect-discovery-1_0.html), + this value can be retrieved from the `issuer` property of the JSON + file hosted at + {samp}`{https://identity-provider}/.well-known/openid-configuration`, where + `https://identity-provider` is the base URL of the identity provider. + +`openid-client-id` +: The OpenID client ID which should be submitted to the OpenID service when + necessary. This value is typically provided to you by the OpenID service when + OpenID credentials are generated for your application. + +`openid-redirect-uri` +: The URI that should be submitted to the OpenID service such that they + can redirect the authenticated user back to Guacamole after the + authentication process is complete. This must be the full URL that a user + would enter into their browser to access Guacamole. + +Additional optional properties are available to control how claims within +received ID tokens are used to derive the user's Guacamole username, any +associated groups, the OpenID scopes requested when user identities are +confirmed, and to control the maximum amount of time allowed for various +aspects of the conversation with the identity provider: + +`openid-username-claim-type` +: The claim type within any valid JWT that contains the authenticated user's + username. By default, the "`email`" claim type is used. + +`openid-groups-claim-type` +: The claim type within any valid JWT that contains the list of groups of which + the authenticated user is a member. By default, the "`groups`" claim type is + used. + +`openid-scope` +: The space-separated list of OpenID scopes to request. OpenID scopes determine + the information returned within the OpenID token, and thus affect what values + can be used as an authenticated user's username. To be compliant with OpenID, + at least "`openid profile`" must be requested. By default, "`openid email + profile`" is used. + +`openid-allowed-clock-skew` +: The amount of clock skew tolerated for timestamp comparisons between the + Guacamole server and OpenID service clocks, in seconds. By default, clock skew + of up to 30 seconds is tolerated. + +`openid-max-token-validity` +: The maximum amount of time that an OpenID token should remain valid, in + minutes. By default, each OpenID token remains valid for 300 minutes (5 + hours). + +`openid-max-nonce-validity` +: The maximum amount of time that a nonce generated by the Guacamole + server should remain valid, in minutes. As each OpenID request has a unique + nonce value, this imposes an upper limit on the amount of time any particular + OpenID request can result in successful authentication within Guacamole. By + default, each generated nonce expires after 10 minutes. + +(openid-login)= + +### Controlling login behavior + +```{include} include/sso-login-behavior.md +``` + +#### Automatically redirecting all unauthenticated users + +To ensure users are redirected to the OpenID identity provider immediately +(without a Guacamole login screen), ensure the OpenID extension has priority +over all others: + +``` +extension-priority: openid +``` + +#### Presenting unauthenticated users with a login screen + +To ensure users are given a normal Guacamole login screen and have the option +to log in with traditional credentials _or_ with OpenID, ensure the OpenID +extension does not have priority: + +``` +extension-priority: *, openid +``` + +(completing-openid-install)= + +### Completing the installation + +Guacamole will only reread `guacamole.properties` and load newly-installed +extensions during startup, so your servlet container will need to be restarted +before OpenID Connect authentication can be used. *Doing this will disconnect +all active users, so be sure that it is safe to do so prior to attempting +installation.* When ready, restart your servlet container and give the new +authentication a try. + diff --git a/doc/1.5.5/gug/_sources/protocol-reference.rst.txt b/doc/1.5.5/gug/_sources/protocol-reference.rst.txt new file mode 100644 index 000000000..d8ac2fd0d --- /dev/null +++ b/doc/1.5.5/gug/_sources/protocol-reference.rst.txt @@ -0,0 +1,1253 @@ +Guacamole protocol reference +============================ + +Drawing instructions +-------------------- + +.. guac:instruction:: arc + :sent-by: server + :phase: interactive + + The arc instruction adds the specified arc subpath to the existing path, + creating a new path if no path exists. The path created can be modified further + by other path-type instructions, and finally stroked, filled, and/or closed. + + :arg integer layer: + The layer which should have the specified arc subpath added. + + :arg integer x: + The X coordinate of the center of the circle containing the arc to be + drawn. + + :arg integer y: + The Y coordinate of the center of the circle containing the arc to be + drawn. + + :arg float radius: + The radius of the circle containing the arc to be drawn, in pixels. + + :arg float start: + The starting angle of the arc to be drawn, in radians. + + :arg float end: + The ending angle of the arc to be drawn, in radians. + + :arg integer negative: + Non-zero if the arc should be drawn from START to END in order of + decreasing angle, zero otherwise. + +.. guac:instruction:: cfill + :sent-by: server + :phase: interactive + + Fills the current path with the specified color. This instruction completes + the current path. Future path instructions will begin a new path. + + :arg integer mask: + The channel mask to apply when filling the current path in the + specified layer. + + :arg integer layer: + The layer whose path should be filled. + + :arg integer r: + The red component of the color to use to fill the current path in the + specified layer. + + :arg integer g: + The green component of the color to use to fill the current path in the + specified layer. + + :arg integer b: + The blue component of the color to use to fill the current path in the + specified layer. + + :arg integer a: + The alpha component of the color to use to fill the current path in the + specified layer. + +.. guac:instruction:: clip + :sent-by: server + :phase: interactive + + Applies the current path as the clipping path. Future operations will only + draw within the current path. Note that future clip instructions will also + be limited by this path. To set a completely new clipping path, you must + first reset the layer with a reset instruction. If you wish to only reset + the clipping path, but preserve the current transform matrix, push the + layer state before setting the clipping path, and pop the layer state to + reset. + + :arg integer layer: + The layer whose clipping path should be set. + +.. guac:instruction:: close + :sent-by: server + :phase: interactive + + Closes the current path by connecting the start and end points with a + straight line. + + :arg integer layer: + The layer whose path should be closed. + +.. guac:instruction:: copy + :sent-by: server + :phase: interactive + + Copies image data from the specified rectangle of the specified layer or + buffer to a different location of another specified layer or buffer. + + :arg integer srclayer: + The index of the layer to copy image data from. + + :arg integer srcx: + The X coordinate of the upper-left corner of the source rectangle + within the source layer. + + :arg integer srcy: + The Y coordinate of the upper-left corner of the source rectangle + within the source layer. + + :arg integer srcwidth: + The width of the source rectangle within the source layer. + + :arg integer srcheight: + The height of the source rectangle within the source layer. + + :arg integer mask: + The channel mask to apply when drawing the image data on the + destination layer. + + :arg integer dstlayer: + The index of the layer to draw the image data to. + + :arg integer dstx: + The X coordinate of the upper-left corner of the destination within + the destination layer. + + :arg integer dsty: + The Y coordinate of the upper-left corner of the destination within + the destination layer. + +.. guac:instruction:: cstroke + :sent-by: server + :phase: interactive + + Strokes the current path with the specified color. This instruction + completes the current path. Future path instructions will begin a new path. + + :arg integer mask: + The channel mask to apply when stroking the current path in the + specified layer. + + :arg integer layer: + The layer whose path should be stroked. + + :arg integer cap: + The index of the line cap style to use. This can be either butt (0), + round (1), or square (2). + + :arg integer join: + The index of the line join style to use. This can be either bevel + (0), miter (1), or round (2). + + :arg integer thickness: + The thickness of the stroke to draw, in pixels. + + :arg integer r: + The red component of the color to use to stroke the current path in + the specified layer. + + :arg integer g: + The green component of the color to use to stroke the current path in + the specified layer. + + :arg integer b: + The blue component of the color to use to stroke the current path in + the specified layer. + + :arg integer a: + The alpha component of the color to use to stroke the current path in + the specified layer. + +.. guac:instruction:: cursor + :sent-by: server + :phase: interactive + + Sets the client's cursor to the image data from the specified rectangle of + a layer, with the specified hotspot. + + :arg integer x: + The X coordinate of the cursor's hotspot. + + :arg integer y: + The Y coordinate of the cursor's hotspot. + + :arg integer srclayer: + The index of the layer to copy image data from. + + :arg integer srcx: + The X coordinate of the upper-left corner of the source rectangle + within the source layer. + + :arg integer srcy: + The Y coordinate of the upper-left corner of the source rectangle + within the source layer. + + :arg integer srcwidth: + The width of the source rectangle within the source layer. + + :arg integer srcheight: + The height of the source rectangle within the source layer. + +.. guac:instruction:: curve + :sent-by: server + :phase: interactive + + Adds the specified cubic bezier curve subpath. + + :arg integer layer: + The layer which should have the specified curve subpath added. + + :arg integer cp1x: + The X coordinate of the first control point of the curve. + + :arg integer cp1y: + The Y coordinate of the first control point of the curve. + + :arg integer cp2x: + The X coordinate of the second control point of the curve. + + :arg integer cp2y: + The Y coordinate of the second control point of the curve. + + :arg integer x: + The X coordinate of the endpoint of the curve. + + :arg integer y: + The Y coordinate of the endpoint of the curve. + +.. guac:instruction:: dispose + :sent-by: server + :phase: interactive + + Removes the specified layer. The specified layer will be recreated as a new + layer if it is referenced again. + + :arg integer layer: + The layer to remove. + +.. guac:instruction:: distort + :sent-by: server + :phase: interactive + + Sets the given affine transformation matrix to the layer. Unlike transform, + this operation is independent of any previously sent transformation matrix. + This operation can be undone by setting the layer's transformation matrix + to the identity matrix using distort + + :arg integer layer: + The layer to distort. + + :arg float a: + The matrix value in row 1, column 1. + + :arg float b: + The matrix value in row 2, column 1. + + :arg float c: + The matrix value in row 1, column 2. + + :arg float d: + The matrix value in row 2, column 2. + + :arg float e: + The matrix value in row 1, column 3. + + :arg float f: + The matrix value in row 2, column 3. + +.. guac:instruction:: identity + :sent-by: server + :phase: interactive + + Resets the transform matrix of the specified layer to the identity matrix. + + :arg integer layer: + The layer whose transform matrix should be reset. + +.. guac:instruction:: img + :sent-by: server + :phase: interactive + + Allocates a new stream, associating it with the metadata of an image + update, including the image type, the destination layer, and destination + coordinates. The contents of the image will later be sent along the stream + with blob instructions. The full size of the image need not be known ahead + of time. + + :arg integer stream: + The index of the stream to allocate. + + :arg string mimetype: + The mimetype of the image being sent. + + :arg integer mask: + The channel mask to apply when drawing the image data. + + :arg integer layer: + The destination layer. + + :arg integer x: + The X coordinate of the upper-left corner of the destination within + the destination layer. + + :arg integer y: + The Y coordinate of the upper-left corner of the destination within + the destination layer. + +.. guac:instruction:: lfill + :sent-by: server + :phase: interactive + + Fills the current path with a tiled pattern of the image data from the + specified layer. This instruction completes the current path. Future path + instructions will begin a new path. + + :arg integer mask: + The channel mask to apply when filling the current path in the + specified layer. + + :arg integer layer: + The layer whose path should be filled. + + :arg integer srclayer: + The layer to use as the pattern. + +.. guac:instruction:: line + :sent-by: server + :phase: interactive + + Adds the specified line subpath. + + :arg integer layer: + The layer which should have the specified line subpath added. + + :arg integer x: + The X coordinate of the endpoint of the line. + + :arg integer y: + The Y coordinate of the endpoint of the line. + +.. guac:instruction:: lstroke + :sent-by: server + :phase: interactive + + Strokes the current path with a tiled pattern of the image data from the + specified layer. This instruction completes the current path. Future path + instructions will begin a new path. + + :arg integer mask: + The channel mask to apply when filling the current path in the + specified layer. + + :arg integer layer: + The layer whose path should be filled. + + :arg integer cap: + The index of the line cap style to use. This can be either butt (0), + round (1), or square (2). + + :arg integer join: + The index of the line join style to use. This can be either bevel + (0), miter (1), or round (2). + + :arg integer thickness: + The thickness of the stroke to draw, in pixels. + + :arg integer srclayer: + The layer to use as the pattern. + +.. guac:instruction:: move + :sent-by: server + :phase: interactive + + Moves the given layer to the given location within the specified parent + layer. This operation is applicable only to layers, and cannot be applied + to buffers (layers with negative indices). Applying this operation to the + default layer (layer 0) also has no effect. + + :arg integer layer: + The layer to move. + + :arg integer parent: + The layer that should be the parent of the given layer. + + :arg integer x: + The X coordinate to move the layer to. + + :arg integer y: + The Y coordinate to move the layer to. + + :arg integer z: + The relative Z-ordering of this layer. Layers with larger values will + appear above layers with smaller values. + +.. guac:instruction:: pop + :sent-by: server + :phase: interactive + + Restores the previous state of the specified layer from the stack. The + state restored includes the transformation matrix and clipping path. + + :arg integer layer: + The layer whose state should be restored. + +.. guac:instruction:: push + :sent-by: server + :phase: interactive + + Saves the current state of the specified layer to the stack. The state + saved includes the current transformation matrix and clipping path. + + :arg integer layer: + The layer whose state should be saved. + +.. guac:instruction:: rect + :sent-by: server + :phase: interactive + + Adds a rectangular path to the specified layer. + + :arg integer mask: + The channel mask to apply when drawing the image data. + + :arg integer layer: + The destination layer. + + :arg integer x: + The X coordinate of the upper-left corner of the rectangle to draw. + + :arg integer y: + The Y coordinate of the upper-left corner of the rectangle to draw. + + :arg integer width: + The width of the rectangle to draw. + + :arg integer height: + The width of the rectangle to draw. + +.. guac:instruction:: reset + :sent-by: server + :phase: interactive + + Resets the transformation and clip state of the layer. + + :arg integer layer: + The layer whose state should be reset. + +.. guac:instruction:: set + :sent-by: server + :phase: interactive + + Sets the given client-side property to the specified value. Currently there + is only one property: miter-limit, the maximum distance between the inner + and outer points of a miter joint, proportional to stroke width (if + miter-limit is set to 10.0, the default, then the maximum distance between + the points of the joint is 10 times the stroke width). + + :arg integer layer: + The layer whose property should be set. + + :arg string property: + The name of the property to set. + + :arg string value: + The value to set the given property to. + +.. guac:instruction:: shade + :sent-by: server + :phase: interactive + + Sets the opacity of the given layer. + + :arg integer layer: + The layer whose opacity should be set. + + :arg integer opacity: + The opacity of the layer, where 0 is completely transparent, and 255 + is completely opaque. + +.. guac:instruction:: size + :sent-by: server + :phase: interactive + + Sets the size of the specified layer. + + :arg integer layer: + The layer to resize. + + :arg integer width: + The new width of the layer + + :arg integer height: + The new height of the layer + +.. guac:instruction:: start + :sent-by: server + :phase: interactive + + Starts a new subpath at the specified point. + + :arg integer layer: + The layer which should start a new subpath. + + :arg integer x: + The X coordinate of the first point of the new subpath. + + :arg integer y: + The Y coordinate of the first point of the new subpath. + +.. guac:instruction:: transfer + :sent-by: server + :phase: interactive + + Transfers image data from the specified rectangle of the specified layer or + buffer to a different location of another specified layer or buffer, using + the specified transfer function. + + For a list of available functions, see the definition of + ``guac_transfer_function`` within the `guacamole/protocol-types.h + `__ + header included with libguac. + + :arg integer srclayer: + The index of the layer to transfer image data from. + + :arg integer srcx: + The X coordinate of the upper-left corner of the source rectangle + within the source layer. + + :arg integer srcy: + The Y coordinate of the upper-left corner of the source rectangle + within the source layer. + + :arg integer srcwidth: + The width of the source rectangle within the source layer. + + :arg integer srcheight: + The height of the source rectangle within the source layer. + + :arg integer function: + The index of the transfer function to use. + + For a list of available functions, see the definition of + ``guac_transfer_function`` within the `guacamole/protocol-types.h + `__ + header included with libguac. + + :arg integer dstlayer: + The index of the layer to draw the image data to. + + :arg integer dstx: + The X coordinate of the upper-left corner of the destination within + the destination layer. + + :arg integer dsty: + The Y coordinate of the upper-left corner of the destination within + the destination layer. + +.. guac:instruction:: transform + :sent-by: server + :phase: interactive + + Applies the specified transformation matrix to future operations. Unlike + distort, this operation is dependent on any previously sent transformation + matrices, and only affects future operations. This operation can be undone + by setting the layer's transformation matrix to the identity matrix using + identity, but image data already drawn will not be affected. + + :arg integer layer: + The layer to apply the given transformation matrix to. + + :arg float a: + The matrix value in row 1, column 1. + + :arg float b: + The matrix value in row 2, column 1. + + :arg float c: + The matrix value in row 1, column 2. + + :arg float d: + The matrix value in row 2, column 2. + + :arg float e: + The matrix value in row 1, column 3. + + :arg float f: + The matrix value in row 2, column 3. + +Streaming instructions +---------------------- + +.. guac:instruction:: ack + :sent-by: client,server + :phase: interactive + + The ack instruction acknowledges a received data blob, providing a status + code and message indicating whether the operation associated with the blob + succeeded or failed. A status code other than 0 (``SUCCESS``) implicitly + ends the stream. + + :arg integer stream: + The index of the stream the corresponding blob was received on. + + :arg string message: + A human-readable error message. This typically is not exposed within + any user interface, and mainly helps with debugging. + + :arg integer status: + The Guacamole status code denoting success or failure. For a list of status + codes, see the table in `Status codes <#status-codes>`__. + +.. guac:instruction:: argv + :sent-by: client,server + :phase: interactive + + Allocates a new stream, associating it with the given argument (connection + parameter) metadata. The relevant connection parameter data will later be + sent along the stream with blob instructions. If sent by the client, this + data will be the desired new value of the connection parameter being + changed, and will be applied if the server supports changing that + connection parameter while the connection is active. If sent by the server, + this data will be the current value of a connection parameter being exposed + to the client. + + :arg integer stream: + The index of the stream to allocate. + + :arg string mimetype: + The mimetype of the connection parameter being sent. In most cases, + this will be "text/plain". + + :arg string name: + The name of the connection parameter whose value is being sent. + +.. guac:instruction:: audio + :sent-by: client,server + :phase: interactive + + Allocates a new stream, associating it with the given audio metadata. + Audio data will later be sent along the stream with blob instructions. The + mimetype given must be a mimetype previously specified by the client during + the handshake procedure. Playback will begin immediately and will continue + as long as blobs are received along the stream. + + :arg integer stream: + The index of the stream to allocate. + + :arg string mimetype: + The mimetype of the audio data being sent. + +.. guac:instruction:: blob + :sent-by: client,server + :phase: interactive + + Sends a blob of data along the given stream. This blob of data is + arbitrary, base64-encoded data, and only has meaning to the Guacamole + client or server through the metadata assigned to the stream when the + stream was allocated. + + :arg integer stream: + The index of the stream along which the given data should be sent. + + :arg string data: + The base64-encoded data to send. + +.. guac:instruction:: clipboard + :sent-by: client,server + :phase: interactive + + Allocates a new stream, associating it with the given clipboard metadata. + The clipboard data will later be sent along the stream with blob + instructions. If sent by the client, this data will be the contents of the + client-side clipboard. If sent by the server, this data will be the + contents of the clipboard within the remote desktop. + + :arg integer stream: + The index of the stream to allocate. + + :arg string mimetype: + The mimetype of the clipboard data being sent. In most cases, this + will be "text/plain". + +.. guac:instruction:: end + :sent-by: client,server + :phase: interactive + + The end instruction terminates an open stream, freeing any client-side or + server-side resources. Data sent to a terminated stream will be ignored. + Terminating a stream with the end instruction only denotes the end of the + stream and does not imply an error. + + :arg integer stream: + The index of the stream the corresponding blob was received on. + +.. guac:instruction:: file + :sent-by: client,server + :phase: interactive + + Allocates a new stream, associating it with the given arbitrary file + metadata. The contents of the file will later be sent along the stream with + blob instructions. The full size of the file need not be known ahead of + time. + + :arg integer stream: + The index of the stream to allocate. + + :arg string mimetype: + The mimetype of the file being sent. + + :arg string filename: + The name of the file, as it would be saved on a filesystem. + +.. guac:instruction:: msg + :sent-by: server + :phase: interactive + + Sends a message from the server (guacd) to the client. The nature of these + messages is intentionally broad and flexible - the message must include + a numeric code that the client understands and can act on, and may also + any number of arguments that can be used by the client in association + with the message. + + :arg integer msg: + A numeric value indicating the message that is being passed to the client. + + :arg string args: + Any number of arguments associated with the message that is being sent + to the client. + +.. guac:instruction:: pipe + :sent-by: client,server + :phase: interactive + + Allocates a new stream, associating it with the given arbitrary named pipe + metadata. The contents of the pipe will later be sent along the stream with + blob instructions. Pipes in the Guacamole protocol are unidirectional, + named pipes, very similar to a UNIX FIFO or pipe. It is up to client-side + code to handle pipe data appropriately, likely based upon the name of the + pipe, which is arbitrary. Pipes may be opened by either the client or the + server. + + :arg integer stream: + The index of the stream to allocate. + + :arg string mimetype: + The mimetype of the data being sent along the pipe. + + :arg string name: + The arbitrary name of the pipe, which may have special meaning to + client-side code. + +.. guac:instruction:: video + :sent-by: client,server + :phase: interactive + + Allocates a new stream, associating it with the given video metadata. + Video data will later be sent along the stream with blob instructions. The + mimetype given must be a mimetype previously specified by the client during + the handshake procedure. Playback will begin immediately and will continue + as long as blobs are received along the stream. + + :arg integer stream: + The index of the stream to allocate. + + :arg integer layer: + The index of the layer to stream the video data into. The effect of + other drawing operations on this layer during playback is undefined, + as the client codec implementation may leverage any rendering + mechanism it sees fit, including hardware decoding. + + :arg string mimetype: + The mimetype of the video data being sent. + +Object instructions +------------------- + +.. guac:instruction:: body + :sent-by: client,server + :phase: interactive + + Allocates a new stream, associating it with the name of a stream previously + requested by a get instruction. The contents of the stream will be sent + later with blob instructions. The full size of the stream need not be known + ahead of time. + + :arg integer object: + The index of the object associated with this stream. + + :arg integer stream: + The index of the stream to allocate. + + :arg string mimetype: + The mimetype of the data being sent. + + :arg string name: + The name of the stream associated with the object. + +.. guac:instruction:: filesystem + :sent-by: server + :phase: interactive + + Allocates a new object, associating it with the given arbitrary filesystem + metadata. The contents of files and directories within the filesystem will + later be sent along streams requested with get instructions or created with + put instructions. + + :arg integer object: + The index of the object to allocate. + + :arg string name: + The name of the filesystem. + +.. guac:instruction:: get + :sent-by: client,server + :phase: interactive + + Requests that a new stream be created, providing read access to the object + stream having the given name. The requested stream will be created, in + response, with a body instruction. + + Stream names are arbitrary and dictated by the object from which they are + requested, with the exception of the root stream of the object itself, + which has the reserved name "``/``". The root stream of the object has the + mimetype "``application/vnd.glyptodon.guacamole.stream-index+json``", and + provides a simple JSON map of available stream names to their corresponding + mimetypes. If the object contains a hierarchy of streams, some of these + streams may also be + "``application/vnd.glyptodon.guacamole.stream-index+json``". + + For example, the ultimate content of the body stream provided in response + to a get request for the root stream of an object containing two text + streams, "A" and "B", would be the following: + + .. code-block:: json + + { + "A" : "text/plain", + "B" : "text/plain" + } + + :arg integer object: + The index of the object to request a stream from. + + :arg string name: + The name of the stream being requested from the given object. + +.. guac:instruction:: put + :sent-by: client,server + :phase: interactive + + Allocates a new stream, associating it with the given arbitrary object and + stream name. The contents of the stream will later be sent with blob + instructions. + + :arg integer object: + The index of the object associated with this stream. + + :arg integer stream: + The index of the stream to allocate. + + :arg string mimetype: + The mimetype of the data being sent. + + :arg string name: + The name of the stream within the given object to which data is being + sent. + +.. guac:instruction:: undefine + :sent-by: client,server + :phase: interactive + + Undefines an existing object, allowing its index to be reused by another + future object. The resource associated with the original object may or may + not continue to exist - it simply no longer has an associated object. + + :arg integer object: + The index of the object to undefine. + +Client handshake instructions +----------------------------- + +.. guac:instruction:: audio + :sent-by: client + :phase: handshake + + Specifies which audio mimetypes are supported by the client. Each parameter + must be a single mimetype, listed in order of client preference, with the + optimal mimetype being the first parameter. + +.. guac:instruction:: connect + :sent-by: client + :phase: handshake + + Begins the connection using the previously specified protocol with the + given arguments. This is the last instruction sent during the handshake + phase. + + The parameters of this instruction correspond exactly to the parameters of + the received args instruction. If the received args instruction has, for + example, three parameters, the responding connect instruction must also + have three parameters. + +.. guac:instruction:: image + :sent-by: client + :phase: handshake + + Specifies which image mimetypes are supported by the client. Each parameter + must be a single mimetype, listed in order of client preference, with the + optimal mimetype being the first parameter. + + It is expected that the supported mimetypes will include at least + "image/png" and "image/jpeg", and the server *may* safely assume that these + mimetypes are supported, even if they are absent from the handshake. + +.. guac:instruction:: name + :sent-by: client + :phase: handshake + + Specifies the human-readable name of the user joining a connection. A + single, string value is expected for this, and guacd does not expect + or require that this value be unique among other users connected to + the server or connection. The type of name provided is completely up + to the client implementation. + +.. guac:instruction:: select + :sent-by: client + :phase: handshake + + Requests that the connection be made using the specified protocol, or to + the specified existing connection. Whether a new connection is established + or an existing connection is joined depends on whether the ID of an active + connection is provided. The Guacamole protocol dictates that the IDs + generated for active connections (provided during the handshake of those + connections via the `ready instruction <#ready-instruction>`__) must not + collide with any supported protocols. + + This is the first instruction sent during the handshake phase. + + :arg string identifier: + The name of the protocol to use, such as "vnc" or "rdp", or the ID of + the active connection to be joined, as returned via the `ready + instruction <#ready-instruction>`__. + +.. guac:instruction:: size + :sent-by: client + :phase: handshake + + Specifies the client's optimal screen size and resolution. + + :arg integer width: + The optimal screen width. + + :arg integer height: + The optimal screen height. + + :arg integer dpi: + The optimal screen resolution, in approximate DPI. + +.. guac:instruction:: timezone + :sent-by: client + :phase: handshake + + Specifies the timezone of the client system, in IANA zone key format. This + is a single-value parameter, and may be used by protocols to set the + timezone on the remote computer, if the remote system allows the timezone + to be configured. This instruction is optional. + + :arg string timezone: + +.. guac:instruction:: video + :sent-by: client + :phase: handshake + + Specifies which video mimetypes are supported by the client. Each parameter + must be a single mimetype, listed in order of client preference, with the + optimal mimetype being the first parameter. + +Server handshake instructions +----------------------------- + +.. guac:instruction:: args + :sent-by: server + :phase: handshake + + Reports the expected format of the argument list for the protocol requested + by the client. This message can be sent by the server during the handshake + phase only. + + The first parameter of this instruction will be the protocol version + supported by the server. This is used to negotiate protocol compatibility + between the client and the server, with the highest supported protocol by + both sides being chosen. Versions of Guacamole prior to 1.1.0 do not + support protocol version negotiation, and will silently ignore this + instruction. + + The remaining parameters of the args instruction are the names of all + connection parameters accepted by the server for the protocol selected by + the client, in order. The client's responding connect instruction must + contain the values of each of these parameters in the same order. + +Control instructions +-------------------- + +.. guac:instruction:: disconnect + :sent-by: client,server + :phase: handshake,interactive + + Notifies the client or server that the connection is about to be closed. + This message can be sent during any phase, and takes no parameters. + +.. guac:instruction:: nop + :sent-by: client,server + :phase: interactive + + The "nop" instruction does absolutely nothing, has no parameters, and is + universally ignored by both Guacamole clients and servers. Its main use is + as a keep-alive signal, and may be sent by guacd, client plugins, or web + applications when there is no activity to ensure the socket is not closed + due to timeout. + +.. guac:instruction:: sync + :sent-by: client,server + :phase: interactive + + Reports that all operations as of the given server-relative timestamp have + been completed. Both client and server are expected to occasionally send + sync to report on current operation execution state, with the server using + sync to denote the end of a logical frame. + + If a sync is received from the server, the client must respond with a + corresponding sync once all previous operations have been completed, or the + server may stop sending updates until the client catches up. For the + client, sending a sync with a timestamp newer than any timestamp received + from the server is an error. + + :arg integer timestamp: + A valid server-relative timestamp. + +Server control instructions +--------------------------- + +.. guac:instruction:: error + :sent-by: server + :phase: handshake,interactive + + Notifies the client that the connection is about to be closed due to the + specified error. This message can be sent by the server during any phase. + + :arg string message: + An arbitrary message describing the error + + :arg integer status: + The Guacamole status code describing the error. For a list of status + codes, see the table in `Status codes <#status-codes>`__. + +.. guac:instruction:: log + :sent-by: server + :phase: interactive + + The log instruction sends an arbitrary string for debugging purposes. This + instruction will be ignored by Guacamole clients, but can be seen in + protocol dumps if such dumps become necessary. Sending a log instruction + can help add context when searching for the cause of a fault in protocol + support. + + :arg string message: + An arbitrary, human-readable message. + +.. guac:instruction:: mouse + :sent-by: server + :phase: interactive + + Reports that a user on the current connection has moved the mouse to the + given coordinates. + + :arg integer x: + The current X coordinate of the mouse pointer. + + :arg integer y: + The current Y coordinate of the mouse pointer. + +.. guac:instruction:: ready + :sent-by: server + :phase: handshake + + The ready instruction sends the ID of a new connection and marks the + beginning of the interactive phase of a new, successful connection. The ID + sent is a completely arbitrary string, and has no standard format. It must + be unique from all existing and future connections and may not match the + name of any installed protocol support. + + :arg string identifier: + An arbitrary, unique identifier for the current connection. This + identifier must be unique from all existing and future connections, + and may not match the name of any installed protocol support (such as + "vnc" or "rdp"). + +Input/Event instructions +------------------------ + +.. guac:instruction:: key + :sent-by: client + :phase: interactive + + Sends the specified key press or release event. + + :arg integer keysym: + The `X11 keysym `__ of the key being + pressed or released. + + :arg integer pressed: + 0 if the key is not pressed, 1 if the key is pressed. + +.. guac:instruction:: mouse + :sent-by: client + :phase: interactive + + Sends the specified mouse movement or button press or release event (or + combination thereof). + + :arg integer x: + The current X coordinate of the mouse pointer. + + :arg integer y: + The current Y coordinate of the mouse pointer. + + :arg integer mask: + The button mask, representing the pressed or released status of each + mouse button. + +.. guac:instruction:: size + :sent-by: client + :phase: interactive + + Specifies that the client's optimal screen size has changed from what was + specified during the handshake, or from previously-sent "size" + instructions. + + :arg integer width: + The new, optimal screen width. + + :arg integer height: + The new, optimal screen height. + +Status codes +------------ + +Several Guacamole instructions, and various other internals of the Guacamole +core, use a common set of numeric status codes. These codes denote success or +failure of operations, and can be rendered by user interfaces in a +human-readable way. + +0 (``SUCCESS``) + The operation succeeded. No error. + +256 (``UNSUPPORTED``) + The requested operation is unsupported. + +512 (``SERVER_ERROR``) + An internal error occurred, and the operation could not be performed. + +513 (``SERVER_BUSY``) + The operation could not be performed because the server is busy. + +514 (``UPSTREAM_TIMEOUT``) + The upstream server is not responding. In most cases, the upstream server + is the remote desktop server. + +515 (``UPSTREAM_ERROR``) + The upstream server encountered an error. In most cases, the upstream + server is the remote desktop server. + +516 (``RESOURCE_NOT_FOUND``) + An associated resource, such as a file or stream, could not be found, and + thus the operation failed. + +517 (``RESOURCE_CONFLICT``) + A resource is already in use or locked, preventing the requested operation. + +518 (``RESOURCE_CLOSED``) + The requested operation cannot continue because the associated resource has + been closed. + +519 (``UPSTREAM_NOT_FOUND``) + The upstream server does not appear to exist, or cannot be reached over the + network. In most cases, the upstream server is the remote desktop server. + +520 (``UPSTREAM_UNAVAILABLE``) + The upstream server is refusing to service connections. In most cases, the + upstream server is the remote desktop server. + +521 (``SESSION_CONFLICT``) + The session within the upstream server has ended because it conflicts with + another session. In most cases, the upstream server is the remote desktop + server. + +522 (``SESSION_TIMEOUT``) + The session within the upstream server has ended because it appeared to be + inactive. In most cases, the upstream server is the remote desktop server. + +523 (``SESSION_CLOSED``) + The session within the upstream server has been forcibly closed. In most + cases, the upstream server is the remote desktop server. + +768 (``CLIENT_BAD_REQUEST``) + The parameters of the request are illegal or otherwise invalid. + +769 (``CLIENT_UNAUTHORIZED``) + Permission was denied, because the user is not logged in. Note that the + user may be logged into Guacamole, but still not logged in with respect to + the remote desktop server. + +771 (``CLIENT_FORBIDDEN``) + Permission was denied, and logging in will not solve the problem. + +776 (``CLIENT_TIMEOUT``) + The client (usually the user of Guacamole or their browser) is taking too + long to respond. + +781 (``CLIENT_OVERRUN``) + The client has sent more data than the protocol allows. + +783 (``CLIENT_BAD_TYPE``) + The client has sent data of an unexpected or illegal type. + +797 (``CLIENT_TOO_MANY``) + The client is already using too many resources. Existing resources must be + freed before further requests are allowed. + +Message Codes +------------- + +The `msg` instruction must have at least one numeric argument that the client +then uses to interpret the message and determine what action, if any, it +should take based on the message. The following numeric codes are currently +implemented for this instruction. + +1 (``USER_JOINED``) + Notifies the owner of a connection that another user has joined the + connection. This message is expected to include two additional + arguments: the guacd-generated UUID of the user who is joining the + connection, and the arbitrary name of the user provided by the + client during the handshake. + +2 (``USER_LEFT``) + Notifies the owner of a connection that another user has left the + connection. This message is expected to include two additional + arguments: the guacd-generated UUID of the user who is leaving the + connection, and the arbitrary name of the user provided by the + client during the handshake. diff --git a/doc/1.5.5/gug/_sources/radius-auth.md.txt b/doc/1.5.5/gug/_sources/radius-auth.md.txt new file mode 100644 index 000000000..b80bf375c --- /dev/null +++ b/doc/1.5.5/gug/_sources/radius-auth.md.txt @@ -0,0 +1,250 @@ +RADIUS Authentication +===================== + +Guacamole supports delegating authentication to a RADIUS service, such as +FreeRADIUS, to validate username and password combinations, and to support +multi-factor authentication. This authentication method must be layered on top +of some other authentication extension, such as those available from the main +project website, in order to provide access to actual connections. + +(radius-downloading)= + +Downloading the RADIUS authentication extension +----------------------------------------------- + +The RADIUS extension depends on software that is covered by a LGPL license, +which is incompatible with the Apache 2.0 license under which Guacamole is +licensed. Due to this dependency, the Guacamole project cannot distribute +binary versions of the RADIUS extension. If you want to use this extension you +will need to build the code - or at least the RADIUS extension yourself. Build +instructions can be found in the section [](installing-guacamole). + +(installing-radius-auth)= + +Installing RADIUS authentication +-------------------------------- + +The RADIUS extension must be explicitly enabled during build time in order to +generate the binaries and resulting JAR file. This is done by adding the flag +`-Plgpl-extensions` to the Maven command line during the build, and should +result in the output below: + + :::{code-block} console + :emphasize-lines: 35,71 + $ mvn clean package -Plgpl-extensions + [INFO] Scanning for projects... + [INFO] ------------------------------------------------------------------------ + [INFO] Reactor Build Order: + [INFO] + [INFO] guacamole-client [pom] + [INFO] guacamole-common [jar] + [INFO] guacamole-ext [jar] + [INFO] guacamole-common-js [pom] + [INFO] guacamole [war] + [INFO] extensions [pom] + [INFO] guacamole-auth-duo [jar] + [INFO] guacamole-auth-header [jar] + [INFO] guacamole-auth-jdbc [pom] + [INFO] guacamole-auth-jdbc-base [jar] + [INFO] guacamole-auth-jdbc-mysql [jar] + [INFO] guacamole-auth-jdbc-postgresql [jar] + [INFO] guacamole-auth-jdbc-sqlserver [jar] + [INFO] guacamole-auth-jdbc-dist [pom] + [INFO] guacamole-auth-json [jar] + [INFO] guacamole-auth-ldap [jar] + [INFO] guacamole-auth-quickconnect [jar] + [INFO] guacamole-auth-sso [pom] + [INFO] guacamole-auth-sso-base [jar] + [INFO] guacamole-auth-sso-cas [jar] + [INFO] guacamole-auth-sso-openid [jar] + [INFO] guacamole-auth-sso-saml [jar] + [INFO] guacamole-auth-sso-dist [pom] + [INFO] guacamole-auth-totp [jar] + [INFO] guacamole-history-recording-storage [jar] + [INFO] guacamole-vault [pom] + [INFO] guacamole-vault-base [jar] + [INFO] guacamole-vault-ksm [jar] + [INFO] guacamole-vault-dist [pom] + [INFO] guacamole-auth-radius [jar] + [INFO] guacamole-example [war] + [INFO] guacamole-playback-example [war] + ... + [INFO] ------------------------------------------------------------------------ + [INFO] Reactor Summary for guacamole-client 1.5.5: + [INFO] + [INFO] guacamole-client ................................... SUCCESS [ 12.839 s] + [INFO] guacamole-common ................................... SUCCESS [ 15.446 s] + [INFO] guacamole-ext ...................................... SUCCESS [ 19.988 s] + [INFO] guacamole-common-js ................................ SUCCESS [ 22.000 s] + [INFO] guacamole .......................................... SUCCESS [01:08 min] + [INFO] extensions ......................................... SUCCESS [ 0.451 s] + [INFO] guacamole-auth-duo ................................. SUCCESS [ 7.043 s] + [INFO] guacamole-auth-header .............................. SUCCESS [ 4.836 s] + [INFO] guacamole-auth-jdbc ................................ SUCCESS [ 0.244 s] + [INFO] guacamole-auth-jdbc-base ........................... SUCCESS [ 8.011 s] + [INFO] guacamole-auth-jdbc-mysql .......................... SUCCESS [ 4.717 s] + [INFO] guacamole-auth-jdbc-postgresql ..................... SUCCESS [ 5.098 s] + [INFO] guacamole-auth-jdbc-sqlserver ...................... SUCCESS [ 5.620 s] + [INFO] guacamole-auth-jdbc-dist ........................... SUCCESS [ 4.031 s] + [INFO] guacamole-auth-json ................................ SUCCESS [ 6.319 s] + [INFO] guacamole-auth-ldap ................................ SUCCESS [ 8.948 s] + [INFO] guacamole-auth-quickconnect ........................ SUCCESS [ 9.128 s] + [INFO] guacamole-auth-sso ................................. SUCCESS [ 0.270 s] + [INFO] guacamole-auth-sso-base ............................ SUCCESS [ 3.665 s] + [INFO] guacamole-auth-sso-cas ............................. SUCCESS [ 12.263 s] + [INFO] guacamole-auth-sso-openid .......................... SUCCESS [ 5.667 s] + [INFO] guacamole-auth-sso-saml ............................ SUCCESS [ 5.068 s] + [INFO] guacamole-auth-sso-dist ............................ SUCCESS [ 4.884 s] + [INFO] guacamole-auth-totp ................................ SUCCESS [ 9.310 s] + [INFO] guacamole-history-recording-storage ................ SUCCESS [ 3.131 s] + [INFO] guacamole-vault .................................... SUCCESS [ 0.231 s] + [INFO] guacamole-vault-base ............................... SUCCESS [ 4.671 s] + [INFO] guacamole-vault-ksm ................................ SUCCESS [ 6.411 s] + [INFO] guacamole-vault-dist ............................... SUCCESS [ 3.421 s] + [INFO] guacamole-auth-radius .............................. SUCCESS [ 10.806 s] + [INFO] guacamole-example .................................. SUCCESS [ 2.052 s] + [INFO] guacamole-playback-example ......................... SUCCESS [ 0.938 s] + [INFO] ------------------------------------------------------------------------ + [INFO] BUILD SUCCESS + [INFO] ------------------------------------------------------------------------ + [INFO] Total time: 04:36 min + [INFO] Finished at: 2023-01-10T17:27:11-08:00 + [INFO] ------------------------------------------------------------------------ + $ + ::: + +After the build completes successfully, the extension will be in the +`extensions/guacamole-auth-radius/target/` directory, and will be called +guacamole-auth-radius-1.5.5.jar. This extension file can be copied to the +`GUACAMOLE_HOME/extensions` directory. *If you are unsure where +`GUACAMOLE_HOME` is located on your system, please consult +[](configuring-guacamole) before proceeding.* + +Extensions are loaded in alphabetical order, and authentication is performed in +the order in which the extensions were loaded. If you are stacking the RADIUS +extension with another extension, like the JDBC extension, in order to store +connection information, you may need to change the name of the RADIUS extension +such that it is evaluated prior to the JDBC extension - otherwise an +authentication failure in one of the previous modules may block the RADIUS +module from ever being evaluated. + +To install the RADIUS authentication extension, you must: + +1. Create the `GUACAMOLE_HOME/extensions` directory, if it does not already + exist. + +2. Copy `guacamole-auth-radius-1.5.5.jar` into `GUACAMOLE_HOME/extensions`. + +3. Configure Guacamole to use RADIUS authentication, as described below. + +(guac-radius-config)= + +Configuring Guacamole for RADIUS authentication +----------------------------------------------- + +This extension provides several configuration properties in order to +communicate properly with the RADIUS server to which it needs to authenticate. +It is important that you know several key pieces of information about the +RADIUS server - at a minimum, the server name or IP, the authentication port, +the authentication protocol in use by the server, and the shared secret for the +RADIUS client. If you are responsible for the RADIUS server, you'll need to +properly configure these items to get Guacamole to authenticate properly. If +you're not responsible for the RADIUS server you will need to work with the +administrator to get all of the necessary configuration items for the server. +These items will need to be configured in the +[`guacamole.properties`](initial-setup) file. + +`radius-hostname` +: The RADIUS server to authenticate against. If not specified, localhost will + be used. + +`radius-auth-port` +: The RADIUS authentication port on which the RADIUS service is is listening. + If not specified, the default of 1812 will be used. + +`radius-shared-secret` +: The shared secret to use when talking to the RADIUS server. This parameter is + required and the extension will not load if this is not specified. + +`radius-auth-protocol` +: The authentication protocol to use when talking to the RADIUS server. This + parameter is required for the extension to operate. Supported values are: + pap, chap, mschapv1, mschapv2, eap-md5, eap-tls, and eap-ttls. Support for + PEAP is implemented inside the extension, but, due to a regression in the + JRadius implementation, it is currently broken. Also, if you specify eap-ttls + you will also need to specify the `radius-eap-ttls-inner-protocol` parameter + in order to properly configure the protocol used inside the EAP TTLS tunnel. + +`radius-key-file` +: The combination certificate and private key pair to use for TLS-based RADIUS + protocols that require a client-side certificate. This parameter should specify + the absolute path to the file. By default the extension will look for a file + called `radius.key` in the `GUACAMOLE_HOME` directory. + +`radius-key-type` +: The file type of the keystore specified by the `radius-key-file` parameter. + Valid keystore types are pem, jceks, jks, and pkcs12. If not specified, this + defaults to pkcs12, the default used by the JRadius library. + +`radius-key-password` +: The password of the private key specified in the `radius-key-file` parameter. + By default the extension will not use any password when trying to open the + key file. + +`radius-ca-file` +: The absolute path to the file that stores the certificate authority + certificates for encrypted connections to the RADIUS server. By default a + file with the name ca.crt in the `GUACAMOLE_HOME` directory will be used. + +`radius-ca-type` +: The file type of keystore used for the certificate authority. Valid formats + are pem, jceks, jks, and pkcs12. If not specified this defaults to pem. + +`radius-ca-password` +: The password used to protect the certificate authority store, if any. If + unspecified the extension will attempt to read the CA store without any + password. + +`radius-trust-all` +: This parameter controls whether or not the RADIUS extension should trust all + certificates or verify them against known good certificate authorities. Set + to true to allow the RADIUS server to connect without validating + certificates. The default is false, which causes certificates to be + validated. + +`radius-retries` +: The number of times the client will retry the connection to the RADIUS server + and not receive a response before giving up. By default the client will try + the connection at most 5 times. + +`radius-timeout` +: The timeout for a RADIUS connection in seconds. By default the client will + wait for a response from the server for at most 60 seconds. + +`radius-eap-ttls-inner-protocol` +: When EAP-TTLS is used, this parameter specifies the inner (tunneled) protocol + to use talking to the RADIUS server. It is required when the + `radius-auth-protocol` parameter is set to eap-ttls. If the + `radius-auth-protocol` value is set to something other than eap-ttls, this + parameter has no effect and will be ignored. Valid options for this are any of + the values for `radius-auth-protocol`, except for eap-ttls. + +`radius-nas-ip` +: This property allows the server administrator to manually set an IP address + that will be sent to the RADIUS server to identify this RADIUS client, known + as the "Network Access Server" (NAS) IP address. When this property is not + specified, the RADIUS extension attempts to automatically determine the IP + address of the system on which Guacamole is running and uses that value. + +(completing-radius-install)= + +Completing the installation +--------------------------- + +Guacamole will only reread `guacamole.properties` and load newly-installed +extensions during startup, so your servlet container will need to be restarted +before HTTP header authentication can be used. *Doing this will disconnect all +active users, so be sure that it is safe to do so prior to attempting +installation.* When ready, restart your servlet container and give the new +authentication a try. + diff --git a/doc/1.5.5/gug/_sources/recording-playback.md.txt b/doc/1.5.5/gug/_sources/recording-playback.md.txt new file mode 100644 index 000000000..ce23b5205 --- /dev/null +++ b/doc/1.5.5/gug/_sources/recording-playback.md.txt @@ -0,0 +1,247 @@ +Viewing session recordings in-browser +===================================== + +Guacamole supports [recording activity within remote desktop sessions](graphical-recording) +such that it can be played back and reviewed later. Graphical recordings can be +converted to video [using the `guacenc` tool](graphical-recording) (part of +[guacamole-server](building-guacamole-server)) or can be played back directly +in the browser in their native format using Guacamole itself. This has several +benefits: + +* Recordings can be played back while the session is underway. +* Recordings need not be re-encoded as traditional video, an + intensive process that often results in a larger file. +* It is very easy to locate and play back the recording for a session when + doing so only involves clicking a button in the connection history. + +This chapter of the documentation covers installing and using the extension +that allows recordings stored on disk to be played back in the browser. + +:::{important} +This chapter involves modifying the contents of `GUACAMOLE_HOME` - the +Guacamole configuration directory. If you are unsure where `GUACAMOLE_HOME` is +located on your system, please consult [](configuring-guacamole) before +proceeding. +::: + +(playback-architecture)= + +How recording storage and playback works +---------------------------------------- + +The Guacamole web application includes its own support for playing back +recordings from the history screen in the administration interface, but that +support cannot automatically know where those recordings are stored nor how +they are named. The extension documented here provides exactly that missing +piece, allowing the web application to find recordings on disk so long as they +are named appropriately and stored in a specific location. + +Each history entry has a deterministic, internal, unique identifier called its +UUID, and all supported database backends make this UUID available ahead of +time with the `${HISTORY_UUID}` parameter token. This provides a reliable way +for data stored _outside_ the database to be associated with history entries +that are otherwise stored purely _inside_ the database, and it is this UUID +that the extension searches for when locating the recording for a history entry. + +When a user lists the history of a connection, the recording storage extension +additionally [searches a predetermined location](recording-storage-config) for +session recordings that match either of the following criteria: + +* The recording's filename is _identical_ to the history entry UUID and is + directly within the search path. + +* The recording has any name at all and is within a directory whose filename is + identical to the history entry UUID and is directly within the search path. + +If such a recording is found, it is made available to any user that can view +the history entry. The availability of a recording is displayed as a "View" +link in the "Logs" column of the history table: + +![View link in the history UI](images/history-table-with-recordings.png) + +Clicking on that link navigates to a screen with a player that loads the +recording and allows it to be played back: + +![In-browser player interface](images/recording-player-in-use.png) + +(playback-downloading)= + +Downloading the recording storage extension +------------------------------------------- + +The recording storage extension is available separately from the main +`guacamole.war`. The link for this and all other officially-supported and +compatible extensions for a particular version of Guacamole are provided on the +release notes for that version. You can find the release notes for current +versions of Guacamole here: http://guacamole.apache.org/releases/. + +The recording storage extension is packaged as a `.tar.gz` file containing only +the extension itself, `guacamole-history-recording-storage-1.5.5.jar`, which +must ultimately be placed in `GUACAMOLE_HOME/extensions`. + +(installing-recording-storage)= + +Installing the recording storage extension +------------------------------------------ + +Guacamole extensions are self-contained `.jar` files which are located within +the `GUACAMOLE_HOME/extensions` directory. To install the recording storage +extension, you must: + +1. Create the `GUACAMOLE_HOME/extensions` directory, if it does not already + exist. + +2. Copy `guacamole-history-recording-storage-1.5.5.jar` within + `GUACAMOLE_HOME/extensions`. + +3. [Configure your connections to store their recordings within the path + searched by the recording storage extension, as described below.](recording-storage-connection-config) + +:::{important} +You will need to restart Guacamole by restarting your servlet container in +order to complete the installation. Doing this will disconnect all active +users, so be sure that it is safe to do so prior to attempting installation. If +you do not configure the recording storage extension properly, Guacamole will not +start up again until the configuration is fixed. +::: + +(prepare-recording-storage)= + +### Preparing a directory for recording storage + +By default, the recording storage extension will search within +`/var/lib/guacamole/recordings` for the recordings associated with a +connection. Unless you or a third-party installation tool have created this +directory, this directory will not exist and you will need to create it +manually: + +```console +$ mkdir -p /var/lib/guacamole/recordings +``` + +You can also use another directory of your own choosing if you +[override the default location using the `recording-search-path` +property](recording-storage-config). + +:::{important} +The following steps will use `/var/lib/guacamole/recordings`, as it is a +sensible location and the default search path. If you are using a different +path, consider `/var/lib/guacamole/recordings` below to be a placeholder and +use your own path instead. +::: + +Once the path has been created, its permissions and ownerships must be modified +such that _both of the following are true_: + +* The guacd service can write to the directory. +* The servlet container (typically Tomcat) can read from the directory, as well + as read any files that are placed within the directory. + +The simplest way to do this is to ensure that: + +1. The directory is owned by the user that runs the guacd service and the + _group_ that runs the Tomcat service. +2. The directory has read/write/execute permissions for the user (so that guacd + can write here), and read/execute/**setgid** permissions for the group (so + that Tomcat can read here, and so that [any files placed here are automatically + owned by the Tomcat user's group](https://en.wikipedia.org/wiki/Setuid#When_set_on_a_directory)). + +For example, if your guacd service runs as a dedicated `guacd` user, and your +Tomcat service runs as a user within the `tomcat` group: + +```console +$ chown guacd:tomcat /var/lib/guacamole/recordings +$ chmod 2750 /var/lib/guacamole/recordings +``` + +If set correctly, the ownerships and permissions should look like: + +```console +$ ls -ld /var/lib/guacamole/recordings +drwxr-s---. 1 guacd tomcat 0 Feb 5 05:43 /var/lib/guacamole/recordings/ +$ +``` + +(recording-storage-config)= + +### Configuring Guacamole for recording storage + +The recording storage extension has no required properties and typically does +not need to be configured beyond (1) creating the storage directory [as +described above](prepare-recording-storage) and (2) configuring connections to +use that storage directory [as described below](recording-storage-connection-config). +Configuration is only necessary if you wish to use a storage location other +than the default `/var/lib/guacamole/recordings`. + +If you wish to use a different storage location than +`/var/lib/guacamole/recordings`, the following property must be added to +`guacamole.properties`: + +`recording-search-path` +: The directory to search for associated session recordings. This property is + optional. By default, `/var/lib/guacamole/recordings` will be used. + +(completing-recording-storage-install)= + +### Completing the installation + +Guacamole will only reread `guacamole.properties` and load newly-installed +extensions during startup, so your servlet container will need to be restarted +before installation of the recording storage extension will take effect. +Restart your servlet container, configure a connection to use the new storage, +and give in-browser playback a try. + +:::{important} +You only need to restart your servlet container. *You do not need to restart +guacd*. + +guacd is completely independent of the web application and does not deal with +`guacamole.properties` or extensions in any way. Since you are already +restarting the servlet container, restarting guacd as well technically won't +hurt anything, but doing so is completely pointless. +::: + +If Guacamole does not come back online after restarting your servlet container, +check the logs. Problems in the configuration of the recording storage +extension may prevent Guacamole from starting up, and any such errors will be +recorded in the logs of your servlet container. + +(recording-storage-connection-config)= + +Configuring connections to use recording storage +------------------------------------------------ + +Recordings of connections can be found by the recording storage extension as +long as those connections are configured in either of two ways, each involving +naming a file or directory with the history UUID (`${HISTORY_UUID}`). + +### Option 1: Using a subdirectory named with the history UUID (RECOMMENDED) + +If the recording path of a connection is set to +`${HISTORY_PATH}/${HISTORY_UUID}` and "automatically create path" is checked, +then the recording storage extension will be able to locate the recording by +recognizing that the directory is named with the UUID: + +![Configuring session recording with the _path_ containing the history UUID](images/recording-storage-connection-config-option1-recommended.png) + +**This is the recommended method of storing recordings.** This method is the +most flexible in that it allows other recordings like typescripts to be stored +within the same directory, and it allows recordings to be given _any_ name, +including names that are more human-readable, contain [`${GUAC_DATE}` or +`${GUAC_TIME}` tokens](parameter-tokens), etc. + +Though the web application does not currently support in-browser playback of +typescripts, server logs, or other files that might be of interest to the +administrator looking at the history of a connection, it _does_ recognize these +files. Following this method will allow any future support for playback of +other types of recordings to work even for old recordings. + +### Option 2: Naming the recording with the history UUID + +If the recording path of a connection is set to `${HISTORY_PATH}` and the +recording name is set to `${HISTORY_UUID}`, the recording storage extension +will be able to locate the recording by recognizing that its name is identical +to the UUID: + +![Configuring session recording with the _name_ containing the history UUID](images/recording-storage-connection-config-option2.png) + diff --git a/doc/1.5.5/gug/_sources/reverse-proxy.md.txt b/doc/1.5.5/gug/_sources/reverse-proxy.md.txt new file mode 100644 index 000000000..704e4f397 --- /dev/null +++ b/doc/1.5.5/gug/_sources/reverse-proxy.md.txt @@ -0,0 +1,427 @@ +Proxying Guacamole +================== + +Like most web applications, Guacamole can be placed behind a reverse proxy. For +production deployments of Guacamole, this is *highly recommended*. It provides +flexibility and, if your proxy is properly configured for SSL, encryption. + +Proxying isolates privileged operations within native applications that can +safely drop those privileges when no longer needed, using Java only for +unprivileged tasks. On Linux and UNIX systems, a process must be running with +root privileges to listen on any port under 1024, including the standard HTTP +and HTTPS ports (80 and 443 respectively). If the servlet container instead +listens on a higher port, such as the default port 8080, it can run as a +reduced-privilege user, allowing the reverse proxy to bear the burden of root +privileges. As a native application, the reverse proxy can make system calls to +safely drop root privileges once the port is open; a Java application like +Tomcat cannot do this. + +(preparing-servlet-container)= + +Preparing your servlet container +-------------------------------- + +Your servlet container is most likely already configured to listen for HTTP +connections on port 8080 as this is the default. If this is the case, and you +can already access Guacamole over port 8080 from a web browser, you need not +make any further changes to its configuration. + +If you *have* changed this, perhaps with the intent of proxying Guacamole over +AJP, *change it back*. Using Guacamole over AJP is unsupported as it is known +to cause problems, namely: + +1. WebSocket will not work over AJP, forcing Guacamole to fallback to HTTP, + possibly resulting in reduced performance. + +2. Apache 2.4.3 and older does not support the HTTP PATCH method over AJP, + preventing the Guacamole management interface from functioning properly. + +The connector entry within `conf/server.xml` should look like this: + +```xml + +``` + +Be sure to specify the `URIEncoding="UTF-8"` attribute as above to ensure that +connection names, user names, etc. are properly received by the web +application. If you will be creating connections that have Cyrillic, Chinese, +Japanese, or other non-Latin characters in their names or parameter values, +this attribute is required. + +(tomcat-remote-ip)= + +### Setting up the Remote IP Valve + +By default, when Tomcat is behind a reverse proxy, the remote IP address of the +client that it sees is that of the proxy rather than the original client. In +order to allow applications hosted within Tomcat, like Guacamole, to see the +actual IP address of the client, you have to configure both the reverse proxy +and Tomcat. + +Because the remote IP address in Guacamole is used for auditing of user logins +and connections and could potentially be used for authentication, it is +important that you are either in direct control of the proxy server or you +explicitly trust it. Passing the remote IP address is done using the +`X-Forwarded-For` header, and, as with most HTTP headers, attackers can attempt +to spoof this header in order to manipulate the behavior of the web server, +gain unauthorized access to the system, or attempt to disguise the host or IP +address they are coming from. + +One final caveat: This may not work as expected if there are other upstream +proxy servers between your reverse proxy and the clients access Guacamole. +Other proxies or firewalls can mask the IP address of the client, and if the +configuration of those is not within your control you may end up with multiple +clients appearing to come from the same IP address or host. Make sure you take +this into account when configuring the system and looking at the data provided. + +Configuring Tomcat to pass through the remote IP address provided by the +reverse proxy in the `X-Forwarded-For` header requires the configuration of +what Tomcat calls a Valve. In this case, it is the +[`RemoteIpValve`](https://tomcat.apache.org/tomcat-8.5-doc/config/valve.html#Remote_IP_Valve) +and is configured in the `conf/server.xml` file, in the `` section: + +```xml + +``` + +The `internalProxies` value should be set to the IP address or addresses of any +and all reverse proxy servers that will be accessing this Tomcat instance +directly. Often it is run on the same system that runs Tomcat, but in other +cases (for example, when running Docker), it may be on a different +system/container and may need to be set to the actual IP address of the reverse +proxy system. Only proxy servers listed in the `internalProxies` or +`trustedProxies` parameters will be allowed to manipulate the remote IP address +information. The other parameters in this configuration line allow you to +control which headers coming from the proxy server(s) are used for various +remote host information. They are as follows: + +`remoteIpHeader` +: The header that is queried to learn the client IP address of the client + that originated the request. The standard value is `X-Forwarded-For`, but + can be configured to any header you like. The IP address in this header + will be available to Java applications in the `request.getRemoteAddr()` + method. + +`remoteIpProxiesHeader` +: The header that is queried to learn the IP address of the proxy server + that forwarded the request. The default value is `X-Forwarded-By`, but can + be configured to any header that fits your environment. This value will + only be allowed by the valve if the proxy used is listed in the + `trustedProxies` parameter. Otherwise this header will not be available. + +`protocolHeader` +: The header that is queried to determine the protocol that the client used + to connect to the service. The default value is `X-Forwarded-Proto`, but + can be configured to fit your environment. + +In addition to configuring Tomcat to properly handle these headers, you also +may need to configure your reverse proxy appropriately to send the headers. You +can find instructions for this in [](nginx) - the Apache web server passes it +through by default. + +(nginx)= + +Nginx +----- + +Nginx can be used as a reverse proxy, and supports WebSocket out-of-the-box +[since version 1.3](http://nginx.com/blog/websocket-nginx/). Both Apache and +Nginx require some additional configuration for proxying of WebSocket to work +properly. + +(proxying-with-nginx)= + +### Proxying Guacamole + +Nginx does support WebSocket for proxying, but requires that the "Connection" +and "Upgrade" HTTP headers are set explicitly due to the nature of the +WebSocket protocol. From the Nginx documentation: + +> NGINX supports WebSocket by allowing a tunnel to be set up between a client +> and a back-end server. For NGINX to send the Upgrade request from the client +> to the back-end server, Upgrade and Connection headers must be set +> explicitly. ... + +The proxy configuration belongs within a dedicated +[`location`](http://nginx.org/en/docs/http/ngx_http_core_module.html#location>) +block, declaring the backend hosting Guacamole and explicitly specifying the +"`Connection`" and "`Upgrade`" headers mentioned earlier: + +```nginx +location /guacamole/ { + proxy_pass http://HOSTNAME:8080; + proxy_buffering off; + proxy_http_version 1.1; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $http_connection; + access_log off; +} +``` + +Here, `HOSTNAME` is the hostname or IP address of the machine hosting your +servlet container, and 8080 is the port that servlet container is configured to +use. You will need to replace these values with the correct values for your +server. + +Related to the `RemoteIpValve` configuration for tomcat, documented in +[Setting up the Remote IP Valve](tomcat-remote-ip), the `proxy_set_header +X-Forwarded-For $proxy_add_x_forwarded_for;` line is important if you want the +`X-Forwarded-For` header to be passed through to the web application server and +available to applications running inside it. + +:::{important} +*Do not forget to specify "`proxy_buffering off`".* + +Most proxies, including Nginx, will buffer all data sent over the connection, +waiting until the connection is closed before sending that data to the client. +As Guacamole's HTTP tunnel relies on streaming data to the client over an open +connection, excessive buffering will effectively block Guacamole connections, +rendering Guacamole useless. + +*If the option "`proxy_buffering off`" is not specified, Guacamole may not +work*. +::: + +(changing-path-with-nginx)= + +### Changing the path + +If you wish to serve Guacamole through Nginx under a path other than +`/guacamole/`, the easiest method is to simply rename the `.war` file. For +example, if intending to server Guacamole at `/new-path/`, you would: + +1. Rename `guacamole.war` to `new-path.war`. + +2. Update the path within the Nginx configuration to reflect the new + path: + + :::{code-block} nginx + :emphasize-lines: 1 + location /new-path/ { + proxy_pass http://HOSTNAME:8080; + proxy_buffering off; + proxy_http_version 1.1; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $http_connection; + access_log off; + } + ::: + + +Alternatively, the configuration can be altered slightly to handle requests at +a different location externally while still serving internal requests at +`/guacamole/`: + +:::{code-block} nginx +:emphasize-lines: 1-2 +location /new-path/ { + proxy_pass http://HOSTNAME:8080/guacamole/; + proxy_buffering off; + proxy_http_version 1.1; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $http_connection; + access_log off; +} +::: + +(nginx-file-upload-size)= + +### Adjusting file upload limits + +When proxying Guacamole through Nginx, you may run into issues with the default +limitations that Nginx places on file uploads (1MB). The errors you receive can +be non-intuitive (permission denied, for example), but may be indicative of +these limits. The `client_max_body_size` parameter can be set within the +`location` block to configure the maximum file upload size: + +:::{code-block} nginx +:emphasize-lines: 8 +location /guacamole/ { + proxy_pass http://HOSTNAME:8080; + proxy_buffering off; + proxy_http_version 1.1; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $http_connection; + client_max_body_size 1g; + access_log off; +} +::: + +(apache)= + +Apache and mod_proxy +-------------------- + +Apache supports reverse proxy configurations through +[mod_proxy](http://httpd.apache.org/docs/2.4/mod/mod_proxy.html). Apache 2.4.5 +and later also support proxying of WebSocket through a sub-module called +[mod_proxy_wstunnel](http://httpd.apache.org/docs/2.4/mod/mod_proxy_wstunnel.html). +Both of these modules will need to be enabled for proxying of Guacamole to work +properly. + +Lacking mod_proxy_wstunnel, it is still possible to proxy Guacamole, but +Guacamole will be unable to use WebSocket. It will instead fallback to using +the HTTP tunnel, resulting in reduced performance. + +(proxying-with-apache)= + +### Proxying Guacamole + +Configuring Apache to proxy HTTP requests requires using the `ProxyPass` and +`ProxyPassReverse` directives, which are provided by the mod_proxy module. +These directives describe how HTTP traffic should be routed to the web server +behind the proxy: + +```apache + + Order allow,deny + Allow from all + ProxyPass http://HOSTNAME:8080/guacamole/ flushpackets=on + ProxyPassReverse http://HOSTNAME:8080/guacamole/ + +``` + +Here, `HOSTNAME` is the hostname or IP address of the machine hosting your +servlet container, and `8080` is the port that servlet container is configured +to use. You will need to replace these values with the correct values for your +server. + +:::{important} +*Do not forget the `flushpackets=on` option.* + +Most proxies, including mod_proxy, will buffer all data sent over the +connection, waiting until the connection is closed before sending that data to +the client. As Guacamole's HTTP tunnel relies on streaming data to the client +over an open connection, excessive buffering will effectively block Guacamole +connections, rendering Guacamole useless. + +*If the option `flushpackets=on` is not specified, Guacamole may not work*. +::: + +(websocket-and-apache)= + +### Proxying the WebSocket tunnel + +Apache will not automatically proxy WebSocket connections, but you can proxy +them separately with Apache 2.4.5 and later using mod_proxy_wstunnel. After +enabling mod_proxy_wstunnel a secondary `Location` section can be added which +explicitly proxies the Guacamole WebSocket tunnel, located at +`/guacamole/websocket-tunnel`: + +:::{code-block} apache +:emphasize-lines: 8-13 + + Order allow,deny + Allow from all + ProxyPass http://HOSTNAME:8080/guacamole/ flushpackets=on + ProxyPassReverse http://HOSTNAME:8080/guacamole/ + + + + Order allow,deny + Allow from all + ProxyPass ws://HOSTNAME:8080/guacamole/websocket-tunnel + ProxyPassReverse ws://HOSTNAME:8080/guacamole/websocket-tunnel + +::: + +Lacking this, Guacamole will still work by using normal HTTP, but network +latency will be more pronounced with respect to user input, and performance may +be lower. + +:::{important} +**The `Location` section for `/guacamole/websocket-tunnel` must be placed after +the `Location` section for the rest of Guacamole.** + +Apache evaluates all Location sections, giving priority to the last section +that matches. If the `/guacamole/websocket-tunnel` section comes first, the +section for `/guacamole/` will match instead, and WebSocket will not be proxied +correctly. +::: + +(changing-path-with-apache)= + +### Changing the path + +If you wish to serve Guacamole through Apache under a path other than +`/guacamole/`, the easiest method is to simply rename the `.war` file. For +example, if intending to server Guacamole at `/new-path/`, you would: + +1. Rename `guacamole.war` to `new-path.war`. + +2. Update the paths within the Apache configuration to reflect the new path: + + :::{code-block} apache + :emphasize-lines: 1,4-5,8,11-12 + + Order allow,deny + Allow from all + ProxyPass http://HOSTNAME:8080/new-path/ flushpackets=on + ProxyPassReverse http://HOSTNAME:8080/new-path/ + + + + Order allow,deny + Allow from all + ProxyPass ws://HOSTNAME:8080/new-path/websocket-tunnel + ProxyPassReverse ws://HOSTNAME:8080/new-path/websocket-tunnel + + ::: + +Alternatively, the configuration can be altered slightly to handle requests at +a different location externally while still serving internal requests at +`/guacamole/`: + +:::{code-block} apache +:emphasize-lines: 1,8 + + Order allow,deny + Allow from all + ProxyPass http://HOSTNAME:8080/guacamole/ flushpackets=on + ProxyPassReverse http://HOSTNAME:8080/guacamole/ + + + + Order allow,deny + Allow from all + ProxyPass ws://HOSTNAME:8080/guacamole/websocket-tunnel + ProxyPassReverse ws://HOSTNAME:8080/guacamole/websocket-tunnel + +::: + +(disable-tunnel-logging)= + +### Disabling logging of tunnel requests + +If WebSocket is unavailable, Guacamole will fallback to using an HTTP-based +tunnel. The Guacamole HTTP tunnel works by transferring a continuous stream of +data over multiple short-lived streams, each associated with a separate HTTP +request. By default, Apache will log each of these requests, resulting in a +rather bloated access log. + +There is little value in a log file filled with identical tunnel requests, so +it is recommended to explicitly disable logging of those requests. Apache does +provide a means of matching URL patterns and setting environment variables +based on whether the URL matches. Logging can then be restricted to requests +which lack this environment variable: + +```apache +SetEnvIf Request_URI "^/guacamole/tunnel" dontlog +CustomLog /var/log/apache2/guac.log common env=!dontlog +``` + +Note that if you are serving Guacamole under a path different from +`/guacamole/`, you will need to change the value of `Request_URI` above +accordingly. + diff --git a/doc/1.5.5/gug/_sources/saml-auth.md.txt b/doc/1.5.5/gug/_sources/saml-auth.md.txt new file mode 100644 index 000000000..803d1dce5 --- /dev/null +++ b/doc/1.5.5/gug/_sources/saml-auth.md.txt @@ -0,0 +1,144 @@ +SAML Authentication +=================== + +SAML is a widely implemented and used Single Sign On (SSO) provider that allows +applications and services to authenticate in a standard way, and brokers those +authentication requests to one or more back-end authentication providers. The +SAML authentication extension allows Guacamole to redirect to a SAML Identity +Provider (IdP) for authentication and user services. This module does not +provide any capability for storing or retrieving connections, and must be +layered with other authentication extensions that provide connection +management. + +(saml-downloading)= + +Downloading the SAML authentication extension +--------------------------------------------- + +```{include} include/sso-download.md +``` + +The extension for the desired SSO method, in this case +`guacamole-auth-sso-saml-1.5.5.jar` from within the `saml/` subdirectory, +must ultimately be placed in `GUACAMOLE_HOME/extensions`. + +(installing-saml-auth)= + +Installing SAML authentication +------------------------------ + +Guacamole extensions are self-contained `.jar` files which are located within +the `GUACAMOLE_HOME/extensions` directory. *If you are unsure where +`GUACAMOLE_HOME` is located on your system, please consult +[](configuring-guacamole) before proceeding.* + +To install the SAML authentication extension, you must: + +1. Create the `GUACAMOLE_HOME/extensions` directory, if it does not already + exist. + +2. Copy `guacamole-auth-sso-saml-1.5.5.jar` within `GUACAMOLE_HOME/extensions`. + +3. Configure Guacamole to use SAML authentication, as described below. + +(guac-saml-config)= + +### Configuring Guacamole for SAML Authentication + +The SAML authentication extension provides several configuration properties to +set it up to talk to the IdP. The SAML IdP also must be configured with +Guacamole as a Service Provider (SP). Configuration of the SAML IdP is beyond +the scope of this document, and will vary widely based on the IdP in use. + +`saml-idp-metadata-url` +: The URI of the XML metadata file that from the SAML Identity Provider that + contains all of the information the SAML extension needs in order to know how + to authenticate with the IdP. This URI can either be a remote server (e.g. + `https://`) or a local file on the filesystem (e.g. `file://`). Often the + metadata file contains most of the required properties for SAML + authentication and the other parameters are not required. + +`saml-idp-url` +: The base URL of the SAML IdP. This is the URL that the SAML authentication + extension will use to redirect when requesting SAML authentication. If the + `saml-idp-metadata-url` property is provided, this parameter will be ignored. + If the metadata file is not provided this property is required. + +`saml-entity-id` +: The entity ID of the Guacamole SAML client, which is generally the URL of the + Guacamole server, but is not required to be so. This property is required if + either the `saml-idp-metadata-url` property is not specified, or if the + provided metadata file does not contain the SAML SP Entity ID for Guacamole + Client. + +`saml-callback-url` +: The URL that the IdP will use once authentication has succeeded to return to + the Guacamole web application and provide the authentication details to the + SAML extension. The SAML extension currently only supports callback as a POST + operation to this callback URL. This property is required. + +`saml-strict` +: Require strict security checks during SAML logins. This will insure that + valid certificates are present for all interactions with SAML servers and + fail SAML authentication if security restrictions are violated. This property + is optional, and will default to true, requiring strict security checks. This + property should only be set to false in non-production environments during + testing of SAML authentication. + +`saml-debug` +: Enable additional logging within the supporting SAML library that can assist + in tracking down issues during SAML logins. This property is optional, and + will default to false (no debugging). + +`saml-compress-request` +: Enable compression of the HTTP requests sent to the SAML IdP. This property + is optional and will default to true (compression enabled). + +`saml-compress-response` +: Request that the SAML response returned by the IdP be compressed. This + property is optional and will default to true (compression will be + requested). + +`saml-group-attribute` +: The name of the attribute provided by the SAML IdP that contains group + membership of the user. These groups will be parsed and used to map group + membership of the user logging in, which can be used for permissions + management within Guacamole Client, particularly when layered with other + authentication modules. This property is optional, and defaults to "groups". + +### Controlling login behavior + +```{include} include/sso-login-behavior.md +``` + +#### Automatically redirecting all unauthenticated users + +To ensure users are redirected to the SAML identity provider immediately +(without a Guacamole login screen), ensure the SAML extension has priority over +all others: + +``` +extension-priority: saml +``` + +#### Presenting unauthenticated users with a login screen + +To ensure users are given a normal Guacamole login screen and have the option +to log in with traditional credentials _or_ with SAML, ensure the SAML +extension does not have priority: + +``` +extension-priority: *, saml +``` + +(completing-saml-install)= + +### Completing the installation + +Guacamole will only reread `guacamole.properties` and load newly-installed +extensions during startup, so your servlet container will need to be restarted +before SAML authentication can be used. *Doing this will disconnect all active +users, so be sure that it is safe to do so prior to attempting installation.* +When ready, restart your servlet container and give the new authentication a +try. + diff --git a/doc/1.5.5/gug/_sources/totp-auth.md.txt b/doc/1.5.5/gug/_sources/totp-auth.md.txt new file mode 100644 index 000000000..8230783a5 --- /dev/null +++ b/doc/1.5.5/gug/_sources/totp-auth.md.txt @@ -0,0 +1,186 @@ +TOTP two-factor authentication +============================== + +Guacamole supports TOTP as a second authentication factor, layered on top of +any other authentication extension, including those available from the main +project website, providing [base requirements for key storage and +enrollment](totp-prerequisites) are met. The TOTP authentication extension +allows users to be additionally verified against a user-specific and secret key +generated during [enrollment of their authentication device](totp-enrollment). + +:::{important} +This chapter involves modifying the contents of `GUACAMOLE_HOME` - the +Guacamole configuration directory. If you are unsure where `GUACAMOLE_HOME` is +located on your system, please consult [](configuring-guacamole) before +proceeding. +::: + +(totp-prerequisites)= + +Prerequisites +------------- + +The enrollment process used by Guacamole's TOTP support needs to be able +to store an automatically-generated key within the user's account. +Another extension must be installed which supports storage of arbitrary +data from other extensions. *Currently the only extensions provided with +Guacamole which support this kind of storage are the [database +authentication extensions](jdbc-auth).* + +It is thus recommended that authentication against a database be fully +configured prior to setting up TOTP. Instructions walking through the setup of +database authentication for Guacamole are provided in [](jdbc-auth). + +(totp-architecture)= + +How TOTP works with Guacamole +----------------------------- + +Guacamole provides support for TOTP as a second authentication factor. To make +use of the TOTP authentication extension, some other authentication mechanism +will need be configured, as well. When a user attempts to log into Guacamole, +other installed authentication methods will be queried first: + +![](images/totp-auth-factor-1.png) + +Only after authentication has succeeded with one of those methods will +Guacamole prompt the user to further verify their identity with an +authentication code: + +![](images/totp-auth-factor-2.png) + +If both the initial authentication attempt and verification using TOTP succeed, +the user will be allowed in. If either mechanism fails, access to Guacamole is +denied. + +(totp-enrollment)= + +### Enrollment + +If the user does not yet have a TOTP key associated with their account (they +have not yet completed enrollment), they will be required to enroll an +authentication device after passing the first authentication factor. A QR code +containing an automatically-generated key will be presented to the user to be +scanned by their authentication app or device: + +![](images/totp-enroll.png) + +If the authentication device does not support scanning QR codes for enrollment, +the details within the QR code can be revealed by clicking the "Show" link next +to the "Details" header. These values can then be entered manually: + +![](images/totp-enroll-detail.png) + +Enrollment is completed once the user enters a valid authentication code +generated by their device using the provided key. + +(totp-reset-data)= + +### Reseting TOTP Data + +It may become necessary for certain users to clear their TOTP key and/or force +them to re-confirm enrollment, such as in situations where a user loses their +phone and needs to reconfigure TOTP. The user's existing TOTP key can be cleared +by checking the "Clear TOTP secret" box in the user interface and then saving the +user configuration. The next time that the user logs in, they will be given a new +key (QR code) and forced to re-enroll. + +If you simply want a user to be able to re-configure an existing key, without +resetting the secret, you can un-check the box marked "TOTP key confirmed" and +save the user configuration, and the user will be presented with the QR code +at next login and asked to confirm it. + +![](images/totp-user-config.png) + +(totp-downloading)= + +Downloading the TOTP extension +------------------------------ + +The TOTP authentication extension is available separately from the main +`guacamole.war`. The link for this and all other officially-supported and +compatible extensions for a particular version of Guacamole are provided on the +release notes for that version. You can find the release notes for current +versions of Guacamole here: . + +The TOTP authentication extension is packaged as a `.tar.gz` file containing +only the extension itself, `guacamole-auth-totp-1.5.5.jar`, which must +ultimately be placed in `GUACAMOLE_HOME/extensions`. + +(installing-totp-auth)= + +Installing TOTP authentication +------------------------------ + +Guacamole extensions are self-contained `.jar` files which are located within +the `GUACAMOLE_HOME/extensions` directory. To install the TOTP authentication +extension, you must: + +1. Create the `GUACAMOLE_HOME/extensions` directory, if it does not already + exist. + +2. Copy `guacamole-auth-totp-1.5.5.jar` within `GUACAMOLE_HOME/extensions`. + +3. Configure Guacamole to use TOTP authentication, as described below. + +:::{important} +You will need to restart Guacamole by restarting your servlet container in +order to complete the installation. Doing this will disconnect all active +users, so be sure that it is safe to do so prior to attempting installation. If +you do not configure the TOTP authentication properly, Guacamole will not start +up again until the configuration is fixed. +::: + +(guac-totp-config)= + +### Configuring Guacamole for TOTP + +With the exception of [the storage and permission requirements described +above](totp-prerequisites), the TOTP extension should work out-of-the-box +without any additional configuration. Defaults have been chosen for all +configuration parameters such that the TOTP extension will be compatible with +Google Authenticator and similar, popular TOTP implementations. + +If your intended authentication application or device has different +requirements, or you wish to override the defaults, additional properties may +be specified within `guacamole.properties`: + +`totp-issuer` +: The human-readable name of the entity issuing user accounts. If not + specified, "Apache Guacamole" will be used by default. + +`totp-digits` +: The number of digits which should be included in each generated TOTP code. + Legal values are 6, 7, or 8. By default, 6-digit codes are generated. + +`totp-period` +: The duration that each generated code should remain valid, in seconds. By + default, each code remains valid for 30 seconds. + +`totp-mode` +: The hash algorithm that should be used to generate TOTP codes. Legal values + are "sha1", "sha256", and "sha512". By default, "sha1" is used. + +(completing-totp-install)= + +### Completing the installation + +Guacamole will only reread `guacamole.properties` and load newly-installed +extensions during startup, so your servlet container will need to be restarted +before TOTP authentication will take effect. Restart your servlet container +and give the new authentication a try. + +:::{important} +You only need to restart your servlet container. *You do not need to restart +guacd*. + +guacd is completely independent of the web application and does not deal with +`guacamole.properties` or the authentication system in any way. Since you are +already restarting the servlet container, restarting guacd as well technically +won't hurt anything, but doing so is completely pointless. +::: + +If Guacamole does not come back online after restarting your servlet container, +check the logs. Problems in the configuration of the TOTP extension may prevent +Guacamole from starting up, and any such errors will be recorded in the logs of +your servlet container. diff --git a/doc/1.5.5/gug/_sources/troubleshooting.md.txt b/doc/1.5.5/gug/_sources/troubleshooting.md.txt new file mode 100644 index 000000000..dc62767b8 --- /dev/null +++ b/doc/1.5.5/gug/_sources/troubleshooting.md.txt @@ -0,0 +1,542 @@ +Troubleshooting +=============== + +(not-working)= + +It isn't working +---------------- + +If Guacamole isn't working, chances are something isn't configured properly, or +something is wrong with the network. Thankfully, Guacamole and all its +components log errors thoroughly, so the problem can usually be traced down +fairly easily if you know where to look. Troubleshooting Guacamole usually +boils down to checking either syslog or your servlet container's logs (likely +Tomcat). + +Failing all that, you can always post a question on [one of the project mailing +lists](http://guacamole.apache.org/support/#mailing-lists), or if you truly +feel you've discovered a bug, you can [create a new ticket in +JIRA](https://issues.apache.org/jira/browse/GUACAMOLE/). Beware that if +something isn't working, and there are errors in the logs describing the +problem, [it is usually not a +bug](http://guacamole.apache.org/faq/#probably-not-a-bug), and the best place +to handle such things is through consulting this guide or the mailing lists. + +### No graphics appear + +If you *never* see any graphics appear, or you see "Connecting, waiting for +first update..." for a while and then are disconnected, the most likely cause +is a proxy. + +Guacamole relies on streaming data to you over a persistent connection. If +software between Guacamole and your browser is buffering all incoming data, +such as a proxy, this data never makes it to your browser, and you will just +see it wait indefinitely. Eventually, thinking the client has disconnected, +Guacamole closes the connection, at which point the proxy finally flushes its +buffer and you see graphics! ... just in time to see it disconnect. + +The solution here is to either modify your proxy settings to flush packets +immediately as they are received, or to use HTTPS. Proxies are required to pass +HTTPS through untouched, and this usually solves the problem. + +Even if you aren't aware of any proxy, there may be one in place. Corporate +firewalls very often incorporate proxies. Antivirus software may buffer +incoming data until the connection is closed and the data is scanned for +viruses. Virtualization software may detect HTTP data and buffer the connection +just like a proxy. If all else fails, try HTTPS - it's the only secure way to +do this anyway. + +### Connections involving Unicode don't work + +If you are using Tomcat, beware that you *must* set the `URIEncoding="UTF-8"` +attribute on all connectors in your `server.xml`. If you are using a different +servlet container, you need to find out whether it requires special options to +support UTF-8 in URIs, and change the required settings to enable such support. + +Without UTF-8 support enabled for URIs, Unicode characters in connection names +will not be received properly when connecting, and Guacamole will think the +connection you requested does not exist. Similarly, if you are using the +built-in administration interface, parameters involving Unicode characters will +not save properly without these options enabled. + +syslog +------ + +guacd and libguac-based programs (such as all client plugins) log informational +messages and errors to syslog. Specifically, guacd uses syslog, and it exposes +this logging facility to everything it loads (client plugins), thus if the VNC +or RDP support plugins encounter errors, they log those errors over the logging +facilities exposed by guacd, in this case syslog. + +Once you guacd is started, you'll see entries like the following in syslog: + +``` +guacd[19663]: Guacamole proxy daemon (guacd) version 0.7.0 +guacd[19663]: Unable to bind socket to host ::1, port 4823: Address family + not supported by protocol +guacd[19663]: Successfully bound socket to host 127.0.0.1, port 4823 +guacd[19663]: Exiting and passing control to PID 19665 +guacd[19665]: Exiting and passing control to PID 19666 +guacd[19666]: Listening on host 127.0.0.1, port 4823 +``` + +Each entry relevant to Guacamole has the prefix "guacd", denoting the program +that produced the entry, followed by the process ID, followed by the message. +The entries above show guacamole starting successfully and listening on a +non-default port 4823. + +### guacd errors + +#### Unable to bind socket to any addresses. + +This means that guacd failed to start up at all because the port it wants to +listen on is already taken at all addresses attempted. The details of what +guacd tried will be listed in the log entries above this. To solve the problem, +find what port guacd was trying to listen on (the default is 4822) and check if +any other service is listening on that port. + +If another service is listening on the default port, you can always specify a +non-standard port for guacd by using the `-l PORT` option (that's a lowercase +"L", not a number "1"), where is the number of the port to listen on. +Beware that you will likely have to modify `guacamole.properties` so that +Guacamole knows how to connect to guacd. + +#### Unable to start input thread + +guacd creates two threads for each connection: one that receives input from the +connected client, and the other that produces output for the client. If either +of these fails to start, the above error will be logged along with the cause. + +If it is the output thread that fails to start, the message will instead read: +"Unable to start output thread". + +#### Client finished abnormally + +If the client plugin ever returns an error code, this will cause the connection +to immediately terminate, with the cause of the error specific to the plugin in +use. The cause should be detailed in the log messages above the error. If those +log messages don't make sense, you may have found a bug. + +#### Could not fork() parent + +When guacd starts up, it immediately attempts to "fork" into the background +(unless instructed otherwise). The word "fork()" above is a reference to the C +function call that does this. There are several calls to this function, each of +which might fail if system resources are lacking or something went wrong at a +low level. If you see this message, it is probably not a bug in Guacamole, but +rather a problem with the load level of your system. + +This message may also appear as "Could not fork() group leader". + +#### Unable to change working directory to / + +One of the duties of guacd as it starts up is to change its working directory +to the root directory. This is to prevent locking the current directory in case +it needs to be unmounted, etc. If guacd cannot do this, this error will be +logged, along with the cause. + +#### Unable to redirect standard file descriptors to /dev/null + +As guacd starts, it also has to redirect STDOUT, STDERR, and STDIN to +`/dev/null` such that attempts to use these output mechanisms do not pollute +the active console. Though guacd and client plugins will use the exposed +logging facilities (and thus syslog) rather than STDOUT or STDERR, libraries +used by client plugins are often written only from the mindset of a typical +client, and use standard output mechanisms for debug logging. Not redirecting +these would result in undesired output to the console. + +If guacd cannot redirect these file descriptors for any reason, this error will +be logged, along with the cause. + +#### Error parsing given address or port: HOSTNAME + +If you specified a host or port to listen on via commandline options, and that +host or port is actually invalid, you will see this error. Fix the +corresponding option and try again. + +#### Error opening socket + +When guacd starts up, it needs to open a socket and then listen on that socket. +If it can't even open the socket, this error will be logged, and guacd will +exit. The cause is most likely related to permissions, and is logged along with +the error. + +#### Unable to resolve host + +If the hostname you specified on the commandline cannot be found, you will see +this error. Note that this error is from guacd, and does not relate to whatever +remote desktop servers you may be trying to use; it relates only to the host +guacd is trying to listen on. Check the hostname or IP address specified on the +commandline. If that checks out, there may be a problem with your DNS or your +network. + +#### Could not become a daemon + +In order to become a "daemon" (that is, in order to run in the background as a +system process), guacd must create and exit from several processes, redirect +file descriptors, etc. If any of these steps fails, guacd will not become a +daemon, and it will log this message and exit. The reason guacd could not +become a daemon will be in the previous error message in the logs. + +#### Could not write PID file + +guacd offers a commandline option that lets you specify a file that it should +write its process ID into, which is useful for init scripts. If you see this +error, it likely means the user guacd is running as does not have permission to +write this file. The true cause of the error will be logged in the same entry. +Check which user guacd is running as, and then check that it has write +permission to the file in question. + +#### Could not listen on socket + +When guacd starts up, it needs to listen on the socket it just opened in order +to accept connections. If it cannot listen on the socket, clients will be +unable to connect. If, for any reason, guacd is unable to listen on the socket, +guacd will exit and log this message along with the cause, which is most likely +a low-level system resource problem. + +#### Could not accept client connection + +When a client connects to guacd, it must accept the connection in order for +communication to ensue. If it cannot even accept the connection, no +communication between server and client will happen, and this error will be +logged. The cause of the error will be logged in the same entry. Possible +causes include permissions problems, or lack of server resources. + +#### Error forking child process + +When a client connects to guacd, it must create a new process to handle the +connection while the old guacd process continues to listen for new connections. +If, for any reason, guacd cannot create this process, the connection from that +client will be denied, and the cause of the error will be logged. Possible +causes include permissions problems, or lack of server resources. + +#### Error closing daemon reference to child descriptor + +When guacd receives a connection, and it creates a new process to handle that +connection, it gains a copy of the file descriptor that the client will use for +communication. As this connection can never be closed unless all references to +the descriptor are closed, the server must close its copy such that the client +is the only remaining holder of the file descriptor. If the server cannot close +the descriptor, it will log this error message along with the cause. + +#### Error sending "sync" instruction + +During the course of a Guacamole session, guacd must occasionally "ping" the +client to make sure it is still alive. This ping takes the form of a "sync" +instruction, which the client is obligated to respond to as soon as it is +received. If guacd cannot send this instruction, this error will be logged, +along with the cause. Chances are the connection has simply been closed, and +this error can be ignored. + +#### Error flushing output + +After the client plugin is finished (for the time being) with handling server +messages, the socket is automatically flushed. If the server cannot flush this +socket for some reason, such as the connection already being closed, you will +see this error. Normally, this error does not indicate a problem, but rather +that the client has simply closed the connection. + +#### Error handling server messages + +While the client plugin is running, guacd will occasionally ask the plugin to +check and handle any messages that it may have received from the server it +connected to. If the client plugin fails for some reason while doing this, this +error will be logged, and the cause of the error will likely be logged in +previous log entries by the client plugin. + +#### Error reading instruction + +During the course of a Guacamole session, instructions are sent from client to +server which are to be handled by the client plugin. If an instruction cannot +be read, this error will be logged. Usually this means simply that the +connection was closed, but it could also indicate that the version of the +client in use is so old that it doesn't support the current Guacamole protocol +at all. If the cause looks like the connection was closed (end of stream +reached, etc.), this log entry can be ignored. Otherwise, if the first two +numbers of the version numbers of all Guacamole components match, you have +probably found a bug. + +#### Client instruction handler error + +This error indicates that a client plugin failed inside the handler for a +specific instruction. When the server receives instructions from the client, it +then invokes specific instruction handlers within the client plugin. In +general, this error is not useful to a user or system administrator. If the +cause looks benign, such as reaching the end of a stream (the connection +closed), it can be ignored as normal. Otherwise, this error can indicate a bug +either in the client plugin or in a library used by the client plugin. + +It can also indicate a problem in the remote desktop server which is causing +the client plugin to fail while communicating with it. + +#### Error reading OPCODE + +During the handshake of the Guacamole protocol, the server expects a very +specific sequence of instructions to be received. If the wrong instructions are +received, or the connection is abruptly closed during the handshake, the above +error will occur. + +In the case that the cause is the connection closing, this is normal, and +probably just means that the client disconnected before the initial handshake +completed. + +If the connection was not closed abruptly, but instead the wrong instruction +was received, this could mean either that the connecting client is from an +incompatible version of Guacamole (and thus does not know the proper handshake +procedure) or you have found a bug. Check whether all installed components came +from the same upstream release bundle. + +#### Error sending "args" + +During the handshake of the Guacamole protocol, the server must expose all +parameters used by the client plugin via the args instruction. If this cannot +be sent, you will see this error in the logs. The cause will be included in the +error message, and usually just indicates that the connection was closed during +the handshake, and thus the handshake cannot continue. + +#### Error loading client plugin + +When the client connects, it sends an instruction to guacd informing it what +protocol it wishes to use. If the corresponding client plugin cannot be found +or used for any reason, this message will appear in the logs. Normally this +indicates that the corresponding client plugin is not actually installed. The +cause listed after the error message will indicate whether this is the case. + +#### Error instantiating client + +After the client plugin is loaded, an initialization function provided by the +client plugin is invoked. If this function fails, then the client itself cannot +be created, and this error will be logged. Usually this indicates that one or +more of the parameters given to the client plugin are incorrect or malformed. +Check the configuration of the connection in use at the time. + +### libguac-client-vnc errors + +#### Error waiting for VNC message + +The VNC client plugin must wait for messages sent by the VNC server, and handle +them when they arrive. If there was an error while waiting for a message from +the VNC server, this error message will be displayed. Usually this means that +the VNC server closed the connection, or there is a problem with the VNC server +itself, but the true cause of the error will be logged. + +#### Error handling VNC server message + +When messages are received from the VNC server, libvncclient must handle them +and then invoke the functions of libguac-client-vnc as necessary. If +libvncclient fails during the handling of a received message, this error will +be logged, along with (hopefully) the cause. This may indicate a problem with +the VNC server, or a lack of support within libvncclient. + +#### Wrong argument count received + +The connecting client is required to send exactly the same number of arguments +as requested by the client plugin. If you see this message, it means there is a +bug in the client connecting to guacd, most likely the web application. + +### libguac-client-rdp errors + +#### Invalid PARAMETER + +If one of the parameters given, such as "width", "height", or "color-depth", is +invalid (not an integer, for example), you will receive this error. Check the +parameters of the connection in use and try again. + +#### Support for the CLIPRDR channel (clipboard redirection) could not be loaded + +FreeRDP provides a plugin which provides clipboard support for RDP. This plugin +is typically built into FreeRDP, but some distributions may bundle this +separately. libguac-client-rdp loads this plugin in order to support clipboard, +as well. If this plugin could not be loaded, then clipboard support will not be +available, and the reason will be logged. + +#### Cannot create static channel "NAME": failed to load "guac-common-svc" plugin for FreeRDP + +RDP provides support for much of its feature set through static virtual +channels. Sound support, for example is provided through the "RDPSND" channel. +Device redirection for printers and drives is provided through "RDPDR". To +support these and other static virtual channels, libguac-client-rdp builds a +plugin for FreeRDP called "guac-common-svc" which allows Guacamole to hook into +the parts of FreeRDP that support virtual channels. + +If libguac-client-rdp cannot load this plugin, support for any features which +leverage static virtual channels will not work, and the reason will be logged. +A likely explanation is that libguac-client-rdp was built from source, and the +directory specified for FreeRDP's installation location was incorrect. For +FreeRDP to be able to find plugins, those plugins must be placed in the +`freerdp2/` subdirectory of whichever directory contains the `libfreerdp2.so` +library. + +#### Server requested unsupported clipboard data type + +When clipboard support is loaded, libguac-client-rdp informs the RDP server of +all supported clipboard data types. The RDP server is required to send only +those types supported by the client. If the server decides to send an +unsupported type anyway, libguac-client-rdp ignores the data sent, and logs +this message. + +#### Clipboard data missing null terminator + +When text is sent via a clipboard message, it is required to have a terminating +null byte. If this is not the case, the clipboard data is invalid, and +libguac-client-rdp ignores it, logging this error message. + +Servlet container logs +---------------------- + +Your servlet container will have logs which the web application side of +Guacamole will log errors to. In the case of Tomcat, this is usually +`catalina.out` or `HOSTNAME.log` (for example, `localhost.log`). + +(user-mapping-xml-errors)= + +### `user-mapping.xml` errors + +Errors in the relating to the `user-mapping.xml` file usually indicate that +either the XML is malformed, or the file itself cannot be found. + +#### Attribute "name" required for connection tag + +If you specify a connection with a `` tag, it must have a +corresponding name set via the `name` attribute. If it does not, then the XML +is malformed, and this error will be logged. No users will be able to login. + +#### Attribute "name" required for param tag + +Each parameter specified with a `` tag must have a corresponding name +set via the `name` attribute. If it does not, then the XML is malformed, and +this error will be logged. No users will be able to login. + +#### Unexpected character data + +Character data (text not within angle brackets) can only exist within the +`` tag. If it exists elsewhere, then the XML is malformed, and this +error will be logged. No users will be able to login. + +#### Invalid encoding type + +There are only two legal values for the `encoding` attribute of the +`` tag: `plain` (indicating plain text) and `md5` (indicating a +value hashed with the MD5 digest). If any other value is used, then the XML is +malformed, and this error will be logged. No users will be able to login. + +#### User mapping could not be read + +If for any reason the user mapping file cannot be read (the servlet container +lacks read permission for the file, the file does not exist, etc.), this error +will be logged. Check `guacamole.properties` to see where the user mapping file +is specified to exist, and then check that is both exists and is readable by +your servlet container. + +(guacamole-properties-errors)= + +### `guacamole.properties` errors + +If a property is malformed or a required property is missing, an error +describing the problem will be logged. + +#### Property PROPERTY is required + +If Guacamole or an extension of Guacamole requires a specific property in +`guacamole.properties`, but this property is not defined, this error will be +logged. Check which properties are required by the authentication provider (or +other extensions) in use, and then compare that against the properties within +`guacamole.properties`. + +(guacamole-auth-errors)= + +### Authentication errors + +If someone attempts to login with invalid credentials, or someone attempts to +access a resource or connection that does not exist or they do not have access +to, errors regarding the invalid attempt will be logged. + +#### Cannot connect - user not logged in + +A user attempted to connect using the HTTP tunnel, and while the tunnel does +exist and is attached to their session, they are not actually logged in. +Normally, this isn't strictly possible, as a user has to have logged in for a +tunnel to be attached to their session, but as it isn't an impossibility, this +error does exist. If you see this error, it could mean that the user logged out +at the same time that they made a connection attempt. + +#### Requested configuration is not authorized + +A user attempted to connect to a configuration with a given ID, and while that +configuration does exist, they are not authorized to use it. This could mean +that the user is trying to access things they have no privileges for, or that +they are trying to access configurations they legitimately should, but are +actually logged out. + +#### User has no session + +A user attempted to access a page that needs data from their session, but their +session does not actually exist. This usually means the user has not logged in, +as sessions are created through the login process. + +(guacamole-tunnel-errors)= + +### Tunnel errors + +The tunnel frequently returns errors if guacd is killed, the connection is +closed, or the client abruptly closes the connection. + +#### No such tunnel + +An attempt was made to use a tunnel which does not actually exist. This is +usually just the JavaScript client sending a leftover message or two while it +hasn't realized that the server has disconnected. If this error happens +consistently and is associated with Guacamole generally not working, it could +be a bug. + +#### No tunnel created + +A connection attempt for a specific configuration was made, but the connection +failed, and no tunnel was created. This is usually because the user was not +authorized to use that connection, and thus no tunnel was created for access to +that connection. + +#### No query string provided + +When the JavaScript client is communicating with the HTTP tunnel, it *must* +provide data in the query string describing whether it wants to connect, read, +or write. If this data is missing as the error indicates, there is a bug in the +HTTP tunnel. + +#### Tunnel reached end of stream + +An attempt to read from the tunnel was made, but the tunnel in question has +already reached the end of stream (the connection is closed). This is mostly an +informative error, and can be ignored. + +#### Tunnel is closed + +An attempt to read from the tunnel was made, but the tunnel in question is +already closed. This can happen if the client or guacd have closed the +connection, but the client has not yet settled down and is still making read +attempts. As there can be lags between when connections close and when the +client realizes it, this can be safely ignored. + +#### End of stream during initial handshake + +If guacd closes the connection suddenly without allowing the client to complete +the initial handshake required by the Guacamole protocol, this error will +appear in the logs. If you see this error, you should check syslog for any +errors logged by guacd to determine why it closed the connection so early. + +#### Element terminator of instruction was not ';' nor ',' + +The Guacamole protocol imposes a strict format which requires individual parts +of instructions (called "elements") to end with either a ";" or "," character. +If they do not, then something has gone wrong during transmission. This usually +indicates a bug in the client plugin in use, guacd, or libguac. + +#### Non-numeric character in element length + +The Guacamole protocol imposes a strict format which requires each element of +an instruction to have a length prefix, which must be composed entirely of +numeric characters (digits 0 through 9). If a non-numeric character is read, +then something has gone wrong during transmission. This usually indicates a bug +in the client plugin in use, guacd, or libguac. + diff --git a/doc/1.5.5/gug/_sources/using-guacamole.md.txt b/doc/1.5.5/gug/_sources/using-guacamole.md.txt new file mode 100644 index 000000000..9dc4484d5 --- /dev/null +++ b/doc/1.5.5/gug/_sources/using-guacamole.md.txt @@ -0,0 +1,509 @@ +Using Guacamole +=============== + +Guacamole provides access to much of the functionality of a desktop from within +your web browser. Although most people use remote desktop tools only when +absolutely necessary, we believe that Guacamole must be aimed at becoming a +primary means of accessing desktops, and the interface is thus intended to be +as seamless and unobtrusive as possible. + +Home screen +----------- + +Once you have successfully logged in, you will be taken to either the Guacamole +home screen, where all available connections are listed, or directly to a +connection, if you only have access to one connection. + +The home screen will contain a list of all connections to which you have +access, along with thumbnails of any recently used or active connections. If +you have access to a large number of connections and wish to quickly locate a +specific connection, you can also enter search terms within the "Filter" field +to filter the list of connections by name. + +![The Guacamole home screen. The user menu and several recently-used +connections are visible, along with one active connection.](images/guacamole-home-screen.png) + +Clicking on any connection will open that connection within the current window +or tab, but multiple connections can be used simultaneously. You can easily +navigate back to the home screen without disconnecting by using your browsers +back button or the "Home" button in the Guacamole menu. Each connection you use +will remain active until explicitly disconnected, or until you navigate away +from Guacamole entirely. Active connections can be seen as thumbnails updating +in real-time on the home screen. + +### User menu + +With the exception of the client screen discussed below, all Guacamole screens +contain a menu in the upper-right corner called the "user menu". This menu +displays your username and contains several options which depend on your user's +level of access: + +Home +: Navigates back to the home screen, if you are not already there. If you only + have access to one connection, this will be replaced with a link to that + connection. + +Settings +: Navigates to the settings interface, which provides access to user + preferences such as display language. If you have access to administrative + functions, those are found within the settings interface, as well, and are + discussed in more detail in [](administration). + +Logout +: Logs out of Guacamole completely, closing all current connections and ending + the Guacamole session. + +Client screen +------------- + +Once you open a connection, you will see a real-time view of the remote +display. You can interact with this display just as you would your normal +desktop. Your mouse and keyboard will function as if they were connected +directly to the remote machine. + +![Guacamole client interface, with the Guacamole menu +open.](images/guacamole-client-interface.png) + +The remote display will take up the entire browser window, with no buttons or +menus to disturb the view. With the intent of providing a seamless experience, +options specific to remote desktop are hidden within the Guacamole menu, which +can be opened as needed. + +(guacamole-menu)= + +### The Guacamole menu + +The Guacamole menu is a sidebar which is hidden until explicitly shown. On a +desktop or other device which has a hardware keyboard, you can show this menu +by pressing {kbd}`Ctrl+Alt+Shift`. If you are using a mobile or touchscreen +device that lacks a keyboard, you can also show the menu by swiping right from +the left edge of the screen. To hide the menu, you press {kbd}`Ctrl+Alt+Shift` +again or swipe left across the screen. + +The Guacamole menu provides options for: + +* [Reading from (and writing to) the clipboard of the remote + desktop](using-the-clipboard) + +* [Switching between active connections and displaying multiple connections at + once](client-connection-menu) + +* [Navigating back to the home screen](client-user-menu) + +* [Disconnecting from the current connection entirely](client-user-menu) + +* [Sharing the current connection](client-share-menu) + +* [Uploading and downloading files](file-transfer) + +* [Zooming in and out of the remote display](scaling-display) + +* [Selecting alternative methods of typing or controlling the mouse, + particularly for use on mobile or touchscreen devices](touch-devices) + +(using-the-clipboard)= + +Copying/pasting text +-------------------- + +At the top of the Guacamole menu is a text area labeled "clipboard" +along with some basic instructions: + +> Text copied/cut within Guacamole will appear here. Changes to the text below +> will affect the remote clipboard. + +The text area functions as an interface between the remote clipboard and the +local clipboard. Text from the local clipboard can be pasted into the text +area, causing that text to be sent to the clipboard of the remote desktop. +Similarly, if you copy or cut text within the remote desktop, you will see that +text within the text area, and can manually copy it into the local clipboard if +desired. + +(client-connection-menu)= + +Switching and tiling connections +-------------------------------- + +If you have access to more than one connection, clicking the current connection +name at the top of the Guacamole menu will open a drop-down menu containing a +list of your other available connections: + +![Connection menu with one connection selected](images/client-connection-menu.png) + +Clicking on the name of another connection in this drop-down menu will +immediately switch to that connection. The previous connection will remain +running as a thumbnail within a panel attached to the lower-right corner of the +screen. This panel updates in real-time and remains visible as long as you have +multiple active connections, even if you navigate away to another part of the +Guacamole application: + +![Active connection panel](images/client-panel.png) + +Clicking on any connection within the panel will navigate back to that +connection, while clicking the "X" icon in the upper-right corner of the +connection thumbnail will immediately close the connection. + +(client-tiling)= + +### Adding a connection to the current view + +Multiple connections may also be opened simultaneously within the same view by +clicking the checkboxes next to the names of those connections in the +connection menu: + +![Connection menu with two connections selected](images/client-connection-menu-multiple.png) + +All connections opened in this way are automatically arranged in equally-sized +tiles to fill the available area: + +![Multiple client displays in a tiled arrangement](images/client-tiled.png) + +With multiple connections displayed as tiles, keyboard interaction and the +Guacamole menu will only affect the currently focused connection, as indicated +by the blue title and border. Clicking or tapping within another connection +will change the focus and allow keyboard interaction with _that_ connection. + +(client-broadcast-keyboard)= + +### Typing with multiple connections + +By holding down {kbd}`Ctrl` (to select an individual connection) or +{kbd}`Shift` (to select a rectangle of connections), multiple connection may be +focused at the same time. While multiple connections are focused, each key +pressed will be broadcast across each focused connection: + +![Multiple focused client displays in a tiled arrangement](images/client-tiled-multi-focus.png) + +This is particularly useful for running the same series of commands on multiple +computers. Further, since Guacamole automatically translates between the user's +local keyboard layout and the keyboard layout of the remote server, _this will +work as expected even if the keyboard layouts of focused connections do not +match_. + +(client-user-menu)= + +Disconnecting and navigation +---------------------------- + +When you are done using the current connection, or you wish to navigate +elsewhere temporarily, options to do so are within the user menu inside the +Guacamole menu: + +![The user menu within the Guacamole menu.](images/guac-menu-disconnect.png) + +The user menu within the Guacamole menu provides an additional "Disconnect" +option that allows you to explicitly close the current connection only. +Clicking "Logout" will also implicitly disconnect all active connections, +including the current connection. + +Navigating back to the home screen or to the settings screen will not +disconnect you: your connection will continue running in the background while +you change settings or initiate another connection, and you can resume any +active connection by clicking on it within the home screen. + +(client-share-menu)= + +Sharing the connection +---------------------- + +If the Guacamole server is configured to allow connection sharing, and you have +been granted permission to share the current connection, an additional "Share" +menu will appear next to your username in the Guacamole menu. Clicking on this +menu opens a list of options for sharing the current connection. + +![](images/guac-menu-share.png) + +Clicking any of the options within the "Share" menu will immediately generate a +unique share link which can be distributed to anyone, even to users which do +not otherwise have accounts within the same Guacamole system. + +![](images/guac-menu-share-link.png) + +When the link is visited, that user will be given temporary access to your +connection, restricted according to the sharing option chosen. This access, and +the validity of the link overall, lasts only until you disconnect. Once the +connection is closed, the link ceases to be valid, and any users sharing the +connection with you will be disconnected. + +(file-transfer)= + +Transferring files +------------------ + +You can transfer files back and forth between your local computer and the +remote desktop if it is supported by the underlying protocol and enabled on the +connection. Currently, Guacamole supports file transfer for VNC, RDP, and SSH, +using either the native file transfer support of the protocol or SFTP. + +Files can be transferred to the remote computer by dragging and dropping the +files into your browser window, or through using the file browser located in +the Guacamole menu. + +(file-browser)= + +### Using the file browser + +If file transfer is enabled on the connection, you will see one or more +filesystem devices listed within the Guacamole menu. Clicking on one of the +filesystems opens a file browser which lists the files and directories within +that filesystem. + +![The file browser within the Guacamole menu.](images/file-browser.png) + +Double-clicking on any directory will change the current location of the file +browser to that directory, updating the list of files shown as well as the +"breadcrumbs" at the top of the file browser. Clicking on any of the directory +names listed in the breadcrumbs will bring you back to that directory, and +clicking on the drive icon on the far left will bring you all the way back to +the root level. + +Downloads are initiated by double-clicking on any file shown, while uploads are +initiated by clicking the "Upload Files" button. Clicking "Upload Files" will +open a file browsing dialog where you can choose one or more files from your +local computer, ultimately uploading the selected files to the directory +currently displayed within the file browser. + +The state of all file uploads can be observed within the notification dialog +that appears once an upload begins, and can be cleared once completed by +clicking the "Clear" button. Downloads are tracked through your browser's own +download notification system. + +![In-progress and completed file transfers.](images/file-transfers.png) + +When you are done browsing the filesystem and transferring files, click "Back" +to return to the Guacamole menu. + +(rdp-virtual-drive)= + +### The RDP virtual drive + +RDP provides its own native support for file transfer called "drive +redirection" or "RDPDR". Guacamole provides support for this mechanism by +emulating a virtual drive. Typically, this virtual drive will appear as a +network drive within the RDP session. Files uploaded and downloaded will be +preserved within this drive, even after disconnecting. + +![The Guacamole drive within a Windows RDP session.](images/guacamole-drive.png) + +Files can be downloaded from this drive using the file browser in the Guacamole +menu or using the special "Download" folder within the virtual drive. All files +dropped into this folder will automatically begin uploading to the client, and +thus downloading through the browser. + +![The Guacamole drive's "Download" folder.](images/guacamole-drive-download.png) + +(guacctl)= + +### {program}`guacctl` / {program}`guacget` + +In addition to traditional drag-and-drop and the file browser, Guacamole's SSH +support can be used with the {program}`guacctl` utility. The {program}`guacctl` +utility is a simple shell script [included with Guacamole][guacctl] which +allows you to use and configure file transfer directly from the command line +within the SSH session: + +```console +$ guacctl +guacctl 0.8.0, Guacamole SSH session control utility. +Usage: guacctl [OPTION] [FILE]... + + -d, --download download each of the files listed. + -s, --set-directory set the destination directory for future uploaded + files. +$ guacctl -d FILENAME +$ guacctl -s DIRECTORY +$ +``` + +For convenience, you may also create a symbolic link or alias to +{program}`guacctl` called {program}`guacget`. When run as {program}`guacget`, +the utility behaves as if the `--download` option were supplied and initiates a +download for each file specified on the command line. + +[guacctl]: https://raw.githubusercontent.com/apache/guacamole-server/master/bin/guacctl + +(using-the-osk)= + +On-screen keyboard +------------------ + +Certain key combinations are impossible to press within a web application like +Guacamole because they are reserved by the operating system +({kbd}`Ctrl+Alt+Del` or {kbd}`Alt+Tab`, for example) or by the web browser. If +you press one of these reserved combinations, the effect will be observed +locally, not remotely, and the remote desktop will receive only some of the +keys. + +Guacamole provides its own, built-in on-screen keyboard which allows keys to be +sent to the remote desktop without affecting the local system. If the device +you're using does not have certain keys which the remote desktop depends on, +such as the arrow keys or {kbd}`Ctrl`, you can use the on-screen keyboard for +this, too. You can show the on-screen keyboard by selecting the "On-screen +keyboard" option from the menu. + +Clicking (or tapping) the buttons of the on-screen keyboard has the same effect +as pressing the same buttons on a real keyboard, except that the operating +system and browser will not intercept these keypresses; they will only be sent +to the remote desktop. + +(scaling-display)= + +Scaling the display +------------------- + +Guacamole will default to shrinking or expanding the remote display to fit the +browser window exactly, but this is not necessarily ideal. If the remote +display is much larger than your local display, the screen may be impossible to +see or interact with. This is especially true for mobile phones, whose screens +need to be small enough to fit in the average hand. + +You can scale the display on touch devices by using the familiar pinch gesture. +Place two fingers on the screen and bring them closer together to zoom out or +further apart to zoom in. + +If your device lacks a touch screen, you can also control the zoom level +through the menu. The controls for zooming in and out are located at the bottom +of the menu. The current zoom level is displayed between two "-" and "+" +buttons which control the zoom level in 10% increments. + +(touch-devices)= + +Mobile or touch devices +----------------------- + +Guacamole is designed to work equally well across all HTML5 browsers, including +those of mobile devices. It will automatically handle input from a touch screen +or a traditional mouse (or both, if you happen to have such a gifted computer), +and provides alternative input methods for devices which lack a physical +keyboard. + +(touch-mouse)= + +### Mouse emulation + +In the case that your device has a touchscreen and lacks a mouse, Guacamole +will emulate a mouse for the sake of interacting with remote desktops that +expect mouse input. By default, Guacamole uses "absolute" mouse emulation. This +means that the mouse pointer is positioned at the location of each tap on the +screen. + +In both absolute and relative modes, you can click-and-drag by tapping the +screen and then quickly placing your finger back down. This gesture only causes +the mouse button to press down, but does not release it again until you lift +your finger back up. + +(absolute-mouse-emulation)= + +#### Absolute mode (touchscreen) + +Absolute mouse emulation is the default as it tends to be what people expect +when using a touch device to interact with applications designed for mouse +input. + +Each tap on the screen is translated into a left-click at that position. +Right-clicking is accomplished through pressing and holding your finger on the +screen. If parts of the remote display are off-screen, you can drag your finger +around the screen to pan the off-screen parts back into view. + +Although absolute mouse emulation works generally well, a finger makes for a +very inaccurate pointing device. To address this, Guacamole also provides +"relative" mouse emulation. Relative mouse emulation provides a way to deal +with the need for accurate pointer control, when a true pointer device is not +present. + +![](images/touchscreen.png) + +(relative-mouse-emulation)= + +#### Relative mode (touchpad) + +Guacamole's relative mouse emulation behaves similarly to the touchpad present +on most modern laptops. You drag your finger across the display to move the +mouse pointer, and tap the display to left-click. The pointer moves relative to +the motion of your finger. Right-clicking is accomplished with a two-finger +tap, and middle-clicking with a three-finger tap. The mouse scroll wheel can be +operated by dragging two fingers up or down. + +Because the relative mouse emulation reserves so many gestures for the +different mouse buttons and actions, common touch gestures like panning and +pinch-to-zoom will not work while relative mouse emulation is enabled. Instead, +the screen will automatically pan to keep the mouse pointer in view, and you +can zoom through the buttons in the menu. + +![](images/touchpad.png) + +(text-input)= + +### Typing without a physical keyboard + +Many mobile devices lack a physical keyboard entirely, and instead provide +their own on-screen keyboards. As these are not true keyboards per se and do +not produce key presses, Guacamole's text input mode is required for typing on +these platforms. + +"Text input" allows input of keystrokes based on the input of text. Choosing +"Text input" tells Guacamole to infer keystrokes by tracking text entered, +rather than relying on actual key presses. Guacamole will instead determine the +combination of keypresses necessary to produce the same pattern of input, +including deletions. + +If you wish to type via an IME (input method editor), such as those required +for Chinese, Japanese, or Korean, text input mode is required for this as well. +Such IMEs function through the explicit insertion of text and do not send +traditional key presses. Using text input mode within Guacamole thus allows you +to use a locally-installed IME, without requiring the IME to be installed on +the remote desktop. + +(preferences)= + +Changing preferences +-------------------- + +User preferences can be changed within the settings screen. These preferences +are stored locally within the browser, so if you use multiple computers to +access Guacamole, you can have different settings for each location. The +settings screen allows users to change the language of the Guacamole interface, +to change the default input method used by Guacamole connections, and to change +the default mouse emulation mode for if a touch device is used. If you have +sufficient permissions, you may also change your password, or administer the +system. + +![Guacamole preferences screen.](images/guacamole-preferences.png) + +### Display language + +The Guacamole interface is currently available in English, Dutch, French, +German, Italian, and Russian. By default, Guacamole will attempt to determine +the appropriate display language by checking the language preferences of the +browser in use. If this fails, or the browser is using a language not yet +available within Guacamole, English will be used as a fallback. + +If you wish to override the current display language, you can do so by +selecting a different language within the "Display language" field. The change +will take effect immediately. + +(changing-password)= + +### Changing your password + +System administrators can restrict the ability of individual users to change +their own passwords, so this section may not always be available. If your +account *does* have permission, the preferences screen will contain a "Change +Password" section. + +To change your password, you must provide your current password, enter the +desired new password, and click "Update Password". You will remain logged in, +and the change will affect any future login attempt. + +### Default input settings + +Guacamole provides multiple keyboard input methods and multiple mouse emulation +modes. Many of these settings are specifically useful for touch devices, while +others are aimed mainly at traditional desktop use. By default, Guacamole will +use the keyboard and mouse modes most commonly preferred by users, but you can +change these defaults if they do not fit your tastes or your current device. + +The choices available mirror those within the Guacamole menu discussed earlier +in this chapter, and changing these settings will affect the default values +selected within the Guacamole menu of future connections. + diff --git a/doc/1.5.5/gug/_sources/vault.md.txt b/doc/1.5.5/gug/_sources/vault.md.txt new file mode 100644 index 000000000..ff0a8e78a --- /dev/null +++ b/doc/1.5.5/gug/_sources/vault.md.txt @@ -0,0 +1,373 @@ +Retrieving secrets from a vault +=============================== + +Guacamole supports reading secrets such as connection-specific passwords from a +key vault, automatically injecting those secrets into connection configurations +using [parameter tokens](parameter-tokens) or Guacamole configuration +properties via an additional, vault-specific configuration file analogous to +`guacamole.properties`. This support is intended with multiple vault providers +in mind and currently supports [Keeper Secrets Manager (KSM)](https://www.keepersecurity.com/secrets-manager.html). + +:::{important} +This chapter involves modifying the contents of `GUACAMOLE_HOME` - the +Guacamole configuration directory. If you are unsure where `GUACAMOLE_HOME` is +located on your system, please consult [](configuring-guacamole) before +proceeding. +::: + +(vault-downloading)= + +Downloading the vault extension +------------------------------- + +The vault extension is available separately from the main `guacamole.war`. The +link for this and all other officially-supported and compatible extensions for +a particular version of Guacamole are provided on the release notes for that +version. You can find the release notes for current versions of Guacamole here: +. + +The vault extension is packaged as a `.tar.gz` file containing directories +specific to vault implementations (currently only `ksm/` for the KSM +implementation). Each vault-specific directory contains a `.jar` file (the +actual Guacamole extension). The Guacamole extension `.jar` will ultimately +need to be placed within `GUACAMOLE_HOME/extensions`. + +(installing-vault-support)= + +Installing key vault support +---------------------------- + +Guacamole extensions are self-contained `.jar` files which are located within +the `GUACAMOLE_HOME/extensions` directory. To install the KSM vault extension, +you must: + +1. Create the `GUACAMOLE_HOME/extensions` directory, if it does not already + exist. + +2. Copy `ksm/guacamole-vault-ksm-1.5.5.jar` within `GUACAMOLE_HOME/extensions`. + +3. Configure Guacamole to use KSM to retrieve secrets, as described below. + +:::{important} +You will need to restart Guacamole by restarting your servlet container in +order to complete the installation. Doing this will disconnect all active +users, so be sure that it is safe to do so prior to attempting installation. If +you do not configure the vault support properly, Guacamole will not start up +again until the configuration is fixed. +::: + +(adding-guac-to-ksm)= + +### Adding Guacamole to KSM + +Allowing an application like Guacamole to access secrets via KSM involves +creating an application in KSM. A KSM application is simply a means of +assigning permissions, narrowing exactly which secrets the application in +question should be able to access. + +1. Log into your vault via the Keeper Security website and create at least one + shared folder to house any secrets that should be made available to Apache + Guacamole. These folders will be used when registering Apache Guacamole with + KSM and functions to define exactly which secrets the application may access. + **Secrets that are not within these shared folders will not be accessible by + Guacamole.** + + The option for creating a shared folder is within a submenu that appears + when you click on "Create New": + + ![Submenu for creating new objects, including shared folders.](images/vault-ksm-001a-create-shared-folder.png) + + No special options need to be selected for the shared folder except for + providing a reasonable name for the folder: + + ![Shared folder creation dialog.](images/vault-ksm-001b-create-shared-folder.png) + +2. Navigate to KSM by selecting the "Secrets Manager" tab in the navigation + sidebar on the left side of the screen: + + !["Secrets Manager" selected within the navigation sidebar.](images/vault-ksm-002-select-ksm.png) + +3. Click "Create Application" on the right ride of the toolbar near the top of + the screen: + + !["Create Application" button in the KSM toolbar.](images/vault-ksm-003a-create-application.png) + + The dialog that appears will prompt you to provide a name for the + application that will access the vault, as well as the shared folder(s) that + this application will have access to. Enter a reasonable name for the + application, such as "Apache Guacamole", and select the shared folder(s) you + created for Guacamole to access: + + ![KSM application creation dialog.](images/vault-ksm-003b-create-application.png) + + Guacamole only needs read-only access permissions to secrets, which should + already be selected by default. + + :::{warning} + You should only check the "Lock external WAN IP" box if your Guacamole + server has a static IP _and_ you will be using the KSM CLI tool directly on + that server. **If you will be running the KSM CLI tool on a separate machine + with a different public IP address, you must not check this box.** + ::: + +4. Once satisfied with the application name and parameters, click "Generate + Token" to generate a one-time token: + + ![Application creation confirmation dialog showing the generated one-time token.](images/vault-ksm-004-generate-token.png) + +5. Copy the provided one-time token using [the KSM CLI tool](https://docs.keeper.io/secrets-manager/secrets-manager/secrets-manager-command-line-interface/init-command) + to obtain the base64-encoded configuration that must be provided to + Guacamole with [the `ksm-config` property](guac-vault-config). **This token + can only be used once, but the base64 configuration can be used indefinitely + unless manually revoked within KSM:** + + ```console + $ ./ksm init default US:_-L2NIxWdMatbyYwBnYROLlJVjeg4BzO3xZWoiDkh4U + + ewogICJjbGllbnRJZCI6ICJTR1ZzYkc4Z2RHaGxjbVVoSUZSb1pYTmxJSEJ5YjNCbGNuUnBaWE1n + YUdGMlpTQmlaV1Z1SUcxaGJuVmhiR3g1SUhKbFpHRmpkR1ZrTGlCWGFIay9Qdz09IiwKICAicHJp + dmF0ZUtleSI6ICJWRzhnWlc1emRYSmxJSFJvWVhRZ1lXTjBkV0ZzSUhObGJuTnBkR2wyWlNCMllX + eDFaWE1nWVhKbElHNXZkQ0JsZUhCdmMyVmtJSFpwWVNCdmRYSWdiV0Z1ZFdGc0xpQlVhR1Y1SUcx + aGVTQnViM1FnUVV4TUlHSmxJSE5sYm5OcGRHbDJaU0IyWVd4MVpYTXNJR0oxZENCaGRDQnNaV0Z6 + ZENCdmJtVWdjMlZsYlhNZ2RHOGdZbVV1IiwKICAiYXBwS2V5IjogIlYyVnNZMjl0WlNFZ1JXNXFi + M2tnUVhCaFkyaGxJRWQxWVdOaGJXOXNaU0U9IiwKICAiaG9zdG5hbWUiOiAia2VlcGVyc2VjdXJp + dHkuY29tIiwKICAic2VydmVyUHVibGljS2V5SWQiOiAiMTAiCn0K + $ + ``` + +(guac-vault-config)= + +### Configuring Guacamole for KSM + +Guacamole requires only a single configuration property to configure secret +retrieval from KSM, `ksm-config`, which must be provided the base64 +configuration value retrieved from KSM using the one-time token [obtained when +Guacamole was registered with KSM as an application as described above](adding-guac-to-ksm). +All other configuration properties are optional. + +`ksm-config` +: The base64-encoded configuration information generated for the application + you created within KSM to represent Apache Guacamole. The easiest way to + obtain this value is using [the KSM CLI tool](https://docs.keeper.io/secrets-manager/secrets-manager/secrets-manager-command-line-interface/init-command). + as described above. *This value is required.* + +`ksm-allow-unverified-cert` +: Whether unverified server certificates should be accepted. If set to `true`, + the server certificate for connections to the KSM service will be accepted even + if they cannot be verified. **Unless you are a developer testing changes to + the KSM vault support itself, it is unlikely that you need to set this + property.** + +(completing-vault-install)= + +### Completing the installation + +Guacamole will only reread `guacamole.properties` and load newly-installed +extensions during startup, so your servlet container will need to be restarted +before the newly-installed vault support will take effect. Restart your servlet +container and give the vault support a try. + +:::{important} +You only need to restart your servlet container. *You do not need to restart +guacd*. + +guacd is completely independent of the web application and does not deal with +`guacamole.properties` or the authentication system in any way. Since you are +already restarting the servlet container, restarting guacd as well technically +won't hurt anything, but doing so is completely pointless. +::: + +If Guacamole does not come back online after restarting your servlet container, +check the logs. Problems in the configuration of installed vault support +extensions may prevent Guacamole from starting up, and any such errors will be +recorded in the logs of your servlet container. + +(vault-connection-secrets)= + +Retrieving connection secrets from a vault +------------------------------------------ + +Secrets for connection parameters are provided using [parameter +tokens](parameter-tokens) that can be either automatically or manually defined. +Automatic tokens are [defined dynamically by Guacamole when the connection is +used](vault-dynamic-secrets) based on other configuration values within the +connection, such as the connection's `hostname` or `username`. Manual tokens +are injected by Guacamole based on secrets that are [statically mapped using an +additional configuration file](vault-static-secrets). + +(vault-dynamic-secrets)= + +### Automatic injection of secrets based on connection parameters + +Parameter tokens containing the values of secrets within a record are +automatically injected for connections whose parameter values match specific +criteria, such as having a particular `username` or `hostname`. This happens +whenever a connection is used and is fully dynamic, affecting only the state of +the connection from the perspective of the user accessing it. + +:::{important} +There are limitations to the degree that secrets can be automatically applied +based on connection parameters: + +* In all cases, only unique records are considered. If multiple records match + the criteria that applies to a particular token in the context of a + connection, the token will not be injected for that connection. + +* Automatic injection of secrets cannot currently be used with balancing + connection groups, as the underlying connection that the balancing + implementation will choose cannot be known before token values must be made + available. + +If automatic injection of secrets cannot work for your use case, consider using +[manually-specified secrets via `ksm-token-mapping.yml`](vault-static-secrets). +::: + +Parameter tokens injected from KSM records take the form +{samp}`$\{KEEPER_{CRITERIA}_{SECRET}\}`, where `CRITERIA` determines how the +applicable record is located based on the connection's parameters and `SECRET` +determines what value is retrieved from that record. + +The following `CRITERIA` names are supported: + +`USER` +: The record whose "login" field contains a username that matches the value of + the `username` parameter of the connection. If the record has no "login" field, + a "text" or "password" custom field will be used if the label of that field + contains the word "username" (case-insensitive). + +`SERVER` +: The record whose "login" field contains a hostname that matches the value of + the `hostname` parameter of the connection. If the record has no "login" field, + a "text" or "password" custom field will be used if the label of that field + contains the word "hostname", "address", or "IP address" (case-insensitive, + ignoring any spaces between "IP" and "address"). + +`GATEWAY` +: Identical to `SERVER`, except that the value of the `gateway-hostname` + parameter is used. This is only applicable to RDP connections. + +`GATEWAY_USER` +: Identical to `USER`, except that the value of the `gateway-username` + parameter is used. This is only applicable to RDP connections. + +The following `SECRET` types are supported: + +`USERNAME` +: The username specified by the record's "login" field. If the field is a + custom field, the label must contain the word "username" (case-insensitive) + and must be a "text" or "hidden" field. + +`PASSWORD` +: The password specified by the record's "password" or "hidden" field. If the + field is a custom field, the label must contain the word "password" + (case-insensitive). + +`KEY` +: The private key associated with the record. If the record has a dedicated + key pair field, the private key from this field is used. If not, and the + record has a single `.pem` file attached, the content of that attachment is + used. Lacking any key pair field or attachment, any custom field that is a + "password" or "hidden" field will be used as long as it contains the phrase + "private key" in its label (case-insensitive, ignoring any space(s) between + "private" and "key"). + +`PASSPHRASE` +: The passphrase associated with the record's private key, if the record type + has dedicated fields for these. If the record has no dedicated passphrase + field, a "password" or "hidden" custom field will be used as long as it + has the word "passphrase" in its label (case-insensitive). + +For example, the `${KEEPER_USER_PASSWORD}` token would retrieve the password +for the user specified by the `username` parameter, and `${KEEPER_SERVER_KEY}` +would retrieve the private key for the server specified by the `hostname` +parameter. + +(vault-static-secrets)= + +### Manual definition of secrets + +Parameter tokens can be manually defined by placing a YAML file within +`GUACAMOLE_HOME` called `ksm-token-mapping.yml`. This file must contain a set +of name/value pairs where each name is the name of a token to define and each +value is [a reference to a secret in KSM using "Keeper Notation"](https://docs.keeper.io/secrets-manager/secrets-manager/about/keeper-notation). + +For example, the following `ksm-token-mapping.yml` defines two parameter +tokens, `${WINDOWS_ADMIN_PASSWORD}` and `${LINUX_SERVER_KEY}`, each pulling +their values from different parts of different records in KSM: + +```yaml +WINDOWS_ADMIN_PASSWORD: keeper://odei1zeejoL7Ceiv3eig0a/field/password +LINUX_SERVER_KEY: keeper://Chah0VuPh0ohyeuL4che1o/file/idrsa.pem +``` + +Token substitution of other parameter tokens like `${GUAC_USERNAME}` is +performed *on the reference to the secret* to allow the reference to vary by +values that may be relevant to the connection. The values of substituted tokens +are URL-encoded before being placed into the reference in "Keeper Notation". In +addition, the following tokens are available for use within the secret +reference: + +`${CONNECTION_GROUP_NAME}` +: The human-readable name of the connection group being used. Secrets using + this token are only available if a user is directly connecting to a balancing + connection group, not manually connecting to a connection within a group. + +`${CONNECTION_GROUP_ID}` +: The unique identifier of the connection group being used. Secrets using this + token are only available if a user is directly connecting to a balancing + connection group, not manually connecting to a connection within a group. + +`${CONNECTION_NAME}` +: The human-readable name of the connection being used. Secrets using this + token are only available if a user is directly connecting to a connection, not + connecting via a balancing group. + +`${CONNECTION_ID}` +: The unique identifier of the connection being used. Secrets using this token + are only available if a user is directly connecting to a connection, not + connecting via a balancing group. + +`${CONNECTION_HOSTNAME}` +: The value of the `hostname` parameter of the connection being used. Secrets + using this token are only available if a user is directly connecting to a + connection, not connecting via a balancing group. + +`${CONNECTION_USERNAME}` +: The value of the `username` parameter of the connection being used. Secrets + using this token are only available if a user is directly connecting to a + connection, not connecting via a balancing group. + +`${USERNAME}` +: The username of the current user, as stored with the user object representing + that user in the system storing the relevant connection or connection group. + This is not necessarily the same as `${GUAC_USERNAME}`, which is the username + provided by the user as part of their credentials when they authenticated. + +For example, to automatically define a token called `${LINUX_SERVER_KEY}` that +selects a private key from among several within the same record by searching +for a file named after the current user, the following YAML could be used: + +```yaml +LINUX_SERVER_KEY: keeper://Chah0VuPh0ohyeuL4che1o/file/${USERNAME}.pem +``` +(guacamole-properties-ksm)= + +Retrieving configuration properties from a vault +------------------------------------------------ + +Secrets for Guacamole configuration properties are provided through [an +additional file within `GUACAMOLE_HOME` called `guacamole.properties.ksm`](guacamole-properties-ksm). +This file is _identical_ to `guacamole.properties` except that the values of properties +are [references to KSM secrets in "Keeper Notation"](https://docs.keeper.io/secrets-manager/secrets-manager/about/keeper-notation). +Secrets can be used for any Guacamole configuration property that isn't +required to configure the KSM support. + +For example, the following `guacamole.properties.ksm` defines both the +`mysql-username` and `mysql-password` properties using values from a single +record in KSM that contains a username/password pair: + +``` +mysql-username: keeper://iel4yeic5ahxae7Eereec7/field/login +mysql-password: keeper://iel4yeic5ahxae7Eereec7/field/password +``` + diff --git a/doc/1.5.5/gug/_sources/writing-you-own-guacamole-app.md.txt b/doc/1.5.5/gug/_sources/writing-you-own-guacamole-app.md.txt new file mode 100644 index 000000000..5b2790da4 --- /dev/null +++ b/doc/1.5.5/gug/_sources/writing-you-own-guacamole-app.md.txt @@ -0,0 +1,585 @@ +Writing your own Guacamole application +====================================== + +As Guacamole is an API, one of the best ways to put Guacamole to use is by +building your own Guacamole-driven web application, integrating HTML5 remote +desktop into whatever you think needs it. + +The Guacamole project provides an example of doing this called +"guacamole-example", but this example is already completed for you, and from a +quick glance at this example, it may not be obvious just how easy it is to +integrate remote access into a web application. This tutorial will walk you +through the basic steps of building an HTML5 remote desktop application using +the Guacamole API and Maven. + +(basic-guacamole-architecture)= + +The basics +---------- + +Guacamole's architecture is made up of many components, but it's actually +straightforward, especially from the perspective of the web application. + +Guacamole has a proxy daemon, guacd, which handles communication using remote +desktop protocols, exposing those to whatever connects to it (in this case, the +web application) using the Guacamole protocol. From where the web application +is standing, it doesn't really matter that guacd dynamically loads protocol +plugins or that it shares a common library allowing this; all that matters is +that the web application just has to connect to port 4822 (where guacd listens +by default) and use the Guacamole protocol. The architecture will take care of +the rest. + +Thankfully, the Java side of the Guacamole API provides simple classes which +already implement the Guacamole protocol with the intent of tunneling it +between guacd and the JavaScript half of your web application. A typical web +application leveraging these classes needs +only the following: + +1. A class which extends `GuacamoleHTTPTunnelServlet`, providing the tunnel + between the JavaScript client (presumably using guacamole-common-js) and + guacd. + + `GuacamoleHTTPTunnelServlet` is an abstract class which is provided by the + Guacamole API and already implements a fully functional, HTTP-based tunnel + which the tunneling objects already part of guacamole-common-js are written + to connect to. This class exists to make it easy for you to use Guacamole's + existing and robust HTTP tunnel implementation. + + If you want to not use this class and instead use your own tunneling + mechanism, perhaps WebSocket, this is fine; the JavaScript object mentioned + above implements a common interface which you can also implement, and the + Guacamole JavaScript client which is also part of guacamole-common-js will + happily use your implementation as long as it provides that interface. + +2. A web page which includes JavaScript files from guacamole-common-js and uses + the client and tunnel objects to connect back to the web application. + + The JavaScript API provided by the Guacamole project includes a full + implementation of the Guacamole protocol as a client, implementations of + HTTP and WebSocket-based tunnels, and mouse/keyboard/touch input + abstraction. Again, as the Guacamole protocol and all parts of the + architecture are documented here, you don't absolutely need to use these + objects, but it will make your life easier. Mouse and keyboard support in + JavaScript is finicky business, and the Guacamole client provided is + well-known to work with other components in the API, being the official + client of the project. + +That's really all there is to it. + +If you want authentication, the place to implement that would be in your +extended version of `GuacamoleHTTPTunnelServlet`; this is what the Guacamole +web application does. Besides authentication, there are many other things you +could wrap around your remote desktop application, but ultimately the base of +all this is simple: you have a tunnel which allows the JavaScript client to +communicate with guacd, and you have the JavaScript client itself, with the +hard part already provided within guacamole-common-js. + +(web-app-skeleton)= + +Web application skeleton +------------------------ + +As with most tutorials, this tutorial begins with creating a project skeleton +that establishes a minimal base for the tutorial to enhance in subsequent +steps. + +This tutorial will use Maven, which is the same build system used by the +upstream Guacamole project. As the Guacamole project has a Maven repository for +both the Java and JavaScript APIs, writing a Guacamole-based application using +Maven is much easier; Maven will download and use the Guacamole API +automatically. + +### `pom.xml` + +All Maven projects must have a project descriptor, the `pom.xml` file, in the +root directory of the project. This file describes project dependencies and +specific build requirements. Unlike other build tools like Apache Ant or GNU +Autotools, Maven chooses convention over configuration: files within the +project must be placed in specific locations, and the project dependencies must +be fully described in the pom.xml. If this is done, the build will be handled +automatically. + +The basis of this Guacamole-driven web application will be a simple HTML file +which will ultimately become the client. While the finished product will have +an HTTP tunnel written in Java, we don't need this yet for our skeleton. We +will create a very basic, barebones Maven project containing only `index.html` +and a web application descriptor file, `web.xml`. Once these files are in +place, the project can be packaged into a `.war` file which can be deployed to +your servlet container of choice (such as Apache Tomcat). + +As this skeleton will contain no Java code, it has no dependencies, and +no build requirements beyond the metadata common to any Maven project. +The `pom.xml` is thus very simple for the time being: +i +```xml + + + 4.0.0 + org.apache.guacamole + guacamole-tutorial + war + 1.5.5 + guacamole-tutorial + + + UTF-8 + + + +``` + +### `WEB-INF/web.xml` + +Before the project will build, there needs to be a web application deployment +descriptor, `web.xml`. This file is required by the Java EE standard for +building the `.war` file which will contain the web application, and will be +read by the servlet container when the application is actually deployed. For +Maven to find and use this file when building the `.war`, it must be placed in +the `src/main/webapp/WEB-INF/` directory. + +```xml + + + + + + + index.html + + + +``` + +### `index.html` + +With the `web.xml` file in place and the skeleton `pom.xml` written, the web +application will now build successfully. However, as the `web.xml` refers to a +"welcome file" called `index.html` (which will ultimately contain our client), +we need to put this in place so the servlet container will have something to +serve. This file, as well as any other future static files, belongs within +`src/main/webapp`. + +For now, this file can contain anything, since the other parts of our +Guacamole-driven web application are not written yet. It is a placeholder which +we will replace later: + +```html + + + + + Guacamole Tutorial + + + +

      Hello World

      + + + +``` + +### Building the skeleton + +Once all three of the above files are in place, the web application will build, +and can even be deployed to your servlet container. It won't do anything yet +other than serve the `index.html` file, but it's good to at least try building +the web application to make sure nothing is missing and all steps were followed +correctly before proceeding: + +```console +$ mvn package +[INFO] Scanning for projects... +[INFO] ------------------------------------------------------------------------ +[INFO] Building guacamole-tutorial +[INFO] task-segment: [package] +[INFO] ------------------------------------------------------------------------ +... +[INFO] ------------------------------------------------------------------------ +[INFO] BUILD SUCCESSFUL +[INFO] ------------------------------------------------------------------------ +[INFO] Total time: 4 seconds +[INFO] Finished at: Fri Jan 11 13:04:11 PST 2013 +[INFO] Final Memory: 18M/128M +[INFO] ------------------------------------------------------------------------ +$ +``` + +Assuming you see the "`BUILD SUCCESSFUL`" message when you build the web +application, there will be a new file, `target/guacamole-tutorial-1.5.5.war`, +which can be deployed to your servlet container and tested. If you changed the +name or version of the project in the `pom.xml` file, the name of this new +`.war` file will be different, but it can still be found within `target/`. + +(guacamole-skeleton)= + +Adding Guacamole +---------------- + +Once we have a functional web application built, the next step is to actually +add the references to the Guacamole API and integrate a Guacamole client into +the application. + +(adding-guac-to-pom)= + +### Updating `pom.xml` + +Now that we're adding Guacamole components to our project, we need to modify +`pom.xml` to specify which components are being used, and where they can be +obtained. With this information in place, Maven will automatically resolve +dependencies and download them as necessary during the build. + +Regarding the build process itself, there are two main changes: we are now +going to be using Java, and we need the JavaScript files from +guacamole-common-js included automatically inside the `.war`. + +Guacamole requires at least Java 8, thus we must add a section to the +`pom.xml` which describes the source and target Java versions: + +```xml + ... + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.3 + + 1.8 + 1.8 + + + + + + + + ... +``` + +Including the JavaScript files from an external project like +guacamole-common-js requires using a feature of the maven war plugin called +overlays. To add an overlay containing guacamole-common-js, we add a section +describing the configuration of the Maven war plugin, listing +guacamole-common-js as an overlay: + +```xml + ... + + + + + ... + + + + org.apache.maven.plugins + maven-war-plugin + 2.6 + + + + org.apache.guacamole + guacamole-common-js + zip + + + + + + + + + + ... +``` + +With the build now configured, we still need to add dependencies and list the +repositories those dependencies can be downloaded from. + +As this is a web application which will use the Java Servlet API, we must +explicitly include this as a dependency, as well as the Guacamole Java and +JavaScript APIs: + +```xml + ... + + + + + + javax.servlet + servlet-api + 2.5 + provided + + + + + org.apache.guacamole + guacamole-common + 1.5.5 + compile + + + + + org.apache.guacamole + guacamole-common-js + 1.5.5 + zip + runtime + + + + + ... +``` + +The Java Servlet API will be provided by your servlet container, so Maven does +not need to download it during the build, and it need not exist in any Maven +repository. + +With these changes, the web application will still build at this point, even +though no Java code has been written yet. You may wish to verify that +everything still works. + +If the `pom.xml` was updated properly as described above, the web application +should build successfully, and the Guacamole JavaScript API should be +accessible in the `guacamole-common-js/` subdirectory of your web application +after it is deployed. A quick check that you can access +`/guacamole-tutorial-1.5.5/guacamole-common-js/all.min.js` is probably worth +the effort. + +(simple-tunnel)= + +### The simplest tunnel possible + +As with the other tutorials in this book, we will keep this simple for the sake +of demonstrating the principles behind a Guacamole-based web application, and +to give developers a good idea of where to start looking when it's time to +consult the API documentation. + +It is the duty of the class extending `GuacamoleHTTPTunnelServlet` to implement +a function called `doConnect()`. This is the only function required to be +implemented, and in general it is the only function you should implement; the +other functions involved are already optimized for tunneling the Guacamole +protocol. + +The `doConnect()` function returns a `GuacamoleTunnel`, which provides a +persistent communication channel for `GuacamoleHTTPTunnelServlet` to use when +talking with guacd and initiating a connection with some arbitrary remote +desktop using some arbitrary remote desktop protocol. In our simple tunnel, +this configuration will be hard-coded, and no authentication will be attempted. +Any user accessing this web application will be immediately given a functional +remote desktop, no questions asked. + +Create a new file, `TutorialGuacamoleTunnelServlet.java`, defining a basic +implementation of a tunnel servlet class: + +```java +package org.apache.guacamole.net.example; + +import javax.servlet.http.HttpServletRequest; +import org.apache.guacamole.GuacamoleException; +import org.apache.guacamole.net.GuacamoleSocket; +import org.apache.guacamole.net.GuacamoleTunnel; +import org.apache.guacamole.net.InetGuacamoleSocket; +import org.apache.guacamole.net.SimpleGuacamoleTunnel; +import org.apache.guacamole.protocol.ConfiguredGuacamoleSocket; +import org.apache.guacamole.protocol.GuacamoleConfiguration; +import org.apache.guacamole.servlet.GuacamoleHTTPTunnelServlet; + +public class TutorialGuacamoleTunnelServlet + extends GuacamoleHTTPTunnelServlet { + + @Override + protected GuacamoleTunnel doConnect(HttpServletRequest request) + throws GuacamoleException { + + // Create our configuration + GuacamoleConfiguration config = new GuacamoleConfiguration(); + config.setProtocol("vnc"); + config.setParameter("hostname", "localhost"); + config.setParameter("port", "5901"); + config.setParameter("password", "potato"); + + // Connect to guacd - everything is hard-coded here. + GuacamoleSocket socket = new ConfiguredGuacamoleSocket( + new InetGuacamoleSocket("localhost", 4822), + config + ); + + // Return a new tunnel which uses the connected socket + return new SimpleGuacamoleTunnel(socket);; + + } + +} +``` + +Place this file in the `src/main/java/org/apache/guacamole/net/example` +subdirectory of the project. The initial part of this subdirectory, +`src/main/java`, is the path required by Maven, while the rest is the directory +required by Java based on the package associated with the class. + +Once the class defining our tunnel is created, it must be added to the +`web.xml` such that the servlet container knows which URL maps to it. This URL +will later be given to the JavaScript client to establish the connection back +to the Guacamole server: + +```xml + ... + + + + Tunnel servlet. + Tunnel + + org.apache.guacamole.net.example.TutorialGuacamoleTunnelServlet + + + + + Tunnel + /tunnel + + + ... +``` + +The first section assigns a unique name, "Tunnel", to the servlet class we just +defined. The second section maps the servlet class by it's servlet name +("Tunnel") to the URL we wish to use when making HTTP requests to the servlet: +`/tunnel`. This URL is relative to the context root of the web application. In +the case of this web application, the final absolute URL will be +`/guacamole-tutorial-1.5.5/tunnel`. + +(simple-client)= + +### Adding the client + +As the Guacamole JavaScript API already provides functional client and tunnel +implementations, as well as mouse and keyboard input objects, the coding +required for the "web" side of the web application is very minimal. + +We must create a `Guacamole.HTTPTunnel`, connect it to our +previously-implemented tunnel servlet, and pass that tunnel to a new +`Guacamole.Client`. Once that is done, and the `connect()` function of the +client is called, communication will immediately ensue, and your remote desktop +will be visible: + +```html + ... + + + + + + +
      + + + + + + ... +``` + +If you build and deploy the web application now, it will work, but mouse and +keyboard input will not. This is because input is not implemented by the client +directly. The `Guacamole.Client` object only decodes the Guacamole protocol and +handles the display, providing an element which you can add manually to the +DOM. While it will also send keyboard and mouse events for you, you need to +call the respective functions manually. The Guacamole API provides keyboard and +mouse abstraction objects which make this easy. + +We need only create a `Guacamole.Mouse` and `Guacamole.Keyboard`, and add event +handlers to handle their corresponding input events, calling whichever function +of the Guacamole client is appropriate to send the input event through the +tunnel to guacd: + +```html + ... + + + + + ... +``` + +(next-steps)= + +Where to go from here +--------------------- + +At this point, we now have a fully functional Guacamole-based web application. +This web application inherits all the core functionality present in the +official Guacamole web application, including sound and video, without very +much coding. + +Extending this application to provide authentication, multiple connections per +user, or a spiffy interface which is compatible with mobile is not too much of +a stretch. This is exactly how the Guacamole web application is written. +Integrating Guacamole into an existing application would be similar. + diff --git a/doc/1.5.5/gug/_static/_sphinx_javascript_frameworks_compat.js b/doc/1.5.5/gug/_static/_sphinx_javascript_frameworks_compat.js new file mode 100644 index 000000000..81415803e --- /dev/null +++ b/doc/1.5.5/gug/_static/_sphinx_javascript_frameworks_compat.js @@ -0,0 +1,123 @@ +/* Compatability shim for jQuery and underscores.js. + * + * Copyright Sphinx contributors + * Released under the two clause BSD licence + */ + +/** + * small helper function to urldecode strings + * + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL + */ +jQuery.urldecode = function(x) { + if (!x) { + return x + } + return decodeURIComponent(x.replace(/\+/g, ' ')); +}; + +/** + * small helper function to urlencode strings + */ +jQuery.urlencode = encodeURIComponent; + +/** + * This function returns the parsed url parameters of the + * current request. Multiple values per key are supported, + * it will always return arrays of strings for the value parts. + */ +jQuery.getQueryParameters = function(s) { + if (typeof s === 'undefined') + s = document.location.search; + var parts = s.substr(s.indexOf('?') + 1).split('&'); + var result = {}; + for (var i = 0; i < parts.length; i++) { + var tmp = parts[i].split('=', 2); + var key = jQuery.urldecode(tmp[0]); + var value = jQuery.urldecode(tmp[1]); + if (key in result) + result[key].push(value); + else + result[key] = [value]; + } + return result; +}; + +/** + * highlight a given string on a jquery object by wrapping it in + * span elements with the given class name. + */ +jQuery.fn.highlightText = function(text, className) { + function highlight(node, addItems) { + if (node.nodeType === 3) { + var val = node.nodeValue; + var pos = val.toLowerCase().indexOf(text); + if (pos >= 0 && + !jQuery(node.parentNode).hasClass(className) && + !jQuery(node.parentNode).hasClass("nohighlight")) { + var span; + var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.className = className; + } + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + node.parentNode.insertBefore(span, node.parentNode.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling)); + node.nodeValue = val.substr(0, pos); + if (isInSVG) { + var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); + var bbox = node.parentElement.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute('class', className); + addItems.push({ + "parent": node.parentNode, + "target": rect}); + } + } + } + else if (!jQuery(node).is("button, select, textarea")) { + jQuery.each(node.childNodes, function() { + highlight(this, addItems); + }); + } + } + var addItems = []; + var result = this.each(function() { + highlight(this, addItems); + }); + for (var i = 0; i < addItems.length; ++i) { + jQuery(addItems[i].parent).before(addItems[i].target); + } + return result; +}; + +/* + * backward compatibility for jQuery.browser + * This will be supported until firefox bug is fixed. + */ +if (!jQuery.browser) { + jQuery.uaMatch = function(ua) { + ua = ua.toLowerCase(); + + var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || + /(webkit)[ \/]([\w.]+)/.exec(ua) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || + /(msie) ([\w.]+)/.exec(ua) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || + []; + + return { + browser: match[ 1 ] || "", + version: match[ 2 ] || "0" + }; + }; + jQuery.browser = {}; + jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; +} diff --git a/doc/1.5.5/gug/_static/basic.css b/doc/1.5.5/gug/_static/basic.css new file mode 100644 index 000000000..30fee9d0f --- /dev/null +++ b/doc/1.5.5/gug/_static/basic.css @@ -0,0 +1,925 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +div.section::after { + display: block; + content: ''; + clear: left; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li p.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 360px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +a:visited { + color: #551A8B; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, figure.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, figure.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, figure.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, figure.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar, +aside.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} + +nav.contents, +aside.topic, +div.admonition, div.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ + +nav.contents, +aside.topic, +div.topic { + border: 1px solid #ccc; + padding: 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +aside.sidebar > :last-child, +nav.contents > :last-child, +aside.topic > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +nav.contents::after, +aside.topic::after, +div.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure, figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption, figcaption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number, +figcaption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text, +figcaption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} + +aside.footnote > span, +div.citation > span { + float: left; +} +aside.footnote > span:last-of-type, +div.citation > span:last-of-type { + padding-right: 0.5em; +} +aside.footnote > p { + margin-left: 2em; +} +div.citation > p { + margin-left: 4em; +} +aside.footnote > p:last-of-type, +div.citation > p:last-of-type { + margin-bottom: 0em; +} +aside.footnote > p:last-of-type:after, +div.citation > p:last-of-type:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +.sig dd { + margin-top: 0px; + margin-bottom: 0px; +} + +.sig dl { + margin-top: 0px; + margin-bottom: 0px; +} + +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +.classifier:before { + font-style: normal; + margin: 0 0.5em; + content: ":"; + display: inline-block; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +.translated { + background-color: rgba(207, 255, 207, 0.2) +} + +.untranslated { + background-color: rgba(255, 207, 207, 0.2) +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +pre, div[class*="highlight-"] { + clear: both; +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; + white-space: nowrap; +} + +div[class*="highlight-"] { + margin: 1em 0; +} + +td.linenos pre { + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; +} + +table.highlighttable td { + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; +} + +div.code-block-caption { + margin-top: 1em; + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +table.highlighttable td.linenos, +span.linenos, +div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + margin: 1em 0; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: absolute; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/doc/1.5.5/gug/_static/css/badge_only.css b/doc/1.5.5/gug/_static/css/badge_only.css new file mode 100644 index 000000000..c718cee44 --- /dev/null +++ b/doc/1.5.5/gug/_static/css/badge_only.css @@ -0,0 +1 @@ +.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}} \ No newline at end of file diff --git a/doc/1.5.5/gug/_static/css/fonts/Roboto-Slab-Bold.woff b/doc/1.5.5/gug/_static/css/fonts/Roboto-Slab-Bold.woff new file mode 100644 index 0000000000000000000000000000000000000000..6cb60000181dbd348963953ac8ac54afb46c63d5 GIT binary patch literal 87624 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

      !pma|lSQ?8FBe{DRl|@FzhU7Cb>&@ataZS{g zrCQo@Lushkm71KyL3$%QD?KeSADp!x{f z=8g-xggQyFIyp&U(+DO4!2ygCg$vPu1pqEc^*Qa)IPstXB!i@fDLx<-```)5UsmT$Yl%a2onC zAFmUqUVZ7M=U;sB~=#ZhJ zS2lbGii8+5IZ#kxQUi*iaRi9X

      #R4x5a04mzf2YJ>#U<-Nc81}`=EFMdUjIP>d| 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

      b(7>T&1{%W+D%3_gwxcBR7_myM-&X z?(#}8K??iQEr-2D<8PjWn8=_qrW=k*CGBR6GzVHu=Ah?Doqy(N9>rZ(Q9WcG8_39*p#SVgl#Svp*p9=^>1)As3kcu zwYZy2O^rU7V-4VHKCltxU7M#UJvHnkg=u*k-lne-$>#C}UdU)(FHDx!L|p&>QLDTx z0d%08F36ctVyiq-6oAe!2D-EDn~BPSsx3MW*g#`uXy)SQleuijT&zgr&$y=f`77~F z+(FP(5r-cI5?W0u-58B7Aj~vdFYORCioWJNvVIc@9~&_aL~dpd;re){sWk}e%+*9lQwRgB-u!r zP2SvgGLMDm%W<+c;ibKv6w)G+^ZD6E=Ja^>HGb(7>iEx`wFFU zE{I1Gns26kw@2bfTjXGfHX6b?6Y9^uyK?g{o@mosCWTBTXe&D!Q67vi7+rbp@R> zx$t2)UXM@Ub;IBTd&@#K*jd&?M~1`;t>Yo)q$RxF`_T3boRO5OtP`r zC93Zs%kcI%wjE)Gk&Qp9br@nw$sX4J-(_E71L`8+G}5T%6s|pf``b zDMRhlBUz)r*grRgVb}xYdCI3IYMg>U5v{FbLs9Gt+oEH`qm$BUm)kezfBda-!+Hcd zc1Lc*h`3V!j_KK*h0VWyvtz>1DOExR-YBg{=ceD;8)ObIGKZZJc>XW7)wM|KlpG(Q zK__fDeCbVYMs6YgaOn_!&l6$JN$HZA-t8>fA0HEx8W}7sKe%&k*Xi!9<_uVOsCJtW zoYbv@GT}Hq+dae!;5@UEG12IBw~zCU&bP=eTG=w0s2PX1+;v7qUhkqO@)QlzrI3p- zyJ=vi?piksLM#@(v2!noIC$ali_`cug*Lxi&t6%|_;fS;z7z7YxZ}gtys>fwbb9~Z z%Ujk9rX3Udb?chb#?c5ZO~KbBp2;UXV?tZZ82Fkg3M|xK)&AcS`Fe;ZLh?jiUA@l_}BhEg&me1m8SF6ajYBj)nNgD_Z3^WstO{N%E-vHG~^Q$9UT;skRa9HB5QkDq_GE~vCP4O`k~z@Q%Io{ zR5Te)g=4}m7SzJjfCMknhkBKS*4+c){PzI(&8ei#iT>fE3PUpN3sO3D?|E)mkN8&d zOSPNtH8Cgg_eWpa+g`FThgq#%y5v-pbW#>F>X;d*W_=i5V;{-nRBoaA@bZp;V(f%Y7YG+jK=@i~6Y2S)P zUkT`BWLW#SgqR`lTR>ZPg^!DnKYsM!kUn;{IdMbECkz$5{QP|agQqi69}?D%l@WW` zl&k^CZsU+=i+CsMLn8hhv_C)p3NA2$Emv^%MS;M%YVO<$WR0*60HU$4SxpVBK*n*Q zd@7wk$uXmathz^{mZCbo9g^c^W)4Zd)2p`bTzp)BQ(eNNqhs2IMjAsVDUr6`)Edy- z@e`K}AIckew+#yp?c``B$>tz3mksNq;hT?T(@NdJtl3>kWz$MCIXnp&5ZKB?>7Uro zEiY{5yl<)&|M2rfpIA#}XjoJ<>tk+OWo+6rsg0BCj1l8k?3wq~f*KraYiZW0Pgr13 z7^99%L)8RVLxQV;B$HBMXmffUfvP7KUtZZ04@EuD^yS~}o;YzA7^JQwvY1QYwq|`k zFN+l5ma@oxMi!AOIVvgh`^76xWu?WZ9$hed-;tEy@bvVEkR2V z#{rQ;CQKL-k>_Zi)uDL!a2({_zP-1%LID+S-d^tRer?4bUxWu6Sf9_!p(c3blXCb) zc!sOeYySF!3l`U%SspY@(b_8`)i=U4xqWbC^um)c&5Xg& z(bhR3yK`W0{6Fg%K<3xppS8T*9$MBi8*pOvn&UsLSzUJ}B{n7{IW9IC6kqJz`Nh#i zyLT^wq+Y#}j-__*p2`3-6D?)qSpSdi7UO7ID_UAD)o&lqWuPO%VOrCcaU$ztZ)vQ{ zioOel4Nv?!6af*0^B?l!eQYj{!wa4Nov=E z!ZeS701pp^Lc(+G-`dQN!-D1`f>GNG@Xfrw^e9 z4w#>L2&Q98#!bT4>(Ag@JOYO?S%sto@J2RcP`_R!xv9dA+rOU7+2QZKcht%HUrq=a zgNEb|FO~Sm2PcYgMt)2Av!eB%ZBogoVw;U75c?YhCuBtSNf{Hr;>dX|EqbG z8fGqWnv)B$BxD^N3=Cqz=N>+Tuf2JIah}rFwqsy!39wgvyL-S0Roej>%Kih=yY=sG z>uq7@G_YXol$a!TtyjNb>s6OI!N|$X%XQ_#nfKR@=sv;SCc-l+r**)(e%2e#8tCB# z(S7%Mk552Y4O`bZ7?~qax^{iZ+WC>OwD${^?iZvq2>N&1t~`VFRUP;A z92S51k?Pe+e4j^PH>h`EzoLSS-WF&&>-`MZI(q<%8=qXp&u)Cj8}}QuXk^9mh#(4k zF_|xmulwAdVWTdlVyO`ztvv(nNuQh0F1jdg`Z|FPSl0LWZT#xDNBA}*9#al;nNXBD zXfR*r;{3CZ%T0VALct0g!5Pw3e(ikw?K-+?X{B2e*RO>Pw89S9w4ilm7wYRT4O|su3ovjvZo+0cr33Qxbn^R`^xv47qsgPr z&D^ZIuX+eg3pQ<@96o3Nw_i#!8A)PCuXCyYb7y-|+iA}B-}bHe_W1L<3k^KN_36rl z^d6H>{qW)3uO9>ihHPn1We@Q3PjK*9F>T)QAC?Hw>GACXqU}7ZXMJ(x=3Jp?YLtj~ zBEh?>m`CPI@b-|~Qr`%1AbK=!GYU29yQxhdGXf0B`lm#YKtq2Rn)B_J=B_!`@O){v zuAS5HW2A%6AAbXEk!nNCKb2>YOI)x?fS-PgCM{1Awa1dtyRCf?Z+j(0W)f^A? z-j@{{93#@BD}jgQQbpgEu?~2C+(q}Ja`dQkYBuPxT+>&7;t#;TKG{HP(q}10P-%*EZo>Td%q~tMIp^Eo3_AgADW_gS3KF&v}c?DQouG zYRy2pHfljY)5f@4vG~nmiwmiG=VCL<1VEn0IIkP&`_vACj9zz~8uTOj<< zaPoqwU#_1sW1J!UF8q#P|Ffj{b%U^EDP8X^*A^^gTCT6_C)U@M`*=z-?d44XhM;L_ zh44$uDbr?b6xa7C+|gQJ{Hri#s%CY8F*~B^v&7c(wJq#kgjkXYU@qFdZ2h&Bt|s`V zvFq7Asy^&D+y(p!yWzd$o;e!X-MhzVVzIbfzV3hSJWBcIbLUYma%}OKx%k1O$N2u7 zv8AIy@3-H;0ON|hyz%1-^U7Nl_U@gRpV>Q~YddIL+rR@OPyhDY>5&Hm{I(AI;o7yv zz5Pdx>Yq1!1iIg=v^cX*X({2I1Ogka5AOD|r1B^2;Kt#L0%oS3c?y=-?tnEu z^*VW7e5>e*6FU!-4ax0QmVai)n$8hXpm+Z|$nZJ*3~$AM9r`@|nLKa8{C9I6 zXcIdq@n+nh8d`n)cr{x3^Y^Rv?p^i$&wMT3fg4`q zw|G~LGn}o4-6RVADeiQ2$DiA-;{5-D@B)qb=dJ#~_W)0+ymW~K`=2`XsUF~qtJ9oo z@q_Bx&-DQJBrta%G`6AfUdAL7nB!PzE`})(8WTz*+7=H$PpPlz#%#oCN?{UUTb9C< znQ29PnNf!r-+>eqetY2py%0Qo8aEiyDxKvU@Z4%_EJF0A8b)q_X%rsR^cI+@S+=f5mTg&%V_Bxr z$g)hzSb9;iUvV7fEQS-4Mz*A6qc~{2WyrF#kSv6mnd6Xyy7RkEAG$qfW@Nwk?T6=p z>D;2O?yjmXxPSJ?ajDNwX73MbeQ4i}0f>9mIOQLX0UL$^08}uEoA5T+TG>nzlxXH1 z3*aF5OgQ&=3OF$2X6$j)*0F)ar~h#KCt}$B7VKmADcrvhY)R17dBfgl!9I=+xQjZ* zb+ncp>Bbn?B)HPmGN(ZlF|sTq4GjhhWlbmYnX>Slg74!&nm=1c&+S2}x)EfIjZcoE zTZz%Qpros&$+ZPfPG_MV9@M=&3}Rm+j`0>Oyfg5(cq3_chU|jA>1q@oxM(>gtibKAtPRY2pc7mC1{)a2w3x<@2?8@FRFX4#RzwTndj#hhGO$>19%` z(re{$&j>LGZZ1LSd9c^V6xxo;rtF{j>7V(2(+>LWo;1Z%m6D$RIW{yf80lDkfOKqK zbuIsrcpuTdj_4i=rd*Y+7uWwb~s-{xg&;Xqpxqy#NG+*EB@lC|X zh}q-t1-y+a{PH;_IrRoc7WQ1AHnT|ODxSvdxl^D3n1ZRO5m3-`*SXph8??8PVhz#% z(R#=D`Yn9A?zcYpzz7NqlF&bg*?1MfDlU?Tu~v+5&Q8xvT^;A)(n z4~r2rXCYW~Uk70Ssy0}39iMv@UPhJ5jr9eG@f1Wx-Cg)$2N|%#X`s64Y=h{TAejFO z!2U($EtoTNn{YoYuZ-8wN7p;r+-kvT8mU-6S~KaYsd&v+nKK=S@F1;O8!9<~T=XO3 z+F78%P9Ak1%>(0;%TQK80+qi`g96SJpLQKa1vqGW3m}e9gP*!;j%~0EdG>F3uOu z1`Ez{Eb6sdS6MyK+vRYHG*^_SH*w^Lvq3gA5lq#Wz`VhNc?!ObH_;6GE>v;^xfn*| z&g3dfn5c!BiK1_)Z-{WX{Rxh|g<}T(3is1wA%#NX!jhyTK7lo&VSUe>jUxnWW4I zP>Z&4U~o9EPfAGm{=CKaG29BR)Um%e)xY}gI~h&I|bZPIixG& z9oMg+f!YbUKKETdGmjYGPs<`7(2+~gL1Ww3thOjA^d##q%N8A{_H@GYE6-VlIe!bf z-e%-(4K;Fd2l|x^srY*hHLjc63%OicK81j;e2T8^dKxg1W>HqGmC?Uhw9WLj(Ny~- zR>((ElN@^9;xug3VVkwOC?_r2*@GGT#j^P;p|a&hIN zEt{5*hn%gY1wR76p8E>?cID-omRy<^&-Go;pMiXV^ZY?zIVVTsVUZfnr#2JpEe15~ zfI=ZyzMvjBB(g3bvX~;0s;Y_14CSsTLh0VAu5}*cSH}0w&d?v&F;|5@uM`_mI1&N- z&}ET7a3OGk!n6w%2#0(m@8bZtOfmOh)Pb5dndb$^rR5M@l<|83-l6jZFjeX9?PW;A zLsu-PW*qH$2t}#RcQwc!){}3a2<;N*=i(bNUzY~@IQiT@xT^A$CUjUC!7q9r-A1MdEC0Wx;jQ)!EwH*4v;DZ%<(hYwOiK9K# zlI*yE) z{%AGykx$T=_yoNG{4sN1^b)+QLc8@P&`F)rd(c&5DC8)DP~34G(0&<>cwy)=9fzEj#-E8Vp9zvS_4_J6+`Z{1mWkSZS?Xsa+K0=>{ z^?tKPeFW?JaE;yz{nWL$+|=l~lmps^j)pNwH17#$4yNxBT)2j#@s%i;OX5i2e$j$^ z3~z+?Ot?}8x{yCVxIeYv9*28CQ52e1PpDex&ZI=4Pzh?YsWK^VXdo1UfMXmVNaG;+ zPIgda*QQ({iG~?}Z9m?ej$Wb?2Jt3pH5hXGY$*)P& z+Cj#G?H%-nZ6m3)HV+MvN~hqyHw~9)UY#dz%z~Oy5gV?dm>|3TNqkd2X2nsD!hhk; zClEs~C2{W9R{SH&Ry?`}m$v3(k799aKEq1P_auC&X^XEDSjKnKJ>A*NT$Kv3`yNxS zs}7_B-x6H8Ka0t7xja~=?kk4Z+(68$Y_WJf@tmi@Z&i+NT+MvXavf}ji#ZnfPp)eW zz6Gt)RjY{eWV*V=e_hCb^#-ZLS&RRZd<6ha6&*FaD`ed$u?Ll2f-<#$S@?lrM|4M& zl%B|3v(D8U_*s5sns>s*J^=tvtK1ebzGKw@=O8zu3tP~0#XJ#YuQZ9o+Y6po@`5!d z|0H|O*XcF*k{YvO-pBCY@m4xJOw60>)wUzm5|of?DvnXdvM+PGT7q!2+aKGTkBQG) zcJwj45L#hR<;uv8W|Jx77w|x01tw;%i%FP)X-@ijYb{)l%&>&7i!8p5qrj_Z&V{i8 zBkr8|xk$*vHlvvgHZ&OygCi{A@yBT%>Hd7SpnW?$(5taUd>Wh6aiue3F-(?c!mC%q z>*xp>ytUl=?Wr}~Z1MU4p2Qa}zJ>~@abxxxma^9H`!)O#j(S+L=o-ep!$NB~(7(hQ zUTyI;3%|evv>#~=l}xRnl0qsm6NbNMT$BKggsCN$Fyc=tYyD;qH^Ow~23kKQcQR31*dmS zao9z&XH+z5BX=WpQssjbz1 z4>CU2A6q`x(R#MHKf9=RIXJMOKWq3?(-wax;Jx@xxUF(?R}1sK^z)PcYtQ$+0~WKs zX4ZH2FUo9lbMsI$H4Et;jF>JA#6GTUwRk>p-3(DM+Rt1SySOpqd5;AjEaY+a z^^pYVVR6N>@v-4STMmU9Ijphd@Br?`XFrMS{DU;lgb%(4YoB=JVxg5L{;Icdnqghb z-${HC_;e}+{EapH9(S+@U8fg4m)o2!%whVD9_$~sd9A*|`8j{8#p_88YYY5crHOc5 z*H?DH8Ak~ds3Z@A+G7#(nJlLbk}#G%oJb3lRM#&cs*dxAOo8im679<6qr(}ZO>}3s zCEHneH(npT;d*X*6ZzIV}Pr;0Nryv6pO{+>F%tcD<2mOEB*v0GD1y6d=YfHNH3Mt3gJC!imOAELwpqNNIC=-g-q)>Qp1T0+IiCgQm{P$e z%`eIQ^5x67F5kLkQ{!+bgM6(FR$DT70Pn#&VOQmnTK1hun{5RW$x6#&yHqm#y8UT> z#iKR+5-tJj=uFOJR#0EG;2mh`H7+$8?jqefp}jnZ}O&Rn&?YJvh6lsmN)d!)cIdr9uVhWMNs z5B-Q6@G`PNhx&UQ>2{lWNa!MTb+(a_SMNI9sYya3_K}Apk%VbBM-k3OJr1@(V+&)F zKT}8InB?UK7yLH9kYKFCKuJ#s(%ce$$addoS7_mDLrJXqZa5(W^nWq@W!egDr+*@DK#C!WQN^e9Y7q+bx zo3Y&ANNFmxul}UEo82S65$~(}!kn{xbHAWGlD6hX#}V~)u7;`tf1RTvDA|6-ysTK! zU1KhVdb8==8F7Eg=3gG(XOC2mlYDgo3<+2vl#pXbyN)3m+2Q20|9u+AmgpF;6SPe80qLtPztEU7SbsVo#)=do}QBVl?Faks`pYJU5ZW`pr(N%JCabUrP|;S9Fk`io$LyJ zlFr6*6HzK{iE><=!1!I#nTTkFm`3~)p`fp#4Gp3)JhvFy!~wuU^uYtV)!sK_If{fj zPSnwAGr{*|tanr6{PlKjv}h#wZ#nl5^zP^*bAYJi^hyv;A~Q;AU6QeV)oXKhN;l;EcirU8E$bz>p+p80ZDFIU z(oM;DRj32JI-5y%S0||}2Yy6Yl=t_AbSFA+?ya2iPGY*_eQ-aWZ&`E?^fR#y1QSQ* z)7?g7)4iC;d$%R;S-cRhr#!-*&NfGIi+UCZ9GN(*Eb{w$$;S>^&&%%As zNOcB*%`E0~;b`d#5E5pTnKW&4V%xCq3Gg%%9!SY)?nWU=P6G&{U!&pk&{)uIImNlV z@~2kL=~4IqUc6-PZYg?MkKd*L#Cn%Ly2eRf`xkzdo|n73&!Xo9mhc@kopP|7Nr98p zeOpR#03>jfe19f+U0q$vx|Zqdl%RWksrPf)X3=@#Id@RzX9_w=j`QG+KAY+c@DS5~ zxkdkJY&1E%61l>REaoJl5xvjHw0ah;r=J(R^(&sUZX%NDMz~aYFhO1YtSiWqWBByOF4fQy{`YH4t z=GZuwq;hPoG5Fx)&<7H9;PbS1yL(Gk0UKjeG|jiV>Nt9IQ|ruUIA=u^wug| zDQ0Y3u3OCH&q7G}bY0j<@rcFWU3mXo6%JIU4K9x_3-Um1G~Dxeoc|f~=VzvGPE1T} znb@MMxeWeXf?xO8xT1z%!aw*#@wYrq{O68a{F`&-xz*Q@&5-EP$`y2+*b2+!k<5kd zFj(}4FgPq84G#XeakOOPi1qYxYaM6d5AiyR<&own8DXkpht;T{B;6A{~{! zrK7Xko9QH83R8*|fapOv;mXD}dhRV$15LO_3D<^Dc5kcROSd)jbw@NKu}$fS$HwG`$o!e}{w2MnwIQ~Rw&@&TDym6@R|w;urUqVJ zZpm*JK9AQ?ETN^Tg26(t7<$x!cGKVqIWG zaRKRq)&h{E5R8;s9X1N_ICR0(AWc~{NT;yN)as?{$x`)5JhQYct1@ZDGMdQQ*ORJD zf;hiXwpjU%r~a>Qn(W(!t{OohHC9oZ>nJqh%uL{nyhq9ePUk%uUgcvJuScPZJ0Djq zTB_1Y)$k+!#Ny}ZUT3ik*34|pIMXztSxs9spTLXpopiDVo!B!jssWsRq3U)80d3?pYFC@4e8B0v2)fJhrZ*(St8^#-w-Z?Skd=^O+| zt%F9Qxe)pT6flBP@JXA49Z}kPN$OXKn*GuRpzbksn_Yxsa~MbeCGMj0lHx7WZ7vrJ zK1y_wz7>w7z&JPvGlDaUjEAGl$&DyC>RlPi3PA1@KaFKI6~ccSD0=TD_^zLVPt|vh z?^5oXL&0P6R>0wKD5!T+^hi_}p`ul9AXN0f+(4>^bE8$mc^mbUA8N z)R`*gB(|uUQ}xy4Zhynd2|o_6ocjgIjbcb#*5q(IL3sj`oXv#E`19lZl*Fx3#C#Mi zK4#!uW`8VJi<*?arWv3F6XGEBy=ZRsNi`7X_ihb+uiNlOdh=)K2oD3O+(CyQH0hGD zcjq`_k8AGZWPUbcV?%u%7O_}rAO(ng``~cQv@?)i%X7f|Z;^zvB zpILZ4-at2gxuMQcGUCcf8%?!H36(dWu@>FBsZ<}crmd%lFX`3rC1G|~nQl&lG2$)p z32M+8Phf%dYBUU*b72xdoiXu+Ny7DFqZ7^*I1L9YH+CU1n%;*(2`xut4#R^WeOJhX zkb^wr@_NyL`wk6r2UqwmMdqS8t3s%&sc5aBE*_w%w7O@7#%?;!nEb?Ddan9Irsi)K z;eUm}&u)e`cyZ+gU7F7p zlxZ@lu+ih@Nc@#UUj^^g^eI?hPE~vzN?E2~-NRVq6?4bpw+<&k6 zR>I5+I%zt3M_Wrk1lJ$OaIdl8K8SnaMfCO9Kvzrjb&8G$Yrn^j;PrD~r-^|p^$!e_ z!oa_^x-OVaMKi(a`?rNY^O3o^U}k)d2QoJEpNx!m(06YSW&B7mtFEnCV*0x;S>GMQ z+o2=lyT`2Wj)PuVnoZME``y2%zav>)-Wh01tA^(U-xX~CZGqVJ9!?XUoPK!v})V*u={hCY^jcl;ruuBjM*H}_Ql_7y`PnD0zI=`}zU zHkRr%OeeuDUX$cn;~#}O@}JP7p)Tv^hG#Pm$k2EjefP(qtp6*}(cZ4sk{|1m`Sw%R zx5x0A(73?2-?zR!4qB%A+rjR6-^zOH+f(pLXwl!U8lDgLk@UB;M%OlxhU%PiA|ljh zGXqC_JF;W(FGAja3WL$_uk4|HaH_cQCe<62f;pue@>{YUycqVf4% z#Cdcm{v9_3cUL9soK=`cmJTxpLwg*4`yrX}(jx*}L&~zqYNRFrBaK_p4L+iT-a1*RgAkuf$gEZ65`tBsI3eKRh{u+4Fx4xT&H$Zcs z6XADe9$iY#?+oR93W@}8z;{yL$zJQb6Yv&zCh2T{&39%!;_rx$Ex~#WCf}W#r8#)D z-{BkZ_Udc(cjH6hcV>oN>dbwYp$~h(4fLRa(RU_y@pI;!g5>Nw^$I$rdYhB8?`Ht) z!?bSkcP7X2cA%A`lh5F-17QDT)~zmqcjBFg?Xy|u3Krt^h~S;XbpV99Ere(0D{^qnf(th@IVyfc^`uzIBS?)@|CyQBL4 z5wx#s?{e8;eRl#r3`geQ`SM!py9e=VcrmS?Zrj~t)+GKmXMKAbJ_>a6j|>vj_}l9B zG@sA<_9UJNP+Wywdxca>bTcq_ z%?$veQ{HCo8W@I=+lZ&PS3dy^&KR#cpDq;asMO`r<2jUGSok$%zFK3q4&~B)N>uyh zVOH^1M`i8&exq`UexsCkZIvDpA2$NX{~>RU`4|uR_$(mBJ!$9;SI}KY$(gFA2!y1C zB(1Ep;8K$*03mS&c=iLZ$5Qf|2=ROd80ATEWDc0*brUXT;2?7{Qr9)CZ|XOI7t32> zSgV@?SaVMUpuAkr!1z-HE}FtdG+hTE{#f1=!?_@&>0@)}DEF+%qx3)&jDbi8d?{Tp zY~2S|>%LOlx{u($4?w6CoqrnANiDJ0R94oZhD?{g1M(>f0fM4}rXXz(_lQ{Unukj* zBaz zgCzNyKG9LH2uH$zp*5@bN9Hb}Jrd__QQ!3_Z_AN%chNgXLy5ARsD!C5sQL!3Fs!=~ zuvgk8-{msH;lbYSa#y*twYiwbCf4Y-$Mx7L_#*(6Q?YP;?xOo6+8J8XQ5@C4zMNoh z1)$oNh2p^!xs>z6rE#EC^`v{Yrf41qpqI<+N-H**xw*{N(o&AWMWk2bo)`yJ6CxzCPc$N$EpMRcKM2Z`(BJsUe#^Q=zxCc@-m7mR_{N@nJKjC_ zL(1pwMCpto$U2W9IPq}`QaXD*&ZsX2tvBvv7@Vbux&zV5W#j$5*o9p~gF}OUAQ!lP z?z?=%#7wUzJbxA9d7kcmeN$zBHwsxsP@KuHTJMC4j@JeCk$6oUhe21 zy;-!^7jwQVae_@yaW=)ct2gt#hEE{;?+x*v(R^w-YW@H<5y0X*oyUApTN5D)J50G7 z25n8S2YUt@HGiJb!?M1U9ya!GIlPm|&U(?0DQ~&vMsk2NdU>&LA-aJ?PhiXHHJLW| zTLZ!R=K$6_R(_hSkxq0FH53GNsCFBC;rUbPu3Vg6u+#7SS}qe|7qs#~_|`j4GoH=+ z_&DkM9{|9H%39jdjzFkGjxEh4hQdDg>f&>+q&G#mrpKJg7v4tj_L%b}GmAWZzHF=> z6hlNucy>R_oCPh-<(w}Z*3qtz(^1LIi!Xr_=2;%GgcmpJwA;q0zKiB;|CWK(L$GcD zpnU%NoU4L8f;C4#UAQ3{8=IPpP4!QD4gXPmz_Kf5=GH<7bvI0};!^fRnX&}pwIrA| zYdN#LgR+2X*K*M{jMtBhlsHfRTB|?c+wtjhKPH|d!)&SA14EyI6VpdfFxr6b$YrGKg18bDs z-&iuc2Tks(cm&2sC&my(lbyM}U;=fJDq1hg6G%hatZ`{0rL`^5jA=7hZ6ghg`~A-h z55M8+=e#_em-g=Jw{HA$&$4@Oe9jBQscOr<@(?y1aK7-bt%J8;6^%?gdNZ#2ufdhK zTx~|G{m(Bshpv61w%3zzPf|_ms|_99M8`4!(B59EiZx2}Yz<3S`TWw=wy0i}&#za_ zA%>Nz#-@twNBPZ~dQ#GdFJnL1;0xN3ahXYW`~DJnykDpZptH`+<~%TJ)ztZnXdV=w%#`hL)QotG0z385syxL*AC4UArbv2O{zue0_3zp4NGRsiQw zlTWafaDFR(zv`p2iXmg>tV-W=rl>S5RNMopIz>wNjqYZ$JL9@6lF7B^tXjBsFfLuP zEzsnw8UbL(!X73BbGKP5)462fPW759b1Xjz{ov=mP~DB+H8cUybOivcsw_{sh|nqT zL?W}aDDlfl?}RdMJ<~+j_rtY#FSL_QGf)&9g%dPq>F?|AY86}rzBB#feQ^SxQ2^sg zOQdm?)F-2)J3)rMqKv*v-^!0Z0ly3T2#>b;q_EPX=ap~UyCE_3Xj|yg?KppZ+{#~{ zWW9JB#RB5Y@)~DNI!aDiY3n7EwQl0`QQrDDt-SR~)USAS(xl;9iR$s(94lMBtFsj4 zs?(!QOnbjY`!V(pxPKwqP15Fh(f-96+6nFoXkUuAF$}3!A9tyT<%5aPo~k>9Q2ZL+7WY+AE=2TdQb@k^^G((K%oAfuj0+)4LDGKtn~h7QIh zdLmumd>CJ9c%#2|B;El4rAkq72HOBYv($zi6R|&$>Zhi-t84v> zh9=`-1gu7T<7)BwcyBy4#PJqrCH-CJbL3nb7dqHGJfttppm!2^8_D*Q^u=CA80tuq zgPU*jrl#^x>ri=cpn-NuWLJrM=kDHxEAqu^o*vt%YyzV4-+jA_v^rqRzD7(B)f8?mm%*$ zfoyU(=m?0Mx(^~l!Dcd@v$oV=5Yj0CH!qhHeEpZha9IHVjqH~ILC5q0bJz%?bKzFq zuYcX@RqbsI^Aem%52;%tId086g1&3CL43s>3O5#VjHXaidEZ4{7hSMr;|9`#iLrr( z#-PZwvEInq;J>*RKa9X-gdY`LDSiS#eI_P1j}^GXwpT9Px?z2HS4ah$^aCo29wRdH zN;pJC&NWoj6$};IGzFVB(pat)%SMJujW!McyXUl;7{hpNjDhZ4yp8te0^x;Nv!`TD zSiw{VhT#NLcly77wv_SF#5XM;Z4y^NKfOcS?iq0tkJynlewpbt7y4r{KN|t$nN;lZ zPmE8X&2hS3%KF-(QbepL$PQyk>~VCgZ8SXNyQ=+igW13fo$?73Kj(SlZFQl^(#;)P=-Bq zI3hO1k>v($=JyRY#XU8e0QgH~kzh9w?3Q5N-u9th$^mLEFyv{_$umT8M-05B2KZ12 zoP65qZm%QqX(4)tnC34qxdNLu>P^}u9T-9`NDvO}QIZ6ZIJ>E4h2*o1#G`*qzTIyB z(kMnmc`gRNcnE;>I)X0^{N!{}C}mxIMlFtGef4hsVuNEn>Dea;2hQRpb5(e2rC308 zno&UyO5seJ#@g$EAt0kC5haz7GvIRf2zhl%fSLxxFp-5~9Z^`Pqq2G4&!p$c0}K5a zqRG&ldId0CrEfi&ZQa+~)j>Y1D{&cHmWz7ZOjcj(e3CyUt_%Ba$cLEwIi0(CWLQQ8 z-2oqll7mEuK78gOH&Ggco$j`hyXXt6iG67~+B3EZ|DS0&zRt+aPXb{b(cdV>Ca285 z9-lXfgr^&fC}b=V=1TixrW8A1{REUsMChjmUj({!w>1OM(A%Zy{l|)*%)JPSv&UaB zjVO+eD3>MSkq-0Jurl=vMHPOa6j(nb3ge$uR#`Iwm--2{V{cw?(8g~#Kcc;Q6Tgh_ zjN>qW0RS(m6x-X1$dO4pJtA3km{0_*4OxGO!slCn5*XoRf6@|tvKRo(^Pe>}=`$!e zJfHX*6rH*54z(}#l|F9#Z1zli2RyrS?9%P5SQw?=BJ~p4DwlcAMHg<_ykY$sdTIfW zPnPOfL6v&0pGN7jbf(7 zvPAA9AcuYRn!18M!}Iy#UMLoItP-hdFImJiWYS}SG%mQ{g3B+s{IW|f-ch-Tm|M42 zlhdfl(f;1R6PEA)nK>2nU$FR}fxpEY>F&z#FN~kR&@?gagO^ISU-92Rf7a9^8~xBY zB-JC++vH+($mdsoTvL0TOKOkJnZ1i}y#jz%_xx*)>(Z6R#jw)2kghads>-;&y~f7> zKeJ+X&V5@9%CAMf2VNZN`Acy<`B`OjpsC21(-Cy6PU$!U!I_wfaW*BClyRxxxLJe! zIhB-^_Ni43L#C<{r}8&M3~)RFEd+1_vVmg=N<|9lMTcz?`N z%j01wzLWCSoixMRa6iqCTjV;TM(Twk=2;;>wbVs~c}#@i7B`0v!~?&)_3HA=I@v zp~h?}ZU{%*^EPkwyq$r+GCgk%$qRK6wr0})Cg9AZV_wY-X=Hyzv{4Htb2c?K*0t2PXvkq4{7OydZgcluNwCW%XB3=Z*vnK5#5!RY zf@f$|Ueu=pn?f1B7pKU6NYiXC4H}gbQJ+hw_buvcPS_Z0zH=ht!NjnxB%Ea<>+X%z zP0w(WKFNzQaQh@*0?$f)cl?*i$Fp<38uE4#?x!3@L)SHCv={h$qIDz`VFLnTbugP@XE0#I~R z1?GriI8}3AIZpWEn@6CQ7gCm`KClQmF;7QkbCY%M7s+CGXj+*L=-$=z7YyR)i$)7&H*P&AUIuz&H6)c)(;GghD z$^~1PW)qHEi0Y7TdfR>S<`x^;cU!cd#?B>a*YI7GOh}vduy>nH`!Cb96At)&$f7=J z)}7t2E2iG`o&*qIRE4-#=jTJ&{}^witoNR7eKXY8%ID`FR z_<|nRO)B3*L50tXx)@=?AmFf=T|`V{62q9L=SWlJtF}%5*R(Sh1A3}q)&;Ep1KTr zh#ER91_u_Qr|;ZP;+!;ElPyFC{-g7rx!b7^)yHGvft z9KcHHfN{S5DlMzOH?mqq^nW^()sHm&x?gldsgUP9aJ#v}ew5IMLQ?B=&ey7}W9{1G>*>NaY%33!f-)W;|69xNQNAVa{q=(of4|00UQtth z9S5hSnITt9<41!Z0D`2Sy5vcru*22p&0kyS3Hi`qnR=>veNhhFeHm}H5240SZ{Ul) z)l#apymo;?X7e_C#(JAIunSP69>q(&&3fQ^?zK-~EPE0odY{GD8T=AfC`LAbo=k=LgAR{@+>4KfW0|aF}8T?Wp`T|5Q0HeNBtKIa3=u!#BU^D>|zE{PpPNZAs+yLg&31AE_RVADX8Lxg6{* z#6#NCLA7EanLKlL@ibhGYe+7wD7~~?^uqYAHv?KYo;;*b zf-e`6i|<=<4gH+N`B&1MxZj&c1-8psF=iqlLuej(!mdjtZo)v5N zlF;jvE9Ttd3=|-rE99qX_d4h~@m?xnv6$Pd6{#sDtNK7zb)l>_ZzgGN-nDrb#cwXy zlBq-uwKDsmC9{)Q#!-r!c4Iy_ik?4$uGfmvjU^{0S7WXMt|vWL&X7WRq)@gL^FTXd zI_vmZspA=XSZ;5uUxk{OwS12yyOYoP8oajhs?As|?7&=p68)UkHNQrJYVry!RH)A_ z>DWxHW1%>q2syu)o3?c>Q;sCX%XL@D%0(Amkg0bil3{%JsEuhE!U!D42HX|hL1a62 zw3eNe1X<09Pfx<`&+Nv2OjXrCSeT39leq#D3qQuyfAMDL2`SKID|2n+jigrn7G` z8oC_6_QZ-5>(TQpJ$mq2EmR#O~t#~)pI%mnncU^UG!G|y3&+UO+u3^X0f{Ep#ge8}^Jbw?o zu=2c2xuo`ySIEbwQT@X2VNXanv21o)vUvb=xRq{~@iFG-)}itTx|mFaq)C*@RWcEg zUsou4TuDFGswS7q?}dE6fe5ZW%7?T+Hne_dJ-H(z!z8nThA=~~J}on5$?SonzkvHH zckjHINPJ*j-uhly- zxe4=?VxW6|YERPX;OF%jS^!@a{OQH_Cfz;yZD^!M4eM(5=VvULo_O{z;7yg+SFo;l zIpzzyv{>isq?+7|#Y!y2I>>u<`ROJ0Z9}kcEtwjL?s@8!SLg=9lMAY6V^8d7*l*S_ zV&1Hyvz{iaXYJud->!4u=lpAHg*Q5~!2YeCvEQ*_nBKADGyesZ=bq1dHtpv^{@Ta6 zjdx6*#~HV&`ev$^wB9}+!u!Fee#T4JO@?k$=4+?bqsiof-AA=xHSe5+Z#w|Zp~}cU zG;ZG_sfSsQaDMIE?)xnM&fxE2gcIyR57tCSC2rKR6?>5ZWw>uvYt7SCs} zf38Ze`zz6tsmI;eCCsCT zbH+u5QsJRcIQxR4p}ZxHTp|tqL^?i7%hH#jC^U1P^u+k9kjUfo+%Itr$)gS3T#Y=) zWuznVa3C3S8r{b$51LKdV98_dXrLoUV>*mHPQU32~&q|6&_x0B3O?^slCgmwhZ%$qNd3agn#d;2#=WiZn`FJPs*pYTo6If*i}tCinVgPreNeYK2DMw-!i_1p52#CWb0FXN`61I7}MIIW_7Qm^jIq^sptz zlh=KnK<0FY;&i%IG$y zyb9d{)RAtoQ)5ZRk}>Wx9p;N|(&ft**`$!t1c4Gp2WAzUyFSCYr2@gFtPaS}2vok4)mR&o)lccFVsJ=O_*(Er;4V)RDx_+c9 zcLi|4uU(*kmr8iUz7ExUsIP;S8}Sf+YpzPYDPu5;_ok%Uf_tc5z9uh%;Owb^vv`Z6 zBv<1Ri=H$1Iow9|P7|m&PR0Y~I9-igO)WBCxzyA&f4=f7EIKKsKDPjTAov+{XTvA@ zU#8wsOFzCDTX2Zr_oHw%e8p*gjmr;%E8L)9OB~MRp&^=*9M^CJaqz=6^iv%CYm_aM zhVE*4yJAKnNgfWFU7x{*g~Gf~(;5WlafX}A(s6A!(}6`FtX0##!z_q)cV{ePh0DA>aH)4 zCz^#-Bk{o(5Tn<~{h&IrDSK{qHtK}uM=hRDVhKlrT0Zo>RjAyRD3zA70Y3v&aWgf>r&E7g|@qY3--yq(zv1_c7)^^55yYO0P;x^}) z+K}Si#C?l+S#+M!9iiKvJ6vMT6f_r8+GZB`Uy9kGr z#Z0DZ5fPqC^;*7NbrYUT3D29t{skYz8>o*@5gjZeCm%ZO^G0vdane!Ed?T$TV{wl= z%Bealz7XY9!QCO;NoXVaDCAH?(-BC53`+5(Nyv#o26uNd%xFkMC*Y8xd)T6T5?A6u zi*7Tp@$u394U6tcI1PO^-2w#B9nR7$J|4RN!J_*NeiFCROyc$Eiimb+G90Hi4Z=g0 z33m}DMn*<9jBKDwf_U-!V_xLTEnd#x<#Sc4HziyVKTbShss<+#&MdZKbi^H@OL)81 z;_VcC4fn&#d%_I5$*LTs2 zXo3-AP7TI*^)e>8W-)9K6R(7rc&(lgZ0&SEpvgz*0n6vp1>zJ$3p0Vf8k|DL^_*pYo z^FIE5Ypy2I>;q8dojn^gl*rMgBuAgw-6P}O1#A(Xi z?$?nxZPhDU3Pix|puk1tP7yBx*nY_kYhnFgnaXhWbH;$atm8Xmxt8BE#D}68MR0G3 z;~9`6esrj_rP*hSJ0wCRodV@Ja4?w^>6)G&z&T!%O0XUo#vvTk+%z|PJ!yW%EPf_& z3UAHk#|4G1dIJ1>%Hn4d{u3G(;ztrcQPKJ1=jRcNpEHc%HnQv1qOTI3nBl3$utVi9 z!kj)!)(x#&vAn4vWRi@lm`8c1#p4;gYwl69t=6F@Z9XXx(IY;SaBt3J0QvLT9Uev; zUOybXdX0|6Z0CvXgzpw)EVJsWn{@E`1c=ZA!&=Go;cn?+3-j ze=tSOVaP(H5NIsLoO#deuih)aDn4q-@FCVbH%C_6{Jjv$D74<@i>j2`3M8ZIaq$d( zpCzM*a0D1!QrVHU4>W5B!q<Bn7tC!D1_#yD=E?T0O4_zM%&VYdS zb04SvZC2j!L+r(K7ung`VqPD&9Z@&4MjmEsTfNcWXVH8H{|hT*^9-Tl^XYaHx^0g? z%|S~`%W%uEKFNs@a>V1lTz6W0oWX169;Nz~MdLc7ItNAg{9k?*KrpJ+_-#DN8I>rcv7=zj-R8f& zKlCx*NBqS7EhtBL1V4;#!cU-r?Q=hydoksK*4HtWkuz+j$M1_%P!~)gUcOATYVwHv z0TUO#H=cbF_b$d+=Z64vu4MNvR-9DYq5cZMRovPYlyde&LvNDq#U|HW<57HfP0u{S za}z*z&pcN+L9~f*2p7e^q+K2@A5|2X)c%^DdBl%&Q~Zn@Jp3lp$2Y4-t>SDkZmbbL zR9B{X*~GWRb!9&cd3oLA#8I~hj!}&x>h(%EHW(aigXwn?^n6ue&sT+TFz5_HyE>l1 ztrXi6l_cmch^4p#te3=%@8ze7k1%fhV}k>KaDF)I&Id=I=EKhECs}>e^dO#>XD@;ABR2p{IIQ00zcdJx>KL;xc9!n1wS!8o0ERu!t_BELGOKsAF1gq;Ov3u zlqw~&E4Eheb*QGHrpGGI(pgp8V|5|ebv3YSdaRCA?{#;Gzpbt3##uQFKsg)>)^is; zdL)PZ5rGc1r6|~?+)yaMo}`{TvzD7)Db1Op8u{+pT5g=BHK6*2%v$aO5Pr-bF$LWP z4*SwY+=L$YM3vn0tGMGl=?SePKN63`^JXs!b>u++xTSJaf1XLC>$(HE(}{F>19x1P z(=(%@LF*2e&XkYIkafi1B7kc=bG7yMFf=7bJtMs%VOwGsyIFUx-MkI_xcVT!k6#(j zMBQd+z`q4Wd8#>-$kCDQ$ej)h?o||0pq$C3fyTkm)f(d0H!_+On(pDA;a1&+xvt|$L8zv(^vGuayV9=_b1RrIa~3LVsKF7%Iz485?@EQubq?BM3GD(e9l<)Gn>L+^Z| zSMP;p=z#%>B=+|;HFA)}0&^72CIODf0QUj&(N)Zy)(a)2x!U#`E$!`XY3Uv49cbxk z>F(D?&|qJwKHoBdYc-m+Yd8&%=v%+B6xl%~Geu&+DXaC&`P$chc@BrGpZwLiOHTaB zpJ)TuTFpd^C!-|_2F*(*et$PTaK@NUG?Z}b)x%WqCo+OcWW93sY9jKHM*=7 zvQ~5j*-!0APOUTPAaVqOunz>dO1M)JiI}jliq7S0Htk#+wC%ewmQ`7m10iDY*N81; zEl3RLyJGf>Uz}xo-}IM%`C@Fnj%|OidK};IhI47#X0nR?)pd>w(BI->+wug&B|3v@|rk`xhK(4vg2`6Q;uiY3h;1~v+fpYNYlKaUM z_;>&KkJ}%*i8a0CpRn|dYJTgP7ryA+hhNQSW-ryE{?2T5^m~P~XS=FDsovi5@WVdl zf8PDD=503UUr@b8P1MeDfDtpt0TmR*@wxw`D(h&T1GO@U8yVEQ(Am~l&rvVV#tjU& z`O#bl7Z6;WiRL?a)_e!b!=E?dA=hQ>(OcwIwLR=%#PqNydidXIdh{I=^|CM3n~n!L z7s_>chbUROLQ@h^;M+Z&Q2ShmN#;meTPER9ZR^`k)A=^ErKYv~9wwebKk3mB zPq)FNZ-}Cj60og_@IY%><6(v)M)#RSAUq5uJ0y_qNHU4&=4jJaRJpGd;#s9-_i?L! zl-6md#-rci)Agei>+J5*Y{;Z|RA5{^3c)0_s6JFh^`RQRwCY1?ZSK_Y^_`cl4@E}s zNde>HP&2TU8-;750#IW}Vcf^AgI?y^Xn8>b(zVIClf&x=X&t@YpsQ%@vKdjH-6aV@L)xUT?8xc^d_T%SEXU{gB zyLYzwH98WoW0u{~L}R~`zIbq^Qt0XIsOMZTM2MQT+K+7 zW|*02jFa{y9ZPSByT+?&fmxUKS9ltaE<2RON^(y?cS$4~4w}YQ^^Ob|= zzJK9`_~r81v&D1kqWhA3Kr^YJyMuhQCdGxeq+KN)MFLXD9n&s|5+mYckB)Wyzj|7* zf$$J_!pmrVcsn&l%gDQ5fKx9$_fOCI_IK_)_n*(lt6%;6>ieI^R^IicFW<>lKd<`! zBkY0dL~s*5v--OH!w3I^#2UKsxhE+MA4tLKsCi1M*><~%(bLi);bSA-TB&~YU$R8-g$ks`}VIn zcOGRQxgEc8>mQ!J9lv$U2c4(kr$zPK^$$Ok|MX{a4?SFu&0M3z_tLbAT&{Plb~c)d2rD_fU4Q0C?JCU}Rtb;mzLE+Y0C?JCU}Rw6Ncww~fr0be{{{a~aozxm zpa2$W0J)F{rg+*klw*{n$r6U2FEcW~8rx>Id&kq->8fgvtsb_q*4Q{>&)T+a+qP|c z>&DfOIFWqMd7p^P;1>YUtO2$yJLMXpGM!QG5X0mjGK2fsVXkJbd5i+PpMg@ru;5p6 zZ8jTCOV*pOlAp_dme_3^Da~Zc97f6p21}97moZ$Xyx<66O!`)Z0|omHy@+Q8PRFuDq|~UGxu+Q{B$=msO0D*GN^*3A>OI z>B|!H7a7WKfb5~4Z&aR_(qA=uN)~g>Zlb|eY%)7&<jOrL|QrQ>$#B|f0 zTCLep_Gt>;W=?X~Q|qfJx7U*yCW%W11#TH-uBWm~CF*~pT<#}dj#7?iFhSm7pzp^} zbB+4?g*4?qR=xM|M^NMplftK{3#Ti;@5!)zl3%+QDAjY5{5K4A3&=D_CBK$MRN58H zvyBwn2KAf4Hf3;p@FFSp7Mkso%nR-%%d}^bX~6<}^Ix+~HEZoFB!WAYmtnnhR9@;y z9wp{(qP1J5e(q$5yv;ZtCnjf5;yz@If0!|@kO^`xOXXVD$XsQsJsbo6bRD_S?dnm+yhke|p7@1&DkLR=0q*9FX%Lh@Y^!@^urWGHdBjhSvZ^WA95{YRR& z>Ri|4P4)f~6|PC&(jq;t>)~Oh={t^w161b|jnTyYtCYF{RJv}-@0H86uq6dylWKHL zCRJxvSjifH4Qo|zPPmM*zL~gtnUV4Vqa(fP5YC}rxPx5fQrhAdQX=otO&S?#KO@a) zFDbK0ZiD*2NEzvyl=URSERORj%>0k`MXLQSwUWwgnLtPT65FLE8-nMl3!dYs@Bw;< zE9ouIli?=OQGQSUBoC1<bMc_C1GO$gNO$q%kJ?K`@-$JOP0ZCW!!4s&Hd7$m$a8HtMUG>s zo4{!QG&%lu%6ui=-Bro&hGfa-9 z*xbu9`z71l&1?(TlVftpFol%bfAW> zkwvDwNV;sKO1{^uJtSK-UZTo9r5v8o@j_A@WJm=GexVxM)VS`EV)qx7oQH)gqkWPgUUwc5_|=8}#36nm}r6zXFi+U3yitmmZCL*qnWrKd)fdfLCDubSU8ol-vyMK6ttUP`}=6+N`qud*JJ zMITAc^Pf#u)jLDcH>09&BA$V3ht6|xzgUMQ2AjhZz5eX*20cH{VG(%1#w*{RZV>PKd7^yAW+_^}!L{DX{3et5=Ee?0ZD-!1-TA22^+ zZq{tb+N=%c6|N>Xcnx#GSuhrS1w+A%tWCHS7Pk8w<#Rs6;VSM2*Rc+{AJ-G-!%V7+ z-|$ zFf8K&Q^J6}4l_{uNErslz}-my)3vFC8sy3kv6~zgg%_Cvo;h?FHo=+381NID zf_LH5pw7Vk3cdet|6`{6{PbRaR^0cDB|S-*9h0qi{q%)?Mcnr~_x#DjtkgN_Pp)+r zy6u@>h`qwvWlwM(U>|TE(41(l z&B4>b-ysD^U&vg@cF0}Gcc=&Y6vl#$gx!TR;T_>C;T4Dgq9@`w5`zpN=OZ7Yn5fRE zgJ=eNAbKad45Pse#GJ;0us&>O>~QRA>_zNrYz?j}?kFCI?~XrBfDpP9_7gr5MZ~_u zg(LteMw&=^OLmY4lkZa~l%|xKl!sIfwL5h+^*yzQ=An(Gt)+wL?dew;Dn@}(RzfLR z$}D0Em<8r@W?8ACw0-G%7K$Ze^=55mon@7=3G5iVKYK6xCnv;N$f@A6xNEt;c_H3w zeuO`m|4|ST>=xV?GKH;$vxT2UKGANmLflroSAvqXmh6=xqz>s^>3->B8A8UBHI|K+ z9hbe8)8rv}OZjN|e)&^*nF6PaIGiCaC+XpKCIj$J&5) zruMN;qHC_(ttaW5>$e(UhJ<0F;kHp?>}kAc5}1aY?wSqex#r)NjODPEWNmKUY%Q~m zwtcsI>`U!$9R|m7C%{>7u5?zoQm&(JoV&OCz9-<>=!JMK-tj(wue)!jAL5Vr=lfp< z7=c{ibx;!=9XuZ*ggS<f zokFFCrUB{E8AN7w=65!dotV9zQ{^V+1^MFzL1A*Cfi8G}tt$Wk0N5;?ZQBcG+s3zT zKijiy+qP}h4r<$o-MdQJ8rd${16ii5QQkwbNbycNPAMpJRsB>})irgLdY$^2W{_r! zCR@8edqi8Q+ob!ZU!XsrPd6wH|BS$qytj` zEdT&JfJeYDa2SYz803YXLG|z`conRNkHG)nT4WreMJVJ9@(oEv+n_5@3cZ2;Lo2ay zm>$Ehb66}^iI2n8_%8e#UPw$J)({MFg@`BHk<&;exs5zWMpHegDO8wxM8(p>XgiJ2 zm*`BU4Kt5nm=jDkJBpRFPWBZ0j;-dpaErJtTs=R8SMz81WIkEwCs>6;!XL4nxJH!3 zH)6dsK=Mj=q~?a;0Frav-ElJnXwf=NTT7O!Sw65#Aq;+XYmn2D& z1kB7ZGxN;M%*@++Z_nGz%xuieJi{f`jG zeK-B-{pJ0g{YZasplm=nKnzj`YX${_*r19;e4Z$s=$ODJg5qp3TPzm)CNm~0Ci^B6lCP3x2`Gt7 z6;3ryDW?3=3@J<6B{fLH)7jJI)7)vvv}5`epaGS@7~q(p&Xmuz&VVz7EJ;R}v1Q#d zrR-GpK3g#ReYR&7oejz}<^RYV)5E6a`b!s!%J4dFp)SJbxZn zep1qv^-4gAD?b)W7JvnhDp^&kYE!9Hp2gI~vc;A~)uLBTQU9%OP)pUGrIaPcQvDLJ z*P92=hP9pIGTcHqjZ#s z{y-biE>wi7Q8OA@saok?QLo@D9~ce$j&)!l=GUj_zvx-|7CoT1>Ip-Np~z5UXfXf= zd^KscY_(}syy{$y8`F%%#u{UXQEkMHi8b09XHBpcHGMYGO${c%K1FOYs;~f*k)|EZ6n*HJXu zIm`}n_scG8SG*h8eRmc++nt~@wwJ%xum|qNTt%**E|JT(pSk~QUtK+QP#a3~!QE+~ z5TLjg3+_(w;!@m7DehXJ6u06Kq=r)hK|*mT?hgp=7FwXV>zDU_zi;N7_s`AU&g{BBUpz+wueMqk%8n4XDsqp*YOc>jKnymrMu5#OW+c=3)`GHxgz6C@=-C+ z$zUH#7leSem4qj*z<;i1>yG9h?r4US?&I1z5Ut^S_W3lWkDutOZ%I0&IO+jt001Tk zkPQF=tN}Oxbihl11;7oZ@Ne)^0hj=^fCbGlM$#^8>i+fB+fcA$cjC7%q(I==6z<6q zUeMwFS&?e~kI(FF-1cn}2MjZXR{*f2EufRqp4pL065VSaT=Ee^Z^kP!tpGH+$t0TV zoz1LJ=%tz0n9sk)?9V~iq~R8oKO=L$z<$dh1yt%Bx~LVXP2YE#*SerI8bkvJ4-$=y z4Kh;rXXd#qD<;1PVe2QnSJF1QDqdP&^Zl&xn_Ijp^rk`QLeix@O1C#{kDoMOCwFN3 zi#;xTcK=8~79-4=ZkUz(>~b-yO;h-Nmz(dPK{9xovb03Ttc@4cA?j#>1jS4oWveBE z?^+B7x%C|_96UK&e$4c`E_N)5EEs?WIS4lgJqCaM{Jo^^TEHnJ#&D=0&M+uOsVhMz zZKHdV7`4secuarKn1G?m3=F0xG`TwzGsB_cT+NFyhW5y+aM*b))^E!l zyM-?rlldwv_a8bn)%AOHV#zYaUa!;@vR^#h(#xJrbQ!CxtZsrj%^n{e=ytezn&Mjw zoH^{S661RdCTgUNcGz zhkFY64jD{sfhARvZGge}=UXLsJkI@2OEXQuN76)#0N*;;Jq^Li6ZcNzt-pu4!jPg?_dCH{Rym zk{0@)-Qq@>o88h5G;A9C8pdcE#~)-WG!FFweKfCI@z@~twVWjo$L6Pw5C^z867sqo z3utB!W6d&iYau%+ojw%+Dv6{n!P~6GjH&_XpyZ22MwU`Pxnv zB*)v5?l@w9a>Q?N#7%M}oRq~5mBsIt#VwR2+&IOm>`3Ci$H73=XaHCbKmYrl#=BRi zrPSNQ%2Hh9V86Y^9P$2ZT5Ws)Vo3X3bxZHg++Y)GmqXp8)oUYAgr z*Ai2j-I!ASDeMKQ6ty@?AplxzPrDsBBdk;l0Biw{+N-Lm71Au{L(!cN9`CZB>89Cp>J_VHGwNr#h!?RzQ(NvDF*F@hwSUMr>1y ze}W}lOJG`PYLtJ9r*2eWR_gS5&0kCj&tV9`;i{TRuF5LdjKrR6%>-MXD{NY1@lVYZ zZ_6LptjsN)$4BlM5ZhYpw`9*z=F27i!HiAK(-A@vspBz%>Q;eaQHBt&VNlrJ(XbRF z(9}BaNtUVadtnii*Xhsw<{Y!7FT}UPnYG1`iTYzr&qgdhJPY9W0N?@uexD{*;8hFo z7Vo4UsPru{NCLmI#&5r;ysl;*Z_MI{&-OynEB^!OfU~W6jhyIQWA~NNtF!IJ6sxcY z<^PeNCzP2Ph6d9JVWEb4U!U_cBEqD^M$9gZw7(6>=YofK|L<8Qkuw?Oc#ttE#{nr& zmC0;-vHH8>0`SOL)v}ljAwEw99R{cadLy5k)Z5R;8@`=!ovU|POtuKV zpcC`inv2ta{V#qJ{>zN4{84zg9BK!@yUoL0Zy(3i7um0{Wf^VIn7-O>kf-TQ3f6j^ z;K!>EaaB0)(m>1>B$|V6u%lJ_*h(Ccz$~K~5xCz4akBOpFVyXTzR)u4{n~mbigCak zvt7a8LR<$Icc##SG&oI{Sj1>sG@t*PE?o`(uLyon(=Qp#5q`b$URfin%A~<@Ia=!# z{Lfs&>(vNF)#L&(U*uAhhB0*chwsixq^eF~TfjMTIY!5-{r>8F$4c(y3lk*+O>+f3 zbu$$sZA*DwHB)6nEsMx!0dlA<22h*0&ch1}|2a%Z3$!RoT}`~=3|(!kOaomlq6UPn z4n~sDgeE~%{e(77fzN~%N!!`PI3SWxUH4FqG@f4bX92WzI*oNS$|by%d@R`Q<7&>V(OS@2Mt7XM?R)YQ4W%Q=tQ8m9ILXB z#4d^-@XpfzdJn}4!q1u8G0yR$YJxr6MwTVix3z@|5`L!WKL=94Ca4M6gib0V>LuWK z0zt9S^ZhlYOMrlki5bmiZdNzPV!SJJeOk|2t8n9ba6h68!d zYW-5s;^0N9glLV(!Z3sNfxuBxwvmj=M$A-#AeNWer08YfGb}`2H+r`uZc;=S6;a`f zwltz=g`l`nP5h8OIS~`N`GwcWP-Yi!VDbqAL2O{{2#(suywIx7Eo&->2A9=%!IN*kbazL~ zOh7A%Lv^o{8%82 ziX+fS#E)2;*Nxs%2C_&2Cg7$LCE;V(PU`#{cc`yxa9H&k%r971bMkTwKauCV%RUJ4 zn#u@;LJtWRB#^xC2#L4}1zvs<#$@|nV(%W3)@LadtnFpb$@Q?+{NUsZjtN^285XpFZnndCu~ zLza819`RkrV){?gAo8V(GGQTAtfn?8sb|lU^*D{V!1oAlJy%0>{KIC8jZ4VTi4&){ zaOH2Ma;NqIs?m^CuC%(o(6b*|d8SXrOm#jq?{5hTv1c8N?0)-|DoSITtb(!eGCyoE zYrVp+Isu`6*qtpDzsVt_s`LHewC_fNKFa-2Ga_%Z+#yC~B9XsIyjLblmj*a|Ya;DV zC}T7`5MQ~@vD6Ot#5ttRB>CQFup?;v_4O%Ls5O8Pjf5J_ZVguqTRU8Tjqr*{6Toma zyWz?+)ucX}mS@&OnNB4KFh@7;6!ySaGDBDzR#cs-u;VK{eBkzNSvGPxaV^g+h;ar= zD^9NfNdLG3cGQ$)==NGo#Ead#Y0R@HXUJVOUuNZ$67K+cqV#Jisbv%&ME)u8%C|Xya{6Yez_c z4ih+3NOr!k-8QXz-zKsGdP^ocy!b+2Ru-v?vsUwL9M$(p^1eHwKh@!>%YG?yeBh6L z^CLfxIik^{VyK6{9*p`V;}kELHbBCj^xxp`f|n4owAFV|Y6HEB63L z!B8sq-!|g536XVzNAl(mv3UCwb2>jlfBs>w(W%LgGylz_bME{F^htf@^O0^X-03=j zDR;Quq_1}16(prc+_p3}bj+?)>H^j4q%_J^wi`0yS)89szD>VMm}9?b-U8W#@_F~+G22#9Qa;$ryfD3#(bB$f4Myu(A!7A;$cLG2Ia5}5-Iw5JJQIO7-qwfqEprEVs8l++S zdZLYI_3LAf^ldP_qRO$EX_`cetvz`c7~f6w(NrS&*JM~IvoBB83hE!Z~GxdUXo1uRM=?x&|3}Rn8}zjgVmck zA17wenISJ-yobjt;)`KioWASza`URKl|x&1JuynV$B-|VeD>=vbMCvCoaw={hfcQA z(BTT=-o2N55=>f?JLspVe6$=EP}0%W0)k#vyy;Zy6%R&vk!Afw#W!+T77 zEP0G`%Rc26HB=+`LRu{#@JQoNlBhWna#dS%V)u`hM>Zw@Z8~E32)Jec&$8@} z{~J*KZ@}Td0iQYt{-FR5dwgtX^e>&WsGNCo5SN?2CqWJ-*z+YG+vEH$5ru>Wia}Rf zfo*;8K&aKuU#|P+OChFb=$q#*^s_4~v)^bGZl0!Cs;SY`#ASU-%{4{`xbEK<{~ecc zy5hmaVav>HXSJnGj7=PEA4QZn#7mo#Ngxv2!o?BbzD97i(g_4TfpsYbMXJ~G5wK^WS&>9{*oq31A1bu;7HcfEfV9TS0I@CLtn1K!r_+ zgx1hpzl zQhj|_-|{JM@f7O?WEf<+iyc&y(OJ#X*%6l#-RZJ844WwSXGwX6(HI+0t5~_DrWF11 zLJ@CCnWBigwGmv)f$S7e|)i7pBD{4|mk~{i3ax zYII4~OUt%Hj`U2JZCn1HR!9YjA^rYX+Ydwp3#>nvyC{Mt_c6}2H2_267ts_&|NZ(| z11?umN<5sV@WSW?QLLpg2#WKs$<_l!g$iBOj58!=wlpQCw8VscGOcpSc`fL59hklk zziMSnHd0=z7AmzGaj0DLZ&>)j=R0ls_^3P6=S0U*A(DzZ?0yWW$Jqf((8&=?< zTSAzw(QaTgz_!L<719C$vjqxdAQD9=S|?edf5F!(b_xbeuY5hNNR8x|7H^K)H#>*78p$e`W)iAC#U6CC=whVPq*YaaSK$s_uV)>&d#?zP_s1qAFF1R+0fG z(TG4o>Lb~1t!n}NJX=Q-=s)D%BN-!TT;dbJFieXs2c86UIFo}1)?!tZM|I=1Fq z&c@^65rYFj@>n*>z1sT(#(P6n<`QMesK-$MN~HH|gg(I=lUxAPbf`9WG7Mpk>CjYR zo?c%o>wH}@i2eAi-_r;{LNWo61qetpaKr@r)e2>C?N+*`^=_9+Y&hlV-WhNr|Hcg! z6tc=O&~3@(2@5yc`a5scuUo#0-Y^mg074~7?OY5=UMsSyzl8HAfCGgMMg`+DMqk0PonGYT16 zI{!>>xE~B~am0=rNm%?47MJ!GUcedI(uoOc#f&zp^s>P0-u53<1OuX8x9z!ex0?!4 z6%r=YC;|I0%3i|9J|H1-c2Iko+$7yyhXTCEDD{c=b1e5j>C<8ePl76yR4r?&J!rrblz4{}h#t7>y zdeh7h%+Z&MvW=@+$Ft$t4VYV&s=DZ7O}#;DkYp2P3rq&>X*)Bm_d}aO_Yo^N#&)9J z3qPSnfmpr2=JY4O9zrSH&=3%0nE&qXt>VsxRapm=*gw{tG}_Noh*cj=Ly712x5R4i zRo5Q{aPx)?$MP3)F>W#LahO(8@rN*E=h*h3*XyNHuK=JPDqq0An9@IyR;iU#p^!qM zRiPXR)IXk2bb`0}`j)tBsA1(6Q|j^AaZETc5qRaYwLG?wdt>iOxa_^@CeP$eo{-M` z(Qfwo*NC?(V}vTWeZA(FCe@i$_QLYV&1}!_Y;!~j`URwZ5s|CLWsjtTf-8;w7Pmyj zBrF3Aw7*`Ut$q)k%6=YEP??dBmpk> z_or9y=7&2eS00*Y*#MqH0MX}evC8Vxm3dpmIMh%Haz8o)@CdI@p4FBUA3CErU!*L0 zc1=aD0EsJ&J7@6f1n}%Nc!)|zK?06&1q4NaYoYqSwR23a-ua|3M&#K$XZASt4--U5 zlH5m}RodK`Hr>>Q*ppYab+!6(>(0#Aoo`c`eHY$I|Vsfhg-g)b*8-R5S z1V|;4(c%;?Q9&7|%?cipZe*>?Osuvqz4!gC@M)^G9De%!)C~lbp0|wzsmuqfG@dSg zxAyevwUfPv7u4h8 zP>}Z`Nb3Sxg3gx^kZ-*8`kE>Lc#&W4<2#u!-sILQMId~1i`Rw|_09%7Ch!oj~YkqdUTRC-Q~vmW?9iIW_M%^3gwtM#l= zB=wg1S$q9ai8ZOTbyHb_6*9_7B;Ed!(5tE1`9o<&FANM@vUGlZHiQL0SK^a1c zH^BjKX+&ntHCpjP-G;A4e6ZO;V0|J>i8p+R_lGb9hm?-VfD3rCdDo~Fp`lvL9%iNu z+hzW*w}bpkDNEJzAflu#Vaps|yR1r&LXIG!5#|fuGKZJ38mQz|W6fCA?E|`*?aNW? ztcwc&c?lX38Iy|Yo`mlu3HmELm)U(cU5M6CSHWje=OpjUVv8F!@uo(*MeZz159l1! zzP#LdM4-3M*LxplQ}ZUuq-yBv!ouJ}cMjJvWG&okIjjlUmu3n!n)&^z7z98U$Y05Q z|KR3{R~LRQgHWcQ36WI@oApHZbYRff;*^fZ{6T8Pv#izqu{}C=WLnTYOKN4wG3YuB z4`))bUDDCYMVLHa!$a>)nHH{7t)RJb(SXFcyMy04%mM7J$Y73!gRaHw`GOe0b)pK64tmYM!Wx2F<)AC%` zY>Q`X*|g+&M>qFWj&QGOk#Vg$Cu*;8m2oXgFJf7@WXLnETdOkdYpu2X*Dla9?mAPo z&r8)bE^^d9c4)|;1O~2uz9Up-qj1%MHi{VPd24_g&=U?{J41uNSu`8$z-XwodD{S1 z2r{!r8IM_GNc%i}Ky9m37Fj_(>XZea`FKtAt3q$PvKhV=kfmr_3RbjX#!}sZn^2kT zw6e2yvOQS)^pBSAzH`Ub+K3fzto0YU<^zh|%Y`S-bNtYCgay59znwQd^P9Mx?w_cNaO>%$$=0Npr|GZ!-{Dj z{WE3jNn=ILx(M*0M^2)jg(s4rj)^L8swK)J>tetaQ2d#WmPHikVils90J%(VFgFBA zKvT!fXeOK_%P~biIO5~m%rii`f&Cx}i%6#OSeWbUp&9r|J{+X-)<-(_oxLX|;KB*p zfb@Oww#n-Q1+$!gavgC^q(^uDE?+Z3msNakCoWqB5hr?T?1wpAWE>^KWjf78x)m?+ z>yHgpr0jOmg%#&FW~UEU>8b0Xe#PrH8Jr-W_>My*B;$iKFjQ7gzab-e+Ph3AJ6lCN z0n+}3lLn1*atZ*yCzYwQY-{w3R)BNjiQECiM*hOY(;vtCpwG0D=7~}TtQ^1Yr5M~u zM;R_LT54eO>iGn8aJjz%q;3g>p3MJV+M+9z>Kle{et$R#$WFo_1*ZIXQISNIor0yi z8zWd&m28pK&{<>_tp)JS0h8YCX;;1L{6?tVpFyp`s;=pKX&MP5n7v_8PXxm;3PY4B zXqFNvX}1i&2Us4iApQUYfGSt_hXOXu2QS2S58xbCRM&!FAdGje*6^-rcX#ByDy^npe!BR|I-4Qx1}bm+$ukg=kUcNW00 z&RyXE50523_V^q)GldpBMDRz<0>c^?2!PT>2;&&;qdpp3Z&0H@<6xCkyIVcKhN>2& z6~$fv%k<@X_;uhb21Jbc;AYx|temRc8Nm)cNszcc0fA%u&ocnGOOyn4VOWtU9d9U9r<7wGo(a zk?k3td0xbDR$6ehvK)jN*<>U0fyx-G{g{uYj;Rapn0c&O#`@+^nlW;jUAb;#^ zW?$aOX>8|(1eLVbGT73}aiXm0aPMM{&_tKM;H>#RpSq$xr@o|S*C>!FhU%?OVx`8q zW6z)*1Tv{M-A9%)J}8J5e;eQsg^n8>eAlGQ_9xrW8g~n)k8sAT`7Z4+=$@*AH<2wh z$F!0W2>!)2P5JIaZ5#&t!iXd-b2Q`hTH`RuRrF)BHG-7xQeVY=>{WN5HVOHws?6pe;9**t#31dp{OjhWgzZY6!d%?9~Qc`v!B7kG{35rK6V2Qa>4womql#0Whi}+jTj?U>IXsurq2J|y(U zP{c)8K~&6$=LJyIaV^Jmv`&po>Wizbq^@ zHP~!H%y;D20ymB}KTNjFn9yP80k1n${&T09X{x>vh2sJ%xZh_$P;LX9O*Gt4;QkYK z9)FoX9@9w#uZ5B?(t#;79L*VZTFz1Cann6E@{~C5u#qy#Pejmcwi7x-#zYnfLV_|8 zidr_35F#!hVr3#qS$;gOELbKLgt1XwKyi?>=x+33&xy}p|GXqEKjZ9&% zj}WggfFTD8gd|liBs|tXJUEI8HPTta2Yb4IjP*Ssh;20#TQn-GWouR4wtW!gH}-q? zq)O|-E`@TI%#c_uAT6bYxgq6=94~N$k}BjO>?R0|z0HFffmKVCBeq(WSRVc-PLOd` zB`SpW1sT>cy@@qK>oDS3O8?W8Ajr})bkBq(+I&+{f0z4%QX(W0g<7#vrUNRaQl(0< zO0EYiCX>Z_fos$6yxETT69$8csoK$av{JB!>jjI&YOz|hitUEW<+Eane#h(iaw(1* z3>9m%+%c(ihAmeII&~J3(8IqU*rWEaO85vFL95BG$VScef|;TaE1J!|VDN<6WeRsh zYUgd? zIuUq`;Z42F#HfPJeAftF?(qWu1Wkb-$vU3~sKy-gn^>E9$P&$)v20>}#v>8oU|H`! zrtqOZ>CMWk!;?6tv~CBUTtCzn#nPaRsw|X?ChwBTG^(A`iMm^+`7qz&%2OE(0Q1Jg zb*GYw_0TbwZ>)XEcKb-eZNJ-h-u~X}-w>p>ALlzqIc4m5Wg0gza^TB1u4gsPh~`PQtt)@fbzQX;EB;oy zLL`!)LP2*)R5ct9OUIYPzyLvk{l}M}u)x#~mJ10CRTUWPEfxoj`pv znCJExk6q(3qS`a{xPSpBr{O@*nBlt@V6sgsViz?|V`wEDAUld%L%B%%#EfTRot+u! z)$urWhr|+5EIrUB7qKM}|18G-3F5e;YAZR#sI0 z)6WA408u?$##KJdk>-OX`*~-20AxSbE%qDjBeV{ZOEob>Et$?30aon=fo2gJJXl#~El}#0j+Lv^g)G^5P zf<{x1S+wGIQ%f`Urb-wfC@|Sj|56SM3{5uMwfl0rWR+}>Rvr3^?1(LCjXzTbNC!Cf zKmt@)<^hw3)n9_hOA-7aV?`V3q*M=v_ygV|j5!v#V}w|a(_rOUj|DRxLYsv|qh!=8RBjG-bo|K_ak;hn1QJm#Y!&PE|0addHPe8`W{F3$kxy6M zm5=~`%T<*34gaCf5ov(5mnlNZXdnk|XBIR98^J*7adtNYVNpRYl?p}sP5*_D*RH0s zW(Ck8-G7C!_7=J}t7eLm!)+tLDl^z~KDQZ61@u}Tr|j(0kftwBw*H+KjF3YoVM#7> z(qiAKSbEl{Wyv5i+D#Xq7;G8+5nLVtbd^-M_|drNs^Th9yR@#Bo@ww5R#f= ziA^P19?kJYJrzE-;0v&`H9}QLNKsqbGahbCCGSBwz%nNd!5v z*^W4CsTcJthzr-rG-gbG$Ol-*JqV5XLDi%*-$n#n(2r3I`cg~)A_?*}qIM}ANRqjJ zoXi|llvGtbc4~y>ybfbS-Q3~i`E1+fS|SA*~B@O8tK8cPM4AZxgP7yj_WrV#gGSbW;c&S z@)JJIlI(gue@;Itx~Mso&lins(t%Fv1Xoqey>To-h?1g$%SngsIlq+H@a#lXXd?_)O6HB-al6Mmoe4#PkL{j+%Tu&0#b@pYUlJIq4XyFQiXBrNGny2 zf!M@W$({rc;@3}tM9nxx>(O4eD547nE)s7vbq&?BDTKsO6Bf0knw+4b1sidT!RwGU>jY&lHDuj{xxx-<^y^;yk>nul5qXdn3DfT1{7sY3kBZoyb z;&PZ`;Pt4A#N+_k&IFk_l$wf?>v6lzvY`A#>YRdGG-{N|60V0-G)I*aD}xOPBwj<~ zXjrhr=YN(@xa`~e+u{jj%ZlN3rj4u)i&Wz}tuNFqh^20%ehyR5>dbu2z%L!yH6%hs zV#SiM2=SDLPKHNrKD^am}+}~50JjD5M zg;=*|Y#RljiTvRY1?Jcb53}wrJ}g0`cVvz9Es7YZ1fSO-E?6g&;B;)PVX;&U)A|?#lfGecZPrZ^to%PwgLJU5vKU^F3VF&=LaIgUc;hVPjyI>4M3mood^P(?KiG{EJ+&+{ikg{Xf_WPzD4@ zi6V3}F9Z&Z42>>B=R8da#ZKa{SK%Pm;Rsu=ObHN+Kr`N|M0LDCJ9ZHS~dt|(L+g%661y$LqDUb}@z<^avaFUv{zO zF{ah%M9|!LwdY*1uP67n&kD)e=XK}tuJV_!@}C8f^xJj@PbVBYvV}bj7`oH;>Qvd9hi5abq<|*i2=b36S+w|)kzyJ+h z*NuzzXT~MygQi{HPs$vA(rg|Id5!J^hr4lZc79P4A@x7m6{!)OIWKxAT3m>u1ziES z{(jBwRRK$RXvEwZ6~1h6voDsKw|*wUQ#<-zmd&++)cY@f2{=W}G)yv#1!S-wgQA@A z<1s2&#L9ftoJ-r1-n0vo8?zqLU`3BVmOm~B^FPl^j3dl}G}9olIH8i{A;+wksGTr& zK*_vfjvIm4OL@5gXs6qf9m_i*RDjBGQ)u;vkqKm7aNS`@2p6KADOA8O8l17i%0f>9 z38~UABXpYVK-h|R*Fo)S*gG+;eY${}Vr`(&Nkg5TyS z#2=03T#HBor7=;t2FXNNw40ygs)R^*%;|+;co-y*V0`$W{*4fU1jxw9|9XhPG6a|c zCrm+=*1Q71cHezhn*YFt#7qcvKhNuEHw--n2ijoFFcDDs^X!j3|#{Iep3-Y#E_^M`2v$R@hocUiE{uPt2udDMZG9MwJ%mPJ2P+)MN`nPYKXQ+4R{p5Tz`;H1@ zV@6;)hQqbdtMlJOGdpB1>eK^1;)CR_nH2;!c>mK1_k*J){&-|&GplCGy@7dp-MaP% zza~oP-~9=Gp1DP4fc3X}p`XGjq`!AjZ%*>|%ubQY)R$Wg+mdn$rN#MynW+=On0+^! z*q$EuzK#^U4weZ1kOEpt0fU2di&oVf4@e|bz(M|j0m=dX!GWOxsvIp85*nx~Ff^IX z_ZS#SVoS}gDY<9=3pwvsg0L65qHHgwas>j+Mk7l8ygxY|mdchL+b;}f;+mH=kV+=3 zGVjVfw4&9cDBf(LJdAXqk4wMB0D8sL-2^A<% zpg@Jxo+k|k5Y+4l)83>|thbn`aIz6;`DR_jQ*ZeT5WFE`z<>n}7%-%B>MKTfa-;YI z&-3dM0K~P6!^W%L4yA3uH{CY9yPbA^wOOIxm071giHG6rN16~BwUZxtX5yAkTRNr? z9kV0)h}oLv+Be7Iw;0@%W6Z;BHkFs_iuoX6w6sS7I({ zfPcrWLr$5JA-la)&+@@TPx>1F@DWez(a*dclD!$a7>PVl*Qd{U7*;Odc`qnA?do3* zB}cn$E96!eSrY_nkRm&$|MtGPin94UR5_BRw8zina6&l%B^pd9lhW@Ii<7~UMf~h~ z`#99Z>%zNxcx@;it+RdYVXa@-$^k`_$_<}$x>W0Q)XKMj>Rq|HX^l?T%)RL`dZ2oH zhm{1>TkazOUj2yo`o^K9!*Kd_Yh&du^i7&2?+NDTqrGX83J=|c@>0HznuCLf9j#?i zrTI3m`m;((%+4b!=d%Xvwth71cB3m&s}8JYc?y$a{ecKdYv;j01|3qisWM#VEFRtT z&1lZ*Y+w>if8(`L`Rtf`zn*JUqB`+=)3`+T8YHpRefB5iTA_305#8lwRkLfZ^J(ky z>z5-zg}`IS6U#yWtq9VNqNsjwaL+zS^ z;)AYl?&M%kB~nc0J%5Y$Qc|A!O7lcjW#dWjxl!Hs%A3Ek)@euJbc`! ze7zUY4#po$JTi+sxX#&><9yQ(R--E6qCDj89-Afc5|bFxlV&7eQEZTM$WN@=XeF zffzvM)Z_>f86sOIOyzxz!E`WdE=@KFn}l`3M)6Y)N}Y}Z2l11D;i&E+3!jOHqW-+> zBa|HxC9n%ShB&^Ysu9X$i3$+ibZ-C8=;Ap+UqE|=WkrRt3XC!%w8=G;`vjYO>J=MHVwF(MwHj>A- zUrLXkh;-=Off+~0Lets;tvKFg?K3z6mekR}bn=ZvKUUP_KufannZk~I*0@vQ+7N(( z5djJi2-8v}!(uWOhUH*rW!8j29oc4^lH``n6R8_*wS$8z03k%gD+Hy4gef%B6QYAc ztUmHvVUd4QK@%>R4>cnJQf-o|M^DS?30$sql?c7`hD|*9%vFAT6zXF55d0I54}!W3 z#wz_Rd5DSVJ6VX8q-*J9C1hthUZwg-J=LRCl<$Pn3NjVynVSAM(jq7mVw8bsmZZT3 z-6Tq*9rAIH7=DAK;v)$I=5Q(i4KcOXza7dt&UH1fX-`~Z+;0O!oF%jgW9Alzm4&?Z zUHfWwn(B?0^#zmBKQW?TkTz=0+TJqLQK{;({TxF zBzX(WE_7?!_N3LByMxn?y)A8P&UcvBDZ*O#MhN^8rBk8JK!{g}{u23f!Ji>KG}w@Z zD4i57BBcTII(lf|L{? zO32b35Idwv1&~}w5gdmv5lk^C$5YTM98HKX{QNQ@+kST-1D?a5N0|cIK$eVPN)wq7 z^B1I*ovT zp1oVWvG#%u6ZY!vVS@PdvAh8KZG5AOGt8;~-5iH9XX5$#;kT%h6R62>It#P*n~bBs zEc@H}J2qau(ITirkK<3>fugj%*cyROzJTK2Pvq+FzD`ne16(7z)I7S@T^XFpG9Z*i zR2oic6xj~#g&0{th=yP!5DrKP7L38rq=b*4Td(lEXsw7jLerF*ta{yOt;zY;kpi6T zt5Gni2J9v~fC7T3fe--tKvvy}mk-bOXdAToIhg{zoxbUkDQ7R&Pzlm-0BvNmCE^nY zbN4GEfbPwIHB5NDabTQ{w2BKQ)M3k$4C>ghT$JE?MCtA1gqg2x3>c`(6Q3@UKb{z1 zmKG?fyXt$dxvzJ-uW$lOcz31`bcmV)X832ZF&BNA0=H+qnVh_^?*alDW_ZFtX5mE| zkNgu@Moz}S(a7C^LHqH^J}`v9aJQ@>4UPjlRP#)EMXH_pa^>51MvH*4E&&s7xLszd zxnqOFwDp*PmeC+e8aS$`E4X?D6~?j@I8kvktKeJCA^!@@?#>`|=s5^%+@LJmG&FGe z_+Lwq-DjZG1l7BXERA7+)x4VG8u3blT@7*8M?(z|AW4)kVG0o{S+sEB3K}qJ)UaU- z8#>uddWG}p6(B&_eR_p6df;{9rcsw53_(%)PnY^i?GUiVsceQITW?ftOvG~_0 zSThTIOv*MNd%;Iue-OkR6U{so)m)d{z8U168pX2he}Wu(hu~MNmMhot6_dv!$aa zO@LW=B)-v`S!CyfwfAEfW6F()HeuO$VgRxlFaV{}s(w_(q-yK2BIx^+@gs{G*w7|c z89*0C{p-C)#R?#87)>~N5+sA`hGmla3rV$#{)_*YT=i4$w+kzYoVRoB*N^r(`{VLQ z@b)JJpvg4f(7`3$01DTA`(sU+%koFQ&MIOmAg?1xt6ouI9>~YFs&@eY9og@|{`Y;& z?`KT89$~{mgxUKrBMDMQgeWN`QN@h&5PLg)rlBIU(=vTPlNJOlNOG{Ap@odKM3dIi zbni_XdvkNvt!@;ndZ+U?19q#*+gQ8JTwL8j5TQNl-Ya4;D|z7Fx!LayM{J(}5Fi^! z4%|G5(0~F1cr<|0fV~}?hkBmmUI2k|JQXb~H8(X!ExT0m4N(Y^5wf9_ytJ$sy_k8? z_2RVpivLeIOu${V!5%;={d^Wx@^+V#{)#2LZ3YJil4PSK9VKbvxzP)V6;N)QCRKF* z5g5P}qnCR(uyARc6SQj`?;*f3=1RQPCQW)wld)Zv`gGIN(Z|f+F`${22Z0NuTyFV? zr>-;p&M4rNqIbUBGjMv2fw6tPtFjljDY!dM|NdR|i%f1@Xn-U0gIIOKSU!R?;Bihs zCpG_UOoA=|PDBE7d}IN)A4f+F-u~BBcY)nMCclEK-;q>RPE1Ndq zLL$vzbrs8>qrww@0r)?_{ygTh+Om>C9OCfM?gWcl9w>;%Rbr$`#CkPv1AYc32TAw_ zDLQZ z>p!64M!wnh`XS0Xt3PUkAezx$Z6IX4g*eAP>Fg7wIn0{p0Z{nu5>6z;z&}KUtDiJ=Qnm_HS-5H%Ty4bP+YWnIG;Z-bERif6vwC}fkV`<~s@>dF671eJ=dA^IE zwqh-7%I(d=?UB^6CbN<6utWlFfyFDQtBN$Hj6C)NP2tHgs+YYAv79EFTYMbPJDfa0 z;_I+IYYQ5;_ag8veGL=A-3IrMP}?sOL+Rob7WHK1Rr#fnGTIT+M zdc>cALEBrf3bcs`s0%lR8;_D#S#3`&;y7d;Q6T!Xyzk*I)0B7>!% zk}5T8JRFipB-21jM5AI{~J0gj2&~gklCf#HZtSv&M>Nlz-qqpgjwNxkr&bkwSpq61HWyG?S zcuMmT5Pndl7Fj*mc~*_NBB}Sp<>oi8diW zSwLFi>2f(6{E$jZ$sY43Tuz_-uD6`7L6GR&6a$qcytl<{`iRuzY1!|d^w6rU#qnv; z$MTevE=o@uwO}J!B@@IDp(0oG9`8xWCfm=p<*P|&IJlxWUsA>oPE(Ga`-d+8RK=cs z^#n>l3%%Hp&~)q=HTbUtKJf+Gh7diSvQnk4<=0}rME4wiLzXpO9np(O#(3!Qm)Wk} zjII{mSnag*IQ#@Suf~cnR}H4Zd!H9%4N_~6te68$hv51}gIHlEszqci6vGX0Nj$*> z+mOeC8;~}q1JB*u4ayYf9-Ln}G z3cc;4m1{YsKC6d3IEU)Ky4A}}B88xa?~pES{?WF%9@Dk}=AI32@+;Hb%5vr4_qe04 zspxmXE1!M(Yk;1Q7!d415esuJ;V=+Z5Q0_K zs}o3NX*!56tUE^IubBmo%yE&R@*>lwVo-eBMqaL=`VzhVy=VpzDmTufgbmpny7cm) zkJ`L|6zKv4dci9L78jo+KCxkZeCX)(0@C4$)ZzW89})IbmJcnTelJ8|51+I^Z1PBv z!7GLqm$ZUx@BEJbpyz}X14T%f0w8q4TVi-X?!(*jqn$;C zILluiE*X=mB@bX({KFYp)w`-fGFuJitbvoELg?Y5-9iG`l%7fbVP+w{T7lc1>q~_8 z3Bu|3At)-<4^-*5U?n-Df*$H*cObubcc!_Y5;VBfOiUJ%M`&S5sx!16&D4$C>TBtM zB#R1Pvd={r!_CA7eYL9?@0j?qsAwve{?axZneMn+Y?{puu~1EiM)R~dRH_tT3DWz) z)R03pnxgoQj_jz(R!jRk!>3_I*0fS5Bjn8Se>X~ij&4Uvh`ZUc?sS&vNU;gcWD4jO zTfxp#%ob{;P+7|yFj-@jySqAM>b9FujuX5tWwEoJbT1t8IT2nSQXzR^IoczSQldj; z7JTd)z3yXPmaytqHsIX<;UKfLFr!{eEGmfA+-i^xSBes8LBda8NyOD3Qn0!Jz&~oN*?I5sGP~U7giG zWC2K?*b_D5U7a|d`f0@YmrlpV!nr<`Q%Q5Ko{uGT_}`VBTYLf=JA80+S!$&~furwb zNHI^2y*bbypXz&{d%r}r-rfMSPKf@*^1$yOXJlGOdAt*d<;l?dD?o7x_=Z?W-f{|a zH>CUB`li8JD#F1+Iv^g=lZhbG(GMv=@sCr~RE&lQY($_D4N9Wu>Gd_@21fR9Fd#(q zHRfSOKqDT@^YNK=YA%2f+?C9VZpY8CAP5o&{WardJegRhCC4m82g-`6M|ea1=_+L|uDJrt8e?T2HKkNLV8Qd5_PY6{Ocjfg7;T7&AO(~gDN(i;E>jNhV_r)-kcr)&}a z0%UIr+Qj`_YNH92BPZ%Opl*Jr%@gy&* zrv38(Tdj{!JX{0}@(pHokkiqxLNAmCEfP^++YIO~e~_1w0W8v~Hw-TaYrM&$;`OO3 zOm=i6MbM^qtw*-kRU}*yFRKb-h~BG7xwOA%=sPv(P6flaebzL)Ob*Z3YG>!L^rnoo zxwR~6;#_$C>db26iWOR6qRFR1rq;VLA$UEA9KzqB&nSiM-$Y16R9wWGz)nKa#w5G+ zfM{9RmsJ#xY2V!$jpfh%<{sYMA>&bG3L!UHv=4i(#VlQxFQCZE9ub$d_yUwzzNjf7 z;S?ZA@`fHfKDywK+4f1yHMR~0T0$)^@!WVz4iVJH0^MvZEmd$bnwztuZ!yK9gQeD| ziJ6TZ_+$J`D!O9o-L*;+C~cJI^BlnFII{aLdDu>OOHpO0nPX&2-nVdUBve1v@0zJ4 zltrUZRy99)1iA+jNRn~4_=?rYwWy30xq1&+*(90N$%A}eE{U;PUuZWx*c>a$rEx?* zT_8XsOXU%hJErzv&4m$=2At8hmS~^i&P&rghYH=wi070fGYRG7%uwb5Cg-#2eLQk< zlQ9zGG>L>#W;S9W?|@?v<`G2;fDdAJWa1HW8#qs20}Q|{`U>d{BP3MKOwsSv^G!$z zDG7oMXENlpHIKHrN@{LQ#9FxM<>b2gy*N%?zRd5rJ5MJI>Gi$Sb7nvQdM9FM zeoy@D#>u(WlIp1pK0K?xmu}fOY)Y|RmL_P`2||*hT2*Kh&);MtzHC4k*A&Z*H|;UI z>`^`znuDjZV8TMS#vSP-+#d@8Nk{i^Vpj>On%feY@O9}f#D;+D>ERdcE)%R3p>liQ zO)w*nAQTLZd-2X2zR2%ZK9i<8LlOr-(S~T$s4S%g^9$JVZQm?W>pytaOB!nM&T$+sG$%zxaee>=cd4hUSf7 zY2m}(P>;BU_D`7Be=Id-ggl?8^jNS4Cwvo6?ay`8+wRbG*eX^Z>@Sd>TqG5I1#lOd z+87Xw03nhu56pLQQfw~g9W@Z4p=~r{fM$zNOrUrkVICb+6AB63Dvm_ESeT-{MOE|W zw!cmsl^T%RVeI0{H}piUJXw@>ejNrZg05828lTom=*#6jN*2I*2@cnSv3Leo>uRRu zjIyDA?chZEEVbl=eHI!KKq@Qy=o{Qe*k9N907YaZQVbMan12;5 z)ZefMj1Ec(Y2PVibRIx55KOQ$!p(AhQBAk-XQ$=Pdt&fi; zjNp?Y07eE?l1ySiQDnR^YKiQLe?XP^QAMDt{7X^RXLcb^yMyi72=4_NK!)VD04(L8 zzSe&m9;>HXiYv3*%5dG7{G3F~+Py7JK&de!uDrX9?3N*VgPWf=k5z-Ppy{f2rpiY? zaOnzPGhAbQGwTqoSnxV(%*0PiJQ5sa2lj>V_;{6PCDP`k{TEqQr=}T=_L`?OZf) zzEXGV-Z?roUiwg=ocrJ9hn+zU^2$l-C2B}Q;6##SxE;4P%hp(=;AFW^g#-NzT|}Ra zTD|3vLa3IkR!+aziTgVUN~r$E0pvNQ{SUvgyn(;co{lBqF|LBJ0P)-3Tt*m#jz)8O ztq+r;;%_s#Ii+a70_f~~eBK*qHGtYVIrJlGGgmiwvWbYPtN1j$)eiSH`Gv1vtLH%- zmwr$#M=avi0e2A$qY2MCRN^zC>+>qLSK{lRRyos&^a44C>kp5Sui$sq$2BJf&MY-{ zvN7UgS#b=?mPz>Ae^3j$e}q$WyR_tfqQ#mlFGE_`z%jN}mD>Ki&c0|j@Oq3sBsp}U zAhinIqkcoCLl$b$yP9G}QwVJoz`{;)#t}AuD%Sx+hnf;p>dtuSu3eDc#9p-eGSaaN zl?s(bc8a|pB4rw1s({xWTSbel*S@0DW;%Lrdz@Q$2o*yaXbGf|5YU$L>IGIssQ=)p=-X_O+V2^JnhY#2q^i z^F)>%woAX7xrmYxiseYa8%66x&7dbk@*`hTJxdYeV3@2E$_nB5|Hi>Dkn@80hF9NL zpv&Bj@k~Js(svC}!aF4g$A%p!_(I~2p>&{N;HZMT_6!|%EsLt*sj2=S05(9$zsQR- z`0e1g^1OR_(X;CXr&B&?&v-@upAQ>@ll~H^!Fv1*^)9t z;z6{q1*{f%l`T-;i}pDveduxFdAj1Mf6D)kIjJ2wc(tJ`DJA8QAsLfV?SV-R_MDQp z^Sw%Rmm}RXz6>0*PE(_%JDt$<_G&^tmbC1d7nD%*HB{%rRy-sK(RB6N$6cPQipK*7mp=1ZzdU>_8vk1ptqWuw5x?t&Wo?&N%ye6v? z$dN0`qB3W1g836NUys-`-!nLKat?*aO=rF50=N1IU4!z$XgXba z^*FhEvAj9Zjkzr&-*fFLVox55$V%UGA(S7-$058{_^pupj1gualw7;D$C<D$0TGFv8XkUtZFrg$XQD#dxUBt*FKancxX?~>12wAw;*q&ZhIQQ zfgCMeH9{_G$^HqSeF@!mFQ`RZQK2Ae#M`RYcvlZk^u{XQE@~;Rr?ghyVo%=3j{J%3 z@R>Sq)}WvHS?lmkemVmt@Duo((jR;n*^UZ9E!(PsDiX%1gPC+EP(_2F1Twu)W<#Bi zy=1s!Bx69v6buHuskpLl!n1f_LnZ}PbIkR=%$X^xrxNz+-wmY_SHtoDyKi4Kl)71b zHOI`3ER4*VP`gVNhaW2d0G_znxr**p>=y4X>OvvYYW>3dGIHkRrjDQIn&|fvVOp|p zsYQpF{$8$(wLH1nBWDqmvmn^QeHgZaNk83Atfz9IAdD{@`4Za_O71-RhQY=Id*3|H+cj*&=usM-7$z!mpySYE7vn6e zbb%3nW5RPXT2xrEgV5s!k1q$Pgc>coIKqo_H_Z_Y?G$;B95H(_&iE%aQdbHkBZNcd zLR@~nY{TGDXS7>tU#{d*{l(XKuCvVIaxETCgo%r)pZ@dJ+->wf+}Lj2b(ZC(1ZP_> zRQ83Yp2`JCN4=s`db4utYlh@p9z^?kq2NQ#39>Q6dc(sU zH@OA|bCqv@(ld`)800Jzg$ip>*Jkq>@>3D|&KuFqsm%K%i@69!>t3%yN++<}e^1ho z=F-%s##NPz)4&xv@FK%n{LVW-q)#N^l7!A7&PHg!oEZ+l69UKqSN+_w2o+`U8+CK7 zxeP%Ss<>7p)Y{nz7#-3A7)%wq%o%Y15>7z!ZtS$KDQ4;+CB2mOnQ;8ty_P3MWp_py z81JcWDY#syhSrz((-)o;%8Vt+{&w)J52&5xT;7@$S}S9GVp*lS&Uk^Tr~v1Om){G7 zDnR^W(Ep%Snd-%TA;uX2n22{{4bv}|nLhTSdcc90xYXyt^yBc_l$jO~T1vG5rRudRwF#w4If7CLf* zPPsZ}MA2OZG^mi*p%(0{BJ8?db9f%Ucp|PGB-&ddKqZeSH5>_zI zCSPfJv6`U`5+o^&*N}$%UvY(BWp~+HGF}0NbE5$&Qz;BpFQ?O@ifpV;82vlb58rxq@tCFUMwc}5ge~RM_rBqj{tO7RM z!%5WyTLIO^$;>vi8hf$w;cAkcr)tjz zs#?FK4OG=9WcXXu<{^j`G>sg`yaI_`4!ChMc4V-P<6r?n?Cg-Wt+QMPllL%VjH;Z~ z!MUhm#b|Dr%Q}yxMCI1;!s}Elsy8h>NYf;}F&1;3c{-RFs*`~kuI;Q`$(cf87dx^6 z5*w7xA2K_~GY`zs+ceFTvZmYoYX_(Ab9k^Wwh8zHM$iIcF+?!^n;@IScooE}Gaebg zm@m#}YispqFL@=UY*@`WJzd*`=AhifO{pPpc3AR9x}4guj!YO4zY3V^8k1I+*^ zE~uUZ2|7epq!>)5d-}%uSSZ3x!56!tS}IXSztYe+tA;U7EIFR9q?Rs!28H7%BBv&7J!>5u$&ch__WX(=BkRgs+;%*+Y%@iP4#;%FZEh?ULW76Cbu@4v(=wHVHAiWJR;(z7#eF$5DQ zIPN8HCbyJ$WASZ zFYJG?U%V2r{8Im)wWXhd4~ny# zwBTJPm<#|@CRR#_O9=8j#dJWv^3pg*;;cY~uY55jDHa6r>&`JreM)qZ z84Z!Kj!-*=u}i$(-cmbp!;(qEmXg-mU};dk^7jF80f!h~3vdDPWHXD7gjpk$k{zF+ zZw|Ut;ko(Hn;O{Bu<3(*^g@GANaabg97zMoz)*#37DK6l4B<-)!T~>X)DL33rXhcV zygtf!KG;SYgMO%;~>MYiuv7O*`NJ0Bn9UoeoSv?UaLmlG`;&pKJf{ zI#J%dh;)z1x`EBR7m*e8G$X9Q@caS6-*KMMGc7C?wqp~p4m7R;Jw3qckNKzT$U0DU z%Dd`aZ_FCxAD+K8rgidf_@_)jdjYUtGkP$cKIlHVKwX-XD*~FGguYgxt%$>^C>bmD zeWjN8o8`?*JenTX-(d|)B~lopmY%hjyiAK+!CSw}Sx zoq0ZJi0T@UtI8N%b_w+&XZevAjofBg{a%*Epv-+-oF~o4xNWm};t#NIp6!XUIhbGN z)&1NEaRySGej%#SZkUR3zi8X8<=*)R<0tR4_kJ5!&^2){;PLzC<>nox++H3Osdt-j zWrL~)^^$F73@J4^OYieVxKw!64T_eR7P~B7W#|!v=hm$PS6>55oZnCU57zW0SOD+0 z*Ujrw{Lq%G`>nwJ6`)1sN2`={&A7Gez68;d?mV-V;053)x6~`Esw={{yydXAW`u#p z9Z-4B8=LmSK_a-nNsU)eOQfo|ub1{eP~~q+NXIPJ3wUW%2@l z0C|Nji)XX?kZ(ZdyS(fXOHWv>9Y7kIx~Uy@=4SHUMwrU4HzzT;g7>1L#=uZSEgkSh ze3mhxG7FjlKiMZIfJkw!`%Z{>mu0Tu7KIh{AHEHD=q9UXR^Rkqx4zQIvC z&K&JwN`_UdLRblu79Bb4T}s_KQdAZ)To-Vy)xWz{Oc~>w!q{C zziLAoS06LldcISS+r;y>^UuVamj4@l$DB#$`7Qsv?)M2omDy47!s^jTSM&067wby( zT07U+G2}dsw^`pUmPrgEUX`x7___U~;l~e`=ek)(s)u`6zm37TXx`Drsy@G4GvgDJpJiNghzY%)_O-!f-JJ0Tx>!z@!?XJxvWCsQ7+svU#7cxpgKr zJpqb{WZ}7Jd`EEqcM|&RpQ(<8Zr2!#QaBXRyD!a^tR$`DfArZ*SM|tH)^+`M2~I_f zB4Tq!ES}!g{Yqbc=Nr+MQzbzhQucXDG4T;$;+GgG;Zj(VsVJ7$xd0E6CBzlGq{zl> zc2OCFizQNJ)R?RweePb-QBFtxiV~r7RzSu4lxqhL*(8b&98B?qjidUkO43$xMWDN} zg%>P=N;yf_4jmyT3XU94Fu=!9{g&9Gu7nuh5h+KMS2QLj-Q?5@@*f;+aM-@3{u`n#_`MAe| z-bIgDb$1{I{l$0pX>T463}k2ST05cNU;C)zgjG>H+tgY&%_f`fd|+u^#aVOJarK2(JwWG?;7gSjlO1WLgSJ+E_Yy5NKU5&e+a-#ODcuWcUjk#EurrFqVdJTSsBMG5cUbH#@2pe9pwDC zVAyhV1ZoS<@RQdBx{1*;8;74zJ!HBjJA7Hzx;NB|#X#FoW_LJ;0LogelXqL%V|4z6 zxss)I6&9aL-Y2B{(L|{B5l{+P2GxfOs(a-96=z7}dE49tpHQC8QwiF@sSgG`2G2#{ zue`ZD>KU5Z#&tO@OfilobYYV>$jLV7gkEkFluLL9?DkQA<)g*6Z!OauSE_1}dVZ)`rhm4X zlT?}5%iVt8WFhzmJ>=q1i@y=ixY-VRLPzAQ)DF8g`qPOyF zFk;Ioly5i+FJA|wG9E$i_e|;m>yOR}nn6Slz}r}7RSO**bw$1x>T_c6r z)b&NK)X9yHgOvg~JWCUqVJFiEDpv>LV7pk{$4gegx&n73{22NrB4vN@7NKr?u84g* zA-2M{Ge@+3XNAy`-RE3SpLTNWbH3~5eDdrW=Q}>>N6@(dn41^)w<)wCGds5TN6fzi z7F)-Pwm&S*x24_;wHO2Z{B)J;w?4c85v)Ho#U#z%zqrQ6f}6HGOMCDnZ@&pdau^1c zo}!WW)IU?5H?jh!}( zPY@CHbO%FnP;`8=e+H1m30?xj zfH4v3BraU0b!t&KqR1>{1`^Xd;BIBhO){P zWP5xlzPu#9eArMC3cSW!v8^YkCx-)j>BVOz7)d$u{RgTUcFI_{_2h%1(r=CPMgBaw zw5p67+a1~X9JXW$zir%h?Y#O;9~T|gF$grjs8fS_+F0bKm6aoD<$S8}|2osBu8ipzf9s!4 zk)_8_XS4Hohe)u8h5?Hy*6Q{^Ph54PT2@cuEsSDnYNu%xB2p zGCiM7uhe8=KrJOf6ktKMWPzA+|$Ja@phasF~!Gl)_v}Exv z)JB)1V7^IWv93{OsY+#A^|jlMukQ|&qcWh}#mBLHEx$s6*v7^kdLEuPF@fP%kK!8y z*s8*-Mno^K)|6hzJRh?h1GUkYE7@#T8fK48udj&qRV@zmX;7s?j!_nWtJeft6qc>X z{sjX&I>tc1k@%RhuP2zYGxZ#wgKnqw&>A4m?}*D~IWoxyFSrXeGsMeK2ifv#8)`7% zcu;NBuD{~5S{4Sn1Z82g_B(7apRtit@a=04T}vo-!`!%*PLzYp<~YQK&|`c5!Ju>{ zXbmX;8)a?dKrfSey8CP`L0NojXVw{tuhE~~sA<6I;~$xa_5TG?8!uu~Z$J zi2*gGvFV=-@!ei=PDOI%6j-U0&=Wr<(qEo&@BC>?{9Pjf+2?dhGpoocx>T;hBOz*P zXX07mfzq^$t)bb3SGvDhD1D(D&^z5Lav5Hja;b}Rf$=1xYDryVr)c$bHI1SIVI|ab zz0k1#!rEb91jrkiIT69D=21lO-q67>`h*M=~v#r;+viyBM)#t4n84S_yFH)6~`q8d7fCc9CdM`5wv zkIMWDo?&>8B&jLfd)RV4sD8F))-$N(19UAsMw)3fhk-}U*Mpi?Ti5IZn|CFQe@!|U z%DIn`c5m8Tg(n2{2rkVp(j76UQNY5O#&%N}#0o`4tpOR$t@iyFP4KdcUD%SQ%iSXN z&%@hjXw$Ys4ZD#9%SGjeqqa#8S)KBli>%gsqpjiVfU?RayA;Zn<{Q59ZSq2Sv3y(g zjR?vXX-ZC62na)c23cvxi7C{|<&|62h3Z1(Hk16e?zpzee2l=t z^`vIy-p-IUEjxJKj6AMrF|qpnF0%8C5sMnvbO&%I$jJh^i-KZ#bL3G^eVJF=EoKJ=;Iq^T1KOl3z$ErHmTp6X(91$qpjw0PZS}tJdX^k=gZ}#gZR2e~_ma z7Ofletz9M)BCHd7p#df=_!ff|l{GIG!N`wJ zzpkl-swfMALU*}Dp)sy>dK!%@G>R&b?tL7}-uHLD56hp*$NM*-_k~uVMkOdJvIW%8 z-1CL)bk$qcTA;@7h zsuvo7_3_DIiSWe*oAh(A!se@p>uuz6=3|_bMPpn252RBf;W|;mx`*ir7__WwGc1sW z$^#M#!^vrsR^kXciOktNm|>{Lq8MDXzK@T1M9*z}%Zh5~AZ^`Fs^7ew`Lifl8yZj$&a*=@-g1 z0;j9&3XTzRSpF&%4H`vXg~FTm=j5@v}KfA1n3qx$;rXPM^8m3M04-5J>KF3@VAC$F8N?y$8K^C{$%!)%m zkrMr~*gS#+=YnCRd0)MZl4SF?DWC(~mH_%#?z;;O3N$+=?|uz1x^oUd-cuv4%hXLL zIwoz0TTO$A9w7>n%&85llniX2Zw3+k*52_<+aqoTS|jPLOn|}S)HTuqfH$F6xPL>! ziwoLXeM3s_40^%Sf7eU)?eE)&ZR^r%+j`q^U-p6Jn510_!Pe`~y-=X-q8=(garEWE z^HuXHkTLvoC4VrEBV`lm1;IJabyrO3JQrtN*pF zc3D{p6)d5Wg-VQw@yoq<-sQa;Q9oFx?D6mf`KIbFKp7G{(4lJ2;pTFVy?kwi5ZqRe z$1%N!uGd!Lu_8)Y`r#|;HlQ!so~)77JJDvJpqnk2GiE{RHs5`f;Jmv_hdVSKDqx33 zvADgIFB7?rGuCuQ3P<_GHhM;%47n4=ar`*Nk)+_*Imd)sTIEsqMCF&7LmU`R;V~BMKhGdca7qhG3%Jwg>1Ve04Lh>UP z`oiGYMZJVeaBBwTJUD=i@qKoA@JnBze=>SqU8P&WtXCwck$H0FkX)VD{M1Jw!}Uv$ZLH@&n`PU9S5Cpjc4 zp5|rOB5iLv)PHZl%Htm*!X6p+H=Sma=tTNSwj1iD)RPUMcq7^}j8?Fai8+Ab3*=bt zyv1wC7BIgk$AG3;g*$`pzz9X7u$-vQGF8TP{a8|wp58WH1Kk(*;Y|X6pX2cb<|giF z+W!(9e~(Jpbdd7D6-oB}xWMichZ3X``y!UqTGHmj`rh=$aW;uko7zyh*kd&>&ihH= zo)u*M&Xu-(SZ>w5#G-KaB^ti}Q{N^^tA^DZ)Hxz6GHh3&Sd`9~v z4A&XDbC|hP@$bw=0eh)dsH zm$;xgKMzq*h|J6PB-tsY%+jPlMc(~B=^Nx7;>+uX9cHd_SPxHuPfuNKUaq8hWw1;L zp=hI+d-JdYb=Dr1QBnfQm;Oja;`Loa7a$PCBg7!P)c@?+Y97a;rqe7+4$r1?P(aP8 z$ubaFmYmw0oOJ2oqZg`&gi!s@?|RkRS!Dwhk1;EZeEtb)uv1CEv}Z#;N`j33HS9o9 z=A{qlkGzxs2Q%Q)5rW7X+vAh>UYioUd_DGFz+{}dJ$E|nt$Xv62uerNZU6xE8yR0| zj=^oZ^cG56e?spBwuCM8C0%-*?>8*|zkHF(*&>nkK0lFVznj_>;6IS0a!^YjxuqPV z^P5B&Y<5!q436vo9azw#-+(H@pD7swWnnj}5|1`U2;EO_Z;-_D*?D?n z@Hd%;y!n)*oP{x&?|(@73H-i34&t0=i`t~PnbrQ(Oz*^^`38v;7r(vV+J~aiuS^Rv zfwgj+cfZ~hcIg(Ric0t^#HyIM0weGe#rGMBtgtZ`eF?039>XV0}H1`D9pQk$q;rzt-6z#T%3e;5m>%eI5 zr-Wd{c=1lln8|d$RZhWi+g`8^TLLf2BG47!Z>_)QnL~eNllkG8p!E&90sNLiSFbA2 zFW(h5={V`AbDW$+2e+ToN7uWK4<{3@U9HAbkrtj>V`U-}W0ux(w7uHkZZC1Rb{oN! z8F~+6t$)LMKjH-<58y(W@qBp|vka-Ms62Ish#Q1zefHJ%D9?7u*%C<%H*Q8M{TiS_ zFnQ4dvnKGalmpmDX3IG8uyj3CT$ajlw`J;t2;autr<1~FM7ak+!^GC4a$U0^Tm%zH7uZHV*4~pWutfwl`M;#e6#@X`)0}Jn0KO9aA{Px{Wx!ZN!@G zntz4*NI)O%v5S_5DFxN?NsKzNd)?Q$m37I9ranh~ye?)+D96tQ5KLTfz)l7Itmowm zNWM_}v1egmA&dO#p0sb4V@TumnR@HKJkB`2gfxq}vwTOWQ(uMoSWKCwb)U*oypq== z{vT+yQM*3eZ)oPuCtCXc!MQmESAOlRO{+RK0;2%UE+v#2-Q2haj>5ZoG6ee!(AYWD zi5qlBM)^`Ah6aS2q*L9OhFOnZbil3)ej{myHOKLHla

      jiI=RFx-*f&Bw>7%s$b1SV7vaeky%jd~E)ILvdSzVPp+1T`qy=L-36#ecT!_7r zARi_OW4c~^{o{ikqrG?}=ejy-xo< zbCsEy2fB+}`b#I|gbqpKG9!PbD1Oqlf3Gb{i^i1q8Z3cFRxxf8>6I(iIzts}Wh)pW z=FKX~L<65oN$ffnkxv=J)TQ^qbN1qDNcF6}_M0g!`Z8-DT_5O$rNq^Xl;nN}AU^at z@#*@5w$V2)DUk;?meD#I{{7CFqNlXH_sg;8F(-GKwIwl^m{U+jBA}p>L%7o7*gh}^ zEB=K5HW(k42->=V`^=Fi9+nxbAQ1aPog=NkC>*=4Fp0$p$m&#D_aL+<&M0YGRT^qKY1|KQ=;u$y_Fy%s=2cV{!XIjE;Q5wu7!>_-`- zP2UQAX3Ty&5|R1Vy7%e^(q%N%v@Q$wz0rVYQQX@EkgL^2O2l`mWSHuHl`40bedl=P*{wWsv-jiDv zvzQI$p`Ap>^JHmMXnrhEQT(Z}a}vC^Uqko2&M3JBqcCuLaBh`sWaxSNHFYp~k}UVB zUTky$6^txTdpp8hyTEapNHw6`kv2E;^Ee+tqa;nGJ$H+1es&4^1%VL+omXuSBd(qm@ z<6QYayI?56(j9q{!s?j`!MMY3Yg07W&$P&z@rwJ*+F^6W`5-!xlrWr@(Om&2>*96c zrSQmLR=f^?NbVZ>Yr>ziT?%s#0t3dl1ozOyir!0F2M71w8!^{L@nOtvCy_R1i-fxW zS1)hQP4$C#aQb?GD7m>bZy_tB^R%22x7BWH~$6Hhkcc; zIp*YeOOQ?;uGPL zAkZRyP>eI~ywG%&GO^2_bLU&BI?`!9qlt(>YD#gMp%jUDhkIxpA6Yn^}F> z{BFs@0MjYEGczvqOX@B=qxi$LCk8MAdkad#WO2FzbCnwwcm-ESo4A#&XocZMJ84< z(+;b_H!q_NE{>x(eM$mNA3VD>8YCTH8d z4_(@~a(bk!(m|Nq^)j_X3o-b`RJP>9>jkzAhAsb$b!{y7SL^YFs=Y{XE~&>xUWv?? zjDNf#Z@fmN*n58aQ!4{zu6s#E$tv-D#5D`2%>UG^Lu6bs$GPab2&R7&g1O2abRb^yUeW$r7dn8S{%kNxy?)v{i7E_(tuwruUcXeq)O7v%f zZ^y~R`9|DumT~bo8C^lwbh;`oc;NY9uyX3{uOG#uL5mB??>)cQ{VVmHKe0^Rr*qiH z^h@$fT@89hST@KTFJj6$`ta@E8P%`BaSGNau#N$;iV>FcMwdXG(1C>2iKMm1hJ z<_)Cd(j(YThN#lnJd~9l$#V!;oNoR?!Kp9*Uy;b;wckAzkIq;7R51{^>2QU+0QN!- zi8q`oHEc$uPEKl!!ncoh|J7}VxA>3Gzo4mx$G(;Saq#%irZCZ*UO0rk7+R6f$y;NH zM7_^iza%m*dX5@CF>9xL(J~11L;v||9SskLsY-qiC@C8SE`ONy=7;1h%Q7bh zme+M-*<^yN#ht~LH6E35yFDJ{Zs>KH`$rP>_aXC??lA%a|M8F=a_|D6c6Q34Q{=y^ zbD3F7X5*36FmsR8-G9aLvp^ZwQVaC9jd@mT+YfC4V?dF@rQ^eseJoWh5Ia-{f$Y_+ z-RQn4%4(a4Hqc^qM{JeW5ZwQm3Z5Rqg}hIw>y-Z-G#6mbQ~TnI??9uK!478`#56W^ zG>wXBSks|SyDTH}R4-3dGIk^a3?OHjl}V&UU4KPkNrxS6E&NT^Ub#`}tg%#ytkpG3 zjc%s=MJZlJIoW;hw)z|9vEGQ5U3G;6V%e>6*V%U8scDFcaAM{O;l3@{re0W9-t&7c zm;KxAvigyRp`j1-KMKXu-&{|>t5sF8@dyP`4S+Z&_Hf>t`E~H{b+gXTFA8#P)g98z zTClrCvi?JJmz?fJDNPoWDcsa2*4P7!>z_|6SM_$2(d1^b%YGoB15xGmoIUEZ@9PAM z(9PW+>As<-(KP*?A8F6A?SA~8_Vepu(7k;2L5I8V;%{Vc`<3yIiwf zSKa3ygx-p#3i9bgV5tCOWZ2;K2mz4U{Qf(|ww9)B(vnZS5_b*(gu6uIz)@Vdmq7x% z=5A25>ov0jkm;yPQ_1$Gx?}+kR@`%0))3)|p2I&B*Wfq9jz9Vym-wrk{p)v%)O5k8=l79DQQ$cR>hy(}~n!(3$9pVEuo zZ%s>ymSFCyE|%WDzo~&e=IrZrLu^B*&7)UXdiwvS1okTGzPZhjtR9(HDuPB1;)6Uj z4jQzj;rRnA1iA*Wx;xpIL?MZ;!goIRPrv>8rQc;W9YQOmt)eR~e);ltdhOqQ1KeZP zO5W(c70zrVQF*SWy)iA}To;YVYHYf7Q_;x3d3J-6q!F11F;q@quaSyxD!Z%^m|DO< zcM!OGoue7hVDCQCJ^1BOyv3tY+gm$+5`HYPdvwa`f6v7q?a=erLJ#vXTom^pzu_6< z>h6+RN)yq6@(Z!qS7g1u$|3And$4tygH9?Cgo56|o8HW1;KW!ET=@hL0gC@Z#=KXpfBYbk zqr%s-dtp^-fdX%E#NTwE0|Px>Jvz{`SCDu!`zG1Q zHH4d#M_ziWs?Hwx{AStC7MyHVc3<*V+-Ny&HB<-lr^=A^s-u_8T^-G^u;iUO_w(7l z<4h;!sou_h?YYs?@=`k5b@|V(!liRMl-_nSSdP(3uPivTo?WjH^bdlA_O+fV_Pzz< zJgt6KT7R#!A3AEq{g>Tz)mZ|73ZZ?JSHmM z0Jn%A9&HIWXXtr`H1#lf5(4s64~UkeltJiw(+H~0$i+-XqS}k54dT!!1~li17r@f5 z=S6I40=)^GZ<|k#`$@rdrM4O>NTfrquk4`(u4IH=o=NDATFh!FlrD`~U;8{9G^1n| z{&0pib&JHCl4f!iH)1Hv*rKZLdxFIdlC?ypNp34Y^!#VbPI^U`7U07KmCH=BXVn9- zKU+D{OS-hiEC%@3m@EZgaVE3Ib3#7x-w5tR&&lKyt07GlyD`DhcfC06<=^v=_&$bC zjhNGh!s-FQ)vlTTOz|(Yj@R@r+IC&-UDnWBLQd)IjCq_pwCA?)7?py{D}?**wTAnR z6Js;yFNlIZK3D5~O2i~a}?fj?b$@MCK1^>V($4_kWz`ur7&WCNpjY1}O z(n2}TLW(m9R(XKndDpye~&2TJRm+k{?=c5EdW;;)00t9F|{{Ni(Y^)RwF z*OR(PAZK%d;>wMy6tL!gV1Yt_cmut-_(dKN0(#q~(o6edLslII1^HKA^i;t+96378( zI#~<}31)vRF{FW&5QKk!DqPOZsZoJr0aoo0E1wwD+xc|0&gjinx z2qx*_@Gp?DwdHHCWqQG-LDGRNqa?^HiDe~*!uNUPS;|{D<ncw8U*d>P4fK>C zWndg9WK$<(KOcx0#~;Yoy{kF8*lVS_wm^#1UaBtj=+lM*b2mWUxuJEm{;F|Y3D^w= z+nBotXnn+h6^7{ekdn~g855yh{)sFob8hnZI#WD4;iZL%b>N6HdDG*w%iwK;mTkUl zQ&V5E19!dI5B9#Ey<%-A9{z0b{p-k6*=C85R{@_ZGa+Vk8z-rY(K-C(HBSvmN4&7^ zfc2;OrattI3-5iI6;lo`C3Cy<4ZSrcMv}AAyDh7;oHFw)c2Sf#+KsE6{RH5N&$^TR z6CZm=h4*(fEh8E)lr*_?L_SYSRz{b8Rb+qAMiAH;ce^#RF4MVx=zSu;lt6&Z-CYf$ zh+oKF=_P$lIcx5z0ru<-1=sN=p zR$n(5D|L?70t7Z>Oj8(8PI0`Q@XhpK(+SP-voK?V5~&B&?DH*#T}{1?@dl-Jr5~qo zrle8id5}ucWnZi*ldV=6u53WQ2TWVBe}>NoDBsu>BJteH`aSJ zclL_2<1KZX8mrUCI5I0tbblb3u0MKA{Y~|B{^rPBnrx0x{9FemY+A$#VBEX3M3Kt> zmNf)&P8$?_40Fo)UHm@$X&n_5FFg20&?{pVg#qRA(L3k~yfZW)*|cm(iGrf8%w55w z;mC9ffK*9E2LXuUF z;S+Ea4wYC%MFj!KqLYDFvj^?v4*G6Y)(~g-L<2W1TvZw>#q57Yn$1xQIbstp5$}!N@SJ?=DUBI4Epz@FCn!N4H(F>n{Ni(e~Yn0wR)Ebd_ zZ|r-L<5c;{}SC#SDATnJ>Z^d^x)P4y_OW%}w`zaDcbv2&s z%FJ^8}SOsW3$RyGd2+{(f8I2fAZEYE-o2} zc;R7vW=@;n=1_B|+%EjU#shMb?YSv+f|pInn{q$*JIhTS<6mqjsV}zo8Nn9w?6Md5{>G^}t6BTzibo4wmMZMo(_LHN(`8ne zd)n*jdfLsAv5An^UfuKaxh5{8j?jo?P0l|^6QW`AFowc|@`SRbyuCk&zM<~mXmia*ME&T)(FYyES6 z=8U61HvgLQHCMPUFnR-^w8udGzW9cC-ujyI`eN|ww}gD*8wuGc_yT_n-a%t^4^3B| zzpnDaSK>=ad46Kcf(mih;0{<9?kIfxJ+&p3K=f&PP(vABJzoa*hmgNqzW!eGTHo-i z^XlvXLqNR0N6-Zim|EgNUbtJ&U_k%Hlg2*GSRvQt?sg68)vg}*;$GfOvp9IgeAO-- zJfKdyogIa#4+lrT$%zir`mQgtPn}hEuQ79nYD*eW(-PpYcmbM=N3cjJO4k!oFxq~<2O9F1fp`J+Sy-Y(o~2TFuI%YQ zRx&^K1uX9EsT9v!Q|Y}9Yu9?*ODWwYOGo(dIWh@YKtVBf%KS6rat)?vtz3NZwfbDk zn(m)b44V57t*nX6x;#N%FQz)e28{IE2ul9e5%oClae{5!Uvth~hB&2u<*A&}*Sk8r zYqR`HU&+9XOrt1s?Fp=Xd7Q7f$tYoc3~!2f7)Sl^KVNVu3_DO&S#`^`34qc2?hwm) zckdtewbfYRA&!67`s8DA283h4>YJt4^81vX8=E%uk-FCVy8wW43=G+S2tza_ByyLxC8G5(HV!$i3Wn z?}rz_=6(V&QD@0VUWp&ewn5{S?BQ4KC11HEzE%FfE%klbcAM!SbMSRr`Db3KZ*X_R z_c!#+zGraf3%0%gYkYX~o-sQCU@UBpt7G@C3=+O@(ax_D8{GScX&)dEi6}8T+bcFf ze+t<|_+?XfVNnpj9`+Q4Tn*YyZs!uI09C3qkC~-RArsm;C6s_A8NGH6fviknW=Zo@ zsZ;>5om)(fdYtf{`773MKRS>LxmJ51koNfZY1yu{WRcmtd*T9&?x)hJ( zyf2Jmn&Y@;lTyx_6ri%r7Dq8Pf!n5q(Z!kji`2(lmJFx~xg6?js4IEjvV8RT8Pgdu ztH`;p_PbMpljmVbb$IVTy{{1A7xi>KZPnG?Z90dc+ha9%dkm?cxmtOgA~^L!#HSq7 zdY1WgR@I6=lZz)Yxl{**$s-V0JPLLjS<)-FOjRt2@iX%kD1|m9zfEPl^hhK0`cSB- z2M~H?A_UutNCm;&ms;G5wUgmYPCU3;VVOx&^VId_bE)*bBz?-~n@ zb2wx<)Vk~7sfmAFy^r(CaoLGZ7#Y+ek zVrg6Llzb{tEfw$cS4}=^`qtzd$pKy@^6azjEn9jLfgZq7IU}r)&%!}gGMTvBsi617@mf=>=0d`AND=e_uViw5ORqqXFJ&KX5- z(mbM;8;0?|_p6$^hQ7DeOG+kWE{92m|1;6BfM=ja<@^s-gJo#^iqdPh3g)Pv*W_3; zXA=Sr)ai$bMXte>nPgJpf3peRJ&bap_&6rB|EQ5!ai0edoLT%a1@Z=2Y+g zE?CKO>VCL_$e=NVKfixwBd)+v1vu$Pfx6aXG04&Lww?oa;Jd~z?A%|hp0^=t0PdhG zPO2(f!tOwu7fzSXji^t2{BoCdnH``!q+uU)gvwurir9SRq*INID#8TspX>sTQ5(I@*<8+kW^Y7>OAT&;s zs2lI$!hgCb4P&w}!m+>Bek}g{fp`n>iqrxoNvabOBvA>?U`*2v=j-xbA01tzS9OhkTRI}&vHnJ!JLahG(n+rRB8J!;{t@rgwLPGCWzHRKtAp0mt|5!QL(L z9*>cqlCZ?i?X?YU+j<@*#qMmV?bz8vZD{>I^29AW$~Uzy@>nMaZ}BE3LeK@R%OuC{ zsITpOvK04pQzS-j1$?M~+NK(MN76fq>8jd-U;RJVzt_MY0o)7`S0fh?p%^)NGq8d#a0?@>E3 zI0ZAFo#X9nLP1R!M&g`PFmw+69jo$3y_!9F-iQjIj9|wssO0uLz{!n;=#iHh>gAFb zQx|{V+k#k956b%+i2!(Br+s_<*1A~TUsM|Lg?`8#CDdIdgAnKfN=1tl-yDZ0Rs^w5 z%8!lW$7Fo0C>xl+6*|?F@vG(WQ#?X9d1i=idUZYB^^n8IG}G&A^wWb_n5(s3q3F6) zRa%};ZmHM$yR>h_jJLm=7no!C&TmzZSkWg z>XK`V0V>Y;6DlBUhbfIhg0s0)s<;AC^D|7zS=YPylc&X2+5vHvHm!Q4ar@Hl`6oya z(F|}SG%PMtF2V?fRPoJ0R0~;p@Kqnhvj=jXc%4tW+eI-m-ud|5{O1YAhlpB$D@?5i3LiHkSfd#LP{Sl%xC4iln@7s>{pt1#b1$L!g@tk)bx$Qi*d!t(iX?B4YfQ% ztj|qT!G;PsM8QYXbo2!S6!CuTGL}q5=kqK5RXi5t3=zE^+tdo4D$g*XWQaDCp|Fx&HTR;0XsyzHk(HtWR}y%-;aSW z*8Q4;xDQfabAo3(hq7MezHU!AU8oZWji3t@XxzU> zCIqa1d0N6c>$!!*`-vaT(At|%Y_bRbwX|d_{&A$q4S2`-xHTKb;v5x9BQJ@Pz*S;w zCtMRNAKy5BUBV2BC>J6N3WQ}9NLE=wXV!H|c~V|>Ho3U0;1+FW?j<6py!eBgLjHJd zLA>k8#@vFT$C-;M6ZNG^q2b_+b$P@Pb2_QFKa~!%RVYLSy$nI1_$#nLR}Z#TRS&e? z>&fqbSY0*rFnK zcmkJMB6C+ecsbylEP#lJ4_+iakTWeK8211;&~lAYRLMs;*&^}QbXP*W{QnrD< zH}8>%28BeZR}f>#hDwoGUqzDK=d8mfO$w{lu&P^oC9q;5k{zfalrp>9pozl?L)!6! z!y+Qk)s~S$i+^mIpRPpFx0gito&JUhCkedJqMK~;S4+Bq5>xElLEu(SH zKj{+cj^`o6d9jNAk?pL?joj%d11=WZGxOKoDdtc5K|Zip@Y*KO*Y zrA%FQV5VNav2`}ryDi=S-7NF;cL`)|TsW2Q4jr<)pHK95;3olY^YV_irXGth6w7Q2 zr+R*0JKh#hFH6XF}k`1qoiEiLzq0>gM=trTULt;8&+GXA2zNQ6*sLu zq&7QQBGG^4VuY9Vhu38yAV86k^^BwtRFG7dn_9Nih;6D}x_di%JgBhxr>}1Y2qF9< z_5f^AExmndx9gwgh4nE%+d}QLy|ctZUgI|p4KXz%Kj8)^wB5MVi_$&om-Fng7PXWP zcP{3A^X?FHvGA2gq9FF-=J%oQT3w}G(%ED(wY_(%%VKI@Qf-&ZjeRD&LY@{B_-EqE zzVAj}F52+<6(o(NU4{d6YJlI~2fy9V$pFRtm^t9?H zFYCw4ZXd*nAj-lXqVY17(wl*ogQwy9N3t7ljr{y?GK7lVVncke0=M*ZjQf*}NSt1UbOwG$H$Dzr2 zc4|A8$|B?ta?xpod^8S?rO>gt`4#xWVjhNvmQ%@8u0W%qP&hn1L9v}hkV?=f9-B(S z;}|3YpGv?p$uf(Cr|Wj}0%=ibx==<2i_*}F{iXa+jyb;%wy>Ak?@G)Kt?%m>=2Vo$ zpC~gZ<)~B)vM2=uEiEX*)3x|wDk24%3q$8Z@lsUiqwlY!7Rf1+GDa~)hD4E7v&OC zo9j~rPNGrbG@0ZinMG%@5Xbh=lPT58assM+HV$7TM`BQL z9*fw0gUi(Fodg;N&ZkTJy#fvFdO%*(<@aw5%LsX-Ixx_TrUDv+LLm~7NHSYLN({!R zFldlq*!ThYz#U~jAbgnIY0IeM-@~pni;L#Qt6o1RKW{`f4BXo!Z@#`Abl}+QR|vc! zZ#!FY+yb1X82$P9cBa=y|S0Fu2ZAP<>%`EV& zvv{tOGYzflZ^f5TcY#p=!gbG)TL-UMJw9@fbI9pr_I>R)m2p)M!&-d|9 z_<|oSDS!3?FqohFLo(k1zGf1jXBZ9#*ECZfeg7gf&HZ@iLOl>8CdF<1j{AUfi473% zIt{3w0HnTik`0^z_dP&1XpH^|4M-qvZMTrVECPi0Gl*8ZC(UX4&fs#iH^#9+Z8Z+y zd;`t@1(|)Bu${m~U^iFkc0J9s;6gR$zR~5d6BOyA2}B{Nb6@LcUh9k;T5@9|0t2s) z|5H?}@7Q*}T|W@q|3zRMWLC8bh<$nF^2wZ`?8X3`k^6rkXBj=8oa0|9M|@DH(6aKk z@I3E1Q=smmWW|ByuEp zXtW)AUP}yqnwyE3jdm91H4^N~#nyDNgL0F(kzAMGok)P&-kB<~`u=sePEmZr{DiIa zCRDFZ>YL1|I5=>dhUCS3Gw?T)r-499$VM(@@e;jv*%;n$I>kv_1;VdAwg17nd3Zv> z0$m|GJ0F{iy{s4fTmaBBpw?ZN3W}JB(|HmVXTnODoU<4m=ldKtrkSGjt)LIGA;O42 zV+Bsh^Wj4;HCr1Pc2H1{!x#ha9kdN|9*A^PH6Hh9Xz0>BqD<*BBc&1A{!p!1?&&`X z9;`GhKM2f)F$Q_$Fh)O&Rj{17Xr*T214M5|AxlgY*7Z-}Otizi zO_x$cCD=MRP`g%``y*ai?%E0=|75u$R@1ucB8YozjT*5%up{znAp4tFs0Y)7wA4<7 z9OYPaU5POA$)hex8mUjKKB};(?|A(vw9Kn-g^FNgjt1Vi-6M(uGAG^HYpBK!)AA5Z zBj18)B?v%+&mS#JRW4SLx&oGw2PuW3%fRLRv)UX|lqW1YxAYu$1=>O#YbZDmgg6_3 z?9Z|f3bf)`8bIPfS0**#B{y%*QfwD02Q|euLDH(O73KkmmmQ@#@e+raVMKOlBPZ5Y z&fbME`_ZoB;iq&!58&|c(Dl>*1*t>I8U5viIL7?p(1aX)RaMBcH(*&&h-sF1nFYoh z7bgMQj!T89(mp+N7Zc5PFqPF!IzFFZ1c`;WvJ>3P5dF_~O5%RFqfh`C3)ok8+3$W9@^ODg z@N)hBDEuCqqj0Cbss~i#g4R5a_}d)0c4rlo;=)`am1!s+p^3a@BVYkqb621#6s2wl z=Yb{UG8u%$VGMfEB)BAOMD=p=5L%-V`;9w z*H$(r;DvQ>Qt{=MDC5{W6b)L6ZB)i+ZDsE2sJB`=ZE(;)nQqheThZGzXdr}xhW7o~ zBggR4WJumLt89`bWaG0$<2ExK22RNp5{JYo<^ZWkLpcbj+**veX?{yRB4H}*H{|Z4 zl)wdcVwV+M7iQV$WxvEb6ku=axoOBjLx>CiflFc#HJ2ztAH$SgSr9jOF#Fgb9_iP#rFYrcN!nS>DPXcZKHbnr3QFLh&NPeMO zL&t2k$zoG?25qxTujuD*FB|0vO9{7So84PeoIi!A$bT;}3peYWK!a4I6$j;;rYa;J z3huBy3AR<{jF`w~xebC}U$G@67b}k2{|6i?y&Qu`Cy(Cxrsad&@TQS((IaBJpf|T^ zlBP;Ma&m^{8k+fWGGKdYiYm7-)!f?o5Hiy3J(D zZo{J=9DzV=b!T*V@#|f-y$(P7;Pzpnzp)`~l@Ihs_cw!3ZcaZlL!mu-SaSp(J<5y* zYmR{#3&~7`V5Y%GQ|nfTSLJK45xq%UQ#4jE??1$&m~jfkRptE@^w8(ty77qB7dol- z^%b|DlPe6FE08g(p_x7KHaE2#e-0@`D;V<6PFrd1Y)#OptFej3wrNb7Tf3x%5tVi6 z7^50gJ(Gp!iiW#euI9e{Ch1Pyb6qoWU#)Ope8Zh0D)RYpFZtIB$Sp%2ZTJWGP_3Kb1PtK|<=*4=nSzm}BT6#50&;nOx z8En5;CUly-zwfec^1Cl^s$gR3QW>L~!s%X!%F-={yr7?5Rp{~)1={R&sbmvVYws&h z5gtqqBu~dwlEZ``Ii$lt=ESOiH!YL)BSmBk)|=&>h>;(+XL6o zPSgcy*8UtzJYs|gz;Fe9xb4=vKLHRqSU2<>xXUgFIll`lmfz|hTAb9C9U7}!y-$iT zRVjulH1i-hdQC^Lo5ZGv87GpuH%VNv(c!Q1`!fKM`<1P8hfI5*G>nsFPZ8bF^9F@6 zxRJv2^VCNE|DRQEjveV9J5Ug&O1a^h`KU>#h@$S)mXv*vJZ}zZVIuu{ufz4}tp3@g zFiV#6%o@u_{hi5>rfX zJ$r)L653BBH1~C7w&wpVXDvDUx~iT}LcwJO2|wxk5%nX>Br=llN_Ecvx(7DK|1|TLb>~NnzT6$v&kHt0&hJQ?qs~%T?!a;dJwGjs^WaOrxZl&xlFR~( z`2KYB3oO4xlwKipJIfIu2r=?x;C)K%|DvbNw zI7A|s!l{%H9jBC_+iBheCzx$g({?7K>RRD$sQ9w8EP@M#T*l8;eO6W;Ny(xGxU|fK zkf!k(|KX4FQk{R|55;pR)IbWHiabV6X+_}D!f6(lCUP8eE=;tObK+pRtnA0)t}G&e z`h6?QJhXsm;?RmqGaCYz#&#TA&OmfBu(?}fe-I!dd_?YNDl1)c#!q`6WJBR}a%+;9 zuB=k2gLp>8tRzz&Bx9OX8JbyDrB++lJX&&4(5~|rT9Z^A6yM;V@&Xe)sU{3lmf$04 zW*1oW*n+`Ib{HdB0w|b}ilkM9gy7#!FXWwf#*#aHV)rjX1#dB<)nV%Shz>2u{EXvY zQt8SGNXnz1G6umV?0` zEr(aKZaw2*z;zpiKa(fPT_1`a`K7P7V@u@w@88Fhr2k(K@hrGE=lu69RD%mT^OG%G zpZouxH!c>IyQ#KQSjtk(Dy)8~`|W6*o;SRu`KRm0+U50RE|q@du{ZX!*H1i_!JoaH z)z%!iwmLtYQf+JH`>(1jb$-W7^%R)mKLAe#7M~BmZ68cfURZr_kjqDGJvd4M9Xy!w zRG2J5k6(n7C1~j-+al?Q8VKk|lb`)Q`3?&d7S8GHpbBPi3}hhp>q8=IJny82UYOsV z&M!~}vuc@9I;mNwO|wgnKGv>3(>V)uC!Mm-irU;5d!mCb4WNT5_|`}h8x~FnRKaYc z456^No>+N?gP8&h@l{h2c!R9_lSSAnOh2AQtr@N7kYEeW3KQyjYRQa({Wc@}V-H5K z!Gj0VgfGm(0y4^3PrLxz{JSWJGtK$PHQED=fZ*yTu65#WI)bVZm71zFxD#g-l`l_ptcsPuSz&T5>9%6a(vo-K+l0R-wPL*nS_kevi!b&Pm=TV%WEEhQXG@~r|o~m?lI;`mbN{p$*ugN@@EABK=N$W1$ zJ^DVQ{)`4NWkOtqDAiElV^)0S1cFZGjz3T|>APpkK;-Xsx5fssR$@)C;9$w+_&UvY zaBLRhQi7<^x@w#iyDa0{-%!lVuj<#uVLp&_$x$ zm=oNq=4GGxv^n{IN>C70p;G-H8IPN(B{xDXum?-szjkL{Ys>#A>EO$hB96YcLV7Y0 z;gi3+{H!rd$qF-HBb4LoJ8?&xt0_87a|vi(Zi?S8gc1t#>kQ-fK*>8!6opZyXFIU( zxQg+sq>0i{Wj(M|>w(L4T&^I}Ez1LTj1Kpx^M-X!uckR0O@?Y3O*BX^KjD9g)&pwJ z+>CeIdL}rW*$mxXp`M#tSc7|Za|#vKbKLvn$j-F!vL|OF$lB7)`W~mjUEYD|a} z&>G~~k&nI=C2KHCsVkVcId(-g%}NabMKwc0p4A|lFUh}(*Wfd(Zg2wR)zkcw(5&tL z-`#jtwTGp;qTV`>h<|ep73L4mQZu)D7PLKO4QbvJxzw?->ABz2B&D3fb0v{&f4rF& z@-f!VnWx$lZwW0WoZ92+&XBzCi|5Y~&CTaZ%S$6oTya8-*eV-fku6<uep;{=3T91~LiWefu{%JXf+P?ZRiJX6>)abU}9P!MT$}TL(S4b3gq}Q|WaGH5r#&Ja46Y3T2mVHkvtPhuPtGX&LFBX>L z2XJ)r99_(X>-3|kENA(%PmSp25_xTHZmxQtvq*(em4TjtV*+ZspP z`_fet(gFv+Sd+4uBu&v0;nmKRjx{m>#qUBwghyAcP^Q)+kX}ax-~^3R2LBb8%AvZRFDyWx{2kBglyH;Gq+yt%ZaT{ z-bw1GYro4o63D>=SP#f4K35Llo%{ySB^yhiVQVtS=ld!5Sf{3l+4&YZ;pdY4{vVa! z0zCWrF9pV`^VUO#gc+%~n7=ww2_GoA=m!+?xB)VRcGxVw!(nSW>~GJqTV&&3{1)0o z@F&>*fYInb0K)5#?9(LO7mnuwDDaQpsqjv4)6Q-OaN z%Jupx<@I>fcdgPyOmHgF0-tY4=Qq+ZD82+RQs5Sc)-d!pt)f0MNH#Sv|D7JptkZeE zFVH{vNaJsnwP7R<)@q5*6M_$MM{&$$Fo(rW=VH=eveuz9w16xkaKZ(z{2It?pvcY{Uq!?uKKG4Az|`&hb-sdlfVO()rRMwK z?6*EbToQPShYgUR_PDYl4?uCCb`)(xnrSD6e1Zrpm@#H_#C+~uk)ojfKFO-ZWc5e z;+x;bcL=9A>g9Thxeu`DA>UENMgY|mbI7ppr9I9qp;xDN-|Zz9bxWM^Oj}sc#n7T}zyCU#J#@E%g^npF zIs5oKgs0NGCZh(Nm9d8)wPyfR*pk$|7+b&xwy(5JOjrY=FD5mYuMm=22M?ENk|{~U zvxaV=u!ap95X9&@Lhw6}o5A>O-@6(hg82)lg((i$E&PTy7ymiY~+Az!eLI9;g{VE-0MVQJevjVv|X} zfT~mBB-yvp>6h`K4N22Z=>J?_?Q8BZnW+04)hYz_=TRO#}q#d0aT@1W$?z%;_vr zuvRZ$t*Sc3?>VG`Y4o`q`O{rf=Qd+rYRj3g&hNs=~eNh0&!oG*6+*(L3Y9EohqV=ancY^ToiiJUo1|D4f1|B8e zT&d*>jeCgCD2svQ_)t~Jo-jOBXC0fMA*pe>U#LdghkQx-XkBy2Yoe3c0F<56*8b4F z?r%6*sm1QhAr{r^=^hvYB2yEBLCo({V3yr1nldUE?GtsAWE!IY6I^)uq_j(^ua4U| zEOZ%0jp#h?qyUzMxx0XFpoeX4Kmuk~IdXSKx~=-mJ0`7{XgX`*mv3&@i#7AqRV#9T zs0-{#dg^>ii@xPdwzAS_aNu1{Ulz)sAR?SpaFv~M!k8(JwD5u~6}!K1r*z32&-T>( z9vnwC2T$a~ja7y?6fWqjjhfqIS*6uId|53YfhSw4F{Al((swTNVN>YsT7e6)Oi}a6 zW~)RF2!J>Z|kuLBb{fpApCdJw@xUsP|=W>L72f;8ohb)VKT&>Ys zN4f(!^BL>sMaf+oe2`I-V1{@|5H~b#?b-=t;X89o)+3?6x$tb))Z7tgIr}vq7CbJI zXdIXpt@e}y?2`y7gYxjVY|9PF#dODS*0}1!Wm!;zz|p?+eqX(&;>;7i*c91iFB6AD zHq1bAb_vFG&_vs91Nqy?w=RcOiN))<#;iW|UF~?^!4u&``AdM?q3dxlC{p01P|#eq zExK-ePRE8`mT_ns(5)b2N3L0OC?LV_M^cR2{7S|d4uj3Z&TpxeXq`^k(L!n13yKr^Q zAs}+>m4dIe(ntNfGBT zo%B9AOhd4Yw6}WX7-S)F%_y~YO#;lUZ#)V)nw~~%Lef>;2lYPRy3#DW0izBu1Txa$ zGc=oau;tF^Msks>d)cf93D!MhexB~_iVlO~50etHPJ5`56&ypgQTPpwX=uo&$)jU1nD|9qv?~9UB zFA}8K2DY-=o;PtH?YZ#&|0KnidaB!Sy2TXxCb`+kTulgfd;DS@)n9)4`gnVNx?4Ss zeXF*@HW;f|q%9watX40>P`mOHnT3BaFDz~4-~?JV$dku;%*tT;7AdcI`a`&A(KneT zx4tG-llsi;Q^5sIGfAvpBf;&3B^6TBGc>vs-1vqtniX?!=#=^rFs?(dejx*4{Jaw9 zP1b+UFSuXkvshu6oOnS!@KT+ZG*a4I8%& z*S?}Y|9;#Fo&Nm(oAWpA<^J{fI_{00hNhB&v#hMZPx-YfzW-K$QRWLo8Xg@V#!Viw zQ}B#}jN0)O$T#$v)$47Hch)M|3IGLdD?J`xbYNn5V&JH5wu%Zb! z5o6k9ETj6Y$^iDXNe(DX3uWTsWD&iQ9|=t(JONJ6Vd+t(qx*l~x}?Z(j2#aUzYm)Y zw?z5L0q_r{opl#*60jhJLqe7~UY+MhFnoc;1K8+~d}rMTCSCWb#;QhAJVPjG2%RGM z9q9n3!?tKmi<659F=BDM-~e;(Ih$<~5gjQZhohO-H@4rXjF~Yav&3BUu+- zUX+1(bia60NfTCH7X}IiP07hFBehf@h~NPo>}Cj8Y}phX0_RxvZi%e&N|bzoK^z0(%!UM%wdj`OT3Wpwv}B62K(E% zo;|OiJd?858oOmCNp=mymo~@2_ntN3C;}c^V#D2tQ$r>ARO91Qc1Wh-6{`{{)bZ z-4@gM*V&$kGOc@nOxU&=t01v2xeAHD8*pL1sic)1>Io5kwravdijWUIs_sE?QW0UW#Rw&n*%$B&lgL2vk zke#%RW^u;wkYVFlmn`5P^O&wjdw3ts^*`ltyPxtSs{xShHh})=d#5VC~(-tP}3c!l_x%{px227P^k3TfTESPXeD{&=6)C9X*2{v(4=RwAXY&hk9%< z=p472L+nkeVd+=&ZGTD{R3w@ps3x)O*j@~(lY%QGY&hA^v_eesHk-oaNu$o*2wY{x zyqQ;fF-PM;$Ux#9M`YgC2M!1>rGC(Ql(C|-5i$&E#}G%jJSG{IdK;BotVoq;8U-38 zUvw8{*bqA=6+eG-K-zlHzos=;`=X|Bp~H6w&I3mRi`2 zcjuE@0Rmlx<0V_re*8^%IO@Qp1J0(Wv|R~~XqrI1Pe;oLsxD3}?ovsXIt@toCEF{B zkV6CvEgB=4+#bi}lH?dA;Zc{98%N$ropaV@ZfXP_GHIDi3RP@z+v9U?l&B?YB6!)! zKm*QjuYuN652=T2eO~ruC2PK!JQ79J(y!G!iw747v^LPFFIOuy+A!unIJgWS6!8gu zI0&=$0iX!n&4S`~R+4edBci-btM-|gXW`U(Qw%;`J|qDZ?L)UUVp$J#V=#r;qajgw zh)Doh$AfgtUebjyC_oy!jOH8O3q9>CSL4Y#7xH3QYM24LtL+rotzl2QZ6o>^y=ttM zh6@Yv?S&LU9pN5xrJ>L7bi zF4g8uN*0*xg}M${jQ*+r-@ZTIl{K{bN}Uh5MbP%nb>eW@YjY7U8a=Q~W7oudf-UKf zd{3jY=FlIUQ56eLh`TDI7Yn>`Mo4)SND=cJ(wM;%zfwUi8Zcx%uP(rEgi0 zD-+?ifaxuzuRwhBDAWRm9S1=R?#@eX%mvk*NlmtO?%gW~hem%muSU<#r1zjf#wWj7 zNJtz#t~jW) z?sd?L2(2$GGE90HDfydV7dv7g1b5~dxi7(Sm=6&1*?yKV{C6Lpd>{!Mg!cp;mqxOU z7BZBAhdPbc+I)FFeAA6~O=(uWjwls2z1~&*g_~cZAsbt)NWx!c;?(H2bkSZU?+M$; zS~4{#SYo<%&*ko^!Fj*~M{5c!8iyU#1m{_h(%59N%``CCS#yIz)NG!4B)GGZO24)P zU=Rmq=OO9#OtVNSXLcmBO;=2)-j;KJ^sXJVlRVR!QoMu{fBts6dXdYF$!u?=Vhnko zG2O+b2j;E$Srr+0SX&$X{_6YV`EfovpM;+=(MwSlmN9+NHCQVPs#YdmKC|>SkEKKH zx@?@QF0TS~RJDm}K(5$(}baFR|kyc8iaPM(W>23?GY}^A)I7&Nk`TLt{@wWlC6!Sw@V_uIUh#s-c84 zXt-*Cxc1UZ#?&mUgj(yy%(tF3Uv$$%FSnT0EX~}vUTaLgT>`V?Y*IwRSbPeVrH(e$ zfg!-ZCrjjJ*|8wp?y=|sb(<~#D;?3!WU(5Y7)0$0FJFs?buxTK1Y$OBUkG&rp+TR8{kIty^s_i^cSs7P5da9zPtax>v z<#>aHx~wG%e`gbyNP+hQidLW#l{J9C*T|6_p|Y7CwmbDfc`3L93B>qSQHMNP$Vx~p zA%H$h2Z)C>35w$a4N5P0u}lZ{X>^!uC1z@%2Px%rB7F2ma753MVaHZ#JCf54)1a>_ z%ds3VfMy2PBKQ2Qaus7nNg-I*_Tjgv)rhfeYc*GK;Idd%s?e zEAq)I-d$g3?-~IcKf-no(vpa8hTir1aHA=6fCdu|Ok~zRK*uP=R^TE<=i_$%c9FHV zOpdp&hrQ97vo>*A;JQPEJ}F z$A39Xa;ESR2ci7v)O%@2jYn{VLxwBu5Wy}t!|-&IR^1GzNJ}Au1FWGXSoAt<=X63k z0oBvpSkHJf&L-=!Oykhez^2gp*9>!%3M9Aax^!pC5&i&1zx{B(wFE_sH6A2%FR-((yDLEm`rim^kvWrl+C@C-^Y71( z*B7Zvsv|CLVLN1)jUaL~rSq3>F6YxxY|;fnRNRBzW@T)tbsj@$%A^*y?EB>7{Y^zn zEL{He42}r%Gkj?2r@yNI2y6 zAC+JDOa9HPe^0#-OUA*OwZ?nwk|}*N=ppF+i<~m38^`l`1TDmxBrtMj(c~h}ukJc5 zp~jw}9gS@~2YsbuhCv<)nbA?l;5QDUCl;r0453+K-z1dj_@1m`RcEsehayWTcD60M zhVJ^&pwEoY6y&9}3O>-3%hWWT>gv}xCCu8G>5IVFu+di(;9~b>m~P&dxA}e{;O3qg z$sQC@5cfs@D#b7c11Tn5jaiW)a|flAmJnaRg|!JoP$DKy2e*_ymK^qqqU2;e9Kg#+ z!}A4y7WV6jfZL{srHZf=W<}+b+ZD05U^exx&DoFHoq7ec4)WHpL$z|~@b`P&T9Z_% z4ZG)RQ4Zih;&EMW>Ms zEGBH@Esgq8{71vjAO;`1InV-xNxCK23QD%pK~F8`5}CZUwY$}_Vj+jx17=Hd=yU=B zfdGMk!9shK)IBZN+1~1DYSc9>S65@RnvDYOa%!c#N-8Gsm*cXT3@RCdH_NeoI|?qr zazzDsxwYi7nvI+FZCyzOIKW}P5jiVY^!_r`C2~-K&ecz7?{0nP5mmK@sU}I_knjy+ z0m3dew}Kz!e$@F55wGNdcX+hpKy=M*aWM;rphnePi@cp*&kB+p*NkKWP&zOq*9m5P8qR+`KSA>zNQXR3Q2*OY zj<=fu9W;v7PvGdvqJY6`D^dgD{fNcY5wY{Xnt@@m4ZNJjiZXI+!#x zT4)uE@C?b6De3nw6S#Az%tu?Yse*pi-XF=yVS3k7EwigW#+Y0A!I)_iLA_XgZf7{^ zB~k6)xHOl+yuHMpLVtKrk2fvV%uamJO2t@dz0z+607m|7tB>Ap*Ta77jV~BN11wCJ zEvq9XGJ&e@J^x;B>pY|fX_Ar-I}-q(>9`B|E0I(rSo4(A?&l2JoSoC^Ru8WfzRX>V zJg*z=1Z7hG`m$3`_)S{Wq*)rs1K4~-n%?3Bqd&SGJ_Uaa4ir`Y8@Ha zWK^V))%Hx7l8Rf=cU_64o#2`8PFC#XFd0Jj&Ir)>@PySq3$)ae2r212jS z!#b{&LSEFZ@Pu)6m)t`)hx{qoe?!Il@NRh2#h(xf*> z>hJ(D!pmip=W!o#KZFu%zKps3;K`>5Z`iR4RN`y2G!k@d8uJj2jm=Dgs>Kv>ag|AF z;pljusr_SjFU7QNr1@W+50-I^=EHnTE{o&tz2bPhg4U^E#)v_?o!$qKCYP*Xy@xOq z>B?8;_$J>WhAl?qA?};qJoYr*ctgpl8|1lGnZ6FZ8-^YtxdgHAb*S0jR!uO+5l5Bz;>^wW;!fEe^}DeN}JLD*&9iwl*2){{)Bpr8?YayE#m zl3<>A0sL1tO1Xg1tf8LHJeYwa4`8N0sb;Ogq851b>U3~E>cfDx5fNhUPdkGB!-mpw z4M&u++$>b`2KUJ=;bq5@=miAJ;^MYi%&`LKwLNPzv(EGweT=C6@=BqONohPObx-dt zE8UQ6*kPR%HP|R_mF^==h3+Y-) z>+ycVvUtLS4=`AueY14GRW!W$d}xjnoIiO!9z3%a?FQk#x+aZzy~3He;7mNr4`NIE zg0n8((}mG^jz5gncxFo9rV~;NiKKRy5#}7#OT>#_ER&nf&j&w+nza<(prp9o=LfoI zwOTX@N84d?SgkQ)?@5Qm3~Ox=V%&Q#s30eq#W~tiBYDc*qEXuR&&J(iJv-|FdM>>8 zE>>dW4CZ!sEK;&K;$v3ky@`b%Yd8y|{>V}pJ}+rhi_^y!Z<@)A+T5&joH^c{>%2ng zzu^?)$onP9ymphfO%?6+>NUdjdMpZ0JfH%{tedj)XfaKwI#bQH)FMk|jU@&%KTsXS z;RN`0ddJVpLVM={yVt68VJAA)6QUNl^!dw!yV>6?|K80}vaoTrzK)bL1}*}9>>PBg zMD2K^(}kLhxHh-W?7tV|VHnu=L2E9l$oXt~0s}dm95RwVL+zL^S>A$pWl4 zB}neCJbm?@J^JyA8Z)DEyA`vkWx92HOX$L+<5~Z;j@kKed@Z3zZ`tstNEK zW-@gj^Iwm&n7pLyUv$bSKS!l!`NRA!3BQKOQtpx%(#cVVPgCD-`SF*4KJWTLnWgpItr8&wMHMKTl#}YOuHPqMGE!9SYR-=#z`Ai0tRF1>I*`n)M=UGSNc|$($ zR?lOqLcI6CuTx68rjg~|tW`U@C-b|m-RFC17Dvl}UexgbXY%OGG}WgpN%~jM@hQN3 z&i+&PQY6&Pjq$J_D;$NH%=^+9`9>fR@CfA>kJjDFT~xA&)4eK;jn{AN!p49`bo{BY z0nmuMGcvI;uzn4nZ7eYBZ0B{&F-maJ)S{zjgJ$E)IyEAcH8Pi`O<)-@@p~1U-i6!O z&+SNf1x!lR2Wmu~49$6R7ObF`nN6PTgZwM4=TkXZ=?cS4jh$p&lKFkFt8Qw{HQtKu zWKo>pE5x34S>4`>$FFjAAB0bIOVTqaB?+QgPK61u3Shush7^^-L88T>QxAk9N5zot zcnUin&ZGOjs4jJ*5;89!j_lM?lEdOK6(kZ)UNA@!a}Gt1{#Gfof%RgYR7}js%%&68 zz86F=J*2`ae)nW(Qifw0cN?PAYOuT^7;f1_mOEEu%N|xq*IQ^sl0gF>|q!8nL zfuhEp?{g%#XLvn@lFb%Ayh761+xO(6vek}*M3*~?>t8Z<)=P-T^J_(o9PZl0cWz4{ zbrt=?K-aR{RR!Qk;|sigG)A|CI=F(=(>>&ba^igHey8XIhzDf7BzgL%=mwaLvfK1svtN1J2fxJrEKhK` z?28;PXnsESzr~_Ij9d#38;hEc0i)FIeh7k!DyE{Xx=r~L1}w#Ygk_!h-v*r zx9Gfe)1B~Ixv8f}?3=0E`rD*=yY-%X<$d2aoGBz#Zc8c3bgalm%RbzBSs_iaX^BG> zyizG{c%|ELw};$>1AY@$m0?{49RZ?f^OGQF4?!6%SE<$n=E4)*pxqL zef~1q@euURMI8WePN_)V{I=oP8{v7ssI|Z=Qo(gE1BB zjG{>>?2!DlWon)A^sw2R>oSkS62fvf=e)X(XZytK%Q8g91w<)RL|WV!h^DdotX1k^ z^IhA~zzBRjkC(WB{XJf<0!A9PsB$;htF_H?lT3NoS1(+j8Q>@^XW}<3mf2mFvCavn zI}0hTmf+X#o*w6;y{~ujfe+qho7Qx$bgfZg>aj*-cC~az+)_Sx^?WjnlI&5*a_A&p z$d8NJO{59l;8M*45sH(IM|;RWe9sUnH$Z$Hp7J`Z*tC#AgJSZQG!f};s!j8Tw6yfS zyZddih2~J$8C~m{f~N;@%|+0s*wM=4HuMx+&4vrG7w+;=rs>ts><;_k{o{VUYzFkV z(xsS$SZZ4K-hKe5l{zz@S9$+S!P`O|J)hAor78nfxHqh2i9LV1bQ&LnACC8X0 z!51WnAeFojnu!b(AfOVrB+y_`QizP_XEg)cVz)>JD$_)P5HoLA)gOlYnh}bkh4Y!2 z7tijXi!2c>gCFC69{}rpP0v#pEqS1gb{>^7(-!FvKa8u@%M#|}?5b&+n(N7UQmJfPWR#=s!RX4uLT7z% zjZgo|jNbq(6pMrKoXD0P$V-#QrGaXdx_Qi}N$0+oolzGd>kg z8Dl}^2%GvC-L5Sa5~n(X2UeqnO)GaaFv8YmB|V0%bPGqA6-J2Vn6e65)FO!oMx7J^ zAN{Z1PP@PrO~p#M-8@vS)in#?=_XoUVW>{QG?FzfBkD``gMM#3(W1k)ZBOi$dP)_r zY0MRv?>w$~`oo2eP{bxY;-m(j;(X?NMoheLmz)spb%x9*ENdk%`W!uf#}Iw?|3JbY z$t|#VaS&5Iz{Z-V)s5tg6X<{i;Ot!{9aM0D9KFm~4X*;Q)R&XDqaOl3dbwEpcL?6= z%REi1kcOtymV#BpSV|DZy1>D{3vX1EHT=rz$@PYxJPHycW=9mq!h9TCznJguQ*40< zW-coZpC$-rSn0}133u?(zB+p*kB{UA3KX+D$o_f;VH4Yu^PJC$r0EbNCQE_yu%ZfJ zV7p>kZZ+q%zH!YbV;R)MX$0Nh$sX_5C+U)XgX1HS&QJ&ocspZj8y&)3 zrpj|F^`DZgA9hhs6`2O2Tq&Q;&t4o>#^n4+xh1mZ|LWaxyo1nXsLJnh5(xP$MZ3fo zM}DT)!m6bcFM`JBhr!h#;XaiBi}f!i!Q%2v`@<&Xan-tm_YH3cYWWb2IpX(V%fVEK zu5jSc6yuY|`tX&=Mte>o9;Xf@8k!1GP5>49Mmh-SjO|7jt)KPtB;$;5o4i+VG`Ejb znHu|;P4k@_W39d!)E{}x_b0BnLs~jS+tGO&PKQ8ebYm6p#KZV=6h%nFDQl|8N{v^% zKvZ#r(*a*zsh=W7GXC9LXg=Wtao8*QN>gD5xf%^+i~0J9O>8q^meKY0R1b3#HsZ+Ku)NvqqSKIRS2xR*SbcLpq;@@(X<5@TW7AEuU| zo^bG(7d!PSL((OWVAGdGS8b7>zA+U==RLL@^R*g~VPG+fcxdrhbzbb_II&2mpcpn} zPUjN4PL^R-aT<$e{G&TH9L?R_`VwV>kD}}d+-)yKz{1Kk+FZr|@#J8BICrfe9yWQo zT+etc$L^@o=ZUoCjxa9K(3RZ+Cb>>==3CdvF&!eXNZ8pQZKiKZS94Li?6lrz43jbt zW2qQt#y4gZ;(+3>xzSsmp zUkYlJt;wylxyCJFT}Xkn4bStS^yJ<0?pfDo2arPcLwzHR@EqtX!(-o(e#qDQ@HnR6 z&V87EJ`0{omX{Ra-Wlw!B$*BAJeQJnQrlTp97so(5R7ASAZ-jV2cDw@ z`i0<-p?TLe&w&(v7o+&g(*gVynu{+BwbM^Vai`BGd=3sRtai0){?Lf#fkc(`Q@jx5 z8qFC(y+3|B@m}Y&fdnFPP%k4#!g0LIGBu%ix#qcW3OuHB0g93(*H_Ndb;si7!e3#%8-S-GZ>%}Hx3%kh5k`gXmX=9AI7lr-7Rw%m^!8OuE( zEM!`WFd5&pu!lbhL90nP<6yn}=rMt|s12Ruw;v9WRL~!fO6(b&_2#u9R`@99lW#Zc z$7Mw2M5Nybqv!*$eYTNMI6BGwh7HU_G$roAylTLQI6QD@ET`&`9DY)U_|q2&V(AEx zu?3y|;Yz?rhAN}@{8NeAwHiL{+|I7IWbCZKVjc7%;7x{#i-ZtJkSO#;KUrGsTZLYw zlFI(A=(1n}{pvawS=x1Zd1Q zu-@OEm6&{-6=~;I5^vkt$BHg?YL-quB5{aa>8@dgOEOc7lDJ|$ei~e8fn?i~p!H*g zmcXcqhjYJ|!N$<;I8A17Psv!_`37YZs(z1}c(mxJtk-q8PjdJH9jk3Q@@7#YSht$g zs6a43!ZZ#RP&rnR5@=Yj6S7&_i0KJ#39?`G?YU92ZjYq4f&7UKF2zs&l)f3Uo;Fl} zI3us=@|xgyjOKn-+R4i|WSfr)0^G=|kEk~!QNXxoc`E%ajyolh=M!Shn@!3_5NZjr zx`nZ+fwHZVR=z6I_^z+zsFalc>GS!h)RYg8%!VMT-eLI`gw*i*V|Yhm>?lD*U@&Id zT_5rJ!L6iqMdKD#pOF}L-L6WBR&gi`$(aOK-{}xvCJZ1x#4$b4Nb&1n>dGtuS{6>g zX&2ofCE_v1UI|J-8CXw1$NKp*{_4&3ytfsD3Sq1(ly5TMRStNl*N|5mt=&9=$}w~E z-AxW=S6r)T9dMYE2OBqn=san1=^)#hKi^TtTU75bVMw8yjay(kos?b5f)eQX`OXm2 z-kuKp4iEQKjLoBLf?u_)Ekt;`l6PLGA4H-RAL_kP6Gqc#~aVuhR= zQz+o!7|YY(ZjPxuI23UU9CQMSF#tMvwMUGCUdQ6#Vq>6MJ?89cm?+783^;Z%%2V#|-l80ewgRc9sGVfnH zKQDbbfc&#}A&aTs?U?*4!VhZYqe%9p+kRc8{AQLVy#gtbPyC5cWR|sF77rhv`U+yP zWu+P9V_n*y=hIl3^PM&GAYLhwcBG32mMOEOwJGy>S1G?d%;xt+n0TEEF^{Mxg2AEH z=Ps4FnSF6wWK-7aSYo>rVDMx;Dixd-Cl$huLP=D1gL-PHd^AbTU$=*D z=MLh&QE|^Pqt3>+%e48=>uEn{s2qI0Zj!gND|+kY*hlf>v=H|rUQZqii7=KN>Ynyu z$7CcT+jdze5$(-!UeMrFY7!CGGux)Vt;;;l*6|`jCtqCysUlLb)_hf zy}b+>G)nl7*0;olosXEE&^WaIqGEUL&05d)<+8`*d_8?rw(G1+qTr#B&cLIM(BbsL zQBO<2;glbiJAekoDCdfuFYHu$A^cNe~-3j6jlO1;M zAfUa;&kAf0ML^PfWa4W1vL)}EK6(ndI*Qph%PMC^4?)!}>e=>U-~}<$`Q1!)BNQ&4 z_iWtf%9Boc)7G>dOUA#bK2F@;Lpke2*y~447>t*^ahi^qlbp+GnaId!Q6?Hs)bYBa zpLH_Sl4JR2UjB}oBVhyfzslAq+ zXmCK5H}#}-1ZCJ=R+ZOU>W4lERb08`Qy+qQV`SSk3-$8$cPu>-k-A7R?yr9zNN=J( z`gWqBin_n)s!C}xMKft`TlTSl_^4jkd@rUinn1ztJBr8caz3nNW9j5qJW>HWgqkUe zAP`db8gSu$-lTgcI^6zZl;nf1tGbV2kX%n{@E5vc?8u1n`O1^x_lm?<$P`+s0kIw^ z$QB)P5vs%%REC8lYe{z0BMce~818G`G;L{iH39m$$oYC3ee@K~!|I@AfINBB9Q&fi zOVg=(OM#HAd_LF15PQ+)XPfZLesz53$O3?gLuFS8@zjL>f(XxZ-xd#Av;v45-|kVL0*|yL+{} zaL%2BBg0q|SDlMH4!};-gCAd5`^DkL#~ zu+qTfn2zAIagr%mxrfPfWZ#FBGQ0k=kMJ2O2gjnk|Ii}}x;g+^C6;sYn9j69KcX6U z8i>z~%Y&0W)t&H1a)qB>U_`f?xXN;(nrf_c$FJVrZ&ybRdaoi%M|IvYoOgoN^XaE} z*LfqmCd!yeB-@6@$89TU3~6V+PKVr}k@FVJHB;>Nn`?@)Z7{d9pD6qZMh!1%tY1OD z6>i?0NtTj%)$=v4Y{sT{z)|;HkEW&=Cu~R#6TqyaNmCkIL^?OOSy5`cWFbtw3)auQ zziuq|{_|1uAjX=I>Ej+F>zJwO(>LCa?{7n&>^T~8ayN8NBP|ThEd9*=Hum+;9?iCU ze!5-u7VztDFH1?)_=G91|J}AikTMxIBSazi+sZ^jWt(g<_^RWrT<8^9VVlt@5TyCl znqdOHOruA11r!g&~4hy$Wr|0zyq*H`WD(>$0RtF+a(|PR!B`ICo?w#CUZJ ztIC*=zkpvgJ-@H@s?N@3e}23?-+N#1CQvEav$kGy&#AC{rFo=s!h0ReuphHN`IB(f zlg!!k;4b!Y&@E|41fJnxMo%lM-sca4^>&wC&`)@A-gn=uIJYWYm)9}FF}qza8 z`1z~b)v}p1X8IP28Nr3$njiD(uAyb_J7b@!On=Lt*mv#qJmH7Qg)M>R9O3>ah|v1K zDvRr>%Uqkzdh*4}pkn)n2V#}3e?BEPmGd%a3vmmGWn6GAv8Is|%~PJb&dm5~Y5Uit zG&@gPh!xEF*JPV)W2LB{;~K*%@~f7|nx9M1e>~-IDlK%7Cr<2U7Ed;h>&C~4O5W4E z`&l(lpgT)BuI}vCtNCo4sGI=%rq5h1C4UD6%oY14VATr&VZXr<=*jFFxQn~n&2kYA zLX$34cg=bGz+)9%k#N;n+JV2e7$+(GQt#gUJ>O$4=hA{%c?+dj>+f8>8PqptG49vP zagTQAbmIH`iP410|KHthIqX>bk$?M}imG0yPEx!YiCu*RvMW_z{O+lk;z&_SBmbbl z*S0SwGf=@)=Jdt2YU4Cweoiwy|L9oMI__-;GLg5z|_%~osb-Ef8C z^C%ZIm+f=ECdsq?=;7^pIiHRf5Y?y$vzFC}f@XPGBi!_4&sK9f9`?KKrWXTV!9>aw zBt~Sx160-9emX3NFR1eo^6fU&o4rSH-Zz5f@Bz+b3CWK&#r_d@{30mqw(TRYl&hmW zSQdo>RH8_Bu)rS==@k&{=8Y;*gzDq@SU|dX)0ks#o9cOtuM{cxY3U>xwQ%L<=9`$V zu~}~UDz$WQb4RK0k*sF{R36?!+Y01hPY-e-Iu^FRprpjLLoulwrU)3J1jWH#9su{@ zamZdm46#cNYEZyumbY>6m~b`x0{iR2T|bouhhos<@UVm7D@nZwOEx>jfSa^=tz0g{ z;$t<}AZ?lTVdLBDSo;sH5TF2S}D z&{6xDA5x@hW!E<}yorZaA-MG#q4!WVGiS%}RuFmWOA#NO;#DiXgIYljYZ>SD_5dkt z67ez)mZAr7zZDN)9c#WMgRImvv>NqFsaVJaE=&L`r%GLN$Mv`vmcfc@JTiaz&WFkj zSw?mOwh3;FCSigqT;^NujbwvcsfbU;wo;hBC+oP@skLM-ky=NKXD1Z2&s6+=V<}%$ zSNb^9J)Ju$mT&_R)&mD0mv)LH+98bn!F|1toQ&UJaDfZ0xK!X(%a~6YfzX~2;vJV9 z!$UP|68hve5HV%PfJmefNcqDKcuD%6u_g!Q2vwsPrYKf_mNX(vzzIg016Keu4)cLV#5C#n`HO6yfi2gF$#^WNKQ*}@)xlM&@HSi9v(4eW zp)GUP?d^KCm>a=$%+qJG5qT*R7UB+$`E4~y7(pU@R3a_p7ww*aG%5Bwk3CzI#*Ad0 zc}1fli{fmd8Q~#VRD)QKU9y%Ys+uB3Ovyu3VSRa(4mhJF-r{tkL2T_#T?uNR&1N{H z@+O1ABQW6aNbT`uDs7O2rAUiX$RfH*S6aU%j3&cA8U&YT@eY2{*kq4%?c{%h!0kykpSJTeLXYd?9ef+o`_q$DPgV=RES0J|( zVBvvpvh`Z4-IY#b;u{&L>3i4y@-e-&si@>vf!$0=6Mb(kph@&I=c*kY8YHuGuOPqT zrp*m9TmH=07^mwW2LM&Y!=>|XY{s>DU-^{XZ%;=i7Km|G1-f-Ylzw2tJ#R&H2&xm8 z&lR@WS{q^hyj9s_&W(MsPQ%@9k?18P*(_7cq3}V65X$?yeW`O{pQ5Z`kVYC5g_yvl zKwl%achaNIB2rmq7!>zhB^B_;V0y41%de2_&XOqSBt8^kVfq2Ydr^VgqCmEiYj@}* zo5*_R%xxCjy%F`j*x*1q}OR%5H4IxSd`D~fE3AEe1gUAg&JcoOjs0dpp?TO z@erB$cS3y^i>L4QLWA}Qk$$;NU_n=QK*8{Rn81eM_c7(~$5}uXD%hYJrAwP+!OX!*JvU$+H zMi15zx#N4$?KCCuN7GkT@;=n|AUY4fT1Sk{1>^yUlFEVw)VVS^Y3sh8Q)m5NAZ+%! z26j5#ZJ1sH%S8}x!H34M*xZH={Af6k?Y8=FtF*}Jo2%vAXp@UJ0BlzqoQg5x*Eyei z+NgKvoijNIVI(^CJFeUF$N0E=ARb+IOHAIunDNjqCWpymYi{%0T*xcTnwU<`@d`r_ zGE`aWp}m$%++ylM&BlI(~hw{eyyE!qS1bHriFK`!RpI<2VJD*+A$;cQTSaTM2|j@bWn`m-?+2gJm+NZ-IXOp_j98C46o;C`tT{q zXQaF`@69Zyg1&h%=8nI^8|T3BSyu!kRh$#%4r2?!9d>~F=`@KX4yH7nLrXRrUNNRELuPnr ztRWBx?);`WxN@SA6qyo}jj%j-cerCyw1=xN2lbt?XFw!;@h0Z!D2RXs8k#*lpd&u{ zNd=jLZ^dm_zrgb6FnU|W@EM7-T>iKI9c?jEk-0uWsIVWXvy2l4TZ(*Zv*Xsou~m36GaRp(~jRccyYs+biPO9n00 zC3|~D2j)%ra+-_)<7704zO)j&{jhS!Rvq@}Lh8FRx7+=UXg>vL*SYq| z?^U)@1n3fTWHw2PVU6&JlPk&X=Xm`L!hVw&J|*c)4>a5=Z8mpqxo|2<<^JQ9n2L1` z2~KgiIORo$q_Wp>l%laQ%OQ_twdJg^7bN4FDdYV8QGFP9%2-h&QLFFUQ7gxmIV#_+ zTSw~Q>C71to?QzoNZr~pR*ykl*#co<4Wa|}nLcE7$oT_&3R#`I=|Z$ieBed0;1bCz z#tw~3HlkYzz4hj0WI-{#h&!%}Q%2Zi?e3dU=T)6jC3ZmftDGReM& zfjTAFNp7Y2#Eiai)hF_}f9D{I4u9Aaau(<@^sMU>WyrJ|M;|A?(WEC$3J=o1ZR8}Z zz@h6cF8qb#x6^GOF^M9!xX0pz=&0I^@r70MNAN5*yr_qypbEWvHQE)qMyqIBF$Sik z(0tXXWK?HzZ(84{xjD~j^LRk`i{oiIC-CyY!#&eA0lUQh&1@-NyTUUP7ej&0+Ddr@ zw1mQ6%yD3dhhB<%2|ezSd1y9#{7!K?Gs`i2K{OuBbF`f%|MRynB;ofM3=+wq>`}wg zRVLm4_DzvmF>9|^PM8dn|N31RlCt6DN|L#l=l-}C;7QWPB(m7uJPDI}8utjDgMT@K zbu24#C4EiiS^F$`+LLvf9dq+lQ{tSk2qwYJUZ^?{9{$yqK8Y zoAaP6T#e0Gkzq~pxDwA}(m7GQq%pKsh4muPn6Q@=HLGFeSR^j*qw?be54>O!Y}qVh ze(gl9JjC8Y$;n$kLvryNBNER&G7fX>|FE$`tpBM00ck)=J0=#=U3~0QFJ?iPyD5H4)Dbf zPyO=2;Vb{M|8)id4S)h50RKiZeSmPqukqKbaA*BvdZvATVCQ%2KSL&r7b+)06m=1m z3(D#DoX;$Fy_D|pV?sSY#UykIEs)$Ku?+|Hl9>mF#eP|qwG_| ztut{vTnA}SeZ0fyg!=?+Lbr^FQ(3}G=VY<5P_$?1aT?7$etIHMbnf7b^fGS7tPd?D z>Mevd>po2i9nmlNrxWKYK1UFkQ0_yXw~uD%g*CzMN5O#8p|YG;=Jw_=!>BT``4>`e zN^sAV$@nfLw!?5n@tuvIP@K_t;$(OuKnkW43Mg6cEixB;4d^i^Vrdg6NbR zV~9WezU+1dgobFQcea7Z${A{Wn(dA!r&q|rOm?RtLgQKFw;QE{CUcUbYnF6TUTj;f z=PA>iJ3mS4cBCdt=ZoQHHr|q!_4;>ZpL1K?*!gIoq3#Or0kyqV9mB6QBOWB{j|SP0 zi4KE81&`A*Of$h4Uu;m}7RR_qlf%I}Z+h@h2fvhE%ZXF!A_k`DGcK+{ zx^;%pB9HKi$EC`)FF47L!TdCzLqbODxUq)s2qUc`(P7wEHkyX6H<4k{=*#;Z-9L;t zk(6uFxz30z`Rd4DPx&+$okAnF!r%+db6vj1B*&s5Yz|0Tk2>lkgqcoMu@T#*tW2<- zpc3CbT$-1Z9pr?sQ0Me7oXIooT;d3_nPOwgOpl`J98;!2G(Bjk2~aV469~%O9Cs__ zZo{=O|Iic2^e+*1jb2_IsSHpJDHV;#$mOK;Mz3Q-g+MS&5+!M>qJlPgH`8_^El3W(!;a}Gh42r};h53Qm zx#o*xD_&_z)F?NKG3QOk&Z2Fs44pfm{;-mLg%MTJ;03KS!<}-p5F^9zd9(gUo_Hzl zNSMK8F4-{CXr{&TOex3p`@xne-3oV9Bj0B@gUqWcH&$kiw8mlc{v}{5VWZ3(1QZRs z&pZ4cLvHAgGI^Tco#1@Lzqc*N{TM4h$%k`BteqZ-bAh##DIK&e2bQcbj!+@V_ZL^h z^VF|BooKOECpSS+m-VQSst(WeTseFOn&K`H)28A3R|EXp#z--d^ER_=b#!gzh6AdM z`n?b*LR|4yG1RMLp=(z|xr?~Cu5FW`okWvxPE6T?-`T_hJDF}xrWW|G2so3@r~Pb< z`+eQ6BJJs4drId(=Wuul4q7~(KqEZ$ZVHQnq}pVKku4Yr7+oymW~^J6KS44KXT!vo zj~#x$&)#N>UzRk?MF{^UAE80}GX3w`*QAm3qsWr6iIbfrEp1}h~TZR;fy z57QV+Hm|Z6Y&n_GMR8r{h~;GW%j+L&I%z?rPU@4#yyv=%o#VNaQWPRumKX*RWNrx& zWQAn=RGBL{|?c-bO^3AI8wz2HK9jNCLp8(yOP#T|z zo+a;~b=d&k;Sk6|i~Fds&QC`02^zW4YZ(O`MG4=7_lOc+2tQJbOg`^q3<$@l8NrJX zUJJhifcISZp6HJMz;6KY8W$_u`J1^#11b@^AesD(X)W zszm`om-csz`#GSkM5hWE@%w0t=w+Z)AsCzlO)Dcbj$Q&RwC)f#|G!C^Zyqc_`kUjb z&A5N|_L{A~?V0yx1{jU^+h6#p&qfxE6i5w2qDev*|OV*NHlZKy?R(iC>b8YG08EA=iM1PzOo+x;8_4FGqKgT&f0?9L{ zXc4|1PsO#DZ`fmU=03zd=~fF}?vP!!XWHRD5H#uf<2hVoiJKh0W#0}S6;Ej%X<_$I zRp!qVzlgsJxxUxG> zEsE=<-H~dMms}J%YuMk+39@A#xC<}?0vm@Pli!&mr0-=Byzo_aysZTPZuU=oo>B+@ z=ho$7rI9)Jjxb`AsIMg&aIxYDls)XrTtdV zn+~^oX`_{vZA4pOg1Gp?IFRCFMM#d`L5!p-8h>9|VJeza> z)TbBX_C0Egg%0h=W9GTFwPzn)yfikZFz&Tv9z*(??M$ipG>UuJ=;7=YoQ-_2yqKU` z?VWKAR>~rEw8z%XF$;t-%A;ch8ht#WajlZ#!ua363AcCi>W(w1X>e-zqt*Ld=jWMr zTn|8v|hM#@$6aQuUq0lMRgOg8&r-?gBF<-1Q za(IpuT5{IvO=EXg+w||PSVP;;$*8-$GokuWC>?GJjs@(LiSWPf{FCu`AE)YY8BL!a zd`4Cv1Ht9AD;$sM2pe`>c(S7p3+j(Adfdf1RK@?v8Khw1$E3yn>*Tb1;>7zT&x{+= zB)jc@_a%iA7s&S8s#F{|gTN6h?s!6gPpDLeWtkQvDmLex5{vP}CjsJw@hqbv?)5x0 zNJC2%s#1+Ss^e3mxCRUw(Puadzm&9$%k~FNQArsFN2sW(sUt70hQ?rdwpjGSJqvBJ zjxNf!pT&mQVo0!kD?vg=K}AEyz{JAF!NtQTAS5CtAth6(ikyOyikgO&j-G*$>6n9s zm5p7EQ+Dop4IG?Y8oB$uoE9Ff+O+G?sY|yW(b5cXBpQn+lBskio6Fza-rYYuK0Uv@ zzP%TUrE;ZOt2dg^WJ#OVyV&`1J=$`twXMCQv#YzOx37O-P_E-c?TMj?QkP+{0mPTU zh*_T(-$Y{(Ume&UjPdDs!d1C4M=bYLXp*Z?k!L?vlQH!d%Xs6QVyRpKAp6R04c>d4 zeQx9{7=+qS^dBos7E zI~smu9-Bvyc^WvhoZ%7hG-;_ZZUJ6Ce#lTz;xG72ghdWak_v9P-bTs(XNLLy=kQZkjQ$ji$4Td)Gi zUmNlFq&0GD(yWC?t2XUAbn4>$BKNm9Rvh^EjU-W$WGPZ}T4~a&XI+pfOST-j@^IuU zP^ic)x7~5q0gP1VPv1@4t(g}&12B#NfC&Xa0ssI20000;?52no{LO4J#AIg93r-0V zM^TAf6GgpngeSghd1DsRm zl8G+edX)PcK%lVvi2r#&p)pt--p1C>-oeqy*~Qh(oj@d!DO4Jr!DO*HTpnK_6p1BL znOvb%sWn=i-e5GDEmor}##q_dIXJnvd3gEw1q6j4!Xlzjn3%YPq?B=KI0A`6V`Q+h zI6Q$!B2%aUp^OX9mr5H8=x_WV5Ew|2CPS7Sc?uLMQKmu_fP)Amijs<&hL(<=fssi+ z@hn2DFX2(F{V^fF3FnKQ{LMBp@Miivd4$Lz?VY)J%o9M5!&w>68Blu<~slgQP6rMwjnLsh*pe0 zqz+y+SfXp*D5P??^0csU}xgB zIt5?X3qF;#xTn#tFnGPe`SW&6N>h!nh}uHn|EB#yugG zHa1r!BBa`_UJU?ZLK*jjRNB~FoiL$NX=8JJ01+mXdBWIS10W_;XPN*BW!y`&gnB~i zOq&Vc!5HX5u$S{%C;-BQGVTefw6VD}gi8W|2ouV~-igb#VSO(n z-d^O-J2=*w!g!!=gXveo@#iMp+r?U#dwqTdD^JF2t1>R`dF_(;m^HA~Vb6p1RK~># z^Xk$_zP`n7WdAQM!Q(x`at$9V0Nf$K8X+RYNN|r7&}Ack1k$p)S&j%r#js3)u*D90 z9Ne+5Mg=I(u3gT`EXv2Dfi|@)7mP`I>IdEGwFJGy`1&L^pqML0$qgiQ_bcbS7^s|= zL)Yw_GeJJjIfLfB(VS~=E|1K!fW$e}Wk!n{?NHKHbJawD)YM){CF2hwok1TN7z}v% zOmsRPHVc$}6^=IydMK|_xK5w{R}VM@p?{3&@xyD>@DZTcfGzj)U0|wWtOop~zV@MtAVl9t!sh#`nw<#qQx8Q(||I349pK4n6 zaiD$k_+EsZE@m(HX5?;;P&9BN$3k1ngi%jyd_@sOy4tdgj`=Gw4`n_?28Ak6p@5v4 z3)C;>Lj79xkffffBr^O+`32pjk6U^m&k>F?yO&HKJ%GGK4|r(At!7?8G0@sJtw6BNI#w zNmjZgs}%!i5Re4n)M|aBsl%v3D9AD3)B>r%LbTFm!L@`<16$ZhSsCa;d9+mrUo%&V z!FY(lQO|6XH00{5fN1W~L=UHFs!b0PxEK$5T9xJm!#T-wEIOGM;yZpZD&~waT+%W{ zn)VPu10Bee`!E`r@TE+Jc0Yy(XAd06F$qGKl^c@`-EPO5k)|RWh7o?1BzJ_O0XJe~ z=hy|Z>L1dU~A)h=omQ6s(KRDeSk;h+uK*=2UuXrxTmv4K$r?`Y;I|H08z9IRAegvakPqkC_i_CF{r|uJ{PzN6I*up0 zY4MCJ$-2lDV2-~h^FDZDINW3enO6na-y{M9fpL*{6p3akn`;9^xeh>t31wUgrH$RC zv)uqDlyOf;rH#$?03uANC-j&!xa(On-MGSQLJAQklyOf;rH#$C03u8%OYh=0~ zTF_w7nHFIdZ&!L;>P95uwKj1(@Ggw*0_^^tyWGY)SSeQai;r(R&$Qn5_B?^^zbYnL47L8^KZg2UEa(9M DnuPx& literal 0 HcmV?d00001 diff --git a/doc/1.5.5/gug/_static/css/fonts/Roboto-Slab-Regular.woff b/doc/1.5.5/gug/_static/css/fonts/Roboto-Slab-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..f815f63f99da80ad2be69e4021023ec2981eaea0 GIT binary patch literal 86288 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 z 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

      msZ%O|+*Z+LS;;x4v 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%0AU9xwl*jMUcB+ zt@vIc<(}v5kuSe6$bvY`~h`D0iy3JA6JcMdg%p z7ZV?fwcIXkzQGvQfljSBy_~edTDG4|t~?+?P=QU>nCTXlJUQN%QP zY_Q6febHS88{5dJH8vMy;cSk2^Irtx?WL{3VXK{4Htlz6-g7_{V61RmcnSS7x4{n@# z56xxVYj;->6hTYrd+%O;i@{3f5F{a1Wo;1W=%WTRQHHO1~Dn z46~nN+F+BY=i~|-aRX}m;5(EZzhg*$%hewRLNENt(WjG3Aq+(CQ`5oo^jUttAN#ej z!mJfM5iFo-Z$O&c8Zj|+u(myy-cXe5i!8R44$2R=MbR?Vzy1E>*%|?w-AfZ3U@!%$4}9AtfyB5J^dwdhLk>t@sm6bCgOhD$sHk| zgkyU#nh$9h;XpxRBGhwK*cC0wFyLntAUPxYhLH!Fi)OAi18*XZ1sKpV;@YXD*&3^g zXaLJ*L`T%2@nz-MHx`WBxu9l1gFYGi0&FZEQ}0`|sJo31S|K%-&e%3FTJO#ltHhf& zqA9|djv>{T9$2*M^txWL9OKizgCY<91$BUMigmiaeG5q z2}39y1uiC=b~sHMf_@Wt>qZp}7}5}d6<-CME-|C#*MY%Ss)M)%){RVb`IAh<)QSfM7{)&E`c!C{{*KYZvXTqMhu#qMw z{opCWVD|VKI-7CjnZyL!7;_caB^2YW9bduF3N<5kx&csGecDKaDX+>?Ftox6Anh&G zNMalPvdEmI&7_ldgB^t4?Deq{sVig@L(7i33T+aK_STKBpw=PEE;oq@*PB9+@UU{{ ze^O=~XXzB%1qTW_R1I$1HWQbFyC6OSwt0(C+!tyfkAo=s>^?=U7ClCPA!1-Ik>fTW z0p6Ro2ur8^;@<4s=ujzc024`_GpN(KjS`a7Is7`k$0+5pNSzCVQj*j={aT&ZB&Ak^ z#UU^E{uYDZu2R|k24m2nRy%^mUcb@&UQAsrng!bgs2dWm)A3fqYo`(|-<@<9I@Qd2 zql#ooJC-&z&1-csq|I;*O&UTpqx9C~hs=?YpNH;U zIfV{HS52}d9ZMUV<_&PMq}6y0LmBdz<#KmbIL{nuFR@rk+9T$?aFtt*=+5JQ0S#J$ z<^^PgbRRtQ$peh!yW5a$cE7>h7M~LTEk65`JTJ}N=gpB!Ut_i_p02Q%zgFVY(V+W! zn099T8I+d4RR9^ot=w5nj(NjgRnS|>oz*J7G9#1W=EwIEQmPWC#WPZrgI`#hJ+p~N z%~iqKWT=R0^cP|o26A2T6Y)c+PhqqdNb(EN9B+NpwSv~^YQ72&*(=wKo z(Tiy*u4mnTZdZI?{0JJakizITaoL3?GPz4`l(bV~ijmN>E%w{KeVyBtEuT$GSyoEV zHUfT~qI(W^OMG|y7#^SUXQq1=W4USVGh#~i4vN(flY0pi_WI)s7dUnr3Kup)TH?5aE!zx z>oWK1l#Nc6{6=aLn3d<@KE-9hT@TZZ7t)cwXeH2aZ?-ZP=f*6U&fv*ImkOXVi&J;O z`nZ>`H<@%j!|b82WBnBa1H7u;^hP#NIWUkDE%4JrGw7P&s;QBp8CajL{##al2cK(9 zQ7ns_!9uH`Sa8OvQeL-qaz6?NOJHul08{apg9|~Pc|XF_>&BYkiux~10<3Lip_cmL zsRSxd9_H5w`JuSOW)#b`zdZI)CK~Xa&z8U`-l(IzQDaR9bE09t+M2`kBNMR=7lEUv z2wb_mPO7L5(G+Zd&VDUWD2Hz=hG#HDvx)$Ar&_sj?Uc+032KnVfmu91ALQpx@atz3 zKnrE?O~Ufa5JP8TFrX$t-r5#i0vQ3qu1C=PK^ zX5EwBcT&?t590cF!Ts*t7i~la4>sVPKXb??r||I~bDmw+eVViciY%sFI|R{IttHPP zr>23as1EGU6cjAwcLsSR0JjO}ljkfhhAa^H3F5%o!R`5RaiBb3QP+r2JZy`oK-Ab@ z+e4m5yl77s01HfG#_dwYpg>M6>_34bf0)yy1B)rVUzwN4hb3f}Gq<{OdzT=$^vC4~ z+!1bR{MYfv(S1WS+Nu&_s{3Nx%l9i8lix&YF1wU`{aNlc?kOuz)=e<=All(|kHiU%{v2 zw{QF)2E0fW56c4vtxL{ztpk2Qp*N|E_sZ2$38>n@aUYe661-CL=HdxNu#D$~*N6TY z^L>zi^=(j{@}A`XwRi5(Q5AU}@4C-UI^F5pk95+VekJL=g`|@v1cD@i5X}ZK0cK5* zM@9_d%7SP1=(w{k@)$v81Yy@120?UrijYNM;$x1Aqq}-Mq9{9ia8Qpj_*{h{&WH}V zm959UeQ)3HbcZ>|-GBUpLwCA=zpDGIy7l?~s_Ry%bp&`$51Ywd>%c917I&OP@(E`C z2KXwHPLF^QQ?gwaGE_tI1l)%#9hS#QC|5J{Kn*gry5SjSyD8Z=rnlV-40{;4n-{h{_0s^QKEbe zoZ~MGdD&wv@-*gfrzyQ3Kq~!sPHjN-;~yfS`V~Cm2~alRL^;BTI z>Se+^>I$A z^&pt*!lnziad#5imV}tc)R^x$v4;*UA4cUDm~|%gyJ`CMqx{6ONP_^kp8#eWaptG; z$>Q;qA?}mt@M3mLcRC+5+_>2kAMVTKQiou-zl^$wG8@7A%sz0FDL%?RB0d)279&2c zdnn|DwOMU`(-_`!u$rHgmW?;xZQ{ z_HVHa;Boo4>%a^;x*psBf-(9%{ry*rZa;i-9S-ul@aQ_Q)E0IrBl1Ofb^~a#;P#jSwNIM`LX+CUv7U@u=c%aGwlZcqhL$5Q3GwTM$nCb@5 zL`|PUBuZjGDAmaZTQ;_$ssT~R;>2bTK8z@2oJj1^lz3j>F@xUuZ{w}Oy7)@dQ#7&SK!eBa4Q-`R4&Pb zz08kYUXY?smnCxPGx%TBRKwCq`4X`vSW2?b0*Ndbh8L*=9g|*#Vd6o7Qj!nACi?gc zQWqMNnD<~SaiQg79R?;De7rYAeZ-l>Lio4Dg)TQs)&P=D1F#dZ22l08%0O#;ycLNO zCjjF_4(>n@j?Iksw1YP)e%yHj?gd|*Aa0Rj#Wo! zNCcOuj?lQ6K?B5fM4XPHcZr8MB9ocS>NEg`9?}3+phW}TAX7IZopw+`r)dWQIiwvF zzGc)7`IR;mQzFt1m{6HCK!SE?Q=|g{R3;68S-9aKDI$#q@WlB<0el72XnaBtp1k2K z8|=)aBh(=;QAbcd5hqAT;A~0rVdPUp;ZvfDzizRD_ zrRb*mwL&Ot_6jRHXGoxz8cN=r~c zsaoQFnkQYYmY{fwYYBv>q%ki=o|K>_FqsrJagyXos(o^vlprJ&8A0=;=_#4CA0@F$ zx4gcE-EGL275M< zNki}t)Lw_A1G0lS(DJ0|nYi|6>O=>n!}2uZM1hjgM-r1R$kc_#q!V&K@t|W;vIdZJ z8UWqFZ}l>Z$wY@y<4G7u6DX06!ktLqSsW^lcF0?MnU!uUrqQU{K~lBD64V=27RgT` zLr;LPXmsr$soDXXYA8A>4-sn>MPt+tOX%I8vWV!1mH1{LFv`e&tRJw8IE$F~v3x)t zbop9(_5&HQKR_h7j(tj;Sph{_nLo_7!tLuo516N7D>oayvH^@|elWw7iu-Sl&nwC z2+F8aPk(+OQ*}wKj~Q5BkJEjUPo?KP<`0GBB``_j4@tI9bDiCpw1SjMD^UIrAMdgu zB|o}atw8ys%sE`9^K=VG<4;88Poi3QQTG!CNsV+qk{OgB7L@4*%Al5%4BB%7EFmFV zE58usKIl%I7fr#Sr{SR!;1;2wRAtbWIZ^I>xEko~QZwjH_!2eM7&LfgFR@k_WSj?0 z9M?XA?@)UkgZ|~pSHywFp!7a2!~dZ^bO_ow93?)qyvQ(@nmoRKL!D?4+A`cne5epg z#e7M}eAK;e5E_8H5b!`&o=Tx@!wXy3yQdzXp^Y_8Ghh2c}ggF>U^IfJ+ly>P%jbTB#~OT>wq z8Ksyr$TIj*!~=GuA!$HvC4ThzQF`{HI})>>OjIPXpVioZnEWIJIMAyyNxmP^kK>rd zhPi`8-5@3D26m#R8%FsZD~)zw?ozZv!tYoaw1bAE*W=n@raT!{~}KLiB=w+`Ma~cIN6`0%*r5i1syoouVlA$rqc^#oV7Txt)dq&zT8%9Tf@v# zG~HDLB*l&=L(gHX?Tx8hY0Kg zT^i*ExktJ)@jg)}P_hlO%VlvBsi}-!q zma%Lh<@mWxBaf3aXmlsgz^_V*vinzigSMCBr_G>ppF~KE z^S(X4LJ7)Z8+9MmbwYR7(l->MQ2lSy$M5`*ufdgkj*H zT;<+>d?~L!!v5x>yb z+%TtCv{;3#P+dn|p&j6bP5&Qj`@V}ciep|MIp+12-^E(b?`U1B+`}9+wX;V?kLRyL z6~bY0+>D-R`LxEGyil3&q*&A56Rnswv4)*rR6S|ov=U#?S5iG`(Xo32nHT!?vx=t33L;OD^eqsumYRSG3x;<#rqtD{o>Xa%WOgzi3!WnSq zFsu1seS1~)wb4qC3%v(xxo`}tM{y<3IJ{v=^1HKYS^CPA#juh$BuN2R zw(z0N?X#A))rSfK1vZb*8ksQxzdYp(7uaH@&Y}XFt)K|>JHiFIxdmYd`UCpEh>RZs z|B~sncotp5)X}fNIm+MbTtSbG`I!)D>>M|~rLMZb9m=yZKNljC(EHZ9s!6U8`h25M z(l~S6xR!eKdC;T(Tv#IcitN#w+ABkm5W3^-wF}y-f~7&=K$mTg&QJI|dTC2+rUIYt)}De-RG=Feab$xj+#&D48yL}zu9U7Bu)b{ATB^{v!xip(cXNwJF7aoT zzDGtqfH(9D0I{XmOE=p8P*e!{P|9^#lrJ@3Iem5VzWIz_=Skv z7n-xpIoVW4Jj(ycR4T^E-T>-|n(X`0@QS8I^UZ8Qq{i!6ZjDy4Oei1)^4(@jHZQ>Z zU}uxBGVC$euMmBbGv916=UAwg8iE_(w<9~q87YY|`kKQxEe;14Kkedz;eZM1<0*a! ztQRYA&W81FG2X-+tK{|Yn7gPzKIs5Mw_99!g$}U-{=s2>V2#a=lrn(3xQ9kwL-#By zJ8@*0#09Tu4ESq{>>L-Up6CxmizU7`)L2wU;uuJC9eR*~$z2Uru^+BU2ppwd*D)Tk(kbP$mm5fKmp=^`Z{O{6yo zLXr&#C{;lPq(l@10SSooK{nz`Q>)K>^ z=E*&?*35b)$*lWcW#FLWtcL^%H1=;D0b_H|s&*sKA|xJsA14j$8IHM5iozk?FnI;3 zSiD;RsKJMe#zeU(GZk}lbUsL}P0l_&mX#yID>R2^$4htk3E$%9N%2h{nV4pbq+drz26$$nhZe)GwNt8}2eXa?#Wa6>{;s_=;( zk?FD*u=|3q*z~q)n*Y>P?`58{k@AywmC2{NL9cF6BP>oz#Qm5iM|^*w9ub$q(f^6> zoI#y^a7;aVk6d%B;fiU&=q0RB$B{$pMy0U>Uqm?+`>y(G`p+LTdPtD8{mxZT9COdw z=uWI@rkTVeZe{*YbJQ8A*6)2$ik=7#x%I<1GlKWT;lT;husIX2X|9DV;( zAy4xC%~Naf_oukMADcHV=e-@AI{qf<`6A%TUT@Nlm7%HcrnQ589ko2A?oIMjrMjR9 zv6Ba%6%b6PXLT#`LwNGq)dKkL@d0E}{4ZoreYkT11@(J=|K1Qv@V&0S9NOEf;A^2) zl!tlUL;9G_^Fu4M^ykett9;v5n(0aTrnPg{>s)@|BOPWt`Dggpfw|q3mxW2nHu+- z>)BlnS1tVOmv39=-8}dtqAifL5HheM7C*7`{E_?fw3Rq3tA)o% zQ#-lShF5weBr~{;jG%0@RmMkcj>mlba+pV_o_jo2^QlVQLMvxwLukgU&ki-%4a*Y= z+R9(fc16C4E>Q2dulJ*tOXd*7;vAv5sYgKX1BOpb+4O=Ek?&x>ypfY$jpf3bwl{h_ zsgo>`Q$C2=bczslh5;Q5 zPTeBmWhyg8AI=dW-QTC?;y=tyekwEUv_GwA_|7xzI{0|Dv=UE7;cf+Z>BF zj53}pWWC7)=DRX^_mI(Wf4q2|RkCpJf!(|V6)7K6UDn^VhYbOdN6>&@mP`&PH&j75 z$hEH2+7QebX?gu^(MUDR2R2hrF+#F#UwMT3lPSl#7!~EsI;WYCU8(Y?EwaiaPfv;; zaa%2TgT%W+0-Iq(C0~`;X4h?K_YbXpcrgQmLf@NX@2-< zE`Igsh$%l4;8R=Eu=_o6J^A~tq?MtMjkQXGjq3N$f!7%VV|t<+g0hy%P}e&6e7xst zD)mN%74P(d9U*gz%+VFM)?~2^^cN$!J z;kDi|sZX5Eyb|(2-~C<`Zq+reuk*P8p>~L*4d@J>ZNeoszKj)sN3Er1@B;$)sfVNj zXGV2;G@8tTAG3TWfmhzfV9ecL-M!;*$K?%)F!ew>U`i=ke$(e@W7ZGOOuUMi*#VU% z<)sHlEUxSd6y%3g0ICTkKs*&b54tvds5{9{Qsy!;$0J@k;E-gejNl6wdmn2*JL%HU zGn%7Mv9D0+m&>pMxN{k@(+9UlYNt&Rh(MLg56A0uUrL9rPb?mdVCsdTDvCT7*IhT) zyZf>!Ak9q#Xl1o)V@}B@%*}?jVxep()3Y%fu9zMBOUv;B!qVEymk%=vwcpfTyu|@0 zs7S_ctj9`bYWi|&2A(q?e}p=4VGkA(;I-U~T7tbR4IS24_L6k7vU;mmg()wtBcvQpMh~`Q{+ko zh*N#*04qyB9Xar2z98i1dO_X;lY7-P+n2Mi03b)^kJkF66q1D(R{!efp9A1Rc|$ z4zF6^d_N?-dp!Qdx9XegE&8x?3CM@Z0@)YduO!WJK~f$C8cML#O!DG>G56z0tFWwP z$;&RsTr8`mJy%$PN)*-Vhqwu@TC}0W?S~>FOzm;X9akliUl;LXQ><oIutP=_^g)2l{-aZ1EVU^l&2JPiG{`Z7rIZk%$*jnXMLq7oZruN9vv9< zl7N6yCoUN76`HRYzJT_zezTEu?;BM}Ci@0`*z}hq04mNs2{fKiGhBY&QhH}OP$W84 zPxg^l=@F-O!Oj)4QQ!;HlGb+{l2=J>hHYZ z*rPL)icPzh)`k!?CFYwsOWvowCn4m*^DDqYz{~ZOQ|-``^hw6B@&*?kuIioJVN&e1 z5lg6tJ@%q`j_jl>nu%RrmGg1cdljk>o9aHnhL8g+)Vd~l<)`v7r=6S1D+S&TrQDwEsGdbBesIXed@A;_9O_h{mRbW7cBct;PYUVZ=_%CPcG zWY5U`^Q*#n=;<}@b58;`(hX~q&DmVi>Q@+DtAN2qde-A(&e1n=_{266mCjCleuG*< zx^RrvEM>oN_R;VN$^>HYb)&ft3qF2hO*jL;0{E6^{I11dE?3R^L_NQ{Sr0GdE%)~> ze@V(SEz}H))$B7>Z}E^}JDGqiL(`k%QtX*GC3s^~?)Jf5-fWb_oAN6hzpkR#t6IUa zZov4$>Ox)c4aO?XkCDS4ypvT5OMB?e$pujZPbwjJh?L#ntgete*d-GD30 z0s2MX)VAs!d$;r267$}jh50JSOsPo!{zE5T%OKeh?-%ACy)r`GRL+<>P#jb58@;~x zRQy@Z8+VC=Oj)jT=ZjB4G%mjF^UIA49t-k|jIh zV(D%;L0^vJ>y-3)-seCLr>k~(Ro>@kkz$+r8Z}=G<$M;TX8_5^_X@1FvpSkFA9une z8Id>JrEa)`Pl+uD+4PMWL>OWfcA?YvO*}IOCFa;8IM;!w2?EDyzRU9PM%{N zgbZ9cI}meeq>^_Qrh0YMlZJ|1S9ahI)%JQ^wUJi;hCVt)%i3$b&GEJ`?cfXd%H|`T zghkg^0E=j|G+cam%{S}UpVP6mnb^^jwu?Hul;`NTR42Lg(79Weba_$+yn&-)`QBsf z(`~cQ&Xp!_Zgp0as(L>e%kS<=MdI${AADH*BJ8tB`IjfBGP(o?^%@>{bPW}6S@d~! z7j{{03m1Kb{}QZo(`iP2wzi<&>iV5U_NAoI`JJ|&EQ$Hlb+OML1{jQVS8crC z{0{FAo#R{Q7eBqpjpCH!Md+Nd%#YSJklYLir5t|vL+=PAI_TR$;Sjxt4=o>@#dLTM z8TK02oK{Sb-V*M0cDBxOKq)raEr($-^FGLq4h=j+bx70l=ZK{rlhZp~N8o3>*D-Z+5L zuQos|k{>QvObD8G*<7Wdd-ycrdjk$`JSLHO&+zCmNWvw<$ZoN(*7V2O6f4J>3!529 zE20XR2K0b!u;7+NRndeow(?feSh2ryn$B3tQl(sI5M=K$H27<;+x;B=w{v<OmJmA-V5M&MW7@BnxZBnlv0N-|Kw(@XK?yGRqb}!s*b(UQ;fc*V)R}_(z^7Z>*i7 z#Ar0N#Ji!YTCmr@9)n!53q&axLkXZ&ogEQl$8EG@m}e)48+W z>H6y;epu&6U$vsu0)B8_da4;YK{|H6qXdr?d(8-cDuUNvU%g@xICXkk!>Zj0p?S~C zsOnc3W5mF1ZOLb#&~9t;e7or|=v-rjQ^xc(y58_(hS^~R6V z*fO7PqIq+}f({%QpY74Ze=j5bHPuK^EFH0RZ>iq>1aTSSa`4cb~X z0UUF6zIduL+sK0-|9qA<>c9zfIMeB9B<{Yf-dlc0%V6Y7XK|(1wfwEJZN=sJxU8?8 z@9$BkdRiW=h}QRSwYV>GAvg4bgfHz_PUOesZovHRAGj2%wp+Aul(r#5(ve8-Yq)Ro@@`akD$E)bLODAVbXkg-C3E7;afJbyJjQmtE0^y z%1&D+t)z;X0h;Dk&PI)~$`UpfX6G7lMloJv7%x)`0a6>EAeJ zpEXRF1cG%N=eDSA)}I93`s@^b6y0-;vGk=pSjdO9YTlM{|6#qxi_i?>`{@0_ivn>_ zOg-(jb0n~CoOSH$^WYa(?KKofi`*~0rX2;7@?I+gNO-L!JddmX{IMPNghWs)>>~;s z*K-16IVP$!Hh~SbxiVF!D==-Q+Qs;^BU?AAQ9VJ8FTu%dREC ze5y*%f~wge$z64_$r)RBt6%N;^n)Hi#y{T~J*|ZFn!gu#?jh{C%x9QoitVNogIiaP zYL#_dN!$?ptyzbokDEgss-xaYk+P61IyyVdw<6KG&-)*_v4kZNm5B!pl^r4UGOg#*?gXdUX9_8vz(J%nsU$Sp2Jpaspl74Lk4X_Fig+Jc(g1iSHua~k zhf4p*^d3|2+;K6b?X*G#9mt^rK3+)djPV=zyU+D<+%M&D*@WmDd_J+8!5L{-KZG7+ zL`fucjj6(v*$*?cbfl$UP-D<*(=2#l;XzBE!Lx(583Mkj!kZyho8BRtj%T(fj=8^y zPLnR=B01=mx7azmK58EL0u)Sjw#%3205zw?YZ-=KpA>Q`?E*Afj$Am0EGo@2J#Xx4 zf3DokuQFVrY4_|w)kU}5=cFey4~F!GJrlxIb*|$D&!S+7?+xJ(QqK;IM}~^G+yZkk zH(?3aedqXDj9cvbMK34)P;3+S6~rY;<)_1BBo4Jj2HaqpL3e&Urn?vDyDSxin94Ss zAvG4s3A&nU9=M(?!j$D87k>mFAD!xOrk^>Td3;LeB*zZZ(B67{%BOK1GUHT8VFyefA#qje*< zb6Zlnv*q8eer0;aGIVFHXXRGYU=Ky)OwOSiN%O;XxyPK^HKqI?@CZ2|gx_V!Gi4_xC$qp+>n6 z>>*bk>W*gfl%Y*1Gwj>8Q=VpM9L8oRsN|3ayk1F1TF#cB%SpzKZg6IWmuO~E()e>p5G`pR`FzmEoF{CGZbcxGb`*rJw^94O`Uw0 zrNT|p6s(_P+eDS$4RwmkEwdU&Nb0Kv+Ih9Vr$4Lfd@R4`YB|PVdfTRi{s5lPmM=xi zj&hq@3yT_TJ~v=XQAQK2w;1XsL%-)zII5ZJY9fZ6z4%9bx#U2(;pNBG{4;Y$gR~mr zOI#Z^hdLj0FYSCf?V3dUK$1^y$%LV^?mr0eYMqC5hXqSvZHLIOtMm+Z`0?uQ9Irt( zKXxp-iZNLVPeZm3-)ww|DZcb7FDEj&8OCh_%+Oz9`;N0NZ>HRdRh{j<l>Aj?3xf8E5m zNF#X^nsEwovgM2Fmz()x*=XgbtDV*jAC-l(cG9~{Prtumhj$acY7~ijHgU+>H#rPC zW2`mt68~h1CG|!F9?tK4L61 zp`vG4@_n$x^|WsWpq9QOp%6a%Iiwn&`-YhwiZf1@0J2MT4@cjBY5hbj=mVv*-C8A=L06(ee9 zo*bfePG=%2Ri7_fA{P_!r0}H#Gwb=qR~sSr#@j;|#J(mdk6sq^EN@WvtO%4W$C7rW zzQZdOY$owF7@bLLzoX; z5=oQYHYHMrmu`cWb>~mF_nU>nEdv z*xSirRNmkZ=81d#Iw~wTLoLjw^;22Nc(-R!jeEmyw;DDOe5@-q2S;7ywxHLu%Z8o; zOznU9X!2dt{K&fx<-^w~>uxtWF|u&R@5mP}%hqGV(aYwyV^1YD`JFuU!rV-vF!2@F zN_&AUjUhYYm1)z?Dvg)xoMxcKF-8LX8I9(<`r;Y994aMqy8G<-0qb$v1ACd+;mBS9 z#{jBPzM{LBqXd`KCQlaAP!Y`c6)Rg~PdC-|TFc8jP&so6I5+jk-O)+7uk6$*H|y<9 z=G(yyJ?+=Y7mfy22EPAg@}X48bnxt#4R=Ar)JCNFhGvRtYRk~UgAX64FLpd2=Lag1 zWV%$#(Mgx<&SKoKKgCjQ`Zfosb zM&78^eA;eViSc|Jl*Amg%8nO_AKY@%q|zVD_W>0Ja2l{!*_;JD(kS=m82fyA&{Cu4 z2oR8WtuoNB|7mWCPLjQcSkuDBP_MP~>BmEh=em+Y%4|Dc5wi$Rt`WD>fyuYW5)!Iv zPR)s_g+PE>tb#rP2X%Ad08om%(T~fSx5@F8IY3;NUyOer=iPh$cb)FvExUNhvOOs& zWH{5mJU3d=V49qkn!e6gf9u96xOv8`zMIBSYP#8_=r+<-vG;~^?5u7p0YrJ}7tRg^ zDqaT9`5YYz3O`lXBhRI)9B**s^Y_Iit%XR2OM(N2PjyZ|9XP(Ee70}q zl4es^)L4@eD4EvXF8Q=7%;ntf&eOLC+)?ADF>b2L&(P7&f0=6vGVnXeONIl`S3u6V zL(bP$H=G1b!A6dcyW}0PLX{?N2T%3-b)P68F?{4hUKzF5p5R27q~f~OOV{PodNeLE zPpi2_{0L5C#F*HRY#*GZbPh4)0{F@}YYuHcqe{$+N>VN#$xTW~Ep@qM&#>Tx6}vm+ zMLsmp(Qa}I;;GI=cPug`eZ)MTYF_Hw-!6UET`)LYJtm>)axhGZ27!3qWFCm2rp1LZ zcmlnzG_VSKW-<@7-;c+Q*ENDijiEwOdEy(G_5<;kwnzO2V2D@>LwDVrW?qyJu`tIl3ko2N6L8p#u=Er|}e?qz{?ap`Odz8oq zA72D_m8SBd4_0McO&%-twkeTfI*}AIDaAgJ;yJQcP`s*tcJaK27{}6%?3@-aHbn<^ zZBNuJN2;{sV_K@U@Od2nv)RVmx&^5^B+)AEGh;_8B7Gcl%O{RHOkC&ntxQiB4!W%> zDjTsb)*1I&ohjt_^P#U^veD}@od#>V681&6v#naIbbk(r>(hp5CUVZ<*5|`|@57ijzV>-+dgk8Utn+^PLHWc4TLVevOmFrv zYnIOrK$koRrZI8fTsOE1?AB*-v7(S4&~R3-24@qp+Tk#MEpKb&H4UgusR2fk}dm0qU?V9~!8x zNoZ(%5?=L!nXg1f_-L5Z!tF^LFO;+=ZKScATE`&Eu8s;cp~W`B@E{Se)l8${9tu!h zh!XRySpMvZ!Y;v>>_<@-3H20ZX8WYoRRjn5%FJZw^f2>hVi&c}0EY%0$EeYQh_}WR zkxC7!wrv96%fbyk9R=0GKX2CDg#W&Y`5ah%^Pd=EM8CyryzH%6rjkb1%#G&op&i5# z+hLgQWF9z#UIe9ZS;<~bL_=|)AFYZJ6oqIX+6Eo3W{_P#DfphVk1bjPC9E#e>?c7n zcVs0$bg-vQUhl|FbM&Se7KU|h_fkGHC{F>~H5gH`x*V!dxg;JIpF|RiGFEqut88V` z%f7xPyKb7Fc{R~ZqyXsim3rqHmMY1Qh~x2uO_z>S?yAp_Rx zTSf_=!Lk!EpeEAVLGlHtFe-d>ErWPU^AV=m2OCVEBS{9ziAn-C0;ZD)$H@{@3wm;bTH6Ro90SY|Tv}N6te8ZWK>XlN zs@s~JNYh&|Thb0j0Q`~G*JxI0jO9mUw?StjPH;?~>TB5rYkj-d#QOF+tNkO{cGk5# zu=Y2PrUW9C%qoQiO@ngWZ3$Y%ue)p=6!<)^Db_T`OLvwvX56K*YC4l##~uONlP0D2 zcF#lEfQhgn5Px->JiO6(+6$~U5e`eD{SrK#?;U$-nlSg6G>v)MiKiOg-n zDlvr206o6iB&#E1E0hGP=7uNXunOwDyU4b(6r6NZ9x+TExDKP7zxlDL@%Va+QqfdB)!6_SKW2m#fX3m`j zrLg{@({G#WuAb4Ehz@RZy2=|B93>fGH(B|#hc8NUBXL0IbQFE_(J0Xti=!GbMcgOX z#f1Rt;_LtH(jLXza<98tOzvOb5-U^;rUNj^xu#1zOy#Bt)?JQC>Oh~^Oc;v_B|IT6 zTwTAW8Kvo?m)!|T98QWM{B{+w`sz{nYi#t(=d733c~Gb|qo6u(StYYe(b^6Z` zSg_Qoqhe`yqg8mT2iGi$9fbvdwDMM#aS>nLqD(i^ckYA_J;Fbm?YyP2#5pL+byL1Y zh;*$XoVO|9ds=g}r+~4S)h;<^{U<>t@hC&m!VozD)heX6(cKYC3 zvC7hftVW(f#4Sh^UeX+tvv+jRs-WTO*6%>w^dH6*$q#R+7x0LG)7&4lDr&g1HCTwS zgjC>*EI=Rj{xwAT$mGG&CsBVK!>3wv#y7;dK+wABkXesh#~A{;xeh8$FXT6v-2(b5 zjUEu+>{4K+_&+SBpgBrw>)$mdTY?s-f79GZn?R&~Uv#V&`FBkuUeFx#dXITfxu8L7 zi@nh27UW+;*#&>})gW&U3z_ss7SQVQ5^^3ot0%6y1GPKb!^IDZnA?w7z?2Ig&E3RfZ#QVX% zJ4Xx6?hjD^+Yl(fZ_wW|Ec7vjq~J5mF}ZtUgTDg-?0xkYvIlgpatl}vMp z<)6EKXkyx~3Opn|5fm3Z{`c;~p$`*5MZx2EyQ;r)y-EgtE?r(F|M#*y5mXmEzG7Du zI`sFhE_i5^F;zD@_`iz%wQgmzM6G_&Xtnn5T&g^Bv9NLW*_7Qgo||%QYynaX02zof za%XB_#|!AcT^Bx1En12Yd9nqO^C)o zJ3%{26OgPHQFe$Bl&7CI@(A#eG8S`Sn18q1P zR)$+C4`l?ppi$Rl!gS3Yr+A2c4mR>UC+<|x^Lm^$9V zD!E;}ijwlxhPgQ0MPI*(<(8)Z)@Bg2!HV9^s3uffFVT^Fcp{=|T6fKf=tou?i}>sP zy!SGY)#fBEYn{;Sm)WSlePUGocyd>(sf7`@0}`s1 z%H5j^=i9`bBrduEdB6u72us6_e8aT6VNW(}?~(F|sK^dZPICLOT{vn%9Tg?Z+Muak zI=1bDUEQR~5rVx?LZB}wIl>uSSYEkZ*n?mPvdENgXF@QueQfFuM!1?8b8>wjXw1>o z9uX3G$hOlOz@ZUt+-|J8X|9gzm&J+;@4Z;gU*jJWTwf;iYmSoE4v554*o5hWY&AG3 zw8%wHP70j(Bsy{O3w5NCD^Z0XG1xCLn!gtBlpSZ~Gw(^$38zqP3}SFErqglktrK(X z?V33DwheSf%tn3fscf%_W^i_hPdpql0SH-D?LaLrM3?_h+vqF0C|Q~6~v zG;w)jrPzN`Av{L2^^vmsC0(zqClL~)42!CK;Ts1n+{0ezD32yB3w zvJL0I&5h6IzkQ+voi2w)9Yr1hot(qDNQ)Igx&91^kIZ4`oDD z5ZpUG8A+_uR9^}wv%Ndo0vx1{MtV$dlNp~)6;h!KJ%pj=+6S)04k8zseCJs1Dn*>A4^C`^bE4!uBD$pYqY;I87<2J_4K_{C29D^hKo z`&GZ)Ar^rvUr$;vZoIi3UL^YVdbrlx@PH*?2lb}`mD7fnX!Oqez0@I2woNORh8&pR zWFb|O(Q34zXFHUH;6&0pEvv0{=ESUZJeyLdsS$!G8!Yy)zWThZ@SPXgN069p#=QD) zpo9hwQO{Nli;!Z#-93@DQB6@>!g!Hz+W<)o5ioKyaFYIwGeC17p~Me#zO{H`ym2jj zhslTy={32vX2l!sBPGllRyz!7Ov69s;D(Y1*L)AJV~5pakV2;n~1S zBb`fE0;*s!%j1yE@`*>qJ(_I3YsU08h8QXFA2M>V7uE1(5+pU zYHas<)f*fcUgQ!6dJh@z1gi<*lNY_?BQr)Mcchf1EP<3!ie0=%1SL|a0u zIEx?j4ffTHs934tT>3)N1MKHAQ&s-IuE;0i+eVA2w9hSDN%2E8{~_ACFQuhuYEPF+ zFCWeKW;Hc@Y9m@>YNH{GoeB6iA2-SH{{fPxx=6 zStk6AYBp;cIbUi5ZvU8YCeb-1E7He7fj|wfV+5SM$3%5@I7@gI4!$`=tqFhMsA~W^ z95z;@hO7;JEkX=Hh)DM`iv;vx`$Fhl$iwql-Z7$ICbA)2h@31XtYM2+LUTh8c4o~iq*0@Vth0AaeJ-Jisl zLcnxW?>0FynI*|m!oKnt$>ftDB*K4NfiOY9t3~!9I2Fkglf`u5&EJ-be?l+v?QL8VgaId|WdE*hXuY>6^l?nX#=lW>vH9OmY#=(y8_qL9v=|X9}wR3(MLu z&A6Dg!y;`?U?JnlzcTK>6-+#uSl4ujcf*d@KbFwLrOzf__)vAP6aB+svm z8#DEja~pn%_i$CamicEdg7)O#l62{XY02=*G{u2AE{8jGuc9~ld*%jiw0yEjkLlG^22?*v#@7ZGG+CdsvD1o?WuhvG@WW8tU;}3|#dPu#Sz#h> zXUd8I4Lg8}1$FpLJ|K%}KIWXN+VeR~egON|x(7Xv7`Uy(-9$@hk>FZ#u+8gk(aO0^#JOe*FNwMwUb^=k}Diij&2xs!z`8iY!54wmNFpQe+VY=Li?)- zkquFRO=^E+|wu-g5L*yhHgZZe6RMv?Ecr&aG)?$pcET*fLM1G+r z6VK~;yp^TGFYJCa$yNm2 z44T=y(k{+|_aY&HlG9jTRz>XfoXjRZ;nh5jMiKPK0CjfrcxgJx#qN}bqaUF^YEWZO z$r*inz*VvD5y;dy#?&a$st(ZcL)5)tVG_*Xg;XMgf(KQmvTNMmFfoG2O5XumYP^fR@3 zgf7X0(fIP5GtzR+>QMM^a)a#8VqmxT_r07jx}Rap^zQx&7aF9cZbQ%6A+vq?onPp0 z-hNs?fuH5HU#Pcoq;I4{+CNk7$C;iFU1d0l3-~nwdU@`rH%XTl_P2>p;ovO8g`dZR z#o4vd!*xln55NCDXW2EV&U*Z3jLvEbV|eJns^;8zy9j{k$bA~$^j5B?@%yhQF<9wF zXNEaVF76dYi?FHe#x}O)bVo88?4kIGD5O^GGMc8WiK#)8NUrb#pON(ukVoc4^&}Q4HJB}sO+xy{cp@0u? zwr@Oo5<4nRa9$GcxjCkpfNq;;{)7yfZ+d!XiYOUd zOWH1IVLH)K!%(?<0)0Xk*()O6JzGoBC;u5?&B<+B&<5;YME8`}Q7#xtebQ?jT*b^a-)vvD zPiy~m?@jvN3Vk!SX=F-i@n(wl^&01PtRmkLb%*PqcO1ZXV<)=i9xx zq;k`41{xUE@-52COxX=D!df&_5nkl0WFNiCzOea&E-|PHmAAJ z(U!w$sLmV&Hj=p9ImI3hNJ2e1ibQMz!*@oZjoZdIfb3zppVUe{Xqn3$%NWPd zs%7}7rsbaf1-lj5X0ZrhpRM$7X$vMW&^jjVEt>8*#=Amp3OwBxP2}EOFi=MTV|_e zHAmU#txj++=HIG)^B`y+svY+z{Ie)Fp!qMU!ZD9Axh(c0upt6MCx{_ZH9T17`u@6Q zEjZhcq%f+L)%e=T;g&ezAshY>^prv&y|AzQe8~y-z&_^Ugq&(|I`Y?^9`tlL{Dv(g zy9gby6;h&!9>mq`sawJSTVS>(`YSGEPu&=fTi8&CWapzdHbee9VBBVn9{hi9wrXy} z+oOkYYt$Jj}KT@eQD>qm;LLbvWC?3V{UkPj2A5NmiP`}+2x zp@&;{5cZ3M9`z4DSRuad2C1U@o(-w2tLob0Iv1&{&s0%HxS<8IY8Fh68dX3SFi^t3 z_THd(M&beM(_Vy2u9@1p(C&wU=*kgIwP2%(sMg;2&wB8zA$r(hzWrn#>6 zD4lgI(zw-FfYxn0X*OTpK|gqP6}<`%7u{h=g~(9{5si`b+BxSiO-iI)6wIA8wMMmJ zG>(3<=Rp4KuwTKm`l*G`Pv$TEKm^+8nGnx}$rjl3*?}gny$m&;Hr|Xub5nm#xF^Xuh9V?Wz5sps{>}I4~!a zE+Nt1?Q1B2)Ty#gqSYKj>ZECyW;TGI);;E{6K(FS_ow+^jDdi8u9nUpHpQ|U127AR zDjG{TkQIIp;%-a}W`rN^pyN+a%@B%3%VJDBcDw(YI`p2Hh|0w{cm*v0Y&=7L3ziyF zE&)(=#_S2o#42La-;w16TVmo5T(cx03w(}F=&(v)Y5SPf=3s0nA!*H+P!HB<;G}WW z*nAoV*C@n;(ZU2U*GbUti1U zUv)_1-;_wgC{Z}NkmM~|T(thPd`nEiDal;#zV8{LTT)vY}Z zCGpY;Mk(#pZ%xdKKbx2Zr((SxV;Y$3X9lfCV1Bf%7QyK%pK#+gjkVFLM$j-+0NwtlM>59>ITt|6u_!7swqr^@92RMZG+&3+$%uPj5v2 z3H|>TiLHyL{@L>4^m{ga7rhJGru@m>PtBuq{Y760z8}+@y?#O2wB}iNg1PrkD1EGR z=DL`&Ld~pP$v$0bj=*`Wrnll70u;2tw(i2!4{Sg+FMfy+*E0&2-SO?)d z(MpOgg(t=DZ+S^)6jBUTQ>knA|J7=u3T3RqDz9mU9Y*ndbnzfd@`huYV%F;HDI!n+ z>=$4wU`mu|M)p~n7Sa>}8tiYcqfgFt9B8-i8t0$|X|X#0yv3O(?yoE>2n+H%@{?of zsJ5g0j^Ca%JZ(|A?|}noz2O<2u#>=us>z?dC;z7JmK&_fxqqxwZbuz*~AOM<~47-h5v;9U?c>Bzg53&7gky+@Y79D zyFX@vP5cx3gOSKm!;hKZ5>69V4t zhVeAQ7eutexkc}@z>vnTlf)jECGiWSiqJpBU9 zW1lcISpgPqV8tY?HUZm#M*^tnQL7b@e@u-%DhPwc564}QRX-_b%ENiF9yih?@Bqug_EtCi$AEX|GabLc=bG$aG zAM$8LG!T$OIy|mBulb({y$uB9kIF3VW^G z3((C_8yWjDmv|}o)1S~Ei-hXfm#IXK;K1s)EyBVp^S-(vxrYUvM|$z1u5gtT^!)Ef6gB38Hp;jc-D#>M9~{}Z8< zKzJ_c?6~-Xrv8q8t?>XPdF4M6(%F%yHU0vLT`>!Uzaept=g({YCqiEX;qOQn$MY97 z4R_pYjlV)(t^7wq+B^KU=zd7_ieex z0+ag#)`&Ufl+V#XHTw8TwBX~8o(!K*Ep^w47nO)+k26@>mE+)3-kh)xwB$wr)|lW{ zJz8Y!BHXIm})J(lLwMsR~yiEa~+S&p!(&5!+FRiEhH`cYxkYD5t!T@IMs z3ZTRxfa?6XKS!WY{maD z@1#O%0sh}LY51h~)PL7>(2iXEIeEnf0lNlcV3*Qurz8J(w86?PNDN-h9Fw!hF&JFX zpuHtrxcWO#VT0LLR^h5SBp1Q%EZQcOZ?z zRTD@OKGYoZc28t*r=UT1>vtfe@fDGilFXVRe1^g-NK(w|~<$-hvda znnB=rk~t=SPjhhReZ%iSh&|}wPEiABi&D611wr9S7MOnx0d7%#!LyhHU+*0p}d^h{%a`49GJUzdXV!yRBubW5MWAqivJzR%>rh* z^=}$r@t)%#XA$)FR!bqkl2VF~vG_g6gz^}#YYu#~cYH9Z0D5gpv=Hz+P$ATO>un*x zf>MCjwE!0GnG7cVYpBB<_-;>rFzG$?=9W_-z>JcH{~ZWh2(Y45<2x*XC3}8@NkvfG zt>1x;3>p_euWoS_!f#O?;l<5?IeWhY<>JLHfbaM82aOA%rduh6aC6Gz~6yPDDikVbKu)O{y}sB^!k=! zA^dlsLa60dc_G|_QjB-A02b|857JPHE9$ifq$X!+g=5$D&O}^CHaEghkT3S^XG0^2 z%(GWsn!P;zC|&=C@*QjQx|!RdkuD)Ad|m8E4(Ti2cVoS%bz;O6>4stKi+b*>nv4`& z{Xguzd03KPxcA#^WoEOPsSTEyrj_$ZW@csTuR%>sDND&5$PodR(#&$qOw9pFO)V!% z98y41b40-*QBy%v1Vcpu2L$2exA(jEyU*UIbAErk?{&@}oBO)%`~G|{;Nn{FtYC;4>$Ljg;jQZ=q!hc8n1+8vr-iH6j z@R~(e4=^SAR-6}KF9!|121(p$Nc(7oMM#IH;cr&!q%_Bp|0c|-{unT|*6os3o?K5H z(~@@#wj2NQkLV6NhkxgGU8_*8FK)V-_a{v6wVp2E-Gr&(-@0AXD)=MDyIt1GPwycz zJ$UC~^7ua?SY7<2XSjowj31wH@*`^R<@%&zC;f(w8hbdVDOBn`^6mclzRKJ?in66l z##tgf_WkkmW7Q4se9Gmr1ZRaRiO~D=L)BI96w1jm8|SP_Juit+TIJ-8p?H>cIcHVr zdHYf%f~9vHzY#-?&{xe{k$o zpHAgngZ&9hnD)HWu>JU0H%oM$W6vMa23_dbS2EqtdkoXXXS)3fXLdRWY0o)Jv(kGRN# z!A$WvZg%LRfj-vspAh_BzgvMR!`lMeh<`@C@JBq3Po`c0f6(t$m`>nbhW!b%m^QqV zu)X+K)Jxzz{hmMKb#S46U)FRN&l9GN&!GMZ55T1H(bS9J+?s9|<{91}vDam~jOPGT z$EQ-SfeUK>gbCEk;QX4NVWuxn52k?s6VCENV8(bP)fQY-(>FZ*C!`_8qi83;l+&k_)f50_^e`?{+%`PhECUsjekMnk~Zv7+X^KPu33V&;M zO}QYc*J}EYn4i?s%6z~(w|X!<-t4mSpD>P(>LLbYm1+nd^8Y2TI7$|hr#${Vyg_>y z+A0?%^|ek<@cdT|!n4i(gj%3g!M~i@mDR)ng$&8CsSt!B^GyCUaFV>UIqJP#w<>cl zZ`i;nh`@@Hb{xQ6KDjRi{&Uf5e_5<}IGu>b~$;GfPyS-JdYi%m!6x*H<*% z$Mag%3I7vn^W;}|gugJeK;@FVLCim50l616jo~@1YJ{hmS)=}hhr<)itWf#n9tJaz zXSn)DoR%zmT9vGSGP6S!NmfMt0Y&}S5oSbRsHa0tSwQ;88RLgVGaa1glx<~uomDGs zA0fMqa)U3jo>Q)tr8uir**-@8F!~gHll4I&+;T3ewDm&v8WjXzW4)!Q{Vi14dLt=D zWx>v@N{UxmpF|)%LiQNt2VZ8zQ{>CEok5inq2H(^*nw3_aVo<&gQ`f6B|=fKEi0R1 zSQhBas3dtI`y@hx9dR?@jGWNt?mWi7f!wkgpzy!IvMkP7u1fQ<>yNsR!8cfW6w5Me z=k!WVFW26>55ZSiZzw1J7OFJ8T`6^?!A`6SibokyB9uRJ?WxNPwq(Up_Lr$UJ61}B z{<`8|dsZ>UzO2OAv8w#BL?{flVP#Tu%evDrFB!W#@ma~49-{a9Ab)SN7u?i)Ei*rq-pVw$_T|uxlD~)pI zZ=uT1dz4aF7VN^Rrudc(ON6;cqdj%`!B(t9iej0uGo(@?^w*UHJF?0tu4PzfNY&h9 ziBJ@5$I79YmcgBuE9bmM`y>L8RZj^o6F4td&3TUw)S)H9Gs?y?DQDSArAMaSu=k4> zB!Wd*jI(T&(qq#fu#by>v2rDXm2*<1l9y>O?8D*}Rx;)I-$Ip=wF*)kmdv(-BMXNz|D zPewUiX75~5>EKn?>s(NE%{x^h^gEYSIe3>*oXe`5y{jmXC4zS)CnC1*{DYu;My#7P- zUyl!4Z#)H7w&={NqIj1LIHRlFBtoCFowsS(VKylzwo2b}8h^ADWLT}94mtnGj| z^wq{f4U}e>3Q_rV*jXZ?Lde&k9o5&+0@d~~^xM1Y$p@6dsp87{R~m>=zI&RubD7WJ zSZ!Bs3&=_mM~8vNX`XydWwAAXt}#tRJ)C@+RtDqWOk=B=py+UE0E#Y{6iA~wIU6}q z(Wov?5m$qch(>jAf}y(NoD&0+i$X_d4pInD8)-unoX`&sv!vr>F2S=L^>L9!(6bqw;GIXtW^uB8qcS#7#{lHX5E)d*Y zC8S+!4u-0O?MKoebkpf&!Y_Z(La{U_WXT(WKh<7OW?6b;fNa(fnbGz4SMm@bi-=?*5gxn!EBT54>u1)S>aM-t2 z!$kf=YbF?40jfAOoL<{Vewfh#ZUYmo`2(f66I@i<01a7O>wlM{&(NXurY;2H(0M?*he$-EA`IaO5x=Xx@TP-Y&Zn>0zOGCBnYAGh zP8_f#n$aE-V8{=>QxJEjCWMaue?NBt!{M7?Qrk);&uVpx7$R!H`5sz?Y`lrMsAdwv z?F>0WCbwx#X1KyU?MFHZE+GW6!=zZ5Vyw;)%c_$*e5C#*zA)hetZpZZ5qF?-Z?GOQ zGjCl3ehehF%T2~{PVg(jEbC7LiJY<;S@b-z7GHQm8Mwq}m)+^)2-N*N_#2f8RljaDyQl*ye_cyc?jndgv<`%yCTi_B zy|v)bY*!lkjxOaGrbU$HuVe@(>`|IHM1SV~{%GZ{0BmWpxOhIrN%T>u&%txTIjwZN zHoN`B7$42B^F+NNO-MVCqx<(~=JEZmB_+Y7#YV(>lQ_RA;H??;IAag6NS9A5$)ex$ z+poO9Cr<%^!dju=tt$y|E95v?$nJEl@}z?qC?Fp(=}6xOy_xf-h%OIx5G4v-`EbrM zUAYbL7NH`(BYGvg#RqZ7bYL6dEieU`&Y=F|xj zc_nU87izNPz=8tJUdz&t^Y4ht!fr*_MF2&T&W68{FX=IAHKd_w=+~ANchWk}^Am+M zNB)-D8-8!H=m%=;DN|w!hhV5rG;-2Xc$n|=CZhLW&|$i$e8kRGq|fl2W|WQC-Ka(7 zaWsd{z#pP#Qs55>BkEFAy;Lcf)`E-s_0^y869e zwcN~q@m0xxOaG@@f*`d=Z2EeI{p>qJRz(CqvOwGT%HxWLg}eM7;_EvvzMoe~JNjkE z|BZywgxQU6bgHkJpKz+Tt0&BBJ4IZG_&k3-4R8ja0muY3yEuvZW5EYHDufQ>rcM#q zc?&1a135&_#c{p{dY@Siz5n8kw1Mr-PHyQmHKBW&{&un_v=215(t(YJl&_Y&(V9Z3 z@dK!*GhU~darYahgNCB-s=>9zq4ZP}BI2kVQH)JOIEiHW>KqKmk&bRBx08uLGUgY9 z1GH{#rIU$vZ6JCe2g;Y`$k7QYsJCJ_krZEinu0{;{!d)M$}l7MRY{UVuiWh z6rpCnO@&i+o5Rq_VY(*YI^dMpwfJBf;TS+2VK2%QW(#q`VE*QRJwZ#RyIbkvw_@x1 zY;jg`sAYYoIIAr5-%i#vjy@gSu0`Bts8%%TI9ZvUj0vzM5ou|v98`8}3g@lK8FCwj zlPy%_V>!!{Y$D(_;*|J`=!xa2x!E&FlS4J&= zYu9{+2uzyuxa#==pcWn5=Q70DYpV1%j>0iu!> zUaeafnw>fTeU}(40L-)M3vQp@cIM_=(+>x4r+rC69($;<|Hku~hY81ydZ6U3wpuHaslWMaRn$j~%W`!+3GZa=szyDbv8`T0+rq51p;Eq}AEN3?!-tdZ7> z32oQNF(*EGPCD{e-lezmrJE8@6mBuUI&v*>FYN8jTiZRo$ktlBE8n)1Xb3BWr(Mo% z&6#Kq{Fl37m4Agvv;k#gY<0d5&DI@BYNT(sGQdr63V-=Q+@WRL3S zY!#Md5UuH(G_@9{JR)$NF^(qiW>E05?xT%)7IdyQUxII>t>$ww`gV(HU@f?9u?Qs_f?K zazneqS-3o_U6tq1dXI<4ICZ0;id5EWw#JsC@#*m(QGRrZ)ojiArv%bgycEk!w&XAwFdA{ptK$EiJ!wFp4t9Q;rEsn5*M2p8%@pLqm`9cGkg&SYy5K;MC+C} zE*|_SK4K!(B=4gYGiLOha`efIF|+4sxtth|&%4$8bAS(Yi@KNzqr0T72FFK|&eD>X z9(`clSV`#hek<%*O=N5J zn|Z_a)FRHw%$`feYZ;JV+JVUD11j*dPNNSOZ-weK5A6%R^&`xd#t5?2C4cgqk4B0v ziqfg+UeqD4AUkfv^%&hI4baDoX=K)?Rt-#MfnQqP&^%~DHzv(64B5m!hUN}INNtusjJCLNtw}Ogqq{? zx)`$?!s_#;)fa(8*R9}OR;YHIeo83Y0+($WbmFUW!>CJxkx%k+;TV=$ng-lPg&(uOAonJ+a0}c}=D7 zRCV<;Qk<^GYOlP#Z!5oaDoRV9qdiZ24~SaY;RgCf{+uMw1BJ%u8PnqX4zNcK(BxcZ zCmasdWK8I}`ApapiZUK+FLwOUk4w~8ankW=1z~^AhK=k5#|+JU);I2atSSzvqk1{k zr;5vdvUw|RqsvbqJ$NEt^KOVS&DUyaFv&FJL6YHIKL|a74;z$%DBCRw+y;{ndI>{1 z9$bbLA282Yhua7{Jjp+rqkNuh@pvb9`s~c%uz)e8hQ*gTR$eBtjW>KApQwZn|^Y4S$oUqO^1!%)Uu6xTIi=bYi)h;vE6F>&4$ zj?1klkg^8Q)HtB4ICdEgyZdc95+pb2HZR;j*5v%ki;!dA?F&n$SR1%jc&E<`Y`VZ9 zOnpqP#&X4IeS9n3TAZN1#EV^3p9*PSvtM?k1MS6HLNT4M8$9r+{xVT_aUk1uqKl0a zkBWqT=<>cGq$*-eEM+Htx~Q6i_!Yd7Bt!O_A3s^9?@H4dMl{uW6xPgz^+ph}TxBz( z?IO+$*hHk4HS8JaLPN~V0W!=_ebf+bznEKo%xr7)@#arQ-g<}bs#8z8B6G1eE7sMV zIalAvFfC~Qa^!7mcn;T`Nj)_#sy}MZ6vZA>-AbQ5p}9F%%2_H`szlmA)_(6m)L&-M z2*Gou7vd)YyE@oV(I<0e@`eqR;~OLYdKTsm+r?2hb^9;!Mc2sge9O(*t-oJ=IKm6H z_SfEOx?Aq~_7e3{T8eb!U&$fAF6@F8XW!ZVJSSwS5|cL(`PaGd95toqIbG^c)Dl7d ztJcgL0YSS?H^=nO6Wi1_mdvD`}bg_;g+Q zR>5YR+w;Xd)-|5Pf!(0UzxIo6H?vRtbmMe_k=^Rnk$(l>>0kWVFmQmu6+*J1URvM5h`lQ|E8VwkwW<2~ zRq~`RSN(L_MOSIJs;_}%cGjRX`cke_F!yoX zEtlF^rM;%laZ9V!MSK}I$P?aJpze}XuKw(|tW|uK z_EvmZy*hIA9>KyIvI?KCmMT@k!5q=c%rM!a<;kUecpl4=E#Oe?_8BbcrBHJg&*huV zuQF+lzQBXZ^Ya^n*LX~{c%9+KyOL^27qEui*-{ISUPEPmv5sgTzRul+Jum5ENiTlu z1_5^+@*FVxF1Gjycq=%X(9{L`iW}#}|E0ZQIhkbDsOU9!e75nF&}v-w8tIWzqJyzB z_2AEzZtWM!%Fx!9pW6s77a#a5SPvNFB;4YjJEIIo0Fw2U(ih5A-z{%~qI$WXkZW(J zUai`G_s?5qXfsltAU`ZWG*u;Lx?(_YimbDf@mh^Se<&)QTQDvEtLqGev|McTn^_a7}V)d}XStbNagC%1J~r3XR{ z$dJ~sItKT_Gc!rSsptVm4&lXut`?y%{Ag!1>^oe4qAO&#)`9Vy3)UN`+d@x<*5B!J z50@MMa>C^9#pOM#Y4eXhnOS?e6ffW8-sy-cFwnS#xh^`tLZoX9APnQ_1{wnoYQvp& z!Z**V&)>=QJb_gAaw-s?77#KM`=2-xt$%3m79GNVZdudExq8b{IG{7^H@tac)wj=6 zXyINusvbP;Y_1KJYh!lH-=;u!|A0=YS7ia$pvld1EIXIx zN%eX0W%Jwt<9d6lo=Htl)+fkGYQ_`Hq(={4kv%(w-`KK~9P+Ng77sBJIMBddY-4i0 zK8oGto^FPv&pBYEmXwTZ(-Xs2XH&4W2+xU?jcCN!=z49FQ{p3?Q80nxZlmYo`!HD| z`HO{N(BWr@OQSa!R`-QW(Lq|`xc^~_ztHZR;d-`;qAJw?Ch01>UyTodMmW!UnMO>p z3w3zwWz$HU^w(_P}7>6CGz7?cpLV z0i;U_n9qk$-3G))XAmy|i(Et~(@q!B8@_QsL5KDf+N3o46wxF=>=oHyp?lGY60trQ z%*WBgSCiP0ghy-EXo9~m3sAElXk7%fMm{-fpS`Uy_o%tSh~`#C$MMxzmibEg33G!Q z7B;{6>5(wI<|ElwRD8f(*N(>J;Qhu?^J|OW3yx&#n{5Srw#$}nlx+-e3$CYZxNH_G ztF^U}uO8Rq?zn3S0a@8SxH&fVab5xQXtvzDGkZ1*HxzyEI&$|c>Rax6T;y5l-#7lU zH4oqJCes+5Ef?U{20hA%KDl|^%369vDSvU{$}{o=%*5>O7}r2CX+p56v@u{ii~AwR zZfYwT6$Dg4fBSMJxFP@8@3{HgwoT7KyYZ+)s)f=@CaEf8X2BQcm(&j0ac8_D%#a#m z0@vM|rwJd0d7QX$*Bzec-ZhK1Hz7|`_54l zt!DB~NKT*gwQ#TOwUgV@rz|pBFUcJx#B(do5;9Ivgx=$q+Vv^G z|Nc~J*7lLpeU2GR9R?11eI1`qXPJA19p7-@@mS~i4a-}(31b$U2**}-Jp*srxjQUj z%=|g@c0p`lGE? zuu(C$Xp67z56ZW)Ei;)p{Q-*Y=~vwP9bB@&!9RZFV#<|*{mU6RCFJ5_F`2gItNxf* zl%`lANN?=^#t5D7Uyi!U+}FK5{F-uV`NmxSJ^egPvRi_e@3ER~z^q2^SZi%iS7&}k z-PBio@TyqeK)7l~PqCHwPKXP28{UqLQGv}f+i(F*9MtMFphwh~n| zym)$ZzFa;23F`!5pkLe~Akk`~@C(0Z>-4j!VYB%V;K=IFxcaY%_j4Ns-AT(4(k}!H zc$C>1oi|WK_$hk4IvgXKmtyKZEnGjPv#w>`$d)$cM{-*_bSq}|k>-JHw64foXCn9_}fV8tQAjiwa#UAW#*{7II! zd{H}<*j_JH$Q0K)h3^Cvi-7aX(kS36b>&TqSLpR9W0@8mT+u@KA=kc6SRFpcb~uOz z=-r)H ze3J1XY3d`&0unFZJeY7$JAMIq(86Lz=|OH%gWBaJ$%*SpY{Sts{V!oJqvfQv4!CLH z?u16z#XNxSE`gLTpQDJr_bOUJ4k!5IUTTYLe^2$A$&qX8(Tv~PjtMmCIP?jlN1u#= z=5%p=>PPS1QziUjI2s^)#r4%7U|;nvR5VZPJL0IObhz>vo~A}6Sh_3dD0N|_nWcxvEuhJZ|#DyjFuqrS0n3q)m6Wk@n78f75E% zae(O5ncj?Z*)aeX&fly{FLrs%PUD2ADMbv#r1#Wx3M#LU28ha^VtYp%ewL)pI~KdP z6H}+^_r#=5)pbzI1Mt5|RfeSwgiK2RRAnZk1X_`)`f5olIp>l=1UF{yxJu*I+gTq& zWOjOYPAZs{7U;ebsqn8Fs5IPRz>uuq-vgh3MG>a;tVI_z4Yo#M)wq=tWE)vs_oC!| z&PK_2RyM#hd~Dl;PL^0Zq?c+sxmI8jaD#1e33K|5Lt9&Ed&d)=+#Hi!>pV-j2#$5V z{>4#kD#JbJU)>5gFEB+ZYtomq(>Jo_D(NJ=W}8DX_cl%O)6%j241!(bCs@Jn)ZZpH zXdTSeCRG`f&Oxswjjm;v%#05WSGnTAL!@cmhl#i4jz+fA1_hD?_&<|e(2E>-nCD>g z4v{AlnY-*+?>EKptj(hPor^iM^e7HF;(owoX7T{Gx_NG8_!Q0_U1s3h?4@q&;{P+Y zPtUkc2JIW_@hi1G>be<-W0*n~C2j}(EYT3W^H9dj*r(w;&XYCPFrC^&vxh@c2w-## zk(Njcq53eoLZ~y{keGU7Xl0*C$S>|0U)rx_BvnM+&aPO-hRwBj>$_o1X~z+=Yj7ql zimbE(U#X0-gHO)XrbI2f;g)~l<=A-6Qpa#ytDDKvuP=7wa1&}#2?Z|C(i2loZW0s$o}Cpu$T;yUM@aiuk$M>ub??PRp`R zebMX>FXQ0Mnj-p|j~}3KNxL2}0dHAzS|xQX*Z8lL3NajV2Y^V#c>3>LG8`m)6K!77 znnU;_sB6%J3@=eCK`z_%v#eY{@HXPcn&qNg7v~LwFodFY^7RGWta`$@e@09?G&Dm* zG;o#dnvGG<;Ts!=Ng^a?+CLiY2n|ZLlDPdOLYSL&zPHZZ{P9CF1CLe|V`%>W=2&OZ zO}L$0*+4Quin{p=$0lcl|d-Fg+iKW-K~Ud%GZb*Ar`V-I9D$}S*LpQyW|qn zG3R$)RkwbU(sD7@ku2ch>`37ObHgV{lKHv2%M(ukLIHggaiRO2Tsm%bs`-SLCe*(@ z&f4t|w|C{+gS@<_%jqBK5;k&3&H#Sf#zM5SUSX2U@Th)i)DJ{?Vy8&+4e2X|{)@J_>70q{g zH`S;kSIEEmGgh)^R_RO3F;c97`mfThoyX3iBKiAf?K1lMLIE;_M{Y;aA8~n{*beoR z=!3M_42yI4xbeH!+3qla1z8&hr|dvA*M5yS(V71o`u1$no{;kANOgbHHv2sxSASaf zy6vfX6JY(zK@wnTk-+T{YKsMnr^>9nOs^GfcT1bPC2yAc%ymnM{Gi9Z^k=S=(vD1f zC(LOgqarj_w}jF8+YkfutCS3gqwdn3W0e{)0XeDMQj-ymP>U>gSdz`J^&bSTaVbZd%L|n?W|G>RccWm*c zPSO>_+5A!DC-r;VKrA}O$PIWIfHPZoBBMH>9vFga-Sk7gIh<%ic?79_q5QR>Qil%3yydE#(FppGzcCFpt2 zjif|g$cLKactx-2E7n%dMwvj>cgQExD(JnMl5iDJ}`dh)>~gY*TxrP`hc#8l{Nm^byJegtWA-*c5u^!U29R(N;82k$wzZ!bAz{% zEV}NW0>5aGZ;853t&&|7@1j0gX9W=8@elkP3R>|9{h4Z9zR32nDv0|KM{(2cO*X-3UH`HsH{tJ5%| zI(EL{?#VXs+kw4&lODJ5En;m{3NzzF>qE2aEuih$Y9?757=d8`{S>l4>al9!FOyVR zAd?^MD%`Ln_k{3a+&U-hYLgDRXaSxHc~G}HU1_&WCC!Juz{v-7zW3jvseP~OwXua* zzMkwkIFUgmW*BsR4=;4;d;_o+Y49=3cQPP7Tg-h@L-5Y>z)tlR?m^vi0g@p%9bW1h z8?0#Ma=6og`x4{g|Fx?Cq?uhi$5?w6~K1TtEGSHI<$!%?g zUb&gkyjJ750aYse>lL!4j@J2fOVWX!xA#DM9$o1+en#5lra9H*elU(t7*smb;PJ}U z**(H~rG8&}fhX?A+Rd-T(27oz^abw>MYru2_1h` z_xhDS|FXU1G}pzW$RUG!+OTA{{qbGL5~o?S8#c$vU-49WYg^V1QPB+#Wa7b0!Haa- zH(|?~^E>Zp*Alk#LGLcD_V7K*DJz+mhK-yl3lWNIteIArwu>DRw#?#xQCgPy3V!-! zJ^G=UYF}FE$qed4m_AHPua3qvesDZ~ANxYAscr6w%`GP*d?LTRO0y9Tes8*+Q<&*k zjK8iMqZ8hTqj?4NKC#xH2s$`@wwFCJ{Ax$|`Oq|T@C!lLS8z)(#&qO5`v9!wUEcwQ z%LusnfjXf2SN;BFU*S+8TQA4ADOe%?`n!y;px!sH;Axo};TT@~uLo%iCj-wR>@2Ce zuikYngj~b=(j=Psc3%ogY5#M)rlyj^%H!EP^2`c`7>kzQX?ECEqxm~ z4n{-S^k%a|OBn+ZIWrJEs(x)1)I?0n@|CLaCoUy=WRYc8#P7xHL#1XG%~4X}N^cNt zSjaoFVR_)Ba*y~FEwMw~qqO#sd~PHWo^IP69KaQ?v#7>KuUo%voiusf?7Cg+GS+Qb zw_)91>+Y?CtXn5J%GRyhxNd!D_N=2Fc%)@N%4VO_n+cr@eaB{x9%QN3@Yo1<>@kdKUaO<>N`~}7M%k7hGF~pxUS29HTYYarxbhi6$jan&R#R>V1I5x zg>$=q1eS0bxyYb&<@lC~qhX2*?b!mpcD`lm0%q#&S7{ORV*AX+g0Q0b`g#I^R_*(X zp{sV{liD%_S`yZPvR0kF?kW88$pmriT6+!ox&H7rz^zZEhY#!8pFFc1J*j0&Ug>jo zFgHFuvtU;c+;KZBJ6>+R>tp*_*I#dKmgxsrzjL)`}O|QOP zz6@MCZ+(#rRXZwEuNdZ&Z+*(Kc7qY*_xfWe6l3CV-KSUfydJ%@?$GN}?F-pIFPwJU zW^%FGV9J!4m^p4b+=2fEx+kY4*Z zq7*aeRv^Q)nA4{JxJ2C9Q&?VLvw4rHqxMyDCC}~Wr!NK42{#)#7YBQ9bGr|m3A}W2 zTs24IaAKO{iO>ceWEv-IDA>2tP^;N+OdWK3lonn&+Souz4foB*;jG; zHf~2+GS=IrE`&X<)I0NG(;2VQ6Rq>e%{ti{{oR=_w!Xcp^)}?Y*z%R;kL%-`QP)0w z$$!70QZxLERH(Y*S%2ywgDC5i)s}0Q4thUx$G=;5$?QVZ{;U@JUUNHJ^}N%X6;1d% z+6zkFU1j@}CO5Z29+m%9^17}?ryTXg)x9)hz3g1#<$PIaIU{(z$FG!Y_HSzTq!&wD zlswWhI2N|K&F~SR`}@MVpBr`-$M$XNBr7CaUl4CiRBH62+*|#v7IV@0ldc=!%V2OP zhc~nhEq&{%UBhSj=jVJ+?@amDyrb^u>zG@g8=d<$OoxpcZ3({RhF^zciyo7)|xesX*hT8)2+rsO^f63lx|r@StzW2mk7ZMxR|ZHM#crF-o|f%8*i1P^Tv zap*yJiDWQ&&!zDesrsnwdh(7d+dQIsPB3d9_5Zbx*VL}>-i4Be+w%i11-@UWwn2;EmR$qF4Ho)l_sPlVD+NOF!In0W3|JaYb$CK=Rwl{w*zCCuF^~6&< z^GG)5G$}GKQM2g%`q}fO%gmXN=>-pgPs`)E+@=|}rd|u^wz22v#U$0|uJaX{>1*cL z4**8C`xc!i8+qJ8w}U)o^QM_4n7i_+}o{?cntwn{10qSN1^6VnDIK?nOW2-vKKI zHZzC6V~_cL_Iw8Zh}aN;`HHnrU2w7(sFu?{9{;#Fr2gioSM064nBb7TA0NFTXjK<# za0gvy7B}}JyKiq=`tX6y)JYKSR=3zXY@mFHtAu>HqEXPfpgCriFWmp5u$_I{O5t;< zT9VHBUHJPp+D2?%H)Ze5wCdE&J4QM#sl~p^vh7xz(gS83;3aDrq;zY};}7~RP#TRo z-dV>K9*19bndOvvzXUONKxoiO^oQS=wiu5OpLf@(9;+XyL-y|3Gr*4VJN|sZBU8L}380ZA1UbM1E>TilQ!{tox4 zsd*q1yg`+zc{>s%tLA6}{&Fk?)A#A4{+r@AalqpHte}h%Dtq(5@VxzGc3huw^|qgh za{e2Y&$j%=s?7)wYiyoHe_P9cw0KtJM>+R9xY{J-!wH|oU!uLg|9ZE$lXxri0df~& z`>*u)VZUH+O(;%i(>!6k9*r?jaQ`A(bk1R5K*#U1$y}>4mt_#D|NTvtcmr;lCZ(S= zFD3+w6hsuhzJ_?S7SQyRyyvxUmyNYLTd#lyce z#`iGpfUbhnK#`bAZU!da8tH+gXVYD$O2+~~mY@?L4@S77fv##$xN1ORV0o}RLtWMX zX3?B*?qPXQfTLkFCKgkS$;8z4O>ZI9+D_lLB^Wmn*bEOlcsrUd8 zgzhnG zT%co+V}N4_CD@w;^J88nt@_R2ew`$3@%!z=q#$KSI)~bZ2D^|p+1zYawha=E?8-hz znj$ItjhFvAJXQYNXS{r>e6D=Fe7c;jH?p&4I>gAOt^kvYslp^+$}q^lw7_bYT5l}t zYyL>^=;FxYsLY7WXwTf`xt6(;bA@xBa|a=T5NU`tL>=M{QGmEWj3IDHDK<*-M|F1o zh(D=hE|g&ki5#BAP1y#i)~1XqF=QZCj583`ngQf5+{BV0xNeO!Ov29HhJYa76oX<$ z?nC4tnb;C+78Z+*!4_fDu{GEvEEe*RHmuv-OR<;x}CL4={XA`rD$f4{nq#{x#NrSXVlCg~md?`rWYj8YUH@hl( z7O9w>OcIgSNDZW1+otJ&w@rtqHRcYF*Ru}K9iFad93C5?*RvzWwlXd-jx1X+9xfkW zez3eZ28*gg)uOP#ufRHBEf7olN~@#Q(y)N9fI2`e0898vs3X*h0}&AM6LF9@K)iIA zyl9eSfH4j<2s8>b3^e8%a1EtHe>_lHe$IgR-f|mDn7<6uhHAqxp%@qjih&1)2EqcN zfpBgp7siEh;nD^Wm^4gUvI8m2fM!%<6lc(CkZvGt9A~6zplYOQCVGT4676*-kTZdZ1tfAI$Vki+tgc9NEq3SSos5)F%i+4WpicYWz%JJUEEIebTF*I5$X+Rh34ae@r$@cybMkT-$T7jZK0l|7E(Q_2f=}0 zX|Od|9qbKO0K0&V!EkVCP1FEAf!hM#i}RC|^k~nTSqwFX8AI{ZeP}Xkxe#Uy-$;G0 zKPdyphW6oH@uRp=yeZBUkH_Kh;ka=88g3205w{T^g^R*l;4JV>xF-B@+;Mz9E+78@ z_W(bEo51hI?Zv0yQt-EMxA1+qKD;(g8;`+Z@PW8MJQv5sOXH;Rakx0VHO?AO#1Zk5 z)rI&HTnXMA=Z$CKSa=1T0zM0ug?GWZ;D>R;cw?L~9*e``B|mb!E!74V-Igs9CXUoFi%slPA-t#LhDp<*eR#}G8 z=O*t295&3!zF@1Onw-+EHhDYXkRdYLoTLIu#cOHYub$`T{%in zRM-VG73JilcGbyS9C?1Wq)3YjFd5yhKk33zJ$WL_GBLj+Fy6t zHKE*g;JtTm)uX78?vt}0PLwf!1}PfFmRk?xv-)J1FM@PNU;16w&&}%XVjiqB9F6q5 zT9fC}=gX`PGOjaKw1&KQ4LYo7r`qjjlx&-q;+4de9!;LR1fSmb(@HRXyG~p2eN@oP zoqeuMojUc=ggM*g_wZgklNzL4r!|^1XD9n!syB++z}p2oWg4$!oAlnQH=o(VI|$P- zO;ob8d#~D?!ffa5gPk@_$gw5A2lZl@L%hQZND-X2Nat9UnC^n1tN z5@x@okkT1Rr6M~?d7<7cW|yRpkGiD#j;*8uPA`@@DycQ2B`FYNC#k^F8^dgp)X_K< z-YGxZ$?9aUkT#Q+NwOpe$&QpnB9r)}CQ0>*O_C}SmZ(BWHHYayNs)yO;mP%vfQ9I8 z$7yd~@amTElzK~AA-fwg4d;cgu3vi{aS2d}>b9E(@d8&juf2(|BoxxR!P5{Pe0Aem zvgi_`kkAdB2J;X+$g0#@ipWyzxic`Mb!&e7InpL>#>3dnKARNUJ>9i2PJ^XBdV0oL zQC;m*?tvKSAkN2358(3jOxpo>X^iDyp3k{z1DD7%?P>1T7>~gUAH!-BmuF>d4({rh zL()#)-P1n5?RRPkaQJLLSnQ))ZR8SF)=qJkp)_Qcrlgj-dt-tJPgQHWB$bi%?kQCC z_#Cf3H~ieUL+`J!7UzFpP#hbv|WmwYsap9O#M_c6)(RyTA>@0E?GsgG6l zUY5tLJIXB3ts#=nQ<;jRdYvKn`v%K>^s9}Bqh{Ne+~Jt;!FnG+HNg0(V%tu4DU8Kn z?#$T`1LH`=_C$9p%!9!%GX^0h#?O##w(hE!TZ5lwbV7`bqmb<+cMv9Uuy)2I#0>k? zwN2Aq4r4u7Fmpb{5F6>*UheLQ@gA(2F$yuoJ{xWGbJxeX43^F4g&1R_M%(AyAsF}| ze#R^W0Do%QrsOV*u^P;uIk#j0k2G!1aks;O1~D^+OD6DV_%=6pEsWz}$&Buj5j+at zPIU)kAcNQ$(;`5Pp?!7kuCtwuR|+(I*dPuSJ^eZWkurgS=SfzID9Sx~$Om@yFAc3g@3ya-3q z&f!L)8y)E-3;p~c z4;My=)*)U?HglRvGC**wkOck%p}%Mo;tik~HAS8W@dJfW(FRFR`W+aO^P~=G#aAay z2<=6O5J*A;Z4$gt!#5VXij)v2#5cgC@fmH-9XLU4jR6bas9g+du z&-G=Gk&L~v)|z`wSs_3cP;7QT!kSvBI!gn=zfI~D+tI&d%_LNxrG*fnepBF4;9WpY zD6JJ2(cfoH)>vt%&dZ-csuo+;KWRJrF<`pN)jUCC0v5ucJ z1+%nKn#9x&h+CU9=Kl))Rr4#)D?#KXSYR-gQ85$9H5i9qVxmr&+HX6-=1VCPV=kn0 z784|-cfgC&Uj!uoVof8Yalq|M(G~Z!zrb3c5jLlMz;i)y6Nl9wvhm2HK~j-{8$b~i z$JU>+@z|q962!ohNbxm}B9CMsW`o_MNm40~Ta%(9PNYA3gV&=?QaO)jlwv22us>pS zcr&|w_A``aWx78l?CSu<#>>+*KVw<80;;i?odLoPrPB|7 z^S=#0v6@rW$IK4Uk0xp+HK&RU>`}SL!t$P-w)rW4;#r|Mjw9)h+F(0vyiyG0z8|S^ z0{xjAJg2Q!pg^8(iq$yg{-h1A)8;FsKiokSXbO0oTz}!H#fHEv8RRDM__{zV5G7K0 z(|7rPkH^8mp-N;8ceF^Zk9luwYwTcbV+=L6J$5v+XB*Kim)9H{JK$cifMY&flJN-47Z+Na*UJ)*09D)LSNqGK330 zTexxg`}R&3;sEJkK8yNe1)+iDz^mc8@Gf{1yaJvHhryGYtKs$VLO2`}3@L&nLmD8_ z&0Wp8%~8#n%@vSJNEW0W5)SzYNrSXN;vqGVJjf?VD5M1P0n!ACg;YUuAf1p%NI4_} z(gsO{)Ika$-H;GSF(d`j2#J9}A=!`)NCcz|k`8HwBtU8*`H;_$Fi0sR719iegH%Iu zAzhFtNX4%dNG1dZNrKeh4`etx_}*`ljBY?j--mT%q1*2xUOuAJ&@JeAbPYNW{Rth4 zEcj?O^0p%c+{_d~rK9fB@Kr=T0rF=!|{8{L79K$oG@o0FPh z&G+sKbSpXmU5m~~e@2I)OVO$5W^^378l8)lL%&6nptaBfX!ku8gMbez+}T^&Di*3x z+egaZQam}On)3#JYmcIq_#IN4ho!diJo%+ydCH?aJE^~hA8v(?a(S|JG?*&#bJL{8 z4RdUL@O;wIVhZBt$xIy{rrL`2wI^0bF$15(2l`=+t#VHhDUcgKEZJnJc5CL|z^z@< zbQAbG#Autz!1Z+)zsW>1Ep^Lwp6zX#%y)AsrHk)DQhG!y;SRKY9JzWR(ke#!`2N3AZACvidiA#ePyW=N3rK9Ol_d|Hg6!*R@hIL-wlC^&$yXWlZLsr zQhz@A-4Y18uLqMlHvE5=<4CO^me|Vu$@jZ0P`R6DHT8IyWGm_?+waCdib34>OVO~v zR_0Hh->rW@K|J@X%P{j+(oe46&3}~cxFMRZ58G6IeA4mdcrPdF|Mo8UCR;p^nvZ^}a^lJIq5`DdDC=yBMtkIg`TnRwx=2z*a z8=KUYf}lRg0O$9uAq%e(^y#4qNKR*+)@-^`aRZY|KBT_0OKZY{zH3FBfejK+rIw(x ziNr?Ma#p=`ZbH45smj-_&ndaqh38cH>SH;-B8FPE#^sdz>UBYvkxb57t(glZhou*K zH_%%oChECQva}&%2|zCj`UOdbQt?TXHfAhM)cXqEMB<|qeLhGV<(FvcRY0eZv?z6- z3~7`6(oww~=r80$l)O($r=eL1zg{ME7)gav^-1qEHY=^un}zNpiBTY*)J~)25;r{< zbP>sj()7vfG+8b^(z}G-AhA#{&XWTSpO!G`B|*O;DNrxZ(*lg2mKNxZL3faZD5dic z0Y;xo%=PM_vq*ZB#(747$>-7)y<_Ml5*MX#o^oyYzT}x+A#@B$gHk(Bzczkf+I?R^ z{1{1sQa(?;Ho7ed(t|_M&{ZTeO6xrHTIS6IiIWH9wJ%9K@kQGRaphPer z$Psi1Y6KI43_**aLNFpI5cCKd1T!xwFOZj#mw}g@myVa3mx-5*mzI}`mywr(m!6k~ zm$`@f5&tg#pH!a$H8 z$gGan85Yy~(b99A;sAI+d4{7C+Fc}A?h0SEv906u^iKnNg7#7iVfBuE4#;wKU(5+;&p;%O3T5@-T6@imDx z2{lPZ@kWV82}S{<_@l(5grg+F~C1pEMge12knLVl7uygH&ff;vDQejRZgVI7GZ zo*R)Hfg8XL-;LOf(2e8>?}+G#;0SPpe?)vlctpa4$3(+e3mPjQe$kmP|Q$%ROdIJ z*DbL%<%Al7Q?4Q!f@up);Io>-k> z&c`k>E}Jiv<#Ea97nd5&%UTE?>1o!F%ntXzVFKk0+%Na2j8ma$1Qv|)#Q3D_vLcnt zXy~3!?8bn!#5xNOUyb=zI>@MtfvSWiJCDG+!`x;QDo{|B%g0X8WHa-On6??)-X6*M zy+36HRR5xK_R;hdGb)=zWSM;!!QNk7xBDIND_Lugu0Cr1x_0r$c6#{-7w(Sok{wCj zvqkw|kA>TOXVadTxf(0=iRUgoogSDy&JlK#&xF|}!CsRrwm3|t@i$FuF*QwCYIRwa zTAF><;d(paQ9I)erkt5$*ND{EJz_+WFYDmGGybLd*8MX_EgI}7ykOT-0at?0j=N8x z90T5eS*hbAi!I3_Qa^GC%VCkQQ;F=19C(w}RzAa-&k+m_c?o{>lLsY6$JpGE`5k)XpaP;)lMHii= z;Vj9yOD&hp=hrrWrO7|iZc`mLy`V$Lc$79&^U<*EM@wB zP@<@VW=UV626#=(X2ykITGj!3Rd|c(#uGKq()}q>3 zOpzWOOI%C*xtW(NfCAD^n9n1uP;<-xS4_8FPD`#wyP~Ym*TjNnpUctpxCBFRuY54- zu>xhZpRf4@yW^gyjn_YiJHz5i=q$14+-Nwc#qWE*oY`vrnP92?Q%qir#RZP=3<8^$ zFWF?%Xz{K)qt(u_a|?%*n>G^61Tpk*JM zck!&Gf#TPLII74Ol1W9yBt|Fk9IVm|{Tpsypk*44G-Ot#EU_A5 ze!JEy%$XPJe+JAgQ2Epn?iN zwfdYr9WY&6O4LTYh?P=dv3aun-~xnw!>THDLFtv(_LUCVOERdXi(4ptHQieQcy^!d zssP$AGJu^4UefONCB|BwDK&Vp?ndG@(b*M|C_Eh+M-$zS-HSkxlaU??EQ@b}wmTxY z76&1C?;eE$VvE994`LqUTI_zrlYY`?9@AjJx?71S%^jK;TU1(de`-uM>uwd^JKoUI zSb~$NqkAz>5Lfi2Pgn9^MJYpl(%1Le6cvI{rtWg0P} z`+mkju5>H4Sz-gRID?;9G74fLFbV(ZY6{Xn@+XA70@(2Xx8ky&L(PlXEB646_lNBy zspmhGK(>>F9*GC5cz=~%37l16pv`|MgY7maNxgD7XyBiJ6ioErNlU9o0&^8RkYZfx zxg6&Ed(YOB-H*Ev0_ndOhx^Nk&Y3`~_c&bo+5mT1de8(nU;5fgBZcUXFhVQxf_A~7 zs4yfb#hsR%ih=&8pH@@4k5 zG-X^{3_0J!Km$&W|EE|5oE&0U%wdp$i|`x*uot;dj*PbcRs@c~Jk*4@y5k2(zS7o{{ugAz0RYYtHh{1JlzI4aerUPtV3?5MwhT0l5;^|>HLe75PE0JHk|Q9YNDWIDF2ll)4+^VB zxLgZu_<)$4!9G0<4VZJ-*g<%INH@dHl6#m`2=DXj2GycxoP%oKY z|NON)%{Tm9#A{Y^ob7S!b4mC|toYzVY;o66vusNP&bjw5DSkyPXNn5BYamQ0_OYzg z9|hw3z7Cbqc(AU{eFEi1m=I+>un&HCKi_aYI$85pSMW2ZYfag_FqR``;%t&|X0sAF|!;RFg1UzsoDv_7mBKL|dq!0IjpTm?ywhy9gna8+qN zbkDf$;jbeU<3#DQW!Um&RKWF3=uv*uJKsIj;Sv4n2vc4yIv>F-9;ZH_4msxaI-uJ->2>r7_5s{tFA2? zQFUw-#tCl=t&4B$^l;Jx=xWDwgvP4AaZ!1rrt(Hc1(jSb{ShA)jtvWA|8j!}czXH_ zcJ|1w-G{y1mEA|hY`N3fRqhe8osYepgT0-R-T&KQ+qS5LUGZ>(z3MO7cy-!bVIe!` zp^NwYPGjcb6QEr)Y-JC^!C-t#0=z%I$7~4I@Yjl2`FN!XP!@+g~DuP?tA>T4S%Yj>C`i zk!SY_Snz_xyaloG<=G>1!`$!F=RCW-@Fi|xqU>fGSFOF3ux=2mTbX%dLdEvn z^>m2Mf~RywflaG}_N5#96A9Cwh_pygH;@VN2`^EARRaNAL_{wik(<>U!Y~uylKf`d zbnp`e9Z-3^Ms}94nB8((_7g81I#agWl$5(~DiGU`a>A3$w0lVigko{8STk7!j)ZW# z{aOmG6D94^w>8k;W=d}Yk(=!sn=pF%rMb1i@jBWTFB}(MmmFB6JdpMp;Y2OI4(lX? z1HZllbF$PKIZ&#jJAL{WhH3bvr1-fW@(bOgoTrhjZw}8294;s>52R;_Paqux;n}c- z|C>&H1QZK5aW)(>j>?%6acVD1HI99=HTvb&SnjZ7?9g}X<4pIhvYq2G^`VIY5_7JN z)uiFQT9vA-`>Lxk>2a>#YX6Oq0y-pyCE*mk|Fzzt}7b%ite9_yiPs3cQc?=~|ZR_ZtS{ z$P*9h5uf7;4*b$}&!5Bd$y=8M=f?B-*JIfSOIc#x+vXVH2fhz7f+fX0deu}J>Nyf; z$-nZ%=X~rtHD33tee+3Qa-}-Ferhtv2r=sfJ^x5NIUX#jf2-4Vv!I+i&uh0BHXX`x zzk{%DAGznsv&XBWTPG~xv@c}fmQo@&oMID?V4%UJYMtWHhCJoFmE;5b7 znKO}aCW9a7`Gsc%D*>Y(#v$>yBvI&nC!>+8Gv@2VTb(`P!mLsjA!P;YM4VhUGHYsu z$9YXX&rm(~NB3|9@+y2~pm3d%5c;ZUofy;4KoKLwN$#c2j%N|&^kaWN9l*bdc_i(` zVj>XlBucB*M5d66+j)wJEFqK9r0?x7FgxfX3#+xd92svAiyy?xpRi8VBGRYW_Mu>j zCe2L3Gq|gCVtkogb3rA>yUxw8z+)xpihAROl-axHTmSK8a2(9j*k@jCOb+3qgCZwXvo4G^t^EkBO5Pf(lxynnS)_r!0C)!{QsyTkf33I|{R+SzYz1Xm^8 z`%``8yWuorOj$mD>!_1EJ4rzihOB!tLh_Y}-wn#o;_Hp{r%<1k>P6p-q=W~eSXeSc zGYsrkX01V+LBQDxi^s|76um+e=?j)>Q`2caIt!Iz{3$bHONtITyXqAAP9-85?T>Sf zV|8qvmkkE1T50t+>gPk}x&A_^SldRvY%p9k0YBYZUbTI5xaC9b;syWm=1oQX)bX!Z zbR1Hj0q+KZ(@#PbJx1dB#y+ML?YVlq6p!?Y4b}o9j$0bM)sG3)Dy*EdGL564M%)46 zKJ0q~-#lVXZrxhMh~0tb#dKJ;aZ!6BF1xnEc0-U!7%gn1oz76Mu26@rdpY!a%$4!b>*RY#W|$VBGx|QYd5be22p{F+8|kn_2O3{r3NxDsIqOswO^*KZuxI-*0Tknjj@ z=i=-ZJ)IFk^EPN&GPH?L=ZD<#m4d7t)rz$X*+BbAp#Nbi9=2pb0<}5H7bEqh@ zz;PLCP;^1Ri!qik>b^KDbJP$Dph1TE-1V~lc$K+&Ew_2LPN`5twrxph{6Jr)cyZj2 z>Omy(Y=?9eZ&~?KqkM2<>_K`zfWl9bj|aQGs&D3$DWtXv!wmZqH+D}|$wuh{?(So} zvC6iS_?%}iymj|8rz2=DqhF(?HcW(VbfiSSVa$-5?~F4Yp7bf}j|<_KG0K+YQI%w; zBl#NNC%t$yWW;i9G;nbj5x{jKeIJoTMOv+zlP=-BY`F}fre21z#@@J^I_&#sC)J`aPhpMK_PyyDoMQhndjNo`izjMpllh;#joEq4X%k?_KjiLjuEr)$c^*o-T33`(Jv3N|>fP;K$xyQ0&IJp1z;9)n0tNZmTO_Pf z^vcftOojzFb6YaOsk9jg`}0RAN*2Nr^;#(`+85KG)YZD7#pK{?=IjKpzBsw4D)yvW zRxF2lKY6*8(b#W$^cgz=y=^mpG~>@1`CJ~`f%?Rio)i9karfH6uPu6Cfp`-@HbroJ zn;j_ecjjZ-c=G%g3~UFAgS6H?EY@(A5^WawVlwSXws-oEt}Tp3NGH(33R)s(qCCH; z2l=;5S}NS*Amv(aLZtwgL$~oEugScnFxuXaeS?pGajp)H6Sn18F_IcF3E4+B``GK= zjeIHK_AS((iR`mBqQ{x1plaf%qSTHB$5bhP4%f|ebT2JS_~7n}Q`2^*9Oq8#QtmSx z9^WHpKpnH&N8sC<4w?0KY0(&WlliEWrV{r!1@M}cxJ2<(bv06shtfpMZEpDVuoffDZ{}()GevR!Z{O+o+Awx5?vLLx52_@n zugR)w%M@A?v2`kTD&yli;N#lP_xpJ$^W=*AP_5)(??<2UNUEEVo>|$Z7ZcB7!R?C& zz6|K!a2b>A-}M(Xg7mVS-G<~d&vWjLvz);Nn|bcko$?+9`Jr`yFdc8RCoUCY^zcKw{MQ*wjm^5lu=3VNtp z&V*tF4^^|g%SMnYGM@?aM9!bkb8!x z`92$B>dbd4pM!6scHcML(a|N4Sf`nqPPG2E{p)uA#!YH_Y#1Xt+bIFxLO%NA1*tSt zanK}29X4s-{sVvUCB4C?x1i1M<-R6t_-rwJLI}0RcIQ1Tup)M%!l8*{K6M5aHTFw) zJ8KxT=}to0Wh==}H|^n*+!^8ml?0x{6_o=o`tyd)>L=HYlDDolRcH$?OSyRH9eOOQ z374;rkfV>#j_aEE^0iZ|K39P7ZB|QxSgvKlKpdEH8)ilTl(T#AOh4{Xc75n)qu%%$ zau;2e_z+sCU?J6qBX0UT7}QA2<>D>QEgGovs(2>3FH4(VEwo>YL`^ra=ragQgznXv zrE(}%bN>sY1<@~iCKNmJz@NQs9D-M9T5bKwT9$~HA$A5chhFO4BkC<}AtSp=-`MjK zqxg{%dRKo`ul@}6F}WJUl{~r->e;#4ao!*EPiuum?QDnU(qf+I=+G_ouW{l?2(?3d zHHh7u-{^$p(k)G|mE%Z=wS(l8|3R*yqpfvuN=yWZlbSBu(2=tBUER*Z4Y?(8tf&N9 zN!d-#lPHH*x_mOEUdF~Cjelp0cxXWD4r-W6^qE>@KxTf`Ry7m%;T0C~jChLNYbT6ZQezpqMG=ykdr3*4l;D;tfXiyBg z@q!lw0%7O zrK`65q2J)fQ&~XpeVXb+Of`VMylpHbv$P=00ua?T0e{S6zJ_$H(o(@-jz=%#GI_b`xy(Td!Mj>+UZ!0MKC?A3k$Ic<;O0>v=*9t@ z^3+>+|B(Xo$?xY8akdXDbRsC=p%Z#9Qgs`uxeckQmc;Zb7`q~hrkq%Idq;HER9}8!TiH|uDmT*BQ=SqHwFFg=WR~f%`g)a zT&5=V6vNjF@=Amy%ihd%SM%=hgU0lQpm~+JTYKWDgb}+aibpYgOn~gYTa5fk^VmZe z=pvUpmo4!!{i(Rn3WDwk4>j*TA}t--T?f4lQ^2~tcWP|X{z)#ojU)}Z;cW8uHdnTN z@Ud1{q>R{^HHrpe^+;2A9yu#Fy}Yu9gfE;lv^GZIS-& z`vZ*p!iUHY)m)4X;k-2zw%qC8Ot~BRRKXRKD=TYG+$rC67Zf8@O~Rer6bkImq$z6c z#98a1GfvJaPh96(M8(22*6ovA(*0v|My)X)^eqN_seAa<`^vdEjgbU&YOtcGA zVV}P-310X=ZEKHyxFPVeUtAn0p}|9+eJm>Ws&6#L=4q0T7gyyM8Y(V(?3i@nGg&8C zKW~|9{8AdQw1Z~)wKcVoI%&@0#~zy8bOnAFD@dSn|%Ye|0pR!o=f|3Ll#Q^KV|3Z^^~pfLAOF3Ii-a)gqFrC-a15#MG+)7MPnSDxr60g70_(?f z-18iw6CaT^*-!QuU&N2>i#CUl13^b3n_Y-<8AF8nyxd*tyns~E-opOt7Pacsn$ea{ z8c&B-N^4)CB`qQAw~fd^X%V5JguBs%vmNP|<$A`4wG|u^JI~!jAxv$B{pITFP7Mi5 zJH@?i0n6VsnP|bA^CJnE$%s{)l!=eDAn#A9?^gMn`0~54&kQMiWeTKy_YhvmGh>OW%ClwxlII^XdPS zzH;&`CHC5^_?|$GNVphI=pIgp98S<2PM{u6SQ$zvA4(Viz$urw!jtrnXI)udc6H;<<4n}*(mjEaszFUYw<*AC45E1&T;5lTH_N6 zo$~UUTwxJAH`OqDx~1{8NE`{#_TpY*VmHS(3h(qn!YB);BE`Q7yX@+}K0{-acCGvS z<=LF9^uA$zY|X}IW3h!Zn9o4OK=l0~J?&gx+YhCV>?e)FjveL&+Z%BMY8&x~`VFM8sb?`b>o|8fbvWWUIQlr6MOnd9&v0-hvEzg)+QGV32YB&w zYvW{?+t3idE=f8d(1=0$gF;Ve%Ja3JRK)t2)mZrm%lFZt($=t3$UaWSN`g8OKfRHT NDMp1hFB${m{{V&DCTjoy literal 0 HcmV?d00001 diff --git a/doc/1.5.5/gug/_static/css/fonts/lato-bold-italic.woff2 b/doc/1.5.5/gug/_static/css/fonts/lato-bold-italic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..c4e3d804b57b625b16a36d767bfca6bbf63d414e GIT binary patch literal 193308 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

      l?s7}*4vp!2W|88=L^r| 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

      nR1?qM=|aYy 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

      F}woT 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"bt0}@AlIHaMn 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 literal 0 HcmV?d00001 diff --git a/doc/1.5.5/gug/_static/css/fonts/lato-bold.woff2 b/doc/1.5.5/gug/_static/css/fonts/lato-bold.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..bb195043cfc07fa52741c6144d7378b5ba8be4c5 GIT binary patch literal 184912 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

      x{o9f|7gEmo2*wv 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 z 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≶M9Zv|5`G?V+t`dH%WEMXqpk;_3Hk#c)5bow}^>GHdOg=@5pYx=49b13Ly zrJynzDRebu8rnRSaDCBo@|9g53n?-Toj%;)7@=UY|Noy}Ma{<^CTZW`I9PGat{6t2 zaDw4J3oUfqrNwG{*q4kXjQO#)d%E?I`6unq0@g?R`EPa45Y|xpiRX?D^@^QqfPjrp z`1!tA9;wNGs_VH%HtUBo8*1_;v~g)avtfdTTKYQ+w|_T@R1|@!z4MWbhw@XQ#{r8n zFBZwGL~*S&Epds65DN=S9LDmC%OD``N?Ja3mq@-KYHmwkg<5GJXlu`C1U~hF;}GUt zEV_svDDRB0pxY;h0iVB6!+t9MoPjoUN2{tnNvmp71!_;3|F6OefCDX3EgVYSHa&Y~ zU}M_~aPglu-?Am;VW9ar%IVbGkq@`{Tq5wAt!;iU^4x0?c1udN{X&%ux4V&|KJ4W8 z^-G%6%-Mk6r|NGgPt?6Gz6|&!zRxhaV4(F`GZ8rK4j__!PX?Q7^;*CQ1mh5%DvR6C z?e!IxGMT8~xw^^9NiPO6=pQ@SRODn~Fsq8jD|VmScW#=CFmzog>dWa9ISWyD>bX6* zxnZ#2TwN0;af`pj^X|5h-UR+^#wtJ!B@tKiK!pf5VjK5!fZLt zzX!?qwZ#;g@k9fI%Zc#zkaZg@VAO57d!5O3Ue&0UhOx8iALeb!OI zRvYFgz{G^aMMxIXA9Q8%Ks(ns{Ng8LwsDMRXV9_!HbeTZg#-D*^A&&kWc>8s7s|rI z=ynSoO>Z_is~m>%blt}gX#It_>e2=$ntV|mjceXzzfgYM^uWLH4|qn@T1Vx$y+(mB zr_oTl_0pJ8ZR}4L)pN;gX0*r7gHMr7oprWF%6?*dA?da-61JtJNHWwP^#36TIN#Kl zHX65H`VqI9GB?_ee-?H!Yb?FpyYadu!+UaImNKBnpF_sZf6ay)B7}^R1hodXNP?eK z4UhCNG=>^Ra(w)t-DekO(;#W^pCZ0-I00f84I3?O?7O zB%x)J$UIIl{lRxlFHDbkes}4Xh27aeZ@lufb-e26$_f|NxU&YtVUJG#2x>BxrM_VU z1LCx!(BL?8gDF{Vq$J)xNc>yL)$=)7I*g|%)(&0-;j8CsUSvGa_^S6DVMpH zb8v0T>G{!ohHICj*>1fftNM+zZtws0KCZLv(IK>C_QT1EH@fD(8$2iPv~!>Y4cV!P zSZxtr!>L43HPE+4<>ftO;-5eywKK$aj&E__@NZF$Ub2O545&GURXRcHZf+@4Q*sxY zWp376swn?@b?YH5czxG41HZOjt)n5ymnfWVn}~l0v!W9f09Qb$zl@4>j!2BD$PIWy zG%tHq1co&qIS~ddbB3;u@9Dn~xdsYnr5s8^`W*i3m@VDEnOB&F?o#)Rs5v1eUah$w>#9 z(>0sd(bH1S1!0KMO_Fm9-(30B*tAvEi!I8bj@kN6Z10~`=5`eh*Oh@TSgc~GARo=W z<9@k$y19A1xpq3jbDRG4LD38!4XW&4?>FThiiaoIiVSTRo?|YzPPb-muv!>myEIOW zt#-bt4&U((ZdDWewL`sy(~|m2`BN@QF+Q{|G9ZCrd6ta$KC*E*TQ_G)_3NXw*H*CY zbEL^@$wN>XGaLNe4bu&0*GJMUg5zS=CN)LQyqHShcMq=mcw_4h9+%ozHC=V~`$%?N z`DWW#&TppMgR}4%!g!nK9J8-_y1Mk=F&oUrC@E68`W@5@I(HpHbiw(p1ld9~Keub^ z`qq-^lE(GMES@?`16xSt_yAA?b$A0;omip zd;&xiYAZP+=TTDO@|)ZHN*1!_{_wQ@i@zy5-UG{`HCbB7dqN5AgmRL@R~5 z-KAmZe7J3gow^U;9@e_R+QBj&j{H=={FCM3!&hwmwI9#NDh>OjBmRdo%0A!wRKaXY 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

      ql>W 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

    vLnX>k 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 literal 0 HcmV?d00001 diff --git a/doc/1.5.5/gug/_images/edit-group-memberships.png b/doc/1.5.5/gug/_images/edit-group-memberships.png new file mode 100644 index 0000000000000000000000000000000000000000..384537317486e4ebd2c7f4745df5bcda4d3208be GIT binary patch literal 31653 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 A(5&9ZIsaGAk~~8CJZ!bA1308zI^$T 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 J|GxFB{{{o@w0Qsk literal 0 HcmV?d00001 diff --git a/doc/1.5.5/gug/_images/edit-sharing-profile.png b/doc/1.5.5/gug/_images/edit-sharing-profile.png new file mode 100644 index 0000000000000000000000000000000000000000..77d34f34c6ec5556fd91f261c286ba8d62a81e40 GIT binary patch literal 22420 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 LJCk_&*WdmJTHj%( literal 0 HcmV?d00001 diff --git a/doc/1.5.5/gug/_images/edit-user-group.png b/doc/1.5.5/gug/_images/edit-user-group.png new file mode 100644 index 0000000000000000000000000000000000000000..16dbae8bb9ea2f7b26f2d36c8277a57f2449fb98 GIT binary patch literal 129269 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

  • KG;L^ptCKQ+}s!Q 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

    "),i=e.children()[0];return y("body").append(e),t=i.offsetWidth,e.css("overflow","scroll"),t===(i=i.offsetWidth)&&(i=e[0].clientWidth),e.remove(),s=t-i},getScrollInfo:function(t){var e=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),i=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),e="scroll"===e||"auto"===e&&t.widthx(D(s),D(n))?o.important="horizontal":o.important="vertical",p.using.call(this,t,o)}),h.offset(y.extend(l,{using:t}))})},y.ui.position={fit:{left:function(t,e){var i=e.within,s=i.isWindow?i.scrollLeft:i.offset.left,n=i.width,o=t.left-e.collisionPosition.marginLeft,h=s-o,a=o+e.collisionWidth-n-s;e.collisionWidth>n?0n?0=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),y.ui.plugin={add:function(t,e,i){var s,n=y.ui[t].prototype;for(s in i)n.plugins[s]=n.plugins[s]||[],n.plugins[s].push([e,i[s]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;n").css({overflow:"hidden",position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,t={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(t),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(t),this._proportionallyResize()),this._setupHandles(),e.autoHide&&y(this.element).on("mouseenter",function(){e.disabled||(i._removeClass("ui-resizable-autohide"),i._handles.show())}).on("mouseleave",function(){e.disabled||i.resizing||(i._addClass("ui-resizable-autohide"),i._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy(),this._addedHandles.remove();function t(t){y(t).removeData("resizable").removeData("ui-resizable").off(".resizable")}var e;return this.elementIsWrapper&&(t(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),t(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;case"aspectRatio":this._aspectRatio=!!e}},_setupHandles:function(){var t,e,i,s,n,o=this.options,h=this;if(this.handles=o.handles||(y(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=y(),this._addedHandles=y(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),i=this.handles.split(","),this.handles={},e=0;e"),this._addClass(n,"ui-resizable-handle "+s),n.css({zIndex:o.zIndex}),this.handles[t]=".ui-resizable-"+t,this.element.children(this.handles[t]).length||(this.element.append(n),this._addedHandles=this._addedHandles.add(n));this._renderAxis=function(t){var e,i,s;for(e in t=t||this.element,this.handles)this.handles[e].constructor===String?this.handles[e]=this.element.children(this.handles[e]).first().show():(this.handles[e].jquery||this.handles[e].nodeType)&&(this.handles[e]=y(this.handles[e]),this._on(this.handles[e],{mousedown:h._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(i=y(this.handles[e],this.element),s=/sw|ne|nw|se|n|s/.test(e)?i.outerHeight():i.outerWidth(),i=["padding",/ne|nw|n/.test(e)?"Top":/se|sw|s/.test(e)?"Bottom":/^e$/.test(e)?"Right":"Left"].join(""),t.css(i,s),this._proportionallyResize()),this._handles=this._handles.add(this.handles[e])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){h.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),h.axis=n&&n[1]?n[1]:"se")}),o.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._addedHandles.remove()},_mouseCapture:function(t){var e,i,s=!1;for(e in this.handles)(i=y(this.handles[e])[0])!==t.target&&!y.contains(i,t.target)||(s=!0);return!this.options.disabled&&s},_mouseStart:function(t){var e,i,s=this.options,n=this.element;return this.resizing=!0,this._renderProxy(),e=this._num(this.helper.css("left")),i=this._num(this.helper.css("top")),s.containment&&(e+=y(s.containment).scrollLeft()||0,i+=y(s.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:e,top:i},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:n.width(),height:n.height()},this.originalSize=this._helper?{width:n.outerWidth(),height:n.outerHeight()}:{width:n.width(),height:n.height()},this.sizeDiff={width:n.outerWidth()-n.width(),height:n.outerHeight()-n.height()},this.originalPosition={left:e,top:i},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio="number"==typeof s.aspectRatio?s.aspectRatio:this.originalSize.width/this.originalSize.height||1,s=y(".ui-resizable-"+this.axis).css("cursor"),y("body").css("cursor","auto"===s?this.axis+"-resize":s),this._addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var e=this.originalMousePosition,i=this.axis,s=t.pageX-e.left||0,e=t.pageY-e.top||0,i=this._change[i];return this._updatePrevProperties(),i&&(e=i.apply(this,[t,s,e]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(e=this._updateRatio(e,t)),e=this._respectSize(e,t),this._updateCache(e),this._propagate("resize",t),e=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),y.isEmptyObject(e)||(this._updatePrevProperties(),this._trigger("resize",t,this.ui()),this._applyChanges())),!1},_mouseStop:function(t){this.resizing=!1;var e,i,s,n=this.options,o=this;return this._helper&&(s=(e=(i=this._proportionallyResizeElements).length&&/textarea/i.test(i[0].nodeName))&&this._hasScroll(i[0],"left")?0:o.sizeDiff.height,i=e?0:o.sizeDiff.width,e={width:o.helper.width()-i,height:o.helper.height()-s},i=parseFloat(o.element.css("left"))+(o.position.left-o.originalPosition.left)||null,s=parseFloat(o.element.css("top"))+(o.position.top-o.originalPosition.top)||null,n.animate||this.element.css(y.extend(e,{top:s,left:i})),o.helper.height(o.size.height),o.helper.width(o.size.width),this._helper&&!n.animate&&this._proportionallyResize()),y("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s=this.options,n={minWidth:this._isNumber(s.minWidth)?s.minWidth:0,maxWidth:this._isNumber(s.maxWidth)?s.maxWidth:1/0,minHeight:this._isNumber(s.minHeight)?s.minHeight:0,maxHeight:this._isNumber(s.maxHeight)?s.maxHeight:1/0};(this._aspectRatio||t)&&(e=n.minHeight*this.aspectRatio,i=n.minWidth/this.aspectRatio,s=n.maxHeight*this.aspectRatio,t=n.maxWidth/this.aspectRatio,e>n.minWidth&&(n.minWidth=e),i>n.minHeight&&(n.minHeight=i),st.width,h=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,a=this.originalPosition.left+this.originalSize.width,r=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),i=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),h&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=a-e.minWidth),s&&l&&(t.left=a-e.maxWidth),h&&i&&(t.top=r-e.minHeight),n&&i&&(t.top=r-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];e<4;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;e").css({overflow:"hidden"}),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++e.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize;return{left:this.originalPosition.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize;return{top:this.originalPosition.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},sw:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,e,i]))},ne:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},nw:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,e,i]))}},_propagate:function(t,e){y.ui.plugin.call(this,t,[e,this.ui()]),"resize"!==t&&this._trigger(t,e,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),y.ui.plugin.add("resizable","animate",{stop:function(e){var i=y(this).resizable("instance"),t=i.options,s=i._proportionallyResizeElements,n=s.length&&/textarea/i.test(s[0].nodeName),o=n&&i._hasScroll(s[0],"left")?0:i.sizeDiff.height,h=n?0:i.sizeDiff.width,n={width:i.size.width-h,height:i.size.height-o},h=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,o=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(y.extend(n,o&&h?{top:o,left:h}:{}),{duration:t.animateDuration,easing:t.animateEasing,step:function(){var t={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};s&&s.length&&y(s[0]).css({width:t.width,height:t.height}),i._updateCache(t),i._propagate("resize",e)}})}}),y.ui.plugin.add("resizable","containment",{start:function(){var i,s,n=y(this).resizable("instance"),t=n.options,e=n.element,o=t.containment,h=o instanceof y?o.get(0):/parent/.test(o)?e.parent().get(0):o;h&&(n.containerElement=y(h),/document/.test(o)||o===document?(n.containerOffset={left:0,top:0},n.containerPosition={left:0,top:0},n.parentData={element:y(document),left:0,top:0,width:y(document).width(),height:y(document).height()||document.body.parentNode.scrollHeight}):(i=y(h),s=[],y(["Top","Right","Left","Bottom"]).each(function(t,e){s[t]=n._num(i.css("padding"+e))}),n.containerOffset=i.offset(),n.containerPosition=i.position(),n.containerSize={height:i.innerHeight()-s[3],width:i.innerWidth()-s[1]},t=n.containerOffset,e=n.containerSize.height,o=n.containerSize.width,o=n._hasScroll(h,"left")?h.scrollWidth:o,e=n._hasScroll(h)?h.scrollHeight:e,n.parentData={element:h,left:t.left,top:t.top,width:o,height:e}))},resize:function(t){var e=y(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.position,o=e._aspectRatio||t.shiftKey,h={top:0,left:0},a=e.containerElement,t=!0;a[0]!==document&&/static/.test(a.css("position"))&&(h=s),n.left<(e._helper?s.left:0)&&(e.size.width=e.size.width+(e._helper?e.position.left-s.left:e.position.left-h.left),o&&(e.size.height=e.size.width/e.aspectRatio,t=!1),e.position.left=i.helper?s.left:0),n.top<(e._helper?s.top:0)&&(e.size.height=e.size.height+(e._helper?e.position.top-s.top:e.position.top),o&&(e.size.width=e.size.height*e.aspectRatio,t=!1),e.position.top=e._helper?s.top:0),i=e.containerElement.get(0)===e.element.parent().get(0),n=/relative|absolute/.test(e.containerElement.css("position")),i&&n?(e.offset.left=e.parentData.left+e.position.left,e.offset.top=e.parentData.top+e.position.top):(e.offset.left=e.element.offset().left,e.offset.top=e.element.offset().top),n=Math.abs(e.sizeDiff.width+(e._helper?e.offset.left-h.left:e.offset.left-s.left)),s=Math.abs(e.sizeDiff.height+(e._helper?e.offset.top-h.top:e.offset.top-s.top)),n+e.size.width>=e.parentData.width&&(e.size.width=e.parentData.width-n,o&&(e.size.height=e.size.width/e.aspectRatio,t=!1)),s+e.size.height>=e.parentData.height&&(e.size.height=e.parentData.height-s,o&&(e.size.width=e.size.height*e.aspectRatio,t=!1)),t||(e.position.left=e.prevPosition.left,e.position.top=e.prevPosition.top,e.size.width=e.prevSize.width,e.size.height=e.prevSize.height)},stop:function(){var t=y(this).resizable("instance"),e=t.options,i=t.containerOffset,s=t.containerPosition,n=t.containerElement,o=y(t.helper),h=o.offset(),a=o.outerWidth()-t.sizeDiff.width,o=o.outerHeight()-t.sizeDiff.height;t._helper&&!e.animate&&/relative/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o}),t._helper&&!e.animate&&/static/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o})}}),y.ui.plugin.add("resizable","alsoResize",{start:function(){var t=y(this).resizable("instance").options;y(t.alsoResize).each(function(){var t=y(this);t.data("ui-resizable-alsoresize",{width:parseFloat(t.width()),height:parseFloat(t.height()),left:parseFloat(t.css("left")),top:parseFloat(t.css("top"))})})},resize:function(t,i){var e=y(this).resizable("instance"),s=e.options,n=e.originalSize,o=e.originalPosition,h={height:e.size.height-n.height||0,width:e.size.width-n.width||0,top:e.position.top-o.top||0,left:e.position.left-o.left||0};y(s.alsoResize).each(function(){var t=y(this),s=y(this).data("ui-resizable-alsoresize"),n={},e=t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];y.each(e,function(t,e){var i=(s[e]||0)+(h[e]||0);i&&0<=i&&(n[e]=i||null)}),t.css(n)})},stop:function(){y(this).removeData("ui-resizable-alsoresize")}}),y.ui.plugin.add("resizable","ghost",{start:function(){var t=y(this).resizable("instance"),e=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}),t._addClass(t.ghost,"ui-resizable-ghost"),!1!==y.uiBackCompat&&"string"==typeof t.options.ghost&&t.ghost.addClass(this.options.ghost),t.ghost.appendTo(t.helper)},resize:function(){var t=y(this).resizable("instance");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=y(this).resizable("instance");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),y.ui.plugin.add("resizable","grid",{resize:function(){var t,e=y(this).resizable("instance"),i=e.options,s=e.size,n=e.originalSize,o=e.originalPosition,h=e.axis,a="number"==typeof i.grid?[i.grid,i.grid]:i.grid,r=a[0]||1,l=a[1]||1,u=Math.round((s.width-n.width)/r)*r,p=Math.round((s.height-n.height)/l)*l,d=n.width+u,c=n.height+p,f=i.maxWidth&&i.maxWidthd,s=i.minHeight&&i.minHeight>c;i.grid=a,m&&(d+=r),s&&(c+=l),f&&(d-=r),g&&(c-=l),/^(se|s|e)$/.test(h)?(e.size.width=d,e.size.height=c):/^(ne)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.top=o.top-p):/^(sw)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.left=o.left-u):((c-l<=0||d-r<=0)&&(t=e._getPaddingPlusBorderDimensions(this)),0=f[g]?0:Math.min(f[g],n));!a&&1-1){targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if(session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)}closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if(session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE,function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList,finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight()));return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")}function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(),elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight,viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.topviewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.leftviewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery);/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017 + * http://www.smartmenus.org/ + * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)),mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend($.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy(this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData("smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('
    ').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?(this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for(var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if((!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&(this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass("highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]")||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('')[0],$('')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"),a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i,downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2))&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0),canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}},rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})}return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1,bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$}); \ No newline at end of file diff --git a/doc/1.5.5/libguac-terminal/menu.js b/doc/1.5.5/libguac-terminal/menu.js new file mode 100644 index 000000000..717761d01 --- /dev/null +++ b/doc/1.5.5/libguac-terminal/menu.js @@ -0,0 +1,134 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { + function makeTree(data,relPath) { + let result=''; + if ('children' in data) { + result+='
      '; + for (let i in data.children) { + let url; + const link = data.children[i].url; + if (link.substring(0,1)=='^') { + url = link.substring(1); + } else { + url = relPath+link; + } + result+='
    • '+ + data.children[i].text+''+ + makeTree(data.children[i],relPath)+'
    • '; + } + result+='
    '; + } + return result; + } + let searchBoxHtml; + if (searchEnabled) { + if (serverSide) { + searchBoxHtml='
    '+ + '
    '+ + '
     '+ + ''+ + '
    '+ + '
    '+ + '
    '+ + '
    '; + } else { + searchBoxHtml='
    '+ + ''+ + ' '+ + ''+ + ''+ + ''+ + ''+ + ''+ + '
    '; + } + } + + $('#main-nav').before('
    '+ + ''+ + ''+ + '
    '); + $('#main-nav').append(makeTree(menudata,relPath)); + $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); + if (searchBoxHtml) { + $('#main-menu').append('
  • '); + } + const $mainMenuState = $('#main-menu-state'); + let prevWidth = 0; + if ($mainMenuState.length) { + const initResizableIfExists = function() { + if (typeof initResizable==='function') initResizable(); + } + // animate mobile menu + $mainMenuState.change(function() { + const $menu = $('#main-menu'); + let options = { duration: 250, step: initResizableIfExists }; + if (this.checked) { + options['complete'] = () => $menu.css('display', 'block'); + $menu.hide().slideDown(options); + } else { + options['complete'] = () => $menu.css('display', 'none'); + $menu.show().slideUp(options); + } + }); + // set default menu visibility + const resetState = function() { + const $menu = $('#main-menu'); + const newWidth = $(window).outerWidth(); + if (newWidth!=prevWidth) { + if ($(window).outerWidth()<768) { + $mainMenuState.prop('checked',false); $menu.hide(); + $('#searchBoxPos1').html(searchBoxHtml); + $('#searchBoxPos2').hide(); + } else { + $menu.show(); + $('#searchBoxPos1').empty(); + $('#searchBoxPos2').html(searchBoxHtml); + $('#searchBoxPos2').show(); + } + if (typeof searchBox!=='undefined') { + searchBox.CloseResultsWindow(); + } + prevWidth = newWidth; + } + } + $(window).ready(function() { resetState(); initResizableIfExists(); }); + $(window).resize(resetState); + } + $('#main-menu').smartmenus(); +} +/* @license-end */ diff --git a/doc/1.5.5/libguac-terminal/menudata.js b/doc/1.5.5/libguac-terminal/menudata.js new file mode 100644 index 000000000..adad8e6ce --- /dev/null +++ b/doc/1.5.5/libguac-terminal/menudata.js @@ -0,0 +1,44 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file +*/ +var menudata={children:[ +{text:"Main Page",url:"index.html"}, +{text:"Related Pages",url:"pages.html"}, +{text:"Data Structures",url:"annotated.html",children:[ +{text:"Data Structures",url:"annotated.html"}, +{text:"Data Structure Index",url:"classes.html"}, +{text:"Data Fields",url:"functions.html",children:[ +{text:"All",url:"functions.html"}, +{text:"Variables",url:"functions_vars.html"}]}]}, +{text:"Files",url:"files.html",children:[ +{text:"File List",url:"files.html"}, +{text:"Globals",url:"globals.html",children:[ +{text:"All",url:"globals.html",children:[ +{text:"g",url:"globals.html#index_g"}]}, +{text:"Functions",url:"globals_func.html",children:[ +{text:"g",url:"globals_func.html#index_g"}]}, +{text:"Typedefs",url:"globals_type.html"}, +{text:"Enumerations",url:"globals_enum.html"}, +{text:"Enumerator",url:"globals_eval.html"}, +{text:"Macros",url:"globals_defs.html"}]}]}]} diff --git a/doc/1.5.5/libguac-terminal/minus.svg b/doc/1.5.5/libguac-terminal/minus.svg new file mode 100644 index 000000000..f70d0c1a1 --- /dev/null +++ b/doc/1.5.5/libguac-terminal/minus.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/doc/1.5.5/libguac-terminal/minusd.svg b/doc/1.5.5/libguac-terminal/minusd.svg new file mode 100644 index 000000000..5f8e87962 --- /dev/null +++ b/doc/1.5.5/libguac-terminal/minusd.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/doc/1.5.5/libguac-terminal/nav_f.png b/doc/1.5.5/libguac-terminal/nav_f.png new file mode 100644 index 0000000000000000000000000000000000000000..72a58a529ed3a9ed6aa0c51a79cf207e026deee2 GIT binary patch literal 153 zcmeAS@N?(olHy`uVBq!ia0vp^j6iI`!2~2XGqLUlQVE_ejv*C{Z|{2ZH7M}7UYxc) zn!W8uqtnIQ>_z8U literal 0 HcmV?d00001 diff --git a/doc/1.5.5/libguac-terminal/nav_fd.png b/doc/1.5.5/libguac-terminal/nav_fd.png new file mode 100644 index 0000000000000000000000000000000000000000..032fbdd4c54f54fa9a2e6423b94ef4b2ebdfaceb GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^j6iI`!2~2XGqLUlQU#tajv*C{Z|C~*H7f|XvG1G8 zt7aS*L7xwMeS}!z6R#{C5tIw-s~AJ==F^i}x3XyJseHR@yF& zerFf(Zf;Dd{+(0lDIROL@Sj-Ju2JQ8&-n%4%q?>|^bShc&lR?}7HeMo@BDl5N(aHY Uj$gdr1MOz;boFyt=akR{0D!zeaR2}S literal 0 HcmV?d00001 diff --git a/doc/1.5.5/libguac-terminal/nav_g.png b/doc/1.5.5/libguac-terminal/nav_g.png new file mode 100644 index 0000000000000000000000000000000000000000..2093a237a94f6c83e19ec6e5fd42f7ddabdafa81 GIT binary patch literal 95 zcmeAS@N?(olHy`uVBq!ia0vp^j6lrB!3HFm1ilyoDK$?Q$B+ufw|5PB85lU25BhtE tr?otc=hd~V+ws&_A@j8Fiv!KF$B+ufw|5=67#uj90@pIL wZ=Q8~_Ju`#59=RjDrmm`tMD@M=!-l18IR?&vFVdQ&MBb@0HFXL6W-eg#Jd_@e6*DPn)w;=|1H}Zvm9l6xXXB%>yL=NQU;mg M>FVdQ&MBb@0Bdt1Qvd(} literal 0 HcmV?d00001 diff --git a/doc/1.5.5/libguac-terminal/open.png b/doc/1.5.5/libguac-terminal/open.png new file mode 100644 index 0000000000000000000000000000000000000000..30f75c7efe2dd0c9e956e35b69777a02751f048b GIT binary patch literal 123 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{VPM$7~Ar*{o?;hlAFyLXmaDC0y znK1_#cQqJWPES%4Uujug^TE?jMft$}Eq^WaR~)%f)vSNs&gek&x%A9X9sM + + + + + + +libguac-terminal: Related Pages + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac-terminal 1.5.5 +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Related Pages
    +
    +
    +
    Here is a list of all related documentation pages:
    + + +
     Deprecated List
    +
    +
    + + + + diff --git a/doc/1.5.5/libguac-terminal/plus.svg b/doc/1.5.5/libguac-terminal/plus.svg new file mode 100644 index 000000000..075201655 --- /dev/null +++ b/doc/1.5.5/libguac-terminal/plus.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/doc/1.5.5/libguac-terminal/plusd.svg b/doc/1.5.5/libguac-terminal/plusd.svg new file mode 100644 index 000000000..0c65bfe94 --- /dev/null +++ b/doc/1.5.5/libguac-terminal/plusd.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/doc/1.5.5/libguac-terminal/search/all_0.js b/doc/1.5.5/libguac-terminal/search/all_0.js new file mode 100644 index 000000000..ccbcb5139 --- /dev/null +++ b/doc/1.5.5/libguac-terminal/search/all_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['backspace_0',['backspace',['../structguac__terminal__options.html#a49e8dc2b85989a0a769c74518ad7260d',1,'guac_terminal_options']]] +]; diff --git a/doc/1.5.5/libguac-terminal/search/all_1.js b/doc/1.5.5/libguac-terminal/search/all_1.js new file mode 100644 index 000000000..a06bcc01d --- /dev/null +++ b/doc/1.5.5/libguac-terminal/search/all_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['color_5fscheme_0',['color_scheme',['../structguac__terminal__options.html#a2a13c286dc09328bdcfea511c40eb776',1,'guac_terminal_options']]] +]; diff --git a/doc/1.5.5/libguac-terminal/search/all_2.js b/doc/1.5.5/libguac-terminal/search/all_2.js new file mode 100644 index 000000000..2cfa3af21 --- /dev/null +++ b/doc/1.5.5/libguac-terminal/search/all_2.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['deprecated_20list_0',['Deprecated List',['../deprecated.html',1,'']]], + ['disable_5fcopy_1',['disable_copy',['../structguac__terminal__options.html#ae2b4ce16e638e2a3ba7af2dd2fadd8dc',1,'guac_terminal_options']]], + ['dpi_2',['dpi',['../structguac__terminal__options.html#a1941b862eab4c8aefe7c600fcdd49e9e',1,'guac_terminal_options']]] +]; diff --git a/doc/1.5.5/libguac-terminal/search/all_3.js b/doc/1.5.5/libguac-terminal/search/all_3.js new file mode 100644 index 000000000..9df7e5bb0 --- /dev/null +++ b/doc/1.5.5/libguac-terminal/search/all_3.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['font_5fname_0',['font_name',['../structguac__terminal__options.html#aecdc7015e0d19b2e9b882ea0f1f1cf7b',1,'guac_terminal_options']]], + ['font_5fsize_1',['font_size',['../structguac__terminal__options.html#aa399b8a3a47e08607d1cb05db68ce674',1,'guac_terminal_options']]] +]; diff --git a/doc/1.5.5/libguac-terminal/search/all_4.js b/doc/1.5.5/libguac-terminal/search/all_4.js new file mode 100644 index 000000000..d891d5d02 --- /dev/null +++ b/doc/1.5.5/libguac-terminal/search/all_4.js @@ -0,0 +1,60 @@ +var searchData= +[ + ['guac_5fterminal_0',['guac_terminal',['../terminal_8h.html#a49f29d5b500f0d3089e85e0b00903030',1,'terminal.h']]], + ['guac_5fterminal_5fapply_5fcolor_5fscheme_1',['guac_terminal_apply_color_scheme',['../terminal_8h.html#a454b4ab7989237eb0caab801487dc3f4',1,'terminal.h']]], + ['guac_5fterminal_5fapply_5ffont_2',['guac_terminal_apply_font',['../terminal_8h.html#ae800977f951c992143334bf1b089f5c3',1,'terminal.h']]], + ['guac_5fterminal_5fclipboard_5fappend_3',['guac_terminal_clipboard_append',['../terminal_8h.html#a632ee5296595fca9e3bc7513a93f0cc1',1,'terminal.h']]], + ['guac_5fterminal_5fclipboard_5freset_4',['guac_terminal_clipboard_reset',['../terminal_8h.html#a08a3f6d2345d2493ec06729d30a14655',1,'terminal.h']]], + ['guac_5fterminal_5fcreate_5',['guac_terminal_create',['../terminal_8h.html#a9cd1e1e97b22a94039edd45936d4e2bc',1,'terminal.h']]], + ['guac_5fterminal_5fcreate_5ftypescript_6',['guac_terminal_create_typescript',['../terminal_8h.html#a1aef4b1b6305f95a91d642d1a2e1d66c',1,'terminal.h']]], + ['guac_5fterminal_5fcursor_5fblank_7',['GUAC_TERMINAL_CURSOR_BLANK',['../terminal_8h.html#a60ac805147521dc2e17ee6e9278c0cc3ac3449f4024e8d83fd76e83e1a6acdb76',1,'terminal.h']]], + ['guac_5fterminal_5fcursor_5fibar_8',['GUAC_TERMINAL_CURSOR_IBAR',['../terminal_8h.html#a60ac805147521dc2e17ee6e9278c0cc3abf079c8f86b20117d8eb30eae7e3f58a',1,'terminal.h']]], + ['guac_5fterminal_5fcursor_5fpointer_9',['GUAC_TERMINAL_CURSOR_POINTER',['../terminal_8h.html#a60ac805147521dc2e17ee6e9278c0cc3af7891c31bea1625943f6b590c73d8bff',1,'terminal.h']]], + ['guac_5fterminal_5fcursor_5ftype_10',['guac_terminal_cursor_type',['../terminal_8h.html#a60ac805147521dc2e17ee6e9278c0cc3',1,'terminal.h']]], + ['guac_5fterminal_5fdefault_5fbackspace_11',['GUAC_TERMINAL_DEFAULT_BACKSPACE',['../terminal_8h.html#a1b116c6cb561155716105707bccb3717',1,'terminal.h']]], + ['guac_5fterminal_5fdefault_5fcolor_5fscheme_12',['GUAC_TERMINAL_DEFAULT_COLOR_SCHEME',['../terminal_8h.html#ae7892fe7958723b8fe158327346c7813',1,'terminal.h']]], + ['guac_5fterminal_5fdefault_5fdisable_5fcopy_13',['GUAC_TERMINAL_DEFAULT_DISABLE_COPY',['../terminal_8h.html#a09130929dc39674d01e52b0205fe34b6',1,'terminal.h']]], + ['guac_5fterminal_5fdefault_5ffont_5fname_14',['GUAC_TERMINAL_DEFAULT_FONT_NAME',['../terminal_8h.html#a08b2a9f1f0e07affc598cddc32896002',1,'terminal.h']]], + ['guac_5fterminal_5fdefault_5ffont_5fsize_15',['GUAC_TERMINAL_DEFAULT_FONT_SIZE',['../terminal_8h.html#a76572f3ea28fd3c26838a31d4717d09e',1,'terminal.h']]], + ['guac_5fterminal_5fdefault_5fmax_5fscrollback_16',['GUAC_TERMINAL_DEFAULT_MAX_SCROLLBACK',['../terminal_8h.html#a30dbc78ba6df56a52b4a0313b8224ece',1,'terminal.h']]], + ['guac_5fterminal_5fdup_17',['guac_terminal_dup',['../terminal_8h.html#a93868975cd4de90d1ffd676a8ad6bb55',1,'terminal.h']]], + ['guac_5fterminal_5ffile_5fdownload_5fhandler_18',['guac_terminal_file_download_handler',['../terminal_8h.html#a292a4a16877319e6f37311d23a9cbee5',1,'terminal.h']]], + ['guac_5fterminal_5fframe_5fduration_19',['GUAC_TERMINAL_FRAME_DURATION',['../terminal_8h.html#a4e83cd4056313f6efa873e25d05fb4c3',1,'terminal.h']]], + ['guac_5fterminal_5fframe_5ftimeout_20',['GUAC_TERMINAL_FRAME_TIMEOUT',['../terminal_8h.html#aeb3907197ea200371fd7bd7d1a389ab5',1,'terminal.h']]], + ['guac_5fterminal_5ffree_21',['guac_terminal_free',['../terminal_8h.html#abe31fc459c88d8f5ee8817839b930374',1,'terminal.h']]], + ['guac_5fterminal_5fget_5favailable_5fscroll_22',['guac_terminal_get_available_scroll',['../terminal_8h.html#aeb813dff717adc6aac6ee697a2e1b1d9',1,'terminal.h']]], + ['guac_5fterminal_5fget_5fcolor_5fscheme_23',['guac_terminal_get_color_scheme',['../terminal_8h.html#a6acf078069a800f63dfbbc102232eeea',1,'terminal.h']]], + ['guac_5fterminal_5fget_5fcolumns_24',['guac_terminal_get_columns',['../terminal_8h.html#aeb4737d68eb0261d07d0718eaa67cd33',1,'terminal.h']]], + ['guac_5fterminal_5fget_5ffont_5fname_25',['guac_terminal_get_font_name',['../terminal_8h.html#a7857170d6c9cc019ad31fa9ac80f6dda',1,'terminal.h']]], + ['guac_5fterminal_5fget_5ffont_5fsize_26',['guac_terminal_get_font_size',['../terminal_8h.html#a652758ddce440e6e4f5d61cbba2bffbc',1,'terminal.h']]], + ['guac_5fterminal_5fget_5fmod_5fctrl_27',['guac_terminal_get_mod_ctrl',['../terminal_8h.html#a637684593024fcc02622a9b0e4e1985d',1,'terminal.h']]], + ['guac_5fterminal_5fget_5frows_28',['guac_terminal_get_rows',['../terminal_8h.html#a9b5bdeaff0d7b79c0ddeaf385112de31',1,'terminal.h']]], + ['guac_5fterminal_5fmax_5fcolumns_29',['GUAC_TERMINAL_MAX_COLUMNS',['../terminal_8h.html#a8f3db65a4ad44dafbc25dfecbdee7dcc',1,'terminal.h']]], + ['guac_5fterminal_5fmax_5frows_30',['GUAC_TERMINAL_MAX_ROWS',['../terminal_8h.html#acbbd3d6794500b30d5e6a3e489cbc271',1,'terminal.h']]], + ['guac_5fterminal_5fmax_5ftabs_31',['GUAC_TERMINAL_MAX_TABS',['../terminal_8h.html#ac929b2e9552426cd076d95fde2c20f18',1,'terminal.h']]], + ['guac_5fterminal_5fnotify_32',['guac_terminal_notify',['../terminal_8h.html#a15b1464dfe3b77f89ae3574a354cfd9a',1,'terminal.h']]], + ['guac_5fterminal_5foptions_33',['guac_terminal_options',['../structguac__terminal__options.html',1,'']]], + ['guac_5fterminal_5foptions_5fcreate_34',['guac_terminal_options_create',['../terminal_8h.html#a20aaad95ef78122a0dc9635065910b8c',1,'terminal.h']]], + ['guac_5fterminal_5fpipe_5fautoflush_35',['GUAC_TERMINAL_PIPE_AUTOFLUSH',['../terminal_8h.html#a90c94177f90d1b16de286c3498c08c26',1,'terminal.h']]], + ['guac_5fterminal_5fpipe_5finterpret_5foutput_36',['GUAC_TERMINAL_PIPE_INTERPRET_OUTPUT',['../terminal_8h.html#a001b84c7d72fed361d8cd93b3418c63a',1,'terminal.h']]], + ['guac_5fterminal_5fprintf_37',['guac_terminal_printf',['../terminal_8h.html#a60543e4566beaab153838fc436b36652',1,'terminal.h']]], + ['guac_5fterminal_5fprompt_38',['guac_terminal_prompt',['../terminal_8h.html#a025d6104b9b7c486a70d6cb28cacf271',1,'terminal.h']]], + ['guac_5fterminal_5fread_5fstdin_39',['guac_terminal_read_stdin',['../terminal_8h.html#acc75e5ce65304c14ae2b7abeba0bcfdf',1,'terminal.h']]], + ['guac_5fterminal_5fremove_5fuser_40',['guac_terminal_remove_user',['../terminal_8h.html#adb734903eeeaefaadb0a33b0c8e43a45',1,'terminal.h']]], + ['guac_5fterminal_5frender_5fframe_41',['guac_terminal_render_frame',['../terminal_8h.html#a9ae71ac3cbc89da6fcec99ffffc9699a',1,'terminal.h']]], + ['guac_5fterminal_5fresize_42',['guac_terminal_resize',['../terminal_8h.html#a97b019b5e12ca00a928f75e67288c92e',1,'terminal.h']]], + ['guac_5fterminal_5fsend_5fdata_43',['guac_terminal_send_data',['../terminal_8h.html#a70466d89636307fc3d634f6aacb6d8b8',1,'terminal.h']]], + ['guac_5fterminal_5fsend_5fkey_44',['guac_terminal_send_key',['../terminal_8h.html#ab3494afd916ce1a1643705b7be37ecdb',1,'terminal.h']]], + ['guac_5fterminal_5fsend_5fmouse_45',['guac_terminal_send_mouse',['../terminal_8h.html#ab724f2fc2c90524b52693a1a9317bc43',1,'terminal.h']]], + ['guac_5fterminal_5fsend_5fstream_46',['guac_terminal_send_stream',['../terminal_8h.html#a27845ddb5cd953a3be20a2756e303c39',1,'terminal.h']]], + ['guac_5fterminal_5fsend_5fstring_47',['guac_terminal_send_string',['../terminal_8h.html#afbacbcde592fe90b67fd8cd0b49d3375',1,'terminal.h']]], + ['guac_5fterminal_5fsendf_48',['guac_terminal_sendf',['../terminal_8h.html#a60ffed55f8949c8054c76417c9284cfd',1,'terminal.h']]], + ['guac_5fterminal_5fset_5ffile_5fdownload_5fhandler_49',['guac_terminal_set_file_download_handler',['../terminal_8h.html#aaf1ce41caa5967880522367f9c122eb4',1,'terminal.h']]], + ['guac_5fterminal_5fset_5fupload_5fpath_5fhandler_50',['guac_terminal_set_upload_path_handler',['../terminal_8h.html#a38376ea497a267c989e1a4683ffbb4d4',1,'terminal.h']]], + ['guac_5fterminal_5fstart_51',['guac_terminal_start',['../terminal_8h.html#a4d9edc5e72aea67a7494c97d0fbe4196',1,'terminal.h']]], + ['guac_5fterminal_5fstop_52',['guac_terminal_stop',['../terminal_8h.html#a4bf310780f9d6265737cf86b6d859e8d',1,'terminal.h']]], + ['guac_5fterminal_5fsync_5fusers_53',['guac_terminal_sync_users',['../terminal_8h.html#a2a364b474a0311ed18a01a438e2d61f2',1,'terminal.h']]], + ['guac_5fterminal_5fupload_5fpath_5fhandler_54',['guac_terminal_upload_path_handler',['../terminal_8h.html#a356cbe7fd894f73690eae185b38c6079',1,'terminal.h']]], + ['guac_5fterminal_5fwheel_5fscroll_5famount_55',['GUAC_TERMINAL_WHEEL_SCROLL_AMOUNT',['../terminal_8h.html#ae1d4c8037ede662adb826f6a5820ff95',1,'terminal.h']]], + ['guac_5fterminal_5fwrite_56',['guac_terminal_write',['../terminal_8h.html#a517cfb03bfbddb3668b9a328d30cf880',1,'terminal.h']]] +]; diff --git a/doc/1.5.5/libguac-terminal/search/all_5.js b/doc/1.5.5/libguac-terminal/search/all_5.js new file mode 100644 index 000000000..e30660da3 --- /dev/null +++ b/doc/1.5.5/libguac-terminal/search/all_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['height_0',['height',['../structguac__terminal__options.html#a21f744aaf4f034a3cec4d321ce8fce5f',1,'guac_terminal_options']]] +]; diff --git a/doc/1.5.5/libguac-terminal/search/all_6.js b/doc/1.5.5/libguac-terminal/search/all_6.js new file mode 100644 index 000000000..1ad91e39e --- /dev/null +++ b/doc/1.5.5/libguac-terminal/search/all_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['list_0',['Deprecated List',['../deprecated.html',1,'']]] +]; diff --git a/doc/1.5.5/libguac-terminal/search/all_7.js b/doc/1.5.5/libguac-terminal/search/all_7.js new file mode 100644 index 000000000..e6b2c8969 --- /dev/null +++ b/doc/1.5.5/libguac-terminal/search/all_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['max_5fscrollback_0',['max_scrollback',['../structguac__terminal__options.html#aa5bd6f6ae368ce6091a4d5d6ae3ddb53',1,'guac_terminal_options']]] +]; diff --git a/doc/1.5.5/libguac-terminal/search/all_8.js b/doc/1.5.5/libguac-terminal/search/all_8.js new file mode 100644 index 000000000..1d074d130 --- /dev/null +++ b/doc/1.5.5/libguac-terminal/search/all_8.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['terminal_2eh_0',['terminal.h',['../terminal_8h.html',1,'']]] +]; diff --git a/doc/1.5.5/libguac-terminal/search/all_9.js b/doc/1.5.5/libguac-terminal/search/all_9.js new file mode 100644 index 000000000..732632f4e --- /dev/null +++ b/doc/1.5.5/libguac-terminal/search/all_9.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['width_0',['width',['../structguac__terminal__options.html#a6a2e49882c2844ea57f0752ac5764016',1,'guac_terminal_options']]] +]; diff --git a/doc/1.5.5/libguac-terminal/search/classes_0.js b/doc/1.5.5/libguac-terminal/search/classes_0.js new file mode 100644 index 000000000..fdd22498d --- /dev/null +++ b/doc/1.5.5/libguac-terminal/search/classes_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['guac_5fterminal_5foptions_0',['guac_terminal_options',['../structguac__terminal__options.html',1,'']]] +]; diff --git a/doc/1.5.5/libguac-terminal/search/close.svg b/doc/1.5.5/libguac-terminal/search/close.svg new file mode 100644 index 000000000..337d6cc13 --- /dev/null +++ b/doc/1.5.5/libguac-terminal/search/close.svg @@ -0,0 +1,18 @@ + + + + + + diff --git a/doc/1.5.5/libguac-terminal/search/defines_0.js b/doc/1.5.5/libguac-terminal/search/defines_0.js new file mode 100644 index 000000000..681c52b3e --- /dev/null +++ b/doc/1.5.5/libguac-terminal/search/defines_0.js @@ -0,0 +1,17 @@ +var searchData= +[ + ['guac_5fterminal_5fdefault_5fbackspace_0',['GUAC_TERMINAL_DEFAULT_BACKSPACE',['../terminal_8h.html#a1b116c6cb561155716105707bccb3717',1,'terminal.h']]], + ['guac_5fterminal_5fdefault_5fcolor_5fscheme_1',['GUAC_TERMINAL_DEFAULT_COLOR_SCHEME',['../terminal_8h.html#ae7892fe7958723b8fe158327346c7813',1,'terminal.h']]], + ['guac_5fterminal_5fdefault_5fdisable_5fcopy_2',['GUAC_TERMINAL_DEFAULT_DISABLE_COPY',['../terminal_8h.html#a09130929dc39674d01e52b0205fe34b6',1,'terminal.h']]], + ['guac_5fterminal_5fdefault_5ffont_5fname_3',['GUAC_TERMINAL_DEFAULT_FONT_NAME',['../terminal_8h.html#a08b2a9f1f0e07affc598cddc32896002',1,'terminal.h']]], + ['guac_5fterminal_5fdefault_5ffont_5fsize_4',['GUAC_TERMINAL_DEFAULT_FONT_SIZE',['../terminal_8h.html#a76572f3ea28fd3c26838a31d4717d09e',1,'terminal.h']]], + ['guac_5fterminal_5fdefault_5fmax_5fscrollback_5',['GUAC_TERMINAL_DEFAULT_MAX_SCROLLBACK',['../terminal_8h.html#a30dbc78ba6df56a52b4a0313b8224ece',1,'terminal.h']]], + ['guac_5fterminal_5fframe_5fduration_6',['GUAC_TERMINAL_FRAME_DURATION',['../terminal_8h.html#a4e83cd4056313f6efa873e25d05fb4c3',1,'terminal.h']]], + ['guac_5fterminal_5fframe_5ftimeout_7',['GUAC_TERMINAL_FRAME_TIMEOUT',['../terminal_8h.html#aeb3907197ea200371fd7bd7d1a389ab5',1,'terminal.h']]], + ['guac_5fterminal_5fmax_5fcolumns_8',['GUAC_TERMINAL_MAX_COLUMNS',['../terminal_8h.html#a8f3db65a4ad44dafbc25dfecbdee7dcc',1,'terminal.h']]], + ['guac_5fterminal_5fmax_5frows_9',['GUAC_TERMINAL_MAX_ROWS',['../terminal_8h.html#acbbd3d6794500b30d5e6a3e489cbc271',1,'terminal.h']]], + ['guac_5fterminal_5fmax_5ftabs_10',['GUAC_TERMINAL_MAX_TABS',['../terminal_8h.html#ac929b2e9552426cd076d95fde2c20f18',1,'terminal.h']]], + ['guac_5fterminal_5fpipe_5fautoflush_11',['GUAC_TERMINAL_PIPE_AUTOFLUSH',['../terminal_8h.html#a90c94177f90d1b16de286c3498c08c26',1,'terminal.h']]], + ['guac_5fterminal_5fpipe_5finterpret_5foutput_12',['GUAC_TERMINAL_PIPE_INTERPRET_OUTPUT',['../terminal_8h.html#a001b84c7d72fed361d8cd93b3418c63a',1,'terminal.h']]], + ['guac_5fterminal_5fwheel_5fscroll_5famount_13',['GUAC_TERMINAL_WHEEL_SCROLL_AMOUNT',['../terminal_8h.html#ae1d4c8037ede662adb826f6a5820ff95',1,'terminal.h']]] +]; diff --git a/doc/1.5.5/libguac-terminal/search/enums_0.js b/doc/1.5.5/libguac-terminal/search/enums_0.js new file mode 100644 index 000000000..2a8ac08c1 --- /dev/null +++ b/doc/1.5.5/libguac-terminal/search/enums_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['guac_5fterminal_5fcursor_5ftype_0',['guac_terminal_cursor_type',['../terminal_8h.html#a60ac805147521dc2e17ee6e9278c0cc3',1,'terminal.h']]] +]; diff --git a/doc/1.5.5/libguac-terminal/search/enumvalues_0.js b/doc/1.5.5/libguac-terminal/search/enumvalues_0.js new file mode 100644 index 000000000..6156cddb9 --- /dev/null +++ b/doc/1.5.5/libguac-terminal/search/enumvalues_0.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['guac_5fterminal_5fcursor_5fblank_0',['GUAC_TERMINAL_CURSOR_BLANK',['../terminal_8h.html#a60ac805147521dc2e17ee6e9278c0cc3ac3449f4024e8d83fd76e83e1a6acdb76',1,'terminal.h']]], + ['guac_5fterminal_5fcursor_5fibar_1',['GUAC_TERMINAL_CURSOR_IBAR',['../terminal_8h.html#a60ac805147521dc2e17ee6e9278c0cc3abf079c8f86b20117d8eb30eae7e3f58a',1,'terminal.h']]], + ['guac_5fterminal_5fcursor_5fpointer_2',['GUAC_TERMINAL_CURSOR_POINTER',['../terminal_8h.html#a60ac805147521dc2e17ee6e9278c0cc3af7891c31bea1625943f6b590c73d8bff',1,'terminal.h']]] +]; diff --git a/doc/1.5.5/libguac-terminal/search/files_0.js b/doc/1.5.5/libguac-terminal/search/files_0.js new file mode 100644 index 000000000..1d074d130 --- /dev/null +++ b/doc/1.5.5/libguac-terminal/search/files_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['terminal_2eh_0',['terminal.h',['../terminal_8h.html',1,'']]] +]; diff --git a/doc/1.5.5/libguac-terminal/search/functions_0.js b/doc/1.5.5/libguac-terminal/search/functions_0.js new file mode 100644 index 000000000..bb05ab88b --- /dev/null +++ b/doc/1.5.5/libguac-terminal/search/functions_0.js @@ -0,0 +1,38 @@ +var searchData= +[ + ['guac_5fterminal_5fapply_5fcolor_5fscheme_0',['guac_terminal_apply_color_scheme',['../terminal_8h.html#a454b4ab7989237eb0caab801487dc3f4',1,'terminal.h']]], + ['guac_5fterminal_5fapply_5ffont_1',['guac_terminal_apply_font',['../terminal_8h.html#ae800977f951c992143334bf1b089f5c3',1,'terminal.h']]], + ['guac_5fterminal_5fclipboard_5fappend_2',['guac_terminal_clipboard_append',['../terminal_8h.html#a632ee5296595fca9e3bc7513a93f0cc1',1,'terminal.h']]], + ['guac_5fterminal_5fclipboard_5freset_3',['guac_terminal_clipboard_reset',['../terminal_8h.html#a08a3f6d2345d2493ec06729d30a14655',1,'terminal.h']]], + ['guac_5fterminal_5fcreate_4',['guac_terminal_create',['../terminal_8h.html#a9cd1e1e97b22a94039edd45936d4e2bc',1,'terminal.h']]], + ['guac_5fterminal_5fcreate_5ftypescript_5',['guac_terminal_create_typescript',['../terminal_8h.html#a1aef4b1b6305f95a91d642d1a2e1d66c',1,'terminal.h']]], + ['guac_5fterminal_5fdup_6',['guac_terminal_dup',['../terminal_8h.html#a93868975cd4de90d1ffd676a8ad6bb55',1,'terminal.h']]], + ['guac_5fterminal_5ffree_7',['guac_terminal_free',['../terminal_8h.html#abe31fc459c88d8f5ee8817839b930374',1,'terminal.h']]], + ['guac_5fterminal_5fget_5favailable_5fscroll_8',['guac_terminal_get_available_scroll',['../terminal_8h.html#aeb813dff717adc6aac6ee697a2e1b1d9',1,'terminal.h']]], + ['guac_5fterminal_5fget_5fcolor_5fscheme_9',['guac_terminal_get_color_scheme',['../terminal_8h.html#a6acf078069a800f63dfbbc102232eeea',1,'terminal.h']]], + ['guac_5fterminal_5fget_5fcolumns_10',['guac_terminal_get_columns',['../terminal_8h.html#aeb4737d68eb0261d07d0718eaa67cd33',1,'terminal.h']]], + ['guac_5fterminal_5fget_5ffont_5fname_11',['guac_terminal_get_font_name',['../terminal_8h.html#a7857170d6c9cc019ad31fa9ac80f6dda',1,'terminal.h']]], + ['guac_5fterminal_5fget_5ffont_5fsize_12',['guac_terminal_get_font_size',['../terminal_8h.html#a652758ddce440e6e4f5d61cbba2bffbc',1,'terminal.h']]], + ['guac_5fterminal_5fget_5fmod_5fctrl_13',['guac_terminal_get_mod_ctrl',['../terminal_8h.html#a637684593024fcc02622a9b0e4e1985d',1,'terminal.h']]], + ['guac_5fterminal_5fget_5frows_14',['guac_terminal_get_rows',['../terminal_8h.html#a9b5bdeaff0d7b79c0ddeaf385112de31',1,'terminal.h']]], + ['guac_5fterminal_5fnotify_15',['guac_terminal_notify',['../terminal_8h.html#a15b1464dfe3b77f89ae3574a354cfd9a',1,'terminal.h']]], + ['guac_5fterminal_5foptions_5fcreate_16',['guac_terminal_options_create',['../terminal_8h.html#a20aaad95ef78122a0dc9635065910b8c',1,'terminal.h']]], + ['guac_5fterminal_5fprintf_17',['guac_terminal_printf',['../terminal_8h.html#a60543e4566beaab153838fc436b36652',1,'terminal.h']]], + ['guac_5fterminal_5fprompt_18',['guac_terminal_prompt',['../terminal_8h.html#a025d6104b9b7c486a70d6cb28cacf271',1,'terminal.h']]], + ['guac_5fterminal_5fread_5fstdin_19',['guac_terminal_read_stdin',['../terminal_8h.html#acc75e5ce65304c14ae2b7abeba0bcfdf',1,'terminal.h']]], + ['guac_5fterminal_5fremove_5fuser_20',['guac_terminal_remove_user',['../terminal_8h.html#adb734903eeeaefaadb0a33b0c8e43a45',1,'terminal.h']]], + ['guac_5fterminal_5frender_5fframe_21',['guac_terminal_render_frame',['../terminal_8h.html#a9ae71ac3cbc89da6fcec99ffffc9699a',1,'terminal.h']]], + ['guac_5fterminal_5fresize_22',['guac_terminal_resize',['../terminal_8h.html#a97b019b5e12ca00a928f75e67288c92e',1,'terminal.h']]], + ['guac_5fterminal_5fsend_5fdata_23',['guac_terminal_send_data',['../terminal_8h.html#a70466d89636307fc3d634f6aacb6d8b8',1,'terminal.h']]], + ['guac_5fterminal_5fsend_5fkey_24',['guac_terminal_send_key',['../terminal_8h.html#ab3494afd916ce1a1643705b7be37ecdb',1,'terminal.h']]], + ['guac_5fterminal_5fsend_5fmouse_25',['guac_terminal_send_mouse',['../terminal_8h.html#ab724f2fc2c90524b52693a1a9317bc43',1,'terminal.h']]], + ['guac_5fterminal_5fsend_5fstream_26',['guac_terminal_send_stream',['../terminal_8h.html#a27845ddb5cd953a3be20a2756e303c39',1,'terminal.h']]], + ['guac_5fterminal_5fsend_5fstring_27',['guac_terminal_send_string',['../terminal_8h.html#afbacbcde592fe90b67fd8cd0b49d3375',1,'terminal.h']]], + ['guac_5fterminal_5fsendf_28',['guac_terminal_sendf',['../terminal_8h.html#a60ffed55f8949c8054c76417c9284cfd',1,'terminal.h']]], + ['guac_5fterminal_5fset_5ffile_5fdownload_5fhandler_29',['guac_terminal_set_file_download_handler',['../terminal_8h.html#aaf1ce41caa5967880522367f9c122eb4',1,'terminal.h']]], + ['guac_5fterminal_5fset_5fupload_5fpath_5fhandler_30',['guac_terminal_set_upload_path_handler',['../terminal_8h.html#a38376ea497a267c989e1a4683ffbb4d4',1,'terminal.h']]], + ['guac_5fterminal_5fstart_31',['guac_terminal_start',['../terminal_8h.html#a4d9edc5e72aea67a7494c97d0fbe4196',1,'terminal.h']]], + ['guac_5fterminal_5fstop_32',['guac_terminal_stop',['../terminal_8h.html#a4bf310780f9d6265737cf86b6d859e8d',1,'terminal.h']]], + ['guac_5fterminal_5fsync_5fusers_33',['guac_terminal_sync_users',['../terminal_8h.html#a2a364b474a0311ed18a01a438e2d61f2',1,'terminal.h']]], + ['guac_5fterminal_5fwrite_34',['guac_terminal_write',['../terminal_8h.html#a517cfb03bfbddb3668b9a328d30cf880',1,'terminal.h']]] +]; diff --git a/doc/1.5.5/libguac-terminal/search/mag.svg b/doc/1.5.5/libguac-terminal/search/mag.svg new file mode 100644 index 000000000..ffb6cf0d0 --- /dev/null +++ b/doc/1.5.5/libguac-terminal/search/mag.svg @@ -0,0 +1,24 @@ + + + + + + + diff --git a/doc/1.5.5/libguac-terminal/search/mag_d.svg b/doc/1.5.5/libguac-terminal/search/mag_d.svg new file mode 100644 index 000000000..4122773f9 --- /dev/null +++ b/doc/1.5.5/libguac-terminal/search/mag_d.svg @@ -0,0 +1,24 @@ + + + + + + + diff --git a/doc/1.5.5/libguac-terminal/search/mag_sel.svg b/doc/1.5.5/libguac-terminal/search/mag_sel.svg new file mode 100644 index 000000000..553dba877 --- /dev/null +++ b/doc/1.5.5/libguac-terminal/search/mag_sel.svg @@ -0,0 +1,31 @@ + + + + + + + + + diff --git a/doc/1.5.5/libguac-terminal/search/mag_seld.svg b/doc/1.5.5/libguac-terminal/search/mag_seld.svg new file mode 100644 index 000000000..c906f84c8 --- /dev/null +++ b/doc/1.5.5/libguac-terminal/search/mag_seld.svg @@ -0,0 +1,31 @@ + + + + + + + + + diff --git a/doc/1.5.5/libguac-terminal/search/pages_0.js b/doc/1.5.5/libguac-terminal/search/pages_0.js new file mode 100644 index 000000000..4d858458c --- /dev/null +++ b/doc/1.5.5/libguac-terminal/search/pages_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['deprecated_20list_0',['Deprecated List',['../deprecated.html',1,'']]] +]; diff --git a/doc/1.5.5/libguac-terminal/search/pages_1.js b/doc/1.5.5/libguac-terminal/search/pages_1.js new file mode 100644 index 000000000..1ad91e39e --- /dev/null +++ b/doc/1.5.5/libguac-terminal/search/pages_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['list_0',['Deprecated List',['../deprecated.html',1,'']]] +]; diff --git a/doc/1.5.5/libguac-terminal/search/search.css b/doc/1.5.5/libguac-terminal/search/search.css new file mode 100644 index 000000000..19f76f9d5 --- /dev/null +++ b/doc/1.5.5/libguac-terminal/search/search.css @@ -0,0 +1,291 @@ +/*---------------- Search Box positioning */ + +#main-menu > li:last-child { + /* This
  • object is the parent of the search bar */ + display: flex; + justify-content: center; + align-items: center; + height: 36px; + margin-right: 1em; +} + +/*---------------- Search box styling */ + +.SRPage * { + font-weight: normal; + line-height: normal; +} + +dark-mode-toggle { + margin-left: 5px; + display: flex; + float: right; +} + +#MSearchBox { + display: inline-block; + white-space : nowrap; + background: var(--search-background-color); + border-radius: 0.65em; + box-shadow: var(--search-box-shadow); + z-index: 102; +} + +#MSearchBox .left { + display: inline-block; + vertical-align: middle; + height: 1.4em; +} + +#MSearchSelect { + display: inline-block; + vertical-align: middle; + width: 20px; + height: 19px; + background-image: var(--search-magnification-select-image); + margin: 0 0 0 0.3em; + padding: 0; +} + +#MSearchSelectExt { + display: inline-block; + vertical-align: middle; + width: 10px; + height: 19px; + background-image: var(--search-magnification-image); + margin: 0 0 0 0.5em; + padding: 0; +} + + +#MSearchField { + display: inline-block; + vertical-align: middle; + width: 7.5em; + height: 19px; + margin: 0 0.15em; + padding: 0; + line-height: 1em; + border:none; + color: var(--search-foreground-color); + outline: none; + font-family: var(--font-family-search); + -webkit-border-radius: 0px; + border-radius: 0px; + background: none; +} + +@media(hover: none) { + /* to avoid zooming on iOS */ + #MSearchField { + font-size: 16px; + } +} + +#MSearchBox .right { + display: inline-block; + vertical-align: middle; + width: 1.4em; + height: 1.4em; +} + +#MSearchClose { + display: none; + font-size: inherit; + background : none; + border: none; + margin: 0; + padding: 0; + outline: none; + +} + +#MSearchCloseImg { + padding: 0.3em; + margin: 0; +} + +.MSearchBoxActive #MSearchField { + color: var(--search-active-color); +} + + + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid var(--search-filter-border-color); + background-color: var(--search-filter-background-color); + z-index: 10001; + padding-top: 4px; + padding-bottom: 4px; + -moz-border-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +.SelectItem { + font: 8pt var(--font-family-search); + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: var(--font-family-monospace); + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: var(--search-filter-foreground-color); + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: var(--search-filter-foreground-color); + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: var(--search-filter-highlight-text-color); + background-color: var(--search-filter-highlight-bg-color); + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + /*width: 60ex;*/ + height: 15em; +} + +#MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid var(--search-results-border-color); + background-color: var(--search-results-background-color); + z-index:10000; + width: 300px; + height: 400px; + overflow: auto; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +div.SRPage { + margin: 5px 2px; + background-color: var(--search-results-background-color); +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: var(--search-results-foreground-color); + font-family: var(--font-family-search); + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: var(--search-results-foreground-color); + font-family: var(--font-family-search); + font-size: 8pt; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +span.SRScope { + padding-left: 4px; + font-family: var(--font-family-search); +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; + font-family: var(--font-family-search); +} + +.SRResult { + display: none; +} + +div.searchresults { + margin-left: 10px; + margin-right: 10px; +} + +/*---------------- External search page results */ + +.pages b { + color: white; + padding: 5px 5px 3px 5px; + background-image: var(--nav-gradient-active-image-parent); + background-repeat: repeat-x; + text-shadow: 0 1px 1px #000000; +} + +.pages { + line-height: 17px; + margin-left: 4px; + text-decoration: none; +} + +.hl { + font-weight: bold; +} + +#searchresults { + margin-bottom: 20px; +} + +.searchpages { + margin-top: 10px; +} + diff --git a/doc/1.5.5/libguac-terminal/search/search.js b/doc/1.5.5/libguac-terminal/search/search.js new file mode 100644 index 000000000..666af01e5 --- /dev/null +++ b/doc/1.5.5/libguac-terminal/search/search.js @@ -0,0 +1,694 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +const SEARCH_COOKIE_NAME = ''+'search_grp'; + +const searchResults = new SearchResults(); + +/* A class handling everything associated with the search panel. + + Parameters: + name - The name of the global variable that will be + storing this instance. Is needed to be able to set timeouts. + resultPath - path to use for external files +*/ +function SearchBox(name, resultsPath, extension) { + if (!name || !resultsPath) { alert("Missing parameters to SearchBox."); } + if (!extension || extension == "") { extension = ".html"; } + + function getXPos(item) { + let x = 0; + if (item.offsetWidth) { + while (item && item!=document.body) { + x += item.offsetLeft; + item = item.offsetParent; + } + } + return x; + } + + function getYPos(item) { + let y = 0; + if (item.offsetWidth) { + while (item && item!=document.body) { + y += item.offsetTop; + item = item.offsetParent; + } + } + return y; + } + + // ---------- Instance variables + this.name = name; + this.resultsPath = resultsPath; + this.keyTimeout = 0; + this.keyTimeoutLength = 500; + this.closeSelectionTimeout = 300; + this.lastSearchValue = ""; + this.lastResultsPage = ""; + this.hideTimeout = 0; + this.searchIndex = 0; + this.searchActive = false; + this.extension = extension; + + // ----------- DOM Elements + + this.DOMSearchField = () => document.getElementById("MSearchField"); + this.DOMSearchSelect = () => document.getElementById("MSearchSelect"); + this.DOMSearchSelectWindow = () => document.getElementById("MSearchSelectWindow"); + this.DOMPopupSearchResults = () => document.getElementById("MSearchResults"); + this.DOMPopupSearchResultsWindow = () => document.getElementById("MSearchResultsWindow"); + this.DOMSearchClose = () => document.getElementById("MSearchClose"); + this.DOMSearchBox = () => document.getElementById("MSearchBox"); + + // ------------ Event Handlers + + // Called when focus is added or removed from the search field. + this.OnSearchFieldFocus = function(isActive) { + this.Activate(isActive); + } + + this.OnSearchSelectShow = function() { + const searchSelectWindow = this.DOMSearchSelectWindow(); + const searchField = this.DOMSearchSelect(); + + const left = getXPos(searchField); + const top = getYPos(searchField) + searchField.offsetHeight; + + // show search selection popup + searchSelectWindow.style.display='block'; + searchSelectWindow.style.left = left + 'px'; + searchSelectWindow.style.top = top + 'px'; + + // stop selection hide timer + if (this.hideTimeout) { + clearTimeout(this.hideTimeout); + this.hideTimeout=0; + } + return false; // to avoid "image drag" default event + } + + this.OnSearchSelectHide = function() { + this.hideTimeout = setTimeout(this.CloseSelectionWindow.bind(this), + this.closeSelectionTimeout); + } + + // Called when the content of the search field is changed. + this.OnSearchFieldChange = function(evt) { + if (this.keyTimeout) { // kill running timer + clearTimeout(this.keyTimeout); + this.keyTimeout = 0; + } + + const e = evt ? evt : window.event; // for IE + if (e.keyCode==40 || e.keyCode==13) { + if (e.shiftKey==1) { + this.OnSearchSelectShow(); + const win=this.DOMSearchSelectWindow(); + for (let i=0;i do a search + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) { + const e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 && this.searchIndex0) { // Up + this.searchIndex--; + this.OnSelectItem(this.searchIndex); + } else if (e.keyCode==13 || e.keyCode==27) { + e.stopPropagation(); + this.OnSelectItem(this.searchIndex); + this.CloseSelectionWindow(); + this.DOMSearchField().focus(); + } + return false; + } + + // --------- Actions + + // Closes the results window. + this.CloseResultsWindow = function() { + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.Activate(false); + } + + this.CloseSelectionWindow = function() { + this.DOMSearchSelectWindow().style.display = 'none'; + } + + // Performs a search. + this.Search = function() { + this.keyTimeout = 0; + + // strip leading whitespace + const searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + + const code = searchValue.toLowerCase().charCodeAt(0); + let idxChar = searchValue.substr(0, 1).toLowerCase(); + if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) { // surrogate pair + idxChar = searchValue.substr(0, 2); + } + + let jsFile; + let idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); + if (idx!=-1) { + const hexCode=idx.toString(16); + jsFile = this.resultsPath + indexSectionNames[this.searchIndex] + '_' + hexCode + '.js'; + } + + const loadJS = function(url, impl, loc) { + const scriptTag = document.createElement('script'); + scriptTag.src = url; + scriptTag.onload = impl; + scriptTag.onreadystatechange = impl; + loc.appendChild(scriptTag); + } + + const domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + const domSearchBox = this.DOMSearchBox(); + const domPopupSearchResults = this.DOMPopupSearchResults(); + const domSearchClose = this.DOMSearchClose(); + const resultsPath = this.resultsPath; + + const handleResults = function() { + document.getElementById("Loading").style.display="none"; + if (typeof searchData !== 'undefined') { + createResults(resultsPath); + document.getElementById("NoMatches").style.display="none"; + } + + if (idx!=-1) { + searchResults.Search(searchValue); + } else { // no file with search results => force empty search results + searchResults.Search('===='); + } + + if (domPopupSearchResultsWindow.style.display!='block') { + domSearchClose.style.display = 'inline-block'; + let left = getXPos(domSearchBox) + 150; + let top = getYPos(domSearchBox) + 20; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + const maxWidth = document.body.clientWidth; + const maxHeight = document.body.clientHeight; + let width = 300; + if (left<10) left=10; + if (width+left+8>maxWidth) width=maxWidth-left-8; + let height = 400; + if (height+top+8>maxHeight) height=maxHeight-top-8; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + domPopupSearchResultsWindow.style.width = width + 'px'; + domPopupSearchResultsWindow.style.height = height + 'px'; + } + } + + if (jsFile) { + loadJS(jsFile, handleResults, this.DOMPopupSearchResultsWindow()); + } else { + handleResults(); + } + + this.lastSearchValue = searchValue; + } + + // -------- Activation Functions + + // Activates or deactivates the search panel, resetting things to + // their default values if necessary. + this.Activate = function(isActive) { + if (isActive || // open it + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) { + this.DOMSearchBox().className = 'MSearchBoxActive'; + this.searchActive = true; + } else if (!isActive) { // directly remove the panel + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + this.DOMSearchField().value = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// The class that handles everything on the search results page. +function SearchResults() { + + function convertToId(search) { + let result = ''; + for (let i=0;i. + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; + + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) { + const parentElement = document.getElementById(id); + let element = parentElement.firstChild; + + while (element && element!=parentElement) { + if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren') { + return element; + } + + if (element.nodeName.toLowerCase() == 'div' && element.hasChildNodes()) { + element = element.firstChild; + } else if (element.nextSibling) { + element = element.nextSibling; + } else { + do { + element = element.parentNode; + } + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) { + element = element.nextSibling; + } + } + } + } + + this.Toggle = function(id) { + const element = this.FindChildElement(id); + if (element) { + if (element.style.display == 'block') { + element.style.display = 'none'; + } else { + element.style.display = 'block'; + } + } + } + + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) { + if (!search) { // get search word from URL + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + const resultRows = document.getElementsByTagName("div"); + let matches = 0; + + let i = 0; + while (i < resultRows.length) { + const row = resultRows.item(i); + if (row.className == "SRResult") { + let rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) { + row.style.display = 'block'; + matches++; + } else { + row.style.display = 'none'; + } + } + i++; + } + document.getElementById("Searching").style.display='none'; + if (matches == 0) { // no results + document.getElementById("NoMatches").style.display='block'; + } else { // at least one result + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } + + // return the first item with index index or higher that is visible + this.NavNext = function(index) { + let focusItem; + for (;;) { + const focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') { + break; + } else if (!focusItem) { // last element + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) { + let focusItem; + for (;;) { + const focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') { + break; + } else if (!focusItem) { // last element + break; + } + focusItem=null; + index--; + } + return focusItem; + } + + this.ProcessKeys = function(e) { + if (e.type == "keydown") { + this.repeatOn = false; + this.lastKey = e.keyCode; + } else if (e.type == "keypress") { + if (!this.repeatOn) { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown + } + } else if (e.type == "keyup") { + this.lastKey = 0; + this.repeatOn = false; + } + return this.lastKey!=0; + } + + this.Nav = function(evt,itemIndex) { + const e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) { // Up + const newIndex = itemIndex-1; + let focusItem = this.NavPrev(newIndex); + if (focusItem) { + let child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') { // children visible + let n=0; + let tmpElem; + for (;;) { // search for last child + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) { + focusItem = tmpElem; + } else { // found it! + break; + } + n++; + } + } + } + if (focusItem) { + focusItem.focus(); + } else { // return focus to search field + document.getElementById("MSearchField").focus(); + } + } else if (this.lastKey==40) { // Down + const newIndex = itemIndex+1; + let focusItem; + const item = document.getElementById('Item'+itemIndex); + const elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') { // children visible + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } else if (this.lastKey==39) { // Right + const item = document.getElementById('Item'+itemIndex); + const elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } else if (this.lastKey==37) { // Left + const item = document.getElementById('Item'+itemIndex); + const elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } else if (this.lastKey==27) { // Escape + e.stopPropagation(); + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } else if (this.lastKey==13) { // Enter + return true; + } + return false; + } + + this.NavChild = function(evt,itemIndex,childIndex) { + const e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) { // Up + if (childIndex>0) { + const newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } else { // already at first child, jump to parent + document.getElementById('Item'+itemIndex).focus(); + } + } else if (this.lastKey==40) { // Down + const newIndex = childIndex+1; + let elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) { // last child, jump to parent next parent + elem = this.NavNext(itemIndex+1); + } + if (elem) { + elem.focus(); + } + } else if (this.lastKey==27) { // Escape + e.stopPropagation(); + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } else if (this.lastKey==13) { // Enter + return true; + } + return false; + } +} + +function createResults(resultsPath) { + + function setKeyActions(elem,action) { + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); + } + + function setClassAttr(elem,attr) { + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); + } + + const results = document.getElementById("SRResults"); + results.innerHTML = ''; + searchData.forEach((elem,index) => { + const id = elem[0]; + const srResult = document.createElement('div'); + srResult.setAttribute('id','SR_'+id); + setClassAttr(srResult,'SRResult'); + const srEntry = document.createElement('div'); + setClassAttr(srEntry,'SREntry'); + const srLink = document.createElement('a'); + srLink.setAttribute('id','Item'+index); + setKeyActions(srLink,'return searchResults.Nav(event,'+index+')'); + setClassAttr(srLink,'SRSymbol'); + srLink.innerHTML = elem[1][0]; + srEntry.appendChild(srLink); + if (elem[1].length==2) { // single result + srLink.setAttribute('href',resultsPath+elem[1][1][0]); + srLink.setAttribute('onclick','searchBox.CloseResultsWindow()'); + if (elem[1][1][1]) { + srLink.setAttribute('target','_parent'); + } else { + srLink.setAttribute('target','_blank'); + } + const srScope = document.createElement('span'); + setClassAttr(srScope,'SRScope'); + srScope.innerHTML = elem[1][1][2]; + srEntry.appendChild(srScope); + } else { // multiple results + srLink.setAttribute('href','javascript:searchResults.Toggle("SR_'+id+'")'); + const srChildren = document.createElement('div'); + setClassAttr(srChildren,'SRChildren'); + for (let c=0; c-{AmhX=Jf(#6djGiuzAr*{o?=JLmPLyc> z_*`QK&+BH@jWrYJ7>r6%keRM@)Qyv8R=enp0jiI>aWlGyB58O zFVR20d+y`K7vDw(hJF3;>dD*3-?v=<8M)@x|EEGLnJsniYK!2U1 Y!`|5biEc?d1`HDhPgg&ebxsLQ02F6;9RL6T literal 0 HcmV?d00001 diff --git a/doc/1.5.5/libguac-terminal/splitbard.png b/doc/1.5.5/libguac-terminal/splitbard.png new file mode 100644 index 0000000000000000000000000000000000000000..8367416d757fd7b6dc4272b6432dc75a75abd068 GIT binary patch literal 282 zcmeAS@N?(olHy`uVBq!ia0vp^Yzz!63>-{AmhX=Jf@VhhFKy35^fiT zT~&lUj3=cDh^%3HDY9k5CEku}PHXNoNC(_$U3XPb&Q*ME25pT;2(*BOgAf<+R$lzakPG`kF31()Fx{L5Wrac|GQzjeE= zueY1`Ze{#x<8=S|`~MgGetGce)#vN&|J{Cd^tS%;tBYTo?+^d68<#n_Y_xx`J||4O V@QB{^CqU0Kc)I$ztaD0e0svEzbJzd? literal 0 HcmV?d00001 diff --git a/doc/1.5.5/libguac-terminal/structguac__terminal__options.html b/doc/1.5.5/libguac-terminal/structguac__terminal__options.html new file mode 100644 index 000000000..8648c9444 --- /dev/null +++ b/doc/1.5.5/libguac-terminal/structguac__terminal__options.html @@ -0,0 +1,201 @@ + + + + + + + +libguac-terminal: guac_terminal_options Struct Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac-terminal 1.5.5 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    + +
    guac_terminal_options Struct Reference
    +
    +
    + +

    Configuration options that may be passed when creating a new guac_terminal. + More...

    + +

    #include <terminal.h>

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Data Fields

    bool disable_copy
     Whether copying from the terminal clipboard should be blocked.
     
    int max_scrollback
     The maximum number of rows to allow within the scrollback buffer.
     
    +char * font_name
     The name of the font to use when rendering glyphs.
     
    +int font_size
     The size of each glyph, in points.
     
    int dpi
     The DPI of the display.
     
    +int width
     The width of the terminal, in pixels.
     
    +int height
     The height of the terminal, in pixels.
     
    char * color_scheme
     The name of the color scheme to use.
     
    +int backspace
     The integer ASCII code to send when backspace is pressed in the terminal.
     
    +

    Detailed Description

    +

    Configuration options that may be passed when creating a new guac_terminal.

    +

    Note that guac_terminal_options should not be instantiated directly - to create a new options struct, use guac_terminal_options_create.

    +

    Field Documentation

    + +

    ◆ color_scheme

    + +
    +
    + + + + +
    char* guac_terminal_options::color_scheme
    +
    + +

    The name of the color scheme to use.

    +

    This string must be in the format accepted by guac_terminal_parse_color_scheme().

    + +
    +
    + +

    ◆ disable_copy

    + +
    +
    + + + + +
    bool guac_terminal_options::disable_copy
    +
    + +

    Whether copying from the terminal clipboard should be blocked.

    +

    If set, the contents of the terminal can still be copied, but will be usable only within the terminal itself. The clipboard contents will not be automatically streamed to the client.

    + +
    +
    + +

    ◆ dpi

    + +
    +
    + + + + +
    int guac_terminal_options::dpi
    +
    + +

    The DPI of the display.

    +

    The given font size will be adjusted to produce glyphs at the given DPI.

    + +
    +
    + +

    ◆ max_scrollback

    + +
    +
    + + + + +
    int guac_terminal_options::max_scrollback
    +
    + +

    The maximum number of rows to allow within the scrollback buffer.

    +

    The user may still alter the size of the scrollback buffer using terminal codes, however the size can never exceed the maximum size given here. Note that this space is shared with the display, with the scrollable area actually only containing the given number of rows less the number of rows currently displayed, and sufficient buffer space will always be allocated to represent the display area of the terminal regardless of the value given here.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/doc/1.5.5/libguac-terminal/sync_off.png b/doc/1.5.5/libguac-terminal/sync_off.png new file mode 100644 index 0000000000000000000000000000000000000000..3b443fc62892114406e3d399421b2a881b897acc GIT binary patch literal 853 zcmV-b1FHOqP)oT|#XixUYy%lpuf3i8{fX!o zUyDD0jOrAiT^tq>fLSOOABs-#u{dV^F$b{L9&!2=9&RmV;;8s^x&UqB$PCj4FdKbh zoB1WTskPUPu05XzFbA}=KZ-GP1fPpAfSs>6AHb12UlR%-i&uOlTpFNS7{jm@mkU1V zh`nrXr~+^lsV-s1dkZOaI|kYyVj3WBpPCY{n~yd%u%e+d=f%`N0FItMPtdgBb@py; zq@v6NVArhyTC7)ULw-Jy8y42S1~4n(3LkrW8mW(F-4oXUP3E`e#g**YyqI7h-J2zK zK{m9##m4ri!7N>CqQqCcnI3hqo1I;Yh&QLNY4T`*ptiQGozK>FF$!$+84Z`xwmeMh zJ0WT+OH$WYFALEaGj2_l+#DC3t7_S`vHpSivNeFbP6+r50cO8iu)`7i%Z4BTPh@_m3Tk!nAm^)5Bqnr%Ov|Baunj#&RPtRuK& z4RGz|D5HNrW83-#ydk}tVKJrNmyYt-sTxLGlJY5nc&Re zU4SgHNPx8~Yxwr$bsju?4q&%T1874xxzq+_%?h8_ofw~(bld=o3iC)LUNR*BY%c0y zWd_jX{Y8`l%z+ol1$@Qa?Cy!(0CVIEeYpKZ`(9{z>3$CIe;pJDQk$m3p}$>xBm4lb zKo{4S)`wdU9Ba9jJbVJ0C=SOefZe%d$8=2r={nu<_^a3~>c#t_U6dye5)JrR(_a^E f@}b6j1K9lwFJq@>o)+Ry00000NkvXXu0mjfWa5j* literal 0 HcmV?d00001 diff --git a/doc/1.5.5/libguac-terminal/sync_on.png b/doc/1.5.5/libguac-terminal/sync_on.png new file mode 100644 index 0000000000000000000000000000000000000000..e08320fb64e6fa33b573005ed6d8fe294e19db76 GIT binary patch literal 845 zcmV-T1G4;yP)Y;xxyHF2B5Wzm| zOOGupOTn@c(JmBOl)e;XMNnZuiTJP>rM8<|Q`7I_))aP?*T)ow&n59{}X4$3Goat zgjs?*aasfbrokzG5cT4K=uG`E14xZl@z)F={P0Y^?$4t z>v!teRnNZym<6h{7sLyF1V0HsfEl+l6TrZpsfr1}luH~F7L}ktXu|*uVX^RG$L0`K zWs3j|0tIvVe(N%_?2{(iCPFGf#B6Hjy6o&}D$A%W%jfO8_W%ZO#-mh}EM$LMn7joJ z05dHr!5Y92g+31l<%i1(=L1a1pXX+OYnalY>31V4K}BjyRe3)9n#;-cCVRD_IG1fT zOKGeNY8q;TL@K{dj@D^scf&VCs*-Jb>8b>|`b*osv52-!A?BpbYtTQBns5EAU**$m zSnVSm(teh>tQi*S*A>#ySc=n;`BHz`DuG4&g4Kf8lLhca+zvZ7t7RflD6-i-mcK=M z!=^P$*u2)bkY5asG4gsss!Hn%u~>}kIW`vMs%lJLH+u*9<4PaV_c6U`KqWXQH%+Nu zTv41O(^ZVi@qhjQdG!fbZw&y+2o!iYymO^?ud3{P*HdoX83YV*Uu_HB=?U&W9%AU# z80}k1SS-CXTU7dcQlsm<^oYLxVSseqY6NO}dc`Nj?8vrhNuCdm@^{a3AQ_>6myOj+ z`1RsLUXF|dm|3k7s2jD(B{rzE>WI2scH8i1;=O5Cc9xB3^aJk%fQjqsu+kH#0=_5a z0nCE8@dbQa-|YIuUVvG0L_IwHMEhOj$Mj4Uq05 X8=0q~qBNan00000NkvXXu0mjfptF>5 literal 0 HcmV?d00001 diff --git a/doc/1.5.5/libguac-terminal/tab_a.png b/doc/1.5.5/libguac-terminal/tab_a.png new file mode 100644 index 0000000000000000000000000000000000000000..3b725c41c5a527a3a3e40097077d0e206a681247 GIT binary patch literal 142 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QlXwMjv*C{Z|8b*H5dputLHD# z=<0|*y7z(Vor?d;H&?EG&cXR}?!j-Lm&u1OOI7AIF5&c)RFE;&p0MYK>*Kl@eiymD r@|NpwKX@^z+;{u_Z~trSBfrMKa%3`zocFjEXaR$#tDnm{r-UW|TZ1%4 literal 0 HcmV?d00001 diff --git a/doc/1.5.5/libguac-terminal/tab_ad.png b/doc/1.5.5/libguac-terminal/tab_ad.png new file mode 100644 index 0000000000000000000000000000000000000000..e34850acfc24be58da6d2fd1ccc6b29cc84fe34d GIT binary patch literal 135 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QhuH;jv*C{Z|5d*H3V=pKi{In zd2jxLclDRPylmD}^l7{QOtL{vUjO{-WqItb5sQp2h-99b8^^Scr-=2mblCdZuUm?4 jzOJvgvt3{(cjKLW5(A@0qPS@<&}0TrS3j3^P6y&q2{!U5bk+Tso_B!YCpDh>v z{CM*1U8YvQRyBUHt^Ju0W_sq-?;9@_4equ-bavTs=gk796zopr0EBT&m;e9( literal 0 HcmV?d00001 diff --git a/doc/1.5.5/libguac-terminal/tab_s.png b/doc/1.5.5/libguac-terminal/tab_s.png new file mode 100644 index 0000000000000000000000000000000000000000..ab478c95b67371d700a20869f7de1ddd73522d50 GIT binary patch literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QuUrLjv*C{Z|^p8HaRdjTwH7) zC?wLlL}}I{)n%R&r+1}IGmDnq;&J#%V6)9VsYhS`O^BVBQlxOUep0c$RENLq#g8A$ z)z7%K_bI&n@J+X_=x}fJoEKed-$<>=ZI-;YrdjIl`U`uzuDWSP?o#Dmo{%SgM#oan kX~E1%D-|#H#QbHoIja2U-MgvsK&LQxy85}Sb4q9e0Efg%P5=M^ literal 0 HcmV?d00001 diff --git a/doc/1.5.5/libguac-terminal/tab_sd.png b/doc/1.5.5/libguac-terminal/tab_sd.png new file mode 100644 index 0000000000000000000000000000000000000000..757a565ced4730f85c833fb2547d8e199ae68f19 GIT binary patch literal 188 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!Qq7(&jv*C{Z|_!fH5o7*c=%9% zcILh!EA=pAQKdx-Cdiev=v{eg{8Ht<{e8_NAN~b=)%W>-WDCE0PyDHGemi$BoXwcK z{>e9^za6*c1ilttWw&V+U;WCPlV9{LdC~Ey%_H(qj`xgfES(4Yz5jSTZfCt`4E$0YRsR*S^mTCR^;V&sxC8{l_Cp7w8-YPgg&ebxsLQ00$vXK>z>% literal 0 HcmV?d00001 diff --git a/doc/1.5.5/libguac-terminal/tabs.css b/doc/1.5.5/libguac-terminal/tabs.css new file mode 100644 index 000000000..fe4854aa5 --- /dev/null +++ b/doc/1.5.5/libguac-terminal/tabs.css @@ -0,0 +1 @@ +.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.main-menu-btn{position:relative;display:inline-block;width:36px;height:36px;text-indent:36px;margin-left:8px;white-space:nowrap;overflow:hidden;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0)}.main-menu-btn-icon,.main-menu-btn-icon:before,.main-menu-btn-icon:after{position:absolute;top:50%;left:2px;height:2px;width:24px;background:var(--nav-menu-button-color);-webkit-transition:all .25s;transition:all .25s}.main-menu-btn-icon:before{content:'';top:-7px;left:0}.main-menu-btn-icon:after{content:'';top:7px;left:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon{height:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:before{top:0;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:after{top:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}#main-menu-state{position:absolute;width:1px;height:1px;margin:-1px;border:0;padding:0;overflow:hidden;clip:rect(1px,1px,1px,1px)}#main-menu-state:not(:checked) ~ #main-menu{display:none}#main-menu-state:checked ~ #main-menu{display:block}@media(min-width:768px){.main-menu-btn{position:absolute;top:-99999px}#main-menu-state:not(:checked) ~ #main-menu{display:block}}.sm-dox{background-image:var(--nav-gradient-image)}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:var(--font-family-nav);font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:var(--nav-text-normal-shadow);color:var(--nav-text-normal-color);outline:0}.sm-dox a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:var(--nav-menu-toggle-color);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a span.sub-arrow:before{display:block;content:'+'}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:var(--nav-menu-background-color)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:var(--nav-menu-background-color);background-image:none}.sm-dox ul a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:var(--nav-gradient-image);line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:var(--nav-text-normal-color) transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:var(--nav-separator-image);background-repeat:no-repeat;background-position:right;-moz-border-radius:0 !important;-webkit-border-radius:0;border-radius:0 !important}.sm-dox a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox a:hover span.sub-arrow{border-color:var(--nav-text-hover-color) transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent var(--nav-menu-background-color) transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:var(--nav-menu-background-color);-moz-border-radius:5px !important;-webkit-border-radius:5px;border-radius:5px !important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent var(--nav-menu-foreground-color);border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:var(--nav-menu-foreground-color);background-image:none;border:0 !important}.sm-dox ul a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent var(--nav-text-hover-color)}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:var(--nav-menu-background-color);height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent var(--nav-menu-foreground-color) transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:var(--nav-menu-foreground-color) transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:var(--nav-gradient-image)}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:var(--nav-menu-background-color)}} \ No newline at end of file diff --git a/doc/1.5.5/libguac-terminal/terminal_8h.html b/doc/1.5.5/libguac-terminal/terminal_8h.html new file mode 100644 index 000000000..f001a4d39 --- /dev/null +++ b/doc/1.5.5/libguac-terminal/terminal_8h.html @@ -0,0 +1,1588 @@ + + + + + + + +libguac-terminal: terminal/terminal.h File Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac-terminal 1.5.5 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    terminal.h File Reference
    +
    +
    + +

    Constants, structures, and function definitions defining the core functionality for the terminal library. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Data Structures

    struct  guac_terminal_options
     Configuration options that may be passed when creating a new guac_terminal. More...
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Macros

    +#define GUAC_TERMINAL_DEFAULT_FONT_NAME   "monospace"
     The name of the font to use for the terminal if no name is specified.
     
    +#define GUAC_TERMINAL_DEFAULT_FONT_SIZE   12
     The size of the font to use for the terminal if no font size is specified, in points.
     
    +#define GUAC_TERMINAL_DEFAULT_MAX_SCROLLBACK   1000
     The default maximum scrollback size in rows.
     
    +#define GUAC_TERMINAL_DEFAULT_BACKSPACE   127
     The default ASCII code to use for the backspace key.
     
    +#define GUAC_TERMINAL_DEFAULT_COLOR_SCHEME   ""
     The default (unset) color scheme.
     
    +#define GUAC_TERMINAL_DEFAULT_DISABLE_COPY   false
     The default value for the "disable copy" flag; by default copying is enabled.
     
    +#define GUAC_TERMINAL_MAX_ROWS   1024
     The absolute maximum number of rows to allow within the display.
     
    #define GUAC_TERMINAL_MAX_COLUMNS   1024
     The absolute maximum number of columns to allow within the display.
     
    +#define GUAC_TERMINAL_FRAME_DURATION   40
     The maximum duration of a single frame, in milliseconds.
     
    +#define GUAC_TERMINAL_FRAME_TIMEOUT   10
     The maximum amount of time to wait for more data before declaring a frame complete, in milliseconds.
     
    +#define GUAC_TERMINAL_MAX_TABS   16
     The maximum number of custom tab stops.
     
    +#define GUAC_TERMINAL_WHEEL_SCROLL_AMOUNT   3
     The number of rows to scroll per scroll wheel event.
     
    #define GUAC_TERMINAL_PIPE_INTERPRET_OUTPUT   1
     Flag which specifies that terminal output should be sent to both the current pipe stream and the user's display.
     
    #define GUAC_TERMINAL_PIPE_AUTOFLUSH   2
     Flag which forces the open pipe stream to be flushed automatically, whenever a new frame would be rendered, with only minimal buffering performed between frames.
     
    + + + + + + + + + + +

    +Typedefs

    +typedef struct guac_terminal guac_terminal
     Represents a terminal emulator which uses a given Guacamole client to render itself.
     
    typedef void guac_terminal_upload_path_handler(guac_client *client, char *path)
     Handler that is invoked whenever the necessary terminal codes are sent to to the given terminal to change the path for future file uploads.
     
    typedef guac_stream * guac_terminal_file_download_handler(guac_client *client, char *filename)
     Handler that is invoked whenever the necessary terminal codes are sent to initiate a download of a given remote file.
     
    + + + + +

    +Enumerations

    enum  guac_terminal_cursor_type { GUAC_TERMINAL_CURSOR_BLANK +, GUAC_TERMINAL_CURSOR_IBAR +, GUAC_TERMINAL_CURSOR_POINTER + }
     All possible mouse cursors used by the terminal emulator. More...
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    guac_terminalguac_terminal_create (guac_client *client, guac_terminal_options *terminal_options)
     Creates a new guac_terminal, having the given width and height, and rendering to the given client.
     
    guac_terminal_optionsguac_terminal_options_create (int width, int height, int dpi)
     Create a new guac_terminal_options struct.
     
    void guac_terminal_free (guac_terminal *term)
     Frees all resources associated with the given terminal.
     
    void guac_terminal_set_upload_path_handler (guac_terminal *terminal, guac_terminal_upload_path_handler *upload_path_handler)
     Sets the upload path handler for the given terminal.
     
    void guac_terminal_set_file_download_handler (guac_terminal *terminal, guac_terminal_file_download_handler *file_download_handler)
     Sets the file download handler for the given terminal.
     
    int guac_terminal_render_frame (guac_terminal *terminal)
     Renders a single frame of terminal data.
     
    int guac_terminal_read_stdin (guac_terminal *terminal, char *c, int size)
     Reads from this terminal's STDIN.
     
    void guac_terminal_start (guac_terminal *term)
     Notifies the terminal that rendering should begin and that user input should now be accepted.
     
    void guac_terminal_stop (guac_terminal *term)
     Manually stop the terminal to forcibly unblock any pending reads/writes, e.g.
     
    void guac_terminal_notify (guac_terminal *terminal)
     Notifies the terminal that an event has occurred and the terminal should flush itself when reasonable.
     
    char * guac_terminal_prompt (guac_terminal *terminal, const char *title, bool echo)
     Reads a single line from this terminal's STDIN, storing the result in a newly-allocated string.
     
    int guac_terminal_printf (guac_terminal *terminal, const char *format,...)
     Writes the given format string and arguments to this terminal's STDOUT in the same manner as printf().
     
    int guac_terminal_send_key (guac_terminal *term, int keysym, int pressed)
     Handles the given key event, sending data, scrolling, pasting clipboard data, etc.
     
    int guac_terminal_send_mouse (guac_terminal *term, guac_user *user, int x, int y, int mask)
     Handles the given mouse event, sending data, scrolling, pasting clipboard data, etc.
     
    int guac_terminal_send_data (guac_terminal *term, const char *data, int length)
     Sends the given string as if typed by the user.
     
    int guac_terminal_send_string (guac_terminal *term, const char *data)
     Sends the given string as if typed by the user.
     
    int guac_terminal_write (guac_terminal *term, const char *buffer, int length)
     Writes the given buffer to the given terminal's STDOUT.
     
    int guac_terminal_send_stream (guac_terminal *term, guac_user *user, guac_stream *stream)
     Initializes the handlers of the given guac_stream such that it serves as the source of input to the terminal.
     
    int guac_terminal_sendf (guac_terminal *term, const char *format,...)
     Sends data through STDIN as if typed by the user, using the format string given and any args (similar to printf).
     
    void guac_terminal_dup (guac_terminal *term, guac_user *user, guac_socket *socket)
     Replicates the current display state to a user that has just joined the connection.
     
    void guac_terminal_sync_users (guac_terminal *term, guac_client *client, guac_socket *socket)
     Replicates the current display state to one or more users that are joining the connection.
     
    int guac_terminal_resize (guac_terminal *term, int width, int height)
     Resize the client display and terminal to the given pixel dimensions.
     
    int guac_terminal_get_available_scroll (guac_terminal *term)
     Returns the number of rows within the buffer of the given terminal which are not currently displayed on screen.
     
    int guac_terminal_get_rows (guac_terminal *term)
     Returns the height of the given terminal, in characters.
     
    int guac_terminal_get_columns (guac_terminal *term)
     Returns the width of the given terminal, in characters.
     
    void guac_terminal_clipboard_reset (guac_terminal *terminal, const char *mimetype)
     Clears the clipboard contents for a given terminal, and assigns a new mimetype for future data.
     
    void guac_terminal_clipboard_append (guac_terminal *terminal, const char *data, int length)
     Appends the given data to the contents of the clipboard for the given terminal.
     
    void guac_terminal_remove_user (guac_terminal *terminal, guac_user *user)
     Removes the given user from any user-specific resources internal to the given terminal.
     
    int guac_terminal_create_typescript (guac_terminal *term, const char *path, const char *name, int create_path)
     Requests that the terminal write all output to a new pair of typescript files within the given path and using the given base name.
     
    void guac_terminal_apply_color_scheme (guac_terminal *terminal, const char *color_scheme)
     Immediately applies the given color scheme to the given terminal, overriding the color scheme provided when the terminal was created.
     
    const char * guac_terminal_get_color_scheme (guac_terminal *terminal)
     Returns name of the color scheme currently in use by the given terminal.
     
    void guac_terminal_apply_font (guac_terminal *terminal, const char *font_name, int font_size, int dpi)
     Alters the font of the terminal.
     
    const char * guac_terminal_get_font_name (guac_terminal *terminal)
     Returns the font name currently in use by the given terminal.
     
    int guac_terminal_get_font_size (guac_terminal *terminal)
     Returns the font size currently in use by the given terminal.
     
    int guac_terminal_get_mod_ctrl (guac_terminal *terminal)
     Returns the current state of the mod_ctrl flag in the given terminal.
     
    +

    Detailed Description

    +

    Constants, structures, and function definitions defining the core functionality for the terminal library.

    +

    Macro Definition Documentation

    + +

    ◆ GUAC_TERMINAL_MAX_COLUMNS

    + +
    +
    + + + + +
    #define GUAC_TERMINAL_MAX_COLUMNS   1024
    +
    + +

    The absolute maximum number of columns to allow within the display.

    +

    This implicitly limits the number of columns allowed within the buffer.

    + +
    +
    + +

    ◆ GUAC_TERMINAL_PIPE_AUTOFLUSH

    + +
    +
    + + + + +
    #define GUAC_TERMINAL_PIPE_AUTOFLUSH   2
    +
    + +

    Flag which forces the open pipe stream to be flushed automatically, whenever a new frame would be rendered, with only minimal buffering performed between frames.

    +

    By default, the contents of the pipe stream will be flushed only when the buffer is full or the pipe stream is being closed.

    + +
    +
    + +

    ◆ GUAC_TERMINAL_PIPE_INTERPRET_OUTPUT

    + +
    +
    + + + + +
    #define GUAC_TERMINAL_PIPE_INTERPRET_OUTPUT   1
    +
    + +

    Flag which specifies that terminal output should be sent to both the current pipe stream and the user's display.

    +

    By default, terminal output will be sent only to the open pipe.

    + +
    +
    +

    Typedef Documentation

    + +

    ◆ guac_terminal_file_download_handler

    + +
    +
    + + + + +
    typedef guac_stream * guac_terminal_file_download_handler(guac_client *client, char *filename)
    +
    + +

    Handler that is invoked whenever the necessary terminal codes are sent to initiate a download of a given remote file.

    +
    Parameters
    + + + +
    clientThe guac_client associated with the terminal receiving the file download terminal code.
    filenameThe name of the requested file. This may be a relative or absolute path, and it is up to the implementation to define how this value is interpreted.
    +
    +
    +
    Returns
    The file stream created for the file download, already configured to properly handle "ack" responses, etc. from the client, or NULL if the stream could not be created.
    + +
    +
    + +

    ◆ guac_terminal_upload_path_handler

    + +
    +
    + + + + +
    typedef void guac_terminal_upload_path_handler(guac_client *client, char *path)
    +
    + +

    Handler that is invoked whenever the necessary terminal codes are sent to to the given terminal to change the path for future file uploads.

    +
    Parameters
    + + + +
    clientThe guac_client associated with the terminal receiving the upload path change terminal code.
    pathThe requested path.
    +
    +
    + +
    +
    +

    Enumeration Type Documentation

    + +

    ◆ guac_terminal_cursor_type

    + +
    +
    + + + + +
    enum guac_terminal_cursor_type
    +
    + +

    All possible mouse cursors used by the terminal emulator.

    + + + + +
    Enumerator
    GUAC_TERMINAL_CURSOR_BLANK 

    A transparent (blank) cursor.

    +
    GUAC_TERMINAL_CURSOR_IBAR 

    A standard I-bar cursor for selecting text, etc.

    +
    GUAC_TERMINAL_CURSOR_POINTER 

    A standard triangular mouse pointer for manipulating non-text objects.

    +
    + +
    +
    +

    Function Documentation

    + +

    ◆ guac_terminal_apply_color_scheme()

    + +
    +
    + + + + + + + + + + + +
    void guac_terminal_apply_color_scheme (guac_terminal * terminal,
    const char * color_scheme )
    +
    + +

    Immediately applies the given color scheme to the given terminal, overriding the color scheme provided when the terminal was created.

    +

    Valid color schemes are those accepted by guac_terminal_parse_color_scheme().

    +
    Parameters
    + + + +
    terminalThe terminal to apply the color scheme to.
    color_schemeThe color scheme to apply.
    +
    +
    + +
    +
    + +

    ◆ guac_terminal_apply_font()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    void guac_terminal_apply_font (guac_terminal * terminal,
    const char * font_name,
    int font_size,
    int dpi )
    +
    + +

    Alters the font of the terminal.

    +

    The terminal will automatically be redrawn and resized as necessary. If the terminal size changes, the remote side of the terminal session must be manually informed of that change or graphical artifacts may result.

    +
    Parameters
    + + + + + +
    terminalThe terminal whose font family and/or size are being changed.
    font_nameThe name of the new font family, or NULL if the font family should remain unchanged.
    font_sizeThe new font size, in points, or -1 if the font size should remain unchanged.
    dpiThe resolution of the display in DPI. If the font size will not be changed (the font size given is -1), this value is ignored.
    +
    +
    + +
    +
    + +

    ◆ guac_terminal_clipboard_append()

    + +
    +
    + + + + + + + + + + + + + + + + +
    void guac_terminal_clipboard_append (guac_terminal * terminal,
    const char * data,
    int length )
    +
    + +

    Appends the given data to the contents of the clipboard for the given terminal.

    +

    The data must match the mimetype chosen for the clipboard data by guac_terminal_clipboard_reset().

    +
    Parameters
    + + + + +
    terminalThe terminal whose clipboard is being appended to.
    dataThe data to append.
    lengthThe number of bytes to append from the data given.
    +
    +
    + +
    +
    + +

    ◆ guac_terminal_clipboard_reset()

    + +
    +
    + + + + + + + + + + + +
    void guac_terminal_clipboard_reset (guac_terminal * terminal,
    const char * mimetype )
    +
    + +

    Clears the clipboard contents for a given terminal, and assigns a new mimetype for future data.

    +
    Parameters
    + + + +
    terminalThe terminal whose clipboard is being reset.
    mimetypeThe mimetype of future data.
    +
    +
    + +
    +
    + +

    ◆ guac_terminal_create()

    + +
    +
    + + + + + + + + + + + +
    guac_terminal * guac_terminal_create (guac_client * client,
    guac_terminal_options * terminal_options )
    +
    + +

    Creates a new guac_terminal, having the given width and height, and rendering to the given client.

    +

    As failover mechanisms and the Guacamole client implementation typically use the receipt of a "sync" message to denote successful connection, rendering of frames (sending of "sync") will be withheld until guac_terminal_start() is called, and user input will be ignored. The guac_terminal_start() function should be invoked only after either the underlying connection has truly succeeded, or until visible terminal output or user input is required.

    +
    Parameters
    + + + +
    clientThe client to which the terminal will be rendered.
    terminal_optionsThe configuration used for instantiating the terminal. For information about the options, see the guac_terminal_options definition.
    +
    +
    +
    Returns
    A new guac_terminal having the given font, dimensions, and attributes which renders all text to the given client.
    + +
    +
    + +

    ◆ guac_terminal_create_typescript()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    int guac_terminal_create_typescript (guac_terminal * term,
    const char * path,
    const char * name,
    int create_path )
    +
    + +

    Requests that the terminal write all output to a new pair of typescript files within the given path and using the given base name.

    +

    Terminal output will be written to these new files, along with timing information. If the create_path flag is non-zero, the given path will be created if it does not yet exist. If creation of the typescript files or path fails, error messages will automatically be logged, and no typescript will be written. The typescript will automatically be closed once the terminal is freed.

    +
    Parameters
    + + + + + +
    termThe terminal whose output should be written to a typescript.
    pathThe full absolute path to a directory in which the typescript files should be created.
    nameThe base name to use for the typescript files created within the specified path.
    create_pathZero if the specified path MUST exist for typescript files to be written, or non-zero if the path should be created if it does not yet exist.
    +
    +
    +
    Returns
    Zero if the typescript files have been successfully created and a typescript will be written, non-zero otherwise.
    + +
    +
    + +

    ◆ guac_terminal_dup()

    + +
    +
    + + + + + + + + + + + + + + + + +
    void guac_terminal_dup (guac_terminal * term,
    guac_user * user,
    guac_socket * socket )
    +
    + +

    Replicates the current display state to a user that has just joined the connection.

    +

    All instructions necessary to replicate state are sent over the given socket.

    +
    Deprecated
    The guac_terminal_sync_users method should be used when duplicating display state to a set of users.
    +
    Parameters
    + + + + +
    termThe terminal emulator associated with the connection being joined.
    userThe user joining the connection.
    socketThe guac_socket specific to the joining user and across which messages synchronizing the current display state should be sent.
    +
    +
    + +
    +
    + +

    ◆ guac_terminal_free()

    + +
    +
    + + + + + + + +
    void guac_terminal_free (guac_terminal * term)
    +
    + +

    Frees all resources associated with the given terminal.

    +
    Parameters
    + + +
    termThe terminal to free.
    +
    +
    + +
    +
    + +

    ◆ guac_terminal_get_available_scroll()

    + +
    +
    + + + + + + + +
    int guac_terminal_get_available_scroll (guac_terminal * term)
    +
    + +

    Returns the number of rows within the buffer of the given terminal which are not currently displayed on screen.

    +

    Adjustments to the desired scrollback size are taken into account, and rows which are within the buffer but unavailable due to being outside the desired scrollback range are ignored.

    +
    Parameters
    + + +
    termThe terminal whose off-screen row count should be determined.
    +
    +
    +
    Returns
    The number of rows within the buffer which are not currently displayed on screen.
    + +
    +
    + +

    ◆ guac_terminal_get_color_scheme()

    + +
    +
    + + + + + + + +
    const char * guac_terminal_get_color_scheme (guac_terminal * terminal)
    +
    + +

    Returns name of the color scheme currently in use by the given terminal.

    +
    Parameters
    + + +
    terminalThe terminal whose color scheme should be returned.
    +
    +
    +
    Returns
    The name of the color scheme currently in use by the given terminal.
    + +
    +
    + +

    ◆ guac_terminal_get_columns()

    + +
    +
    + + + + + + + +
    int guac_terminal_get_columns (guac_terminal * term)
    +
    + +

    Returns the width of the given terminal, in characters.

    +
    Parameters
    + + +
    termThe terminal whose width should be determined.
    +
    +
    +
    Returns
    The width of the terminal, in characters.
    + +
    +
    + +

    ◆ guac_terminal_get_font_name()

    + +
    +
    + + + + + + + +
    const char * guac_terminal_get_font_name (guac_terminal * terminal)
    +
    + +

    Returns the font name currently in use by the given terminal.

    +
    Parameters
    + + +
    terminalThe terminal whose font name is being retrieved.
    +
    +
    +
    Returns
    The name of the font in use by the given terminal.
    + +
    +
    + +

    ◆ guac_terminal_get_font_size()

    + +
    +
    + + + + + + + +
    int guac_terminal_get_font_size (guac_terminal * terminal)
    +
    + +

    Returns the font size currently in use by the given terminal.

    +
    Parameters
    + + +
    terminalThe terminal whose font size is being retrieved.
    +
    +
    +
    Returns
    The size of the font in use by the given terminal.
    + +
    +
    + +

    ◆ guac_terminal_get_mod_ctrl()

    + +
    +
    + + + + + + + +
    int guac_terminal_get_mod_ctrl (guac_terminal * terminal)
    +
    + +

    Returns the current state of the mod_ctrl flag in the given terminal.

    +
    Parameters
    + + +
    terminalThe terminal for which the mod_ctrl state is being checked.
    +
    +
    +
    Returns
    The current state of the mod_ctrl flag.
    + +
    +
    + +

    ◆ guac_terminal_get_rows()

    + +
    +
    + + + + + + + +
    int guac_terminal_get_rows (guac_terminal * term)
    +
    + +

    Returns the height of the given terminal, in characters.

    +
    Parameters
    + + +
    termThe terminal whose height should be determined.
    +
    +
    +
    Returns
    The height of the terminal, in characters.
    + +
    +
    + +

    ◆ guac_terminal_notify()

    + +
    +
    + + + + + + + +
    void guac_terminal_notify (guac_terminal * terminal)
    +
    + +

    Notifies the terminal that an event has occurred and the terminal should flush itself when reasonable.

    +
    Parameters
    + + +
    terminalThe terminal to notify.
    +
    +
    + +
    +
    + +

    ◆ guac_terminal_options_create()

    + +
    +
    + + + + + + + + + + + + + + + + +
    guac_terminal_options * guac_terminal_options_create (int width,
    int height,
    int dpi )
    +
    + +

    Create a new guac_terminal_options struct.

    +

    All parameters are required. Any options that are not passed in this constructor will be set to default values unless overriden.

    +

    The guac_terminal_options struct should only be created using this constructor.

    +
    Parameters
    + + + + +
    widthThe width of the terminal, in pixels.
    heightThe height of the terminal, in pixels.
    dpiThe DPI of the display. The given font size will be adjusted to produce glyphs at the given DPI.
    +
    +
    +
    Returns
    A new terminal options struct with all required options populated, ready to have any defaults overriden as needed.
    + +
    +
    + +

    ◆ guac_terminal_printf()

    + +
    +
    + + + + + + + + + + + + + + + + +
    int guac_terminal_printf (guac_terminal * terminal,
    const char * format,
    ... )
    +
    + +

    Writes the given format string and arguments to this terminal's STDOUT in the same manner as printf().

    +

    The entire populated format string will always be written unless an error occurs. This function may block until space is freed in the output buffer by guac_terminal_render_frame().

    +
    Parameters
    + + + + +
    terminalThe terminal to write to.
    formatA printf-style format string describing the data to be written to STDOUT.
    ...Any arguments to use when filling the format string.
    +
    +
    +
    Returns
    The number of bytes written to STDOUT, or a negative value if an error occurs preventing the data from being written in its entirety.
    + +
    +
    + +

    ◆ guac_terminal_prompt()

    + +
    +
    + + + + + + + + + + + + + + + + +
    char * guac_terminal_prompt (guac_terminal * terminal,
    const char * title,
    bool echo )
    +
    + +

    Reads a single line from this terminal's STDIN, storing the result in a newly-allocated string.

    +

    Input is retrieved in the same manner as guac_terminal_read_stdin() and the same restrictions apply. As reading input naturally requires user interaction, this function will implicitly invoke guac_terminal_start().

    +
    Parameters
    + + + + +
    terminalThe terminal to which the provided title should be output, and from whose STDIN the single line of input should be read.
    titleThe human-readable title to output to the terminal just prior to reading from STDIN.
    echoNon-zero if the characters read from STDIN should be echoed back as terminal output, or zero if asterisks should be displayed instead.
    +
    +
    +
    Returns
    A newly-allocated string containing a single line of input read from the provided terminal's STDIN. This string must eventually be manually freed with a call to guac_mem_free().
    + +
    +
    + +

    ◆ guac_terminal_read_stdin()

    + +
    +
    + + + + + + + + + + + + + + + + +
    int guac_terminal_read_stdin (guac_terminal * terminal,
    char * c,
    int size )
    +
    + +

    Reads from this terminal's STDIN.

    +

    Input comes from key and mouse events supplied by calls to guac_terminal_send_key(), guac_terminal_send_mouse(), and guac_terminal_send_stream(). If input is not yet available, this function will block.

    +
    Parameters
    + + + + +
    terminalThe terminal to read from.
    cThe buffer that should receive the bytes read.
    sizeThe number of bytes available within the buffer.
    +
    +
    +
    Returns
    The number of bytes read into the buffer, zero if end-of-file is reached (STDIN has been closed), or a negative value if an error occurs.
    + +
    +
    + +

    ◆ guac_terminal_remove_user()

    + +
    +
    + + + + + + + + + + + +
    void guac_terminal_remove_user (guac_terminal * terminal,
    guac_user * user )
    +
    + +

    Removes the given user from any user-specific resources internal to the given terminal.

    +

    This function must be called whenever a user leaves a terminal connection.

    +
    Parameters
    + + + +
    terminalThe terminal that the given user is leaving.
    userThe user who is disconnecting.
    +
    +
    + +
    +
    + +

    ◆ guac_terminal_render_frame()

    + +
    +
    + + + + + + + +
    int guac_terminal_render_frame (guac_terminal * terminal)
    +
    + +

    Renders a single frame of terminal data.

    +

    If data is not yet available, this function will block until data is written.

    +
    Parameters
    + + +
    terminalThe terminal that should be rendered.
    +
    +
    +
    Returns
    Zero if the frame was rendered successfully, non-zero if an error occurred.
    + +
    +
    + +

    ◆ guac_terminal_resize()

    + +
    +
    + + + + + + + + + + + + + + + + +
    int guac_terminal_resize (guac_terminal * term,
    int width,
    int height )
    +
    + +

    Resize the client display and terminal to the given pixel dimensions.

    +
    Parameters
    + + + + +
    termThe terminal to resize.
    widthThe new terminal width, in pixels.
    heightThe new terminal height, in pixels.
    +
    +
    +
    Returns
    Zero if the terminal was successfully resized to the given dimensions, non-zero otherwise.
    + +
    +
    + +

    ◆ guac_terminal_send_data()

    + +
    +
    + + + + + + + + + + + + + + + + +
    int guac_terminal_send_data (guac_terminal * term,
    const char * data,
    int length )
    +
    + +

    Sends the given string as if typed by the user.

    +

    If terminal input is currently coming from a stream due to a prior call to guac_terminal_send_stream(), any input which would normally result from invoking this function is dropped.

    +
    Parameters
    + + + + +
    termThe terminal which should receive the given data on STDIN.
    dataThe data the terminal should receive on STDIN.
    lengthThe size of the given data, in bytes.
    +
    +
    +
    Returns
    The number of bytes written to STDIN, or a negative value if an error occurs preventing the data from being written. This should always be the size of the data given unless data is intentionally dropped.
    + +
    +
    + +

    ◆ guac_terminal_send_key()

    + +
    +
    + + + + + + + + + + + + + + + + +
    int guac_terminal_send_key (guac_terminal * term,
    int keysym,
    int pressed )
    +
    + +

    Handles the given key event, sending data, scrolling, pasting clipboard data, etc.

    +

    as necessary. If terminal input is currently coming from a stream due to a prior call to guac_terminal_send_stream(), any input which would normally result from the key event is dropped.

    +
    Parameters
    + + + + +
    termThe terminal which should receive the given data on STDIN.
    keysymThe X11 keysym of the key that was pressed or released.
    pressedNon-zero if the key represented by the given keysym is currently pressed, zero if it is released.
    +
    +
    +
    Returns
    Zero if the key event was handled successfully, non-zero otherwise.
    + +
    +
    + +

    ◆ guac_terminal_send_mouse()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    int guac_terminal_send_mouse (guac_terminal * term,
    guac_user * user,
    int x,
    int y,
    int mask )
    +
    + +

    Handles the given mouse event, sending data, scrolling, pasting clipboard data, etc.

    +

    as necessary. If terminal input is currently coming from a stream due to a prior call to guac_terminal_send_stream(), any input which would normally result from the mouse event is dropped.

    +
    Parameters
    + + + + + + +
    termThe terminal which should receive the given data on STDIN.
    userThe user that originated the mouse event.
    xThe 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.
    yThe 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.
    maskAn 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.
    +
    +
    +
    See also
    GUAC_CLIENT_MOUSE_LEFT
    +
    +GUAC_CLIENT_MOUSE_MIDDLE
    +
    +GUAC_CLIENT_MOUSE_RIGHT
    +
    +GUAC_CLIENT_MOUSE_SCROLL_UP
    +
    +GUAC_CLIENT_MOUSE_SCROLL_DOWN
    +
    Returns
    Zero if the mouse event was handled successfully, non-zero otherwise.
    + +
    +
    + +

    ◆ guac_terminal_send_stream()

    + +
    +
    + + + + + + + + + + + + + + + + +
    int guac_terminal_send_stream (guac_terminal * term,
    guac_user * user,
    guac_stream * stream )
    +
    + +

    Initializes the handlers of the given guac_stream such that it serves as the source of input to the terminal.

    +

    Other input sources will be temporarily ignored until the stream is closed through receiving an "end" instruction. If input is already being read from a stream due to a prior call to guac_terminal_send_stream(), the prior call will remain in effect and this call will fail.

    +

    Calling this function will overwrite the data member of the given guac_stream.

    +
    Parameters
    + + + + +
    termThe terminal emulator which should receive input from the given stream.
    userThe user that opened the stream.
    streamThe guac_stream which should serve as the source of input for the terminal.
    +
    +
    +
    Returns
    Zero if the terminal input has successfully been configured to read from the given stream, non-zero otherwise.
    + +
    +
    + +

    ◆ guac_terminal_send_string()

    + +
    +
    + + + + + + + + + + + +
    int guac_terminal_send_string (guac_terminal * term,
    const char * data )
    +
    + +

    Sends the given string as if typed by the user.

    +

    If terminal input is currently coming from a stream due to a prior call to guac_terminal_send_stream(), any input which would normally result from invoking this function is dropped.

    +
    Parameters
    + + + +
    termThe terminal which should receive the given data on STDIN.
    dataThe data the terminal should receive on STDIN.
    +
    +
    +
    Returns
    The number of bytes written to STDIN, or a negative value if an error occurs preventing the data from being written. This should always be the size of the data given unless data is intentionally dropped.
    + +
    +
    + +

    ◆ guac_terminal_sendf()

    + +
    +
    + + + + + + + + + + + + + + + + +
    int guac_terminal_sendf (guac_terminal * term,
    const char * format,
    ... )
    +
    + +

    Sends data through STDIN as if typed by the user, using the format string given and any args (similar to printf).

    +

    If terminal input is currently coming from a stream due to a prior call to guac_terminal_send_stream(), any input which would normally result from invoking this function is dropped.

    +
    Parameters
    + + + + +
    termThe terminal which should receive the given data on STDIN.
    formatA printf-style format string describing the data to be received on STDIN.
    ...Any arguments to use when filling the format string.
    +
    +
    +
    Returns
    The number of bytes written to STDIN, or a negative value if an error occurs preventing the data from being written. This should always be the size of the data given unless data is intentionally dropped.
    + +
    +
    + +

    ◆ guac_terminal_set_file_download_handler()

    + +
    +
    + + + + + + + + + + + +
    void guac_terminal_set_file_download_handler (guac_terminal * terminal,
    guac_terminal_file_download_handler * file_download_handler )
    +
    + +

    Sets the file download handler for the given terminal.

    +

    The file download handler is invoked whenever the terminal codes requesting download of a given remote file are sent.

    +
    Parameters
    + + + +
    terminalThe terminal to set the file download handler for.
    file_download_handlerThe handler to be called whenever the necessary terminal codes are sent to the given terminal to initiate a download of a given remote file.
    +
    +
    + +
    +
    + +

    ◆ guac_terminal_set_upload_path_handler()

    + +
    +
    + + + + + + + + + + + +
    void guac_terminal_set_upload_path_handler (guac_terminal * terminal,
    guac_terminal_upload_path_handler * upload_path_handler )
    +
    + +

    Sets the upload path handler for the given terminal.

    +

    The upload path handler is invoked whenever the terminal codes requesting an upload path change are sent.

    +
    Parameters
    + + + +
    terminalThe terminal to set the upload path handler for.
    upload_path_handlerThe handler to be called whenever the necessary terminal codes are sent to the given terminal to change the path for future file uploads.
    +
    +
    + +
    +
    + +

    ◆ guac_terminal_start()

    + +
    +
    + + + + + + + +
    void guac_terminal_start (guac_terminal * term)
    +
    + +

    Notifies the terminal that rendering should begin and that user input should now be accepted.

    +

    This function must be invoked following terminal creation for the end of frames to be signalled with "sync" messages. Until this function is invoked, "sync" messages will be withheld.

    +
    Parameters
    + + +
    termThe terminal to start.
    +
    +
    + +
    +
    + +

    ◆ guac_terminal_stop()

    + +
    +
    + + + + + + + +
    void guac_terminal_stop (guac_terminal * term)
    +
    + +

    Manually stop the terminal to forcibly unblock any pending reads/writes, e.g.

    +

    forcing guac_terminal_read_stdin() to return and cease all terminal I/O.

    +
    Parameters
    + + +
    termThe terminal to stop.
    +
    +
    + +
    +
    + +

    ◆ guac_terminal_sync_users()

    + +
    +
    + + + + + + + + + + + + + + + + +
    void guac_terminal_sync_users (guac_terminal * term,
    guac_client * client,
    guac_socket * socket )
    +
    + +

    Replicates the current display state to one or more users that are joining the connection.

    +

    All instructions necessary to replicate state are sent over the given socket. The set of users receiving these instructions is determined solely by the socket chosen.

    +
    Parameters
    + + + + +
    termThe terminal whose state should be synchronized to the users.
    clientThe client associated with the users to be synchronized.
    socketThe socket to which the terminal state will be broadcast.
    +
    +
    + +
    +
    + +

    ◆ guac_terminal_write()

    + +
    +
    + + + + + + + + + + + + + + + + +
    int guac_terminal_write (guac_terminal * term,
    const char * buffer,
    int length )
    +
    + +

    Writes the given buffer to the given terminal's STDOUT.

    +

    All requested bytes will be written unless an error occurs. This function may block until space is freed in the output buffer by guac_terminal_render_frame().

    +
    Parameters
    + + + + +
    termThe terminal to write to.
    bufferA buffer containing the characters to be written to the terminal.
    lengthThe number of bytes within the given string to write to the terminal.
    +
    +
    +
    Returns
    The number of bytes written to STDOUT, or a negative value if an error occurs preventing the data from being written in its entirety.
    + +
    +
    +
    + + + + diff --git a/doc/1.5.5/libguac-terminal/terminal_8h_source.html b/doc/1.5.5/libguac-terminal/terminal_8h_source.html new file mode 100644 index 000000000..5bde767c2 --- /dev/null +++ b/doc/1.5.5/libguac-terminal/terminal_8h_source.html @@ -0,0 +1,327 @@ + + + + + + + +libguac-terminal: terminal/terminal.h Source File + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac-terminal 1.5.5 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    terminal.h
    +
    +
    +Go to the documentation of this file.
    1/*
    +
    2 * Licensed to the Apache Software Foundation (ASF) under one
    +
    3 * or more contributor license agreements. See the NOTICE file
    +
    4 * distributed with this work for additional information
    +
    5 * regarding copyright ownership. The ASF licenses this file
    +
    6 * to you under the Apache License, Version 2.0 (the
    +
    7 * "License"); you may not use this file except in compliance
    +
    8 * with the License. You may obtain a copy of the License at
    +
    9 *
    +
    10 * http://www.apache.org/licenses/LICENSE-2.0
    +
    11 *
    +
    12 * Unless required by applicable law or agreed to in writing,
    +
    13 * software distributed under the License is distributed on an
    +
    14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    15 * KIND, either express or implied. See the License for the
    +
    16 * specific language governing permissions and limitations
    +
    17 * under the License.
    +
    18 */
    +
    19
    +
    20#ifndef _GUAC_TERMINAL_H
    +
    21#define _GUAC_TERMINAL_H
    +
    22
    +
    30#include <pthread.h>
    +
    31#include <stdbool.h>
    +
    32
    +
    33#include <guacamole/client.h>
    +
    34#include <guacamole/stream.h>
    +
    35
    +
    39#define GUAC_TERMINAL_DEFAULT_FONT_NAME "monospace"
    +
    40
    +
    45#define GUAC_TERMINAL_DEFAULT_FONT_SIZE 12
    +
    46
    +
    50#define GUAC_TERMINAL_DEFAULT_MAX_SCROLLBACK 1000
    +
    51
    +
    55#define GUAC_TERMINAL_DEFAULT_BACKSPACE 127
    +
    56
    +
    60#define GUAC_TERMINAL_DEFAULT_COLOR_SCHEME ""
    +
    61
    +
    65#define GUAC_TERMINAL_DEFAULT_DISABLE_COPY false
    +
    66
    +
    70#define GUAC_TERMINAL_MAX_ROWS 1024
    +
    71
    +
    76#define GUAC_TERMINAL_MAX_COLUMNS 1024
    +
    77
    +
    81#define GUAC_TERMINAL_FRAME_DURATION 40
    +
    82
    +
    87#define GUAC_TERMINAL_FRAME_TIMEOUT 10
    +
    88
    +
    92#define GUAC_TERMINAL_MAX_TABS 16
    +
    93
    +
    97#define GUAC_TERMINAL_WHEEL_SCROLL_AMOUNT 3
    +
    98
    +
    104#define GUAC_TERMINAL_PIPE_INTERPRET_OUTPUT 1
    +
    105
    +
    112#define GUAC_TERMINAL_PIPE_AUTOFLUSH 2
    +
    113
    + +
    119
    + +
    141
    +
    153typedef void guac_terminal_upload_path_handler(guac_client* client, char* path);
    +
    154
    +
    173typedef guac_stream* guac_terminal_file_download_handler(guac_client* client, char* filename);
    +
    174
    +
    +
    181typedef struct guac_terminal_options {
    +
    182
    + +
    190
    + +
    202
    + +
    207
    + +
    212
    +
    217 int dpi;
    +
    218
    +
    222 int width;
    +
    223
    + +
    228
    + +
    234
    + +
    240
    + +
    +
    242
    + +
    265 guac_terminal_options* terminal_options);
    +
    266
    + +
    290 int width, int height, int dpi);
    +
    291
    + +
    299
    + +
    313 guac_terminal_upload_path_handler* upload_path_handler);
    +
    314
    + +
    328 guac_terminal_file_download_handler* file_download_handler);
    +
    329
    + +
    342
    +
    362int guac_terminal_read_stdin(guac_terminal* terminal, char* c, int size);
    +
    363
    + +
    374
    + +
    383
    + +
    392
    +
    417char* guac_terminal_prompt(guac_terminal* terminal, const char* title,
    +
    418 bool echo);
    +
    419
    +
    440int guac_terminal_printf(guac_terminal* terminal, const char* format, ...);
    +
    441
    +
    461int guac_terminal_send_key(guac_terminal* term, int keysym, int pressed);
    +
    462
    +
    501int guac_terminal_send_mouse(guac_terminal* term, guac_user* user,
    +
    502 int x, int y, int mask);
    +
    503
    +
    524int guac_terminal_send_data(guac_terminal* term, const char* data, int length);
    +
    525
    +
    543int guac_terminal_send_string(guac_terminal* term, const char* data);
    +
    544
    +
    563int guac_terminal_write(guac_terminal* term, const char* buffer, int length);
    +
    564
    +
    590int guac_terminal_send_stream(guac_terminal* term, guac_user* user,
    +
    591 guac_stream* stream);
    +
    592
    +
    614int guac_terminal_sendf(guac_terminal* term, const char* format, ...);
    +
    615
    +
    634void guac_terminal_dup(guac_terminal* term, guac_user* user,
    +
    635 guac_socket* socket);
    +
    636
    + +
    653 guac_terminal* term, guac_client* client, guac_socket* socket);
    +
    654
    +
    671int guac_terminal_resize(guac_terminal* term, int width, int height);
    +
    672
    + +
    687
    + +
    698
    + +
    709
    + +
    720 const char* mimetype);
    +
    721
    + +
    735 const char* data, int length);
    +
    736
    +
    747void guac_terminal_remove_user(guac_terminal* terminal, guac_user* user);
    +
    748
    + +
    779 const char* name, int create_path);
    +
    780
    + +
    793 const char* color_scheme);
    +
    794
    + +
    805
    +
    827void guac_terminal_apply_font(guac_terminal* terminal, const char* font_name,
    +
    828 int font_size, int dpi);
    +
    829
    + +
    840
    + +
    851
    + +
    862
    +
    863#endif
    +
    Configuration options that may be passed when creating a new guac_terminal.
    Definition terminal.h:181
    +
    int dpi
    The DPI of the display.
    Definition terminal.h:217
    +
    int height
    The height of the terminal, in pixels.
    Definition terminal.h:227
    +
    char * color_scheme
    The name of the color scheme to use.
    Definition terminal.h:233
    +
    int backspace
    The integer ASCII code to send when backspace is pressed in the terminal.
    Definition terminal.h:239
    +
    int width
    The width of the terminal, in pixels.
    Definition terminal.h:222
    +
    int font_size
    The size of each glyph, in points.
    Definition terminal.h:211
    +
    int max_scrollback
    The maximum number of rows to allow within the scrollback buffer.
    Definition terminal.h:201
    +
    bool disable_copy
    Whether copying from the terminal clipboard should be blocked.
    Definition terminal.h:189
    +
    char * font_name
    The name of the font to use when rendering glyphs.
    Definition terminal.h:206
    +
    char * guac_terminal_prompt(guac_terminal *terminal, const char *title, bool echo)
    Reads a single line from this terminal's STDIN, storing the result in a newly-allocated string.
    +
    void guac_terminal_clipboard_reset(guac_terminal *terminal, const char *mimetype)
    Clears the clipboard contents for a given terminal, and assigns a new mimetype for future data.
    +
    void guac_terminal_notify(guac_terminal *terminal)
    Notifies the terminal that an event has occurred and the terminal should flush itself when reasonable...
    +
    int guac_terminal_create_typescript(guac_terminal *term, const char *path, const char *name, int create_path)
    Requests that the terminal write all output to a new pair of typescript files within the given path a...
    +
    guac_terminal_options * guac_terminal_options_create(int width, int height, int dpi)
    Create a new guac_terminal_options struct.
    +
    int guac_terminal_send_stream(guac_terminal *term, guac_user *user, guac_stream *stream)
    Initializes the handlers of the given guac_stream such that it serves as the source of input to the t...
    +
    guac_stream * guac_terminal_file_download_handler(guac_client *client, char *filename)
    Handler that is invoked whenever the necessary terminal codes are sent to initiate a download of a gi...
    Definition terminal.h:173
    +
    void guac_terminal_sync_users(guac_terminal *term, guac_client *client, guac_socket *socket)
    Replicates the current display state to one or more users that are joining the connection.
    +
    void guac_terminal_upload_path_handler(guac_client *client, char *path)
    Handler that is invoked whenever the necessary terminal codes are sent to to the given terminal to ch...
    Definition terminal.h:153
    +
    void guac_terminal_set_upload_path_handler(guac_terminal *terminal, guac_terminal_upload_path_handler *upload_path_handler)
    Sets the upload path handler for the given terminal.
    +
    void guac_terminal_apply_color_scheme(guac_terminal *terminal, const char *color_scheme)
    Immediately applies the given color scheme to the given terminal, overriding the color scheme provide...
    +
    struct guac_terminal guac_terminal
    Represents a terminal emulator which uses a given Guacamole client to render itself.
    Definition terminal.h:118
    +
    void guac_terminal_stop(guac_terminal *term)
    Manually stop the terminal to forcibly unblock any pending reads/writes, e.g.
    +
    void guac_terminal_start(guac_terminal *term)
    Notifies the terminal that rendering should begin and that user input should now be accepted.
    +
    int guac_terminal_write(guac_terminal *term, const char *buffer, int length)
    Writes the given buffer to the given terminal's STDOUT.
    +
    int guac_terminal_printf(guac_terminal *terminal, const char *format,...)
    Writes the given format string and arguments to this terminal's STDOUT in the same manner as printf()...
    +
    guac_terminal_cursor_type
    All possible mouse cursors used by the terminal emulator.
    Definition terminal.h:123
    +
    @ GUAC_TERMINAL_CURSOR_IBAR
    A standard I-bar cursor for selecting text, etc.
    Definition terminal.h:133
    +
    @ GUAC_TERMINAL_CURSOR_BLANK
    A transparent (blank) cursor.
    Definition terminal.h:128
    +
    @ GUAC_TERMINAL_CURSOR_POINTER
    A standard triangular mouse pointer for manipulating non-text objects.
    Definition terminal.h:138
    +
    int guac_terminal_sendf(guac_terminal *term, const char *format,...)
    Sends data through STDIN as if typed by the user, using the format string given and any args (similar...
    +
    void guac_terminal_clipboard_append(guac_terminal *terminal, const char *data, int length)
    Appends the given data to the contents of the clipboard for the given terminal.
    +
    int guac_terminal_get_mod_ctrl(guac_terminal *terminal)
    Returns the current state of the mod_ctrl flag in the given terminal.
    +
    int guac_terminal_get_font_size(guac_terminal *terminal)
    Returns the font size currently in use by the given terminal.
    +
    const char * guac_terminal_get_color_scheme(guac_terminal *terminal)
    Returns name of the color scheme currently in use by the given terminal.
    +
    int guac_terminal_send_data(guac_terminal *term, const char *data, int length)
    Sends the given string as if typed by the user.
    +
    const char * guac_terminal_get_font_name(guac_terminal *terminal)
    Returns the font name currently in use by the given terminal.
    +
    void guac_terminal_dup(guac_terminal *term, guac_user *user, guac_socket *socket)
    Replicates the current display state to a user that has just joined the connection.
    +
    int guac_terminal_resize(guac_terminal *term, int width, int height)
    Resize the client display and terminal to the given pixel dimensions.
    +
    int guac_terminal_render_frame(guac_terminal *terminal)
    Renders a single frame of terminal data.
    +
    int guac_terminal_get_rows(guac_terminal *term)
    Returns the height of the given terminal, in characters.
    +
    guac_terminal * guac_terminal_create(guac_client *client, guac_terminal_options *terminal_options)
    Creates a new guac_terminal, having the given width and height, and rendering to the given client.
    +
    void guac_terminal_set_file_download_handler(guac_terminal *terminal, guac_terminal_file_download_handler *file_download_handler)
    Sets the file download handler for the given terminal.
    +
    int guac_terminal_send_key(guac_terminal *term, int keysym, int pressed)
    Handles the given key event, sending data, scrolling, pasting clipboard data, etc.
    +
    int guac_terminal_send_mouse(guac_terminal *term, guac_user *user, int x, int y, int mask)
    Handles the given mouse event, sending data, scrolling, pasting clipboard data, etc.
    +
    void guac_terminal_free(guac_terminal *term)
    Frees all resources associated with the given terminal.
    +
    int guac_terminal_read_stdin(guac_terminal *terminal, char *c, int size)
    Reads from this terminal's STDIN.
    +
    void guac_terminal_remove_user(guac_terminal *terminal, guac_user *user)
    Removes the given user from any user-specific resources internal to the given terminal.
    +
    void guac_terminal_apply_font(guac_terminal *terminal, const char *font_name, int font_size, int dpi)
    Alters the font of the terminal.
    +
    int guac_terminal_get_columns(guac_terminal *term)
    Returns the width of the given terminal, in characters.
    +
    int guac_terminal_get_available_scroll(guac_terminal *term)
    Returns the number of rows within the buffer of the given terminal which are not currently displayed ...
    +
    int guac_terminal_send_string(guac_terminal *term, const char *data)
    Sends the given string as if typed by the user.
    +
    + + + + diff --git a/doc/1.5.5/libguac/annotated.html b/doc/1.5.5/libguac/annotated.html new file mode 100644 index 000000000..74ecf63fe --- /dev/null +++ b/doc/1.5.5/libguac/annotated.html @@ -0,0 +1,102 @@ + + + + + + + +libguac: Data Structures + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Data Structures
    +
    +
    +
    Here are the data structures with brief descriptions:
    + + + + + + + + + + + + + + + + +
     Cguac_audio_encoderArbitrary audio codec encoder
     Cguac_audio_streamBasic audio stream
     Cguac_clientGuacamole proxy client
     Cguac_layerRepresents a single layer within the Guacamole protocol
     Cguac_objectRepresents a single object within the Guacamole protocol
     Cguac_parserA Guacamole protocol parser, which reads individual instructions, filling its own internal structure with the most recently read instruction data
     Cguac_poolA pool of integers
     Cguac_pool_intRepresents a single integer within a larger pool of integers
     Cguac_recordingAn in-progress session recording, attached to a guac_client instance such that output Guacamole instructions may be dynamically intercepted and written to a file
     Cguac_rwlockThis file implements reentrant read-write locks using thread-local storage to keep track of how locks are held and released by the current thread, since the pthread locks do not support reentrant behavior
     Cguac_socketThe core I/O object of Guacamole
     Cguac_socket_ssl_dataSSL socket-specific data
     Cguac_streamRepresents a single stream within the Guacamole protocol
     Cguac_userRepresentation of a physical connection within a larger logical connection which may be shared
     Cguac_user_infoInformation exposed by the remote client during the connection handshake which can be used by a client plugin
    +
    +
    + + + + diff --git a/doc/1.5.5/libguac/argv-constants_8h.html b/doc/1.5.5/libguac/argv-constants_8h.html new file mode 100644 index 000000000..1ecde9f8f --- /dev/null +++ b/doc/1.5.5/libguac/argv-constants_8h.html @@ -0,0 +1,141 @@ + + + + + + + +libguac: guacamole/argv-constants.h File Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    argv-constants.h File Reference
    +
    +
    + +

    Constants related to automatic handling of received "argv" instructions. +More...

    + +

    Go to the source code of this file.

    + + + + + + + + + + + + + + + + + + + + +

    +Macros

    #define GUAC_ARGV_OPTION_ONCE   1
     Option flag which declares to guac_argv_register() that the associated argument should be processed exactly once.
     
    +#define GUAC_ARGV_OPTION_ECHO   2
     Option flag which declares to guac_argv_register() that the values received and accepted for the associated argument should be echoed to all connected users via outbound "argv" streams.
     
    +#define GUAC_ARGV_MAX_LENGTH   16384
     The maximum number of bytes to allow for any argument value received via an argv stream and processed using guac_argv_received(), including null terminator.
     
    +#define GUAC_ARGV_MAX_NAME_LENGTH   256
     The maximum number of bytes to allow within the name of any argument registered with guac_argv_register(), including null terminator.
     
    +#define GUAC_ARGV_MAX_MIMETYPE_LENGTH   4096
     The maximum number of bytes to allow within the mimetype of any received argument value passed to a callback registered with guac_argv_register(), including null terminator.
     
    +#define GUAC_ARGV_MAX_REGISTERED   128
     The maximum number of arguments that may be registered via guac_argv_await() or guac_argv_await_async() before further argument registrations will fail.
     
    +

    Detailed Description

    +

    Constants related to automatic handling of received "argv" instructions.

    +

    Macro Definition Documentation

    + +

    ◆ GUAC_ARGV_OPTION_ONCE

    + +
    +
    + + + + +
    #define GUAC_ARGV_OPTION_ONCE   1
    +
    + +

    Option flag which declares to guac_argv_register() that the associated argument should be processed exactly once.

    +

    If multiple "argv" streams are received for the argument, only the first such stream is processed. Additional streams will be rejected.

    + +
    +
    +
    + + + + diff --git a/doc/1.5.5/libguac/argv-constants_8h_source.html b/doc/1.5.5/libguac/argv-constants_8h_source.html new file mode 100644 index 000000000..0781ea1cd --- /dev/null +++ b/doc/1.5.5/libguac/argv-constants_8h_source.html @@ -0,0 +1,128 @@ + + + + + + + +libguac: guacamole/argv-constants.h Source File + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    argv-constants.h
    +
    +
    +Go to the documentation of this file.
    1/*
    +
    2 * Licensed to the Apache Software Foundation (ASF) under one
    +
    3 * or more contributor license agreements. See the NOTICE file
    +
    4 * distributed with this work for additional information
    +
    5 * regarding copyright ownership. The ASF licenses this file
    +
    6 * to you under the Apache License, Version 2.0 (the
    +
    7 * "License"); you may not use this file except in compliance
    +
    8 * with the License. You may obtain a copy of the License at
    +
    9 *
    +
    10 * http://www.apache.org/licenses/LICENSE-2.0
    +
    11 *
    +
    12 * Unless required by applicable law or agreed to in writing,
    +
    13 * software distributed under the License is distributed on an
    +
    14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    15 * KIND, either express or implied. See the License for the
    +
    16 * specific language governing permissions and limitations
    +
    17 * under the License.
    +
    18 */
    +
    19
    +
    20#ifndef GUAC_ARGV_CONSTANTS_H
    +
    21#define GUAC_ARGV_CONSTANTS_H
    +
    22
    +
    35#define GUAC_ARGV_OPTION_ONCE 1
    +
    36
    +
    42#define GUAC_ARGV_OPTION_ECHO 2
    +
    43
    +
    49#define GUAC_ARGV_MAX_LENGTH 16384
    +
    50
    +
    55#define GUAC_ARGV_MAX_NAME_LENGTH 256
    +
    56
    +
    62#define GUAC_ARGV_MAX_MIMETYPE_LENGTH 4096
    +
    63
    +
    68#define GUAC_ARGV_MAX_REGISTERED 128
    +
    69
    +
    70#endif
    +
    71
    +
    + + + + diff --git a/doc/1.5.5/libguac/argv-fntypes_8h.html b/doc/1.5.5/libguac/argv-fntypes_8h.html new file mode 100644 index 000000000..d2340901d --- /dev/null +++ b/doc/1.5.5/libguac/argv-fntypes_8h.html @@ -0,0 +1,131 @@ + + + + + + + +libguac: guacamole/argv-fntypes.h File Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    argv-fntypes.h File Reference
    +
    +
    + +

    Function type definitions related to automatic handling of received "argv" instructions. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Typedefs

    typedef int guac_argv_callback(guac_user *user, const char *mimetype, const char *name, const char *value, void *data)
     Callback which is invoked by the automatic "argv" handling when the full value of a received argument has been received.
     
    +

    Detailed Description

    +

    Function type definitions related to automatic handling of received "argv" instructions.

    +

    Typedef Documentation

    + +

    ◆ guac_argv_callback

    + +
    +
    + + + + +
    typedef int guac_argv_callback(guac_user *user, const char *mimetype, const char *name, const char *value, void *data)
    +
    + +

    Callback which is invoked by the automatic "argv" handling when the full value of a received argument has been received.

    +
    Parameters
    + + + + + + +
    userThe user that opened the argument value stream.
    mimetypeThe mimetype of the data that will be sent along the stream.
    nameThe 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.
    valueThe value of the received argument.
    dataAny arbitrary data that was provided when the received argument was registered with guac_argv_register().
    +
    +
    +
    Returns
    Zero if the received argument value has been accepted and has either taken effect or is being intentionally ignored, non-zero otherwise.
    + +
    +
    +
    + + + + diff --git a/doc/1.5.5/libguac/argv-fntypes_8h_source.html b/doc/1.5.5/libguac/argv-fntypes_8h_source.html new file mode 100644 index 000000000..c946217d7 --- /dev/null +++ b/doc/1.5.5/libguac/argv-fntypes_8h_source.html @@ -0,0 +1,124 @@ + + + + + + + +libguac: guacamole/argv-fntypes.h Source File + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    argv-fntypes.h
    +
    +
    +Go to the documentation of this file.
    1/*
    +
    2 * Licensed to the Apache Software Foundation (ASF) under one
    +
    3 * or more contributor license agreements. See the NOTICE file
    +
    4 * distributed with this work for additional information
    +
    5 * regarding copyright ownership. The ASF licenses this file
    +
    6 * to you under the Apache License, Version 2.0 (the
    +
    7 * "License"); you may not use this file except in compliance
    +
    8 * with the License. You may obtain a copy of the License at
    +
    9 *
    +
    10 * http://www.apache.org/licenses/LICENSE-2.0
    +
    11 *
    +
    12 * Unless required by applicable law or agreed to in writing,
    +
    13 * software distributed under the License is distributed on an
    +
    14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    15 * KIND, either express or implied. See the License for the
    +
    16 * specific language governing permissions and limitations
    +
    17 * under the License.
    +
    18 */
    +
    19
    +
    20#ifndef GUAC_ARGV_FNTYPES_H
    +
    21#define GUAC_ARGV_FNTYPES_H
    +
    22
    +
    30#include "user-types.h"
    +
    31
    +
    58typedef int guac_argv_callback(guac_user* user, const char* mimetype,
    +
    59 const char* name, const char* value, void* data);
    +
    60
    +
    61#endif
    +
    62
    +
    int guac_argv_callback(guac_user *user, const char *mimetype, const char *name, const char *value, void *data)
    Callback which is invoked by the automatic "argv" handling when the full value of a received argument...
    Definition argv-fntypes.h:58
    +
    Representation of a physical connection within a larger logical connection which may be shared.
    Definition user.h:115
    +
    Type definitions related to the guac_user object.
    +
    + + + + diff --git a/doc/1.5.5/libguac/argv_8h.html b/doc/1.5.5/libguac/argv_8h.html new file mode 100644 index 000000000..06bf98760 --- /dev/null +++ b/doc/1.5.5/libguac/argv_8h.html @@ -0,0 +1,275 @@ + + + + + + + +libguac: guacamole/argv.h File Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    argv.h File Reference
    +
    +
    + +

    Convenience functions for processing parameter values that are submitted dynamically using "argv" instructions. +More...

    + +

    Go to the source code of this file.

    + + + + + + + + + + + + + + +

    +Functions

    int guac_argv_register (const char *name, guac_argv_callback *callback, void *data, int options)
     Registers the given callback such that it is automatically invoked when an "argv" stream for an argument having the given name is processed using guac_argv_received().
     
    int guac_argv_await (const char **args)
     Waits for receipt of each of the given arguments via guac_argv_received().
     
    int guac_argv_received (guac_stream *stream, const char *mimetype, const char *name)
     Hands off management of the given guac_stream, automatically processing data received over that stream as the value of the argument having the given name.
     
    void guac_argv_stop ()
     Stops further automatic processing of received "argv" streams.
     
    + + + + +

    +Variables

    guac_user_argv_handler guac_argv_handler
     Convenience implementation of the "argv" instruction handler which automatically sends any required "ack" instructions and invokes guac_argv_received().
     
    +

    Detailed Description

    +

    Convenience functions for processing parameter values that are submitted dynamically using "argv" instructions.

    +

    Function Documentation

    + +

    ◆ guac_argv_await()

    + +
    +
    + + + + + + + +
    int guac_argv_await (const char ** args)
    +
    + +

    Waits for receipt of each of the given arguments via guac_argv_received().

    +

    This function will block until either ALL of the given arguments have been received via guac_argv_received() or until automatic processing of received arguments is stopped with guac_argv_stop().

    +
    Parameters
    + + +
    argsA NULL-terminated array of the names of all arguments that this function should wait for.
    +
    +
    +
    Returns
    Zero if all of the specified arguments were received, non-zero if guac_argv_stop() was called before all arguments were received.
    + +
    +
    + +

    ◆ guac_argv_received()

    + +
    +
    + + + + + + + + + + + + + + + + +
    int guac_argv_received (guac_stream * stream,
    const char * mimetype,
    const char * name )
    +
    + +

    Hands off management of the given guac_stream, automatically processing data received over that stream as the value of the argument having the given name.

    +

    The argument must have already been registered with guac_argv_register(). The blob_handler and end_handler of the given stream, if already set, will be overridden without regard to their current value.

    +

    It is the responsibility of the caller to properly send any required "ack" instructions to accept or reject the received stream.

    +
    Parameters
    + + + + +
    streamThe guac_stream that will receive the value of the argument having the given name.
    mimetypeThe mimetype of the data that will be received over the stream.
    nameThe name of the argument being received.
    +
    +
    +
    Returns
    Zero if handling of the guac_stream has been successfully handed off, non-zero if the provided argument has not yet been registered with guac_argv_register().
    + +
    +
    + +

    ◆ guac_argv_register()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    int guac_argv_register (const char * name,
    guac_argv_callback * callback,
    void * data,
    int options )
    +
    + +

    Registers the given callback such that it is automatically invoked when an "argv" stream for an argument having the given name is processed using guac_argv_received().

    +

    The maximum number of arguments that may be registered in this way is limited by GUAC_ARGV_MAX_REGISTERED. The maximum length of any provided argument name is limited by GUAC_ARGV_MAX_NAME_LENGTH.

    +
    See also
    GUAC_ARGV_MAX_NAME_LENGTH
    +
    +GUAC_ARGV_MAX_REGISTERED
    +
    +GUAC_ARGV_OPTION_ONCE
    +
    +GUAC_ARGV_OPTION_ECHO
    +
    Parameters
    + + + + + +
    nameThe name of the argument that should be handled by the given callback.
    callbackThe callback to invoke when the value of an argument having the given name has finished being received.
    dataArbitrary data to be passed to the given callback when a value is received for the given argument.
    optionsBitwise OR of all option flags that should affect processing of this argument.
    +
    +
    +
    Returns
    Zero if the callback was successfully registered, non-zero if the maximum number of registered callbacks has already been reached.
    + +
    +
    + +

    ◆ guac_argv_stop()

    + +
    +
    + + + + + + + +
    void guac_argv_stop ()
    +
    + +

    Stops further automatic processing of received "argv" streams.

    +

    Any call to guac_argv_await() that is currently blocking will return, and any future calls to guac_argv_await() will return immediately without blocking.

    + +
    +
    +

    Variable Documentation

    + +

    ◆ guac_argv_handler

    + +
    +
    + + + + +
    guac_user_argv_handler guac_argv_handler
    +
    + +

    Convenience implementation of the "argv" instruction handler which automatically sends any required "ack" instructions and invokes guac_argv_received().

    +

    Only arguments that are registered with guac_argv_register() will be processed.

    + +
    +
    +
    + + + + diff --git a/doc/1.5.5/libguac/argv_8h_source.html b/doc/1.5.5/libguac/argv_8h_source.html new file mode 100644 index 000000000..6bcf8ec44 --- /dev/null +++ b/doc/1.5.5/libguac/argv_8h_source.html @@ -0,0 +1,143 @@ + + + + + + + +libguac: guacamole/argv.h Source File + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    argv.h
    +
    +
    +Go to the documentation of this file.
    1/*
    +
    2 * Licensed to the Apache Software Foundation (ASF) under one
    +
    3 * or more contributor license agreements. See the NOTICE file
    +
    4 * distributed with this work for additional information
    +
    5 * regarding copyright ownership. The ASF licenses this file
    +
    6 * to you under the Apache License, Version 2.0 (the
    +
    7 * "License"); you may not use this file except in compliance
    +
    8 * with the License. You may obtain a copy of the License at
    +
    9 *
    +
    10 * http://www.apache.org/licenses/LICENSE-2.0
    +
    11 *
    +
    12 * Unless required by applicable law or agreed to in writing,
    +
    13 * software distributed under the License is distributed on an
    +
    14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    15 * KIND, either express or implied. See the License for the
    +
    16 * specific language governing permissions and limitations
    +
    17 * under the License.
    +
    18 */
    +
    19
    +
    20#ifndef GUAC_ARGV_H
    +
    21#define GUAC_ARGV_H
    +
    22
    +
    30#include "argv-constants.h"
    +
    31#include "argv-fntypes.h"
    +
    32#include "stream-types.h"
    +
    33#include "user-fntypes.h"
    +
    34
    +
    67int guac_argv_register(const char* name, guac_argv_callback* callback, void* data, int options);
    +
    68
    +
    83int guac_argv_await(const char** args);
    +
    84
    +
    110int guac_argv_received(guac_stream* stream, const char* mimetype, const char* name);
    +
    111
    + +
    118
    + +
    126
    +
    127#endif
    +
    128
    +
    Constants related to automatic handling of received "argv" instructions.
    +
    Function type definitions related to automatic handling of received "argv" instructions.
    +
    int guac_argv_callback(guac_user *user, const char *mimetype, const char *name, const char *value, void *data)
    Callback which is invoked by the automatic "argv" handling when the full value of a received argument...
    Definition argv-fntypes.h:58
    +
    int guac_argv_await(const char **args)
    Waits for receipt of each of the given arguments via guac_argv_received().
    +
    void guac_argv_stop()
    Stops further automatic processing of received "argv" streams.
    +
    guac_user_argv_handler guac_argv_handler
    Convenience implementation of the "argv" instruction handler which automatically sends any required "...
    Definition argv.h:125
    +
    int guac_argv_register(const char *name, guac_argv_callback *callback, void *data, int options)
    Registers the given callback such that it is automatically invoked when an "argv" stream for an argum...
    +
    int guac_argv_received(guac_stream *stream, const char *mimetype, const char *name)
    Hands off management of the given guac_stream, automatically processing data received over that strea...
    +
    Type definitions related to Guacamole protocol streams.
    +
    Represents a single stream within the Guacamole protocol.
    Definition stream.h:32
    +
    Function type definitions related to the guac_user object.
    +
    int guac_user_argv_handler(guac_user *user, guac_stream *stream, char *mimetype, char *name)
    Handler for Guacamole argument value (argv) streams received from a user.
    Definition user-fntypes.h:312
    +
    + + + + diff --git a/doc/1.5.5/libguac/audio-fntypes_8h.html b/doc/1.5.5/libguac/audio-fntypes_8h.html new file mode 100644 index 000000000..f3c3496d0 --- /dev/null +++ b/doc/1.5.5/libguac/audio-fntypes_8h.html @@ -0,0 +1,230 @@ + + + + + + + +libguac: guacamole/audio-fntypes.h File Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    audio-fntypes.h File Reference
    +
    +
    + +

    Function type definitions related to simple streaming audio. +More...

    + +

    Go to the source code of this file.

    + + + + + + + + + + + + + + + + + +

    +Typedefs

    typedef void guac_audio_encoder_begin_handler(guac_audio_stream *audio)
     Handler which is called when the audio stream is opened.
     
    typedef void guac_audio_encoder_flush_handler(guac_audio_stream *audio)
     Handler which is called when the audio stream needs to be flushed.
     
    typedef void guac_audio_encoder_end_handler(guac_audio_stream *audio)
     Handler which is called when the audio stream is closed.
     
    typedef void guac_audio_encoder_join_handler(guac_audio_stream *audio, guac_user *user)
     Handler which is called when a new user has joined the Guacamole connection associated with the audio stream.
     
    typedef void guac_audio_encoder_write_handler(guac_audio_stream *audio, const unsigned char *pcm_data, int length)
     Handler which is called when PCM data is written to the audio stream.
     
    +

    Detailed Description

    +

    Function type definitions related to simple streaming audio.

    +

    Typedef Documentation

    + +

    ◆ guac_audio_encoder_begin_handler

    + +
    +
    + + + + +
    typedef void guac_audio_encoder_begin_handler(guac_audio_stream *audio)
    +
    + +

    Handler which is called when the audio stream is opened.

    +
    Parameters
    + + +
    audioThe audio stream being opened.
    +
    +
    + +
    +
    + +

    ◆ guac_audio_encoder_end_handler

    + +
    +
    + + + + +
    typedef void guac_audio_encoder_end_handler(guac_audio_stream *audio)
    +
    + +

    Handler which is called when the audio stream is closed.

    +
    Parameters
    + + +
    audioThe audio stream being closed.
    +
    +
    + +
    +
    + +

    ◆ guac_audio_encoder_flush_handler

    + +
    +
    + + + + +
    typedef void guac_audio_encoder_flush_handler(guac_audio_stream *audio)
    +
    + +

    Handler which is called when the audio stream needs to be flushed.

    +
    Parameters
    + + +
    audioThe audio stream being flushed.
    +
    +
    + +
    +
    + +

    ◆ guac_audio_encoder_join_handler

    + +
    +
    + + + + +
    typedef void guac_audio_encoder_join_handler(guac_audio_stream *audio, guac_user *user)
    +
    + +

    Handler which is called when a new user has joined the Guacamole connection associated with the audio stream.

    +
    Parameters
    + + + +
    audioThe audio stream associated with the Guacamole connection being joined.
    userThe user that joined the connection.
    +
    +
    + +
    +
    + +

    ◆ guac_audio_encoder_write_handler

    + +
    +
    + + + + +
    typedef void guac_audio_encoder_write_handler(guac_audio_stream *audio, const unsigned char *pcm_data, int length)
    +
    + +

    Handler which is called when PCM data is written to the audio stream.

    +

    The format of the PCM data is dictated by the properties of the audio stream.

    +
    Parameters
    + + + + +
    audioThe audio stream to which data is being written.
    pcm_dataA buffer containing the raw PCM data to be written.
    lengthThe number of bytes within the buffer that should be written to the audio stream.
    +
    +
    + +
    +
    +
    + + + + diff --git a/doc/1.5.5/libguac/audio-fntypes_8h_source.html b/doc/1.5.5/libguac/audio-fntypes_8h_source.html new file mode 100644 index 000000000..20e74f029 --- /dev/null +++ b/doc/1.5.5/libguac/audio-fntypes_8h_source.html @@ -0,0 +1,140 @@ + + + + + + + +libguac: guacamole/audio-fntypes.h Source File + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    audio-fntypes.h
    +
    +
    +Go to the documentation of this file.
    1/*
    +
    2 * Licensed to the Apache Software Foundation (ASF) under one
    +
    3 * or more contributor license agreements. See the NOTICE file
    +
    4 * distributed with this work for additional information
    +
    5 * regarding copyright ownership. The ASF licenses this file
    +
    6 * to you under the Apache License, Version 2.0 (the
    +
    7 * "License"); you may not use this file except in compliance
    +
    8 * with the License. You may obtain a copy of the License at
    +
    9 *
    +
    10 * http://www.apache.org/licenses/LICENSE-2.0
    +
    11 *
    +
    12 * Unless required by applicable law or agreed to in writing,
    +
    13 * software distributed under the License is distributed on an
    +
    14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    15 * KIND, either express or implied. See the License for the
    +
    16 * specific language governing permissions and limitations
    +
    17 * under the License.
    +
    18 */
    +
    19
    +
    20#ifndef GUAC_AUDIO_FNTYPES_H
    +
    21#define GUAC_AUDIO_FNTYPES_H
    +
    22
    +
    29#include "audio-types.h"
    +
    30#include "user-types.h"
    +
    31
    + +
    39
    + +
    47
    + +
    55
    + +
    68 guac_user* user);
    +
    69
    + +
    85 const unsigned char* pcm_data, int length);
    +
    86
    +
    87#endif
    +
    88
    +
    void guac_audio_encoder_begin_handler(guac_audio_stream *audio)
    Handler which is called when the audio stream is opened.
    Definition audio-fntypes.h:38
    +
    void guac_audio_encoder_write_handler(guac_audio_stream *audio, const unsigned char *pcm_data, int length)
    Handler which is called when PCM data is written to the audio stream.
    Definition audio-fntypes.h:84
    +
    void guac_audio_encoder_flush_handler(guac_audio_stream *audio)
    Handler which is called when the audio stream needs to be flushed.
    Definition audio-fntypes.h:46
    +
    void guac_audio_encoder_join_handler(guac_audio_stream *audio, guac_user *user)
    Handler which is called when a new user has joined the Guacamole connection associated with the audio...
    Definition audio-fntypes.h:67
    +
    void guac_audio_encoder_end_handler(guac_audio_stream *audio)
    Handler which is called when the audio stream is closed.
    Definition audio-fntypes.h:54
    +
    Type definitions related to simple streaming audio.
    +
    Basic audio stream.
    Definition audio.h:71
    +
    Representation of a physical connection within a larger logical connection which may be shared.
    Definition user.h:115
    +
    Type definitions related to the guac_user object.
    +
    + + + + diff --git a/doc/1.5.5/libguac/audio-types_8h.html b/doc/1.5.5/libguac/audio-types_8h.html new file mode 100644 index 000000000..f8ed3dda7 --- /dev/null +++ b/doc/1.5.5/libguac/audio-types_8h.html @@ -0,0 +1,94 @@ + + + + + + + +libguac: guacamole/audio-types.h File Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    audio-types.h File Reference
    +
    +
    + +

    Type definitions related to simple streaming audio. +More...

    + +

    Go to the source code of this file.

    +

    Detailed Description

    +

    Type definitions related to simple streaming audio.

    +
    + + + + diff --git a/doc/1.5.5/libguac/audio-types_8h_source.html b/doc/1.5.5/libguac/audio-types_8h_source.html new file mode 100644 index 000000000..7729513a6 --- /dev/null +++ b/doc/1.5.5/libguac/audio-types_8h_source.html @@ -0,0 +1,122 @@ + + + + + + + +libguac: guacamole/audio-types.h Source File + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    audio-types.h
    +
    +
    +Go to the documentation of this file.
    1/*
    +
    2 * Licensed to the Apache Software Foundation (ASF) under one
    +
    3 * or more contributor license agreements. See the NOTICE file
    +
    4 * distributed with this work for additional information
    +
    5 * regarding copyright ownership. The ASF licenses this file
    +
    6 * to you under the Apache License, Version 2.0 (the
    +
    7 * "License"); you may not use this file except in compliance
    +
    8 * with the License. You may obtain a copy of the License at
    +
    9 *
    +
    10 * http://www.apache.org/licenses/LICENSE-2.0
    +
    11 *
    +
    12 * Unless required by applicable law or agreed to in writing,
    +
    13 * software distributed under the License is distributed on an
    +
    14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    15 * KIND, either express or implied. See the License for the
    +
    16 * specific language governing permissions and limitations
    +
    17 * under the License.
    +
    18 */
    +
    19
    +
    20#ifndef __GUAC_AUDIO_TYPES_H
    +
    21#define __GUAC_AUDIO_TYPES_H
    +
    22
    + +
    35
    + +
    40
    +
    41#endif
    +
    42
    +
    Arbitrary audio codec encoder.
    Definition audio.h:34
    +
    Basic audio stream.
    Definition audio.h:71
    +
    + + + + diff --git a/doc/1.5.5/libguac/audio_8h.html b/doc/1.5.5/libguac/audio_8h.html new file mode 100644 index 000000000..0568ca19f --- /dev/null +++ b/doc/1.5.5/libguac/audio_8h.html @@ -0,0 +1,347 @@ + + + + + + + +libguac: guacamole/audio.h File Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    audio.h File Reference
    +
    +
    + +

    Provides functions and structures used for providing simple streaming audio. +More...

    + +

    Go to the source code of this file.

    + + + + + + + + +

    +Data Structures

    struct  guac_audio_encoder
     Arbitrary audio codec encoder. More...
     
    struct  guac_audio_stream
     Basic audio stream. More...
     
    + + + + + + + + + + + + + + + + + + + +

    +Functions

    guac_audio_streamguac_audio_stream_alloc (guac_client *client, guac_audio_encoder *encoder, int rate, int channels, int bps)
     Allocates a new audio stream at the client level which encodes audio data using the given encoder.
     
    void guac_audio_stream_reset (guac_audio_stream *audio, guac_audio_encoder *encoder, int rate, int channels, int bps)
     Resets the given audio stream, switching to the given encoder, rate, channels, and bits per sample.
     
    void guac_audio_stream_add_user (guac_audio_stream *audio, guac_user *user)
     Notifies the given audio stream that a user has joined the connection.
     
    void guac_audio_stream_free (guac_audio_stream *stream)
     Closes and frees the given audio stream.
     
    void guac_audio_stream_write_pcm (guac_audio_stream *stream, const unsigned char *data, int length)
     Writes PCM data to the given audio stream.
     
    void guac_audio_stream_flush (guac_audio_stream *stream)
     Flushes the underlying audio buffer, if any, ensuring that all audio previously written via guac_audio_stream_write_pcm() has been encoded and sent to the client.
     
    +

    Detailed Description

    +

    Provides functions and structures used for providing simple streaming audio.

    +

    Function Documentation

    + +

    ◆ guac_audio_stream_add_user()

    + +
    +
    + + + + + + + + + + + +
    void guac_audio_stream_add_user (guac_audio_stream * audio,
    guac_user * user )
    +
    + +

    Notifies the given audio stream that a user has joined the connection.

    +

    The audio stream itself may need to be restarted. and the audio stream will need to be created for the new user to ensure they can properly handle future data received along the stream.

    +
    Parameters
    + + + +
    audioThe guac_audio_stream associated with the Guacamole connection being joined.
    userThe user that has joined the Guacamole connection.
    +
    +
    + +
    +
    + +

    ◆ guac_audio_stream_alloc()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    guac_audio_stream * guac_audio_stream_alloc (guac_client * client,
    guac_audio_encoder * encoder,
    int rate,
    int channels,
    int bps )
    +
    + +

    Allocates a new audio stream at the client level which encodes audio data using the given encoder.

    +

    If NULL is specified for the encoder, an appropriate encoder will be selected based on the encoders built into libguac and the level of support declared by users associated with the given guac_client. The PCM format specified here (via rate, channels, and bps) must be the format used for all PCM data provided to the audio stream. The format may only be changed using guac_audio_stream_reset().

    +

    If a new user joins the connection after the audio stream is created, that user will not be aware of the existence of the audio stream, and guac_audio_stream_add_user() will need to be invoked to recreate the stream for the new user.

    +
    Parameters
    + + + + + + +
    clientThe guac_client for which this audio stream is being allocated. The connection owner is given priority when determining the level of audio support. It is currently assumed that all other joining users on the connection will have the same level of audio support.
    encoderThe guac_audio_encoder to use when encoding audio, or NULL if libguac should select an appropriate built-in encoder on its own.
    rateThe number of samples per second of PCM data sent to this stream.
    channelsThe number of audio channels per sample of PCM data. Legal values are 1 or 2.
    bpsThe number of bits per sample per channel for PCM data. Legal values are 8 or 16.
    +
    +
    +
    Returns
    The newly allocated guac_audio_stream, or NULL if no audio stream could be allocated due to lack of support on the part of the connecting Guacamole client or due to reaching the maximum number of active streams.
    + +
    +
    + +

    ◆ guac_audio_stream_flush()

    + +
    +
    + + + + + + + +
    void guac_audio_stream_flush (guac_audio_stream * stream)
    +
    + +

    Flushes the underlying audio buffer, if any, ensuring that all audio previously written via guac_audio_stream_write_pcm() has been encoded and sent to the client.

    +
    Parameters
    + + +
    streamThe guac_audio_stream whose audio buffers should be flushed.
    +
    +
    + +
    +
    + +

    ◆ guac_audio_stream_free()

    + +
    +
    + + + + + + + +
    void guac_audio_stream_free (guac_audio_stream * stream)
    +
    + +

    Closes and frees the given audio stream.

    +
    Parameters
    + + +
    streamThe guac_audio_stream to free.
    +
    +
    + +
    +
    + +

    ◆ guac_audio_stream_reset()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void guac_audio_stream_reset (guac_audio_stream * audio,
    guac_audio_encoder * encoder,
    int rate,
    int channels,
    int bps )
    +
    + +

    Resets the given audio stream, switching to the given encoder, rate, channels, and bits per sample.

    +

    If NULL is specified for the encoder, the encoder is left unchanged. If the encoder, rate, channels, and bits per sample are all identical to the current settings, this function has no effect.

    +
    Parameters
    + + + + + + +
    audioThe guac_audio_stream to reset.
    encoderThe guac_audio_encoder to use when encoding audio, or NULL to leave this unchanged.
    rateThe number of samples per second of PCM data sent to this stream.
    channelsThe number of audio channels per sample of PCM data. Legal values are 1 or 2.
    bpsThe number of bits per sample per channel for PCM data. Legal values are 8 or 16.
    +
    +
    + +
    +
    + +

    ◆ guac_audio_stream_write_pcm()

    + +
    +
    + + + + + + + + + + + + + + + + +
    void guac_audio_stream_write_pcm (guac_audio_stream * stream,
    const unsigned char * data,
    int length )
    +
    + +

    Writes PCM data to the given audio stream.

    +

    This PCM data will be automatically encoded by the audio encoder associated with this stream. The PCM data must be 2-channel, 44100 Hz, with signed 16-bit samples.

    +
    Parameters
    + + + + +
    streamThe guac_audio_stream to write PCM data through.
    dataThe PCM data to write.
    lengthThe number of bytes of PCM data provided.
    +
    +
    + +
    +
    +
    + + + + diff --git a/doc/1.5.5/libguac/audio_8h_source.html b/doc/1.5.5/libguac/audio_8h_source.html new file mode 100644 index 000000000..70447c28d --- /dev/null +++ b/doc/1.5.5/libguac/audio_8h_source.html @@ -0,0 +1,207 @@ + + + + + + + +libguac: guacamole/audio.h Source File + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    audio.h
    +
    +
    +Go to the documentation of this file.
    1/*
    +
    2 * Licensed to the Apache Software Foundation (ASF) under one
    +
    3 * or more contributor license agreements. See the NOTICE file
    +
    4 * distributed with this work for additional information
    +
    5 * regarding copyright ownership. The ASF licenses this file
    +
    6 * to you under the Apache License, Version 2.0 (the
    +
    7 * "License"); you may not use this file except in compliance
    +
    8 * with the License. You may obtain a copy of the License at
    +
    9 *
    +
    10 * http://www.apache.org/licenses/LICENSE-2.0
    +
    11 *
    +
    12 * Unless required by applicable law or agreed to in writing,
    +
    13 * software distributed under the License is distributed on an
    +
    14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    15 * KIND, either express or implied. See the License for the
    +
    16 * specific language governing permissions and limitations
    +
    17 * under the License.
    +
    18 */
    +
    19
    +
    20#ifndef __GUAC_AUDIO_H
    +
    21#define __GUAC_AUDIO_H
    +
    22
    +
    29#include "audio-fntypes.h"
    +
    30#include "audio-types.h"
    +
    31#include "client-types.h"
    +
    32#include "stream-types.h"
    +
    33
    + +
    70
    +
    + +
    72
    + +
    77
    + +
    82
    + +
    87
    +
    91 int rate;
    +
    92
    + +
    98
    +
    103 int bps;
    +
    104
    +
    108 void* data;
    +
    109
    +
    110};
    +
    +
    111
    + +
    154 guac_audio_encoder* encoder, int rate, int channels, int bps);
    +
    155
    + +
    182 guac_audio_encoder* encoder, int rate, int channels, int bps);
    +
    183
    + +
    198
    + +
    206
    + +
    222 const unsigned char* data, int length);
    +
    223
    + +
    233
    +
    234#endif
    +
    235
    +
    Function type definitions related to simple streaming audio.
    +
    void guac_audio_encoder_begin_handler(guac_audio_stream *audio)
    Handler which is called when the audio stream is opened.
    Definition audio-fntypes.h:38
    +
    void guac_audio_encoder_write_handler(guac_audio_stream *audio, const unsigned char *pcm_data, int length)
    Handler which is called when PCM data is written to the audio stream.
    Definition audio-fntypes.h:84
    +
    void guac_audio_encoder_flush_handler(guac_audio_stream *audio)
    Handler which is called when the audio stream needs to be flushed.
    Definition audio-fntypes.h:46
    +
    void guac_audio_encoder_join_handler(guac_audio_stream *audio, guac_user *user)
    Handler which is called when a new user has joined the Guacamole connection associated with the audio...
    Definition audio-fntypes.h:67
    +
    void guac_audio_encoder_end_handler(guac_audio_stream *audio)
    Handler which is called when the audio stream is closed.
    Definition audio-fntypes.h:54
    +
    Type definitions related to simple streaming audio.
    +
    void guac_audio_stream_reset(guac_audio_stream *audio, guac_audio_encoder *encoder, int rate, int channels, int bps)
    Resets the given audio stream, switching to the given encoder, rate, channels, and bits per sample.
    +
    void guac_audio_stream_write_pcm(guac_audio_stream *stream, const unsigned char *data, int length)
    Writes PCM data to the given audio stream.
    +
    void guac_audio_stream_add_user(guac_audio_stream *audio, guac_user *user)
    Notifies the given audio stream that a user has joined the connection.
    +
    guac_audio_stream * guac_audio_stream_alloc(guac_client *client, guac_audio_encoder *encoder, int rate, int channels, int bps)
    Allocates a new audio stream at the client level which encodes audio data using the given encoder.
    +
    void guac_audio_stream_free(guac_audio_stream *stream)
    Closes and frees the given audio stream.
    +
    void guac_audio_stream_flush(guac_audio_stream *stream)
    Flushes the underlying audio buffer, if any, ensuring that all audio previously written via guac_audi...
    +
    Type definitions related to the Guacamole client structure, guac_client.
    +
    Type definitions related to Guacamole protocol streams.
    +
    Arbitrary audio codec encoder.
    Definition audio.h:34
    +
    guac_audio_encoder_write_handler * write_handler
    Handler which will be called when PCM data is written to the audio stream for encoding.
    Definition audio.h:51
    +
    guac_audio_encoder_begin_handler * begin_handler
    Handler which will be called when the audio stream is first created.
    Definition audio.h:45
    +
    const char * mimetype
    The mimetype of the audio data encoded by this audio encoder.
    Definition audio.h:40
    +
    guac_audio_encoder_end_handler * end_handler
    Handler which will be called when the audio stream is closed.
    Definition audio.h:61
    +
    guac_audio_encoder_flush_handler * flush_handler
    Handler which will be called when the audio stream is flushed.
    Definition audio.h:56
    +
    guac_audio_encoder_join_handler * join_handler
    Handler which will be called when a new user joins the Guacamole connection associated with an audio ...
    Definition audio.h:67
    +
    Basic audio stream.
    Definition audio.h:71
    +
    guac_client * client
    The client associated with this audio stream.
    Definition audio.h:81
    +
    int bps
    The number of bits per sample per channel for PCM data.
    Definition audio.h:103
    +
    guac_stream * stream
    The actual stream associated with this audio stream.
    Definition audio.h:86
    +
    int rate
    The number of samples per second of PCM data sent to this stream.
    Definition audio.h:91
    +
    void * data
    Encoder-specific state data.
    Definition audio.h:108
    +
    guac_audio_encoder * encoder
    Arbitrary codec encoder which will receive raw PCM data.
    Definition audio.h:76
    +
    int channels
    The number of audio channels per sample of PCM data.
    Definition audio.h:97
    +
    Guacamole proxy client.
    Definition client.h:48
    +
    Represents a single stream within the Guacamole protocol.
    Definition stream.h:32
    +
    Representation of a physical connection within a larger logical connection which may be shared.
    Definition user.h:115
    +
    + + + + diff --git a/doc/1.5.5/libguac/bc_s.png b/doc/1.5.5/libguac/bc_s.png new file mode 100644 index 0000000000000000000000000000000000000000..224b29aa9847d5a4b3902efd602b7ddf7d33e6c2 GIT binary patch literal 676 zcmV;V0$crwP)y__>=_9%My z{n931IS})GlGUF8K#6VIbs%684A^L3@%PlP2>_sk`UWPq@f;rU*V%rPy_ekbhXT&s z(GN{DxFv}*vZp`F>S!r||M`I*nOwwKX+BC~3P5N3-)Y{65c;ywYiAh-1*hZcToLHK ztpl1xomJ+Yb}K(cfbJr2=GNOnT!UFA7Vy~fBz8?J>XHsbZoDad^8PxfSa0GDgENZS zuLCEqzb*xWX2CG*b&5IiO#NzrW*;`VC9455M`o1NBh+(k8~`XCEEoC1Ybwf;vr4K3 zg|EB<07?SOqHp9DhLpS&bzgo70I+ghB_#)K7H%AMU3v}xuyQq9&Bm~++VYhF09a+U zl7>n7Jjm$K#b*FONz~fj;I->Bf;ule1prFN9FovcDGBkpg>)O*-}eLnC{6oZHZ$o% zXKW$;0_{8hxHQ>l;_*HATI(`7t#^{$(zLe}h*mqwOc*nRY9=?Sx4OOeVIfI|0V(V2 zBrW#G7Ss9wvzr@>H*`r>zE z+e8bOBgqIgldUJlG(YUDviMB`9+DH8n-s9SXRLyJHO1!=wY^79WYZMTa(wiZ!zP66 zA~!21vmF3H2{ngD;+`6j#~6j;$*f*G_2ZD1E;9(yaw7d-QnSCpK(cR1zU3qU0000< KMNUMnLSTYoA~SLT literal 0 HcmV?d00001 diff --git a/doc/1.5.5/libguac/bc_sd.png b/doc/1.5.5/libguac/bc_sd.png new file mode 100644 index 0000000000000000000000000000000000000000..31ca888dc71049713b35c351933a8d0f36180bf1 GIT binary patch literal 635 zcmV->0)+jEP)Jwi0r1~gdSq#w{Bu1q z`craw(p2!hu$4C_$Oc3X(sI6e=9QSTwPt{G) z=htT&^~&c~L2~e{r5_5SYe7#Is-$ln>~Kd%$F#tC65?{LvQ}8O`A~RBB0N~`2M+waajO;5>3B&-viHGJeEK2TQOiPRa zfDKyqwMc4wfaEh4jt>H`nW_Zidwk@Bowp`}(VUaj-pSI(-1L>FJVsX}Yl9~JsqgsZ zUD9(rMwf23Gez6KPa|wwInZodP-2}9@fK0Ga_9{8SOjU&4l`pH4@qlQp83>>HT$xW zER^U>)MyV%t(Lu=`d=Y?{k1@}&r7ZGkFQ%z%N+sE9BtYjovzxyxCPxN6&@wLK{soQ zSmkj$aLI}miuE^p@~4}mg9OjDfGEkgY4~^XzLRUBB*O{+&vq<3v(E%+k_i%=`~j%{ Vj14gnt9}3g002ovPDHLkV1n!oC4m3{ literal 0 HcmV?d00001 diff --git a/doc/1.5.5/libguac/classes.html b/doc/1.5.5/libguac/classes.html new file mode 100644 index 000000000..81ac6ccb8 --- /dev/null +++ b/doc/1.5.5/libguac/classes.html @@ -0,0 +1,110 @@ + + + + + + + +libguac: Data Structure Index + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Data Structure Index
    +
    + + + + + diff --git a/doc/1.5.5/libguac/client-constants_8h.html b/doc/1.5.5/libguac/client-constants_8h.html new file mode 100644 index 000000000..39991d913 --- /dev/null +++ b/doc/1.5.5/libguac/client-constants_8h.html @@ -0,0 +1,185 @@ + + + + + + + +libguac: guacamole/client-constants.h File Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    client-constants.h File Reference
    +
    +
    + +

    Constants related to the Guacamole client structure, guac_client. +More...

    + +

    Go to the source code of this file.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Macros

    +#define GUAC_CLIENT_MAX_STREAMS   64
     The maximum number of inbound or outbound streams supported by any one guac_client.
     
    +#define GUAC_CLIENT_CLOSED_STREAM_INDEX   -1
     The index of a closed stream.
     
    +#define GUAC_CLIENT_ID_PREFIX   '$'
     The character prefix which identifies a client ID.
     
    +#define GUAC_CLIENT_MOUSE_LEFT   0x01
     The flag set in the mouse button mask when the left mouse button is down.
     
    +#define GUAC_CLIENT_MOUSE_MIDDLE   0x02
     The flag set in the mouse button mask when the middle mouse button is down.
     
    +#define GUAC_CLIENT_MOUSE_RIGHT   0x04
     The flag set in the mouse button mask when the right mouse button is down.
     
    #define GUAC_CLIENT_MOUSE_SCROLL_UP   0x08
     The flag set in the mouse button mask when the mouse scrollwheel is scrolled up.
     
    #define GUAC_CLIENT_MOUSE_SCROLL_DOWN   0x10
     The flag set in the mouse button mask when the mouse scrollwheel is scrolled down.
     
    #define GUAC_BUFFER_POOL_INITIAL_SIZE   1024
     The minimum number of buffers to create before allowing free'd buffers to be reclaimed.
     
    +

    Detailed Description

    +

    Constants related to the Guacamole client structure, guac_client.

    +

    Macro Definition Documentation

    + +

    ◆ GUAC_BUFFER_POOL_INITIAL_SIZE

    + +
    +
    + + + + +
    #define GUAC_BUFFER_POOL_INITIAL_SIZE   1024
    +
    + +

    The minimum number of buffers to create before allowing free'd buffers to be reclaimed.

    +

    In the case a protocol rapidly creates, uses, and destroys buffers, this can prevent unnecessary reuse of the same buffer (which would make draw operations unnecessarily synchronous).

    + +
    +
    + +

    ◆ GUAC_CLIENT_MOUSE_SCROLL_DOWN

    + +
    +
    + + + + +
    #define GUAC_CLIENT_MOUSE_SCROLL_DOWN   0x10
    +
    + +

    The flag set in the mouse button mask when the mouse scrollwheel is scrolled down.

    +

    Note that mouse scrollwheels are actually sets of two buttons. One button is pressed and released for an upward scroll, and the other is pressed and released for a downward scroll. Some mice may actually implement these as separate buttons, not a wheel.

    + +
    +
    + +

    ◆ GUAC_CLIENT_MOUSE_SCROLL_UP

    + +
    +
    + + + + +
    #define GUAC_CLIENT_MOUSE_SCROLL_UP   0x08
    +
    + +

    The flag set in the mouse button mask when the mouse scrollwheel is scrolled up.

    +

    Note that mouse scrollwheels are actually sets of two buttons. One button is pressed and released for an upward scroll, and the other is pressed and released for a downward scroll. Some mice may actually implement these as separate buttons, not a wheel.

    + +
    +
    +
    + + + + diff --git a/doc/1.5.5/libguac/client-constants_8h_source.html b/doc/1.5.5/libguac/client-constants_8h_source.html new file mode 100644 index 000000000..946c6788d --- /dev/null +++ b/doc/1.5.5/libguac/client-constants_8h_source.html @@ -0,0 +1,134 @@ + + + + + + + +libguac: guacamole/client-constants.h Source File + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    client-constants.h
    +
    +
    +Go to the documentation of this file.
    1/*
    +
    2 * Licensed to the Apache Software Foundation (ASF) under one
    +
    3 * or more contributor license agreements. See the NOTICE file
    +
    4 * distributed with this work for additional information
    +
    5 * regarding copyright ownership. The ASF licenses this file
    +
    6 * to you under the Apache License, Version 2.0 (the
    +
    7 * "License"); you may not use this file except in compliance
    +
    8 * with the License. You may obtain a copy of the License at
    +
    9 *
    +
    10 * http://www.apache.org/licenses/LICENSE-2.0
    +
    11 *
    +
    12 * Unless required by applicable law or agreed to in writing,
    +
    13 * software distributed under the License is distributed on an
    +
    14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    15 * KIND, either express or implied. See the License for the
    +
    16 * specific language governing permissions and limitations
    +
    17 * under the License.
    +
    18 */
    +
    19
    +
    20#ifndef _GUAC_CLIENT_CONSTANTS_H
    +
    21#define _GUAC_CLIENT_CONSTANTS_H
    +
    22
    +
    33#define GUAC_CLIENT_MAX_STREAMS 64
    +
    34
    +
    38#define GUAC_CLIENT_CLOSED_STREAM_INDEX -1
    +
    39
    +
    43#define GUAC_CLIENT_ID_PREFIX '$'
    +
    44
    +
    48#define GUAC_CLIENT_MOUSE_LEFT 0x01
    +
    49
    +
    53#define GUAC_CLIENT_MOUSE_MIDDLE 0x02
    +
    54
    +
    58#define GUAC_CLIENT_MOUSE_RIGHT 0x04
    +
    59
    +
    67#define GUAC_CLIENT_MOUSE_SCROLL_UP 0x08
    +
    68
    +
    76#define GUAC_CLIENT_MOUSE_SCROLL_DOWN 0x10
    +
    77
    +
    84#define GUAC_BUFFER_POOL_INITIAL_SIZE 1024
    +
    85
    +
    86#endif
    +
    87
    +
    + + + + diff --git a/doc/1.5.5/libguac/client-fntypes_8h.html b/doc/1.5.5/libguac/client-fntypes_8h.html new file mode 100644 index 000000000..2aac4f7b8 --- /dev/null +++ b/doc/1.5.5/libguac/client-fntypes_8h.html @@ -0,0 +1,209 @@ + + + + + + + +libguac: guacamole/client-fntypes.h File Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    client-fntypes.h File Reference
    +
    +
    + +

    Function type definitions related to the Guacamole client structure, guac_client. +More...

    + +

    Go to the source code of this file.

    + + + + + + + + + + + + + + +

    +Typedefs

    typedef int guac_client_free_handler(guac_client *client)
     Handler for freeing up any extra data allocated by the client implementation.
     
    typedef int guac_client_join_pending_handler(guac_client *client)
     Handler that will run before immediately before pending users are promoted to full users.
     
    typedef void guac_client_log_handler(guac_client *client, guac_client_log_level level, const char *format, va_list args)
     Handler for logging messages related to a given guac_client instance.
     
    typedef int guac_client_init_handler(guac_client *client)
     The entry point of a client plugin which must initialize the given guac_client.
     
    +

    Detailed Description

    +

    Function type definitions related to the Guacamole client structure, guac_client.

    +

    Typedef Documentation

    + +

    ◆ guac_client_free_handler

    + +
    +
    + + + + +
    typedef int guac_client_free_handler(guac_client *client)
    +
    + +

    Handler for freeing up any extra data allocated by the client implementation.

    +
    Parameters
    + + +
    clientThe client whose extra data should be freed (if any).
    +
    +
    +
    Returns
    Zero if the data was successfully freed, non-zero if an error prevents the data from being freed.
    + +
    +
    + +

    ◆ guac_client_init_handler

    + +
    +
    + + + + +
    typedef int guac_client_init_handler(guac_client *client)
    +
    + +

    The entry point of a client plugin which must initialize the given guac_client.

    +

    In practice, this function will be called "guac_client_init".

    +
    Parameters
    + + +
    clientThe guac_client that must be initialized.
    +
    +
    +
    Returns
    Zero on success, non-zero if initialization fails for any reason.
    + +
    +
    + +

    ◆ guac_client_join_pending_handler

    + +
    +
    + + + + +
    typedef int guac_client_join_pending_handler(guac_client *client)
    +
    + +

    Handler that will run before immediately before pending users are promoted to full users.

    +

    The pending user socket should be used to communicate to the pending users.

    +
    Parameters
    + + +
    clientThe client whose handler was invoked.
    +
    +
    +
    Returns
    Zero if the pending handler ran successfully, or a non-zero value if an error occurred.
    + +
    +
    + +

    ◆ guac_client_log_handler

    + +
    +
    + + + + +
    typedef void guac_client_log_handler(guac_client *client, guac_client_log_level level, const char *format, va_list args)
    +
    + +

    Handler for logging messages related to a given guac_client instance.

    +
    Parameters
    + + + + + +
    clientThe client related to the message being logged.
    levelThe log level at which to log the given message.
    formatA printf-style format string, defining the message to be logged.
    argsThe va_list containing the arguments to be used when filling the conversion specifiers ("%s", "%i", etc.) within the format string.
    +
    +
    + +
    +
    +
    + + + + diff --git a/doc/1.5.5/libguac/client-fntypes_8h_source.html b/doc/1.5.5/libguac/client-fntypes_8h_source.html new file mode 100644 index 000000000..d080a9ecf --- /dev/null +++ b/doc/1.5.5/libguac/client-fntypes_8h_source.html @@ -0,0 +1,148 @@ + + + + + + + +libguac: guacamole/client-fntypes.h Source File + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    client-fntypes.h
    +
    +
    +Go to the documentation of this file.
    1/*
    +
    2 * Licensed to the Apache Software Foundation (ASF) under one
    +
    3 * or more contributor license agreements. See the NOTICE file
    +
    4 * distributed with this work for additional information
    +
    5 * regarding copyright ownership. The ASF licenses this file
    +
    6 * to you under the Apache License, Version 2.0 (the
    +
    7 * "License"); you may not use this file except in compliance
    +
    8 * with the License. You may obtain a copy of the License at
    +
    9 *
    +
    10 * http://www.apache.org/licenses/LICENSE-2.0
    +
    11 *
    +
    12 * Unless required by applicable law or agreed to in writing,
    +
    13 * software distributed under the License is distributed on an
    +
    14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    15 * KIND, either express or implied. See the License for the
    +
    16 * specific language governing permissions and limitations
    +
    17 * under the License.
    +
    18 */
    +
    19
    +
    20#ifndef _GUAC_CLIENT_FNTYPES_H
    +
    21#define _GUAC_CLIENT_FNTYPES_H
    +
    22
    +
    30#include "client-types.h"
    +
    31#include "object-types.h"
    +
    32#include "protocol-types.h"
    +
    33#include "socket.h"
    +
    34#include "stream-types.h"
    +
    35#include "user-fntypes.h"
    +
    36#include "user-types.h"
    +
    37
    +
    38#include <stdarg.h>
    +
    39
    + +
    52
    + +
    66
    + +
    84 guac_client_log_level level, const char* format, va_list args);
    +
    85
    + +
    97
    +
    98#endif
    +
    99
    +
    void guac_client_log_handler(guac_client *client, guac_client_log_level level, const char *format, va_list args)
    Handler for logging messages related to a given guac_client instance.
    Definition client-fntypes.h:83
    +
    int guac_client_free_handler(guac_client *client)
    Handler for freeing up any extra data allocated by the client implementation.
    Definition client-fntypes.h:51
    +
    int guac_client_init_handler(guac_client *client)
    The entry point of a client plugin which must initialize the given guac_client.
    Definition client-fntypes.h:96
    +
    int guac_client_join_pending_handler(guac_client *client)
    Handler that will run before immediately before pending users are promoted to full users.
    Definition client-fntypes.h:65
    +
    Type definitions related to the Guacamole client structure, guac_client.
    +
    guac_client_log_level
    All supported log levels used by the logging subsystem of each Guacamole client.
    Definition client-types.h:62
    +
    Type definitions related to Guacamole protocol objects.
    +
    Type definitions related to the Guacamole protocol.
    +
    Defines the guac_socket object and functions for using and manipulating it.
    +
    Type definitions related to Guacamole protocol streams.
    +
    Guacamole proxy client.
    Definition client.h:48
    +
    Function type definitions related to the guac_user object.
    +
    Type definitions related to the guac_user object.
    +
    + + + + diff --git a/doc/1.5.5/libguac/client-types_8h.html b/doc/1.5.5/libguac/client-types_8h.html new file mode 100644 index 000000000..84a9f9694 --- /dev/null +++ b/doc/1.5.5/libguac/client-types_8h.html @@ -0,0 +1,170 @@ + + + + + + + +libguac: guacamole/client-types.h File Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    client-types.h File Reference
    +
    +
    + +

    Type definitions related to the Guacamole client structure, guac_client. +More...

    + +

    Go to the source code of this file.

    + + + + + + + + +

    +Enumerations

    enum  guac_client_state { GUAC_CLIENT_RUNNING +, GUAC_CLIENT_STOPPING + }
     Possible current states of the Guacamole client. More...
     
    enum  guac_client_log_level {
    +  GUAC_LOG_ERROR = 3 +, GUAC_LOG_WARNING = 4 +, GUAC_LOG_INFO = 6 +, GUAC_LOG_DEBUG = 7 +,
    +  GUAC_LOG_TRACE = 8 +
    + }
     All supported log levels used by the logging subsystem of each Guacamole client. More...
     
    +

    Detailed Description

    +

    Type definitions related to the Guacamole client structure, guac_client.

    +

    Enumeration Type Documentation

    + +

    ◆ guac_client_log_level

    + +
    +
    + + + + +
    enum guac_client_log_level
    +
    + +

    All supported log levels used by the logging subsystem of each Guacamole client.

    +

    With the exception of GUAC_LOG_TRACE, these log levels correspond to a subset of the log levels defined by RFC 5424.

    + + + + + + +
    Enumerator
    GUAC_LOG_ERROR 

    Fatal errors.

    +
    GUAC_LOG_WARNING 

    Non-fatal conditions that indicate problems.

    +
    GUAC_LOG_INFO 

    Informational messages of general interest to users or administrators.

    +
    GUAC_LOG_DEBUG 

    Informational messages which can be useful for debugging, but are otherwise not useful to users or administrators.

    +

    It is expected that debug level messages, while verbose, will not negatively affect performance.

    +
    GUAC_LOG_TRACE 

    Informational messages which can be useful for debugging, like GUAC_LOG_DEBUG, but which are so low-level that they may affect performance.

    +
    + +
    +
    + +

    ◆ guac_client_state

    + +
    +
    + + + + +
    enum guac_client_state
    +
    + +

    Possible current states of the Guacamole client.

    +

    Currently, the only two states are GUAC_CLIENT_RUNNING and GUAC_CLIENT_STOPPING.

    + + + +
    Enumerator
    GUAC_CLIENT_RUNNING 

    The state of the client from when it has been allocated by the main daemon until it is killed or disconnected.

    +
    GUAC_CLIENT_STOPPING 

    The state of the client when a stop has been requested, signalling the I/O threads to shutdown.

    +
    + +
    +
    +
    + + + + diff --git a/doc/1.5.5/libguac/client-types_8h_source.html b/doc/1.5.5/libguac/client-types_8h_source.html new file mode 100644 index 000000000..9017396ba --- /dev/null +++ b/doc/1.5.5/libguac/client-types_8h_source.html @@ -0,0 +1,154 @@ + + + + + + + +libguac: guacamole/client-types.h Source File + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    client-types.h
    +
    +
    +Go to the documentation of this file.
    1/*
    +
    2 * Licensed to the Apache Software Foundation (ASF) under one
    +
    3 * or more contributor license agreements. See the NOTICE file
    +
    4 * distributed with this work for additional information
    +
    5 * regarding copyright ownership. The ASF licenses this file
    +
    6 * to you under the Apache License, Version 2.0 (the
    +
    7 * "License"); you may not use this file except in compliance
    +
    8 * with the License. You may obtain a copy of the License at
    +
    9 *
    +
    10 * http://www.apache.org/licenses/LICENSE-2.0
    +
    11 *
    +
    12 * Unless required by applicable law or agreed to in writing,
    +
    13 * software distributed under the License is distributed on an
    +
    14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    15 * KIND, either express or implied. See the License for the
    +
    16 * specific language governing permissions and limitations
    +
    17 * under the License.
    +
    18 */
    +
    19
    +
    20#ifndef _GUAC_CLIENT_TYPES_H
    +
    21#define _GUAC_CLIENT_TYPES_H
    +
    22
    +
    35typedef struct guac_client guac_client;
    +
    36
    + +
    56
    +
    + +
    63
    + +
    68
    + +
    73
    + +
    78
    + +
    86
    + +
    93
    + +
    +
    95
    +
    96#endif
    +
    97
    +
    guac_client_state
    Possible current states of the Guacamole client.
    Definition client-types.h:41
    +
    @ GUAC_CLIENT_STOPPING
    The state of the client when a stop has been requested, signalling the I/O threads to shutdown.
    Definition client-types.h:53
    +
    @ GUAC_CLIENT_RUNNING
    The state of the client from when it has been allocated by the main daemon until it is killed or disc...
    Definition client-types.h:47
    +
    guac_client_log_level
    All supported log levels used by the logging subsystem of each Guacamole client.
    Definition client-types.h:62
    +
    @ GUAC_LOG_DEBUG
    Informational messages which can be useful for debugging, but are otherwise not useful to users or ad...
    Definition client-types.h:85
    +
    @ GUAC_LOG_WARNING
    Non-fatal conditions that indicate problems.
    Definition client-types.h:72
    +
    @ GUAC_LOG_ERROR
    Fatal errors.
    Definition client-types.h:67
    +
    @ GUAC_LOG_TRACE
    Informational messages which can be useful for debugging, like GUAC_LOG_DEBUG, but which are so low-l...
    Definition client-types.h:92
    +
    @ GUAC_LOG_INFO
    Informational messages of general interest to users or administrators.
    Definition client-types.h:77
    +
    Guacamole proxy client.
    Definition client.h:48
    +
    + + + + diff --git a/doc/1.5.5/libguac/client_8h.html b/doc/1.5.5/libguac/client_8h.html new file mode 100644 index 000000000..7af671b52 --- /dev/null +++ b/doc/1.5.5/libguac/client_8h.html @@ -0,0 +1,1372 @@ + + + + + + + +libguac: guacamole/client.h File Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    client.h File Reference
    +
    +
    + +

    Functions and structure contents for the Guacamole proxy client. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Data Structures

    struct  guac_client
     Guacamole proxy client. More...
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    guac_clientguac_client_alloc ()
     Returns a new, barebones guac_client.
     
    void guac_client_free (guac_client *client)
     Free all resources associated with the given client.
     
    void guac_client_log (guac_client *client, guac_client_log_level level, const char *format,...)
     Writes a message in the log used by the given client.
     
    void vguac_client_log (guac_client *client, guac_client_log_level level, const char *format, va_list ap)
     Writes a message in the log used by the given client.
     
    void guac_client_stop (guac_client *client)
     Signals the given client to stop gracefully.
     
    void guac_client_abort (guac_client *client, guac_protocol_status status, const char *format,...)
     Signals the given client to stop gracefully, while also signalling via the Guacamole protocol that an error has occurred.
     
    void vguac_client_abort (guac_client *client, guac_protocol_status status, const char *format, va_list ap)
     Signals the given client to stop gracefully, while also signalling via the Guacamole protocol that an error has occurred.
     
    guac_layerguac_client_alloc_buffer (guac_client *client)
     Allocates a new buffer (invisible layer).
     
    guac_layerguac_client_alloc_layer (guac_client *client)
     Allocates a new layer.
     
    void guac_client_free_buffer (guac_client *client, guac_layer *layer)
     Returns the given buffer to the pool of available buffers, such that it can be reused by any subsequent call to guac_client_allow_buffer().
     
    void guac_client_free_layer (guac_client *client, guac_layer *layer)
     Returns the given layer to the pool of available layers, such that it can be reused by any subsequent call to guac_client_allow_layer().
     
    guac_streamguac_client_alloc_stream (guac_client *client)
     Allocates a new stream.
     
    void guac_client_free_stream (guac_client *client, guac_stream *stream)
     Returns the given stream to the pool of available streams, such that it can be reused by any subsequent call to guac_client_alloc_stream().
     
    int guac_client_add_user (guac_client *client, guac_user *user, int argc, char **argv)
     Adds the given user to the internal list of connected users.
     
    void guac_client_remove_user (guac_client *client, guac_user *user)
     Removes the given user, removing the user from the internally-tracked list of connected users, and calling any appropriate leave handler.
     
    void guac_client_foreach_user (guac_client *client, guac_user_callback *callback, void *data)
     Calls the given function on all currently-connected users of the given client.
     
    void guac_client_foreach_pending_user (guac_client *client, guac_user_callback *callback, void *data)
     Calls the given function on all pending users of the given client.
     
    void * guac_client_for_owner (guac_client *client, guac_user_callback *callback, void *data)
     Calls the given function with the currently-connected user that is marked as the owner.
     
    void * guac_client_for_user (guac_client *client, guac_user *user, guac_user_callback *callback, void *data)
     Calls the given function with the given user ONLY if they are currently connected.
     
    int guac_client_end_frame (guac_client *client)
     Marks the end of the current frame by sending a "sync" instruction to all connected users.
     
    int guac_client_load_plugin (guac_client *client, const char *protocol)
     Initializes the given guac_client using the initialization routine provided by the plugin corresponding to the named protocol.
     
    int guac_client_get_processing_lag (guac_client *client)
     Calculates and returns the approximate processing lag experienced by the pool of users.
     
    int guac_client_owner_send_required (guac_client *client, const char **required)
     Sends a request to the owner of the given guac_client for parameters required to continue the connection started by the client.
     
    void guac_client_stream_argv (guac_client *client, guac_socket *socket, const char *mimetype, const char *name, const char *value)
     Streams the given connection parameter value over an argument value stream ("argv" instruction), exposing the current value of the named connection parameter to all users of the given client.
     
    void guac_client_stream_png (guac_client *client, guac_socket *socket, guac_composite_mode mode, const guac_layer *layer, int x, int y, cairo_surface_t *surface)
     Streams the image data of the given surface over an image stream ("img" instruction) as PNG-encoded data.
     
    void guac_client_stream_jpeg (guac_client *client, guac_socket *socket, guac_composite_mode mode, const guac_layer *layer, int x, int y, cairo_surface_t *surface, int quality)
     Streams the image data of the given surface over an image stream ("img" instruction) as JPEG-encoded data at the given quality.
     
    void guac_client_stream_webp (guac_client *client, guac_socket *socket, guac_composite_mode mode, const guac_layer *layer, int x, int y, cairo_surface_t *surface, int quality, int lossless)
     Streams the image data of the given surface over an image stream ("img" instruction) as WebP-encoded data at the given quality.
     
    int guac_client_owner_supports_msg (guac_client *client)
     Returns whether the owner of the given client supports the "msg" instruction, returning non-zero if the client owner does support the instruction, or zero if the owner does not.
     
    int guac_client_owner_supports_required (guac_client *client)
     Returns whether the owner of the given client supports the "required" instruction, returning non-zero if the client owner does support the instruction, or zero if the owner does not.
     
    int guac_client_owner_notify_join (guac_client *client, guac_user *joiner)
     Notifies the owner of the given client that a user has joined the connection, and returns zero if the message was sent successfully, or non-zero if the notification failed.
     
    int guac_client_owner_notify_leave (guac_client *client, guac_user *quitter)
     Notifies the owner of the given client that a user has left the connection, and returns zero if the message was sent successfully, or non-zero if the notification failed.
     
    int guac_client_supports_webp (guac_client *client)
     Returns whether all users of the given client support WebP.
     
    + + + + +

    +Variables

    +const guac_layerGUAC_DEFAULT_LAYER
     The default Guacamole client layer, layer 0.
     
    +

    Detailed Description

    +

    Functions and structure contents for the Guacamole proxy client.

    +

    Function Documentation

    + +

    ◆ guac_client_abort()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    void guac_client_abort (guac_client * client,
    guac_protocol_status status,
    const char * format,
    ... )
    +
    + +

    Signals the given client to stop gracefully, while also signalling via the Guacamole protocol that an error has occurred.

    +

    Note that this is a completely cooperative signal, and can be ignored by the client or the hosting daemon. The message given will be logged to the system logs.

    +
    Parameters
    + + + + + +
    clientThe proxy client to signal to stop.
    statusThe status to send over the Guacamole protocol.
    formatA printf-style format string to log.
    ...Arguments to use when filling the format string for printing.
    +
    +
    + +
    +
    + +

    ◆ guac_client_add_user()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    int guac_client_add_user (guac_client * client,
    guac_user * user,
    int argc,
    char ** argv )
    +
    + +

    Adds the given user to the internal list of connected users.

    +

    Future writes to the broadcast socket stored within guac_client will also write to this user. The join handler of this guac_client will be called.

    +
    Parameters
    + + + + + +
    clientThe proxy client to add the user to.
    userThe user to add.
    argcThe number of arguments to pass to the new user.
    argvAn array of strings containing the argument values being passed.
    +
    +
    +
    Returns
    Zero if the user was added successfully, non-zero if the user could not join the connection.
    + +
    +
    + +

    ◆ guac_client_alloc()

    + +
    +
    + + + + + + + +
    guac_client * guac_client_alloc ()
    +
    + +

    Returns a new, barebones guac_client.

    +

    This new guac_client has no handlers set, but is otherwise usable.

    +
    Returns
    A pointer to the new client.
    + +
    +
    + +

    ◆ guac_client_alloc_buffer()

    + +
    +
    + + + + + + + +
    guac_layer * guac_client_alloc_buffer (guac_client * client)
    +
    + +

    Allocates a new buffer (invisible layer).

    +

    An arbitrary index is automatically assigned if no existing buffer is available for use.

    +
    Parameters
    + + +
    clientThe proxy client to allocate the buffer for.
    +
    +
    +
    Returns
    The next available buffer, or a newly allocated buffer.
    + +
    +
    + +

    ◆ guac_client_alloc_layer()

    + +
    +
    + + + + + + + +
    guac_layer * guac_client_alloc_layer (guac_client * client)
    +
    + +

    Allocates a new layer.

    +

    An arbitrary index is automatically assigned if no existing layer is available for use.

    +
    Parameters
    + + +
    clientThe proxy client to allocate the layer buffer for.
    +
    +
    +
    Returns
    The next available layer, or a newly allocated layer.
    + +
    +
    + +

    ◆ guac_client_alloc_stream()

    + +
    +
    + + + + + + + +
    guac_stream * guac_client_alloc_stream (guac_client * client)
    +
    + +

    Allocates a new stream.

    +

    An arbitrary index is automatically assigned if no previously-allocated stream is available for use.

    +
    Parameters
    + + +
    clientThe client to allocate the stream for.
    +
    +
    +
    Returns
    The next available stream, or a newly allocated stream, or NULL if the maximum number of active streams has been reached.
    + +
    +
    + +

    ◆ guac_client_end_frame()

    + +
    +
    + + + + + + + +
    int guac_client_end_frame (guac_client * client)
    +
    + +

    Marks the end of the current frame by sending a "sync" instruction to all connected users.

    +

    This instruction will contain the current timestamp. The last_sent_timestamp member of guac_client will be updated accordingly.

    +

    If an error occurs sending the instruction, a non-zero value is returned, and guac_error is set appropriately.

    +
    Parameters
    + + +
    clientThe guac_client which has finished a frame.
    +
    +
    +
    Returns
    Zero on success, non-zero on error.
    + +
    +
    + +

    ◆ guac_client_for_owner()

    + +
    +
    + + + + + + + + + + + + + + + + +
    void * guac_client_for_owner (guac_client * client,
    guac_user_callback * callback,
    void * data )
    +
    + +

    Calls the given function with the currently-connected user that is marked as the owner.

    +

    The owner of a connection is the user that established the initial connection that created the connection (the first user to connect and join). The function will be given a reference to the guac_user and the specified arbitrary data. If the owner has since left the connection, the function will instead be invoked with NULL as the guac_user. The value returned by the callback will be returned by this function.

    +

    This function is reentrant, but the user list MUST NOT be manipulated within the same thread as a callback to this function.

    +
    Parameters
    + + + + +
    clientThe client to retrieve the owner from.
    callbackThe callback to invoke on the user marked as the owner of the connection. NULL will be passed to this callback instead if there is no owner.
    dataArbitrary data to pass to the given callback.
    +
    +
    +
    Returns
    The value returned by the callback.
    + +
    +
    + +

    ◆ guac_client_for_user()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    void * guac_client_for_user (guac_client * client,
    guac_user * user,
    guac_user_callback * callback,
    void * data )
    +
    + +

    Calls the given function with the given user ONLY if they are currently connected.

    +

    The function will be given a reference to the guac_user and the specified arbitrary data. If the provided user doesn't exist or has since left the connection, the function will instead be invoked with NULL as the guac_user. The value returned by the callback will be returned by this function.

    +

    This function is reentrant, but the user list MUST NOT be manipulated within the same thread as a callback to this function.

    +
    Parameters
    + + + + + +
    clientThe client that the given user is expected to be associated with.
    userThe user to provide to the given callback if valid. The pointer need not even point to properly allocated memory; the user will only be passed to the callback function if they are valid, and the provided user pointer will not be dereferenced during this process.
    callbackThe callback to invoke on the given user if they are valid. NULL will be passed to this callback instead if the user is not valid.
    dataArbitrary data to pass to the given callback.
    +
    +
    +
    Returns
    The value returned by the callback.
    + +
    +
    + +

    ◆ guac_client_foreach_pending_user()

    + +
    +
    + + + + + + + + + + + + + + + + +
    void guac_client_foreach_pending_user (guac_client * client,
    guac_user_callback * callback,
    void * data )
    +
    + +

    Calls the given function on all pending users of the given client.

    +

    The function will be given a reference to a guac_user and the specified arbitrary data. The value returned by the callback will be ignored.

    +

    This function is reentrant, but the pending user list MUST NOT be manipulated within the same thread as a callback to this function.

    +
    Parameters
    + + + + +
    clientThe client whose users should be iterated.
    callbackThe function to call for each pending user.
    dataArbitrary data to pass to the callback each time it is invoked.
    +
    +
    + +
    +
    + +

    ◆ guac_client_foreach_user()

    + +
    +
    + + + + + + + + + + + + + + + + +
    void guac_client_foreach_user (guac_client * client,
    guac_user_callback * callback,
    void * data )
    +
    + +

    Calls the given function on all currently-connected users of the given client.

    +

    The function will be given a reference to a guac_user and the specified arbitrary data. The value returned by the callback will be ignored.

    +

    This function is reentrant, but the user list MUST NOT be manipulated within the same thread as a callback to this function. Though the callback MAY invoke guac_client_foreach_user(), doing so should not be necessary, and may indicate poor design choices.

    +
    Parameters
    + + + + +
    clientThe client whose users should be iterated.
    callbackThe function to call for each user.
    dataArbitrary data to pass to the callback each time it is invoked.
    +
    +
    + +
    +
    + +

    ◆ guac_client_free()

    + +
    +
    + + + + + + + +
    void guac_client_free (guac_client * client)
    +
    + +

    Free all resources associated with the given client.

    +
    Parameters
    + + +
    clientThe proxy client to free all resources of.
    +
    +
    + +
    +
    + +

    ◆ guac_client_free_buffer()

    + +
    +
    + + + + + + + + + + + +
    void guac_client_free_buffer (guac_client * client,
    guac_layer * layer )
    +
    + +

    Returns the given buffer to the pool of available buffers, such that it can be reused by any subsequent call to guac_client_allow_buffer().

    +
    Parameters
    + + + +
    clientThe proxy client to return the buffer to.
    layerThe buffer to return to the pool of available buffers.
    +
    +
    + +
    +
    + +

    ◆ guac_client_free_layer()

    + +
    +
    + + + + + + + + + + + +
    void guac_client_free_layer (guac_client * client,
    guac_layer * layer )
    +
    + +

    Returns the given layer to the pool of available layers, such that it can be reused by any subsequent call to guac_client_allow_layer().

    +
    Parameters
    + + + +
    clientThe proxy client to return the layer to.
    layerThe buffer to return to the pool of available layer.
    +
    +
    + +
    +
    + +

    ◆ guac_client_free_stream()

    + +
    +
    + + + + + + + + + + + +
    void guac_client_free_stream (guac_client * client,
    guac_stream * stream )
    +
    + +

    Returns the given stream to the pool of available streams, such that it can be reused by any subsequent call to guac_client_alloc_stream().

    +
    Parameters
    + + + +
    clientThe client to return the stream to.
    streamThe stream to return to the pool of available stream.
    +
    +
    + +
    +
    + +

    ◆ guac_client_get_processing_lag()

    + +
    +
    + + + + + + + +
    int guac_client_get_processing_lag (guac_client * client)
    +
    + +

    Calculates and returns the approximate processing lag experienced by the pool of users.

    +

    The processing lag is the difference in time between server and client due purely to data processing and excluding network delays.

    +
    Parameters
    + + +
    clientThe guac_client to calculate the processing lag of.
    +
    +
    +
    Returns
    The approximate processing lag of the pool of users associated with the given guac_client, in milliseconds.
    + +
    +
    + +

    ◆ guac_client_load_plugin()

    + +
    +
    + + + + + + + + + + + +
    int guac_client_load_plugin (guac_client * client,
    const char * protocol )
    +
    + +

    Initializes the given guac_client using the initialization routine provided by the plugin corresponding to the named protocol.

    +

    This will automatically invoke guac_client_init within the plugin for the given protocol.

    +

    Note that the connection will likely not be established until the first user (the "owner") is added to the client.

    +
    Parameters
    + + + +
    clientThe guac_client to initialize.
    protocolThe name of the protocol to use.
    +
    +
    +
    Returns
    Zero if initialization was successful, non-zero otherwise.
    + +
    +
    + +

    ◆ guac_client_log()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    void guac_client_log (guac_client * client,
    guac_client_log_level level,
    const char * format,
    ... )
    +
    + +

    Writes a message in the log used by the given client.

    +

    The logger used will normally be defined by guacd (or whichever program loads the proxy client) by setting the logging handlers of the client when it is loaded.

    +
    Parameters
    + + + + + +
    clientThe proxy client logging this message.
    levelThe level at which to log this message.
    formatA printf-style format string to log.
    ...Arguments to use when filling the format string for printing.
    +
    +
    + +
    +
    + +

    ◆ guac_client_owner_notify_join()

    + +
    +
    + + + + + + + + + + + +
    int guac_client_owner_notify_join (guac_client * client,
    guac_user * joiner )
    +
    + +

    Notifies the owner of the given client that a user has joined the connection, and returns zero if the message was sent successfully, or non-zero if the notification failed.

    +
    Parameters
    + + + +
    clientThe Guacamole Client whose owner should be notified of a user joining the connection.
    joinerThe Guacamole User who joined the connection.
    +
    +
    +
    Returns
    Zero if the notification to the owner was sent successfully, or non-zero if an error occurred.
    + +
    +
    + +

    ◆ guac_client_owner_notify_leave()

    + +
    +
    + + + + + + + + + + + +
    int guac_client_owner_notify_leave (guac_client * client,
    guac_user * quitter )
    +
    + +

    Notifies the owner of the given client that a user has left the connection, and returns zero if the message was sent successfully, or non-zero if the notification failed.

    +
    Parameters
    + + + +
    clientThe Guacamole Client whose owner should be notified of a user leaving the connection.
    quitterThe Guacamole User who left the connection.
    +
    +
    +
    Returns
    Zero if the notification to the owner was sent successfully, or non-zero if an error occurred.
    + +
    +
    + +

    ◆ guac_client_owner_send_required()

    + +
    +
    + + + + + + + + + + + +
    int guac_client_owner_send_required (guac_client * client,
    const char ** required )
    +
    + +

    Sends a request to the owner of the given guac_client for parameters required to continue the connection started by the client.

    +

    The function returns zero on success or non-zero on failure.

    +
    Parameters
    + + + +
    clientThe client where additional connection parameters are required.
    requiredThe NULL-terminated array of required parameters.
    +
    +
    +
    Returns
    Zero on success, non-zero on failure.
    + +
    +
    + +

    ◆ guac_client_owner_supports_msg()

    + +
    +
    + + + + + + + +
    int guac_client_owner_supports_msg (guac_client * client)
    +
    + +

    Returns whether the owner of the given client supports the "msg" instruction, returning non-zero if the client owner does support the instruction, or zero if the owner does not.

    +
    Parameters
    + + +
    clientThe Guacamole client whose owner should be checked for supporting the "msg" instruction.
    +
    +
    +
    Returns
    Non-zero if the owner of the given client supports the "msg" instruction, zero otherwise.
    + +
    +
    + +

    ◆ guac_client_owner_supports_required()

    + +
    +
    + + + + + + + +
    int guac_client_owner_supports_required (guac_client * client)
    +
    + +

    Returns whether the owner of the given client supports the "required" instruction, returning non-zero if the client owner does support the instruction, or zero if the owner does not.

    +
    Parameters
    + + +
    clientThe Guacamole client whose owner should be checked for supporting the "required" instruction.
    +
    +
    +
    Returns
    Non-zero if the owner of the given client supports the "required" instruction, zero otherwise.
    + +
    +
    + +

    ◆ guac_client_remove_user()

    + +
    +
    + + + + + + + + + + + +
    void guac_client_remove_user (guac_client * client,
    guac_user * user )
    +
    + +

    Removes the given user, removing the user from the internally-tracked list of connected users, and calling any appropriate leave handler.

    +
    Parameters
    + + + +
    clientThe proxy client to return the buffer to.
    userThe user to remove.
    +
    +
    + +
    +
    + +

    ◆ guac_client_stop()

    + +
    +
    + + + + + + + +
    void guac_client_stop (guac_client * client)
    +
    + +

    Signals the given client to stop gracefully.

    +

    This is a completely cooperative signal, and can be ignored by the client or the hosting daemon.

    +
    Parameters
    + + +
    clientThe proxy client to signal to stop.
    +
    +
    + +
    +
    + +

    ◆ guac_client_stream_argv()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void guac_client_stream_argv (guac_client * client,
    guac_socket * socket,
    const char * mimetype,
    const char * name,
    const char * value )
    +
    + +

    Streams the given connection parameter value over an argument value stream ("argv" instruction), exposing the current value of the named connection parameter to all users of the given client.

    +

    The argument value stream will be automatically allocated and freed.

    +
    Parameters
    + + + + + + +
    clientThe Guacamole client for which the argument value stream should be allocated.
    socketThe socket over which instructions associated with the argument value stream should be sent.
    mimetypeThe mimetype of the data within the connection parameter value being sent.
    nameThe name of the connection parameter being sent.
    valueThe current value of the connection parameter being sent.
    +
    +
    + +
    +
    + +

    ◆ guac_client_stream_jpeg()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void guac_client_stream_jpeg (guac_client * client,
    guac_socket * socket,
    guac_composite_mode mode,
    const guac_layer * layer,
    int x,
    int y,
    cairo_surface_t * surface,
    int quality )
    +
    + +

    Streams the image data of the given surface over an image stream ("img" instruction) as JPEG-encoded data at the given quality.

    +

    The image stream will be automatically allocated and freed.

    +
    Parameters
    + + + + + + + + + +
    clientThe Guacamole client for which the image stream should be allocated.
    socketThe socket over which instructions associated with the image stream should be sent.
    modeThe composite mode to use when rendering the image over the given layer.
    layerThe destination layer.
    xThe X coordinate of the upper-left corner of the destination rectangle within the given layer.
    yThe Y coordinate of the upper-left corner of the destination rectangle within the given layer.
    surfaceA Cairo surface containing the image data to be streamed.
    qualityThe 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.
    +
    +
    + +
    +
    + +

    ◆ guac_client_stream_png()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void guac_client_stream_png (guac_client * client,
    guac_socket * socket,
    guac_composite_mode mode,
    const guac_layer * layer,
    int x,
    int y,
    cairo_surface_t * surface )
    +
    + +

    Streams the image data of the given surface over an image stream ("img" instruction) as PNG-encoded data.

    +

    The image stream will be automatically allocated and freed.

    +
    Parameters
    + + + + + + + + +
    clientThe Guacamole client for which the image stream should be allocated.
    socketThe socket over which instructions associated with the image stream should be sent.
    modeThe composite mode to use when rendering the image over the given layer.
    layerThe destination layer.
    xThe X coordinate of the upper-left corner of the destination rectangle within the given layer.
    yThe Y coordinate of the upper-left corner of the destination rectangle within the given layer.
    surfaceA Cairo surface containing the image data to be streamed.
    +
    +
    + +
    +
    + +

    ◆ guac_client_stream_webp()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void guac_client_stream_webp (guac_client * client,
    guac_socket * socket,
    guac_composite_mode mode,
    const guac_layer * layer,
    int x,
    int y,
    cairo_surface_t * surface,
    int quality,
    int lossless )
    +
    + +

    Streams the image data of the given surface over an image stream ("img" instruction) as WebP-encoded data at the given quality.

    +

    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 guac_client_supports_webp() prior to calling this function.

    +
    Parameters
    + + + + + + + + + + +
    clientThe Guacamole client for whom the image stream should be allocated.
    socketThe socket over which instructions associated with the image stream should be sent.
    modeThe composite mode to use when rendering the image over the given layer.
    layerThe destination layer.
    xThe X coordinate of the upper-left corner of the destination rectangle within the given layer.
    yThe Y coordinate of the upper-left corner of the destination rectangle within the given layer.
    surfaceA Cairo surface containing the image data to be streamed.
    qualityThe 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.
    losslessZero to encode a lossy image, non-zero to encode losslessly.
    +
    +
    + +
    +
    + +

    ◆ guac_client_supports_webp()

    + +
    +
    + + + + + + + +
    int guac_client_supports_webp (guac_client * client)
    +
    + +

    Returns whether all users of the given client support WebP.

    +

    If any user does not support WebP, or the server cannot encode WebP images, zero is returned.

    +
    Parameters
    + + +
    clientThe Guacamole client whose users should be checked for WebP support.
    +
    +
    +
    Returns
    Non-zero if the all users of the given client claim to support WebP and the server has been built with WebP support, zero otherwise.
    + +
    +
    + +

    ◆ vguac_client_abort()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    void vguac_client_abort (guac_client * client,
    guac_protocol_status status,
    const char * format,
    va_list ap )
    +
    + +

    Signals the given client to stop gracefully, while also signalling via the Guacamole protocol that an error has occurred.

    +

    Note that this is a completely cooperative signal, and can be ignored by the client or the hosting daemon. The message given will be logged to the system logs.

    +
    Parameters
    + + + + + +
    clientThe proxy client to signal to stop.
    statusThe status to send over the Guacamole protocol.
    formatA printf-style format string to log.
    apThe va_list containing the arguments to be used when filling the format string for printing.
    +
    +
    + +
    +
    + +

    ◆ vguac_client_log()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    void vguac_client_log (guac_client * client,
    guac_client_log_level level,
    const char * format,
    va_list ap )
    +
    + +

    Writes a message in the log used by the given client.

    +

    The logger used will normally be defined by guacd (or whichever program loads the proxy client) by setting the logging handlers of the client when it is loaded.

    +
    Parameters
    + + + + + +
    clientThe proxy client logging this message.
    levelThe level at which to log this message.
    formatA printf-style format string to log.
    apThe va_list containing the arguments to be used when filling the format string for printing.
    +
    +
    + +
    +
    +
    + + + + diff --git a/doc/1.5.5/libguac/client_8h_source.html b/doc/1.5.5/libguac/client_8h_source.html new file mode 100644 index 000000000..634435e93 --- /dev/null +++ b/doc/1.5.5/libguac/client_8h_source.html @@ -0,0 +1,349 @@ + + + + + + + +libguac: guacamole/client.h Source File + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    client.h
    +
    +
    +Go to the documentation of this file.
    1/*
    +
    2 * Licensed to the Apache Software Foundation (ASF) under one
    +
    3 * or more contributor license agreements. See the NOTICE file
    +
    4 * distributed with this work for additional information
    +
    5 * regarding copyright ownership. The ASF licenses this file
    +
    6 * to you under the Apache License, Version 2.0 (the
    +
    7 * "License"); you may not use this file except in compliance
    +
    8 * with the License. You may obtain a copy of the License at
    +
    9 *
    +
    10 * http://www.apache.org/licenses/LICENSE-2.0
    +
    11 *
    +
    12 * Unless required by applicable law or agreed to in writing,
    +
    13 * software distributed under the License is distributed on an
    +
    14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    15 * KIND, either express or implied. See the License for the
    +
    16 * specific language governing permissions and limitations
    +
    17 * under the License.
    +
    18 */
    +
    19
    +
    20#ifndef _GUAC_CLIENT_H
    +
    21#define _GUAC_CLIENT_H
    +
    22
    +
    29#include "client-fntypes.h"
    +
    30#include "client-types.h"
    +
    31#include "client-constants.h"
    +
    32#include "layer-types.h"
    +
    33#include "object-types.h"
    +
    34#include "pool-types.h"
    +
    35#include "rwlock.h"
    +
    36#include "socket-types.h"
    +
    37#include "stream-types.h"
    +
    38#include "timestamp-types.h"
    +
    39#include "user-fntypes.h"
    +
    40#include "user-types.h"
    +
    41
    +
    42#include <cairo/cairo.h>
    +
    43
    +
    44#include <pthread.h>
    +
    45#include <stdarg.h>
    +
    46#include <time.h>
    +
    47
    +
    + +
    49
    + +
    60
    + +
    68
    + +
    76
    +
    82 void* data;
    +
    83
    + +
    89
    + +
    112
    + +
    136
    +
    142 guac_pool* __buffer_pool;
    +
    143
    +
    149 guac_pool* __layer_pool;
    +
    150
    +
    154 guac_pool* __stream_pool;
    +
    155
    +
    160 guac_stream* __output_streams;
    +
    161
    + +
    170
    +
    175 guac_rwlock __users_lock;
    +
    176
    +
    181 guac_user* __users;
    +
    182
    +
    187 guac_rwlock __pending_users_lock;
    +
    188
    +
    195 timer_t __pending_users_timer;
    +
    196
    +
    200 int __pending_users_timer_state;
    +
    201
    +
    206 pthread_mutex_t __pending_users_timer_mutex;
    +
    207
    +
    212 guac_user* __pending_users;
    +
    213
    +
    219 guac_user* __owner;
    +
    220
    + +
    226
    + +
    249
    + +
    265
    + +
    283
    +
    308 const char** args;
    +
    309
    +
    315 void* __plugin_handle;
    +
    316
    +
    317};
    +
    +
    318
    + +
    326
    + +
    333
    + +
    345 const char* format, ...);
    +
    346
    + +
    359 const char* format, va_list ap);
    +
    360
    + +
    369
    + +
    382 const char* format, ...);
    +
    383
    + +
    397 const char* format, va_list ap);
    +
    398
    + +
    407
    + +
    416
    + +
    425
    + +
    434
    + +
    447
    + +
    459
    +
    472int guac_client_add_user(guac_client* client, guac_user* user, int argc, char** argv);
    +
    473
    + +
    482
    + +
    504 guac_user_callback* callback, void* data);
    +
    505
    + +
    524 guac_user_callback* callback, void* data);
    +
    525
    + +
    553 void* data);
    +
    554
    + +
    586 guac_user_callback* callback, void* data);
    +
    587
    + +
    600
    +
    613int guac_client_load_plugin(guac_client* client, const char* protocol);
    +
    614
    + +
    628
    +
    643int guac_client_owner_send_required(guac_client* client, const char** required);
    +
    644
    + +
    670 const char* mimetype, const char* name, const char* value);
    +
    671
    + +
    702 guac_composite_mode mode, const guac_layer* layer, int x, int y,
    +
    703 cairo_surface_t* surface);
    +
    704
    + +
    740 guac_composite_mode mode, const guac_layer* layer, int x, int y,
    +
    741 cairo_surface_t* surface, int quality);
    +
    742
    + +
    785 guac_composite_mode mode, const guac_layer* layer, int x, int y,
    +
    786 cairo_surface_t* surface, int quality, int lossless);
    +
    787
    + +
    802
    + +
    817
    + +
    835
    + +
    853
    + +
    866
    +
    870extern const guac_layer* GUAC_DEFAULT_LAYER;
    +
    871
    +
    872#endif
    +
    873
    +
    Constants related to the Guacamole client structure, guac_client.
    +
    Function type definitions related to the Guacamole client structure, guac_client.
    +
    void guac_client_log_handler(guac_client *client, guac_client_log_level level, const char *format, va_list args)
    Handler for logging messages related to a given guac_client instance.
    Definition client-fntypes.h:83
    +
    int guac_client_free_handler(guac_client *client)
    Handler for freeing up any extra data allocated by the client implementation.
    Definition client-fntypes.h:51
    +
    int guac_client_join_pending_handler(guac_client *client)
    Handler that will run before immediately before pending users are promoted to full users.
    Definition client-fntypes.h:65
    +
    Type definitions related to the Guacamole client structure, guac_client.
    +
    guac_client_state
    Possible current states of the Guacamole client.
    Definition client-types.h:41
    +
    guac_client_log_level
    All supported log levels used by the logging subsystem of each Guacamole client.
    Definition client-types.h:62
    +
    void guac_client_stop(guac_client *client)
    Signals the given client to stop gracefully.
    +
    void guac_client_remove_user(guac_client *client, guac_user *user)
    Removes the given user, removing the user from the internally-tracked list of connected users,...
    +
    int guac_client_owner_supports_msg(guac_client *client)
    Returns whether the owner of the given client supports the "msg" instruction, returning non-zero if t...
    +
    void guac_client_stream_png(guac_client *client, guac_socket *socket, guac_composite_mode mode, const guac_layer *layer, int x, int y, cairo_surface_t *surface)
    Streams the image data of the given surface over an image stream ("img" instruction) as PNG-encoded d...
    +
    const guac_layer * GUAC_DEFAULT_LAYER
    The default Guacamole client layer, layer 0.
    +
    int guac_client_owner_supports_required(guac_client *client)
    Returns whether the owner of the given client supports the "required" instruction,...
    +
    void vguac_client_log(guac_client *client, guac_client_log_level level, const char *format, va_list ap)
    Writes a message in the log used by the given client.
    +
    guac_stream * guac_client_alloc_stream(guac_client *client)
    Allocates a new stream.
    +
    void vguac_client_abort(guac_client *client, guac_protocol_status status, const char *format, va_list ap)
    Signals the given client to stop gracefully, while also signalling via the Guacamole protocol that an...
    +
    int guac_client_owner_notify_join(guac_client *client, guac_user *joiner)
    Notifies the owner of the given client that a user has joined the connection, and returns zero if the...
    +
    void guac_client_free_layer(guac_client *client, guac_layer *layer)
    Returns the given layer to the pool of available layers, such that it can be reused by any subsequent...
    +
    void guac_client_stream_webp(guac_client *client, guac_socket *socket, guac_composite_mode mode, const guac_layer *layer, int x, int y, cairo_surface_t *surface, int quality, int lossless)
    Streams the image data of the given surface over an image stream ("img" instruction) as WebP-encoded ...
    +
    guac_layer * guac_client_alloc_buffer(guac_client *client)
    Allocates a new buffer (invisible layer).
    +
    guac_layer * guac_client_alloc_layer(guac_client *client)
    Allocates a new layer.
    +
    void guac_client_abort(guac_client *client, guac_protocol_status status, const char *format,...)
    Signals the given client to stop gracefully, while also signalling via the Guacamole protocol that an...
    +
    int guac_client_end_frame(guac_client *client)
    Marks the end of the current frame by sending a "sync" instruction to all connected users.
    +
    void guac_client_stream_argv(guac_client *client, guac_socket *socket, const char *mimetype, const char *name, const char *value)
    Streams the given connection parameter value over an argument value stream ("argv" instruction),...
    +
    void guac_client_free(guac_client *client)
    Free all resources associated with the given client.
    +
    int guac_client_supports_webp(guac_client *client)
    Returns whether all users of the given client support WebP.
    +
    void guac_client_foreach_pending_user(guac_client *client, guac_user_callback *callback, void *data)
    Calls the given function on all pending users of the given client.
    +
    void * guac_client_for_owner(guac_client *client, guac_user_callback *callback, void *data)
    Calls the given function with the currently-connected user that is marked as the owner.
    +
    int guac_client_get_processing_lag(guac_client *client)
    Calculates and returns the approximate processing lag experienced by the pool of users.
    +
    void guac_client_stream_jpeg(guac_client *client, guac_socket *socket, guac_composite_mode mode, const guac_layer *layer, int x, int y, cairo_surface_t *surface, int quality)
    Streams the image data of the given surface over an image stream ("img" instruction) as JPEG-encoded ...
    +
    void * guac_client_for_user(guac_client *client, guac_user *user, guac_user_callback *callback, void *data)
    Calls the given function with the given user ONLY if they are currently connected.
    +
    int guac_client_owner_notify_leave(guac_client *client, guac_user *quitter)
    Notifies the owner of the given client that a user has left the connection, and returns zero if the m...
    +
    void guac_client_log(guac_client *client, guac_client_log_level level, const char *format,...)
    Writes a message in the log used by the given client.
    +
    guac_client * guac_client_alloc()
    Returns a new, barebones guac_client.
    +
    int guac_client_owner_send_required(guac_client *client, const char **required)
    Sends a request to the owner of the given guac_client for parameters required to continue the connect...
    +
    void guac_client_free_stream(guac_client *client, guac_stream *stream)
    Returns the given stream to the pool of available streams, such that it can be reused by any subseque...
    +
    void guac_client_foreach_user(guac_client *client, guac_user_callback *callback, void *data)
    Calls the given function on all currently-connected users of the given client.
    +
    int guac_client_add_user(guac_client *client, guac_user *user, int argc, char **argv)
    Adds the given user to the internal list of connected users.
    +
    int guac_client_load_plugin(guac_client *client, const char *protocol)
    Initializes the given guac_client using the initialization routine provided by the plugin correspondi...
    +
    void guac_client_free_buffer(guac_client *client, guac_layer *layer)
    Returns the given buffer to the pool of available buffers, such that it can be reused by any subseque...
    +
    Type definitions related to Guacamole layers.
    +
    Type definitions related to Guacamole protocol objects.
    +
    Type definitions related to the guac_pool pool of unique integers.
    +
    guac_composite_mode
    Composite modes used by Guacamole draw instructions.
    Definition protocol-types.h:170
    +
    guac_protocol_status
    Set of all possible status codes returned by protocol operations.
    Definition protocol-types.h:44
    +
    Type definitions related to the guac_socket object.
    +
    Type definitions related to Guacamole protocol streams.
    +
    Guacamole proxy client.
    Definition client.h:48
    +
    void * data
    Arbitrary reference to proxy client-specific data.
    Definition client.h:82
    +
    guac_user_join_handler * join_handler
    Handler for join events, called whenever a new user is joining an active connection.
    Definition client.h:248
    +
    const char ** args
    NULL-terminated array of all arguments accepted by this client , in order.
    Definition client.h:308
    +
    guac_socket * pending_socket
    The guac_socket structure to be used to communicate with all pending connected web-clients (users).
    Definition client.h:67
    +
    guac_timestamp last_sent_timestamp
    The time (in milliseconds) that the last sync message was sent to the client.
    Definition client.h:88
    +
    guac_client_log_handler * log_handler
    Logging handler.
    Definition client.h:135
    +
    int connected_users
    The number of currently-connected users.
    Definition client.h:225
    +
    guac_client_free_handler * free_handler
    Handler for freeing data when the client is being unloaded.
    Definition client.h:111
    +
    guac_socket * socket
    The guac_socket structure to be used to communicate with all non-pending connected web-clients (users...
    Definition client.h:59
    +
    guac_client_join_pending_handler * join_pending_handler
    A handler that will be run prior to pending users being promoted to full users.
    Definition client.h:264
    +
    guac_client_state state
    The current state of the client.
    Definition client.h:75
    +
    char * connection_id
    The unique identifier allocated for the connection, which may be used within the Guacamole protocol t...
    Definition client.h:169
    +
    guac_user_leave_handler * leave_handler
    Handler for leave events, called whenever a new user is leaving an active connection.
    Definition client.h:282
    +
    Represents a single layer within the Guacamole protocol.
    Definition layer.h:34
    +
    A pool of integers.
    Definition pool.h:34
    +
    This file implements reentrant read-write locks using thread-local storage to keep track of how locks...
    Definition rwlock.h:48
    +
    The core I/O object of Guacamole.
    Definition socket.h:39
    +
    Represents a single stream within the Guacamole protocol.
    Definition stream.h:32
    +
    Representation of a physical connection within a larger logical connection which may be shared.
    Definition user.h:115
    +
    Type definitions related to Guacamole protocol timestamps.
    +
    int64_t guac_timestamp
    An arbitrary timestamp denoting a relative time value in milliseconds.
    Definition timestamp-types.h:34
    +
    Function type definitions related to the guac_user object.
    +
    int guac_user_join_handler(guac_user *user, int argc, char **argv)
    Handler for Guacamole join events.
    Definition user-fntypes.h:411
    +
    void * guac_user_callback(guac_user *user, void *data)
    Callback which relates to a single guac_user at a time, along with arbitrary data.
    Definition user-fntypes.h:59
    +
    int guac_user_leave_handler(guac_user *user)
    Handler for Guacamole leave events.
    Definition user-fntypes.h:430
    +
    Type definitions related to the guac_user object.
    +
    + + + + diff --git a/doc/1.5.5/libguac/clipboard.js b/doc/1.5.5/libguac/clipboard.js new file mode 100644 index 000000000..42c1fb0e0 --- /dev/null +++ b/doc/1.5.5/libguac/clipboard.js @@ -0,0 +1,61 @@ +/** + +The code below is based on the Doxygen Awesome project, see +https://github.com/jothepro/doxygen-awesome-css + +MIT License + +Copyright (c) 2021 - 2022 jothepro + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +*/ + +let clipboard_title = "Copy to clipboard" +let clipboard_icon = `` +let clipboard_successIcon = `` +let clipboard_successDuration = 1000 + +$(function() { + if(navigator.clipboard) { + const fragments = document.getElementsByClassName("fragment") + for(const fragment of fragments) { + const clipboard_div = document.createElement("div") + clipboard_div.classList.add("clipboard") + clipboard_div.innerHTML = clipboard_icon + clipboard_div.title = clipboard_title + $(clipboard_div).click(function() { + const content = this.parentNode.cloneNode(true) + // filter out line number and folded fragments from file listings + content.querySelectorAll(".lineno, .ttc, .foldclosed").forEach((node) => { node.remove() }) + let text = content.textContent + // remove trailing newlines and trailing spaces from empty lines + text = text.replace(/^\s*\n/gm,'\n').replace(/\n*$/,'') + navigator.clipboard.writeText(text); + this.classList.add("success") + this.innerHTML = clipboard_successIcon + window.setTimeout(() => { // switch back to normal icon after timeout + this.classList.remove("success") + this.innerHTML = clipboard_icon + }, clipboard_successDuration); + }) + fragment.insertBefore(clipboard_div, fragment.firstChild) + } + } +}) diff --git a/doc/1.5.5/libguac/closed.png b/doc/1.5.5/libguac/closed.png new file mode 100644 index 0000000000000000000000000000000000000000..98cc2c909da37a6df914fbf67780eebd99c597f5 GIT binary patch literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{V-kvUwAr*{o@8{^CZMh(5KoB^r_<4^zF@3)Cp&&t3hdujKf f*?bjBoY!V+E))@{xMcbjXe@)LtDnm{r-UW|*e5JT literal 0 HcmV?d00001 diff --git a/doc/1.5.5/libguac/cookie.js b/doc/1.5.5/libguac/cookie.js new file mode 100644 index 000000000..53ad21d98 --- /dev/null +++ b/doc/1.5.5/libguac/cookie.js @@ -0,0 +1,58 @@ +/*! + Cookie helper functions + Copyright (c) 2023 Dimitri van Heesch + Released under MIT license. +*/ +let Cookie = { + cookie_namespace: 'doxygen_', + + readSetting(cookie,defVal) { + if (window.chrome) { + const val = localStorage.getItem(this.cookie_namespace+cookie) || + sessionStorage.getItem(this.cookie_namespace+cookie); + if (val) return val; + } else { + let myCookie = this.cookie_namespace+cookie+"="; + if (document.cookie) { + const index = document.cookie.indexOf(myCookie); + if (index != -1) { + const valStart = index + myCookie.length; + let valEnd = document.cookie.indexOf(";", valStart); + if (valEnd == -1) { + valEnd = document.cookie.length; + } + return document.cookie.substring(valStart, valEnd); + } + } + } + return defVal; + }, + + writeSetting(cookie,val,days=10*365) { // default days='forever', 0=session cookie, -1=delete + if (window.chrome) { + if (days==0) { + sessionStorage.setItem(this.cookie_namespace+cookie,val); + } else { + localStorage.setItem(this.cookie_namespace+cookie,val); + } + } else { + let date = new Date(); + date.setTime(date.getTime()+(days*24*60*60*1000)); + const expiration = days!=0 ? "expires="+date.toGMTString()+";" : ""; + document.cookie = this.cookie_namespace + cookie + "=" + + val + "; SameSite=Lax;" + expiration + "path=/"; + } + }, + + eraseSetting(cookie) { + if (window.chrome) { + if (localStorage.getItem(this.cookie_namespace+cookie)) { + localStorage.removeItem(this.cookie_namespace+cookie); + } else if (sessionStorage.getItem(this.cookie_namespace+cookie)) { + sessionStorage.removeItem(this.cookie_namespace+cookie); + } + } else { + this.writeSetting(cookie,'',-1); + } + }, +} diff --git a/doc/1.5.5/libguac/deprecated.html b/doc/1.5.5/libguac/deprecated.html new file mode 100644 index 000000000..01317d4c1 --- /dev/null +++ b/doc/1.5.5/libguac/deprecated.html @@ -0,0 +1,92 @@ + + + + + + + +libguac: Deprecated List + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    +
    Deprecated List
    +
    +
    +
    +
    Global guac_protocol_send_nest (guac_socket *socket, int index, const char *data)
    +
    The "nest" instruction and the corresponding guac_socket implementation are no longer necessary, having been replaced by the streaming instructions ("blob", "ack", "end"). Code using nested sockets or the "nest" instruction should instead write to a normal socket directly.
    +
    Global guac_socket_nest (guac_socket *parent, int index)
    +
    The "nest" instruction and the corresponding guac_socket implementation are no longer necessary, having been replaced by the streaming instructions ("blob", "ack", "end"). Code using nested sockets or the "nest" instruction should instead write to a normal socket directly.
    +
    Global GUAC_STATUS_NOT_INPLEMENTED
    +
    This constant contains a typo in its name and will be removed in a future release. Use GUAC_STATUS_NOT_IMPLEMENTED instead.
    +
    +
    +
    + + + + diff --git a/doc/1.5.5/libguac/dir_6bb9fad85c98b48a11165f494b9f53ce.html b/doc/1.5.5/libguac/dir_6bb9fad85c98b48a11165f494b9f53ce.html new file mode 100644 index 000000000..37be145aa --- /dev/null +++ b/doc/1.5.5/libguac/dir_6bb9fad85c98b48a11165f494b9f53ce.html @@ -0,0 +1,236 @@ + + + + + + + +libguac: guacamole Directory Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    guacamole Directory Reference
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Files

     argv-constants.h
     Constants related to automatic handling of received "argv" instructions.
     
     argv-fntypes.h
     Function type definitions related to automatic handling of received "argv" instructions.
     
     argv.h
     Convenience functions for processing parameter values that are submitted dynamically using "argv" instructions.
     
     audio-fntypes.h
     Function type definitions related to simple streaming audio.
     
     audio-types.h
     Type definitions related to simple streaming audio.
     
     audio.h
     Provides functions and structures used for providing simple streaming audio.
     
     client-constants.h
     Constants related to the Guacamole client structure, guac_client.
     
     client-fntypes.h
     Function type definitions related to the Guacamole client structure, guac_client.
     
     client-types.h
     Type definitions related to the Guacamole client structure, guac_client.
     
     client.h
     Functions and structure contents for the Guacamole proxy client.
     
     error-types.h
     Type definitions related to return values and errors.
     
     error.h
     Provides functions and structures required for handling return values and errors.
     
     fips.h
     
     hash.h
     Provides functions and structures for producing likely-to-be-unique hash values for images.
     
     layer-types.h
     Type definitions related to Guacamole layers.
     
     layer.h
     Provides functions and structures required for allocating and using layers.
     
     mem.h
     Provides convenience macros/functions for performing arithmetic on size_t values and for allocating memory, particularly memory related to images, audio, etc.
     
     object-types.h
     Type definitions related to Guacamole protocol objects.
     
     object.h
     Provides functions and structures required for allocating and using objects.
     
     parser-constants.h
     Constants related to the Guacamole protocol parser.
     
     parser-types.h
     Type definitions related to parsing the Guacamole protocol.
     
     parser.h
     Provides functions and structures for parsing the Guacamole protocol.
     
     plugin-constants.h
     Constants related to client plugins.
     
     plugin.h
     Provides functions and structures required for handling a client plugin.
     
     pool-types.h
     Type definitions related to the guac_pool pool of unique integers.
     
     pool.h
     Provides functions and structures for maintaining dynamically allocated and freed pools of integers.
     
     protocol-constants.h
     Constants related to the Guacamole protocol.
     
     protocol-types.h
     Type definitions related to the Guacamole protocol.
     
     protocol.h
     Provides functions and structures required for communicating using the Guacamole protocol over a guac_socket connection, such as that provided by guac_client objects.
     
     recording.h
     Provides functions and structures to be use for session recording.
     
     rwlock.h
     
     socket-constants.h
     Constants related to the guac_socket object.
     
     socket-fntypes.h
     Function type definitions related to the guac_socket object.
     
     socket-ssl.h
     Provides an SSL/TLS implementation of guac_socket.
     
     socket-types.h
     Type definitions related to the guac_socket object.
     
     socket-wsa.h
     Provides an implementation of guac_socket specific to the Windows Socket API (aka WSA or "winsock").
     
     socket.h
     Defines the guac_socket object and functions for using and manipulating it.
     
     stream-types.h
     Type definitions related to Guacamole protocol streams.
     
     stream.h
     Provides functions and structures required for allocating and using streams.
     
     string.h
     Provides convenience functions for manipulating strings.
     
     timestamp-types.h
     Type definitions related to Guacamole protocol timestamps.
     
     timestamp.h
     Provides functions and structures for creating timestamps.
     
     unicode.h
     Provides functions for manipulating Unicode strings.
     
     user-constants.h
     Constants related to the Guacamole user structure, guac_user.
     
     user-fntypes.h
     Function type definitions related to the guac_user object.
     
     user-types.h
     Type definitions related to the guac_user object.
     
     user.h
     Defines the guac_user object, which represents a physical connection within a larger, possibly shared, logical connection represented by a guac_client.
     
     wol-constants.h
     Header file that provides constants and defaults related to libguac Wake-on-LAN support.
     
     wol.h
     Header that provides functions and structures related to Wake-on-LAN support in libguac.
     
    +
    + + + + diff --git a/doc/1.5.5/libguac/doc.svg b/doc/1.5.5/libguac/doc.svg new file mode 100644 index 000000000..0b928a531 --- /dev/null +++ b/doc/1.5.5/libguac/doc.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/doc/1.5.5/libguac/docd.svg b/doc/1.5.5/libguac/docd.svg new file mode 100644 index 000000000..ac18b2755 --- /dev/null +++ b/doc/1.5.5/libguac/docd.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/doc/1.5.5/libguac/doxygen.css b/doc/1.5.5/libguac/doxygen.css new file mode 100644 index 000000000..7b7d851b8 --- /dev/null +++ b/doc/1.5.5/libguac/doxygen.css @@ -0,0 +1,2225 @@ +/* The standard CSS for doxygen 1.10.0*/ + +html { +/* page base colors */ +--page-background-color: white; +--page-foreground-color: black; +--page-link-color: #3D578C; +--page-visited-link-color: #4665A2; + +/* index */ +--index-odd-item-bg-color: #F8F9FC; +--index-even-item-bg-color: white; +--index-header-color: black; +--index-separator-color: #A0A0A0; + +/* header */ +--header-background-color: #F9FAFC; +--header-separator-color: #C4CFE5; +--header-gradient-image: url('nav_h.png'); +--group-header-separator-color: #879ECB; +--group-header-color: #354C7B; +--inherit-header-color: gray; + +--footer-foreground-color: #2A3D61; +--footer-logo-width: 104px; +--citation-label-color: #334975; +--glow-color: cyan; + +--title-background-color: white; +--title-separator-color: #5373B4; +--directory-separator-color: #9CAFD4; +--separator-color: #4A6AAA; + +--blockquote-background-color: #F7F8FB; +--blockquote-border-color: #9CAFD4; + +--scrollbar-thumb-color: #9CAFD4; +--scrollbar-background-color: #F9FAFC; + +--icon-background-color: #728DC1; +--icon-foreground-color: white; +--icon-doc-image: url('doc.svg'); +--icon-folder-open-image: url('folderopen.svg'); +--icon-folder-closed-image: url('folderclosed.svg'); + +/* brief member declaration list */ +--memdecl-background-color: #F9FAFC; +--memdecl-separator-color: #DEE4F0; +--memdecl-foreground-color: #555; +--memdecl-template-color: #4665A2; + +/* detailed member list */ +--memdef-border-color: #A8B8D9; +--memdef-title-background-color: #E2E8F2; +--memdef-title-gradient-image: url('nav_f.png'); +--memdef-proto-background-color: #DFE5F1; +--memdef-proto-text-color: #253555; +--memdef-proto-text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); +--memdef-doc-background-color: white; +--memdef-param-name-color: #602020; +--memdef-template-color: #4665A2; + +/* tables */ +--table-cell-border-color: #2D4068; +--table-header-background-color: #374F7F; +--table-header-foreground-color: #FFFFFF; + +/* labels */ +--label-background-color: #728DC1; +--label-left-top-border-color: #5373B4; +--label-right-bottom-border-color: #C4CFE5; +--label-foreground-color: white; + +/** navigation bar/tree/menu */ +--nav-background-color: #F9FAFC; +--nav-foreground-color: #364D7C; +--nav-gradient-image: url('tab_b.png'); +--nav-gradient-hover-image: url('tab_h.png'); +--nav-gradient-active-image: url('tab_a.png'); +--nav-gradient-active-image-parent: url("../tab_a.png"); +--nav-separator-image: url('tab_s.png'); +--nav-breadcrumb-image: url('bc_s.png'); +--nav-breadcrumb-border-color: #C2CDE4; +--nav-splitbar-image: url('splitbar.png'); +--nav-font-size-level1: 13px; +--nav-font-size-level2: 10px; +--nav-font-size-level3: 9px; +--nav-text-normal-color: #283A5D; +--nav-text-hover-color: white; +--nav-text-active-color: white; +--nav-text-normal-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); +--nav-text-hover-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-text-active-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-menu-button-color: #364D7C; +--nav-menu-background-color: white; +--nav-menu-foreground-color: #555555; +--nav-menu-toggle-color: rgba(255, 255, 255, 0.5); +--nav-arrow-color: #9CAFD4; +--nav-arrow-selected-color: #9CAFD4; + +/* table of contents */ +--toc-background-color: #F4F6FA; +--toc-border-color: #D8DFEE; +--toc-header-color: #4665A2; +--toc-down-arrow-image: url("data:image/svg+xml;utf8,&%238595;"); + +/** search field */ +--search-background-color: white; +--search-foreground-color: #909090; +--search-magnification-image: url('mag.svg'); +--search-magnification-select-image: url('mag_sel.svg'); +--search-active-color: black; +--search-filter-background-color: #F9FAFC; +--search-filter-foreground-color: black; +--search-filter-border-color: #90A5CE; +--search-filter-highlight-text-color: white; +--search-filter-highlight-bg-color: #3D578C; +--search-results-foreground-color: #425E97; +--search-results-background-color: #EEF1F7; +--search-results-border-color: black; +--search-box-shadow: inset 0.5px 0.5px 3px 0px #555; + +/** code fragments */ +--code-keyword-color: #008000; +--code-type-keyword-color: #604020; +--code-flow-keyword-color: #E08000; +--code-comment-color: #800000; +--code-preprocessor-color: #806020; +--code-string-literal-color: #002080; +--code-char-literal-color: #008080; +--code-xml-cdata-color: black; +--code-vhdl-digit-color: #FF00FF; +--code-vhdl-char-color: #000000; +--code-vhdl-keyword-color: #700070; +--code-vhdl-logic-color: #FF0000; +--code-link-color: #4665A2; +--code-external-link-color: #4665A2; +--fragment-foreground-color: black; +--fragment-background-color: #FBFCFD; +--fragment-border-color: #C4CFE5; +--fragment-lineno-border-color: #00FF00; +--fragment-lineno-background-color: #E8E8E8; +--fragment-lineno-foreground-color: black; +--fragment-lineno-link-fg-color: #4665A2; +--fragment-lineno-link-bg-color: #D8D8D8; +--fragment-lineno-link-hover-fg-color: #4665A2; +--fragment-lineno-link-hover-bg-color: #C8C8C8; +--fragment-copy-ok-color: #2EC82E; +--tooltip-foreground-color: black; +--tooltip-background-color: white; +--tooltip-border-color: gray; +--tooltip-doc-color: grey; +--tooltip-declaration-color: #006318; +--tooltip-link-color: #4665A2; +--tooltip-shadow: 1px 1px 7px gray; +--fold-line-color: #808080; +--fold-minus-image: url('minus.svg'); +--fold-plus-image: url('plus.svg'); +--fold-minus-image-relpath: url('../../minus.svg'); +--fold-plus-image-relpath: url('../../plus.svg'); + +/** font-family */ +--font-family-normal: Roboto,sans-serif; +--font-family-monospace: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; +--font-family-nav: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +--font-family-title: Tahoma,Arial,sans-serif; +--font-family-toc: Verdana,'DejaVu Sans',Geneva,sans-serif; +--font-family-search: Arial,Verdana,sans-serif; +--font-family-icon: Arial,Helvetica; +--font-family-tooltip: Roboto,sans-serif; + +/** special sections */ +--warning-color-bg: #f8d1cc; +--warning-color-hl: #b61825; +--warning-color-text: #75070f; +--note-color-bg: #faf3d8; +--note-color-hl: #f3a600; +--note-color-text: #5f4204; +--todo-color-bg: #e4f3ff; +--todo-color-hl: #1879C4; +--todo-color-text: #274a5c; +--test-color-bg: #e8e8ff; +--test-color-hl: #3939C4; +--test-color-text: #1a1a5c; +--deprecated-color-bg: #ecf0f3; +--deprecated-color-hl: #5b6269; +--deprecated-color-text: #43454a; +--bug-color-bg: #e4dafd; +--bug-color-hl: #5b2bdd; +--bug-color-text: #2a0d72; +--invariant-color-bg: #d8f1e3; +--invariant-color-hl: #44b86f; +--invariant-color-text: #265532; +} + +@media (prefers-color-scheme: dark) { + html:not(.dark-mode) { + color-scheme: dark; + +/* page base colors */ +--page-background-color: black; +--page-foreground-color: #C9D1D9; +--page-link-color: #90A5CE; +--page-visited-link-color: #A3B4D7; + +/* index */ +--index-odd-item-bg-color: #0B101A; +--index-even-item-bg-color: black; +--index-header-color: #C4CFE5; +--index-separator-color: #334975; + +/* header */ +--header-background-color: #070B11; +--header-separator-color: #141C2E; +--header-gradient-image: url('nav_hd.png'); +--group-header-separator-color: #283A5D; +--group-header-color: #90A5CE; +--inherit-header-color: #A0A0A0; + +--footer-foreground-color: #5B7AB7; +--footer-logo-width: 60px; +--citation-label-color: #90A5CE; +--glow-color: cyan; + +--title-background-color: #090D16; +--title-separator-color: #354C79; +--directory-separator-color: #283A5D; +--separator-color: #283A5D; + +--blockquote-background-color: #101826; +--blockquote-border-color: #283A5D; + +--scrollbar-thumb-color: #283A5D; +--scrollbar-background-color: #070B11; + +--icon-background-color: #334975; +--icon-foreground-color: #C4CFE5; +--icon-doc-image: url('docd.svg'); +--icon-folder-open-image: url('folderopend.svg'); +--icon-folder-closed-image: url('folderclosedd.svg'); + +/* brief member declaration list */ +--memdecl-background-color: #0B101A; +--memdecl-separator-color: #2C3F65; +--memdecl-foreground-color: #BBB; +--memdecl-template-color: #7C95C6; + +/* detailed member list */ +--memdef-border-color: #233250; +--memdef-title-background-color: #1B2840; +--memdef-title-gradient-image: url('nav_fd.png'); +--memdef-proto-background-color: #19243A; +--memdef-proto-text-color: #9DB0D4; +--memdef-proto-text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.9); +--memdef-doc-background-color: black; +--memdef-param-name-color: #D28757; +--memdef-template-color: #7C95C6; + +/* tables */ +--table-cell-border-color: #283A5D; +--table-header-background-color: #283A5D; +--table-header-foreground-color: #C4CFE5; + +/* labels */ +--label-background-color: #354C7B; +--label-left-top-border-color: #4665A2; +--label-right-bottom-border-color: #283A5D; +--label-foreground-color: #CCCCCC; + +/** navigation bar/tree/menu */ +--nav-background-color: #101826; +--nav-foreground-color: #364D7C; +--nav-gradient-image: url('tab_bd.png'); +--nav-gradient-hover-image: url('tab_hd.png'); +--nav-gradient-active-image: url('tab_ad.png'); +--nav-gradient-active-image-parent: url("../tab_ad.png"); +--nav-separator-image: url('tab_sd.png'); +--nav-breadcrumb-image: url('bc_sd.png'); +--nav-breadcrumb-border-color: #2A3D61; +--nav-splitbar-image: url('splitbard.png'); +--nav-font-size-level1: 13px; +--nav-font-size-level2: 10px; +--nav-font-size-level3: 9px; +--nav-text-normal-color: #B6C4DF; +--nav-text-hover-color: #DCE2EF; +--nav-text-active-color: #DCE2EF; +--nav-text-normal-shadow: 0px 1px 1px black; +--nav-text-hover-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-text-active-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-menu-button-color: #B6C4DF; +--nav-menu-background-color: #05070C; +--nav-menu-foreground-color: #BBBBBB; +--nav-menu-toggle-color: rgba(255, 255, 255, 0.2); +--nav-arrow-color: #334975; +--nav-arrow-selected-color: #90A5CE; + +/* table of contents */ +--toc-background-color: #151E30; +--toc-border-color: #202E4A; +--toc-header-color: #A3B4D7; +--toc-down-arrow-image: url("data:image/svg+xml;utf8,&%238595;"); + +/** search field */ +--search-background-color: black; +--search-foreground-color: #C5C5C5; +--search-magnification-image: url('mag_d.svg'); +--search-magnification-select-image: url('mag_seld.svg'); +--search-active-color: #C5C5C5; +--search-filter-background-color: #101826; +--search-filter-foreground-color: #90A5CE; +--search-filter-border-color: #7C95C6; +--search-filter-highlight-text-color: #BCC9E2; +--search-filter-highlight-bg-color: #283A5D; +--search-results-background-color: #101826; +--search-results-foreground-color: #90A5CE; +--search-results-border-color: #7C95C6; +--search-box-shadow: inset 0.5px 0.5px 3px 0px #2F436C; + +/** code fragments */ +--code-keyword-color: #CC99CD; +--code-type-keyword-color: #AB99CD; +--code-flow-keyword-color: #E08000; +--code-comment-color: #717790; +--code-preprocessor-color: #65CABE; +--code-string-literal-color: #7EC699; +--code-char-literal-color: #00E0F0; +--code-xml-cdata-color: #C9D1D9; +--code-vhdl-digit-color: #FF00FF; +--code-vhdl-char-color: #C0C0C0; +--code-vhdl-keyword-color: #CF53C9; +--code-vhdl-logic-color: #FF0000; +--code-link-color: #79C0FF; +--code-external-link-color: #79C0FF; +--fragment-foreground-color: #C9D1D9; +--fragment-background-color: #090D16; +--fragment-border-color: #30363D; +--fragment-lineno-border-color: #30363D; +--fragment-lineno-background-color: black; +--fragment-lineno-foreground-color: #6E7681; +--fragment-lineno-link-fg-color: #6E7681; +--fragment-lineno-link-bg-color: #303030; +--fragment-lineno-link-hover-fg-color: #8E96A1; +--fragment-lineno-link-hover-bg-color: #505050; +--fragment-copy-ok-color: #0EA80E; +--tooltip-foreground-color: #C9D1D9; +--tooltip-background-color: #202020; +--tooltip-border-color: #C9D1D9; +--tooltip-doc-color: #D9E1E9; +--tooltip-declaration-color: #20C348; +--tooltip-link-color: #79C0FF; +--tooltip-shadow: none; +--fold-line-color: #808080; +--fold-minus-image: url('minusd.svg'); +--fold-plus-image: url('plusd.svg'); +--fold-minus-image-relpath: url('../../minusd.svg'); +--fold-plus-image-relpath: url('../../plusd.svg'); + +/** font-family */ +--font-family-normal: Roboto,sans-serif; +--font-family-monospace: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; +--font-family-nav: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +--font-family-title: Tahoma,Arial,sans-serif; +--font-family-toc: Verdana,'DejaVu Sans',Geneva,sans-serif; +--font-family-search: Arial,Verdana,sans-serif; +--font-family-icon: Arial,Helvetica; +--font-family-tooltip: Roboto,sans-serif; + +/** special sections */ +--warning-color-bg: #2e1917; +--warning-color-hl: #ad2617; +--warning-color-text: #f5b1aa; +--note-color-bg: #3b2e04; +--note-color-hl: #f1b602; +--note-color-text: #ceb670; +--todo-color-bg: #163750; +--todo-color-hl: #1982D2; +--todo-color-text: #dcf0fa; +--test-color-bg: #121258; +--test-color-hl: #4242cf; +--test-color-text: #c0c0da; +--deprecated-color-bg: #2e323b; +--deprecated-color-hl: #738396; +--deprecated-color-text: #abb0bd; +--bug-color-bg: #2a2536; +--bug-color-hl: #7661b3; +--bug-color-text: #ae9ed6; +--invariant-color-bg: #303a35; +--invariant-color-hl: #76ce96; +--invariant-color-text: #cceed5; +}} +body { + background-color: var(--page-background-color); + color: var(--page-foreground-color); +} + +body, table, div, p, dl { + font-weight: 400; + font-size: 14px; + font-family: var(--font-family-normal); + line-height: 22px; +} + +/* @group Heading Levels */ + +.title { + font-family: var(--font-family-normal); + line-height: 28px; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h1.groupheader { + font-size: 150%; +} + +h2.groupheader { + border-bottom: 1px solid var(--group-header-separator-color); + color: var(--group-header-color); + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px var(--glow-color); +} + +dt { + font-weight: bold; +} + +p.startli, p.startdd { + margin-top: 2px; +} + +th p.starttd, th p.intertd, th p.endtd { + font-size: 100%; + font-weight: 700; +} + +p.starttd { + margin-top: 0px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +p.interli { +} + +p.interdd { +} + +p.intertd { +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.navtab { + padding-right: 15px; + text-align: right; + line-height: 110%; +} + +div.navtab table { + border-spacing: 0; +} + +td.navtab { + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL { + background-image: var(--nav-gradient-active-image); + background-repeat:repeat-x; + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL a, td.navtabHL a:visited { + color: var(--nav-text-hover-color); + text-shadow: var(--nav-text-hover-shadow); +} + +a.navtab { + font-weight: bold; +} + +div.qindex{ + text-align: center; + width: 100%; + line-height: 140%; + font-size: 130%; + color: var(--index-separator-color); +} + +#main-menu a:focus { + outline: auto; + z-index: 10; + position: relative; +} + +dt.alphachar{ + font-size: 180%; + font-weight: bold; +} + +.alphachar a{ + color: var(--index-header-color); +} + +.alphachar a:hover, .alphachar a:visited{ + text-decoration: none; +} + +.classindex dl { + padding: 25px; + column-count:1 +} + +.classindex dd { + display:inline-block; + margin-left: 50px; + width: 90%; + line-height: 1.15em; +} + +.classindex dl.even { + background-color: var(--index-even-item-bg-color); +} + +.classindex dl.odd { + background-color: var(--index-odd-item-bg-color); +} + +@media(min-width: 1120px) { + .classindex dl { + column-count:2 + } +} + +@media(min-width: 1320px) { + .classindex dl { + column-count:3 + } +} + + +/* @group Link Styling */ + +a { + color: var(--page-link-color); + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: var(--page-visited-link-color); +} + +a:hover { + text-decoration: none; + background: linear-gradient(to bottom, transparent 0,transparent calc(100% - 1px), currentColor 100%); +} + +a:hover > span.arrow { + text-decoration: none; + background : var(--nav-background-color); +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited, a.line, a.line:visited { + color: var(--code-link-color); +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: var(--code-external-link-color); +} + +a.code.hl_class { /* style for links to class names in code snippets */ } +a.code.hl_struct { /* style for links to struct names in code snippets */ } +a.code.hl_union { /* style for links to union names in code snippets */ } +a.code.hl_interface { /* style for links to interface names in code snippets */ } +a.code.hl_protocol { /* style for links to protocol names in code snippets */ } +a.code.hl_category { /* style for links to category names in code snippets */ } +a.code.hl_exception { /* style for links to exception names in code snippets */ } +a.code.hl_service { /* style for links to service names in code snippets */ } +a.code.hl_singleton { /* style for links to singleton names in code snippets */ } +a.code.hl_concept { /* style for links to concept names in code snippets */ } +a.code.hl_namespace { /* style for links to namespace names in code snippets */ } +a.code.hl_package { /* style for links to package names in code snippets */ } +a.code.hl_define { /* style for links to macro names in code snippets */ } +a.code.hl_function { /* style for links to function names in code snippets */ } +a.code.hl_variable { /* style for links to variable names in code snippets */ } +a.code.hl_typedef { /* style for links to typedef names in code snippets */ } +a.code.hl_enumvalue { /* style for links to enum value names in code snippets */ } +a.code.hl_enumeration { /* style for links to enumeration names in code snippets */ } +a.code.hl_signal { /* style for links to Qt signal names in code snippets */ } +a.code.hl_slot { /* style for links to Qt slot names in code snippets */ } +a.code.hl_friend { /* style for links to friend names in code snippets */ } +a.code.hl_dcop { /* style for links to KDE3 DCOP names in code snippets */ } +a.code.hl_property { /* style for links to property names in code snippets */ } +a.code.hl_event { /* style for links to event names in code snippets */ } +a.code.hl_sequence { /* style for links to sequence names in code snippets */ } +a.code.hl_dictionary { /* style for links to dictionary names in code snippets */ } + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +ul { + overflow: visible; +} + +ul.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; + column-count: 3; + list-style-type: none; +} + +#side-nav ul { + overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */ +} + +#main-nav ul { + overflow: visible; /* reset ul rule for the navigation bar drop down lists */ +} + +.fragment { + text-align: left; + direction: ltr; + overflow-x: auto; + overflow-y: hidden; + position: relative; + min-height: 12px; + margin: 10px 0px; + padding: 10px 10px; + border: 1px solid var(--fragment-border-color); + border-radius: 4px; + background-color: var(--fragment-background-color); + color: var(--fragment-foreground-color); +} + +pre.fragment { + word-wrap: break-word; + font-size: 10pt; + line-height: 125%; + font-family: var(--font-family-monospace); +} + +.clipboard { + width: 24px; + height: 24px; + right: 5px; + top: 5px; + opacity: 0; + position: absolute; + display: inline; + overflow: auto; + fill: var(--fragment-foreground-color); + justify-content: center; + align-items: center; + cursor: pointer; +} + +.clipboard.success { + border: 1px solid var(--fragment-foreground-color); + border-radius: 4px; +} + +.fragment:hover .clipboard, .clipboard.success { + opacity: .28; +} + +.clipboard:hover, .clipboard.success { + opacity: 1 !important; +} + +.clipboard:active:not([class~=success]) svg { + transform: scale(.91); +} + +.clipboard.success svg { + fill: var(--fragment-copy-ok-color); +} + +.clipboard.success { + border-color: var(--fragment-copy-ok-color); +} + +div.line { + font-family: var(--font-family-monospace); + font-size: 13px; + min-height: 13px; + line-height: 1.2; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line:after { + content:"\000A"; + white-space: pre; +} + +div.line.glow { + background-color: var(--glow-color); + box-shadow: 0 0 10px var(--glow-color); +} + +span.fold { + margin-left: 5px; + margin-right: 1px; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; + display: inline-block; + width: 12px; + height: 12px; + background-repeat:no-repeat; + background-position:center; +} + +span.lineno { + padding-right: 4px; + margin-right: 9px; + text-align: right; + border-right: 2px solid var(--fragment-lineno-border-color); + color: var(--fragment-lineno-foreground-color); + background-color: var(--fragment-lineno-background-color); + white-space: pre; +} +span.lineno a, span.lineno a:visited { + color: var(--fragment-lineno-link-fg-color); + background-color: var(--fragment-lineno-link-bg-color); +} + +span.lineno a:hover { + color: var(--fragment-lineno-link-hover-fg-color); + background-color: var(--fragment-lineno-link-hover-bg-color); +} + +.lineno { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +div.classindex ul { + list-style: none; + padding-left: 0; +} + +div.classindex span.ai { + display: inline-block; +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + color: var(--page-foreground-color); + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +p.formulaDsp { + text-align: center; +} + +img.dark-mode-visible { + display: none; +} +img.light-mode-visible { + display: none; +} + +img.formulaInl, img.inline { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; + width: var(--footer-logo-width); +} + +.compoundTemplParams { + color: var(--memdecl-template-color); + font-size: 80%; + line-height: 120%; +} + +/* @group Code Colorization */ + +span.keyword { + color: var(--code-keyword-color); +} + +span.keywordtype { + color: var(--code-type-keyword-color); +} + +span.keywordflow { + color: var(--code-flow-keyword-color); +} + +span.comment { + color: var(--code-comment-color); +} + +span.preprocessor { + color: var(--code-preprocessor-color); +} + +span.stringliteral { + color: var(--code-string-literal-color); +} + +span.charliteral { + color: var(--code-char-literal-color); +} + +span.xmlcdata { + color: var(--code-xml-cdata-color); +} + +span.vhdldigit { + color: var(--code-vhdl-digit-color); +} + +span.vhdlchar { + color: var(--code-vhdl-char-color); +} + +span.vhdlkeyword { + color: var(--code-vhdl-keyword-color); +} + +span.vhdllogic { + color: var(--code-vhdl-logic-color); +} + +blockquote { + background-color: var(--blockquote-background-color); + border-left: 2px solid var(--blockquote-border-color); + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +/* @end */ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid var(--table-cell-border-color); +} + +th.dirtab { + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid var(--separator-color); +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: var(--glow-color); + box-shadow: 0 0 15px var(--glow-color); +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: var(--memdecl-background-color); + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: var(--memdecl-foreground-color); +} + +.memSeparator { + border-bottom: 1px solid var(--memdecl-separator-color); + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight, .memTemplItemRight { + width: 100%; +} + +.memTemplParams { + color: var(--memdecl-template-color); + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtitle { + padding: 8px; + border-top: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); + border-top-right-radius: 4px; + border-top-left-radius: 4px; + margin-bottom: -1px; + background-image: var(--memdef-title-gradient-image); + background-repeat: repeat-x; + background-color: var(--memdef-title-background-color); + line-height: 1.25; + font-weight: 300; + float:left; +} + +.permalink +{ + font-size: 65%; + display: inline-block; + vertical-align: middle; +} + +.memtemplate { + font-size: 80%; + color: var(--memdef-template-color); + font-weight: normal; + margin-left: 9px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px var(--glow-color); +} + +.memname { + font-weight: 400; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); + padding: 6px 0px 6px 0px; + color: var(--memdef-proto-text-color); + font-weight: bold; + text-shadow: var(--memdef-proto-text-shadow); + background-color: var(--memdef-proto-background-color); + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; +} + +.overload { + font-family: var(--font-family-monospace); + font-size: 65%; +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); + padding: 6px 10px 2px 10px; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: var(--memdef-doc-background-color); + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; + padding: 0px; + padding-bottom: 1px; +} + +.paramname { + white-space: nowrap; + padding: 0px; + padding-bottom: 1px; + margin-left: 2px; +} + +.paramname em { + color: var(--memdef-param-name-color); + font-style: normal; + margin-right: 1px; +} + +.paramname .paramdefval { + font-family: var(--font-family-monospace); +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype, .tparams .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir, .tparams .paramdir { + font-family: var(--font-family-monospace); + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: var(--label-background-color); + border-top:1px solid var(--label-left-top-border-color); + border-left:1px solid var(--label-left-top-border-color); + border-right:1px solid var(--label-right-bottom-border-color); + border-bottom:1px solid var(--label-right-bottom-border-color); + text-shadow: none; + color: var(--label-foreground-color); + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view inside a (index) page */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid var(--directory-separator-color); + border-bottom: 1px solid var(--directory-separator-color); + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.odd { + padding-left: 6px; + background-color: var(--index-odd-item-bg-color); +} + +.directory tr.even { + padding-left: 6px; + background-color: var(--index-even-item-bg-color); +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: var(--page-link-color); +} + +.arrow { + color: var(--nav-arrow-color); + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + font-size: 80%; + display: inline-block; + width: 16px; + height: 22px; +} + +.icon { + font-family: var(--font-family-icon); + line-height: normal; + font-weight: bold; + font-size: 12px; + height: 14px; + width: 16px; + display: inline-block; + background-color: var(--icon-background-color); + color: var(--icon-foreground-color); + text-align: center; + border-radius: 4px; + margin-left: 2px; + margin-right: 2px; +} + +.icona { + width: 24px; + height: 22px; + display: inline-block; +} + +.iconfopen { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:var(--icon-folder-open-image); + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.iconfclosed { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:var(--icon-folder-closed-image); + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.icondoc { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:var(--icon-doc-image); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +/* @end */ + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: var(--footer-foreground-color); +} + +table.doxtable caption { + caption-side: top; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid var(--table-cell-border-color); + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + margin-bottom: 10px; + border: 1px solid var(--memdef-border-color); + border-spacing: 0px; + border-radius: 4px; + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname { + white-space: nowrap; + border-right: 1px solid var(--memdef-border-color); + border-bottom: 1px solid var(--memdef-border-color); + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fielddoc { + border-bottom: 1px solid var(--memdef-border-color); +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image: var(--memdef-title-gradient-image); + background-repeat:repeat-x; + background-color: var(--memdef-title-background-color); + font-size: 90%; + color: var(--memdef-proto-text-color); + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + font-weight: 400; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid var(--memdef-border-color); +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: var(--nav-gradient-image); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image: var(--nav-gradient-image); + background-repeat:repeat-x; + background-position: 0 -5px; + height:30px; + line-height:30px; + color:var(--nav-text-normal-color); + border:solid 1px var(--nav-breadcrumb-border-color); + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:var(--nav-breadcrumb-image); + background-repeat:no-repeat; + background-position:right; + color: var(--nav-foreground-color); +} + +.navpath li.navelem a +{ + height:32px; + display:block; + outline: none; + color: var(--nav-text-normal-color); + font-family: var(--font-family-nav); + text-shadow: var(--nav-text-normal-shadow); + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color: var(--nav-text-hover-color); + text-shadow: var(--nav-text-hover-shadow); +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color: var(--footer-foreground-color); + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +table.classindex +{ + margin: 10px; + white-space: nowrap; + margin-left: 3%; + margin-right: 3%; + width: 94%; + border: 0; + border-spacing: 0; + padding: 0; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image: var(--header-gradient-image); + background-repeat:repeat-x; + background-color: var(--header-background-color); + margin: 0px; + border-bottom: 1px solid var(--header-separator-color); +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +.PageDocRTL-title div.headertitle { + text-align: right; + direction: rtl; +} + +dl { + padding: 0 0 0 0; +} + +/* + +dl.section { + margin-left: 0px; + padding-left: 0px; +} + +dl.note { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00D000; +} + +dl.deprecated { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #505050; +} + +dl.todo { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00C0E0; +} + +dl.test { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #3030E0; +} + +dl.bug { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #C08050; +} + +*/ + +dl.bug dt a, dl.deprecated dt a, dl.todo dt a, dl.test a { + font-weight: bold !important; +} + +dl.warning, dl.attention, dl.note, dl.deprecated, dl.bug, +dl.invariant, dl.pre, dl.post, dl.todo, dl.test, dl.remark { + padding: 10px; + margin: 10px 0px; + overflow: hidden; + margin-left: 0; + border-radius: 4px; +} + +dl.section dd { + margin-bottom: 2px; +} + +dl.warning, dl.attention { + background: var(--warning-color-bg); + border-left: 8px solid var(--warning-color-hl); + color: var(--warning-color-text); +} + +dl.warning dt, dl.attention dt { + color: var(--warning-color-hl); +} + +dl.note, dl.remark { + background: var(--note-color-bg); + border-left: 8px solid var(--note-color-hl); + color: var(--note-color-text); +} + +dl.note dt, dl.remark dt { + color: var(--note-color-hl); +} + +dl.todo { + background: var(--todo-color-bg); + border-left: 8px solid var(--todo-color-hl); + color: var(--todo-color-text); +} + +dl.todo dt { + color: var(--todo-color-hl); +} + +dl.test { + background: var(--test-color-bg); + border-left: 8px solid var(--test-color-hl); + color: var(--test-color-text); +} + +dl.test dt { + color: var(--test-color-hl); +} + +dl.bug dt a { + color: var(--bug-color-hl) !important; +} + +dl.bug { + background: var(--bug-color-bg); + border-left: 8px solid var(--bug-color-hl); + color: var(--bug-color-text); +} + +dl.bug dt a { + color: var(--bug-color-hl) !important; +} + +dl.deprecated { + background: var(--deprecated-color-bg); + border-left: 8px solid var(--deprecated-color-hl); + color: var(--deprecated-color-text); +} + +dl.deprecated dt a { + color: var(--deprecated-color-hl) !important; +} + +dl.section dd, dl.bug dd, dl.deprecated dd, dl.todo dd, dl.test dd { + margin-inline-start: 0px; +} + +dl.invariant, dl.pre, dl.post { + background: var(--invariant-color-bg); + border-left: 8px solid var(--invariant-color-hl); + color: var(--invariant-color-text); +} + +dl.invariant dt, dl.pre dt, dl.post dt { + color: var(--invariant-color-hl); +} + + +#projectrow +{ + height: 56px; +} + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectalign +{ + vertical-align: middle; + padding-left: 0.5em; +} + +#projectname +{ + font-size: 200%; + font-family: var(--font-family-title); + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font-size: 90%; + font-family: var(--font-family-title); + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font-size: 50%; + font-family: 50% var(--font-family-title); + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid var(--title-separator-color); + background-color: var(--title-background-color); +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.plantumlgraph +{ + text-align: center; +} + +.diagraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:var(--citation-label-color); + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; + text-align:right; + width:52px; +} + +dl.citelist dd { + margin:2px 0 2px 72px; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: var(--toc-background-color); + border: 1px solid var(--toc-border-color); + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 8px 10px 10px; + width: 200px; +} + +div.toc li { + background: var(--toc-down-arrow-image) no-repeat scroll 0 5px transparent; + font: 10px/1.2 var(--font-family-toc); + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +div.toc h3 { + font: bold 12px/1.2 var(--font-family-toc); + color: var(--toc-header-color); + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.level2 { + margin-left: 15px; +} + +div.toc li.level3 { + margin-left: 15px; +} + +div.toc li.level4 { + margin-left: 15px; +} + +span.emoji { + /* font family used at the site: https://unicode.org/emoji/charts/full-emoji-list.html + * font-family: "Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus, Code2000, Code2001, Code2002, Musica, serif, LastResort; + */ +} + +span.obfuscator { + display: none; +} + +.inherit_header { + font-weight: bold; + color: var(--inherit-header-color); + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + /*white-space: nowrap;*/ + color: var(--tooltip-foreground-color); + background-color: var(--tooltip-background-color); + border: 1px solid var(--tooltip-border-color); + border-radius: 4px 4px 4px 4px; + box-shadow: var(--tooltip-shadow); + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: var(--tooltip-doc-color); + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip a { + color: var(--tooltip-link-color); +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: var(--tooltip-declaration-color); +} + +#powerTip div { + margin: 0px; + padding: 0px; + font-size: 12px; + font-family: var(--font-family-tooltip); + line-height: 16px; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: var(--tooltip-background-color); + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before, #powerTip.ne:before, #powerTip.nw:before { + border-top-color: var(--tooltip-border-color); + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: var(--tooltip-background-color); + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: var(--tooltip-border-color); + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: var(--tooltip-border-color); + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: var(--tooltip-border-color); + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: var(--tooltip-border-color); + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: var(--tooltip-border-color); + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + +/* @group Markdown */ + +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid var(--table-cell-border-color); + padding: 3px 7px 2px; +} + +table.markdownTable tr { +} + +th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft, td.markdownTableBodyLeft { + text-align: left +} + +th.markdownTableHeadRight, td.markdownTableBodyRight { + text-align: right +} + +th.markdownTableHeadCenter, td.markdownTableBodyCenter { + text-align: center +} + +tt, code, kbd, samp +{ + display: inline-block; +} +/* @end */ + +u { + text-decoration: underline; +} + +details>summary { + list-style-type: none; +} + +details > summary::-webkit-details-marker { + display: none; +} + +details>summary::before { + content: "\25ba"; + padding-right:4px; + font-size: 80%; +} + +details[open]>summary::before { + content: "\25bc"; + padding-right:4px; + font-size: 80%; +} + +body { + scrollbar-color: var(--scrollbar-thumb-color) var(--scrollbar-background-color); +} + +::-webkit-scrollbar { + background-color: var(--scrollbar-background-color); + height: 12px; + width: 12px; +} +::-webkit-scrollbar-thumb { + border-radius: 6px; + box-shadow: inset 0 0 12px 12px var(--scrollbar-thumb-color); + border: solid 2px transparent; +} +::-webkit-scrollbar-corner { + background-color: var(--scrollbar-background-color); +} + diff --git a/doc/1.5.5/libguac/doxygen.svg b/doc/1.5.5/libguac/doxygen.svg new file mode 100644 index 000000000..79a763540 --- /dev/null +++ b/doc/1.5.5/libguac/doxygen.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/1.5.5/libguac/doxygen_crawl.html b/doc/1.5.5/libguac/doxygen_crawl.html new file mode 100644 index 000000000..e0ba70b1f --- /dev/null +++ b/doc/1.5.5/libguac/doxygen_crawl.html @@ -0,0 +1,212 @@ + + + +Validator / crawler helper + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/1.5.5/libguac/dynsections.js b/doc/1.5.5/libguac/dynsections.js new file mode 100644 index 000000000..8f493264f --- /dev/null +++ b/doc/1.5.5/libguac/dynsections.js @@ -0,0 +1,194 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ + +let dynsection = { + + // helper function + updateStripes : function() { + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); + $('table.directory tr'). + removeClass('odd').filter(':visible:odd').addClass('odd'); + }, + + toggleVisibility : function(linkObj) { + const base = $(linkObj).attr('id'); + const summary = $('#'+base+'-summary'); + const content = $('#'+base+'-content'); + const trigger = $('#'+base+'-trigger'); + const src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; + }, + + toggleLevel : function(level) { + $('table.directory tr').each(function() { + const l = this.id.split('_').length-1; + const i = $('#img'+this.id.substring(3)); + const a = $('#arr'+this.id.substring(3)); + if (l'); + // add vertical lines to other rows + $('span[class=lineno]').not(':eq(0)').append(''); + // add toggle controls to lines with fold divs + $('div[class=foldopen]').each(function() { + // extract specific id to use + const id = $(this).attr('id').replace('foldopen',''); + // extract start and end foldable fragment attributes + const start = $(this).attr('data-start'); + const end = $(this).attr('data-end'); + // replace normal fold span with controls for the first line of a foldable fragment + $(this).find('span[class=fold]:first').replaceWith(''); + // append div for folded (closed) representation + $(this).after(''); + // extract the first line from the "open" section to represent closed content + const line = $(this).children().first().clone(); + // remove any glow that might still be active on the original line + $(line).removeClass('glow'); + if (start) { + // if line already ends with a start marker (e.g. trailing {), remove it + $(line).html($(line).html().replace(new RegExp('\\s*'+start+'\\s*$','g'),'')); + } + // replace minus with plus symbol + $(line).find('span[class=fold]').css('background-image',codefold.plusImg[relPath]); + // append ellipsis + $(line).append(' '+start+''+end); + // insert constructed line into closed div + $('#foldclosed'+id).html(line); + }); + }, +}; +/* @license-end */ diff --git a/doc/1.5.5/libguac/error-types_8h.html b/doc/1.5.5/libguac/error-types_8h.html new file mode 100644 index 000000000..d64df1528 --- /dev/null +++ b/doc/1.5.5/libguac/error-types_8h.html @@ -0,0 +1,206 @@ + + + + + + + +libguac: guacamole/error-types.h File Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    error-types.h File Reference
    +
    +
    + +

    Type definitions related to return values and errors. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Enumerations

    enum  guac_status {
    +  GUAC_STATUS_SUCCESS = 0 +, GUAC_STATUS_NO_MEMORY +, GUAC_STATUS_CLOSED +, GUAC_STATUS_TIMEOUT +,
    +  GUAC_STATUS_SEE_ERRNO +, GUAC_STATUS_IO_ERROR +, GUAC_STATUS_INVALID_ARGUMENT +, GUAC_STATUS_INTERNAL_ERROR +,
    +  GUAC_STATUS_NO_SPACE +, GUAC_STATUS_INPUT_TOO_LARGE +, GUAC_STATUS_RESULT_TOO_LARGE +, GUAC_STATUS_PERMISSION_DENIED +,
    +  GUAC_STATUS_BUSY +, GUAC_STATUS_NOT_AVAILABLE +, GUAC_STATUS_NOT_SUPPORTED +, GUAC_STATUS_NOT_INPLEMENTED = 15 +,
    +  GUAC_STATUS_NOT_IMPLEMENTED = 15 +, GUAC_STATUS_TRY_AGAIN +, GUAC_STATUS_PROTOCOL_ERROR +, GUAC_STATUS_NOT_FOUND +,
    +  GUAC_STATUS_CANCELED +, GUAC_STATUS_OUT_OF_RANGE +, GUAC_STATUS_REFUSED +, GUAC_STATUS_TOO_MANY +,
    +  GUAC_STATUS_WOULD_BLOCK +
    + }
     Return codes shared by all Guacamole functions which can fail. More...
     
    +

    Detailed Description

    +

    Type definitions related to return values and errors.

    +

    Enumeration Type Documentation

    + +

    ◆ guac_status

    + +
    +
    + + + + +
    enum guac_status
    +
    + +

    Return codes shared by all Guacamole functions which can fail.

    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Enumerator
    GUAC_STATUS_SUCCESS 

    No errors occurred and the operation was successful.

    +
    GUAC_STATUS_NO_MEMORY 

    Insufficient memory to complete the operation.

    +
    GUAC_STATUS_CLOSED 

    The resource associated with the operation can no longer be used as it has reached the end of its normal lifecycle.

    +
    GUAC_STATUS_TIMEOUT 

    Time ran out before the operation could complete.

    +
    GUAC_STATUS_SEE_ERRNO 

    An error occurred, and further information about the error is already stored in errno.

    +
    GUAC_STATUS_IO_ERROR 

    An I/O error prevented the operation from succeeding.

    +
    GUAC_STATUS_INVALID_ARGUMENT 

    The operation could not be performed because an invalid argument was given.

    +
    GUAC_STATUS_INTERNAL_ERROR 

    The operation failed due to a bug in the software or a serious system problem.

    +
    GUAC_STATUS_NO_SPACE 

    Insufficient space remaining to complete the operation.

    +
    GUAC_STATUS_INPUT_TOO_LARGE 

    The operation failed because the input provided is too large.

    +
    GUAC_STATUS_RESULT_TOO_LARGE 

    The operation failed because the result could not be stored in the space provided.

    +
    GUAC_STATUS_PERMISSION_DENIED 

    Permission was denied to perform the operation.

    +
    GUAC_STATUS_BUSY 

    The operation could not be performed because associated resources are busy.

    +
    GUAC_STATUS_NOT_AVAILABLE 

    The operation could not be performed because, while the associated resources do exist, they are not currently available for use.

    +
    GUAC_STATUS_NOT_SUPPORTED 

    The requested operation is not supported.

    +
    GUAC_STATUS_NOT_INPLEMENTED 

    Support for the requested operation is not yet implemented.

    +
    Deprecated
    This constant contains a typo in its name and will be removed in a future release. Use GUAC_STATUS_NOT_IMPLEMENTED instead.
    +
    GUAC_STATUS_NOT_IMPLEMENTED 

    Support for the requested operation is not yet implemented.

    +
    GUAC_STATUS_TRY_AGAIN 

    The operation is temporarily unable to be performed, but may succeed if reattempted.

    +
    GUAC_STATUS_PROTOCOL_ERROR 

    A violation of the Guacamole protocol occurred.

    +
    GUAC_STATUS_NOT_FOUND 

    The operation could not be performed because the requested resources do not exist.

    +
    GUAC_STATUS_CANCELED 

    The operation was canceled prior to completion.

    +
    GUAC_STATUS_OUT_OF_RANGE 

    The operation could not be performed because input values are outside the allowed range.

    +
    GUAC_STATUS_REFUSED 

    The operation could not be performed because access to an underlying resource is explicitly not allowed, though not necessarily due to permissions.

    +
    GUAC_STATUS_TOO_MANY 

    The operation failed because too many resources are already in use.

    +
    GUAC_STATUS_WOULD_BLOCK 

    The operation was not performed because it would otherwise block.

    +
    + +
    +
    +
    + + + + diff --git a/doc/1.5.5/libguac/error-types_8h_source.html b/doc/1.5.5/libguac/error-types_8h_source.html new file mode 100644 index 000000000..69344524b --- /dev/null +++ b/doc/1.5.5/libguac/error-types_8h_source.html @@ -0,0 +1,198 @@ + + + + + + + +libguac: guacamole/error-types.h Source File + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    error-types.h
    +
    +
    +Go to the documentation of this file.
    1/*
    +
    2 * Licensed to the Apache Software Foundation (ASF) under one
    +
    3 * or more contributor license agreements. See the NOTICE file
    +
    4 * distributed with this work for additional information
    +
    5 * regarding copyright ownership. The ASF licenses this file
    +
    6 * to you under the Apache License, Version 2.0 (the
    +
    7 * "License"); you may not use this file except in compliance
    +
    8 * with the License. You may obtain a copy of the License at
    +
    9 *
    +
    10 * http://www.apache.org/licenses/LICENSE-2.0
    +
    11 *
    +
    12 * Unless required by applicable law or agreed to in writing,
    +
    13 * software distributed under the License is distributed on an
    +
    14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    15 * KIND, either express or implied. See the License for the
    +
    16 * specific language governing permissions and limitations
    +
    17 * under the License.
    +
    18 */
    +
    19
    +
    20#ifndef _GUAC_ERROR_TYPES_H
    +
    21#define _GUAC_ERROR_TYPES_H
    +
    22
    + +
    175
    +
    176#endif
    +
    177
    +
    guac_status
    Return codes shared by all Guacamole functions which can fail.
    Definition error-types.h:32
    +
    @ GUAC_STATUS_PERMISSION_DENIED
    Permission was denied to perform the operation.
    Definition error-types.h:97
    +
    @ GUAC_STATUS_SUCCESS
    No errors occurred and the operation was successful.
    Definition error-types.h:37
    +
    @ GUAC_STATUS_PROTOCOL_ERROR
    A violation of the Guacamole protocol occurred.
    Definition error-types.h:138
    +
    @ GUAC_STATUS_RESULT_TOO_LARGE
    The operation failed because the result could not be stored in the space provided.
    Definition error-types.h:92
    +
    @ GUAC_STATUS_WOULD_BLOCK
    The operation was not performed because it would otherwise block.
    Definition error-types.h:172
    +
    @ GUAC_STATUS_NO_SPACE
    Insufficient space remaining to complete the operation.
    Definition error-types.h:81
    +
    @ GUAC_STATUS_IO_ERROR
    An I/O error prevented the operation from succeeding.
    Definition error-types.h:64
    +
    @ GUAC_STATUS_REFUSED
    The operation could not be performed because access to an underlying resource is explicitly not allow...
    Definition error-types.h:162
    +
    @ GUAC_STATUS_INTERNAL_ERROR
    The operation failed due to a bug in the software or a serious system problem.
    Definition error-types.h:76
    +
    @ GUAC_STATUS_CANCELED
    The operation was canceled prior to completion.
    Definition error-types.h:149
    +
    @ GUAC_STATUS_INVALID_ARGUMENT
    The operation could not be performed because an invalid argument was given.
    Definition error-types.h:70
    +
    @ GUAC_STATUS_TOO_MANY
    The operation failed because too many resources are already in use.
    Definition error-types.h:167
    +
    @ GUAC_STATUS_OUT_OF_RANGE
    The operation could not be performed because input values are outside the allowed range.
    Definition error-types.h:155
    +
    @ GUAC_STATUS_NOT_AVAILABLE
    The operation could not be performed because, while the associated resources do exist,...
    Definition error-types.h:109
    +
    @ GUAC_STATUS_CLOSED
    The resource associated with the operation can no longer be used as it has reached the end of its nor...
    Definition error-types.h:48
    +
    @ GUAC_STATUS_NOT_INPLEMENTED
    Support for the requested operation is not yet implemented.
    Definition error-types.h:122
    +
    @ GUAC_STATUS_INPUT_TOO_LARGE
    The operation failed because the input provided is too large.
    Definition error-types.h:86
    +
    @ GUAC_STATUS_TRY_AGAIN
    The operation is temporarily unable to be performed, but may succeed if reattempted.
    Definition error-types.h:133
    +
    @ GUAC_STATUS_NOT_IMPLEMENTED
    Support for the requested operation is not yet implemented.
    Definition error-types.h:127
    +
    @ GUAC_STATUS_NO_MEMORY
    Insufficient memory to complete the operation.
    Definition error-types.h:42
    +
    @ GUAC_STATUS_NOT_SUPPORTED
    The requested operation is not supported.
    Definition error-types.h:114
    +
    @ GUAC_STATUS_BUSY
    The operation could not be performed because associated resources are busy.
    Definition error-types.h:103
    +
    @ GUAC_STATUS_TIMEOUT
    Time ran out before the operation could complete.
    Definition error-types.h:53
    +
    @ GUAC_STATUS_SEE_ERRNO
    An error occurred, and further information about the error is already stored in errno.
    Definition error-types.h:59
    +
    @ GUAC_STATUS_NOT_FOUND
    The operation could not be performed because the requested resources do not exist.
    Definition error-types.h:144
    +
    + + + + diff --git a/doc/1.5.5/libguac/error_8h.html b/doc/1.5.5/libguac/error_8h.html new file mode 100644 index 000000000..25f4f99fc --- /dev/null +++ b/doc/1.5.5/libguac/error_8h.html @@ -0,0 +1,193 @@ + + + + + + + +libguac: guacamole/error.h File Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    error.h File Reference
    +
    +
    + +

    Provides functions and structures required for handling return values and errors. +More...

    + +

    Go to the source code of this file.

    + + + + + + + + + + + + + + +

    +Macros

    #define guac_error   (*__guac_error())
     Returns the status code associated with the error which occurred during the last function call.
     
    #define guac_error_message   (*__guac_error_message())
     Returns a message describing the error which occurred during the last function call.
     
    #define guac_error   (*__guac_error())
     Returns the status code associated with the error which occurred during the last function call.
     
    #define guac_error_message   (*__guac_error_message())
     Returns a message describing the error which occurred during the last function call.
     
    + + + + +

    +Functions

    +const char * guac_status_string (guac_status status)
     Returns a human-readable explanation of the status code given.
     
    +

    Detailed Description

    +

    Provides functions and structures required for handling return values and errors.

    +

    Macro Definition Documentation

    + +

    ◆ guac_error [1/2]

    + +
    +
    + + + + +
    #define guac_error   (*__guac_error())
    +
    + +

    Returns the status code associated with the error which occurred during the last function call.

    +

    This value will only be set by functions documented to use it (most libguac functions), and is undefined if no error occurred.

    +

    The storage of this value is thread-local. Assignment of a status code to guac_error in one thread will not affect its value in another thread.

    + +
    +
    + +

    ◆ guac_error [2/2]

    + +
    +
    + + + + +
    #define guac_error   (*__guac_error())
    +
    + +

    Returns the status code associated with the error which occurred during the last function call.

    +

    This value will only be set by functions documented to use it (most libguac functions), and is undefined if no error occurred.

    +

    The storage of this value is thread-local. Assignment of a status code to guac_error in one thread will not affect its value in another thread.

    + +
    +
    + +

    ◆ guac_error_message [1/2]

    + +
    +
    + + + + +
    #define guac_error_message   (*__guac_error_message())
    +
    + +

    Returns a message describing the error which occurred during the last function call.

    +

    If an error occurred, but no message is associated with it, NULL is returned. This value is undefined if no error occurred.

    +

    The storage of this value is thread-local. Assignment of a message to guac_error_message in one thread will not affect its value in another thread.

    + +
    +
    + +

    ◆ guac_error_message [2/2]

    + +
    +
    + + + + +
    #define guac_error_message   (*__guac_error_message())
    +
    + +

    Returns a message describing the error which occurred during the last function call.

    +

    If an error occurred, but no message is associated with it, NULL is returned. This value is undefined if no error occurred.

    +

    The storage of this value is thread-local. Assignment of a message to guac_error_message in one thread will not affect its value in another thread.

    + +
    +
    +
    + + + + diff --git a/doc/1.5.5/libguac/error_8h_source.html b/doc/1.5.5/libguac/error_8h_source.html new file mode 100644 index 000000000..b9f484e84 --- /dev/null +++ b/doc/1.5.5/libguac/error_8h_source.html @@ -0,0 +1,141 @@ + + + + + + + +libguac: guacamole/error.h Source File + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    error.h
    +
    +
    +Go to the documentation of this file.
    1/*
    +
    2 * Licensed to the Apache Software Foundation (ASF) under one
    +
    3 * or more contributor license agreements. See the NOTICE file
    +
    4 * distributed with this work for additional information
    +
    5 * regarding copyright ownership. The ASF licenses this file
    +
    6 * to you under the Apache License, Version 2.0 (the
    +
    7 * "License"); you may not use this file except in compliance
    +
    8 * with the License. You may obtain a copy of the License at
    +
    9 *
    +
    10 * http://www.apache.org/licenses/LICENSE-2.0
    +
    11 *
    +
    12 * Unless required by applicable law or agreed to in writing,
    +
    13 * software distributed under the License is distributed on an
    +
    14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    15 * KIND, either express or implied. See the License for the
    +
    16 * specific language governing permissions and limitations
    +
    17 * under the License.
    +
    18 */
    +
    19
    +
    20#ifndef _GUAC_ERROR_H
    +
    21#define _GUAC_ERROR_H
    +
    22
    +
    30#include "error-types.h"
    +
    31
    +
    35const char* guac_status_string(guac_status status);
    +
    36
    +
    45#define guac_error (*__guac_error())
    +
    46
    +
    47guac_status* __guac_error();
    +
    48
    +
    58#define guac_error_message (*__guac_error_message())
    +
    59
    +
    60const char** __guac_error_message();
    +
    61
    +
    65const char* guac_status_string(guac_status status);
    +
    66
    +
    75#define guac_error (*__guac_error())
    +
    76
    +
    77guac_status* __guac_error();
    +
    78
    +
    88#define guac_error_message (*__guac_error_message())
    +
    89
    +
    90const char** __guac_error_message();
    +
    91
    +
    92#endif
    +
    93
    +
    Type definitions related to return values and errors.
    +
    guac_status
    Return codes shared by all Guacamole functions which can fail.
    Definition error-types.h:32
    +
    const char * guac_status_string(guac_status status)
    Returns a human-readable explanation of the status code given.
    +
    + + + + diff --git a/doc/1.5.5/libguac/files.html b/doc/1.5.5/libguac/files.html new file mode 100644 index 000000000..91ec1d008 --- /dev/null +++ b/doc/1.5.5/libguac/files.html @@ -0,0 +1,137 @@ + + + + + + + +libguac: File List + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    File List
    +
    +
    +
    Here is a list of all documented files with brief descriptions:
    +
    [detail level 12]
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      guacamole
     argv-constants.hConstants related to automatic handling of received "argv" instructions
     argv-fntypes.hFunction type definitions related to automatic handling of received "argv" instructions
     argv.hConvenience functions for processing parameter values that are submitted dynamically using "argv" instructions
     audio-fntypes.hFunction type definitions related to simple streaming audio
     audio-types.hType definitions related to simple streaming audio
     audio.hProvides functions and structures used for providing simple streaming audio
     client-constants.hConstants related to the Guacamole client structure, guac_client
     client-fntypes.hFunction type definitions related to the Guacamole client structure, guac_client
     client-types.hType definitions related to the Guacamole client structure, guac_client
     client.hFunctions and structure contents for the Guacamole proxy client
     error-types.hType definitions related to return values and errors
     error.hProvides functions and structures required for handling return values and errors
     fips.h
     hash.hProvides functions and structures for producing likely-to-be-unique hash values for images
     layer-types.hType definitions related to Guacamole layers
     layer.hProvides functions and structures required for allocating and using layers
     mem.hProvides convenience macros/functions for performing arithmetic on size_t values and for allocating memory, particularly memory related to images, audio, etc
     object-types.hType definitions related to Guacamole protocol objects
     object.hProvides functions and structures required for allocating and using objects
     parser-constants.hConstants related to the Guacamole protocol parser
     parser-types.hType definitions related to parsing the Guacamole protocol
     parser.hProvides functions and structures for parsing the Guacamole protocol
     plugin-constants.hConstants related to client plugins
     plugin.hProvides functions and structures required for handling a client plugin
     pool-types.hType definitions related to the guac_pool pool of unique integers
     pool.hProvides functions and structures for maintaining dynamically allocated and freed pools of integers
     protocol-constants.hConstants related to the Guacamole protocol
     protocol-types.hType definitions related to the Guacamole protocol
     protocol.hProvides functions and structures required for communicating using the Guacamole protocol over a guac_socket connection, such as that provided by guac_client objects
     recording.hProvides functions and structures to be use for session recording
     rwlock.h
     socket-constants.hConstants related to the guac_socket object
     socket-fntypes.hFunction type definitions related to the guac_socket object
     socket-ssl.hProvides an SSL/TLS implementation of guac_socket
     socket-types.hType definitions related to the guac_socket object
     socket-wsa.hProvides an implementation of guac_socket specific to the Windows Socket API (aka WSA or "winsock")
     socket.hDefines the guac_socket object and functions for using and manipulating it
     stream-types.hType definitions related to Guacamole protocol streams
     stream.hProvides functions and structures required for allocating and using streams
     string.hProvides convenience functions for manipulating strings
     timestamp-types.hType definitions related to Guacamole protocol timestamps
     timestamp.hProvides functions and structures for creating timestamps
     unicode.hProvides functions for manipulating Unicode strings
     user-constants.hConstants related to the Guacamole user structure, guac_user
     user-fntypes.hFunction type definitions related to the guac_user object
     user-types.hType definitions related to the guac_user object
     user.hDefines the guac_user object, which represents a physical connection within a larger, possibly shared, logical connection represented by a guac_client
     wol-constants.hHeader file that provides constants and defaults related to libguac Wake-on-LAN support
     wol.hHeader that provides functions and structures related to Wake-on-LAN support in libguac
    +
    +
    + + + + diff --git a/doc/1.5.5/libguac/fips_8h_source.html b/doc/1.5.5/libguac/fips_8h_source.html new file mode 100644 index 000000000..b58c22bee --- /dev/null +++ b/doc/1.5.5/libguac/fips_8h_source.html @@ -0,0 +1,117 @@ + + + + + + + +libguac: guacamole/fips.h Source File + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    fips.h
    +
    +
    +
    1/*
    +
    2 * Licensed to the Apache Software Foundation (ASF) under one
    +
    3 * or more contributor license agreements. See the NOTICE file
    +
    4 * distributed with this work for additional information
    +
    5 * regarding copyright ownership. The ASF licenses this file
    +
    6 * to you under the Apache License, Version 2.0 (the
    +
    7 * "License"); you may not use this file except in compliance
    +
    8 * with the License. You may obtain a copy of the License at
    +
    9 *
    +
    10 * http://www.apache.org/licenses/LICENSE-2.0
    +
    11 *
    +
    12 * Unless required by applicable law or agreed to in writing,
    +
    13 * software distributed under the License is distributed on an
    +
    14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    15 * KIND, either express or implied. See the License for the
    +
    16 * specific language governing permissions and limitations
    +
    17 * under the License.
    +
    18 */
    +
    19
    +
    20#ifndef GUAC_FIPS_H
    +
    21#define GUAC_FIPS_H
    +
    22
    +
    31int guac_fips_enabled();
    +
    32
    +
    33#endif
    +
    + + + + diff --git a/doc/1.5.5/libguac/folderclosed.svg b/doc/1.5.5/libguac/folderclosed.svg new file mode 100644 index 000000000..b04bed2e7 --- /dev/null +++ b/doc/1.5.5/libguac/folderclosed.svg @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/doc/1.5.5/libguac/folderclosedd.svg b/doc/1.5.5/libguac/folderclosedd.svg new file mode 100644 index 000000000..52f0166a2 --- /dev/null +++ b/doc/1.5.5/libguac/folderclosedd.svg @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/doc/1.5.5/libguac/folderopen.svg b/doc/1.5.5/libguac/folderopen.svg new file mode 100644 index 000000000..f6896dd25 --- /dev/null +++ b/doc/1.5.5/libguac/folderopen.svg @@ -0,0 +1,17 @@ + + + + + + + + + + diff --git a/doc/1.5.5/libguac/folderopend.svg b/doc/1.5.5/libguac/folderopend.svg new file mode 100644 index 000000000..2d1f06e7b --- /dev/null +++ b/doc/1.5.5/libguac/folderopend.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/doc/1.5.5/libguac/functions.html b/doc/1.5.5/libguac/functions.html new file mode 100644 index 000000000..c079f423b --- /dev/null +++ b/doc/1.5.5/libguac/functions.html @@ -0,0 +1,239 @@ + + + + + + + +libguac: Data Fields + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:
    + +

    - a -

    + + +

    - b -

    + + +

    - c -

    + + +

    - d -

    + + +

    - e -

    + + +

    - f -

    + + +

    - g -

    + + +

    - i -

    + + +

    - j -

    + + +

    - k -

    + + +

    - l -

    + + +

    - m -

    + + +

    - n -

    + + +

    - o -

    + + +

    - p -

    + + +

    - r -

    + + +

    - s -

    + + +

    - t -

    + + +

    - u -

    + + +

    - v -

    + + +

    - w -

    +
    + + + + diff --git a/doc/1.5.5/libguac/functions_vars.html b/doc/1.5.5/libguac/functions_vars.html new file mode 100644 index 000000000..c326e52ed --- /dev/null +++ b/doc/1.5.5/libguac/functions_vars.html @@ -0,0 +1,239 @@ + + + + + + + +libguac: Data Fields - Variables + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Here is a list of all documented variables with links to the struct/union documentation for each field:
    + +

    - a -

    + + +

    - b -

    + + +

    - c -

    + + +

    - d -

    + + +

    - e -

    + + +

    - f -

    + + +

    - g -

    + + +

    - i -

    + + +

    - j -

    + + +

    - k -

    + + +

    - l -

    + + +

    - m -

    + + +

    - n -

    + + +

    - o -

    + + +

    - p -

    + + +

    - r -

    + + +

    - s -

    + + +

    - t -

    + + +

    - u -

    + + +

    - v -

    + + +

    - w -

    +
    + + + + diff --git a/doc/1.5.5/libguac/globals.html b/doc/1.5.5/libguac/globals.html new file mode 100644 index 000000000..de772ee37 --- /dev/null +++ b/doc/1.5.5/libguac/globals.html @@ -0,0 +1,101 @@ + + + + + + + +libguac: Globals + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
    + +

    - a -

    +
    + + + + diff --git a/doc/1.5.5/libguac/globals_c.html b/doc/1.5.5/libguac/globals_c.html new file mode 100644 index 000000000..c159d3b0c --- /dev/null +++ b/doc/1.5.5/libguac/globals_c.html @@ -0,0 +1,123 @@ + + + + + + + +libguac: Globals + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
    + +

    - c -

    +
    + + + + diff --git a/doc/1.5.5/libguac/globals_defs.html b/doc/1.5.5/libguac/globals_defs.html new file mode 100644 index 000000000..134178995 --- /dev/null +++ b/doc/1.5.5/libguac/globals_defs.html @@ -0,0 +1,146 @@ + + + + + + + +libguac: Globals + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Here is a list of all documented macros with links to the documentation:
    + +

    - e -

    + + +

    - g -

    + + +

    - m -

      +
    • guac_mem_alloc : mem.h
    • +
    • guac_mem_ckd_add : mem.h
    • +
    • guac_mem_ckd_add_or_die : mem.h
    • +
    • guac_mem_ckd_mul : mem.h
    • +
    • guac_mem_ckd_mul_or_die : mem.h
    • +
    • guac_mem_ckd_sub : mem.h
    • +
    • guac_mem_ckd_sub_or_die : mem.h
    • +
    • guac_mem_free : mem.h
    • +
    • guac_mem_free_const : mem.h
    • +
    • guac_mem_realloc : mem.h
    • +
    • guac_mem_realloc_or_die : mem.h
    • +
    • guac_mem_zalloc : mem.h
    • +
    +
    + + + + diff --git a/doc/1.5.5/libguac/globals_e.html b/doc/1.5.5/libguac/globals_e.html new file mode 100644 index 000000000..75a6cc588 --- /dev/null +++ b/doc/1.5.5/libguac/globals_e.html @@ -0,0 +1,86 @@ + + + + + + + +libguac: Globals + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
    + +

    - e -

    +
    + + + + diff --git a/doc/1.5.5/libguac/globals_enum.html b/doc/1.5.5/libguac/globals_enum.html new file mode 100644 index 000000000..0c58a9060 --- /dev/null +++ b/doc/1.5.5/libguac/globals_enum.html @@ -0,0 +1,94 @@ + + + + + + + +libguac: Globals + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Here is a list of all documented enums with links to the documentation:
    +
    + + + + diff --git a/doc/1.5.5/libguac/globals_eval.html b/doc/1.5.5/libguac/globals_eval.html new file mode 100644 index 000000000..a2239ee17 --- /dev/null +++ b/doc/1.5.5/libguac/globals_eval.html @@ -0,0 +1,150 @@ + + + + + + + +libguac: Globals + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Here is a list of all documented enum values with links to the documentation:
    + +

    - g -

    +
    + + + + diff --git a/doc/1.5.5/libguac/globals_func.html b/doc/1.5.5/libguac/globals_func.html new file mode 100644 index 000000000..1d84ec90b --- /dev/null +++ b/doc/1.5.5/libguac/globals_func.html @@ -0,0 +1,292 @@ + + + + + + + +libguac: Globals + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Here is a list of all documented functions with links to the documentation:
    + +

    - a -

      +
    • guac_argv_await() : argv.h
    • +
    • guac_argv_received() : argv.h
    • +
    • guac_argv_register() : argv.h
    • +
    • guac_argv_stop() : argv.h
    • +
    • guac_audio_stream_add_user() : audio.h
    • +
    • guac_audio_stream_alloc() : audio.h
    • +
    • guac_audio_stream_flush() : audio.h
    • +
    • guac_audio_stream_free() : audio.h
    • +
    • guac_audio_stream_reset() : audio.h
    • +
    • guac_audio_stream_write_pcm() : audio.h
    • +
    + + +

    - c -

      +
    • guac_client_abort() : client.h
    • +
    • guac_client_add_user() : client.h
    • +
    • guac_client_alloc() : client.h
    • +
    • guac_client_alloc_buffer() : client.h
    • +
    • guac_client_alloc_layer() : client.h
    • +
    • guac_client_alloc_stream() : client.h
    • +
    • guac_client_end_frame() : client.h
    • +
    • guac_client_for_owner() : client.h
    • +
    • guac_client_for_user() : client.h
    • +
    • guac_client_foreach_pending_user() : client.h
    • +
    • guac_client_foreach_user() : client.h
    • +
    • guac_client_free() : client.h
    • +
    • guac_client_free_buffer() : client.h
    • +
    • guac_client_free_layer() : client.h
    • +
    • guac_client_free_stream() : client.h
    • +
    • guac_client_get_processing_lag() : client.h
    • +
    • guac_client_load_plugin() : client.h
    • +
    • guac_client_log() : client.h
    • +
    • guac_client_owner_notify_join() : client.h
    • +
    • guac_client_owner_notify_leave() : client.h
    • +
    • guac_client_owner_send_required() : client.h
    • +
    • guac_client_owner_supports_msg() : client.h
    • +
    • guac_client_owner_supports_required() : client.h
    • +
    • guac_client_remove_user() : client.h
    • +
    • guac_client_stop() : client.h
    • +
    • guac_client_stream_argv() : client.h
    • +
    • guac_client_stream_jpeg() : client.h
    • +
    • guac_client_stream_png() : client.h
    • +
    • guac_client_stream_webp() : client.h
    • +
    • guac_client_supports_webp() : client.h
    • +
    • vguac_client_abort() : client.h
    • +
    • vguac_client_log() : client.h
    • +
    + + +

    - h -

      +
    • guac_hash_surface() : hash.h
    • +
    + + +

    - p -

    + + +

    - r -

    + + +

    - s -

    + + +

    - t -

    + + +

    - u -

      +
    • guac_user_abort() : user.h
    • +
    • guac_user_alloc() : user.h
    • +
    • guac_user_alloc_object() : user.h
    • +
    • guac_user_alloc_stream() : user.h
    • +
    • guac_user_free() : user.h
    • +
    • guac_user_free_object() : user.h
    • +
    • guac_user_free_stream() : user.h
    • +
    • guac_user_handle_connection() : user.h
    • +
    • guac_user_handle_instruction() : user.h
    • +
    • guac_user_log() : user.h
    • +
    • guac_user_parse_args_boolean() : user.h
    • +
    • guac_user_parse_args_int() : user.h
    • +
    • guac_user_parse_args_string() : user.h
    • +
    • guac_user_stop() : user.h
    • +
    • guac_user_stream_argv() : user.h
    • +
    • guac_user_stream_jpeg() : user.h
    • +
    • guac_user_stream_png() : user.h
    • +
    • guac_user_stream_webp() : user.h
    • +
    • guac_user_supports_msg() : user.h
    • +
    • guac_user_supports_required() : user.h
    • +
    • guac_user_supports_webp() : user.h
    • +
    • guac_utf8_charsize() : unicode.h
    • +
    • guac_utf8_read() : unicode.h
    • +
    • guac_utf8_strlen() : unicode.h
    • +
    • guac_utf8_write() : unicode.h
    • +
    • vguac_user_abort() : user.h
    • +
    • vguac_user_log() : user.h
    • +
    + + +

    - w -

      +
    • guac_wol_wake() : wol.h
    • +
    +
    + + + + diff --git a/doc/1.5.5/libguac/globals_g.html b/doc/1.5.5/libguac/globals_g.html new file mode 100644 index 000000000..74e0f49b9 --- /dev/null +++ b/doc/1.5.5/libguac/globals_g.html @@ -0,0 +1,191 @@ + + + + + + + +libguac: Globals + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
    + +

    - g -

    +
    + + + + diff --git a/doc/1.5.5/libguac/globals_h.html b/doc/1.5.5/libguac/globals_h.html new file mode 100644 index 000000000..6a440729e --- /dev/null +++ b/doc/1.5.5/libguac/globals_h.html @@ -0,0 +1,85 @@ + + + + + + + +libguac: Globals + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
    + +

    - h -

      +
    • guac_hash_surface() : hash.h
    • +
    +
    + + + + diff --git a/doc/1.5.5/libguac/globals_l.html b/doc/1.5.5/libguac/globals_l.html new file mode 100644 index 000000000..ff26cc65a --- /dev/null +++ b/doc/1.5.5/libguac/globals_l.html @@ -0,0 +1,86 @@ + + + + + + + +libguac: Globals + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
    + +

    - l -

    +
    + + + + diff --git a/doc/1.5.5/libguac/globals_m.html b/doc/1.5.5/libguac/globals_m.html new file mode 100644 index 000000000..6427730e1 --- /dev/null +++ b/doc/1.5.5/libguac/globals_m.html @@ -0,0 +1,97 @@ + + + + + + + +libguac: Globals + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
    + +

    - m -

      +
    • guac_mem_alloc : mem.h
    • +
    • guac_mem_ckd_add : mem.h
    • +
    • guac_mem_ckd_add_or_die : mem.h
    • +
    • guac_mem_ckd_mul : mem.h
    • +
    • guac_mem_ckd_mul_or_die : mem.h
    • +
    • guac_mem_ckd_sub : mem.h
    • +
    • guac_mem_ckd_sub_or_die : mem.h
    • +
    • guac_mem_free : mem.h
    • +
    • guac_mem_free_const : mem.h
    • +
    • guac_mem_realloc : mem.h
    • +
    • guac_mem_realloc_or_die : mem.h
    • +
    • guac_mem_zalloc : mem.h
    • +
    • guac_message_type : protocol-types.h
    • +
    +
    + + + + diff --git a/doc/1.5.5/libguac/globals_p.html b/doc/1.5.5/libguac/globals_p.html new file mode 100644 index 000000000..8987c3cfa --- /dev/null +++ b/doc/1.5.5/libguac/globals_p.html @@ -0,0 +1,158 @@ + + + + + + + +libguac: Globals + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
    + +

    - p -

    +
    + + + + diff --git a/doc/1.5.5/libguac/globals_r.html b/doc/1.5.5/libguac/globals_r.html new file mode 100644 index 000000000..ba359dcef --- /dev/null +++ b/doc/1.5.5/libguac/globals_r.html @@ -0,0 +1,89 @@ + + + + + + + +libguac: Globals + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
    + +

    - r -

    +
    + + + + diff --git a/doc/1.5.5/libguac/globals_s.html b/doc/1.5.5/libguac/globals_s.html new file mode 100644 index 000000000..ed129a0f3 --- /dev/null +++ b/doc/1.5.5/libguac/globals_s.html @@ -0,0 +1,120 @@ + + + + + + + +libguac: Globals + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
    + +

    - s -

    +
    + + + + diff --git a/doc/1.5.5/libguac/globals_t.html b/doc/1.5.5/libguac/globals_t.html new file mode 100644 index 000000000..0db9a264e --- /dev/null +++ b/doc/1.5.5/libguac/globals_t.html @@ -0,0 +1,88 @@ + + + + + + + +libguac: Globals + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
    + +

    - t -

    +
    + + + + diff --git a/doc/1.5.5/libguac/globals_type.html b/doc/1.5.5/libguac/globals_type.html new file mode 100644 index 000000000..7c54f1c38 --- /dev/null +++ b/doc/1.5.5/libguac/globals_type.html @@ -0,0 +1,136 @@ + + + + + + + +libguac: Globals + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Here is a list of all documented typedefs with links to the documentation:
    + +

    - a -

    + + +

    - c -

    + + +

    - s -

    + + +

    - t -

    + + +

    - u -

    +
    + + + + diff --git a/doc/1.5.5/libguac/globals_u.html b/doc/1.5.5/libguac/globals_u.html new file mode 100644 index 000000000..909640927 --- /dev/null +++ b/doc/1.5.5/libguac/globals_u.html @@ -0,0 +1,129 @@ + + + + + + + +libguac: Globals + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
    + +

    - u -

    +
    + + + + diff --git a/doc/1.5.5/libguac/globals_vars.html b/doc/1.5.5/libguac/globals_vars.html new file mode 100644 index 000000000..6815c2daf --- /dev/null +++ b/doc/1.5.5/libguac/globals_vars.html @@ -0,0 +1,84 @@ + + + + + + + +libguac: Globals + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Here is a list of all documented variables with links to the documentation:
    +
    + + + + diff --git a/doc/1.5.5/libguac/globals_w.html b/doc/1.5.5/libguac/globals_w.html new file mode 100644 index 000000000..8dc9f93f2 --- /dev/null +++ b/doc/1.5.5/libguac/globals_w.html @@ -0,0 +1,85 @@ + + + + + + + +libguac: Globals + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
    + +

    - w -

      +
    • guac_wol_wake() : wol.h
    • +
    +
    + + + + diff --git a/doc/1.5.5/libguac/hash_8h.html b/doc/1.5.5/libguac/hash_8h.html new file mode 100644 index 000000000..e40c7d838 --- /dev/null +++ b/doc/1.5.5/libguac/hash_8h.html @@ -0,0 +1,165 @@ + + + + + + + +libguac: guacamole/hash.h File Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    hash.h File Reference
    +
    +
    + +

    Provides functions and structures for producing likely-to-be-unique hash values for images. +More...

    + +

    Go to the source code of this file.

    + + + + + + + + +

    +Functions

    unsigned int guac_hash_surface (cairo_surface_t *surface)
     Produces a 24-bit hash value from all pixels of the given surface.
     
    int guac_surface_cmp (cairo_surface_t *a, cairo_surface_t *b)
     Given two Cairo surfaces, returns zero if the data contained within each is identical, and a positive or negative value if the value of the first is found to be lexically greater or less than the second respectively.
     
    +

    Detailed Description

    +

    Provides functions and structures for producing likely-to-be-unique hash values for images.

    +

    Function Documentation

    + +

    ◆ guac_hash_surface()

    + +
    +
    + + + + + + + +
    unsigned int guac_hash_surface (cairo_surface_t * surface)
    +
    + +

    Produces a 24-bit hash value from all pixels of the given surface.

    +

    The surface provided must be RGB or ARGB with each pixel stored in 32 bits. The hashing algorithm used is a variant of the cyclic polynomial rolling hash.

    +
    Parameters
    + + +
    surfaceThe Cairo surface to hash.
    +
    +
    +
    Returns
    An arbitrary 24-bit unsigned integer value intended to be well distributed across different images.
    + +
    +
    + +

    ◆ guac_surface_cmp()

    + +
    +
    + + + + + + + + + + + +
    int guac_surface_cmp (cairo_surface_t * a,
    cairo_surface_t * b )
    +
    + +

    Given two Cairo surfaces, returns zero if the data contained within each is identical, and a positive or negative value if the value of the first is found to be lexically greater or less than the second respectively.

    +
    Parameters
    + + + +
    aThe first Cairo surface to compare.
    bThe Cairo surface to compare the first surface against.
    +
    +
    +
    Returns
    Zero if the data contained within each is identical, and a positive or negative value if the value of the first is found to be lexically greater or less than the second respectively.
    + +
    +
    +
    + + + + diff --git a/doc/1.5.5/libguac/hash_8h_source.html b/doc/1.5.5/libguac/hash_8h_source.html new file mode 100644 index 000000000..769c289fa --- /dev/null +++ b/doc/1.5.5/libguac/hash_8h_source.html @@ -0,0 +1,124 @@ + + + + + + + +libguac: guacamole/hash.h Source File + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    hash.h
    +
    +
    +Go to the documentation of this file.
    1/*
    +
    2 * Licensed to the Apache Software Foundation (ASF) under one
    +
    3 * or more contributor license agreements. See the NOTICE file
    +
    4 * distributed with this work for additional information
    +
    5 * regarding copyright ownership. The ASF licenses this file
    +
    6 * to you under the Apache License, Version 2.0 (the
    +
    7 * "License"); you may not use this file except in compliance
    +
    8 * with the License. You may obtain a copy of the License at
    +
    9 *
    +
    10 * http://www.apache.org/licenses/LICENSE-2.0
    +
    11 *
    +
    12 * Unless required by applicable law or agreed to in writing,
    +
    13 * software distributed under the License is distributed on an
    +
    14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    15 * KIND, either express or implied. See the License for the
    +
    16 * specific language governing permissions and limitations
    +
    17 * under the License.
    +
    18 */
    +
    19
    +
    20#ifndef _GUAC_HASH_H
    +
    21#define _GUAC_HASH_H
    +
    22
    +
    30#include <cairo/cairo.h>
    +
    31
    +
    42unsigned int guac_hash_surface(cairo_surface_t* surface);
    +
    43
    +
    55int guac_surface_cmp(cairo_surface_t* a, cairo_surface_t* b);
    +
    56
    +
    57#endif
    +
    58
    +
    int guac_surface_cmp(cairo_surface_t *a, cairo_surface_t *b)
    Given two Cairo surfaces, returns zero if the data contained within each is identical,...
    +
    unsigned int guac_hash_surface(cairo_surface_t *surface)
    Produces a 24-bit hash value from all pixels of the given surface.
    +
    + + + + diff --git a/doc/1.5.5/libguac/index.html b/doc/1.5.5/libguac/index.html new file mode 100644 index 000000000..b834712ad --- /dev/null +++ b/doc/1.5.5/libguac/index.html @@ -0,0 +1,84 @@ + + + + + + + +libguac: Main Page + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    libguac Documentation
    +
    +
    + +
    + + + + diff --git a/doc/1.5.5/libguac/jquery.js b/doc/1.5.5/libguac/jquery.js new file mode 100644 index 000000000..1dffb65b5 --- /dev/null +++ b/doc/1.5.5/libguac/jquery.js @@ -0,0 +1,34 @@ +/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
    ",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0",options:{classes:{},disabled:!1,create:null},_createWidget:function(t,e){e=y(e||this.defaultElement||this)[0],this.element=y(e),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=y(),this.hoverable=y(),this.focusable=y(),this.classesElementLookup={},e!==this&&(y.data(e,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===e&&this.destroy()}}),this.document=y(e.style?e.ownerDocument:e.document||e),this.window=y(this.document[0].defaultView||this.document[0].parentWindow)),this.options=y.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:y.noop,_create:y.noop,_init:y.noop,destroy:function(){var i=this;this._destroy(),y.each(this.classesElementLookup,function(t,e){i._removeClass(e,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:y.noop,widget:function(){return this.element},option:function(t,e){var i,s,n,o=t;if(0===arguments.length)return y.widget.extend({},this.options);if("string"==typeof t)if(o={},t=(i=t.split(".")).shift(),i.length){for(s=o[t]=y.widget.extend({},this.options[t]),n=0;n
    "),i=e.children()[0];return y("body").append(e),t=i.offsetWidth,e.css("overflow","scroll"),t===(i=i.offsetWidth)&&(i=e[0].clientWidth),e.remove(),s=t-i},getScrollInfo:function(t){var e=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),i=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),e="scroll"===e||"auto"===e&&t.widthx(D(s),D(n))?o.important="horizontal":o.important="vertical",p.using.call(this,t,o)}),h.offset(y.extend(l,{using:t}))})},y.ui.position={fit:{left:function(t,e){var i=e.within,s=i.isWindow?i.scrollLeft:i.offset.left,n=i.width,o=t.left-e.collisionPosition.marginLeft,h=s-o,a=o+e.collisionWidth-n-s;e.collisionWidth>n?0n?0=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),y.ui.plugin={add:function(t,e,i){var s,n=y.ui[t].prototype;for(s in i)n.plugins[s]=n.plugins[s]||[],n.plugins[s].push([e,i[s]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;n").css({overflow:"hidden",position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,t={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(t),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(t),this._proportionallyResize()),this._setupHandles(),e.autoHide&&y(this.element).on("mouseenter",function(){e.disabled||(i._removeClass("ui-resizable-autohide"),i._handles.show())}).on("mouseleave",function(){e.disabled||i.resizing||(i._addClass("ui-resizable-autohide"),i._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy(),this._addedHandles.remove();function t(t){y(t).removeData("resizable").removeData("ui-resizable").off(".resizable")}var e;return this.elementIsWrapper&&(t(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),t(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;case"aspectRatio":this._aspectRatio=!!e}},_setupHandles:function(){var t,e,i,s,n,o=this.options,h=this;if(this.handles=o.handles||(y(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=y(),this._addedHandles=y(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),i=this.handles.split(","),this.handles={},e=0;e"),this._addClass(n,"ui-resizable-handle "+s),n.css({zIndex:o.zIndex}),this.handles[t]=".ui-resizable-"+t,this.element.children(this.handles[t]).length||(this.element.append(n),this._addedHandles=this._addedHandles.add(n));this._renderAxis=function(t){var e,i,s;for(e in t=t||this.element,this.handles)this.handles[e].constructor===String?this.handles[e]=this.element.children(this.handles[e]).first().show():(this.handles[e].jquery||this.handles[e].nodeType)&&(this.handles[e]=y(this.handles[e]),this._on(this.handles[e],{mousedown:h._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(i=y(this.handles[e],this.element),s=/sw|ne|nw|se|n|s/.test(e)?i.outerHeight():i.outerWidth(),i=["padding",/ne|nw|n/.test(e)?"Top":/se|sw|s/.test(e)?"Bottom":/^e$/.test(e)?"Right":"Left"].join(""),t.css(i,s),this._proportionallyResize()),this._handles=this._handles.add(this.handles[e])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){h.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),h.axis=n&&n[1]?n[1]:"se")}),o.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._addedHandles.remove()},_mouseCapture:function(t){var e,i,s=!1;for(e in this.handles)(i=y(this.handles[e])[0])!==t.target&&!y.contains(i,t.target)||(s=!0);return!this.options.disabled&&s},_mouseStart:function(t){var e,i,s=this.options,n=this.element;return this.resizing=!0,this._renderProxy(),e=this._num(this.helper.css("left")),i=this._num(this.helper.css("top")),s.containment&&(e+=y(s.containment).scrollLeft()||0,i+=y(s.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:e,top:i},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:n.width(),height:n.height()},this.originalSize=this._helper?{width:n.outerWidth(),height:n.outerHeight()}:{width:n.width(),height:n.height()},this.sizeDiff={width:n.outerWidth()-n.width(),height:n.outerHeight()-n.height()},this.originalPosition={left:e,top:i},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio="number"==typeof s.aspectRatio?s.aspectRatio:this.originalSize.width/this.originalSize.height||1,s=y(".ui-resizable-"+this.axis).css("cursor"),y("body").css("cursor","auto"===s?this.axis+"-resize":s),this._addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var e=this.originalMousePosition,i=this.axis,s=t.pageX-e.left||0,e=t.pageY-e.top||0,i=this._change[i];return this._updatePrevProperties(),i&&(e=i.apply(this,[t,s,e]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(e=this._updateRatio(e,t)),e=this._respectSize(e,t),this._updateCache(e),this._propagate("resize",t),e=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),y.isEmptyObject(e)||(this._updatePrevProperties(),this._trigger("resize",t,this.ui()),this._applyChanges())),!1},_mouseStop:function(t){this.resizing=!1;var e,i,s,n=this.options,o=this;return this._helper&&(s=(e=(i=this._proportionallyResizeElements).length&&/textarea/i.test(i[0].nodeName))&&this._hasScroll(i[0],"left")?0:o.sizeDiff.height,i=e?0:o.sizeDiff.width,e={width:o.helper.width()-i,height:o.helper.height()-s},i=parseFloat(o.element.css("left"))+(o.position.left-o.originalPosition.left)||null,s=parseFloat(o.element.css("top"))+(o.position.top-o.originalPosition.top)||null,n.animate||this.element.css(y.extend(e,{top:s,left:i})),o.helper.height(o.size.height),o.helper.width(o.size.width),this._helper&&!n.animate&&this._proportionallyResize()),y("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s=this.options,n={minWidth:this._isNumber(s.minWidth)?s.minWidth:0,maxWidth:this._isNumber(s.maxWidth)?s.maxWidth:1/0,minHeight:this._isNumber(s.minHeight)?s.minHeight:0,maxHeight:this._isNumber(s.maxHeight)?s.maxHeight:1/0};(this._aspectRatio||t)&&(e=n.minHeight*this.aspectRatio,i=n.minWidth/this.aspectRatio,s=n.maxHeight*this.aspectRatio,t=n.maxWidth/this.aspectRatio,e>n.minWidth&&(n.minWidth=e),i>n.minHeight&&(n.minHeight=i),st.width,h=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,a=this.originalPosition.left+this.originalSize.width,r=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),i=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),h&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=a-e.minWidth),s&&l&&(t.left=a-e.maxWidth),h&&i&&(t.top=r-e.minHeight),n&&i&&(t.top=r-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];e<4;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;e").css({overflow:"hidden"}),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++e.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize;return{left:this.originalPosition.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize;return{top:this.originalPosition.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},sw:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,e,i]))},ne:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},nw:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,e,i]))}},_propagate:function(t,e){y.ui.plugin.call(this,t,[e,this.ui()]),"resize"!==t&&this._trigger(t,e,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),y.ui.plugin.add("resizable","animate",{stop:function(e){var i=y(this).resizable("instance"),t=i.options,s=i._proportionallyResizeElements,n=s.length&&/textarea/i.test(s[0].nodeName),o=n&&i._hasScroll(s[0],"left")?0:i.sizeDiff.height,h=n?0:i.sizeDiff.width,n={width:i.size.width-h,height:i.size.height-o},h=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,o=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(y.extend(n,o&&h?{top:o,left:h}:{}),{duration:t.animateDuration,easing:t.animateEasing,step:function(){var t={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};s&&s.length&&y(s[0]).css({width:t.width,height:t.height}),i._updateCache(t),i._propagate("resize",e)}})}}),y.ui.plugin.add("resizable","containment",{start:function(){var i,s,n=y(this).resizable("instance"),t=n.options,e=n.element,o=t.containment,h=o instanceof y?o.get(0):/parent/.test(o)?e.parent().get(0):o;h&&(n.containerElement=y(h),/document/.test(o)||o===document?(n.containerOffset={left:0,top:0},n.containerPosition={left:0,top:0},n.parentData={element:y(document),left:0,top:0,width:y(document).width(),height:y(document).height()||document.body.parentNode.scrollHeight}):(i=y(h),s=[],y(["Top","Right","Left","Bottom"]).each(function(t,e){s[t]=n._num(i.css("padding"+e))}),n.containerOffset=i.offset(),n.containerPosition=i.position(),n.containerSize={height:i.innerHeight()-s[3],width:i.innerWidth()-s[1]},t=n.containerOffset,e=n.containerSize.height,o=n.containerSize.width,o=n._hasScroll(h,"left")?h.scrollWidth:o,e=n._hasScroll(h)?h.scrollHeight:e,n.parentData={element:h,left:t.left,top:t.top,width:o,height:e}))},resize:function(t){var e=y(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.position,o=e._aspectRatio||t.shiftKey,h={top:0,left:0},a=e.containerElement,t=!0;a[0]!==document&&/static/.test(a.css("position"))&&(h=s),n.left<(e._helper?s.left:0)&&(e.size.width=e.size.width+(e._helper?e.position.left-s.left:e.position.left-h.left),o&&(e.size.height=e.size.width/e.aspectRatio,t=!1),e.position.left=i.helper?s.left:0),n.top<(e._helper?s.top:0)&&(e.size.height=e.size.height+(e._helper?e.position.top-s.top:e.position.top),o&&(e.size.width=e.size.height*e.aspectRatio,t=!1),e.position.top=e._helper?s.top:0),i=e.containerElement.get(0)===e.element.parent().get(0),n=/relative|absolute/.test(e.containerElement.css("position")),i&&n?(e.offset.left=e.parentData.left+e.position.left,e.offset.top=e.parentData.top+e.position.top):(e.offset.left=e.element.offset().left,e.offset.top=e.element.offset().top),n=Math.abs(e.sizeDiff.width+(e._helper?e.offset.left-h.left:e.offset.left-s.left)),s=Math.abs(e.sizeDiff.height+(e._helper?e.offset.top-h.top:e.offset.top-s.top)),n+e.size.width>=e.parentData.width&&(e.size.width=e.parentData.width-n,o&&(e.size.height=e.size.width/e.aspectRatio,t=!1)),s+e.size.height>=e.parentData.height&&(e.size.height=e.parentData.height-s,o&&(e.size.width=e.size.height*e.aspectRatio,t=!1)),t||(e.position.left=e.prevPosition.left,e.position.top=e.prevPosition.top,e.size.width=e.prevSize.width,e.size.height=e.prevSize.height)},stop:function(){var t=y(this).resizable("instance"),e=t.options,i=t.containerOffset,s=t.containerPosition,n=t.containerElement,o=y(t.helper),h=o.offset(),a=o.outerWidth()-t.sizeDiff.width,o=o.outerHeight()-t.sizeDiff.height;t._helper&&!e.animate&&/relative/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o}),t._helper&&!e.animate&&/static/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o})}}),y.ui.plugin.add("resizable","alsoResize",{start:function(){var t=y(this).resizable("instance").options;y(t.alsoResize).each(function(){var t=y(this);t.data("ui-resizable-alsoresize",{width:parseFloat(t.width()),height:parseFloat(t.height()),left:parseFloat(t.css("left")),top:parseFloat(t.css("top"))})})},resize:function(t,i){var e=y(this).resizable("instance"),s=e.options,n=e.originalSize,o=e.originalPosition,h={height:e.size.height-n.height||0,width:e.size.width-n.width||0,top:e.position.top-o.top||0,left:e.position.left-o.left||0};y(s.alsoResize).each(function(){var t=y(this),s=y(this).data("ui-resizable-alsoresize"),n={},e=t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];y.each(e,function(t,e){var i=(s[e]||0)+(h[e]||0);i&&0<=i&&(n[e]=i||null)}),t.css(n)})},stop:function(){y(this).removeData("ui-resizable-alsoresize")}}),y.ui.plugin.add("resizable","ghost",{start:function(){var t=y(this).resizable("instance"),e=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}),t._addClass(t.ghost,"ui-resizable-ghost"),!1!==y.uiBackCompat&&"string"==typeof t.options.ghost&&t.ghost.addClass(this.options.ghost),t.ghost.appendTo(t.helper)},resize:function(){var t=y(this).resizable("instance");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=y(this).resizable("instance");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),y.ui.plugin.add("resizable","grid",{resize:function(){var t,e=y(this).resizable("instance"),i=e.options,s=e.size,n=e.originalSize,o=e.originalPosition,h=e.axis,a="number"==typeof i.grid?[i.grid,i.grid]:i.grid,r=a[0]||1,l=a[1]||1,u=Math.round((s.width-n.width)/r)*r,p=Math.round((s.height-n.height)/l)*l,d=n.width+u,c=n.height+p,f=i.maxWidth&&i.maxWidthd,s=i.minHeight&&i.minHeight>c;i.grid=a,m&&(d+=r),s&&(c+=l),f&&(d-=r),g&&(c-=l),/^(se|s|e)$/.test(h)?(e.size.width=d,e.size.height=c):/^(ne)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.top=o.top-p):/^(sw)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.left=o.left-u):((c-l<=0||d-r<=0)&&(t=e._getPaddingPlusBorderDimensions(this)),0=f[g]?0:Math.min(f[g],n));!a&&1-1){targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if(session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)}closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if(session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE,function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList,finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight()));return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")}function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(),elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight,viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.topviewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.leftviewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery);/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017 + * http://www.smartmenus.org/ + * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)),mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend($.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy(this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData("smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('
    ').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?(this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for(var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if((!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&(this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass("highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]")||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('')[0],$('')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"),a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i,downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2))&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0),canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}},rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})}return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1,bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$}); \ No newline at end of file diff --git a/doc/1.5.5/libguac/layer-types_8h.html b/doc/1.5.5/libguac/layer-types_8h.html new file mode 100644 index 000000000..c9a909795 --- /dev/null +++ b/doc/1.5.5/libguac/layer-types_8h.html @@ -0,0 +1,94 @@ + + + + + + + +libguac: guacamole/layer-types.h File Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    layer-types.h File Reference
    +
    +
    + +

    Type definitions related to Guacamole layers. +More...

    + +

    Go to the source code of this file.

    +

    Detailed Description

    +

    Type definitions related to Guacamole layers.

    +
    + + + + diff --git a/doc/1.5.5/libguac/layer-types_8h_source.html b/doc/1.5.5/libguac/layer-types_8h_source.html new file mode 100644 index 000000000..e8832f1a1 --- /dev/null +++ b/doc/1.5.5/libguac/layer-types_8h_source.html @@ -0,0 +1,119 @@ + + + + + + + +libguac: guacamole/layer-types.h Source File + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    layer-types.h
    +
    +
    +Go to the documentation of this file.
    1/*
    +
    2 * Licensed to the Apache Software Foundation (ASF) under one
    +
    3 * or more contributor license agreements. See the NOTICE file
    +
    4 * distributed with this work for additional information
    +
    5 * regarding copyright ownership. The ASF licenses this file
    +
    6 * to you under the Apache License, Version 2.0 (the
    +
    7 * "License"); you may not use this file except in compliance
    +
    8 * with the License. You may obtain a copy of the License at
    +
    9 *
    +
    10 * http://www.apache.org/licenses/LICENSE-2.0
    +
    11 *
    +
    12 * Unless required by applicable law or agreed to in writing,
    +
    13 * software distributed under the License is distributed on an
    +
    14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    15 * KIND, either express or implied. See the License for the
    +
    16 * specific language governing permissions and limitations
    +
    17 * under the License.
    +
    18 */
    +
    19
    +
    20#ifndef _GUAC_LAYER_TYPES_H
    +
    21#define _GUAC_LAYER_TYPES_H
    +
    22
    +
    32typedef struct guac_layer guac_layer;
    +
    33
    +
    34#endif
    +
    35
    +
    Represents a single layer within the Guacamole protocol.
    Definition layer.h:34
    +
    + + + + diff --git a/doc/1.5.5/libguac/layer_8h.html b/doc/1.5.5/libguac/layer_8h.html new file mode 100644 index 000000000..0c4bdae6c --- /dev/null +++ b/doc/1.5.5/libguac/layer_8h.html @@ -0,0 +1,103 @@ + + + + + + + +libguac: guacamole/layer.h File Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    layer.h File Reference
    +
    +
    + +

    Provides functions and structures required for allocating and using layers. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Data Structures

    struct  guac_layer
     Represents a single layer within the Guacamole protocol. More...
     
    +

    Detailed Description

    +

    Provides functions and structures required for allocating and using layers.

    +
    + + + + diff --git a/doc/1.5.5/libguac/layer_8h_source.html b/doc/1.5.5/libguac/layer_8h_source.html new file mode 100644 index 000000000..fca0673e0 --- /dev/null +++ b/doc/1.5.5/libguac/layer_8h_source.html @@ -0,0 +1,129 @@ + + + + + + + +libguac: guacamole/layer.h Source File + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    layer.h
    +
    +
    +Go to the documentation of this file.
    1/*
    +
    2 * Licensed to the Apache Software Foundation (ASF) under one
    +
    3 * or more contributor license agreements. See the NOTICE file
    +
    4 * distributed with this work for additional information
    +
    5 * regarding copyright ownership. The ASF licenses this file
    +
    6 * to you under the Apache License, Version 2.0 (the
    +
    7 * "License"); you may not use this file except in compliance
    +
    8 * with the License. You may obtain a copy of the License at
    +
    9 *
    +
    10 * http://www.apache.org/licenses/LICENSE-2.0
    +
    11 *
    +
    12 * Unless required by applicable law or agreed to in writing,
    +
    13 * software distributed under the License is distributed on an
    +
    14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    15 * KIND, either express or implied. See the License for the
    +
    16 * specific language governing permissions and limitations
    +
    17 * under the License.
    +
    18 */
    +
    19
    +
    20#ifndef _GUAC_LAYER_H
    +
    21#define _GUAC_LAYER_H
    +
    22
    +
    29#include "layer-types.h"
    +
    30
    +
    +
    34struct guac_layer {
    +
    35
    +
    39 int index;
    +
    40
    +
    41};
    +
    +
    42
    +
    43#endif
    +
    44
    +
    Type definitions related to Guacamole layers.
    +
    Represents a single layer within the Guacamole protocol.
    Definition layer.h:34
    +
    int index
    The index of this layer.
    Definition layer.h:39
    +
    + + + + diff --git a/doc/1.5.5/libguac/mem_8h.html b/doc/1.5.5/libguac/mem_8h.html new file mode 100644 index 000000000..4ea3a9005 --- /dev/null +++ b/doc/1.5.5/libguac/mem_8h.html @@ -0,0 +1,569 @@ + + + + + + + +libguac: guacamole/mem.h File Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    mem.h File Reference
    +
    +
    + +

    Provides convenience macros/functions for performing arithmetic on size_t values and for allocating memory, particularly memory related to images, audio, etc. +More...

    + +

    Go to the source code of this file.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Macros

    #define guac_mem_alloc(...)
     Allocates a contiguous block of memory with the specified size, returning a pointer to the first byte of that block of memory.
     
    #define guac_mem_zalloc(...)
     Allocates a contiguous block of memory with the specified size and with all bytes initialized to zero, returning a pointer to the first byte of that block of memory.
     
    #define guac_mem_ckd_mul(result, ...)
     Multiplies together each of the given values, storing the result in a size_t variable via the provided pointer.
     
    #define guac_mem_ckd_add(result, ...)
     Adds together each of the given values, storing the result in a size_t variable via the provided pointer.
     
    #define guac_mem_ckd_sub(result, ...)
     Subtracts each of the given values from each other, storing the result in a size_t variable via the provided pointer.
     
    #define guac_mem_ckd_mul_or_die(...)
     Multiplies together each of the given values, returning the result directly.
     
    #define guac_mem_ckd_add_or_die(...)
     Adds together each of the given values, returning the result directly.
     
    #define guac_mem_ckd_sub_or_die(...)
     Subtracts each of the given values from each other, returning the result directly.
     
    #define guac_mem_realloc(mem, ...)
     Reallocates a contiguous block of memory that was previously allocated with guac_mem_alloc(), guac_mem_zalloc(), guac_mem_realloc(), or one of their *_or_die() variants, returning a pointer to the first byte of that reallocated block of memory.
     
    #define guac_mem_realloc_or_die(mem, ...)
     Reallocates a contiguous block of memory that was previously allocated with guac_mem_alloc(), guac_mem_zalloc(), guac_mem_realloc(), or one of their *_or_die() variants, returning a pointer to the first byte of that reallocated block of memory.
     
    #define guac_mem_free(mem)   (PRIV_guac_mem_free(mem), (mem) = NULL, (void) 0)
     Frees the memory block at the given pointer, which MUST have been allocated with guac_mem_alloc(), guac_mem_zalloc(), guac_mem_realloc(), or one of their *_or_die() variants.
     
    #define guac_mem_free_const(mem)   PRIV_guac_mem_free((void*) (mem))
     Frees the memory block at the given const pointer, which MUST have been allocated with guac_mem_alloc(), guac_mem_zalloc(), guac_mem_realloc(), or one of their *_or_die() variants.
     
    +

    Detailed Description

    +

    Provides convenience macros/functions for performing arithmetic on size_t values and for allocating memory, particularly memory related to images, audio, etc.

    +

    where there are multiple factors affecting the final size.

    +

    Macro Definition Documentation

    + +

    ◆ guac_mem_alloc

    + +
    +
    + + + + + + + +
    #define guac_mem_alloc( ...)
    +
    +Value:
    PRIV_guac_mem_alloc( \
    +
    sizeof((const size_t[]) { __VA_ARGS__ }) / sizeof(const size_t), \
    +
    (const size_t[]) { __VA_ARGS__ } \
    +
    )
    +
    +

    Allocates a contiguous block of memory with the specified size, returning a pointer to the first byte of that block of memory.

    +

    If multiple sizes are provided, these sizes are multiplied together to produce the final size of the new block. If memory of the specified size cannot be allocated, or if multiplying the sizes would result in integer overflow, guac_error is set appropriately and NULL is returned.

    +

    This macro is analogous to the standard malloc(), but accepts a list of size factors instead of a single integer size.

    +

    The pointer returned by guac_mem_alloc() SHOULD be freed with a subsequent call to guac_mem_free(), but MAY instead be freed with a subsequent call to free().

    +
    Parameters
    + + +
    ...A series of one or more size_t values that should be multiplied together to produce the desired block size. At least one value MUST be provided.
    +
    +
    +
    Returns
    A pointer to the first byte of the allocated block of memory, or NULL if such a block could not be allocated. If a block of memory could not be allocated, guac_error is set appropriately.
    + +
    +
    + +

    ◆ guac_mem_ckd_add

    + +
    +
    + + + + + + + + + + + +
    #define guac_mem_ckd_add( result,
    ... )
    +
    +Value:
    PRIV_guac_mem_ckd_add( \
    +
    result, \
    +
    sizeof((const size_t[]) { __VA_ARGS__ }) / sizeof(const size_t), \
    +
    (const size_t[]) { __VA_ARGS__ } \
    +
    )
    +
    +

    Adds together each of the given values, storing the result in a size_t variable via the provided pointer.

    +

    If the result of the addition overflows the limits of a size_t, non-zero is returned to signal failure.

    +

    If the addition operation fails, the nature of any result stored in the provided pointer is undefined, as is whether a result is stored at all.

    +

    For example, the following:

    size_t some_result;
    +
    int failed = guac_mem_ckd_add(&some_result, a, b, c);
    +
    #define guac_mem_ckd_add(result,...)
    Adds together each of the given values, storing the result in a size_t variable via the provided poin...
    Definition mem.h:164
    +

    is equivalent in principle to:

    size_t some_result = a + b + c;
    +

    except that it is possible for interested callers to handle overflow.

    +
    Parameters
    + + + +
    resultA pointer to the size_t variable that should receive the result of adding the given values.
    ...The size_t values that should be added together.
    +
    +
    +
    Returns
    Zero if the addition was successful and did not overflow the limits of a size_t, non-zero otherwise.
    + +
    +
    + +

    ◆ guac_mem_ckd_add_or_die

    + +
    +
    + + + + + + + +
    #define guac_mem_ckd_add_or_die( ...)
    +
    +Value:
    PRIV_guac_mem_ckd_add_or_die( \
    +
    sizeof((const size_t[]) { __VA_ARGS__ }) / sizeof(const size_t), \
    +
    (const size_t[]) { __VA_ARGS__ } \
    +
    )
    +
    +

    Adds together each of the given values, returning the result directly.

    +

    If the result of the addition overflows the limits of a size_t, execution of the current process is aborted entirely, and this function does not return.

    +

    For example, the following:

    size_t some_result = guac_mem_ckd_add_or_die(a, b, c);
    +
    #define guac_mem_ckd_add_or_die(...)
    Adds together each of the given values, returning the result directly.
    Definition mem.h:270
    +

    is equivalent in principle to:

    size_t some_result = a + b + c;
    +

    except that an overflow condition will result in the process immediately terminating.

    +
    Parameters
    + + +
    ...The size_t values that should be added together.
    +
    +
    +
    Returns
    The result of the addition. If the addition operation would overflow the limits of a size_t, execution of the current process is aborted, and this function does not return.
    + +
    +
    + +

    ◆ guac_mem_ckd_mul

    + +
    +
    + + + + + + + + + + + +
    #define guac_mem_ckd_mul( result,
    ... )
    +
    +Value:
    PRIV_guac_mem_ckd_mul( \
    +
    result, \
    +
    sizeof((const size_t[]) { __VA_ARGS__ }) / sizeof(const size_t), \
    +
    (const size_t[]) { __VA_ARGS__ } \
    +
    )
    +
    +

    Multiplies together each of the given values, storing the result in a size_t variable via the provided pointer.

    +

    If the result of the multiplication overflows the limits of a size_t, non-zero is returned to signal failure.

    +

    If the multiplication operation fails, the nature of any result stored in the provided pointer is undefined, as is whether a result is stored at all.

    +

    For example, the following:

    size_t some_result;
    +
    int failed = guac_mem_ckd_mul(&some_result, a, b, c);
    +
    #define guac_mem_ckd_mul(result,...)
    Multiplies together each of the given values, storing the result in a size_t variable via the provide...
    Definition mem.h:125
    +

    is equivalent in principle to:

    size_t some_result = a * b * c;
    +

    except that it is possible for interested callers to handle overflow.

    +
    Parameters
    + + + +
    resultA pointer to the size_t variable that should receive the result of multiplying the given values.
    ...The size_t values that should be multiplied together.
    +
    +
    +
    Returns
    Zero if the multiplication was successful and did not overflow the limits of a size_t, non-zero otherwise.
    + +
    +
    + +

    ◆ guac_mem_ckd_mul_or_die

    + +
    +
    + + + + + + + +
    #define guac_mem_ckd_mul_or_die( ...)
    +
    +Value:
    PRIV_guac_mem_ckd_mul_or_die( \
    +
    sizeof((const size_t[]) { __VA_ARGS__ }) / sizeof(const size_t), \
    +
    (const size_t[]) { __VA_ARGS__ } \
    +
    )
    +
    +

    Multiplies together each of the given values, returning the result directly.

    +

    If the result of the multiplication overflows the limits of a size_t, execution of the current process is aborted entirely, and this function does not return.

    +

    For example, the following:

    size_t some_result = guac_mem_ckd_mul_or_die(a, b, c);
    +
    #define guac_mem_ckd_mul_or_die(...)
    Multiplies together each of the given values, returning the result directly.
    Definition mem.h:238
    +

    is equivalent in principle to:

    size_t some_result = a * b * c;
    +

    except that an overflow condition will result in the process immediately terminating.

    +
    Parameters
    + + +
    ...The size_t values that should be multiplied together.
    +
    +
    +
    Returns
    The result of the multiplication. If the multiplication operation would overflow the limits of a size_t, execution of the current process is aborted, and this function does not return.
    + +
    +
    + +

    ◆ guac_mem_ckd_sub

    + +
    +
    + + + + + + + + + + + +
    #define guac_mem_ckd_sub( result,
    ... )
    +
    +Value:
    PRIV_guac_mem_ckd_sub( \
    +
    result, \
    +
    sizeof((const size_t[]) { __VA_ARGS__ }) / sizeof(const size_t), \
    +
    (const size_t[]) { __VA_ARGS__ } \
    +
    )
    +
    +

    Subtracts each of the given values from each other, storing the result in a size_t variable via the provided pointer.

    +

    If the result of the subtraction overflows the limits of a size_t (goes below zero), non-zero is returned to signal failure.

    +

    If the subtraction operation fails, the nature of any result stored in the provided pointer is undefined, as is whether a result is stored at all.

    +

    For example, the following:

    size_t some_result;
    +
    int failed = guac_mem_ckd_sub(&some_result, a, b, c);
    +
    #define guac_mem_ckd_sub(result,...)
    Subtracts each of the given values from each other, storing the result in a size_t variable via the p...
    Definition mem.h:204
    +

    is equivalent in principle to:

    size_t some_result = a - b - c;
    +

    except that it is possible for interested callers to handle overflow.

    +
    Parameters
    + + + +
    resultA pointer to the size_t variable that should receive the result of subtracting the given values from each other.
    ...The size_t values that should be subtracted from each other.
    +
    +
    +
    Returns
    Zero if the subtraction was successful and did not overflow the limits of a size_t (did not go below zero), non-zero otherwise.
    + +
    +
    + +

    ◆ guac_mem_ckd_sub_or_die

    + +
    +
    + + + + + + + +
    #define guac_mem_ckd_sub_or_die( ...)
    +
    +Value:
    PRIV_guac_mem_ckd_sub_or_die( \
    +
    sizeof((const size_t[]) { __VA_ARGS__ }) / sizeof(const size_t), \
    +
    (const size_t[]) { __VA_ARGS__ } \
    +
    )
    +
    +

    Subtracts each of the given values from each other, returning the result directly.

    +

    If the result of the subtraction overflows the limits of a size_t (goes below zero), execution of the current process is aborted entirely, and this function does not return.

    +

    For example, the following:

    size_t some_result = guac_mem_ckd_sub_or_die(a, b, c);
    +
    #define guac_mem_ckd_sub_or_die(...)
    Subtracts each of the given values from each other, returning the result directly.
    Definition mem.h:303
    +

    is equivalent in principle to:

    size_t some_result = a - b - c;
    +

    except that an overflow condition will result in the process immediately terminating.

    +
    Parameters
    + + +
    ...The size_t values that should be subtracted from each other.
    +
    +
    +
    Returns
    The result of the subtraction. If the subtraction operation would overflow the limits of a size_t (go below zero), execution of the current process is aborted, and this function does not return.
    + +
    +
    + +

    ◆ guac_mem_free

    + +
    +
    + + + + + + + +
    #define guac_mem_free( mem)   (PRIV_guac_mem_free(mem), (mem) = NULL, (void) 0)
    +
    + +

    Frees the memory block at the given pointer, which MUST have been allocated with guac_mem_alloc(), guac_mem_zalloc(), guac_mem_realloc(), or one of their *_or_die() variants.

    +

    The pointer is automatically assigned a value of NULL after memory is freed. If the provided pointer is already NULL, this macro has no effect.

    +
    Parameters
    + + +
    memA pointer to the memory to be freed.
    +
    +
    + +
    +
    + +

    ◆ guac_mem_free_const

    + +
    +
    + + + + + + + +
    #define guac_mem_free_const( mem)   PRIV_guac_mem_free((void*) (mem))
    +
    + +

    Frees the memory block at the given const pointer, which MUST have been allocated with guac_mem_alloc(), guac_mem_zalloc(), guac_mem_realloc(), or one of their *_or_die() variants.

    +

    As the pointer is presumed constant, it is not automatically assigned a value of NULL after memory is freed. If the provided pointer is NULL, this macro has no effect.

    +

    The guac_mem_free() macro should be used in favor of this macro. This macro should only be used in cases where a constant pointer is absolutely necessary.

    +
    Parameters
    + + +
    memA pointer to the memory to be freed.
    +
    +
    + +
    +
    + +

    ◆ guac_mem_realloc

    + +
    +
    + + + + + + + + + + + +
    #define guac_mem_realloc( mem,
    ... )
    +
    +Value:
    PRIV_guac_mem_realloc( \
    +
    mem, \
    +
    sizeof((const size_t[]) { __VA_ARGS__ }) / sizeof(const size_t), \
    +
    (const size_t[]) { __VA_ARGS__ } \
    +
    )
    +
    +

    Reallocates a contiguous block of memory that was previously allocated with guac_mem_alloc(), guac_mem_zalloc(), guac_mem_realloc(), or one of their *_or_die() variants, returning a pointer to the first byte of that reallocated block of memory.

    +

    If multiple sizes are provided, these sizes are multiplied together to produce the final size of the new block. If memory of the specified size cannot be allocated, or if multiplying the sizes would result in integer overflow, guac_error is set appropriately, the original block of memory is left untouched, and NULL is returned.

    +

    This macro is analogous to the standard realloc(), but accepts a list of size factors instead of a requiring exactly one integer size.

    +

    The returned pointer may be the same as the original pointer, but this is not guaranteed. If the returned pointer is different, the original pointer is automatically freed.

    +

    The pointer returned by guac_mem_realloc() SHOULD be freed with a subsequent call to guac_mem_free(), but MAY instead be freed with a subsequent call to free().

    +
    Parameters
    + + +
    ...A series of one or more size_t values that should be multiplied together to produce the desired block size. At least one value MUST be provided.
    +
    +
    +
    Returns
    A pointer to the first byte of the reallocated block of memory, or NULL if such a block could not be allocated. If a block of memory could not be allocated, guac_error is set appropriately and the original block of memory is left untouched.
    + +
    +
    + +

    ◆ guac_mem_realloc_or_die

    + +
    +
    + + + + + + + + + + + +
    #define guac_mem_realloc_or_die( mem,
    ... )
    +
    +Value:
    PRIV_guac_mem_realloc_or_die( \
    +
    mem, \
    +
    sizeof((const size_t[]) { __VA_ARGS__ }) / sizeof(const size_t), \
    +
    (const size_t[]) { __VA_ARGS__ } \
    +
    )
    +
    +

    Reallocates a contiguous block of memory that was previously allocated with guac_mem_alloc(), guac_mem_zalloc(), guac_mem_realloc(), or one of their *_or_die() variants, returning a pointer to the first byte of that reallocated block of memory.

    +

    If multiple sizes are provided, these sizes are multiplied together to produce the final size of the new block. If memory of the specified size cannot be allocated, execution of the current process is aborted entirely, and this function does not return.

    +

    This macro is analogous to the standard realloc(), but accepts a list of size factors instead of a requiring exactly one integer size and does not return in the event a block cannot be allocated.

    +

    The returned pointer may be the same as the original pointer, but this is not guaranteed. If the returned pointer is different, the original pointer is automatically freed.

    +

    The pointer returned by guac_mem_realloc() SHOULD be freed with a subsequent call to guac_mem_free(), but MAY instead be freed with a subsequent call to free().

    +
    Parameters
    + + +
    ...A series of one or more size_t values that should be multiplied together to produce the desired block size. At least one value MUST be provided.
    +
    +
    +
    Returns
    A pointer to the first byte of the reallocated block of memory. If a block of memory could not be allocated, execution of the current process is aborted, and this function does not return.
    + +
    +
    + +

    ◆ guac_mem_zalloc

    + +
    +
    + + + + + + + +
    #define guac_mem_zalloc( ...)
    +
    +Value:
    PRIV_guac_mem_zalloc( \
    +
    sizeof((const size_t[]) { __VA_ARGS__ }) / sizeof(const size_t), \
    +
    (const size_t[]) { __VA_ARGS__ } \
    +
    )
    +
    +

    Allocates a contiguous block of memory with the specified size and with all bytes initialized to zero, returning a pointer to the first byte of that block of memory.

    +

    If multiple sizes are provided, these sizes are multiplied together to produce the final size of the new block. If memory of the specified size cannot be allocated, or if multiplying the sizes would result in integer overflow, guac_error is set appropriately and NULL is returned.

    +

    This macro is analogous to the standard calloc(), but accepts a list of size factors instead of a requiring exactly two integer sizes.

    +

    The pointer returned by guac_mem_zalloc() SHOULD be freed with a subsequent call to guac_mem_free(), but MAY instead be freed with a subsequent call to free().

    +
    Parameters
    + + +
    ...A series of one or more size_t values that should be multiplied together to produce the desired block size. At least one value MUST be provided.
    +
    +
    +
    Returns
    A pointer to the first byte of the allocated block of memory, or NULL if such a block could not be allocated. If a block of memory could not be allocated, guac_error is set appropriately.
    + +
    +
    +
    + + + + diff --git a/doc/1.5.5/libguac/mem_8h_source.html b/doc/1.5.5/libguac/mem_8h_source.html new file mode 100644 index 000000000..6bfe838ce --- /dev/null +++ b/doc/1.5.5/libguac/mem_8h_source.html @@ -0,0 +1,209 @@ + + + + + + + +libguac: guacamole/mem.h Source File + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    mem.h
    +
    +
    +Go to the documentation of this file.
    1/*
    +
    2 * Licensed to the Apache Software Foundation (ASF) under one
    +
    3 * or more contributor license agreements. See the NOTICE file
    +
    4 * distributed with this work for additional information
    +
    5 * regarding copyright ownership. The ASF licenses this file
    +
    6 * to you under the Apache License, Version 2.0 (the
    +
    7 * "License"); you may not use this file except in compliance
    +
    8 * with the License. You may obtain a copy of the License at
    +
    9 *
    +
    10 * http://www.apache.org/licenses/LICENSE-2.0
    +
    11 *
    +
    12 * Unless required by applicable law or agreed to in writing,
    +
    13 * software distributed under the License is distributed on an
    +
    14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    15 * KIND, either express or implied. See the License for the
    +
    16 * specific language governing permissions and limitations
    +
    17 * under the License.
    +
    18 */
    +
    19
    +
    20#ifndef GUAC_MEM_H
    +
    21#define GUAC_MEM_H
    +
    22
    +
    31#include "private/mem.h"
    +
    32
    +
    33#include <stddef.h>
    +
    34
    +
    +
    58#define guac_mem_alloc(...) \
    +
    59 PRIV_guac_mem_alloc( \
    +
    60 sizeof((const size_t[]) { __VA_ARGS__ }) / sizeof(const size_t), \
    +
    61 (const size_t[]) { __VA_ARGS__ } \
    +
    62 )
    +
    +
    63
    +
    +
    87#define guac_mem_zalloc(...) \
    +
    88 PRIV_guac_mem_zalloc( \
    +
    89 sizeof((const size_t[]) { __VA_ARGS__ }) / sizeof(const size_t), \
    +
    90 (const size_t[]) { __VA_ARGS__ } \
    +
    91 )
    +
    +
    92
    +
    +
    125#define guac_mem_ckd_mul(result, ...) \
    +
    126 PRIV_guac_mem_ckd_mul( \
    +
    127 result, \
    +
    128 sizeof((const size_t[]) { __VA_ARGS__ }) / sizeof(const size_t), \
    +
    129 (const size_t[]) { __VA_ARGS__ } \
    +
    130 )
    +
    +
    131
    +
    +
    164#define guac_mem_ckd_add(result, ...) \
    +
    165 PRIV_guac_mem_ckd_add( \
    +
    166 result, \
    +
    167 sizeof((const size_t[]) { __VA_ARGS__ }) / sizeof(const size_t), \
    +
    168 (const size_t[]) { __VA_ARGS__ } \
    +
    169 )
    +
    +
    170
    +
    +
    204#define guac_mem_ckd_sub(result, ...) \
    +
    205 PRIV_guac_mem_ckd_sub( \
    +
    206 result, \
    +
    207 sizeof((const size_t[]) { __VA_ARGS__ }) / sizeof(const size_t), \
    +
    208 (const size_t[]) { __VA_ARGS__ } \
    +
    209 )
    +
    +
    210
    +
    +
    238#define guac_mem_ckd_mul_or_die(...) \
    +
    239 PRIV_guac_mem_ckd_mul_or_die( \
    +
    240 sizeof((const size_t[]) { __VA_ARGS__ }) / sizeof(const size_t), \
    +
    241 (const size_t[]) { __VA_ARGS__ } \
    +
    242 )
    +
    +
    243
    +
    +
    270#define guac_mem_ckd_add_or_die(...) \
    +
    271 PRIV_guac_mem_ckd_add_or_die( \
    +
    272 sizeof((const size_t[]) { __VA_ARGS__ }) / sizeof(const size_t), \
    +
    273 (const size_t[]) { __VA_ARGS__ } \
    +
    274 )
    +
    +
    275
    +
    +
    303#define guac_mem_ckd_sub_or_die(...) \
    +
    304 PRIV_guac_mem_ckd_sub_or_die( \
    +
    305 sizeof((const size_t[]) { __VA_ARGS__ }) / sizeof(const size_t), \
    +
    306 (const size_t[]) { __VA_ARGS__ } \
    +
    307 )
    +
    +
    308
    +
    +
    340#define guac_mem_realloc(mem, ...) \
    +
    341 PRIV_guac_mem_realloc( \
    +
    342 mem, \
    +
    343 sizeof((const size_t[]) { __VA_ARGS__ }) / sizeof(const size_t), \
    +
    344 (const size_t[]) { __VA_ARGS__ } \
    +
    345 )
    +
    +
    346
    +
    +
    377#define guac_mem_realloc_or_die(mem, ...) \
    +
    378 PRIV_guac_mem_realloc_or_die( \
    +
    379 mem, \
    +
    380 sizeof((const size_t[]) { __VA_ARGS__ }) / sizeof(const size_t), \
    +
    381 (const size_t[]) { __VA_ARGS__ } \
    +
    382 )
    +
    +
    383
    +
    394#define guac_mem_free(mem) (PRIV_guac_mem_free(mem), (mem) = NULL, (void) 0)
    +
    395
    +
    410#define guac_mem_free_const(mem) PRIV_guac_mem_free((void*) (mem))
    +
    411
    +
    412#endif
    +
    413
    +
    + + + + diff --git a/doc/1.5.5/libguac/menu.js b/doc/1.5.5/libguac/menu.js new file mode 100644 index 000000000..717761d01 --- /dev/null +++ b/doc/1.5.5/libguac/menu.js @@ -0,0 +1,134 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { + function makeTree(data,relPath) { + let result=''; + if ('children' in data) { + result+='
      '; + for (let i in data.children) { + let url; + const link = data.children[i].url; + if (link.substring(0,1)=='^') { + url = link.substring(1); + } else { + url = relPath+link; + } + result+='
    • '+ + data.children[i].text+''+ + makeTree(data.children[i],relPath)+'
    • '; + } + result+='
    '; + } + return result; + } + let searchBoxHtml; + if (searchEnabled) { + if (serverSide) { + searchBoxHtml='
    '+ + '
    '+ + '
     '+ + ''+ + '
    '+ + '
    '+ + '
    '+ + '
    '; + } else { + searchBoxHtml='
    '+ + ''+ + ' '+ + ''+ + ''+ + ''+ + ''+ + ''+ + '
    '; + } + } + + $('#main-nav').before('
    '+ + ''+ + ''+ + '
    '); + $('#main-nav').append(makeTree(menudata,relPath)); + $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); + if (searchBoxHtml) { + $('#main-menu').append('
  • '); + } + const $mainMenuState = $('#main-menu-state'); + let prevWidth = 0; + if ($mainMenuState.length) { + const initResizableIfExists = function() { + if (typeof initResizable==='function') initResizable(); + } + // animate mobile menu + $mainMenuState.change(function() { + const $menu = $('#main-menu'); + let options = { duration: 250, step: initResizableIfExists }; + if (this.checked) { + options['complete'] = () => $menu.css('display', 'block'); + $menu.hide().slideDown(options); + } else { + options['complete'] = () => $menu.css('display', 'none'); + $menu.show().slideUp(options); + } + }); + // set default menu visibility + const resetState = function() { + const $menu = $('#main-menu'); + const newWidth = $(window).outerWidth(); + if (newWidth!=prevWidth) { + if ($(window).outerWidth()<768) { + $mainMenuState.prop('checked',false); $menu.hide(); + $('#searchBoxPos1').html(searchBoxHtml); + $('#searchBoxPos2').hide(); + } else { + $menu.show(); + $('#searchBoxPos1').empty(); + $('#searchBoxPos2').html(searchBoxHtml); + $('#searchBoxPos2').show(); + } + if (typeof searchBox!=='undefined') { + searchBox.CloseResultsWindow(); + } + prevWidth = newWidth; + } + } + $(window).ready(function() { resetState(); initResizableIfExists(); }); + $(window).resize(resetState); + } + $('#main-menu').smartmenus(); +} +/* @license-end */ diff --git a/doc/1.5.5/libguac/menudata.js b/doc/1.5.5/libguac/menudata.js new file mode 100644 index 000000000..2edef0424 --- /dev/null +++ b/doc/1.5.5/libguac/menudata.js @@ -0,0 +1,116 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file +*/ +var menudata={children:[ +{text:"Main Page",url:"index.html"}, +{text:"Related Pages",url:"pages.html"}, +{text:"Data Structures",url:"annotated.html",children:[ +{text:"Data Structures",url:"annotated.html"}, +{text:"Data Structure Index",url:"classes.html"}, +{text:"Data Fields",url:"functions.html",children:[ +{text:"All",url:"functions.html",children:[ +{text:"a",url:"functions.html#index_a"}, +{text:"b",url:"functions.html#index_b"}, +{text:"c",url:"functions.html#index_c"}, +{text:"d",url:"functions.html#index_d"}, +{text:"e",url:"functions.html#index_e"}, +{text:"f",url:"functions.html#index_f"}, +{text:"g",url:"functions.html#index_g"}, +{text:"i",url:"functions.html#index_i"}, +{text:"j",url:"functions.html#index_j"}, +{text:"k",url:"functions.html#index_k"}, +{text:"l",url:"functions.html#index_l"}, +{text:"m",url:"functions.html#index_m"}, +{text:"n",url:"functions.html#index_n"}, +{text:"o",url:"functions.html#index_o"}, +{text:"p",url:"functions.html#index_p"}, +{text:"r",url:"functions.html#index_r"}, +{text:"s",url:"functions.html#index_s"}, +{text:"t",url:"functions.html#index_t"}, +{text:"u",url:"functions.html#index_u"}, +{text:"v",url:"functions.html#index_v"}, +{text:"w",url:"functions.html#index_w"}]}, +{text:"Variables",url:"functions_vars.html",children:[ +{text:"a",url:"functions_vars.html#index_a"}, +{text:"b",url:"functions_vars.html#index_b"}, +{text:"c",url:"functions_vars.html#index_c"}, +{text:"d",url:"functions_vars.html#index_d"}, +{text:"e",url:"functions_vars.html#index_e"}, +{text:"f",url:"functions_vars.html#index_f"}, +{text:"g",url:"functions_vars.html#index_g"}, +{text:"i",url:"functions_vars.html#index_i"}, +{text:"j",url:"functions_vars.html#index_j"}, +{text:"k",url:"functions_vars.html#index_k"}, +{text:"l",url:"functions_vars.html#index_l"}, +{text:"m",url:"functions_vars.html#index_m"}, +{text:"n",url:"functions_vars.html#index_n"}, +{text:"o",url:"functions_vars.html#index_o"}, +{text:"p",url:"functions_vars.html#index_p"}, +{text:"r",url:"functions_vars.html#index_r"}, +{text:"s",url:"functions_vars.html#index_s"}, +{text:"t",url:"functions_vars.html#index_t"}, +{text:"u",url:"functions_vars.html#index_u"}, +{text:"v",url:"functions_vars.html#index_v"}, +{text:"w",url:"functions_vars.html#index_w"}]}]}]}, +{text:"Files",url:"files.html",children:[ +{text:"File List",url:"files.html"}, +{text:"Globals",url:"globals.html",children:[ +{text:"All",url:"globals.html",children:[ +{text:"a",url:"globals.html#index_a"}, +{text:"c",url:"globals_c.html#index_c"}, +{text:"e",url:"globals_e.html#index_e"}, +{text:"g",url:"globals_g.html#index_g"}, +{text:"h",url:"globals_h.html#index_h"}, +{text:"l",url:"globals_l.html#index_l"}, +{text:"m",url:"globals_m.html#index_m"}, +{text:"p",url:"globals_p.html#index_p"}, +{text:"r",url:"globals_r.html#index_r"}, +{text:"s",url:"globals_s.html#index_s"}, +{text:"t",url:"globals_t.html#index_t"}, +{text:"u",url:"globals_u.html#index_u"}, +{text:"w",url:"globals_w.html#index_w"}]}, +{text:"Functions",url:"globals_func.html",children:[ +{text:"a",url:"globals_func.html#index_a"}, +{text:"c",url:"globals_func.html#index_c"}, +{text:"h",url:"globals_func.html#index_h"}, +{text:"p",url:"globals_func.html#index_p"}, +{text:"r",url:"globals_func.html#index_r"}, +{text:"s",url:"globals_func.html#index_s"}, +{text:"t",url:"globals_func.html#index_t"}, +{text:"u",url:"globals_func.html#index_u"}, +{text:"w",url:"globals_func.html#index_w"}]}, +{text:"Variables",url:"globals_vars.html"}, +{text:"Typedefs",url:"globals_type.html",children:[ +{text:"a",url:"globals_type.html#index_a"}, +{text:"c",url:"globals_type.html#index_c"}, +{text:"s",url:"globals_type.html#index_s"}, +{text:"t",url:"globals_type.html#index_t"}, +{text:"u",url:"globals_type.html#index_u"}]}, +{text:"Enumerations",url:"globals_enum.html"}, +{text:"Enumerator",url:"globals_eval.html",children:[ +{text:"g",url:"globals_eval.html#index_g"}]}, +{text:"Macros",url:"globals_defs.html",children:[ +{text:"e",url:"globals_defs.html#index_e"}, +{text:"g",url:"globals_defs.html#index_g"}, +{text:"m",url:"globals_defs.html#index_m"}]}]}]}]} diff --git a/doc/1.5.5/libguac/minus.svg b/doc/1.5.5/libguac/minus.svg new file mode 100644 index 000000000..f70d0c1a1 --- /dev/null +++ b/doc/1.5.5/libguac/minus.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/doc/1.5.5/libguac/minusd.svg b/doc/1.5.5/libguac/minusd.svg new file mode 100644 index 000000000..5f8e87962 --- /dev/null +++ b/doc/1.5.5/libguac/minusd.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/doc/1.5.5/libguac/nav_f.png b/doc/1.5.5/libguac/nav_f.png new file mode 100644 index 0000000000000000000000000000000000000000..72a58a529ed3a9ed6aa0c51a79cf207e026deee2 GIT binary patch literal 153 zcmeAS@N?(olHy`uVBq!ia0vp^j6iI`!2~2XGqLUlQVE_ejv*C{Z|{2ZH7M}7UYxc) zn!W8uqtnIQ>_z8U literal 0 HcmV?d00001 diff --git a/doc/1.5.5/libguac/nav_fd.png b/doc/1.5.5/libguac/nav_fd.png new file mode 100644 index 0000000000000000000000000000000000000000..032fbdd4c54f54fa9a2e6423b94ef4b2ebdfaceb GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^j6iI`!2~2XGqLUlQU#tajv*C{Z|C~*H7f|XvG1G8 zt7aS*L7xwMeS}!z6R#{C5tIw-s~AJ==F^i}x3XyJseHR@yF& zerFf(Zf;Dd{+(0lDIROL@Sj-Ju2JQ8&-n%4%q?>|^bShc&lR?}7HeMo@BDl5N(aHY Uj$gdr1MOz;boFyt=akR{0D!zeaR2}S literal 0 HcmV?d00001 diff --git a/doc/1.5.5/libguac/nav_g.png b/doc/1.5.5/libguac/nav_g.png new file mode 100644 index 0000000000000000000000000000000000000000..2093a237a94f6c83e19ec6e5fd42f7ddabdafa81 GIT binary patch literal 95 zcmeAS@N?(olHy`uVBq!ia0vp^j6lrB!3HFm1ilyoDK$?Q$B+ufw|5PB85lU25BhtE tr?otc=hd~V+ws&_A@j8Fiv!KF$B+ufw|5=67#uj90@pIL wZ=Q8~_Ju`#59=RjDrmm`tMD@M=!-l18IR?&vFVdQ&MBb@0HFXL6W-eg#Jd_@e6*DPn)w;=|1H}Zvm9l6xXXB%>yL=NQU;mg M>FVdQ&MBb@0Bdt1Qvd(} literal 0 HcmV?d00001 diff --git a/doc/1.5.5/libguac/object-types_8h.html b/doc/1.5.5/libguac/object-types_8h.html new file mode 100644 index 000000000..2bab1eefb --- /dev/null +++ b/doc/1.5.5/libguac/object-types_8h.html @@ -0,0 +1,94 @@ + + + + + + + +libguac: guacamole/object-types.h File Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    object-types.h File Reference
    +
    +
    + +

    Type definitions related to Guacamole protocol objects. +More...

    + +

    Go to the source code of this file.

    +

    Detailed Description

    +

    Type definitions related to Guacamole protocol objects.

    +
    + + + + diff --git a/doc/1.5.5/libguac/object-types_8h_source.html b/doc/1.5.5/libguac/object-types_8h_source.html new file mode 100644 index 000000000..1daee01b9 --- /dev/null +++ b/doc/1.5.5/libguac/object-types_8h_source.html @@ -0,0 +1,119 @@ + + + + + + + +libguac: guacamole/object-types.h Source File + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    object-types.h
    +
    +
    +Go to the documentation of this file.
    1/*
    +
    2 * Licensed to the Apache Software Foundation (ASF) under one
    +
    3 * or more contributor license agreements. See the NOTICE file
    +
    4 * distributed with this work for additional information
    +
    5 * regarding copyright ownership. The ASF licenses this file
    +
    6 * to you under the Apache License, Version 2.0 (the
    +
    7 * "License"); you may not use this file except in compliance
    +
    8 * with the License. You may obtain a copy of the License at
    +
    9 *
    +
    10 * http://www.apache.org/licenses/LICENSE-2.0
    +
    11 *
    +
    12 * Unless required by applicable law or agreed to in writing,
    +
    13 * software distributed under the License is distributed on an
    +
    14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    15 * KIND, either express or implied. See the License for the
    +
    16 * specific language governing permissions and limitations
    +
    17 * under the License.
    +
    18 */
    +
    19
    +
    20#ifndef GUAC_OBJECT_TYPES_H
    +
    21#define GUAC_OBJECT_TYPES_H
    +
    22
    +
    32typedef struct guac_object guac_object;
    +
    33
    +
    34#endif
    +
    35
    +
    Represents a single object within the Guacamole protocol.
    Definition object.h:32
    +
    + + + + diff --git a/doc/1.5.5/libguac/object_8h.html b/doc/1.5.5/libguac/object_8h.html new file mode 100644 index 000000000..f3c58feeb --- /dev/null +++ b/doc/1.5.5/libguac/object_8h.html @@ -0,0 +1,103 @@ + + + + + + + +libguac: guacamole/object.h File Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    object.h File Reference
    +
    +
    + +

    Provides functions and structures required for allocating and using objects. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Data Structures

    struct  guac_object
     Represents a single object within the Guacamole protocol. More...
     
    +

    Detailed Description

    +

    Provides functions and structures required for allocating and using objects.

    +
    + + + + diff --git a/doc/1.5.5/libguac/object_8h_source.html b/doc/1.5.5/libguac/object_8h_source.html new file mode 100644 index 000000000..20e92a6d0 --- /dev/null +++ b/doc/1.5.5/libguac/object_8h_source.html @@ -0,0 +1,142 @@ + + + + + + + +libguac: guacamole/object.h Source File + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    object.h
    +
    +
    +Go to the documentation of this file.
    1/*
    +
    2 * Licensed to the Apache Software Foundation (ASF) under one
    +
    3 * or more contributor license agreements. See the NOTICE file
    +
    4 * distributed with this work for additional information
    +
    5 * regarding copyright ownership. The ASF licenses this file
    +
    6 * to you under the Apache License, Version 2.0 (the
    +
    7 * "License"); you may not use this file except in compliance
    +
    8 * with the License. You may obtain a copy of the License at
    +
    9 *
    +
    10 * http://www.apache.org/licenses/LICENSE-2.0
    +
    11 *
    +
    12 * Unless required by applicable law or agreed to in writing,
    +
    13 * software distributed under the License is distributed on an
    +
    14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    15 * KIND, either express or implied. See the License for the
    +
    16 * specific language governing permissions and limitations
    +
    17 * under the License.
    +
    18 */
    +
    19
    +
    20#ifndef GUAC_OBJECT_H
    +
    21#define GUAC_OBJECT_H
    +
    22
    +
    29#include "object-types.h"
    +
    30#include "user-fntypes.h"
    +
    31
    +
    + +
    33
    +
    37 int index;
    +
    38
    +
    42 void* data;
    +
    43
    + +
    66
    + +
    89
    +
    90};
    +
    +
    91
    +
    92#endif
    +
    93
    +
    Type definitions related to Guacamole protocol objects.
    +
    Represents a single object within the Guacamole protocol.
    Definition object.h:32
    +
    guac_user_get_handler * get_handler
    Handler for get events sent by the Guacamole web-client.
    Definition object.h:65
    +
    guac_user_put_handler * put_handler
    Handler for put events sent by the Guacamole web-client.
    Definition object.h:88
    +
    int index
    The index of this object.
    Definition object.h:37
    +
    void * data
    Arbitrary data associated with this object.
    Definition object.h:42
    +
    Function type definitions related to the guac_user object.
    +
    int guac_user_get_handler(guac_user *user, guac_object *object, char *name)
    Handler for Guacamole object get requests.
    Definition user-fntypes.h:472
    +
    int guac_user_put_handler(guac_user *user, guac_object *object, guac_stream *stream, char *mimetype, char *name)
    Handler for Guacamole object put requests.
    Definition user-fntypes.h:499
    +
    + + + + diff --git a/doc/1.5.5/libguac/open.png b/doc/1.5.5/libguac/open.png new file mode 100644 index 0000000000000000000000000000000000000000..30f75c7efe2dd0c9e956e35b69777a02751f048b GIT binary patch literal 123 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{VPM$7~Ar*{o?;hlAFyLXmaDC0y znK1_#cQqJWPES%4Uujug^TE?jMft$}Eq^WaR~)%f)vSNs&gek&x%A9X9sM + + + + + + +libguac: Related Pages + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Related Pages
    +
    +
    +
    Here is a list of all related documentation pages:
    + + +
     Deprecated List
    +
    +
    + + + + diff --git a/doc/1.5.5/libguac/parser-constants_8h.html b/doc/1.5.5/libguac/parser-constants_8h.html new file mode 100644 index 000000000..55e39079c --- /dev/null +++ b/doc/1.5.5/libguac/parser-constants_8h.html @@ -0,0 +1,112 @@ + + + + + + + +libguac: guacamole/parser-constants.h File Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    parser-constants.h File Reference
    +
    +
    + +

    Constants related to the Guacamole protocol parser. +More...

    + +

    Go to the source code of this file.

    + + + + + + + + + + + +

    +Macros

    +#define GUAC_INSTRUCTION_MAX_LENGTH   8192
     The maximum number of characters per instruction.
     
    +#define GUAC_INSTRUCTION_MAX_DIGITS   5
     The maximum number of digits to allow per length prefix.
     
    +#define GUAC_INSTRUCTION_MAX_ELEMENTS   128
     The maximum number of elements per instruction, including the opcode.
     
    +

    Detailed Description

    +

    Constants related to the Guacamole protocol parser.

    +
    + + + + diff --git a/doc/1.5.5/libguac/parser-constants_8h_source.html b/doc/1.5.5/libguac/parser-constants_8h_source.html new file mode 100644 index 000000000..0f2006139 --- /dev/null +++ b/doc/1.5.5/libguac/parser-constants_8h_source.html @@ -0,0 +1,122 @@ + + + + + + + +libguac: guacamole/parser-constants.h Source File + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    parser-constants.h
    +
    +
    +Go to the documentation of this file.
    1/*
    +
    2 * Licensed to the Apache Software Foundation (ASF) under one
    +
    3 * or more contributor license agreements. See the NOTICE file
    +
    4 * distributed with this work for additional information
    +
    5 * regarding copyright ownership. The ASF licenses this file
    +
    6 * to you under the Apache License, Version 2.0 (the
    +
    7 * "License"); you may not use this file except in compliance
    +
    8 * with the License. You may obtain a copy of the License at
    +
    9 *
    +
    10 * http://www.apache.org/licenses/LICENSE-2.0
    +
    11 *
    +
    12 * Unless required by applicable law or agreed to in writing,
    +
    13 * software distributed under the License is distributed on an
    +
    14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    15 * KIND, either express or implied. See the License for the
    +
    16 * specific language governing permissions and limitations
    +
    17 * under the License.
    +
    18 */
    +
    19
    +
    20#ifndef _GUAC_PARSER_CONSTANTS_H
    +
    21#define _GUAC_PARSER_CONSTANTS_H
    +
    22
    +
    32#define GUAC_INSTRUCTION_MAX_LENGTH 8192
    +
    33
    +
    37#define GUAC_INSTRUCTION_MAX_DIGITS 5
    +
    38
    +
    42#define GUAC_INSTRUCTION_MAX_ELEMENTS 128
    +
    43
    +
    44#endif
    +
    45
    +
    + + + + diff --git a/doc/1.5.5/libguac/parser-types_8h.html b/doc/1.5.5/libguac/parser-types_8h.html new file mode 100644 index 000000000..15d0247b8 --- /dev/null +++ b/doc/1.5.5/libguac/parser-types_8h.html @@ -0,0 +1,134 @@ + + + + + + + +libguac: guacamole/parser-types.h File Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    parser-types.h File Reference
    +
    +
    + +

    Type definitions related to parsing the Guacamole protocol. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Enumerations

    enum  guac_parse_state { GUAC_PARSE_LENGTH +, GUAC_PARSE_CONTENT +, GUAC_PARSE_COMPLETE +, GUAC_PARSE_ERROR + }
     All possible states of the instruction parser. More...
     
    +

    Detailed Description

    +

    Type definitions related to parsing the Guacamole protocol.

    +

    Enumeration Type Documentation

    + +

    ◆ guac_parse_state

    + +
    +
    + + + + +
    enum guac_parse_state
    +
    + +

    All possible states of the instruction parser.

    + + + + + +
    Enumerator
    GUAC_PARSE_LENGTH 

    The parser is currently waiting for data to complete the length prefix of the current element of the instruction.

    +
    GUAC_PARSE_CONTENT 

    The parser has finished reading the length prefix and is currently waiting for data to complete the content of the instruction.

    +
    GUAC_PARSE_COMPLETE 

    The instruction has been fully parsed.

    +
    GUAC_PARSE_ERROR 

    The instruction cannot be parsed because of a protocol error.

    +
    + +
    +
    +
    + + + + diff --git a/doc/1.5.5/libguac/parser-types_8h_source.html b/doc/1.5.5/libguac/parser-types_8h_source.html new file mode 100644 index 000000000..81b848a14 --- /dev/null +++ b/doc/1.5.5/libguac/parser-types_8h_source.html @@ -0,0 +1,138 @@ + + + + + + + +libguac: guacamole/parser-types.h Source File + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    parser-types.h
    +
    +
    +Go to the documentation of this file.
    1/*
    +
    2 * Licensed to the Apache Software Foundation (ASF) under one
    +
    3 * or more contributor license agreements. See the NOTICE file
    +
    4 * distributed with this work for additional information
    +
    5 * regarding copyright ownership. The ASF licenses this file
    +
    6 * to you under the Apache License, Version 2.0 (the
    +
    7 * "License"); you may not use this file except in compliance
    +
    8 * with the License. You may obtain a copy of the License at
    +
    9 *
    +
    10 * http://www.apache.org/licenses/LICENSE-2.0
    +
    11 *
    +
    12 * Unless required by applicable law or agreed to in writing,
    +
    13 * software distributed under the License is distributed on an
    +
    14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    15 * KIND, either express or implied. See the License for the
    +
    16 * specific language governing permissions and limitations
    +
    17 * under the License.
    +
    18 */
    +
    19
    +
    20#ifndef _GUAC_PARSER_TYPES_H
    +
    21#define _GUAC_PARSER_TYPES_H
    +
    22
    + +
    57
    +
    62typedef struct guac_parser guac_parser;
    +
    63
    +
    64#endif
    +
    65
    +
    guac_parse_state
    All possible states of the instruction parser.
    Definition parser-types.h:32
    +
    @ GUAC_PARSE_CONTENT
    The parser has finished reading the length prefix and is currently waiting for data to complete the c...
    Definition parser-types.h:44
    +
    @ GUAC_PARSE_COMPLETE
    The instruction has been fully parsed.
    Definition parser-types.h:49
    +
    @ GUAC_PARSE_ERROR
    The instruction cannot be parsed because of a protocol error.
    Definition parser-types.h:54
    +
    @ GUAC_PARSE_LENGTH
    The parser is currently waiting for data to complete the length prefix of the current element of the ...
    Definition parser-types.h:38
    +
    A Guacamole protocol parser, which reads individual instructions, filling its own internal structure ...
    Definition parser.h:33
    +
    + + + + diff --git a/doc/1.5.5/libguac/parser_8h.html b/doc/1.5.5/libguac/parser_8h.html new file mode 100644 index 000000000..9a0889ef0 --- /dev/null +++ b/doc/1.5.5/libguac/parser_8h.html @@ -0,0 +1,360 @@ + + + + + + + +libguac: guacamole/parser.h File Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    parser.h File Reference
    +
    +
    + +

    Provides functions and structures for parsing the Guacamole protocol. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Data Structures

    struct  guac_parser
     A Guacamole protocol parser, which reads individual instructions, filling its own internal structure with the most recently read instruction data. More...
     
    + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    guac_parserguac_parser_alloc ()
     Allocates a new parser.
     
    int guac_parser_append (guac_parser *parser, void *buffer, int length)
     Appends data from the given buffer to the given parser.
     
    int guac_parser_length (guac_parser *parser)
     Returns the number of unparsed bytes stored in the given parser's internal buffers.
     
    int guac_parser_shift (guac_parser *parser, void *buffer, int length)
     Removes up to length bytes from internal buffer of unparsed bytes, storing them in the given buffer.
     
    void guac_parser_free (guac_parser *parser)
     Frees all memory allocated to the given parser.
     
    int guac_parser_read (guac_parser *parser, guac_socket *socket, int usec_timeout)
     Reads a single instruction from the given guac_socket connection.
     
    int guac_parser_expect (guac_parser *parser, guac_socket *socket, int usec_timeout, const char *opcode)
     Reads a single instruction from the given guac_socket.
     
    +

    Detailed Description

    +

    Provides functions and structures for parsing the Guacamole protocol.

    +

    Function Documentation

    + +

    ◆ guac_parser_alloc()

    + +
    +
    + + + + + + + +
    guac_parser * guac_parser_alloc ()
    +
    + +

    Allocates a new parser.

    +
    Returns
    The newly allocated parser, or NULL if an error occurs during allocation, in which case guac_error will be set appropriately.
    + +
    +
    + +

    ◆ guac_parser_append()

    + +
    +
    + + + + + + + + + + + + + + + + +
    int guac_parser_append (guac_parser * parser,
    void * buffer,
    int length )
    +
    + +

    Appends data from the given buffer to the given parser.

    +

    The data will be appended, if possible, to the in-progress instruction as a reference and thus the buffer must remain valid throughout the life of the current instruction. This function may modify the contents of the buffer when those contents are part of an element within the instruction being read.

    +
    Parameters
    + + + + +
    parserThe parser to append data to.
    bufferA buffer containing data that should be appended to this parser.
    lengthThe number of bytes available for appending within the buffer.
    +
    +
    +
    Returns
    The number of bytes appended to this parser, which may be zero if more data is needed.
    + +
    +
    + +

    ◆ guac_parser_expect()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    int guac_parser_expect (guac_parser * parser,
    guac_socket * socket,
    int usec_timeout,
    const char * opcode )
    +
    + +

    Reads a single instruction from the given guac_socket.

    +

    This operates identically to guac_parser_read(), except that an error is returned if the expected opcode is not received.

    +

    If an error occurs reading the instruction, NULL is returned, and guac_error is set appropriately.

    +

    If the instruction read is not the expected instruction, NULL is returned, and guac_error is set to GUAC_STATUS_BAD_STATE.

    +
    Parameters
    + + + + + +
    parserThe guac_parser to read instruction data from.
    socketThe guac_socket connection to use.
    usec_timeoutThe maximum number of microseconds to wait before giving up.
    opcodeThe opcode of the instruction to read.
    +
    +
    +
    Returns
    Zero if an instruction with the given opcode was read, non-zero otherwise. If an instruction was read, but the instruction had a different opcode, non-zero is returned and guac_error is set to GUAC_STATUS_BAD_STATE.
    + +
    +
    + +

    ◆ guac_parser_free()

    + +
    +
    + + + + + + + +
    void guac_parser_free (guac_parser * parser)
    +
    + +

    Frees all memory allocated to the given parser.

    +
    Parameters
    + + +
    parserThe parser to free.
    +
    +
    + +
    +
    + +

    ◆ guac_parser_length()

    + +
    +
    + + + + + + + +
    int guac_parser_length (guac_parser * parser)
    +
    + +

    Returns the number of unparsed bytes stored in the given parser's internal buffers.

    +
    Parameters
    + + +
    parserThe parser to return the length of.
    +
    +
    +
    Returns
    The number of unparsed bytes stored in the given parser.
    + +
    +
    + +

    ◆ guac_parser_read()

    + +
    +
    + + + + + + + + + + + + + + + + +
    int guac_parser_read (guac_parser * parser,
    guac_socket * socket,
    int usec_timeout )
    +
    + +

    Reads a single instruction from the given guac_socket connection.

    +

    This may result in additional data being read from the guac_socket, stored internally within a buffer for future parsing. Future calls to guac_parser_read() will read from the internal buffer before reading from the guac_socket. Data from the internal buffer can be removed and used elsewhere through guac_parser_shift().

    +

    If an error occurs reading the instruction, non-zero is returned, and guac_error is set appropriately.

    +
    Parameters
    + + + + +
    parserThe guac_parser to read instruction data from.
    socketThe guac_socket connection to use.
    usec_timeoutThe maximum number of microseconds to wait before giving up.
    +
    +
    +
    Returns
    Zero if an instruction was read within the time allowed, or non-zero if no instruction could be read. 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 additional calls to guac_parser_read() will be required.
    + +
    +
    + +

    ◆ guac_parser_shift()

    + +
    +
    + + + + + + + + + + + + + + + + +
    int guac_parser_shift (guac_parser * parser,
    void * buffer,
    int length )
    +
    + +

    Removes up to length bytes from internal buffer of unparsed bytes, storing them in the given buffer.

    +
    Parameters
    + + + + +
    parserThe parser to remove unparsed bytes from.
    bufferThe buffer to store the unparsed bytes within.
    lengthThe length of the given buffer.
    +
    +
    +
    Returns
    The number of bytes stored in the given buffer.
    + +
    +
    +
    + + + + diff --git a/doc/1.5.5/libguac/parser_8h_source.html b/doc/1.5.5/libguac/parser_8h_source.html new file mode 100644 index 000000000..4eb03a133 --- /dev/null +++ b/doc/1.5.5/libguac/parser_8h_source.html @@ -0,0 +1,178 @@ + + + + + + + +libguac: guacamole/parser.h Source File + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    parser.h
    +
    +
    +Go to the documentation of this file.
    1/*
    +
    2 * Licensed to the Apache Software Foundation (ASF) under one
    +
    3 * or more contributor license agreements. See the NOTICE file
    +
    4 * distributed with this work for additional information
    +
    5 * regarding copyright ownership. The ASF licenses this file
    +
    6 * to you under the Apache License, Version 2.0 (the
    +
    7 * "License"); you may not use this file except in compliance
    +
    8 * with the License. You may obtain a copy of the License at
    +
    9 *
    +
    10 * http://www.apache.org/licenses/LICENSE-2.0
    +
    11 *
    +
    12 * Unless required by applicable law or agreed to in writing,
    +
    13 * software distributed under the License is distributed on an
    +
    14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    15 * KIND, either express or implied. See the License for the
    +
    16 * specific language governing permissions and limitations
    +
    17 * under the License.
    +
    18 */
    +
    19
    +
    20#ifndef _GUAC_PARSER_H
    +
    21#define _GUAC_PARSER_H
    +
    22
    +
    29#include "parser-types.h"
    +
    30#include "parser-constants.h"
    +
    31#include "socket-types.h"
    +
    32
    +
    + +
    34
    +
    38 char* opcode;
    +
    39
    +
    43 int argc;
    +
    44
    +
    48 char** argv;
    +
    49
    + +
    54
    +
    58 int __element_length;
    +
    59
    +
    63 int __elementc;
    +
    64
    +
    68 char* __elementv[GUAC_INSTRUCTION_MAX_ELEMENTS];
    +
    69
    +
    74 char* __instructionbuf_unparsed_start;
    +
    75
    +
    79 char* __instructionbuf_unparsed_end;
    +
    80
    +
    86 char __instructionbuf[32768];
    +
    87
    +
    88};
    +
    +
    89
    + +
    97
    +
    112int guac_parser_append(guac_parser* parser, void* buffer, int length);
    +
    113
    + +
    122
    +
    132int guac_parser_shift(guac_parser* parser, void* buffer, int length);
    +
    133
    + +
    140
    +
    162int guac_parser_read(guac_parser* parser, guac_socket* socket, int usec_timeout);
    +
    163
    +
    185int guac_parser_expect(guac_parser* parser, guac_socket* socket, int usec_timeout, const char* opcode);
    +
    186
    +
    187#endif
    +
    188
    +
    Constants related to the Guacamole protocol parser.
    +
    #define GUAC_INSTRUCTION_MAX_ELEMENTS
    The maximum number of elements per instruction, including the opcode.
    Definition parser-constants.h:42
    +
    Type definitions related to parsing the Guacamole protocol.
    +
    guac_parse_state
    All possible states of the instruction parser.
    Definition parser-types.h:32
    +
    guac_parser * guac_parser_alloc()
    Allocates a new parser.
    +
    int guac_parser_shift(guac_parser *parser, void *buffer, int length)
    Removes up to length bytes from internal buffer of unparsed bytes, storing them in the given buffer.
    +
    int guac_parser_length(guac_parser *parser)
    Returns the number of unparsed bytes stored in the given parser's internal buffers.
    +
    int guac_parser_read(guac_parser *parser, guac_socket *socket, int usec_timeout)
    Reads a single instruction from the given guac_socket connection.
    +
    int guac_parser_append(guac_parser *parser, void *buffer, int length)
    Appends data from the given buffer to the given parser.
    +
    int guac_parser_expect(guac_parser *parser, guac_socket *socket, int usec_timeout, const char *opcode)
    Reads a single instruction from the given guac_socket.
    +
    void guac_parser_free(guac_parser *parser)
    Frees all memory allocated to the given parser.
    +
    Type definitions related to the guac_socket object.
    +
    A Guacamole protocol parser, which reads individual instructions, filling its own internal structure ...
    Definition parser.h:33
    +
    guac_parse_state state
    The parse state of the instruction.
    Definition parser.h:53
    +
    int argc
    The number of arguments passed to this instruction.
    Definition parser.h:43
    +
    char * opcode
    The opcode of the instruction.
    Definition parser.h:38
    +
    char ** argv
    Array of all arguments passed to this instruction.
    Definition parser.h:48
    +
    The core I/O object of Guacamole.
    Definition socket.h:39
    +
    + + + + diff --git a/doc/1.5.5/libguac/plugin-constants_8h.html b/doc/1.5.5/libguac/plugin-constants_8h.html new file mode 100644 index 000000000..21149cdf0 --- /dev/null +++ b/doc/1.5.5/libguac/plugin-constants_8h.html @@ -0,0 +1,143 @@ + + + + + + + +libguac: guacamole/plugin-constants.h File Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    plugin-constants.h File Reference
    +
    +
    + +

    Constants related to client plugins. +More...

    + +

    Go to the source code of this file.

    + + + + + + + + + + + + + + +

    +Macros

    +#define GUAC_PROTOCOL_LIBRARY_PREFIX   "libguac-client-"
     String prefix which begins the library filename of all client plugins.
     
    +#define GUAC_PROTOCOL_LIBRARY_SUFFIX   ".so"
     String suffix which ends the library filename of all client plugins.
     
    +#define GUAC_PROTOCOL_NAME_LIMIT   256
     The maximum number of characters (COUNTING NULL TERMINATOR) to allow for protocol names within the library filename of client plugins.
     
    #define GUAC_PROTOCOL_LIBRARY_LIMIT
     The maximum number of characters (INCLUDING NULL TERMINATOR) that a character array containing the concatenation of the library prefix, protocol name, and suffix can contain, assuming the protocol name is limited to GUAC_PROTOCOL_NAME_LIMIT characters.
     
    +

    Detailed Description

    +

    Constants related to client plugins.

    +

    Macro Definition Documentation

    + +

    ◆ GUAC_PROTOCOL_LIBRARY_LIMIT

    + +
    +
    + + + + +
    #define GUAC_PROTOCOL_LIBRARY_LIMIT
    +
    +Value:
    ( \
    +
    \
    +
    sizeof(GUAC_PROTOCOL_LIBRARY_PREFIX) - 1 /* "libguac-client-" */ \
    +
    + GUAC_PROTOCOL_NAME_LIMIT - 1 /* [up to 256 chars] */ \
    +
    + sizeof(GUAC_PROTOCOL_LIBRARY_SUFFIX) - 1 /* ".so" */ \
    +
    + 1 /* NULL terminator */ \
    +
    \
    +
    )
    +
    #define GUAC_PROTOCOL_NAME_LIMIT
    The maximum number of characters (COUNTING NULL TERMINATOR) to allow for protocol names within the li...
    Definition plugin-constants.h:43
    +
    #define GUAC_PROTOCOL_LIBRARY_PREFIX
    String prefix which begins the library filename of all client plugins.
    Definition plugin-constants.h:32
    +
    #define GUAC_PROTOCOL_LIBRARY_SUFFIX
    String suffix which ends the library filename of all client plugins.
    Definition plugin-constants.h:37
    +
    +

    The maximum number of characters (INCLUDING NULL TERMINATOR) that a character array containing the concatenation of the library prefix, protocol name, and suffix can contain, assuming the protocol name is limited to GUAC_PROTOCOL_NAME_LIMIT characters.

    + +
    +
    +
    + + + + diff --git a/doc/1.5.5/libguac/plugin-constants_8h_source.html b/doc/1.5.5/libguac/plugin-constants_8h_source.html new file mode 100644 index 000000000..2b6e60210 --- /dev/null +++ b/doc/1.5.5/libguac/plugin-constants_8h_source.html @@ -0,0 +1,133 @@ + + + + + + + +libguac: guacamole/plugin-constants.h Source File + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    plugin-constants.h
    +
    +
    +Go to the documentation of this file.
    1/*
    +
    2 * Licensed to the Apache Software Foundation (ASF) under one
    +
    3 * or more contributor license agreements. See the NOTICE file
    +
    4 * distributed with this work for additional information
    +
    5 * regarding copyright ownership. The ASF licenses this file
    +
    6 * to you under the Apache License, Version 2.0 (the
    +
    7 * "License"); you may not use this file except in compliance
    +
    8 * with the License. You may obtain a copy of the License at
    +
    9 *
    +
    10 * http://www.apache.org/licenses/LICENSE-2.0
    +
    11 *
    +
    12 * Unless required by applicable law or agreed to in writing,
    +
    13 * software distributed under the License is distributed on an
    +
    14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    15 * KIND, either express or implied. See the License for the
    +
    16 * specific language governing permissions and limitations
    +
    17 * under the License.
    +
    18 */
    +
    19
    +
    20#ifndef _GUAC_PLUGIN_CONSTANTS_H
    +
    21#define _GUAC_PLUGIN_CONSTANTS_H
    +
    22
    +
    32#define GUAC_PROTOCOL_LIBRARY_PREFIX "libguac-client-"
    +
    33
    +
    37#define GUAC_PROTOCOL_LIBRARY_SUFFIX ".so"
    +
    38
    +
    43#define GUAC_PROTOCOL_NAME_LIMIT 256
    +
    44
    +
    +
    51#define GUAC_PROTOCOL_LIBRARY_LIMIT ( \
    +
    52 \
    +
    53 sizeof(GUAC_PROTOCOL_LIBRARY_PREFIX) - 1 /* "libguac-client-" */ \
    +
    54 + GUAC_PROTOCOL_NAME_LIMIT - 1 /* [up to 256 chars] */ \
    +
    55 + sizeof(GUAC_PROTOCOL_LIBRARY_SUFFIX) - 1 /* ".so" */ \
    +
    56 + 1 /* NULL terminator */ \
    +
    57 \
    +
    58)
    +
    +
    59
    +
    60#endif
    +
    61
    +
    + + + + diff --git a/doc/1.5.5/libguac/plugin_8h.html b/doc/1.5.5/libguac/plugin_8h.html new file mode 100644 index 000000000..bbfa5e2ed --- /dev/null +++ b/doc/1.5.5/libguac/plugin_8h.html @@ -0,0 +1,94 @@ + + + + + + + +libguac: guacamole/plugin.h File Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    plugin.h File Reference
    +
    +
    + +

    Provides functions and structures required for handling a client plugin. +More...

    + +

    Go to the source code of this file.

    +

    Detailed Description

    +

    Provides functions and structures required for handling a client plugin.

    +
    + + + + diff --git a/doc/1.5.5/libguac/plugin_8h_source.html b/doc/1.5.5/libguac/plugin_8h_source.html new file mode 100644 index 000000000..f08bde7b7 --- /dev/null +++ b/doc/1.5.5/libguac/plugin_8h_source.html @@ -0,0 +1,118 @@ + + + + + + + +libguac: guacamole/plugin.h Source File + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    plugin.h
    +
    +
    +Go to the documentation of this file.
    1/*
    +
    2 * Licensed to the Apache Software Foundation (ASF) under one
    +
    3 * or more contributor license agreements. See the NOTICE file
    +
    4 * distributed with this work for additional information
    +
    5 * regarding copyright ownership. The ASF licenses this file
    +
    6 * to you under the Apache License, Version 2.0 (the
    +
    7 * "License"); you may not use this file except in compliance
    +
    8 * with the License. You may obtain a copy of the License at
    +
    9 *
    +
    10 * http://www.apache.org/licenses/LICENSE-2.0
    +
    11 *
    +
    12 * Unless required by applicable law or agreed to in writing,
    +
    13 * software distributed under the License is distributed on an
    +
    14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    15 * KIND, either express or implied. See the License for the
    +
    16 * specific language governing permissions and limitations
    +
    17 * under the License.
    +
    18 */
    +
    19
    +
    20#ifndef _GUAC_PLUGIN_H
    +
    21#define _GUAC_PLUGIN_H
    +
    22
    +
    23#include "plugin-constants.h"
    +
    24
    +
    31#endif
    +
    Constants related to client plugins.
    +
    + + + + diff --git a/doc/1.5.5/libguac/plus.svg b/doc/1.5.5/libguac/plus.svg new file mode 100644 index 000000000..075201655 --- /dev/null +++ b/doc/1.5.5/libguac/plus.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/doc/1.5.5/libguac/plusd.svg b/doc/1.5.5/libguac/plusd.svg new file mode 100644 index 000000000..0c65bfe94 --- /dev/null +++ b/doc/1.5.5/libguac/plusd.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/doc/1.5.5/libguac/pool-types_8h.html b/doc/1.5.5/libguac/pool-types_8h.html new file mode 100644 index 000000000..34fef657f --- /dev/null +++ b/doc/1.5.5/libguac/pool-types_8h.html @@ -0,0 +1,94 @@ + + + + + + + +libguac: guacamole/pool-types.h File Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    pool-types.h File Reference
    +
    +
    + +

    Type definitions related to the guac_pool pool of unique integers. +More...

    + +

    Go to the source code of this file.

    +

    Detailed Description

    +

    Type definitions related to the guac_pool pool of unique integers.

    +
    + + + + diff --git a/doc/1.5.5/libguac/pool-types_8h_source.html b/doc/1.5.5/libguac/pool-types_8h_source.html new file mode 100644 index 000000000..d9d44220e --- /dev/null +++ b/doc/1.5.5/libguac/pool-types_8h_source.html @@ -0,0 +1,122 @@ + + + + + + + +libguac: guacamole/pool-types.h Source File + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    pool-types.h
    +
    +
    +Go to the documentation of this file.
    1/*
    +
    2 * Licensed to the Apache Software Foundation (ASF) under one
    +
    3 * or more contributor license agreements. See the NOTICE file
    +
    4 * distributed with this work for additional information
    +
    5 * regarding copyright ownership. The ASF licenses this file
    +
    6 * to you under the Apache License, Version 2.0 (the
    +
    7 * "License"); you may not use this file except in compliance
    +
    8 * with the License. You may obtain a copy of the License at
    +
    9 *
    +
    10 * http://www.apache.org/licenses/LICENSE-2.0
    +
    11 *
    +
    12 * Unless required by applicable law or agreed to in writing,
    +
    13 * software distributed under the License is distributed on an
    +
    14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    15 * KIND, either express or implied. See the License for the
    +
    16 * specific language governing permissions and limitations
    +
    17 * under the License.
    +
    18 */
    +
    19
    +
    20#ifndef _GUAC_POOL_TYPES_H
    +
    21#define _GUAC_POOL_TYPES_H
    +
    22
    +
    32typedef struct guac_pool_int guac_pool_int;
    +
    33
    +
    40typedef struct guac_pool guac_pool;
    +
    41
    +
    42#endif
    +
    43
    +
    Represents a single integer within a larger pool of integers.
    Definition pool.h:71
    +
    A pool of integers.
    Definition pool.h:34
    +
    + + + + diff --git a/doc/1.5.5/libguac/pool_8h.html b/doc/1.5.5/libguac/pool_8h.html new file mode 100644 index 000000000..796d2d86d --- /dev/null +++ b/doc/1.5.5/libguac/pool_8h.html @@ -0,0 +1,232 @@ + + + + + + + +libguac: guacamole/pool.h File Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    pool.h File Reference
    +
    +
    + +

    Provides functions and structures for maintaining dynamically allocated and freed pools of integers. +More...

    + +

    Go to the source code of this file.

    + + + + + + + + +

    +Data Structures

    struct  guac_pool
     A pool of integers. More...
     
    struct  guac_pool_int
     Represents a single integer within a larger pool of integers. More...
     
    + + + + + + + + + + + + + +

    +Functions

    guac_poolguac_pool_alloc (int size)
     Allocates a new guac_pool having the given minimum size.
     
    void guac_pool_free (guac_pool *pool)
     Frees the given guac_pool.
     
    int guac_pool_next_int (guac_pool *pool)
     Returns the next available integer from the given guac_pool.
     
    void guac_pool_free_int (guac_pool *pool, int value)
     Frees the given integer back into the given guac_pool.
     
    +

    Detailed Description

    +

    Provides functions and structures for maintaining dynamically allocated and freed pools of integers.

    +

    Function Documentation

    + +

    ◆ guac_pool_alloc()

    + +
    +
    + + + + + + + +
    guac_pool * guac_pool_alloc (int size)
    +
    + +

    Allocates a new guac_pool having the given minimum size.

    +
    Parameters
    + + +
    sizeThe minimum number of integers which must have been returned by guac_pool_next_int before freed integers (previously used integers) are allowed to be returned.
    +
    +
    +
    Returns
    A new, empty guac_pool, having the given minimum size.
    + +
    +
    + +

    ◆ guac_pool_free()

    + +
    +
    + + + + + + + +
    void guac_pool_free (guac_pool * pool)
    +
    + +

    Frees the given guac_pool.

    +
    Parameters
    + + +
    poolThe guac_pool to free.
    +
    +
    + +
    +
    + +

    ◆ guac_pool_free_int()

    + +
    +
    + + + + + + + + + + + +
    void guac_pool_free_int (guac_pool * pool,
    int value )
    +
    + +

    Frees the given integer back into the given guac_pool.

    +

    The integer given will be available for future calls to guac_pool_next_int. This operation is threadsafe.

    +
    Parameters
    + + + +
    poolThe guac_pool to free the given integer into.
    valueThe integer which should be returned to the given pool, such that it can be received by a future call to guac_pool_next_int.
    +
    +
    + +
    +
    + +

    ◆ guac_pool_next_int()

    + +
    +
    + + + + + + + +
    int guac_pool_next_int (guac_pool * pool)
    +
    + +

    Returns the next available integer from the given guac_pool.

    +

    All integers returned are non-negative, and are returned in sequences, starting from 0. This operation is threadsafe.

    +
    Parameters
    + + +
    poolThe guac_pool to retrieve an integer from.
    +
    +
    +
    Returns
    The next available integer, which may be either an integer not yet returned by a call to guac_pool_next_int, or an integer which was previously returned, but has since been freed.
    + +
    +
    +
    + + + + diff --git a/doc/1.5.5/libguac/pool_8h_source.html b/doc/1.5.5/libguac/pool_8h_source.html new file mode 100644 index 000000000..b0ee0056e --- /dev/null +++ b/doc/1.5.5/libguac/pool_8h_source.html @@ -0,0 +1,166 @@ + + + + + + + +libguac: guacamole/pool.h Source File + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    pool.h
    +
    +
    +Go to the documentation of this file.
    1/*
    +
    2 * Licensed to the Apache Software Foundation (ASF) under one
    +
    3 * or more contributor license agreements. See the NOTICE file
    +
    4 * distributed with this work for additional information
    +
    5 * regarding copyright ownership. The ASF licenses this file
    +
    6 * to you under the Apache License, Version 2.0 (the
    +
    7 * "License"); you may not use this file except in compliance
    +
    8 * with the License. You may obtain a copy of the License at
    +
    9 *
    +
    10 * http://www.apache.org/licenses/LICENSE-2.0
    +
    11 *
    +
    12 * Unless required by applicable law or agreed to in writing,
    +
    13 * software distributed under the License is distributed on an
    +
    14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    15 * KIND, either express or implied. See the License for the
    +
    16 * specific language governing permissions and limitations
    +
    17 * under the License.
    +
    18 */
    +
    19
    +
    20#ifndef _GUAC_POOL_H
    +
    21#define _GUAC_POOL_H
    +
    22
    +
    30#include "pool-types.h"
    +
    31
    +
    32#include <pthread.h>
    +
    33
    +
    +
    34struct guac_pool {
    +
    35
    + +
    42
    +
    46 int active;
    +
    47
    +
    52 int __next_value;
    +
    53
    +
    57 guac_pool_int* __head;
    +
    58
    +
    62 guac_pool_int* __tail;
    +
    63
    +
    67 pthread_mutex_t __lock;
    +
    68
    +
    69};
    +
    +
    70
    +
    + +
    72
    +
    76 int value;
    +
    77
    +
    82 guac_pool_int* __next;
    +
    83
    +
    84};
    +
    +
    85
    + +
    95
    + +
    102
    + +
    117
    +
    130void guac_pool_free_int(guac_pool* pool, int value);
    +
    131
    +
    132#endif
    +
    133
    +
    Type definitions related to the guac_pool pool of unique integers.
    +
    guac_pool * guac_pool_alloc(int size)
    Allocates a new guac_pool having the given minimum size.
    +
    void guac_pool_free(guac_pool *pool)
    Frees the given guac_pool.
    +
    int guac_pool_next_int(guac_pool *pool)
    Returns the next available integer from the given guac_pool.
    +
    void guac_pool_free_int(guac_pool *pool, int value)
    Frees the given integer back into the given guac_pool.
    +
    Represents a single integer within a larger pool of integers.
    Definition pool.h:71
    +
    int value
    The integer value of this pool entry.
    Definition pool.h:76
    +
    A pool of integers.
    Definition pool.h:34
    +
    int min_size
    The minimum number of integers which must have been returned by guac_pool_next_int before previously-...
    Definition pool.h:41
    +
    int active
    The number of integers currently in use.
    Definition pool.h:46
    +
    + + + + diff --git a/doc/1.5.5/libguac/protocol-constants_8h.html b/doc/1.5.5/libguac/protocol-constants_8h.html new file mode 100644 index 000000000..f8184aced --- /dev/null +++ b/doc/1.5.5/libguac/protocol-constants_8h.html @@ -0,0 +1,164 @@ + + + + + + + +libguac: guacamole/protocol-constants.h File Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    protocol-constants.h File Reference
    +
    +
    + +

    Constants related to the Guacamole protocol. +More...

    + +

    Go to the source code of this file.

    + + + + + + + + + + + +

    +Macros

    #define GUACAMOLE_PROTOCOL_VERSION   "VERSION_1_5_0"
     This defines the overall protocol version that this build of libguac supports.
     
    #define GUAC_PROTOCOL_BLOB_MAX_LENGTH   6048
     The maximum number of bytes that should be sent in any one blob instruction to ensure the instruction does not exceed the maximum allowed instruction size.
     
    #define GUAC_PROTOCOL_LAYER_PARAMETER_MULTI_TOUCH   "multi-touch"
     The name of the layer parameter defining the number of simultaneous points of contact supported by a layer.
     
    +

    Detailed Description

    +

    Constants related to the Guacamole protocol.

    +

    Macro Definition Documentation

    + +

    ◆ GUAC_PROTOCOL_BLOB_MAX_LENGTH

    + +
    +
    + + + + +
    #define GUAC_PROTOCOL_BLOB_MAX_LENGTH   6048
    +
    + +

    The maximum number of bytes that should be sent in any one blob instruction to ensure the instruction does not exceed the maximum allowed instruction size.

    +
    See also
    GUAC_INSTRUCTION_MAX_LENGTH
    + +
    +
    + +

    ◆ GUAC_PROTOCOL_LAYER_PARAMETER_MULTI_TOUCH

    + +
    +
    + + + + +
    #define GUAC_PROTOCOL_LAYER_PARAMETER_MULTI_TOUCH   "multi-touch"
    +
    + +

    The name of the layer parameter defining the number of simultaneous points of contact supported by a layer.

    +

    This parameter should be set to a non-zero value if the associated layer should receive touch events ("touch" instructions).

    +

    This value specified for this parameter is advisory, and the client is not required to honor the declared level of touch support. Implementations are expected to safely handle or ignore any received touch events, regardless of the level of touch support declared.

    +
    See also
    guac_protocol_send_set_int()
    + +
    +
    + +

    ◆ GUACAMOLE_PROTOCOL_VERSION

    + +
    +
    + + + + +
    #define GUACAMOLE_PROTOCOL_VERSION   "VERSION_1_5_0"
    +
    + +

    This defines the overall protocol version that this build of libguac supports.

    +

    The protocol version is used to provide compatibility between potentially different versions of Guacamole server and clients. The version number is a MAJOR_MINOR_PATCH version that matches the versioning used throughout the components of the Guacamole project. This version will not necessarily increment with the other components, unless additional functionality is introduced that affects compatibility.

    +

    This version is passed by the __guac_protocol_send_args() function from the server to the client during the client/server handshake.

    + +
    +
    +
    + + + + diff --git a/doc/1.5.5/libguac/protocol-constants_8h_source.html b/doc/1.5.5/libguac/protocol-constants_8h_source.html new file mode 100644 index 000000000..84a283502 --- /dev/null +++ b/doc/1.5.5/libguac/protocol-constants_8h_source.html @@ -0,0 +1,122 @@ + + + + + + + +libguac: guacamole/protocol-constants.h Source File + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    protocol-constants.h
    +
    +
    +Go to the documentation of this file.
    1/*
    +
    2 * Licensed to the Apache Software Foundation (ASF) under one
    +
    3 * or more contributor license agreements. See the NOTICE file
    +
    4 * distributed with this work for additional information
    +
    5 * regarding copyright ownership. The ASF licenses this file
    +
    6 * to you under the Apache License, Version 2.0 (the
    +
    7 * "License"); you may not use this file except in compliance
    +
    8 * with the License. You may obtain a copy of the License at
    +
    9 *
    +
    10 * http://www.apache.org/licenses/LICENSE-2.0
    +
    11 *
    +
    12 * Unless required by applicable law or agreed to in writing,
    +
    13 * software distributed under the License is distributed on an
    +
    14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    15 * KIND, either express or implied. See the License for the
    +
    16 * specific language governing permissions and limitations
    +
    17 * under the License.
    +
    18 */
    +
    19
    +
    20#ifndef GUAC_PROTOCOL_CONSTANTS_H
    +
    21#define GUAC_PROTOCOL_CONSTANTS_H
    +
    22
    +
    41#define GUACAMOLE_PROTOCOL_VERSION "VERSION_1_5_0"
    +
    42
    +
    50#define GUAC_PROTOCOL_BLOB_MAX_LENGTH 6048
    +
    51
    +
    65#define GUAC_PROTOCOL_LAYER_PARAMETER_MULTI_TOUCH "multi-touch"
    +
    66
    +
    67#endif
    +
    68
    +
    + + + + diff --git a/doc/1.5.5/libguac/protocol-types_8h.html b/doc/1.5.5/libguac/protocol-types_8h.html new file mode 100644 index 000000000..7f3b2ba69 --- /dev/null +++ b/doc/1.5.5/libguac/protocol-types_8h.html @@ -0,0 +1,360 @@ + + + + + + + +libguac: guacamole/protocol-types.h File Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    protocol-types.h File Reference
    +
    +
    + +

    Type definitions related to the Guacamole protocol. +More...

    + +

    Go to the source code of this file.

    + + + + + + + + + + + + + + + + + + + + + + + +

    +Enumerations

    enum  guac_protocol_status {
    +  GUAC_PROTOCOL_STATUS_SUCCESS = 0x0000 +, GUAC_PROTOCOL_STATUS_UNSUPPORTED = 0x0100 +, GUAC_PROTOCOL_STATUS_SERVER_ERROR = 0x0200 +, GUAC_PROTOCOL_STATUS_SERVER_BUSY = 0x0201 +,
    +  GUAC_PROTOCOL_STATUS_UPSTREAM_TIMEOUT = 0x0202 +, GUAC_PROTOCOL_STATUS_UPSTREAM_ERROR = 0x0203 +, GUAC_PROTOCOL_STATUS_RESOURCE_NOT_FOUND = 0x0204 +, GUAC_PROTOCOL_STATUS_RESOURCE_CONFLICT = 0x0205 +,
    +  GUAC_PROTOCOL_STATUS_RESOURCE_CLOSED = 0x0206 +, GUAC_PROTOCOL_STATUS_UPSTREAM_NOT_FOUND = 0x0207 +, GUAC_PROTOCOL_STATUS_UPSTREAM_UNAVAILABLE = 0x0208 +, GUAC_PROTOCOL_STATUS_SESSION_CONFLICT = 0x0209 +,
    +  GUAC_PROTOCOL_STATUS_SESSION_TIMEOUT = 0x020A +, GUAC_PROTOCOL_STATUS_SESSION_CLOSED = 0x020B +, GUAC_PROTOCOL_STATUS_CLIENT_BAD_REQUEST = 0x300 +, GUAC_PROTOCOL_STATUS_CLIENT_UNAUTHORIZED = 0x0301 +,
    +  GUAC_PROTOCOL_STATUS_CLIENT_FORBIDDEN = 0x0303 +, GUAC_PROTOCOL_STATUS_CLIENT_TIMEOUT = 0x308 +, GUAC_PROTOCOL_STATUS_CLIENT_OVERRUN = 0x30D +, GUAC_PROTOCOL_STATUS_CLIENT_BAD_TYPE = 0x30F +,
    +  GUAC_PROTOCOL_STATUS_CLIENT_TOO_MANY = 0x31D +
    + }
     Set of all possible status codes returned by protocol operations. More...
     
    enum  guac_composite_mode {
    +  GUAC_COMP_ROUT = 0x2 +, GUAC_COMP_ATOP = 0x6 +, GUAC_COMP_XOR = 0xA +, GUAC_COMP_ROVER = 0xB +,
    +  GUAC_COMP_OVER = 0xE +, GUAC_COMP_PLUS = 0xF +, GUAC_COMP_RIN = 0x1 +, GUAC_COMP_IN = 0x4 +,
    +  GUAC_COMP_OUT = 0x8 +, GUAC_COMP_RATOP = 0x9 +, GUAC_COMP_SRC = 0xC +
    + }
     Composite modes used by Guacamole draw instructions. More...
     
    enum  guac_transfer_function {
    +  GUAC_TRANSFER_BINARY_BLACK = 0x0 +, GUAC_TRANSFER_BINARY_WHITE = 0xF +, GUAC_TRANSFER_BINARY_SRC = 0x3 +, GUAC_TRANSFER_BINARY_DEST = 0x5 +,
    +  GUAC_TRANSFER_BINARY_NSRC = 0xC +, GUAC_TRANSFER_BINARY_NDEST = 0xA +, GUAC_TRANSFER_BINARY_AND = 0x1 +, GUAC_TRANSFER_BINARY_NAND = 0xE +,
    +  GUAC_TRANSFER_BINARY_OR = 0x7 +, GUAC_TRANSFER_BINARY_NOR = 0x8 +, GUAC_TRANSFER_BINARY_XOR = 0x6 +, GUAC_TRANSFER_BINARY_XNOR = 0x9 +,
    +  GUAC_TRANSFER_BINARY_NSRC_AND = 0x4 +, GUAC_TRANSFER_BINARY_NSRC_NAND = 0xB +, GUAC_TRANSFER_BINARY_NSRC_OR = 0xD +, GUAC_TRANSFER_BINARY_NSRC_NOR = 0x2 +,
    +  GUAC_TRANSFER_BINARY_NDEST_AND = 0x2 +, GUAC_TRANSFER_BINARY_NDEST_NAND = 0xD +, GUAC_TRANSFER_BINARY_NDEST_OR = 0xB +, GUAC_TRANSFER_BINARY_NDEST_NOR = 0x4 +
    + }
     Default transfer functions. More...
     
    enum  guac_line_cap_style { GUAC_LINE_CAP_BUTT = 0x0 +, GUAC_LINE_CAP_ROUND = 0x1 +, GUAC_LINE_CAP_SQUARE = 0x2 + }
     Supported line cap styles.
     
    enum  guac_line_join_style { GUAC_LINE_JOIN_BEVEL = 0x0 +, GUAC_LINE_JOIN_MITER = 0x1 +, GUAC_LINE_JOIN_ROUND = 0x2 + }
     Supported line join styles.
     
    enum  guac_protocol_version {
    +  GUAC_PROTOCOL_VERSION_UNKNOWN = 0x000000 +, GUAC_PROTOCOL_VERSION_1_0_0 = 0x010000 +, GUAC_PROTOCOL_VERSION_1_1_0 = 0x010100 +, GUAC_PROTOCOL_VERSION_1_3_0 = 0x010300 +,
    +  GUAC_PROTOCOL_VERSION_1_5_0 = 0x010500 +
    + }
     The set of protocol versions known to guacd to handle negotiation or feature support between differing versions of Guacamole clients and guacd. More...
     
    enum  guac_message_type { GUAC_MESSAGE_USER_JOINED = 0x0001 +, GUAC_MESSAGE_USER_LEFT = 0x0002 + }
     A type that represents codes for human-readable messages sent by the "msg" instruction to the Client, that will be displayed in the client's browser. More...
     
    +

    Detailed Description

    +

    Type definitions related to the Guacamole protocol.

    +

    Enumeration Type Documentation

    + +

    ◆ guac_composite_mode

    + +
    +
    + + + + +
    enum guac_composite_mode
    +
    + +

    Composite modes used by Guacamole draw instructions.

    +

    Each composite mode maps to a unique channel mask integer.

    + +
    +
    + +

    ◆ guac_message_type

    + +
    +
    + + + + +
    enum guac_message_type
    +
    + +

    A type that represents codes for human-readable messages sent by the "msg" instruction to the Client, that will be displayed in the client's browser.

    +

    The codes will be interpreted by the client into translatable messages, and make take arguments, as noted below.

    + + + +
    Enumerator
    GUAC_MESSAGE_USER_JOINED 

    A message that notifies the owner of a connection that another user has joined their connection.

    +

    There should be a single argument provided, the name of the user who has joined.

    +
    GUAC_MESSAGE_USER_LEFT 

    A message that notifies the owner of a connection that another user has left their connection.

    +

    There should be a single argument provided, the name of the user who has left.

    +
    + +
    +
    + +

    ◆ guac_protocol_status

    + +
    +
    + + + + +
    enum guac_protocol_status
    +
    + +

    Set of all possible status codes returned by protocol operations.

    +

    These codes relate to Guacamole server/client communication, and not to internal communication of errors within libguac and linked software.

    +

    In general:

    0x0000 - 0x00FF: Successful operations.
    +0x0100 - 0x01FF: Operations that failed due to implementation status.
    +0x0200 - 0x02FF: Operations that failed due to remote state/environment.
    +0x0300 - 0x03FF: Operations that failed due to user/client action.
    +

    There is a general correspondence of these status codes with HTTP response codes.

    + + + + + + + + + + + + + + + + + + + + + + +
    Enumerator
    GUAC_PROTOCOL_STATUS_SUCCESS 

    The operation succeeded.

    +
    GUAC_PROTOCOL_STATUS_UNSUPPORTED 

    The requested operation is unsupported.

    +
    GUAC_PROTOCOL_STATUS_SERVER_ERROR 

    The operation could not be performed due to an internal failure.

    +
    GUAC_PROTOCOL_STATUS_SERVER_BUSY 

    The operation could not be performed due as the server is busy.

    +
    GUAC_PROTOCOL_STATUS_UPSTREAM_TIMEOUT 

    The operation could not be performed because the upstream server is not responding.

    +
    GUAC_PROTOCOL_STATUS_UPSTREAM_ERROR 

    The operation was unsuccessful due to an error or otherwise unexpected condition of the upstream server.

    +
    GUAC_PROTOCOL_STATUS_RESOURCE_NOT_FOUND 

    The operation could not be performed as the requested resource does not exist.

    +
    GUAC_PROTOCOL_STATUS_RESOURCE_CONFLICT 

    The operation could not be performed as the requested resource is already in use.

    +
    GUAC_PROTOCOL_STATUS_RESOURCE_CLOSED 

    The operation could not be performed as the requested resource is now closed.

    +
    GUAC_PROTOCOL_STATUS_UPSTREAM_NOT_FOUND 

    The operation could not be performed because the upstream server does not appear to exist.

    +
    GUAC_PROTOCOL_STATUS_UPSTREAM_UNAVAILABLE 

    The operation could not be performed because the upstream server is not available to service the request.

    +
    GUAC_PROTOCOL_STATUS_SESSION_CONFLICT 

    The session within the upstream server has ended because it conflicted with another session.

    +
    GUAC_PROTOCOL_STATUS_SESSION_TIMEOUT 

    The session within the upstream server has ended because it appeared to be inactive.

    +
    GUAC_PROTOCOL_STATUS_SESSION_CLOSED 

    The session within the upstream server has been forcibly terminated.

    +
    GUAC_PROTOCOL_STATUS_CLIENT_BAD_REQUEST 

    The operation could not be performed because bad parameters were given.

    +
    GUAC_PROTOCOL_STATUS_CLIENT_UNAUTHORIZED 

    Permission was denied to perform the operation, as the user is not yet authorized (not yet logged in, for example).

    +
    GUAC_PROTOCOL_STATUS_CLIENT_FORBIDDEN 

    Permission was denied to perform the operation, and this permission will not be granted even if the user is authorized.

    +
    GUAC_PROTOCOL_STATUS_CLIENT_TIMEOUT 

    The client took too long to respond.

    +
    GUAC_PROTOCOL_STATUS_CLIENT_OVERRUN 

    The client sent too much data.

    +
    GUAC_PROTOCOL_STATUS_CLIENT_BAD_TYPE 

    The client sent data of an unsupported or unexpected type.

    +
    GUAC_PROTOCOL_STATUS_CLIENT_TOO_MANY 

    The operation failed because the current client is already using too many resources.

    +
    + +
    +
    + +

    ◆ guac_protocol_version

    + +
    +
    + + + + +
    enum guac_protocol_version
    +
    + +

    The set of protocol versions known to guacd to handle negotiation or feature support between differing versions of Guacamole clients and guacd.

    + + + + + + +
    Enumerator
    GUAC_PROTOCOL_VERSION_UNKNOWN 

    An unknown version of the Guacamole protocol.

    +
    GUAC_PROTOCOL_VERSION_1_0_0 

    Original protocol version 1.0.0, which lacks support for negotiating parameters and protocol version, and requires that parameters in the client/server handshake be delivered in order.

    +
    GUAC_PROTOCOL_VERSION_1_1_0 

    Protocol version 1.1.0, which includes support for parameter and version negotiation and for sending timezone information from the client to the server.

    +
    GUAC_PROTOCOL_VERSION_1_3_0 

    Protocol version 1.3.0, which supports the "required" instruction, allowing connections in guacd to request information from the client and await a response.

    +
    GUAC_PROTOCOL_VERSION_1_5_0 

    Protocol version 1.5.0, which supports the "msg" instruction, allowing messages to be sent to the client, and adds support for the "name" handshake instruction.

    +
    + +
    +
    + +

    ◆ guac_transfer_function

    + +
    +
    + + + + +
    enum guac_transfer_function
    +
    + +

    Default transfer functions.

    +

    There is no current facility in the Guacamole protocol to define custom transfer functions.

    + +
    +
    +
    + + + + diff --git a/doc/1.5.5/libguac/protocol-types_8h_source.html b/doc/1.5.5/libguac/protocol-types_8h_source.html new file mode 100644 index 000000000..31a92629c --- /dev/null +++ b/doc/1.5.5/libguac/protocol-types_8h_source.html @@ -0,0 +1,332 @@ + + + + + + + +libguac: guacamole/protocol-types.h Source File + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    protocol-types.h
    +
    +
    +Go to the documentation of this file.
    1/*
    +
    2 * Licensed to the Apache Software Foundation (ASF) under one
    +
    3 * or more contributor license agreements. See the NOTICE file
    +
    4 * distributed with this work for additional information
    +
    5 * regarding copyright ownership. The ASF licenses this file
    +
    6 * to you under the Apache License, Version 2.0 (the
    +
    7 * "License"); you may not use this file except in compliance
    +
    8 * with the License. You may obtain a copy of the License at
    +
    9 *
    +
    10 * http://www.apache.org/licenses/LICENSE-2.0
    +
    11 *
    +
    12 * Unless required by applicable law or agreed to in writing,
    +
    13 * software distributed under the License is distributed on an
    +
    14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    15 * KIND, either express or implied. See the License for the
    +
    16 * specific language governing permissions and limitations
    +
    17 * under the License.
    +
    18 */
    +
    19
    +
    20#ifndef _GUAC_PROTOCOL_TYPES_H
    +
    21#define _GUAC_PROTOCOL_TYPES_H
    +
    22
    + +
    165
    +
    + +
    171
    +
    172 /*
    +
    173 * A: Source where destination transparent = S n D'
    +
    174 * B: Source where destination opaque = S n D
    +
    175 * C: Destination where source transparent = D n S'
    +
    176 * D: Destination where source opaque = D n S
    +
    177 *
    +
    178 * 0 = Active, 1 = Inactive
    +
    179 */
    +
    180 /* ABCD */
    +
    181 GUAC_COMP_ROUT = 0x2, /* 0010 - Clears destination where source opaque */
    +
    182 GUAC_COMP_ATOP = 0x6, /* 0110 - Fill where destination opaque only */
    +
    183 GUAC_COMP_XOR = 0xA, /* 1010 - XOR */
    +
    184 GUAC_COMP_ROVER = 0xB, /* 1011 - Fill where destination transparent only */
    +
    185 GUAC_COMP_OVER = 0xE, /* 1110 - Draw normally */
    +
    186 GUAC_COMP_PLUS = 0xF, /* 1111 - Add */
    +
    187
    +
    188 /* Unimplemented in client: */
    +
    189 /* NOT IMPLEMENTED: 0000 - Clear */
    +
    190 /* NOT IMPLEMENTED: 0011 - No operation */
    +
    191 /* NOT IMPLEMENTED: 0101 - Additive IN */
    +
    192 /* NOT IMPLEMENTED: 0111 - Additive ATOP */
    +
    193 /* NOT IMPLEMENTED: 1101 - Additive RATOP */
    +
    194
    +
    195 /* Buggy in webkit browsers, as they keep channel C on in all cases: */
    +
    196 GUAC_COMP_RIN = 0x1, /* 0001 */
    +
    197 GUAC_COMP_IN = 0x4, /* 0100 */
    +
    198 GUAC_COMP_OUT = 0x8, /* 1000 */
    +
    199 GUAC_COMP_RATOP = 0x9, /* 1001 */
    +
    200 GUAC_COMP_SRC = 0xC /* 1100 */
    +
    201
    +
    202 /* Bitwise composite operations (binary) */
    +
    203
    +
    204 /*
    +
    205 * A: S' & D'
    +
    206 * B: S' & D
    +
    207 * C: S & D'
    +
    208 * D: S & D
    +
    209 *
    +
    210 * 0 = Active, 1 = Inactive
    +
    211 */
    +
    212
    + +
    +
    214
    +
    + +
    220
    +
    221 /* Constant functions */ /* ABCD */
    +
    222 GUAC_TRANSFER_BINARY_BLACK = 0x0, /* 0000 */
    +
    223 GUAC_TRANSFER_BINARY_WHITE = 0xF, /* 1111 */
    +
    224
    +
    225 /* Copy functions */
    +
    226 GUAC_TRANSFER_BINARY_SRC = 0x3, /* 0011 */
    +
    227 GUAC_TRANSFER_BINARY_DEST = 0x5, /* 0101 */
    +
    228 GUAC_TRANSFER_BINARY_NSRC = 0xC, /* 1100 */
    +
    229 GUAC_TRANSFER_BINARY_NDEST = 0xA, /* 1010 */
    +
    230
    +
    231 /* AND / NAND */
    +
    232 GUAC_TRANSFER_BINARY_AND = 0x1, /* 0001 */
    +
    233 GUAC_TRANSFER_BINARY_NAND = 0xE, /* 1110 */
    +
    234
    +
    235 /* OR / NOR */
    +
    236 GUAC_TRANSFER_BINARY_OR = 0x7, /* 0111 */
    +
    237 GUAC_TRANSFER_BINARY_NOR = 0x8, /* 1000 */
    +
    238
    +
    239 /* XOR / XNOR */
    +
    240 GUAC_TRANSFER_BINARY_XOR = 0x6, /* 0110 */
    +
    241 GUAC_TRANSFER_BINARY_XNOR = 0x9, /* 1001 */
    +
    242
    +
    243 /* AND / NAND with inverted source */
    +
    244 GUAC_TRANSFER_BINARY_NSRC_AND = 0x4, /* 0100 */
    +
    245 GUAC_TRANSFER_BINARY_NSRC_NAND = 0xB, /* 1011 */
    +
    246
    +
    247 /* OR / NOR with inverted source */
    +
    248 GUAC_TRANSFER_BINARY_NSRC_OR = 0xD, /* 1101 */
    +
    249 GUAC_TRANSFER_BINARY_NSRC_NOR = 0x2, /* 0010 */
    +
    250
    +
    251 /* AND / NAND with inverted destination */
    +
    252 GUAC_TRANSFER_BINARY_NDEST_AND = 0x2, /* 0010 */
    +
    253 GUAC_TRANSFER_BINARY_NDEST_NAND = 0xD, /* 1101 */
    +
    254
    +
    255 /* OR / NOR with inverted destination */
    +
    256 GUAC_TRANSFER_BINARY_NDEST_OR = 0xB, /* 1011 */
    +
    257 GUAC_TRANSFER_BINARY_NDEST_NOR = 0x4 /* 0100 */
    +
    258
    + +
    +
    260
    +
    + +
    265 GUAC_LINE_CAP_BUTT = 0x0,
    +
    266 GUAC_LINE_CAP_ROUND = 0x1,
    +
    267 GUAC_LINE_CAP_SQUARE = 0x2
    + +
    +
    269
    +
    + +
    274 GUAC_LINE_JOIN_BEVEL = 0x0,
    +
    275 GUAC_LINE_JOIN_MITER = 0x1,
    +
    276 GUAC_LINE_JOIN_ROUND = 0x2
    + +
    +
    278
    +
    + +
    284
    + +
    289
    + +
    296
    + +
    303
    + +
    310
    + +
    317
    + +
    +
    319
    +
    +
    326typedef enum guac_message_type {
    +
    327
    + +
    334
    + +
    341
    + +
    +
    343
    +
    344#endif
    +
    345
    +
    guac_line_cap_style
    Supported line cap styles.
    Definition protocol-types.h:264
    +
    guac_line_join_style
    Supported line join styles.
    Definition protocol-types.h:273
    +
    guac_composite_mode
    Composite modes used by Guacamole draw instructions.
    Definition protocol-types.h:170
    +
    guac_transfer_function
    Default transfer functions.
    Definition protocol-types.h:219
    +
    guac_protocol_version
    The set of protocol versions known to guacd to handle negotiation or feature support between differin...
    Definition protocol-types.h:283
    +
    @ GUAC_PROTOCOL_VERSION_1_1_0
    Protocol version 1.1.0, which includes support for parameter and version negotiation and for sending ...
    Definition protocol-types.h:302
    +
    @ GUAC_PROTOCOL_VERSION_1_5_0
    Protocol version 1.5.0, which supports the "msg" instruction, allowing messages to be sent to the cli...
    Definition protocol-types.h:316
    +
    @ GUAC_PROTOCOL_VERSION_1_3_0
    Protocol version 1.3.0, which supports the "required" instruction, allowing connections in guacd to r...
    Definition protocol-types.h:309
    +
    @ GUAC_PROTOCOL_VERSION_UNKNOWN
    An unknown version of the Guacamole protocol.
    Definition protocol-types.h:288
    +
    @ GUAC_PROTOCOL_VERSION_1_0_0
    Original protocol version 1.0.0, which lacks support for negotiating parameters and protocol version,...
    Definition protocol-types.h:295
    +
    guac_message_type
    A type that represents codes for human-readable messages sent by the "msg" instruction to the Client,...
    Definition protocol-types.h:326
    +
    @ GUAC_MESSAGE_USER_LEFT
    A message that notifies the owner of a connection that another user has left their connection.
    Definition protocol-types.h:340
    +
    @ GUAC_MESSAGE_USER_JOINED
    A message that notifies the owner of a connection that another user has joined their connection.
    Definition protocol-types.h:333
    +
    guac_protocol_status
    Set of all possible status codes returned by protocol operations.
    Definition protocol-types.h:44
    +
    @ GUAC_PROTOCOL_STATUS_UPSTREAM_ERROR
    The operation was unsuccessful due to an error or otherwise unexpected condition of the upstream serv...
    Definition protocol-types.h:76
    +
    @ GUAC_PROTOCOL_STATUS_SERVER_BUSY
    The operation could not be performed due as the server is busy.
    Definition protocol-types.h:64
    +
    @ GUAC_PROTOCOL_STATUS_RESOURCE_CLOSED
    The operation could not be performed as the requested resource is now closed.
    Definition protocol-types.h:94
    +
    @ GUAC_PROTOCOL_STATUS_SERVER_ERROR
    The operation could not be performed due to an internal failure.
    Definition protocol-types.h:59
    +
    @ GUAC_PROTOCOL_STATUS_UPSTREAM_UNAVAILABLE
    The operation could not be performed because the upstream server is not available to service the requ...
    Definition protocol-types.h:106
    +
    @ GUAC_PROTOCOL_STATUS_CLIENT_BAD_REQUEST
    The operation could not be performed because bad parameters were given.
    Definition protocol-types.h:129
    +
    @ GUAC_PROTOCOL_STATUS_UNSUPPORTED
    The requested operation is unsupported.
    Definition protocol-types.h:54
    +
    @ GUAC_PROTOCOL_STATUS_RESOURCE_NOT_FOUND
    The operation could not be performed as the requested resource does not exist.
    Definition protocol-types.h:82
    +
    @ GUAC_PROTOCOL_STATUS_SESSION_TIMEOUT
    The session within the upstream server has ended because it appeared to be inactive.
    Definition protocol-types.h:118
    +
    @ GUAC_PROTOCOL_STATUS_CLIENT_TIMEOUT
    The client took too long to respond.
    Definition protocol-types.h:146
    +
    @ GUAC_PROTOCOL_STATUS_UPSTREAM_NOT_FOUND
    The operation could not be performed because the upstream server does not appear to exist.
    Definition protocol-types.h:100
    +
    @ GUAC_PROTOCOL_STATUS_UPSTREAM_TIMEOUT
    The operation could not be performed because the upstream server is not responding.
    Definition protocol-types.h:70
    +
    @ GUAC_PROTOCOL_STATUS_RESOURCE_CONFLICT
    The operation could not be performed as the requested resource is already in use.
    Definition protocol-types.h:88
    +
    @ GUAC_PROTOCOL_STATUS_CLIENT_OVERRUN
    The client sent too much data.
    Definition protocol-types.h:151
    +
    @ GUAC_PROTOCOL_STATUS_SESSION_CLOSED
    The session within the upstream server has been forcibly terminated.
    Definition protocol-types.h:123
    +
    @ GUAC_PROTOCOL_STATUS_CLIENT_FORBIDDEN
    Permission was denied to perform the operation, and this permission will not be granted even if the u...
    Definition protocol-types.h:141
    +
    @ GUAC_PROTOCOL_STATUS_SESSION_CONFLICT
    The session within the upstream server has ended because it conflicted with another session.
    Definition protocol-types.h:112
    +
    @ GUAC_PROTOCOL_STATUS_CLIENT_TOO_MANY
    The operation failed because the current client is already using too many resources.
    Definition protocol-types.h:162
    +
    @ GUAC_PROTOCOL_STATUS_SUCCESS
    The operation succeeded.
    Definition protocol-types.h:49
    +
    @ GUAC_PROTOCOL_STATUS_CLIENT_BAD_TYPE
    The client sent data of an unsupported or unexpected type.
    Definition protocol-types.h:156
    +
    @ GUAC_PROTOCOL_STATUS_CLIENT_UNAUTHORIZED
    Permission was denied to perform the operation, as the user is not yet authorized (not yet logged in,...
    Definition protocol-types.h:135
    +
    + + + + diff --git a/doc/1.5.5/libguac/protocol_8h.html b/doc/1.5.5/libguac/protocol_8h.html new file mode 100644 index 000000000..529256c4b --- /dev/null +++ b/doc/1.5.5/libguac/protocol_8h.html @@ -0,0 +1,2956 @@ + + + + + + + +libguac: guacamole/protocol.h File Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    protocol.h File Reference
    +
    +
    + +

    Provides functions and structures required for communicating using the Guacamole protocol over a guac_socket connection, such as that provided by guac_client objects. +More...

    + +

    Go to the source code of this file.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    int guac_protocol_send_ack (guac_socket *socket, guac_stream *stream, const char *error, guac_protocol_status status)
     Sends an ack instruction over the given guac_socket connection.
     
    int guac_protocol_send_args (guac_socket *socket, const char **args)
     Sends an args instruction over the given guac_socket connection.
     
    int guac_protocol_send_connect (guac_socket *socket, const char **args)
     Sends a connect instruction over the given guac_socket connection.
     
    int guac_protocol_send_disconnect (guac_socket *socket)
     Sends a disconnect instruction over the given guac_socket connection.
     
    int guac_protocol_send_error (guac_socket *socket, const char *error, guac_protocol_status status)
     Sends an error instruction over the given guac_socket connection.
     
    int guac_protocol_send_key (guac_socket *socket, int keysym, int pressed, guac_timestamp timestamp)
     Sends a key instruction over the given guac_socket connection.
     
    int guac_protocol_send_log (guac_socket *socket, const char *format,...)
     Sends a log instruction over the given guac_socket connection.
     
    int vguac_protocol_send_log (guac_socket *socket, const char *format, va_list args)
     Sends a log instruction over the given guac_socket connection.
     
    int guac_protocol_send_msg (guac_socket *socket, guac_message_type msg, const char **args)
     Sends the given string over the socket to be displayed on the client.
     
    int guac_protocol_send_mouse (guac_socket *socket, int x, int y, int button_mask, guac_timestamp timestamp)
     Sends a mouse instruction over the given guac_socket connection.
     
    int guac_protocol_send_touch (guac_socket *socket, int id, int x, int y, int x_radius, int y_radius, double angle, double force, guac_timestamp timestamp)
     Sends a touch instruction over the given guac_socket connection.
     
    int guac_protocol_send_nest (guac_socket *socket, int index, const char *data)
     Sends a nest instruction over the given guac_socket connection.
     
    int guac_protocol_send_nop (guac_socket *socket)
     Sends a nop instruction (null-operation) over the given guac_socket connection.
     
    int guac_protocol_send_ready (guac_socket *socket, const char *id)
     Sends a ready instruction over the given guac_socket connection.
     
    int guac_protocol_send_set (guac_socket *socket, const guac_layer *layer, const char *name, const char *value)
     Sends a set instruction over the given guac_socket connection.
     
    int guac_protocol_send_set_int (guac_socket *socket, const guac_layer *layer, const char *name, int value)
     Sends a set instruction over the given guac_socket connection.
     
    int guac_protocol_send_select (guac_socket *socket, const char *protocol)
     Sends a select instruction over the given guac_socket connection.
     
    int guac_protocol_send_sync (guac_socket *socket, guac_timestamp timestamp)
     Sends a sync instruction over the given guac_socket connection.
     
    int guac_protocol_send_body (guac_socket *socket, const guac_object *object, const guac_stream *stream, const char *mimetype, const char *name)
     Sends a body instruction over the given guac_socket connection.
     
    int guac_protocol_send_filesystem (guac_socket *socket, const guac_object *object, const char *name)
     Sends a filesystem instruction over the given guac_socket connection.
     
    int guac_protocol_send_undefine (guac_socket *socket, const guac_object *object)
     Sends an undefine instruction over the given guac_socket connection.
     
    int guac_protocol_send_audio (guac_socket *socket, const guac_stream *stream, const char *mimetype)
     Sends an audio instruction over the given guac_socket connection.
     
    int guac_protocol_send_file (guac_socket *socket, const guac_stream *stream, const char *mimetype, const char *name)
     Sends a file instruction over the given guac_socket connection.
     
    int guac_protocol_send_pipe (guac_socket *socket, const guac_stream *stream, const char *mimetype, const char *name)
     Sends a pipe instruction over the given guac_socket connection.
     
    int guac_protocol_send_blob (guac_socket *socket, const guac_stream *stream, const void *data, int count)
     Writes a block of data to the currently in-progress blob which was already created.
     
    int guac_protocol_send_blobs (guac_socket *socket, const guac_stream *stream, const void *data, int count)
     Sends a series of blob instructions, splitting the given data across the number of instructions required to ensure the size of each blob does not exceed GUAC_PROTOCOL_BLOB_MAX_LENGTH.
     
    int guac_protocol_send_end (guac_socket *socket, const guac_stream *stream)
     Sends an end instruction over the given guac_socket connection.
     
    int guac_protocol_send_video (guac_socket *socket, const guac_stream *stream, const guac_layer *layer, const char *mimetype)
     Sends a video instruction over the given guac_socket connection.
     
    int guac_protocol_send_arc (guac_socket *socket, const guac_layer *layer, int x, int y, int radius, double startAngle, double endAngle, int negative)
     Sends an arc instruction over the given guac_socket connection.
     
    int guac_protocol_send_cfill (guac_socket *socket, guac_composite_mode mode, const guac_layer *layer, int r, int g, int b, int a)
     Sends a cfill instruction over the given guac_socket connection.
     
    int guac_protocol_send_clip (guac_socket *socket, const guac_layer *layer)
     Sends a clip instruction over the given guac_socket connection.
     
    int guac_protocol_send_close (guac_socket *socket, const guac_layer *layer)
     Sends a close instruction over the given guac_socket connection.
     
    int guac_protocol_send_copy (guac_socket *socket, const guac_layer *srcl, int srcx, int srcy, int w, int h, guac_composite_mode mode, const guac_layer *dstl, int dstx, int dsty)
     Sends a copy instruction over the given guac_socket connection.
     
    int guac_protocol_send_cstroke (guac_socket *socket, guac_composite_mode mode, const guac_layer *layer, guac_line_cap_style cap, guac_line_join_style join, int thickness, int r, int g, int b, int a)
     Sends a cstroke instruction over the given guac_socket connection.
     
    int guac_protocol_send_cursor (guac_socket *socket, int x, int y, const guac_layer *srcl, int srcx, int srcy, int w, int h)
     Sends a cursor instruction over the given guac_socket connection.
     
    int guac_protocol_send_curve (guac_socket *socket, const guac_layer *layer, int cp1x, int cp1y, int cp2x, int cp2y, int x, int y)
     Sends a curve instruction over the given guac_socket connection.
     
    int guac_protocol_send_identity (guac_socket *socket, const guac_layer *layer)
     Sends an identity instruction over the given guac_socket connection.
     
    int guac_protocol_send_lfill (guac_socket *socket, guac_composite_mode mode, const guac_layer *layer, const guac_layer *srcl)
     Sends an lfill instruction over the given guac_socket connection.
     
    int guac_protocol_send_line (guac_socket *socket, const guac_layer *layer, int x, int y)
     Sends a line instruction over the given guac_socket connection.
     
    int guac_protocol_send_lstroke (guac_socket *socket, guac_composite_mode mode, const guac_layer *layer, guac_line_cap_style cap, guac_line_join_style join, int thickness, const guac_layer *srcl)
     Sends an lstroke instruction over the given guac_socket connection.
     
    int guac_protocol_send_img (guac_socket *socket, const guac_stream *stream, guac_composite_mode mode, const guac_layer *layer, const char *mimetype, int x, int y)
     Sends an img instruction over the given guac_socket connection.
     
    int guac_protocol_send_pop (guac_socket *socket, const guac_layer *layer)
     Sends a pop instruction over the given guac_socket connection.
     
    int guac_protocol_send_push (guac_socket *socket, const guac_layer *layer)
     Sends a push instruction over the given guac_socket connection.
     
    int guac_protocol_send_rect (guac_socket *socket, const guac_layer *layer, int x, int y, int width, int height)
     Sends a rect instruction over the given guac_socket connection.
     
    int guac_protocol_send_required (guac_socket *socket, const char **required)
     Sends a "required" instruction over the given guac_socket connection.
     
    int guac_protocol_send_reset (guac_socket *socket, const guac_layer *layer)
     Sends a reset instruction over the given guac_socket connection.
     
    int guac_protocol_send_start (guac_socket *socket, const guac_layer *layer, int x, int y)
     Sends a start instruction over the given guac_socket connection.
     
    int guac_protocol_send_transfer (guac_socket *socket, const guac_layer *srcl, int srcx, int srcy, int w, int h, guac_transfer_function fn, const guac_layer *dstl, int dstx, int dsty)
     Sends a transfer instruction over the given guac_socket connection.
     
    int guac_protocol_send_transform (guac_socket *socket, const guac_layer *layer, double a, double b, double c, double d, double e, double f)
     Sends a transform instruction over the given guac_socket connection.
     
    int guac_protocol_send_dispose (guac_socket *socket, const guac_layer *layer)
     Sends a dispose instruction over the given guac_socket connection.
     
    int guac_protocol_send_distort (guac_socket *socket, const guac_layer *layer, double a, double b, double c, double d, double e, double f)
     Sends a distort instruction over the given guac_socket connection.
     
    int guac_protocol_send_move (guac_socket *socket, const guac_layer *layer, const guac_layer *parent, int x, int y, int z)
     Sends a move instruction over the given guac_socket connection.
     
    int guac_protocol_send_shade (guac_socket *socket, const guac_layer *layer, int a)
     Sends a shade instruction over the given guac_socket connection.
     
    int guac_protocol_send_size (guac_socket *socket, const guac_layer *layer, int w, int h)
     Sends a size instruction over the given guac_socket connection.
     
    int guac_protocol_send_argv (guac_socket *socket, guac_stream *stream, const char *mimetype, const char *name)
     Sends an argv instruction over the given guac_socket connection.
     
    int guac_protocol_send_clipboard (guac_socket *socket, const guac_stream *stream, const char *mimetype)
     Sends a clipboard instruction over the given guac_socket connection.
     
    int guac_protocol_send_name (guac_socket *socket, const char *name)
     Sends a name instruction over the given guac_socket connection.
     
    int guac_protocol_decode_base64 (char *base64)
     Decodes the given base64-encoded string in-place.
     
    guac_protocol_version guac_protocol_string_to_version (const char *version_string)
     Given a string representation of a protocol version, return the enum value of that protocol version, or GUAC_PROTOCOL_VERSION_UNKNOWN if the value is not a known version.
     
    const char * guac_protocol_version_to_string (guac_protocol_version version)
     Given the enum value of the protocol version, return a pointer to the string representation of the version, or NULL if the version is unknown.
     
    +

    Detailed Description

    +

    Provides functions and structures required for communicating using the Guacamole protocol over a guac_socket connection, such as that provided by guac_client objects.

    +

    Function Documentation

    + +

    ◆ guac_protocol_decode_base64()

    + +
    +
    + + + + + + + +
    int guac_protocol_decode_base64 (char * base64)
    +
    + +

    Decodes the given base64-encoded string in-place.

    +

    The base64 string must be NULL-terminated.

    +
    Parameters
    + + +
    base64The base64-encoded string to decode.
    +
    +
    +
    Returns
    The number of bytes resulting from the decode operation.
    + +
    +
    + +

    ◆ guac_protocol_send_ack()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    int guac_protocol_send_ack (guac_socket * socket,
    guac_stream * stream,
    const char * error,
    guac_protocol_status status )
    +
    + +

    Sends an ack instruction over the given guac_socket connection.

    +

    If an error occurs sending the instruction, a non-zero value is returned, and guac_error is set appropriately.

    +
    Parameters
    + + + + + +
    socketThe guac_socket connection to use.
    streamThe guac_stream associated with the operation this ack is acknowledging.
    errorThe human-readable description associated with the error or status update.
    statusThe status code related to the error or status.
    +
    +
    +
    Returns
    Zero on success, non-zero on error.
    + +
    +
    + +

    ◆ guac_protocol_send_arc()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    int guac_protocol_send_arc (guac_socket * socket,
    const guac_layer * layer,
    int x,
    int y,
    int radius,
    double startAngle,
    double endAngle,
    int negative )
    +
    + +

    Sends an arc instruction over the given guac_socket connection.

    +

    If an error occurs sending the instruction, a non-zero value is returned, and guac_error is set appropriately.

    +
    Parameters
    + + + + + + + + + +
    socketThe guac_socket connection to use.
    layerThe destination layer.
    xThe X coordinate of the center of the circle containing the arc.
    yThe Y coordinate of the center of the circle containing the arc.
    radiusThe radius of the circle containing the arc.
    startAngleThe starting angle, in radians.
    endAngleThe ending angle, in radians.
    negativeZero if the arc should be drawn in order of increasing angle, non-zero otherwise.
    +
    +
    +
    Returns
    Zero on success, non-zero on error.
    + +
    +
    + +

    ◆ guac_protocol_send_args()

    + +
    +
    + + + + + + + + + + + +
    int guac_protocol_send_args (guac_socket * socket,
    const char ** args )
    +
    + +

    Sends an args instruction over the given guac_socket connection.

    +

    If an error occurs sending the instruction, a non-zero value is returned, and guac_error is set appropriately.

    +
    Parameters
    + + + +
    socketThe guac_socket connection to use.
    argsThe NULL-terminated array of argument names (strings).
    +
    +
    +
    Returns
    Zero on success, non-zero on error.
    + +
    +
    + +

    ◆ guac_protocol_send_argv()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    int guac_protocol_send_argv (guac_socket * socket,
    guac_stream * stream,
    const char * mimetype,
    const char * name )
    +
    + +

    Sends an argv instruction over the given guac_socket connection.

    +

    If an error occurs sending the instruction, a non-zero value is returned, and guac_error is set appropriately.

    +
    Parameters
    + + + + + +
    socketThe guac_socket connection to use to send the connection parameter value.
    streamThe stream to use to send the connection parameter value.
    mimetypeThe mimetype of the connection parameter value being sent.
    nameThe name of the connection parameter whose current value is being sent.
    +
    +
    +
    Returns
    Zero on success, non-zero on error.
    + +
    +
    + +

    ◆ guac_protocol_send_audio()

    + +
    +
    + + + + + + + + + + + + + + + + +
    int guac_protocol_send_audio (guac_socket * socket,
    const guac_stream * stream,
    const char * mimetype )
    +
    + +

    Sends an audio instruction over the given guac_socket connection.

    +

    If an error occurs sending the instruction, a non-zero value is returned, and guac_error is set appropriately.

    +
    Parameters
    + + + + +
    socketThe guac_socket connection to use when sending the audio instruction.
    streamThe stream to use for future audio data.
    mimetypeThe mimetype of the audio data which will be sent over the given stream.
    +
    +
    +
    Returns
    Zero on success, non-zero on error.
    + +
    +
    + +

    ◆ guac_protocol_send_blob()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    int guac_protocol_send_blob (guac_socket * socket,
    const guac_stream * stream,
    const void * data,
    int count )
    +
    + +

    Writes a block of data to the currently in-progress blob which was already created.

    +

    If an error occurs sending the instruction, a non-zero value is returned, and guac_error is set appropriately.

    +
    Parameters
    + + + + + +
    socketThe guac_socket connection to use.
    streamThe stream to use.
    dataThe file data to write.
    countThe number of bytes within the given buffer of file data that must be written.
    +
    +
    +
    Returns
    Zero on success, non-zero on error.
    + +
    +
    + +

    ◆ guac_protocol_send_blobs()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    int guac_protocol_send_blobs (guac_socket * socket,
    const guac_stream * stream,
    const void * data,
    int count )
    +
    + +

    Sends a series of blob instructions, splitting the given data across the number of instructions required to ensure the size of each blob does not exceed GUAC_PROTOCOL_BLOB_MAX_LENGTH.

    +

    If the size of data provided is zero, no blob instructions are sent.

    +

    If an error occurs sending any blob instruction, a non-zero value is returned, guac_error is set appropriately, and no further blobs are sent.

    +
    See also
    GUAC_PROTOCOL_BLOB_MAX_LENGTH
    +
    Parameters
    + + + + + +
    socketThe guac_socket connection to use to send the blob instructions.
    streamThe stream to associate with each blob sent.
    dataThe data which should be sent using the required number of blob instructions.
    countThe number of bytes within the given buffer of data that must be written.
    +
    +
    +
    Returns
    Zero on success, non-zero on error.
    + +
    +
    + +

    ◆ guac_protocol_send_body()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    int guac_protocol_send_body (guac_socket * socket,
    const guac_object * object,
    const guac_stream * stream,
    const char * mimetype,
    const char * name )
    +
    + +

    Sends a body instruction over the given guac_socket connection.

    +

    If an error occurs sending the instruction, a non-zero value is returned, and guac_error is set appropriately.

    +
    Parameters
    + + + + + + +
    socketThe guac_socket connection to use.
    objectThe object to associated with the stream being used.
    streamThe stream to use.
    mimetypeThe mimetype of the data being sent.
    nameThe name of the stream whose body is being sent, as requested by a "get" instruction.
    +
    +
    +
    Returns
    Zero on success, non-zero on error.
    + +
    +
    + +

    ◆ guac_protocol_send_cfill()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    int guac_protocol_send_cfill (guac_socket * socket,
    guac_composite_mode mode,
    const guac_layer * layer,
    int r,
    int g,
    int b,
    int a )
    +
    + +

    Sends a cfill instruction over the given guac_socket connection.

    +

    If an error occurs sending the instruction, a non-zero value is returned, and guac_error is set appropriately.

    +
    Parameters
    + + + + + + + + +
    socketThe guac_socket connection to use.
    modeThe composite mode to use.
    layerThe destination layer.
    rThe red component of the color of the rectangle.
    gThe green component of the color of the rectangle.
    bThe blue component of the color of the rectangle.
    aThe alpha (transparency) component of the color of the rectangle.
    +
    +
    +
    Returns
    Zero on success, non-zero on error.
    + +
    +
    + +

    ◆ guac_protocol_send_clip()

    + +
    +
    + + + + + + + + + + + +
    int guac_protocol_send_clip (guac_socket * socket,
    const guac_layer * layer )
    +
    + +

    Sends a clip instruction over the given guac_socket connection.

    +

    If an error occurs sending the instruction, a non-zero value is returned, and guac_error is set appropriately.

    +
    Parameters
    + + + +
    socketThe guac_socket connection to use.
    layerThe layer to set the clipping region of.
    +
    +
    +
    Returns
    Zero on success, non-zero on error.
    + +
    +
    + +

    ◆ guac_protocol_send_clipboard()

    + +
    +
    + + + + + + + + + + + + + + + + +
    int guac_protocol_send_clipboard (guac_socket * socket,
    const guac_stream * stream,
    const char * mimetype )
    +
    + +

    Sends a clipboard instruction over the given guac_socket connection.

    +

    If an error occurs sending the instruction, a non-zero value is returned, and guac_error is set appropriately.

    +
    Parameters
    + + + + +
    socketThe guac_socket connection to use.
    streamThe stream to use.
    mimetypeThe mimetype of the clipboard data being sent.
    +
    +
    +
    Returns
    Zero on success, non-zero on error.
    + +
    +
    + +

    ◆ guac_protocol_send_close()

    + +
    +
    + + + + + + + + + + + +
    int guac_protocol_send_close (guac_socket * socket,
    const guac_layer * layer )
    +
    + +

    Sends a close instruction over the given guac_socket connection.

    +

    If an error occurs sending the instruction, a non-zero value is returned, and guac_error is set appropriately.

    +
    Parameters
    + + + +
    socketThe guac_socket connection to use.
    layerThe destination layer.
    +
    +
    +
    Returns
    Zero on success, non-zero on error.
    + +
    +
    + +

    ◆ guac_protocol_send_connect()

    + +
    +
    + + + + + + + + + + + +
    int guac_protocol_send_connect (guac_socket * socket,
    const char ** args )
    +
    + +

    Sends a connect instruction over the given guac_socket connection.

    +

    If an error occurs sending the instruction, a non-zero value is returned, and guac_error is set appropriately.

    +
    Parameters
    + + + +
    socketThe guac_socket connection to use.
    argsThe NULL-terminated array of argument values (strings).
    +
    +
    +
    Returns
    Zero on success, non-zero on error.
    + +
    +
    + +

    ◆ guac_protocol_send_copy()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    int guac_protocol_send_copy (guac_socket * socket,
    const guac_layer * srcl,
    int srcx,
    int srcy,
    int w,
    int h,
    guac_composite_mode mode,
    const guac_layer * dstl,
    int dstx,
    int dsty )
    +
    + +

    Sends a copy instruction over the given guac_socket connection.

    +

    If an error occurs sending the instruction, a non-zero value is returned, and guac_error is set appropriately.

    +
    Parameters
    + + + + + + + + + + + +
    socketThe guac_socket connection to use.
    srclThe source layer.
    srcxThe X coordinate of the source rectangle.
    srcyThe Y coordinate of the source rectangle.
    wThe width of the source rectangle.
    hThe height of the source rectangle.
    modeThe composite mode to use.
    dstlThe destination layer.
    dstxThe X coordinate of the destination, where the source rectangle should be copied.
    dstyThe Y coordinate of the destination, where the source rectangle should be copied.
    +
    +
    +
    Returns
    Zero on success, non-zero on error.
    + +
    +
    + +

    ◆ guac_protocol_send_cstroke()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    int guac_protocol_send_cstroke (guac_socket * socket,
    guac_composite_mode mode,
    const guac_layer * layer,
    guac_line_cap_style cap,
    guac_line_join_style join,
    int thickness,
    int r,
    int g,
    int b,
    int a )
    +
    + +

    Sends a cstroke instruction over the given guac_socket connection.

    +

    If an error occurs sending the instruction, a non-zero value is returned, and guac_error is set appropriately.

    +
    Parameters
    + + + + + + + + + + + +
    socketThe guac_socket connection to use.
    modeThe composite mode to use.
    layerThe destination layer.
    capThe style of line cap to use when drawing the stroke.
    joinThe style of line join to use when drawing the stroke.
    thicknessThe thickness of the stroke in pixels.
    rThe red component of the color of the rectangle.
    gThe green component of the color of the rectangle.
    bThe blue component of the color of the rectangle.
    aThe alpha (transparency) component of the color of the rectangle.
    +
    +
    +
    Returns
    Zero on success, non-zero on error.
    + +
    +
    + +

    ◆ guac_protocol_send_cursor()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    int guac_protocol_send_cursor (guac_socket * socket,
    int x,
    int y,
    const guac_layer * srcl,
    int srcx,
    int srcy,
    int w,
    int h )
    +
    + +

    Sends a cursor instruction over the given guac_socket connection.

    +

    If an error occurs sending the instruction, a non-zero value is returned, and guac_error is set appropriately.

    +
    Parameters
    + + + + + + + + + +
    socketThe guac_socket connection to use.
    xThe X coordinate of the cursor hotspot.
    yThe Y coordinate of the cursor hotspot.
    srclThe source layer.
    srcxThe X coordinate of the source rectangle.
    srcyThe Y coordinate of the source rectangle.
    wThe width of the source rectangle.
    hThe height of the source rectangle.
    +
    +
    +
    Returns
    Zero on success, non-zero on error.
    + +
    +
    + +

    ◆ guac_protocol_send_curve()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    int guac_protocol_send_curve (guac_socket * socket,
    const guac_layer * layer,
    int cp1x,
    int cp1y,
    int cp2x,
    int cp2y,
    int x,
    int y )
    +
    + +

    Sends a curve instruction over the given guac_socket connection.

    +

    If an error occurs sending the instruction, a non-zero value is returned, and guac_error is set appropriately.

    +
    Parameters
    + + + + + + + + + +
    socketThe guac_socket connection to use.
    layerThe destination layer.
    cp1xThe X coordinate of the first control point.
    cp1yThe Y coordinate of the first control point.
    cp2xThe X coordinate of the second control point.
    cp2yThe Y coordinate of the second control point.
    xThe X coordinate of the endpoint of the curve.
    yThe Y coordinate of the endpoint of the curve.
    +
    +
    +
    Returns
    Zero on success, non-zero on error.
    + +
    +
    + +

    ◆ guac_protocol_send_disconnect()

    + +
    +
    + + + + + + + +
    int guac_protocol_send_disconnect (guac_socket * socket)
    +
    + +

    Sends a disconnect instruction over the given guac_socket connection.

    +

    If an error occurs sending the instruction, a non-zero value is returned, and guac_error is set appropriately.

    +
    Parameters
    + + +
    socketThe guac_socket connection to use.
    +
    +
    +
    Returns
    Zero on success, non-zero on error.
    + +
    +
    + +

    ◆ guac_protocol_send_dispose()

    + +
    +
    + + + + + + + + + + + +
    int guac_protocol_send_dispose (guac_socket * socket,
    const guac_layer * layer )
    +
    + +

    Sends a dispose instruction over the given guac_socket connection.

    +

    If an error occurs sending the instruction, a non-zero value is returned, and guac_error is set appropriately.

    +
    Parameters
    + + + +
    socketThe guac_socket connection to use.
    layerThe layer to dispose.
    +
    +
    +
    Returns
    Zero on success, non-zero on error.
    + +
    +
    + +

    ◆ guac_protocol_send_distort()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    int guac_protocol_send_distort (guac_socket * socket,
    const guac_layer * layer,
    double a,
    double b,
    double c,
    double d,
    double e,
    double f )
    +
    + +

    Sends a distort instruction over the given guac_socket connection.

    +

    If an error occurs sending the instruction, a non-zero value is returned, and guac_error is set appropriately.

    +
    Parameters
    + + + + + + + + + +
    socketThe guac_socket connection to use.
    layerThe layer to distort with the given transform matrix.
    aThe first value of the affine transform matrix.
    bThe second value of the affine transform matrix.
    cThe third value of the affine transform matrix.
    dThe fourth value of the affine transform matrix.
    eThe fifth value of the affine transform matrix.
    fThe sixth value of the affine transform matrix.
    +
    +
    +
    Returns
    Zero on success, non-zero on error.
    + +
    +
    + +

    ◆ guac_protocol_send_end()

    + +
    +
    + + + + + + + + + + + +
    int guac_protocol_send_end (guac_socket * socket,
    const guac_stream * stream )
    +
    + +

    Sends an end instruction over the given guac_socket connection.

    +

    If an error occurs sending the instruction, a non-zero value is returned, and guac_error is set appropriately.

    +
    Parameters
    + + + +
    socketThe guac_socket connection to use.
    streamThe stream to use.
    +
    +
    +
    Returns
    Zero on success, non-zero on error.
    + +
    +
    + +

    ◆ guac_protocol_send_error()

    + +
    +
    + + + + + + + + + + + + + + + + +
    int guac_protocol_send_error (guac_socket * socket,
    const char * error,
    guac_protocol_status status )
    +
    + +

    Sends an error instruction over the given guac_socket connection.

    +

    If an error occurs sending the instruction, a non-zero value is returned, and guac_error is set appropriately.

    +
    Parameters
    + + + + +
    socketThe guac_socket connection to use.
    errorThe human-readable description associated with the error.
    statusThe status code related to the error.
    +
    +
    +
    Returns
    Zero on success, non-zero on error.
    + +
    +
    + +

    ◆ guac_protocol_send_file()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    int guac_protocol_send_file (guac_socket * socket,
    const guac_stream * stream,
    const char * mimetype,
    const char * name )
    +
    + +

    Sends a file instruction over the given guac_socket connection.

    +

    If an error occurs sending the instruction, a non-zero value is returned, and guac_error is set appropriately.

    +
    Parameters
    + + + + + +
    socketThe guac_socket connection to use.
    streamThe stream to use.
    mimetypeThe mimetype of the data being sent.
    nameA name describing the file being sent.
    +
    +
    +
    Returns
    Zero on success, non-zero on error.
    + +
    +
    + +

    ◆ guac_protocol_send_filesystem()

    + +
    +
    + + + + + + + + + + + + + + + + +
    int guac_protocol_send_filesystem (guac_socket * socket,
    const guac_object * object,
    const char * name )
    +
    + +

    Sends a filesystem instruction over the given guac_socket connection.

    +

    If an error occurs sending the instruction, a non-zero value is returned, and guac_error is set appropriately.

    +
    Parameters
    + + + + +
    socketThe guac_socket connection to use.
    objectThe object representing the filesystem being exposed.
    nameA name describing the filesystem being exposed.
    +
    +
    +
    Returns
    Zero on success, non-zero on error.
    + +
    +
    + +

    ◆ guac_protocol_send_identity()

    + +
    +
    + + + + + + + + + + + +
    int guac_protocol_send_identity (guac_socket * socket,
    const guac_layer * layer )
    +
    + +

    Sends an identity instruction over the given guac_socket connection.

    +

    If an error occurs sending the instruction, a non-zero value is returned, and guac_error is set appropriately.

    +
    Parameters
    + + + +
    socketThe guac_socket connection to use.
    layerThe destination layer.
    +
    +
    +
    Returns
    Zero on success, non-zero on error.
    + +
    +
    + +

    ◆ guac_protocol_send_img()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    int guac_protocol_send_img (guac_socket * socket,
    const guac_stream * stream,
    guac_composite_mode mode,
    const guac_layer * layer,
    const char * mimetype,
    int x,
    int y )
    +
    + +

    Sends an img instruction over the given guac_socket connection.

    +

    If an error occurs sending the instruction, a non-zero value is returned, and guac_error is set appropriately.

    +
    Parameters
    + + + + + + + + +
    socketThe guac_socket connection to use when sending the img instruction.
    streamThe stream over which the image data will be sent.
    modeThe composite mode to use when drawing the image over the destination layer.
    layerThe destination layer.
    mimetypeThe mimetype of the image data being sent.
    xThe X coordinate of the upper-left corner of the destination rectangle within the destination layer, in pixels.
    yThe Y coordinate of the upper-left corner of the destination rectangle within the destination layer, in pixels.
    +
    +
    +
    Returns
    Zero if the instruction was successfully sent, non-zero on error.
    + +
    +
    + +

    ◆ guac_protocol_send_key()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    int guac_protocol_send_key (guac_socket * socket,
    int keysym,
    int pressed,
    guac_timestamp timestamp )
    +
    + +

    Sends a key instruction over the given guac_socket connection.

    +

    If an error occurs sending the instruction, a non-zero value is returned, and guac_error is set appropriately.

    +
    Parameters
    + + + + + +
    socketThe guac_socket connection to use.
    keysymThe X11 keysym of the key that was pressed or released.
    pressedNon-zero if the key represented by the given keysym is currently pressed, zero if it is released.
    timestampThe server timestamp (in milliseconds) at the point in time this key event was acknowledged.
    +
    +
    +
    Returns
    Zero on success, non-zero on error.
    + +
    +
    + +

    ◆ guac_protocol_send_lfill()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    int guac_protocol_send_lfill (guac_socket * socket,
    guac_composite_mode mode,
    const guac_layer * layer,
    const guac_layer * srcl )
    +
    + +

    Sends an lfill instruction over the given guac_socket connection.

    +

    If an error occurs sending the instruction, a non-zero value is returned, and guac_error is set appropriately.

    +
    Parameters
    + + + + + +
    socketThe guac_socket connection to use.
    modeThe composite mode to use.
    layerThe destination layer.
    srclThe source layer.
    +
    +
    +
    Returns
    Zero on success, non-zero on error.
    + +
    +
    + +

    ◆ guac_protocol_send_line()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    int guac_protocol_send_line (guac_socket * socket,
    const guac_layer * layer,
    int x,
    int y )
    +
    + +

    Sends a line instruction over the given guac_socket connection.

    +

    If an error occurs sending the instruction, a non-zero value is returned, and guac_error is set appropriately.

    +
    Parameters
    + + + + + +
    socketThe guac_socket connection to use.
    layerThe destination layer.
    xThe X coordinate of the endpoint of the line.
    yThe Y coordinate of the endpoint of the line.
    +
    +
    +
    Returns
    Zero on success, non-zero on error.
    + +
    +
    + +

    ◆ guac_protocol_send_log()

    + +
    +
    + + + + + + + + + + + + + + + + +
    int guac_protocol_send_log (guac_socket * socket,
    const char * format,
    ... )
    +
    + +

    Sends a log instruction over the given guac_socket connection.

    +

    This is mainly useful in debugging.

    +

    If an error occurs sending the instruction, a non-zero value is returned, and guac_error is set appropriately.

    +
    Parameters
    + + + + +
    socketThe guac_socket connection to use.
    formatA printf-style format string to log.
    ...Arguments to use when filling the format string for printing.
    +
    +
    +
    Returns
    Zero on success, non-zero on error.
    + +
    +
    + +

    ◆ guac_protocol_send_lstroke()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    int guac_protocol_send_lstroke (guac_socket * socket,
    guac_composite_mode mode,
    const guac_layer * layer,
    guac_line_cap_style cap,
    guac_line_join_style join,
    int thickness,
    const guac_layer * srcl )
    +
    + +

    Sends an lstroke instruction over the given guac_socket connection.

    +

    If an error occurs sending the instruction, a non-zero value is returned, and guac_error is set appropriately.

    +
    Parameters
    + + + + + + + + +
    socketThe guac_socket connection to use.
    modeThe composite mode to use.
    layerThe destination layer.
    capThe style of line cap to use when drawing the stroke.
    joinThe style of line join to use when drawing the stroke.
    thicknessThe thickness of the stroke in pixels.
    srclThe source layer.
    +
    +
    +
    Returns
    Zero on success, non-zero on error.
    + +
    +
    + +

    ◆ guac_protocol_send_mouse()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    int guac_protocol_send_mouse (guac_socket * socket,
    int x,
    int y,
    int button_mask,
    guac_timestamp timestamp )
    +
    + +

    Sends a mouse instruction over the given guac_socket connection.

    +

    If an error occurs sending the instruction, a non-zero value is returned, and guac_error is set appropriately.

    +
    Parameters
    + + + + + +
    socketThe guac_socket connection to use.
    xThe X coordinate of the current mouse position.
    yThe Y coordinate of the current mouse position.
    button_maskAn 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.
    +
    +
    +
    See also
    GUAC_CLIENT_MOUSE_LEFT
    +
    +GUAC_CLIENT_MOUSE_MIDDLE
    +
    +GUAC_CLIENT_MOUSE_RIGHT
    +
    +GUAC_CLIENT_MOUSE_SCROLL_UP
    +
    +GUAC_CLIENT_MOUSE_SCROLL_DOWN
    +
    Parameters
    + + +
    timestampThe server timestamp (in milliseconds) at the point in time this mouse position was acknowledged.
    +
    +
    +
    Returns
    Zero on success, non-zero on error.
    + +
    +
    + +

    ◆ guac_protocol_send_move()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    int guac_protocol_send_move (guac_socket * socket,
    const guac_layer * layer,
    const guac_layer * parent,
    int x,
    int y,
    int z )
    +
    + +

    Sends a move instruction over the given guac_socket connection.

    +

    If an error occurs sending the instruction, a non-zero value is returned, and guac_error is set appropriately.

    +
    Parameters
    + + + + + + + +
    socketThe guac_socket connection to use.
    layerThe layer to move.
    parentThe parent layer the specified layer will be positioned relative to.
    xThe X coordinate of the layer.
    yThe Y coordinate of the layer.
    zThe Z index of the layer, relative to other layers in its parent.
    +
    +
    +
    Returns
    Zero on success, non-zero on error.
    + +
    +
    + +

    ◆ guac_protocol_send_msg()

    + +
    +
    + + + + + + + + + + + + + + + + +
    int guac_protocol_send_msg (guac_socket * socket,
    guac_message_type msg,
    const char ** args )
    +
    + +

    Sends the given string over the socket to be displayed on the client.

    +

    Returns zero if the message was sent successfully or non-zero if an error occurs.

    +
    Parameters
    + + + + +
    socketThe guac_socket connection to send the message to.
    msgThe message code to send to the client.
    argsA null-terminated array of strings that will be provided to the client as part of the message, that the client may then place in the message, or null if the message requires no arguments.
    +
    +
    +
    Returns
    Zero if the message is sent successfully; otherwise non-zero.
    + +
    +
    + +

    ◆ guac_protocol_send_name()

    + +
    +
    + + + + + + + + + + + +
    int guac_protocol_send_name (guac_socket * socket,
    const char * name )
    +
    + +

    Sends a name instruction over the given guac_socket connection.

    +
    Parameters
    + + + +
    socketThe guac_socket connection to use.
    nameThe name to send within the name instruction.
    +
    +
    +
    Returns
    Zero on success, non-zero on error.
    + +
    +
    + +

    ◆ guac_protocol_send_nest()

    + +
    +
    + + + + + + + + + + + + + + + + +
    int guac_protocol_send_nest (guac_socket * socket,
    int index,
    const char * data )
    +
    + +

    Sends a nest instruction over the given guac_socket connection.

    +

    If an error occurs sending the instruction, a non-zero value is returned, and guac_error is set appropriately.

    +
    Deprecated
    The "nest" instruction and the corresponding guac_socket implementation are no longer necessary, having been replaced by the streaming instructions ("blob", "ack", "end"). Code using nested sockets or the "nest" instruction should instead write to a normal socket directly.
    +
    Parameters
    + + + + +
    socketThe guac_socket connection to use.
    indexThe integer index of the stream to send the protocol data over.
    dataA string containing protocol data, which must be UTF-8 encoded and null-terminated.
    +
    +
    +
    Returns
    Zero on success, non-zero on error.
    + +
    +
    + +

    ◆ guac_protocol_send_nop()

    + +
    +
    + + + + + + + +
    int guac_protocol_send_nop (guac_socket * socket)
    +
    + +

    Sends a nop instruction (null-operation) over the given guac_socket connection.

    +

    If an error occurs sending the instruction, a non-zero value is returned, and guac_error is set appropriately.

    +
    Parameters
    + + +
    socketThe guac_socket connection to use.
    +
    +
    +
    Returns
    Zero on success, non-zero on error.
    + +
    +
    + +

    ◆ guac_protocol_send_pipe()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    int guac_protocol_send_pipe (guac_socket * socket,
    const guac_stream * stream,
    const char * mimetype,
    const char * name )
    +
    + +

    Sends a pipe instruction over the given guac_socket connection.

    +

    If an error occurs sending the instruction, a non-zero value is returned, and guac_error is set appropriately.

    +
    Parameters
    + + + + + +
    socketThe guac_socket connection to use.
    streamThe stream to use.
    mimetypeThe mimetype of the data being sent.
    nameAn arbitrary name uniquely identifying this pipe.
    +
    +
    +
    Returns
    Zero on success, non-zero on error.
    + +
    +
    + +

    ◆ guac_protocol_send_pop()

    + +
    +
    + + + + + + + + + + + +
    int guac_protocol_send_pop (guac_socket * socket,
    const guac_layer * layer )
    +
    + +

    Sends a pop instruction over the given guac_socket connection.

    +

    If an error occurs sending the instruction, a non-zero value is returned, and guac_error is set appropriately.

    +
    Parameters
    + + + +
    socketThe guac_socket connection to use.
    layerThe layer to set the clipping region of.
    +
    +
    +
    Returns
    Zero on success, non-zero on error.
    + +
    +
    + +

    ◆ guac_protocol_send_push()

    + +
    +
    + + + + + + + + + + + +
    int guac_protocol_send_push (guac_socket * socket,
    const guac_layer * layer )
    +
    + +

    Sends a push instruction over the given guac_socket connection.

    +

    If an error occurs sending the instruction, a non-zero value is returned, and guac_error is set appropriately.

    +
    Parameters
    + + + +
    socketThe guac_socket connection to use.
    layerThe layer to set the clipping region of.
    +
    +
    +
    Returns
    Zero on success, non-zero on error.
    + +
    +
    + +

    ◆ guac_protocol_send_ready()

    + +
    +
    + + + + + + + + + + + +
    int guac_protocol_send_ready (guac_socket * socket,
    const char * id )
    +
    + +

    Sends a ready instruction over the given guac_socket connection.

    +

    If an error occurs sending the instruction, a non-zero value is returned, and guac_error is set appropriately.

    +
    Parameters
    + + + +
    socketThe guac_socket connection to use.
    idThe connection ID of the connection that is ready.
    +
    +
    +
    Returns
    Zero on success, non-zero on error.
    + +
    +
    + +

    ◆ guac_protocol_send_rect()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    int guac_protocol_send_rect (guac_socket * socket,
    const guac_layer * layer,
    int x,
    int y,
    int width,
    int height )
    +
    + +

    Sends a rect instruction over the given guac_socket connection.

    +

    If an error occurs sending the instruction, a non-zero value is returned, and guac_error is set appropriately.

    +
    Parameters
    + + + + + + + +
    socketThe guac_socket connection to use.
    layerThe destination layer.
    xThe X coordinate of the rectangle.
    yThe Y coordinate of the rectangle.
    widthThe width of the rectangle.
    heightThe height of the rectangle.
    +
    +
    +
    Returns
    Zero on success, non-zero on error.
    + +
    +
    + +

    ◆ guac_protocol_send_required()

    + +
    +
    + + + + + + + + + + + +
    int guac_protocol_send_required (guac_socket * socket,
    const char ** required )
    +
    + +

    Sends a "required" instruction over the given guac_socket connection.

    +

    This instruction indicates to the client that one or more additional parameters are needed to continue the connection.

    +
    Parameters
    + + + +
    socketThe guac_socket connection to which to send the instruction.
    requiredA NULL-terminated array of required parameters.
    +
    +
    +
    Returns
    Zero on success, non-zero on error.
    + +
    +
    + +

    ◆ guac_protocol_send_reset()

    + +
    +
    + + + + + + + + + + + +
    int guac_protocol_send_reset (guac_socket * socket,
    const guac_layer * layer )
    +
    + +

    Sends a reset instruction over the given guac_socket connection.

    +

    If an error occurs sending the instruction, a non-zero value is returned, and guac_error is set appropriately.

    +
    Parameters
    + + + +
    socketThe guac_socket connection to use.
    layerThe layer to set the clipping region of.
    +
    +
    +
    Returns
    Zero on success, non-zero on error.
    + +
    +
    + +

    ◆ guac_protocol_send_select()

    + +
    +
    + + + + + + + + + + + +
    int guac_protocol_send_select (guac_socket * socket,
    const char * protocol )
    +
    + +

    Sends a select instruction over the given guac_socket connection.

    +

    If an error occurs sending the instruction, a non-zero value is returned, and guac_error is set appropriately.

    +
    Parameters
    + + + +
    socketThe guac_socket connection to use.
    protocolThe protocol to request.
    +
    +
    +
    Returns
    Zero on success, non-zero on error.
    + +
    +
    + +

    ◆ guac_protocol_send_set()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    int guac_protocol_send_set (guac_socket * socket,
    const guac_layer * layer,
    const char * name,
    const char * value )
    +
    + +

    Sends a set instruction over the given guac_socket connection.

    +

    If an error occurs sending the instruction, a non-zero value is returned, and guac_error is set appropriately.

    +
    Parameters
    + + + + + +
    socketThe guac_socket connection to use.
    layerThe layer to set the parameter of.
    nameThe name of the parameter to set.
    valueThe value to set the parameter to.
    +
    +
    +
    Returns
    Zero on success, non-zero on error.
    + +
    +
    + +

    ◆ guac_protocol_send_set_int()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    int guac_protocol_send_set_int (guac_socket * socket,
    const guac_layer * layer,
    const char * name,
    int value )
    +
    + +

    Sends a set instruction over the given guac_socket connection.

    +

    This function behaves identically to guac_protocol_send_set() except that the provided parameter value is an integer, rather than a string.

    +

    If an error occurs sending the instruction, a non-zero value is returned, and guac_error is set appropriately.

    +
    Parameters
    + + + + + +
    socketThe guac_socket connection to use.
    layerThe layer to set the parameter of.
    nameThe name of the parameter to set.
    valueThe value to set the parameter to.
    +
    +
    +
    Returns
    Zero on success, non-zero on error.
    + +
    +
    + +

    ◆ guac_protocol_send_shade()

    + +
    +
    + + + + + + + + + + + + + + + + +
    int guac_protocol_send_shade (guac_socket * socket,
    const guac_layer * layer,
    int a )
    +
    + +

    Sends a shade instruction over the given guac_socket connection.

    +

    If an error occurs sending the instruction, a non-zero value is returned, and guac_error is set appropriately.

    +
    Parameters
    + + + + +
    socketThe guac_socket connection to use.
    layerThe layer to shade.
    aThe alpha value of the layer.
    +
    +
    +
    Returns
    Zero on success, non-zero on error.
    + +
    +
    + +

    ◆ guac_protocol_send_size()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    int guac_protocol_send_size (guac_socket * socket,
    const guac_layer * layer,
    int w,
    int h )
    +
    + +

    Sends a size instruction over the given guac_socket connection.

    +

    If an error occurs sending the instruction, a non-zero value is returned, and guac_error is set appropriately.

    +
    Parameters
    + + + + + +
    socketThe guac_socket connection to use.
    layerThe layer to resize.
    wThe new width of the layer.
    hThe new height of the layer.
    +
    +
    +
    Returns
    Zero on success, non-zero on error.
    + +
    +
    + +

    ◆ guac_protocol_send_start()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    int guac_protocol_send_start (guac_socket * socket,
    const guac_layer * layer,
    int x,
    int y )
    +
    + +

    Sends a start instruction over the given guac_socket connection.

    +

    If an error occurs sending the instruction, a non-zero value is returned, and guac_error is set appropriately.

    +
    Parameters
    + + + + + +
    socketThe guac_socket connection to use.
    layerThe destination layer.
    xThe X coordinate of the first point of the subpath.
    yThe Y coordinate of the first point of the subpath.
    +
    +
    +
    Returns
    Zero on success, non-zero on error.
    + +
    +
    + +

    ◆ guac_protocol_send_sync()

    + +
    +
    + + + + + + + + + + + +
    int guac_protocol_send_sync (guac_socket * socket,
    guac_timestamp timestamp )
    +
    + +

    Sends a sync instruction over the given guac_socket connection.

    +

    The current time in milliseconds should be passed in as the timestamp.

    +

    If an error occurs sending the instruction, a non-zero value is returned, and guac_error is set appropriately.

    +
    Parameters
    + + + +
    socketThe guac_socket connection to use.
    timestampThe current timestamp (in milliseconds).
    +
    +
    +
    Returns
    Zero on success, non-zero on error.
    + +
    +
    + +

    ◆ guac_protocol_send_touch()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    int guac_protocol_send_touch (guac_socket * socket,
    int id,
    int x,
    int y,
    int x_radius,
    int y_radius,
    double angle,
    double force,
    guac_timestamp timestamp )
    +
    + +

    Sends a touch instruction over the given guac_socket connection.

    +

    If an error occurs sending the instruction, a non-zero value is returned, and guac_error is set appropriately.

    +
    Parameters
    + + + + + + + + + + +
    socketThe guac_socket connection to use.
    idAn arbitrary integer ID which uniquely identifies this contact relative to other active contacts.
    xThe X coordinate of the center of the touch contact.
    yThe Y coordinate of the center of the touch contact.
    x_radiusThe X radius of the ellipse covering the general area of the touch contact, in pixels.
    y_radiusThe Y radius of the ellipse covering the general area of the touch contact, in pixels.
    angleThe rough angle of clockwise rotation of the general area of the touch contact, in degrees.
    forceThe relative force exerted by the touch contact, where 0 is no force (the touch has been lifted) and 1 is maximum force (the maximum amount of force representable by the device).
    timestampThe server timestamp (in milliseconds) at the point in time this touch event was acknowledged.
    +
    +
    +
    Returns
    Zero on success, non-zero on error.
    + +
    +
    + +

    ◆ guac_protocol_send_transfer()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    int guac_protocol_send_transfer (guac_socket * socket,
    const guac_layer * srcl,
    int srcx,
    int srcy,
    int w,
    int h,
    guac_transfer_function fn,
    const guac_layer * dstl,
    int dstx,
    int dsty )
    +
    + +

    Sends a transfer instruction over the given guac_socket connection.

    +

    If an error occurs sending the instruction, a non-zero value is returned, and guac_error is set appropriately.

    +
    Parameters
    + + + + + + + + + + + +
    socketThe guac_socket connection to use.
    srclThe source layer.
    srcxThe X coordinate of the source rectangle.
    srcyThe Y coordinate of the source rectangle.
    wThe width of the source rectangle.
    hThe height of the source rectangle.
    fnThe transfer function to use.
    dstlThe destination layer.
    dstxThe X coordinate of the destination, where the source rectangle should be copied.
    dstyThe Y coordinate of the destination, where the source rectangle should be copied.
    +
    +
    +
    Returns
    Zero on success, non-zero on error.
    + +
    +
    + +

    ◆ guac_protocol_send_transform()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    int guac_protocol_send_transform (guac_socket * socket,
    const guac_layer * layer,
    double a,
    double b,
    double c,
    double d,
    double e,
    double f )
    +
    + +

    Sends a transform instruction over the given guac_socket connection.

    +

    If an error occurs sending the instruction, a non-zero value is returned, and guac_error is set appropriately.

    +
    Parameters
    + + + + + + + + + +
    socketThe guac_socket connection to use.
    layerThe layer to apply the given transform matrix to.
    aThe first value of the affine transform matrix.
    bThe second value of the affine transform matrix.
    cThe third value of the affine transform matrix.
    dThe fourth value of the affine transform matrix.
    eThe fifth value of the affine transform matrix.
    fThe sixth value of the affine transform matrix.
    +
    +
    +
    Returns
    Zero on success, non-zero on error.
    + +
    +
    + +

    ◆ guac_protocol_send_undefine()

    + +
    +
    + + + + + + + + + + + +
    int guac_protocol_send_undefine (guac_socket * socket,
    const guac_object * object )
    +
    + +

    Sends an undefine instruction over the given guac_socket connection.

    +

    If an error occurs sending the instruction, a non-zero value is returned, and guac_error is set appropriately.

    +
    Parameters
    + + + +
    socketThe guac_socket connection to use.
    objectThe object being undefined.
    +
    +
    +
    Returns
    Zero on success, non-zero on error.
    + +
    +
    + +

    ◆ guac_protocol_send_video()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    int guac_protocol_send_video (guac_socket * socket,
    const guac_stream * stream,
    const guac_layer * layer,
    const char * mimetype )
    +
    + +

    Sends a video instruction over the given guac_socket connection.

    +

    If an error occurs sending the instruction, a non-zero value is returned, and guac_error is set appropriately.

    +
    Parameters
    + + + + + +
    socketThe guac_socket connection to use when sending the video instruction.
    streamThe stream to use for future video data.
    layerThe destination layer on which the streamed video should be played.
    mimetypeThe mimetype of the video data which will be sent over the given stream.
    +
    +
    +
    Returns
    Zero on success, non-zero on error.
    + +
    +
    + +

    ◆ guac_protocol_string_to_version()

    + +
    +
    + + + + + + + +
    guac_protocol_version guac_protocol_string_to_version (const char * version_string)
    +
    + +

    Given a string representation of a protocol version, return the enum value of that protocol version, or GUAC_PROTOCOL_VERSION_UNKNOWN if the value is not a known version.

    +
    Parameters
    + + +
    version_stringThe string representation of the protocol version.
    +
    +
    +
    Returns
    The enum value of the protocol version, or GUAC_PROTOCOL_VERSION_UNKNOWN if the provided version is not known.
    + +
    +
    + +

    ◆ guac_protocol_version_to_string()

    + +
    +
    + + + + + + + +
    const char * guac_protocol_version_to_string (guac_protocol_version version)
    +
    + +

    Given the enum value of the protocol version, return a pointer to the string representation of the version, or NULL if the version is unknown.

    +
    Parameters
    + + +
    versionThe enum value of the protocol version.
    +
    +
    +
    Returns
    A pointer to the string representation of the protocol version, or NULL if the version is unknown.
    + +
    +
    + +

    ◆ vguac_protocol_send_log()

    + +
    +
    + + + + + + + + + + + + + + + + +
    int vguac_protocol_send_log (guac_socket * socket,
    const char * format,
    va_list args )
    +
    + +

    Sends a log instruction over the given guac_socket connection.

    +

    This is mainly useful in debugging.

    +

    If an error occurs sending the instruction, a non-zero value is returned, and guac_error is set appropriately.

    +
    Parameters
    + + + + +
    socketThe guac_socket connection to use.
    formatA printf-style format string to log.
    argsThe va_list containing the arguments to be used when filling the format string for printing.
    +
    +
    +
    Returns
    Zero if the instruction was sent successfully, non-zero if an error occurs.
    + +
    +
    +
    + + + + diff --git a/doc/1.5.5/libguac/protocol_8h_source.html b/doc/1.5.5/libguac/protocol_8h_source.html new file mode 100644 index 000000000..d22d6b5c0 --- /dev/null +++ b/doc/1.5.5/libguac/protocol_8h_source.html @@ -0,0 +1,392 @@ + + + + + + + +libguac: guacamole/protocol.h Source File + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    protocol.h
    +
    +
    +Go to the documentation of this file.
    1/*
    +
    2 * Licensed to the Apache Software Foundation (ASF) under one
    +
    3 * or more contributor license agreements. See the NOTICE file
    +
    4 * distributed with this work for additional information
    +
    5 * regarding copyright ownership. The ASF licenses this file
    +
    6 * to you under the Apache License, Version 2.0 (the
    +
    7 * "License"); you may not use this file except in compliance
    +
    8 * with the License. You may obtain a copy of the License at
    +
    9 *
    +
    10 * http://www.apache.org/licenses/LICENSE-2.0
    +
    11 *
    +
    12 * Unless required by applicable law or agreed to in writing,
    +
    13 * software distributed under the License is distributed on an
    +
    14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    15 * KIND, either express or implied. See the License for the
    +
    16 * specific language governing permissions and limitations
    +
    17 * under the License.
    +
    18 */
    +
    19
    +
    20#ifndef _GUAC_PROTOCOL_H
    +
    21#define _GUAC_PROTOCOL_H
    +
    22
    +
    31#include "layer-types.h"
    +
    32#include "object-types.h"
    +
    33#include "protocol-constants.h"
    +
    34#include "protocol-types.h"
    +
    35#include "socket-types.h"
    +
    36#include "stream-types.h"
    +
    37#include "timestamp-types.h"
    +
    38
    +
    39#include <cairo/cairo.h>
    +
    40#include <stdarg.h>
    +
    41
    +
    42/* CONTROL INSTRUCTIONS */
    +
    43
    + +
    59 const char* error, guac_protocol_status status);
    +
    60
    +
    71int guac_protocol_send_args(guac_socket* socket, const char** args);
    +
    72
    +
    83int guac_protocol_send_connect(guac_socket* socket, const char** args);
    +
    84
    + +
    95
    +
    107int guac_protocol_send_error(guac_socket* socket, const char* error,
    +
    108 guac_protocol_status status);
    +
    109
    +
    133int guac_protocol_send_key(guac_socket* socket, int keysym, int pressed,
    +
    134 guac_timestamp timestamp);
    +
    135
    +
    148int guac_protocol_send_log(guac_socket* socket, const char* format, ...);
    +
    149
    +
    171int vguac_protocol_send_log(guac_socket* socket, const char* format,
    +
    172 va_list args);
    +
    173
    + +
    193 const char** args);
    +
    194
    +
    230int guac_protocol_send_mouse(guac_socket* socket, int x, int y,
    +
    231 int button_mask, guac_timestamp timestamp);
    +
    232
    +
    276int guac_protocol_send_touch(guac_socket* socket, int id, int x, int y,
    +
    277 int x_radius, int y_radius, double angle, double force,
    +
    278 guac_timestamp timestamp);
    +
    279
    + +
    301 const char* data);
    +
    302
    + +
    314
    +
    325int guac_protocol_send_ready(guac_socket* socket, const char* id);
    +
    326
    + +
    340 const char* name, const char* value);
    +
    341
    + +
    366 const char* name, int value);
    +
    367
    +
    378int guac_protocol_send_select(guac_socket* socket, const char* protocol);
    +
    379
    + +
    392
    +
    393/* OBJECT INSTRUCTIONS */
    +
    394
    + +
    421 const guac_stream* stream, const char* mimetype, const char* name);
    +
    422
    + +
    442 const guac_object* object, const char* name);
    +
    443
    + +
    460 const guac_object* object);
    +
    461
    +
    462/* MEDIA INSTRUCTIONS */
    +
    463
    + +
    483 const char* mimetype);
    +
    484
    + +
    498 const char* mimetype, const char* name);
    +
    499
    + +
    513 const char* mimetype, const char* name);
    +
    514
    + +
    530 const void* data, int count);
    +
    531
    + +
    561 const void* data, int count);
    +
    562
    + +
    574
    + +
    597 const guac_layer* layer, const char* mimetype);
    +
    598
    +
    599/* DRAWING INSTRUCTIONS */
    +
    600
    + +
    619 int x, int y, int radius, double startAngle, double endAngle,
    +
    620 int negative);
    +
    621
    + +
    638 guac_composite_mode mode, const guac_layer* layer,
    +
    639 int r, int g, int b, int a);
    +
    640
    + +
    652
    + +
    664
    + +
    686 const guac_layer* srcl, int srcx, int srcy, int w, int h,
    +
    687 guac_composite_mode mode, const guac_layer* dstl, int dstx, int dsty);
    +
    688
    + +
    708 guac_composite_mode mode, const guac_layer* layer,
    +
    709 guac_line_cap_style cap, guac_line_join_style join, int thickness,
    +
    710 int r, int g, int b, int a);
    +
    711
    +
    728int guac_protocol_send_cursor(guac_socket* socket, int x, int y,
    +
    729 const guac_layer* srcl, int srcx, int srcy, int w, int h);
    +
    730
    + +
    748 int cp1x, int cp1y, int cp2x, int cp2y, int x, int y);
    +
    749
    + +
    761
    + +
    775 guac_composite_mode mode, const guac_layer* layer,
    +
    776 const guac_layer* srcl);
    +
    777
    + +
    791 int x, int y);
    +
    792
    + +
    809 guac_composite_mode mode, const guac_layer* layer,
    +
    810 guac_line_cap_style cap, guac_line_join_style join, int thickness,
    +
    811 const guac_layer* srcl);
    +
    812
    + +
    847 guac_composite_mode mode, const guac_layer* layer,
    +
    848 const char* mimetype, int x, int y);
    +
    849
    + +
    861
    + +
    873
    + +
    889 int x, int y, int width, int height);
    +
    890
    +
    905int guac_protocol_send_required(guac_socket* socket, const char** required);
    +
    906
    + +
    918
    + +
    932 int x, int y);
    +
    933
    + +
    955 const guac_layer* srcl, int srcx, int srcy, int w, int h,
    +
    956 guac_transfer_function fn, const guac_layer* dstl, int dstx, int dsty);
    +
    957
    + +
    975 const guac_layer* layer,
    +
    976 double a, double b, double c,
    +
    977 double d, double e, double f);
    +
    978
    +
    979/* LAYER INSTRUCTIONS */
    +
    980
    + +
    992
    + +
    1010 const guac_layer* layer,
    +
    1011 double a, double b, double c,
    +
    1012 double d, double e, double f);
    +
    1013
    + +
    1030 const guac_layer* parent, int x, int y, int z);
    +
    1031
    + +
    1044 int a);
    +
    1045
    + +
    1059 int w, int h);
    +
    1060
    +
    1061/* TEXT INSTRUCTIONS */
    +
    1062
    + +
    1086 const char* mimetype, const char* name);
    +
    1087
    + +
    1100 const char* mimetype);
    +
    1101
    +
    1109int guac_protocol_send_name(guac_socket* socket, const char* name);
    +
    1110
    + +
    1119
    + +
    1133
    + +
    1146
    +
    1147#endif
    +
    1148
    +
    Type definitions related to Guacamole layers.
    +
    Type definitions related to Guacamole protocol objects.
    +
    Constants related to the Guacamole protocol.
    +
    Type definitions related to the Guacamole protocol.
    +
    guac_line_cap_style
    Supported line cap styles.
    Definition protocol-types.h:264
    +
    guac_line_join_style
    Supported line join styles.
    Definition protocol-types.h:273
    +
    guac_composite_mode
    Composite modes used by Guacamole draw instructions.
    Definition protocol-types.h:170
    +
    guac_transfer_function
    Default transfer functions.
    Definition protocol-types.h:219
    +
    guac_protocol_version
    The set of protocol versions known to guacd to handle negotiation or feature support between differin...
    Definition protocol-types.h:283
    +
    guac_message_type
    A type that represents codes for human-readable messages sent by the "msg" instruction to the Client,...
    Definition protocol-types.h:326
    +
    guac_protocol_status
    Set of all possible status codes returned by protocol operations.
    Definition protocol-types.h:44
    +
    int guac_protocol_decode_base64(char *base64)
    Decodes the given base64-encoded string in-place.
    +
    int guac_protocol_send_msg(guac_socket *socket, guac_message_type msg, const char **args)
    Sends the given string over the socket to be displayed on the client.
    +
    int guac_protocol_send_shade(guac_socket *socket, const guac_layer *layer, int a)
    Sends a shade instruction over the given guac_socket connection.
    +
    int guac_protocol_send_ready(guac_socket *socket, const char *id)
    Sends a ready instruction over the given guac_socket connection.
    +
    int guac_protocol_send_transform(guac_socket *socket, const guac_layer *layer, double a, double b, double c, double d, double e, double f)
    Sends a transform instruction over the given guac_socket connection.
    +
    int guac_protocol_send_cursor(guac_socket *socket, int x, int y, const guac_layer *srcl, int srcx, int srcy, int w, int h)
    Sends a cursor instruction over the given guac_socket connection.
    +
    int guac_protocol_send_pipe(guac_socket *socket, const guac_stream *stream, const char *mimetype, const char *name)
    Sends a pipe instruction over the given guac_socket connection.
    +
    int guac_protocol_send_curve(guac_socket *socket, const guac_layer *layer, int cp1x, int cp1y, int cp2x, int cp2y, int x, int y)
    Sends a curve instruction over the given guac_socket connection.
    +
    int guac_protocol_send_key(guac_socket *socket, int keysym, int pressed, guac_timestamp timestamp)
    Sends a key instruction over the given guac_socket connection.
    +
    const char * guac_protocol_version_to_string(guac_protocol_version version)
    Given the enum value of the protocol version, return a pointer to the string representation of the ve...
    +
    guac_protocol_version guac_protocol_string_to_version(const char *version_string)
    Given a string representation of a protocol version, return the enum value of that protocol version,...
    +
    int guac_protocol_send_filesystem(guac_socket *socket, const guac_object *object, const char *name)
    Sends a filesystem instruction over the given guac_socket connection.
    +
    int vguac_protocol_send_log(guac_socket *socket, const char *format, va_list args)
    Sends a log instruction over the given guac_socket connection.
    +
    int guac_protocol_send_rect(guac_socket *socket, const guac_layer *layer, int x, int y, int width, int height)
    Sends a rect instruction over the given guac_socket connection.
    +
    int guac_protocol_send_file(guac_socket *socket, const guac_stream *stream, const char *mimetype, const char *name)
    Sends a file instruction over the given guac_socket connection.
    +
    int guac_protocol_send_close(guac_socket *socket, const guac_layer *layer)
    Sends a close instruction over the given guac_socket connection.
    +
    int guac_protocol_send_name(guac_socket *socket, const char *name)
    Sends a name instruction over the given guac_socket connection.
    +
    int guac_protocol_send_set_int(guac_socket *socket, const guac_layer *layer, const char *name, int value)
    Sends a set instruction over the given guac_socket connection.
    +
    int guac_protocol_send_touch(guac_socket *socket, int id, int x, int y, int x_radius, int y_radius, double angle, double force, guac_timestamp timestamp)
    Sends a touch instruction over the given guac_socket connection.
    +
    int guac_protocol_send_lstroke(guac_socket *socket, guac_composite_mode mode, const guac_layer *layer, guac_line_cap_style cap, guac_line_join_style join, int thickness, const guac_layer *srcl)
    Sends an lstroke instruction over the given guac_socket connection.
    +
    int guac_protocol_send_reset(guac_socket *socket, const guac_layer *layer)
    Sends a reset instruction over the given guac_socket connection.
    +
    int guac_protocol_send_args(guac_socket *socket, const char **args)
    Sends an args instruction over the given guac_socket connection.
    +
    int guac_protocol_send_start(guac_socket *socket, const guac_layer *layer, int x, int y)
    Sends a start instruction over the given guac_socket connection.
    +
    int guac_protocol_send_video(guac_socket *socket, const guac_stream *stream, const guac_layer *layer, const char *mimetype)
    Sends a video instruction over the given guac_socket connection.
    +
    int guac_protocol_send_distort(guac_socket *socket, const guac_layer *layer, double a, double b, double c, double d, double e, double f)
    Sends a distort instruction over the given guac_socket connection.
    +
    int guac_protocol_send_log(guac_socket *socket, const char *format,...)
    Sends a log instruction over the given guac_socket connection.
    +
    int guac_protocol_send_blob(guac_socket *socket, const guac_stream *stream, const void *data, int count)
    Writes a block of data to the currently in-progress blob which was already created.
    +
    int guac_protocol_send_dispose(guac_socket *socket, const guac_layer *layer)
    Sends a dispose instruction over the given guac_socket connection.
    +
    int guac_protocol_send_clipboard(guac_socket *socket, const guac_stream *stream, const char *mimetype)
    Sends a clipboard instruction over the given guac_socket connection.
    +
    int guac_protocol_send_select(guac_socket *socket, const char *protocol)
    Sends a select instruction over the given guac_socket connection.
    +
    int guac_protocol_send_mouse(guac_socket *socket, int x, int y, int button_mask, guac_timestamp timestamp)
    Sends a mouse instruction over the given guac_socket connection.
    +
    int guac_protocol_send_nop(guac_socket *socket)
    Sends a nop instruction (null-operation) over the given guac_socket connection.
    +
    int guac_protocol_send_lfill(guac_socket *socket, guac_composite_mode mode, const guac_layer *layer, const guac_layer *srcl)
    Sends an lfill instruction over the given guac_socket connection.
    +
    int guac_protocol_send_nest(guac_socket *socket, int index, const char *data)
    Sends a nest instruction over the given guac_socket connection.
    +
    int guac_protocol_send_push(guac_socket *socket, const guac_layer *layer)
    Sends a push instruction over the given guac_socket connection.
    +
    int guac_protocol_send_sync(guac_socket *socket, guac_timestamp timestamp)
    Sends a sync instruction over the given guac_socket connection.
    +
    int guac_protocol_send_set(guac_socket *socket, const guac_layer *layer, const char *name, const char *value)
    Sends a set instruction over the given guac_socket connection.
    +
    int guac_protocol_send_identity(guac_socket *socket, const guac_layer *layer)
    Sends an identity instruction over the given guac_socket connection.
    +
    int guac_protocol_send_argv(guac_socket *socket, guac_stream *stream, const char *mimetype, const char *name)
    Sends an argv instruction over the given guac_socket connection.
    +
    int guac_protocol_send_ack(guac_socket *socket, guac_stream *stream, const char *error, guac_protocol_status status)
    Sends an ack instruction over the given guac_socket connection.
    +
    int guac_protocol_send_pop(guac_socket *socket, const guac_layer *layer)
    Sends a pop instruction over the given guac_socket connection.
    +
    int guac_protocol_send_audio(guac_socket *socket, const guac_stream *stream, const char *mimetype)
    Sends an audio instruction over the given guac_socket connection.
    +
    int guac_protocol_send_required(guac_socket *socket, const char **required)
    Sends a "required" instruction over the given guac_socket connection.
    +
    int guac_protocol_send_error(guac_socket *socket, const char *error, guac_protocol_status status)
    Sends an error instruction over the given guac_socket connection.
    +
    int guac_protocol_send_cstroke(guac_socket *socket, guac_composite_mode mode, const guac_layer *layer, guac_line_cap_style cap, guac_line_join_style join, int thickness, int r, int g, int b, int a)
    Sends a cstroke instruction over the given guac_socket connection.
    +
    int guac_protocol_send_move(guac_socket *socket, const guac_layer *layer, const guac_layer *parent, int x, int y, int z)
    Sends a move instruction over the given guac_socket connection.
    +
    int guac_protocol_send_connect(guac_socket *socket, const char **args)
    Sends a connect instruction over the given guac_socket connection.
    +
    int guac_protocol_send_body(guac_socket *socket, const guac_object *object, const guac_stream *stream, const char *mimetype, const char *name)
    Sends a body instruction over the given guac_socket connection.
    +
    int guac_protocol_send_clip(guac_socket *socket, const guac_layer *layer)
    Sends a clip instruction over the given guac_socket connection.
    +
    int guac_protocol_send_copy(guac_socket *socket, const guac_layer *srcl, int srcx, int srcy, int w, int h, guac_composite_mode mode, const guac_layer *dstl, int dstx, int dsty)
    Sends a copy instruction over the given guac_socket connection.
    +
    int guac_protocol_send_blobs(guac_socket *socket, const guac_stream *stream, const void *data, int count)
    Sends a series of blob instructions, splitting the given data across the number of instructions requi...
    +
    int guac_protocol_send_arc(guac_socket *socket, const guac_layer *layer, int x, int y, int radius, double startAngle, double endAngle, int negative)
    Sends an arc instruction over the given guac_socket connection.
    +
    int guac_protocol_send_end(guac_socket *socket, const guac_stream *stream)
    Sends an end instruction over the given guac_socket connection.
    +
    int guac_protocol_send_transfer(guac_socket *socket, const guac_layer *srcl, int srcx, int srcy, int w, int h, guac_transfer_function fn, const guac_layer *dstl, int dstx, int dsty)
    Sends a transfer instruction over the given guac_socket connection.
    +
    int guac_protocol_send_undefine(guac_socket *socket, const guac_object *object)
    Sends an undefine instruction over the given guac_socket connection.
    +
    int guac_protocol_send_line(guac_socket *socket, const guac_layer *layer, int x, int y)
    Sends a line instruction over the given guac_socket connection.
    +
    int guac_protocol_send_disconnect(guac_socket *socket)
    Sends a disconnect instruction over the given guac_socket connection.
    +
    int guac_protocol_send_cfill(guac_socket *socket, guac_composite_mode mode, const guac_layer *layer, int r, int g, int b, int a)
    Sends a cfill instruction over the given guac_socket connection.
    +
    int guac_protocol_send_img(guac_socket *socket, const guac_stream *stream, guac_composite_mode mode, const guac_layer *layer, const char *mimetype, int x, int y)
    Sends an img instruction over the given guac_socket connection.
    +
    int guac_protocol_send_size(guac_socket *socket, const guac_layer *layer, int w, int h)
    Sends a size instruction over the given guac_socket connection.
    +
    Type definitions related to the guac_socket object.
    +
    Type definitions related to Guacamole protocol streams.
    +
    Represents a single layer within the Guacamole protocol.
    Definition layer.h:34
    +
    Represents a single object within the Guacamole protocol.
    Definition object.h:32
    +
    The core I/O object of Guacamole.
    Definition socket.h:39
    +
    Represents a single stream within the Guacamole protocol.
    Definition stream.h:32
    +
    Type definitions related to Guacamole protocol timestamps.
    +
    int64_t guac_timestamp
    An arbitrary timestamp denoting a relative time value in milliseconds.
    Definition timestamp-types.h:34
    +
    + + + + diff --git a/doc/1.5.5/libguac/recording_8h.html b/doc/1.5.5/libguac/recording_8h.html new file mode 100644 index 000000000..49281b495 --- /dev/null +++ b/doc/1.5.5/libguac/recording_8h.html @@ -0,0 +1,403 @@ + + + + + + + +libguac: guacamole/recording.h File Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    recording.h File Reference
    +
    +
    + +

    Provides functions and structures to be use for session recording. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Data Structures

    struct  guac_recording
     An in-progress session recording, attached to a guac_client instance such that output Guacamole instructions may be dynamically intercepted and written to a file. More...
     
    + + + + + + + + + + +

    +Macros

    #define GUAC_COMMON_RECORDING_MAX_SUFFIX   255
     The maximum numeric value allowed for the .1, .2, .3, etc.
     
    +#define GUAC_COMMON_RECORDING_MAX_SUFFIX_LENGTH   4
     The maximum length of the string containing a sequential numeric suffix between 1 and GUAC_COMMON_RECORDING_MAX_SUFFIX inclusive, in bytes, including NULL terminator.
     
    +#define GUAC_COMMON_RECORDING_MAX_NAME_LENGTH   2048
     The maximum overall length of the full path to the session recording file, including any additional suffix and NULL terminator, in bytes.
     
    + + + + + + + + + + + + + + + + +

    +Functions

    guac_recordingguac_recording_create (guac_client *client, const char *path, const char *name, int create_path, int include_output, int include_mouse, int include_touch, int include_keys)
     Replaces the socket of the given client such that all further Guacamole protocol output will be copied into a file within the given path and having the given name.
     
    void guac_recording_free (guac_recording *recording)
     Frees the resources associated with the given in-progress recording.
     
    void guac_recording_report_mouse (guac_recording *recording, int x, int y, int button_mask)
     Reports the current mouse position and button state within the recording.
     
    void guac_recording_report_touch (guac_recording *recording, int id, int x, int y, int x_radius, int y_radius, double angle, double force)
     Reports the current state of a touch contact within the recording.
     
    void guac_recording_report_key (guac_recording *recording, int keysym, int pressed)
     Reports a change in the state of an individual key within the recording.
     
    +

    Detailed Description

    +

    Provides functions and structures to be use for session recording.

    +

    Macro Definition Documentation

    + +

    ◆ GUAC_COMMON_RECORDING_MAX_SUFFIX

    + +
    +
    + + + + +
    #define GUAC_COMMON_RECORDING_MAX_SUFFIX   255
    +
    + +

    The maximum numeric value allowed for the .1, .2, .3, etc.

    +

    suffix appended to the end of the session recording filename if a recording having the requested name already exists.

    + +
    +
    +

    Function Documentation

    + +

    ◆ guac_recording_create()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    guac_recording * guac_recording_create (guac_client * client,
    const char * path,
    const char * name,
    int create_path,
    int include_output,
    int include_mouse,
    int include_touch,
    int include_keys )
    +
    + +

    Replaces the socket of the given client such that all further Guacamole protocol output will be copied into a file within the given path and having the given name.

    +

    If the create_path flag is non-zero, the given path will be created if it does not yet exist. If creation of the recording file or path fails, error messages will automatically be logged, and no recording will be written. The recording will automatically be closed once the client is freed.

    +
    Parameters
    + + + + + + + + + +
    clientThe client whose output should be copied to a recording file.
    pathThe full absolute path to a directory in which the recording file should be created.
    nameThe base name to use for the recording file created within the specified path.
    create_pathZero if the specified path MUST exist for the recording file to be written, or non-zero if the path should be created if it does not yet exist.
    include_outputNon-zero if output which is broadcast to each connected client (graphics, streams, etc.) should be included in the session recording, zero otherwise. Including output is necessary for any recording which must later be viewable as video.
    include_mouseNon-zero if changes to mouse state, such as position and buttons pressed or released, should be included in the session recording, zero otherwise. Including mouse state is necessary for the mouse cursor to be rendered in any resulting video.
    include_touchNon-zero if touch events should be included in the session recording, zero otherwise. Depending on whether the remote desktop will automatically provide graphical feedback for touches, including touch events may be necessary for multi-touch interactions to be rendered in any resulting video.
    include_keysNon-zero if keys pressed and released should be included in the session recording, zero otherwise. Including key events within the recording may be necessary in certain auditing contexts, but should only be done with caution. Key events can easily contain sensitive information, such as passwords, credit card numbers, etc.
    +
    +
    +
    Returns
    A new guac_recording structure representing the in-progress recording if the recording file has been successfully created and a recording will be written, NULL otherwise.
    + +
    +
    + +

    ◆ guac_recording_free()

    + +
    +
    + + + + + + + +
    void guac_recording_free (guac_recording * recording)
    +
    + +

    Frees the resources associated with the given in-progress recording.

    +

    Note that, due to the manner that recordings are attached to the guac_client, the underlying guac_socket is not freed. The guac_socket will be automatically freed when the guac_client is freed.

    +
    Parameters
    + + +
    recordingThe guac_recording to free.
    +
    +
    + +
    +
    + +

    ◆ guac_recording_report_key()

    + +
    +
    + + + + + + + + + + + + + + + + +
    void guac_recording_report_key (guac_recording * recording,
    int keysym,
    int pressed )
    +
    + +

    Reports a change in the state of an individual key within the recording.

    +
    Parameters
    + + + + +
    recordingThe guac_recording associated with the key that was pressed or released.
    keysymThe X11 keysym of the key that was pressed or released.
    pressedNon-zero if the key represented by the given keysym is currently pressed, zero if it is released.
    +
    +
    + +
    +
    + +

    ◆ guac_recording_report_mouse()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    void guac_recording_report_mouse (guac_recording * recording,
    int x,
    int y,
    int button_mask )
    +
    + +

    Reports the current mouse position and button state within the recording.

    +
    Parameters
    + + + + + +
    recordingThe guac_recording associated with the mouse that has moved.
    xThe new X coordinate of the mouse cursor, in pixels.
    yThe new Y coordinate of the mouse cursor, in pixels.
    button_maskAn 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.
    +
    +
    +
    See also
    GUAC_CLIENT_MOUSE_LEFT
    +
    +GUAC_CLIENT_MOUSE_MIDDLE
    +
    +GUAC_CLIENT_MOUSE_RIGHT
    +
    +GUAC_CLIENT_MOUSE_SCROLL_UP
    +
    +GUAC_CLIENT_MOUSE_SCROLL_DOWN
    + +
    +
    + +

    ◆ guac_recording_report_touch()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void guac_recording_report_touch (guac_recording * recording,
    int id,
    int x,
    int y,
    int x_radius,
    int y_radius,
    double angle,
    double force )
    +
    + +

    Reports the current state of a touch contact within the recording.

    +
    Parameters
    + + + + + + + + + +
    recordingThe guac_recording associated with the touch contact that has changed state.
    idAn arbitrary integer ID which uniquely identifies this contact relative to other active contacts.
    xThe X coordinate of the center of the touch contact.
    yThe Y coordinate of the center of the touch contact.
    x_radiusThe X radius of the ellipse covering the general area of the touch contact, in pixels.
    y_radiusThe Y radius of the ellipse covering the general area of the touch contact, in pixels.
    angleThe rough angle of clockwise rotation of the general area of the touch contact, in degrees.
    forceThe relative force exerted by the touch contact, where 0 is no force (the touch has been lifted) and 1 is maximum force (the maximum amount of force representable by the device).
    +
    +
    + +
    +
    +
    + + + + diff --git a/doc/1.5.5/libguac/recording_8h_source.html b/doc/1.5.5/libguac/recording_8h_source.html new file mode 100644 index 000000000..a3c62c534 --- /dev/null +++ b/doc/1.5.5/libguac/recording_8h_source.html @@ -0,0 +1,171 @@ + + + + + + + +libguac: guacamole/recording.h Source File + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    recording.h
    +
    +
    +Go to the documentation of this file.
    1/*
    +
    2 * Licensed to the Apache Software Foundation (ASF) under one
    +
    3 * or more contributor license agreements. See the NOTICE file
    +
    4 * distributed with this work for additional information
    +
    5 * regarding copyright ownership. The ASF licenses this file
    +
    6 * to you under the Apache License, Version 2.0 (the
    +
    7 * "License"); you may not use this file except in compliance
    +
    8 * with the License. You may obtain a copy of the License at
    +
    9 *
    +
    10 * http://www.apache.org/licenses/LICENSE-2.0
    +
    11 *
    +
    12 * Unless required by applicable law or agreed to in writing,
    +
    13 * software distributed under the License is distributed on an
    +
    14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    15 * KIND, either express or implied. See the License for the
    +
    16 * specific language governing permissions and limitations
    +
    17 * under the License.
    +
    18 */
    +
    19
    +
    20#ifndef GUAC_RECORDING_H
    +
    21#define GUAC_RECORDING_H
    +
    22
    +
    23#include <guacamole/client.h>
    +
    24
    +
    36#define GUAC_COMMON_RECORDING_MAX_SUFFIX 255
    +
    37
    +
    43#define GUAC_COMMON_RECORDING_MAX_SUFFIX_LENGTH 4
    +
    44
    +
    49#define GUAC_COMMON_RECORDING_MAX_NAME_LENGTH 2048
    +
    50
    +
    +
    56typedef struct guac_recording {
    +
    57
    + +
    63
    + +
    71
    + +
    79
    + +
    88
    + +
    97
    + +
    +
    99
    + +
    157 const char* path, const char* name, int create_path,
    +
    158 int include_output, int include_mouse, int include_touch,
    +
    159 int include_keys);
    +
    160
    + +
    171
    + +
    198 int x, int y, int button_mask);
    +
    199
    + +
    235 int id, int x, int y, int x_radius, int y_radius,
    +
    236 double angle, double force);
    +
    237
    + +
    253 int keysym, int pressed);
    +
    254
    +
    255#endif
    +
    256
    +
    Functions and structure contents for the Guacamole proxy client.
    +
    void guac_recording_report_mouse(guac_recording *recording, int x, int y, int button_mask)
    Reports the current mouse position and button state within the recording.
    +
    void guac_recording_report_key(guac_recording *recording, int keysym, int pressed)
    Reports a change in the state of an individual key within the recording.
    +
    void guac_recording_report_touch(guac_recording *recording, int id, int x, int y, int x_radius, int y_radius, double angle, double force)
    Reports the current state of a touch contact within the recording.
    +
    guac_recording * guac_recording_create(guac_client *client, const char *path, const char *name, int create_path, int include_output, int include_mouse, int include_touch, int include_keys)
    Replaces the socket of the given client such that all further Guacamole protocol output will be copie...
    +
    void guac_recording_free(guac_recording *recording)
    Frees the resources associated with the given in-progress recording.
    +
    Guacamole proxy client.
    Definition client.h:48
    +
    An in-progress session recording, attached to a guac_client instance such that output Guacamole instr...
    Definition recording.h:56
    +
    int include_touch
    Non-zero if multi-touch events should be included in the session recording, zero otherwise.
    Definition recording.h:87
    +
    int include_mouse
    Non-zero if changes to mouse state, such as position and buttons pressed or released,...
    Definition recording.h:78
    +
    int include_output
    Non-zero if output which is broadcast to each connected client (graphics, streams,...
    Definition recording.h:70
    +
    int include_keys
    Non-zero if keys pressed and released should be included in the session recording,...
    Definition recording.h:96
    +
    guac_socket * socket
    The guac_socket which writes directly to the recording file, rather than to any particular user.
    Definition recording.h:62
    +
    The core I/O object of Guacamole.
    Definition socket.h:39
    +
    + + + + diff --git a/doc/1.5.5/libguac/rwlock_8h_source.html b/doc/1.5.5/libguac/rwlock_8h_source.html new file mode 100644 index 000000000..9138ab56e --- /dev/null +++ b/doc/1.5.5/libguac/rwlock_8h_source.html @@ -0,0 +1,141 @@ + + + + + + + +libguac: guacamole/rwlock.h Source File + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    rwlock.h
    +
    +
    +
    1/*
    +
    2 * Licensed to the Apache Software Foundation (ASF) under one
    +
    3 * or more contributor license agreements. See the NOTICE file
    +
    4 * distributed with this work for additional information
    +
    5 * regarding copyright ownership. The ASF licenses this file
    +
    6 * to you under the Apache License, Version 2.0 (the
    +
    7 * "License"); you may not use this file except in compliance
    +
    8 * with the License. You may obtain a copy of the License at
    +
    9 *
    +
    10 * http://www.apache.org/licenses/LICENSE-2.0
    +
    11 *
    +
    12 * Unless required by applicable law or agreed to in writing,
    +
    13 * software distributed under the License is distributed on an
    +
    14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    15 * KIND, either express or implied. See the License for the
    +
    16 * specific language governing permissions and limitations
    +
    17 * under the License.
    +
    18 */
    +
    19
    +
    20#ifndef __GUAC_RWLOCK_H
    +
    21#define __GUAC_RWLOCK_H
    +
    22
    +
    23#include <pthread.h>
    +
    24
    +
    +
    48typedef struct guac_rwlock {
    +
    49
    +
    54 pthread_rwlock_t lock;
    +
    55
    +
    60 pthread_key_t key;
    +
    61
    + +
    +
    63
    +
    71void guac_rwlock_init(guac_rwlock* lock);
    +
    72
    +
    79void guac_rwlock_destroy(guac_rwlock* lock);
    +
    80
    +
    99int guac_rwlock_acquire_write_lock(guac_rwlock* reentrant_rwlock);
    +
    100
    +
    118int guac_rwlock_acquire_read_lock(guac_rwlock* reentrant_rwlock);
    +
    119
    +
    136int guac_rwlock_release_lock(guac_rwlock* reentrant_rwlock);
    +
    137
    +
    138#endif
    +
    139
    +
    This file implements reentrant read-write locks using thread-local storage to keep track of how locks...
    Definition rwlock.h:48
    +
    pthread_rwlock_t lock
    A non-reentrant pthread rwlock to be wrapped by the local lock, functions providing reentrant behavio...
    Definition rwlock.h:54
    +
    pthread_key_t key
    A key to access a thread-local property tracking any ownership of the lock by the current thread.
    Definition rwlock.h:60
    +
    + + + + diff --git a/doc/1.5.5/libguac/search/all_0.js b/doc/1.5.5/libguac/search/all_0.js new file mode 100644 index 000000000..f37c2ec68 --- /dev/null +++ b/doc/1.5.5/libguac/search/all_0.js @@ -0,0 +1,17 @@ +var searchData= +[ + ['ack_5fhandler_0',['ack_handler',['../structguac__stream.html#acd077c7266d10871ee1e07951dfa72ff',1,'guac_stream::ack_handler'],['../structguac__user.html#ad44c1bf6ab56aae0098458a1af2aa6be',1,'guac_user::ack_handler']]], + ['active_1',['active',['../structguac__pool.html#ac22871d5c476ca9a6dd25a2446fa0fd3',1,'guac_pool::active'],['../structguac__user.html#a1b52d918f437923d65e9b3eecb20fcfd',1,'guac_user::active']]], + ['argc_2',['argc',['../structguac__parser.html#a718ce9e60c8414c367ce393cc4e0cffe',1,'guac_parser']]], + ['args_3',['args',['../structguac__client.html#a0e07a8086579ede2c692460998a87cac',1,'guac_client']]], + ['argv_4',['argv',['../structguac__parser.html#a9bd5362b9de8cf2adfcdff2c86bb4701',1,'guac_parser']]], + ['argv_2dconstants_2eh_5',['argv-constants.h',['../argv-constants_8h.html',1,'']]], + ['argv_2dfntypes_2eh_6',['argv-fntypes.h',['../argv-fntypes_8h.html',1,'']]], + ['argv_2eh_7',['argv.h',['../argv_8h.html',1,'']]], + ['argv_5fhandler_8',['argv_handler',['../structguac__user.html#ab6b6bdcd73d29132df5f331921ca287a',1,'guac_user']]], + ['audio_2dfntypes_2eh_9',['audio-fntypes.h',['../audio-fntypes_8h.html',1,'']]], + ['audio_2dtypes_2eh_10',['audio-types.h',['../audio-types_8h.html',1,'']]], + ['audio_2eh_11',['audio.h',['../audio_8h.html',1,'']]], + ['audio_5fhandler_12',['audio_handler',['../structguac__user.html#a391e11605bf5605df3e27f6f7d0e2c69',1,'guac_user']]], + ['audio_5fmimetypes_13',['audio_mimetypes',['../structguac__user__info.html#a043432620dafe7ba38fcd3550fdc7d27',1,'guac_user_info']]] +]; diff --git a/doc/1.5.5/libguac/search/all_1.js b/doc/1.5.5/libguac/search/all_1.js new file mode 100644 index 000000000..54c5ec8fb --- /dev/null +++ b/doc/1.5.5/libguac/search/all_1.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['begin_5fhandler_0',['begin_handler',['../structguac__audio__encoder.html#a43d161556d3d55031ea486cc8b4ce3f6',1,'guac_audio_encoder']]], + ['blob_5fhandler_1',['blob_handler',['../structguac__stream.html#a51122ba04f416d8ce047542c603632f8',1,'guac_stream::blob_handler'],['../structguac__user.html#a88a14fda25c9929269d198d4d602f7fb',1,'guac_user::blob_handler']]], + ['bps_2',['bps',['../structguac__audio__stream.html#a1de1be8874fb844002b92ac1e3813866',1,'guac_audio_stream']]] +]; diff --git a/doc/1.5.5/libguac/search/all_10.js b/doc/1.5.5/libguac/search/all_10.js new file mode 100644 index 000000000..65dfb0425 --- /dev/null +++ b/doc/1.5.5/libguac/search/all_10.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['rate_0',['rate',['../structguac__audio__stream.html#a6810293a6fa915e497d2dd1a643993d9',1,'guac_audio_stream']]], + ['read_5fhandler_1',['read_handler',['../structguac__socket.html#a10042a8e591737aec8d4db5a3423b250',1,'guac_socket']]], + ['recording_2eh_2',['recording.h',['../recording_8h.html',1,'']]] +]; diff --git a/doc/1.5.5/libguac/search/all_11.js b/doc/1.5.5/libguac/search/all_11.js new file mode 100644 index 000000000..505c53275 --- /dev/null +++ b/doc/1.5.5/libguac/search/all_11.js @@ -0,0 +1,20 @@ +var searchData= +[ + ['select_5fhandler_0',['select_handler',['../structguac__socket.html#ad29e7f8a6819ca7bb541e8a947d5bc4f',1,'guac_socket']]], + ['size_5fhandler_1',['size_handler',['../structguac__user.html#a36a2fee906be0898907ba6e4a97bdb9a',1,'guac_user']]], + ['socket_2',['socket',['../structguac__client.html#aa634856fd3c522377ba7345f3308000e',1,'guac_client::socket'],['../structguac__recording.html#af247a939054d3e1da051688e32beebe1',1,'guac_recording::socket'],['../structguac__user.html#a8496638b8c4c52f5f15d483b92becf27',1,'guac_user::socket']]], + ['socket_2dconstants_2eh_3',['socket-constants.h',['../socket-constants_8h.html',1,'']]], + ['socket_2dfntypes_2eh_4',['socket-fntypes.h',['../socket-fntypes_8h.html',1,'']]], + ['socket_2dssl_2eh_5',['socket-ssl.h',['../socket-ssl_8h.html',1,'']]], + ['socket_2dtypes_2eh_6',['socket-types.h',['../socket-types_8h.html',1,'']]], + ['socket_2dwsa_2eh_7',['socket-wsa.h',['../socket-wsa_8h.html',1,'']]], + ['socket_2eh_8',['socket.h',['../socket_8h.html',1,'']]], + ['socket_5flock_9',['socket_lock',['../structguac__socket__ssl__data.html#acf38d321a72a973272ad316d8219d3ee',1,'guac_socket_ssl_data']]], + ['ssl_10',['ssl',['../structguac__socket__ssl__data.html#ab86a780b4801fdbf411a24255cf700ac',1,'guac_socket_ssl_data']]], + ['state_11',['state',['../structguac__client.html#acb3e3f5d0ce5726cdde768f97b473f53',1,'guac_client::state'],['../structguac__parser.html#a2773500f91b3cdb7de7bdea280228054',1,'guac_parser::state'],['../structguac__socket.html#ac2d5236c7e570dfee207511241edaa9b',1,'guac_socket::state']]], + ['stream_12',['stream',['../structguac__audio__stream.html#a4d8f5cfc70ec54b97ba0c4eea596f894',1,'guac_audio_stream']]], + ['stream_2dtypes_2eh_13',['stream-types.h',['../stream-types_8h.html',1,'']]], + ['stream_2eh_14',['stream.h',['../stream_8h.html',1,'']]], + ['string_2eh_15',['string.h',['../string_8h.html',1,'']]], + ['sync_5fhandler_16',['sync_handler',['../structguac__user.html#a209e83f080baf2e84d04cf08395374d2',1,'guac_user']]] +]; diff --git a/doc/1.5.5/libguac/search/all_12.js b/doc/1.5.5/libguac/search/all_12.js new file mode 100644 index 000000000..df005e8c3 --- /dev/null +++ b/doc/1.5.5/libguac/search/all_12.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['timestamp_2dtypes_2eh_0',['timestamp-types.h',['../timestamp-types_8h.html',1,'']]], + ['timestamp_2eh_1',['timestamp.h',['../timestamp_8h.html',1,'']]], + ['timezone_2',['timezone',['../structguac__user__info.html#a2c08990b6fd1e0627652a9c879ea2078',1,'guac_user_info']]], + ['touch_5fhandler_3',['touch_handler',['../structguac__user.html#a61fe90608654b66929a1a8a77e951230',1,'guac_user']]] +]; diff --git a/doc/1.5.5/libguac/search/all_13.js b/doc/1.5.5/libguac/search/all_13.js new file mode 100644 index 000000000..28df2a3ea --- /dev/null +++ b/doc/1.5.5/libguac/search/all_13.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['unicode_2eh_0',['unicode.h',['../unicode_8h.html',1,'']]], + ['unlock_5fhandler_1',['unlock_handler',['../structguac__socket.html#a67be8367b5e1b330ee151b22c692500b',1,'guac_socket']]], + ['user_2dconstants_2eh_2',['user-constants.h',['../user-constants_8h.html',1,'']]], + ['user_2dfntypes_2eh_3',['user-fntypes.h',['../user-fntypes_8h.html',1,'']]], + ['user_2dtypes_2eh_4',['user-types.h',['../user-types_8h.html',1,'']]], + ['user_2eh_5',['user.h',['../user_8h.html',1,'']]], + ['user_5fid_6',['user_id',['../structguac__user.html#aad1c6a8b56d17c12eb1f1e36c4798c70',1,'guac_user']]] +]; diff --git a/doc/1.5.5/libguac/search/all_14.js b/doc/1.5.5/libguac/search/all_14.js new file mode 100644 index 000000000..cbafe4199 --- /dev/null +++ b/doc/1.5.5/libguac/search/all_14.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['value_0',['value',['../structguac__pool__int.html#af76ff5f21c6e0f69d95cdd1385ea24a4',1,'guac_pool_int']]], + ['vguac_5fclient_5fabort_1',['vguac_client_abort',['../client_8h.html#a4c0eccd7d0ed3dbf3e7941ce297e0224',1,'client.h']]], + ['vguac_5fclient_5flog_2',['vguac_client_log',['../client_8h.html#a37a0fa9cfc4c02236085e3852972f494',1,'client.h']]], + ['vguac_5fprotocol_5fsend_5flog_3',['vguac_protocol_send_log',['../protocol_8h.html#a3a783d771e1727ba2a82b2298acf4ee4',1,'protocol.h']]], + ['vguac_5fuser_5fabort_4',['vguac_user_abort',['../user_8h.html#ad8529247b551cb93509236a7f9138dd2',1,'user.h']]], + ['vguac_5fuser_5flog_5',['vguac_user_log',['../user_8h.html#af15509bcb891932a3fa93a142018b95c',1,'user.h']]], + ['video_5fmimetypes_6',['video_mimetypes',['../structguac__user__info.html#ace535bea6879596b6473657f3fc83b57',1,'guac_user_info']]] +]; diff --git a/doc/1.5.5/libguac/search/all_15.js b/doc/1.5.5/libguac/search/all_15.js new file mode 100644 index 000000000..dabe791d1 --- /dev/null +++ b/doc/1.5.5/libguac/search/all_15.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['wol_2dconstants_2eh_0',['wol-constants.h',['../wol-constants_8h.html',1,'']]], + ['wol_2eh_1',['wol.h',['../wol_8h.html',1,'']]], + ['write_5fhandler_2',['write_handler',['../structguac__audio__encoder.html#a1b74c3dd402b0a6afa5f5b9000d02c74',1,'guac_audio_encoder::write_handler'],['../structguac__socket.html#a0f5f24200b0dad4ef1443b863d1bfc7d',1,'guac_socket::write_handler']]] +]; diff --git a/doc/1.5.5/libguac/search/all_2.js b/doc/1.5.5/libguac/search/all_2.js new file mode 100644 index 000000000..d71f7aa54 --- /dev/null +++ b/doc/1.5.5/libguac/search/all_2.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['channels_0',['channels',['../structguac__audio__stream.html#af9d1ad90194e24c2967e2f9f18de0ad6',1,'guac_audio_stream']]], + ['client_1',['client',['../structguac__audio__stream.html#a1771fa5ff88b8f5d4ca4cd5e77a1ffba',1,'guac_audio_stream::client'],['../structguac__user.html#a5e296149a26932dfeb7d8b0bac933ecf',1,'guac_user::client']]], + ['client_2dconstants_2eh_2',['client-constants.h',['../client-constants_8h.html',1,'']]], + ['client_2dfntypes_2eh_3',['client-fntypes.h',['../client-fntypes_8h.html',1,'']]], + ['client_2dtypes_2eh_4',['client-types.h',['../client-types_8h.html',1,'']]], + ['client_2eh_5',['client.h',['../client_8h.html',1,'']]], + ['clipboard_5fhandler_6',['clipboard_handler',['../structguac__user.html#a77f042802092c8bbf4407836f3185343',1,'guac_user']]], + ['connected_5fusers_7',['connected_users',['../structguac__client.html#a73aeff08af6cf6cadd7abce74c7ff4b2',1,'guac_client']]], + ['connection_5fid_8',['connection_id',['../structguac__client.html#ad38b9ded1f04bfe8eb235e551fc08094',1,'guac_client']]], + ['context_9',['context',['../structguac__socket__ssl__data.html#a22b295ba9b80cc15a5dfa4c06aea541f',1,'guac_socket_ssl_data']]] +]; diff --git a/doc/1.5.5/libguac/search/all_3.js b/doc/1.5.5/libguac/search/all_3.js new file mode 100644 index 000000000..a0ff9c953 --- /dev/null +++ b/doc/1.5.5/libguac/search/all_3.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['data_0',['data',['../structguac__audio__stream.html#a9ca03221b02d1206eb698f8ee936c4b7',1,'guac_audio_stream::data'],['../structguac__client.html#a0569bc7eea8d37b5bd95bcd3821ca0a3',1,'guac_client::data'],['../structguac__object.html#ac9ca62cec5ba1124f8272da3adf7c44e',1,'guac_object::data'],['../structguac__socket.html#ac8340e5627b43138bb50aac6c4368c0d',1,'guac_socket::data'],['../structguac__stream.html#acdf20063ca408431862d901c9445b429',1,'guac_stream::data'],['../structguac__user.html#ad424a52c5d996e4a33de5dad61555883',1,'guac_user::data']]], + ['deprecated_20list_1',['Deprecated List',['../deprecated.html',1,'']]] +]; diff --git a/doc/1.5.5/libguac/search/all_4.js b/doc/1.5.5/libguac/search/all_4.js new file mode 100644 index 000000000..5db020de9 --- /dev/null +++ b/doc/1.5.5/libguac/search/all_4.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['encoder_0',['encoder',['../structguac__audio__stream.html#af3b4811ba5a4f1a337d338777fe9049d',1,'guac_audio_stream']]], + ['end_5fhandler_1',['end_handler',['../structguac__audio__encoder.html#a6fbc4f8efe14c9a119fdfaaef78f7e92',1,'guac_audio_encoder::end_handler'],['../structguac__stream.html#a96fef1b691d5c5ebaf78bff6df3b01db',1,'guac_stream::end_handler'],['../structguac__user.html#a793f7ef1cd818c296e7a5801c349f5ed',1,'guac_user::end_handler']]], + ['error_2dtypes_2eh_2',['error-types.h',['../error-types_8h.html',1,'']]], + ['error_2eh_3',['error.h',['../error_8h.html',1,'']]] +]; diff --git a/doc/1.5.5/libguac/search/all_5.js b/doc/1.5.5/libguac/search/all_5.js new file mode 100644 index 000000000..60b7b9464 --- /dev/null +++ b/doc/1.5.5/libguac/search/all_5.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['fd_0',['fd',['../structguac__socket__ssl__data.html#a4b6134fe4c41d78e42abbe5d8c27330a',1,'guac_socket_ssl_data']]], + ['file_5fhandler_1',['file_handler',['../structguac__user.html#a8b958a20fbe7cf082d5ee074fceac474',1,'guac_user']]], + ['flush_5fhandler_2',['flush_handler',['../structguac__audio__encoder.html#aef4ad4f1c298ac8e11fa69f13347c5a0',1,'guac_audio_encoder::flush_handler'],['../structguac__socket.html#afc6ff82e38b84c9e876fd797aafedd1b',1,'guac_socket::flush_handler']]], + ['free_5fhandler_3',['free_handler',['../structguac__client.html#a79e29c931fd448cf51f7153fea064169',1,'guac_client::free_handler'],['../structguac__socket.html#a1044cde496cfe11c914c623dc1e29678',1,'guac_socket::free_handler']]] +]; diff --git a/doc/1.5.5/libguac/search/all_6.js b/doc/1.5.5/libguac/search/all_6.js new file mode 100644 index 000000000..9926c0f3d --- /dev/null +++ b/doc/1.5.5/libguac/search/all_6.js @@ -0,0 +1,360 @@ +var searchData= +[ + ['get_5fhandler_0',['get_handler',['../structguac__object.html#a0e86747e4f1265935310f0df3a7f4b21',1,'guac_object::get_handler'],['../structguac__user.html#ada73c04bbf06de4280f2d7679190a19b',1,'guac_user::get_handler']]], + ['guac_5fargv_5fawait_1',['guac_argv_await',['../argv_8h.html#a3390cfa416876991fcaf08871160415d',1,'argv.h']]], + ['guac_5fargv_5fcallback_2',['guac_argv_callback',['../argv-fntypes_8h.html#a760d238328c8ac471f71dbe3559949d6',1,'argv-fntypes.h']]], + ['guac_5fargv_5fhandler_3',['guac_argv_handler',['../argv_8h.html#a8fe9c1813c0264dd8d9d598432ebc79c',1,'argv.h']]], + ['guac_5fargv_5fmax_5flength_4',['GUAC_ARGV_MAX_LENGTH',['../argv-constants_8h.html#abd92a32fe9b7619580d50dbeaed8577d',1,'argv-constants.h']]], + ['guac_5fargv_5fmax_5fmimetype_5flength_5',['GUAC_ARGV_MAX_MIMETYPE_LENGTH',['../argv-constants_8h.html#a9e06672efd6fd7d2353d531be842d431',1,'argv-constants.h']]], + ['guac_5fargv_5fmax_5fname_5flength_6',['GUAC_ARGV_MAX_NAME_LENGTH',['../argv-constants_8h.html#aabc731c011c87d8db3580baa2f893b87',1,'argv-constants.h']]], + ['guac_5fargv_5fmax_5fregistered_7',['GUAC_ARGV_MAX_REGISTERED',['../argv-constants_8h.html#a69d1917b4f8b6d91b6b6ae17feaac99f',1,'argv-constants.h']]], + ['guac_5fargv_5foption_5fecho_8',['GUAC_ARGV_OPTION_ECHO',['../argv-constants_8h.html#a851551c2d9daf9b473da25aa32693e0e',1,'argv-constants.h']]], + ['guac_5fargv_5foption_5fonce_9',['GUAC_ARGV_OPTION_ONCE',['../argv-constants_8h.html#a4d2cae4a9598d24401fdc0067e879029',1,'argv-constants.h']]], + ['guac_5fargv_5freceived_10',['guac_argv_received',['../argv_8h.html#adb02a115909eed11fcf0d864de04ea8d',1,'argv.h']]], + ['guac_5fargv_5fregister_11',['guac_argv_register',['../argv_8h.html#abc25c66eecc88d82851aab121f93f599',1,'argv.h']]], + ['guac_5fargv_5fstop_12',['guac_argv_stop',['../argv_8h.html#a600211a457a9db1ad0741b13d0179d33',1,'argv.h']]], + ['guac_5faudio_5fencoder_13',['guac_audio_encoder',['../structguac__audio__encoder.html',1,'']]], + ['guac_5faudio_5fencoder_5fbegin_5fhandler_14',['guac_audio_encoder_begin_handler',['../audio-fntypes_8h.html#a0b14abed1928c4e00129c7b87e391816',1,'audio-fntypes.h']]], + ['guac_5faudio_5fencoder_5fend_5fhandler_15',['guac_audio_encoder_end_handler',['../audio-fntypes_8h.html#aa29dc3999c06e82c20d7a5e5d1e1565d',1,'audio-fntypes.h']]], + ['guac_5faudio_5fencoder_5fflush_5fhandler_16',['guac_audio_encoder_flush_handler',['../audio-fntypes_8h.html#a8736cc2b634df9c222cf09dcc6507162',1,'audio-fntypes.h']]], + ['guac_5faudio_5fencoder_5fjoin_5fhandler_17',['guac_audio_encoder_join_handler',['../audio-fntypes_8h.html#a9d1fac87cc2ee072112d9d65d43ae70e',1,'audio-fntypes.h']]], + ['guac_5faudio_5fencoder_5fwrite_5fhandler_18',['guac_audio_encoder_write_handler',['../audio-fntypes_8h.html#a57fe16e56c1c115b2321e50b9d9ce11a',1,'audio-fntypes.h']]], + ['guac_5faudio_5fstream_19',['guac_audio_stream',['../structguac__audio__stream.html',1,'']]], + ['guac_5faudio_5fstream_5fadd_5fuser_20',['guac_audio_stream_add_user',['../audio_8h.html#a2b8e2f05a19b137454832a5dbc6c3864',1,'audio.h']]], + ['guac_5faudio_5fstream_5falloc_21',['guac_audio_stream_alloc',['../audio_8h.html#a67e64fe3ad44337fe5d2edfac23ef92d',1,'audio.h']]], + ['guac_5faudio_5fstream_5fflush_22',['guac_audio_stream_flush',['../audio_8h.html#af75feccacea2b14ee946064cf623f143',1,'audio.h']]], + ['guac_5faudio_5fstream_5ffree_23',['guac_audio_stream_free',['../audio_8h.html#adcc872292b5ba6c39905610b2bccbf31',1,'audio.h']]], + ['guac_5faudio_5fstream_5freset_24',['guac_audio_stream_reset',['../audio_8h.html#a0bbd483b1bfe5eede15539a0aacfedad',1,'audio.h']]], + ['guac_5faudio_5fstream_5fwrite_5fpcm_25',['guac_audio_stream_write_pcm',['../audio_8h.html#a11bdfee60584106ba85d97a3f8273cc2',1,'audio.h']]], + ['guac_5fbuffer_5fpool_5finitial_5fsize_26',['GUAC_BUFFER_POOL_INITIAL_SIZE',['../client-constants_8h.html#aa8a296e1032ff408ab141b0765fb9bfb',1,'client-constants.h']]], + ['guac_5fclient_27',['guac_client',['../structguac__client.html',1,'']]], + ['guac_5fclient_5fabort_28',['guac_client_abort',['../client_8h.html#a62a29f7820deaff00a10ec79aa81aed4',1,'client.h']]], + ['guac_5fclient_5fadd_5fuser_29',['guac_client_add_user',['../client_8h.html#af66d105dfd1453ec46b423e6b25fa371',1,'client.h']]], + ['guac_5fclient_5falloc_30',['guac_client_alloc',['../client_8h.html#ae0e9671c78de15dd05476565a7275408',1,'client.h']]], + ['guac_5fclient_5falloc_5fbuffer_31',['guac_client_alloc_buffer',['../client_8h.html#a597e311d0dbec67fc4c62afd4068682c',1,'client.h']]], + ['guac_5fclient_5falloc_5flayer_32',['guac_client_alloc_layer',['../client_8h.html#a5cb751861ac7591fd67bb0922bea789d',1,'client.h']]], + ['guac_5fclient_5falloc_5fstream_33',['guac_client_alloc_stream',['../client_8h.html#a4a6162122be6d34fde65c6f2b0235dc3',1,'client.h']]], + ['guac_5fclient_5fclosed_5fstream_5findex_34',['GUAC_CLIENT_CLOSED_STREAM_INDEX',['../client-constants_8h.html#a6fda25106c4c454c22db2c7e042ee142',1,'client-constants.h']]], + ['guac_5fclient_5fend_5fframe_35',['guac_client_end_frame',['../client_8h.html#a686fc65f5b1afcc3f3b53e36cd1a2ebc',1,'client.h']]], + ['guac_5fclient_5ffor_5fowner_36',['guac_client_for_owner',['../client_8h.html#a812bbf063bfc147bb71ed90de0684eea',1,'client.h']]], + ['guac_5fclient_5ffor_5fuser_37',['guac_client_for_user',['../client_8h.html#ac7e08a2af6d44a8e05f208499319f972',1,'client.h']]], + ['guac_5fclient_5fforeach_5fpending_5fuser_38',['guac_client_foreach_pending_user',['../client_8h.html#a7f2dc10c9d3b11917a9cdbbac41091a0',1,'client.h']]], + ['guac_5fclient_5fforeach_5fuser_39',['guac_client_foreach_user',['../client_8h.html#af652f3db0f89d488cef6d90f612a2077',1,'client.h']]], + ['guac_5fclient_5ffree_40',['guac_client_free',['../client_8h.html#a76cdc454a23fdcbb70d56f923f6b6427',1,'client.h']]], + ['guac_5fclient_5ffree_5fbuffer_41',['guac_client_free_buffer',['../client_8h.html#afc03a32b3113d9a95700cac54f1cbd4b',1,'client.h']]], + ['guac_5fclient_5ffree_5fhandler_42',['guac_client_free_handler',['../client-fntypes_8h.html#a7f8c6986f3db9818d016eee6fa562577',1,'client-fntypes.h']]], + ['guac_5fclient_5ffree_5flayer_43',['guac_client_free_layer',['../client_8h.html#a4e5b374211012d1897792335112dcb89',1,'client.h']]], + ['guac_5fclient_5ffree_5fstream_44',['guac_client_free_stream',['../client_8h.html#af0103a5aae8ba76badd2e68e827f6782',1,'client.h']]], + ['guac_5fclient_5fget_5fprocessing_5flag_45',['guac_client_get_processing_lag',['../client_8h.html#aa2b94b3145fcebf2d7b1999df11d0b2c',1,'client.h']]], + ['guac_5fclient_5fid_5fprefix_46',['GUAC_CLIENT_ID_PREFIX',['../client-constants_8h.html#a8e2b48136e5c358e012a1558d5e5f0c2',1,'client-constants.h']]], + ['guac_5fclient_5finit_5fhandler_47',['guac_client_init_handler',['../client-fntypes_8h.html#a905b087a47315e1836293839daf1f46c',1,'client-fntypes.h']]], + ['guac_5fclient_5fjoin_5fpending_5fhandler_48',['guac_client_join_pending_handler',['../client-fntypes_8h.html#aabbb564db607119e1714cbd1a494fc30',1,'client-fntypes.h']]], + ['guac_5fclient_5fload_5fplugin_49',['guac_client_load_plugin',['../client_8h.html#afa2b90d686c56cf753c36718ec085f35',1,'client.h']]], + ['guac_5fclient_5flog_50',['guac_client_log',['../client_8h.html#ad53666bbe29346497cabb04fc9628208',1,'client.h']]], + ['guac_5fclient_5flog_5fhandler_51',['guac_client_log_handler',['../client-fntypes_8h.html#a23837e22dbfe152719d596e6918bad3c',1,'client-fntypes.h']]], + ['guac_5fclient_5flog_5flevel_52',['guac_client_log_level',['../client-types_8h.html#adfeeb4ff06541220c91ce3401d840727',1,'client-types.h']]], + ['guac_5fclient_5fmax_5fstreams_53',['GUAC_CLIENT_MAX_STREAMS',['../client-constants_8h.html#ad9f977643c5ffee5c1eeb426664796a1',1,'client-constants.h']]], + ['guac_5fclient_5fmouse_5fleft_54',['GUAC_CLIENT_MOUSE_LEFT',['../client-constants_8h.html#a4bb4f5b852ac8c3e2d3c89cd5e63efd2',1,'client-constants.h']]], + ['guac_5fclient_5fmouse_5fmiddle_55',['GUAC_CLIENT_MOUSE_MIDDLE',['../client-constants_8h.html#ad14c5f1800aac863bbebcd676c5c2124',1,'client-constants.h']]], + ['guac_5fclient_5fmouse_5fright_56',['GUAC_CLIENT_MOUSE_RIGHT',['../client-constants_8h.html#a88917d2d7143a483c219eee62fd6317f',1,'client-constants.h']]], + ['guac_5fclient_5fmouse_5fscroll_5fdown_57',['GUAC_CLIENT_MOUSE_SCROLL_DOWN',['../client-constants_8h.html#a771231574e9d303aa08fc1cecc9069f0',1,'client-constants.h']]], + ['guac_5fclient_5fmouse_5fscroll_5fup_58',['GUAC_CLIENT_MOUSE_SCROLL_UP',['../client-constants_8h.html#a134afd8a0d8f10a34af51fc70981e39d',1,'client-constants.h']]], + ['guac_5fclient_5fowner_5fnotify_5fjoin_59',['guac_client_owner_notify_join',['../client_8h.html#a4c51bb46159398910db2dac4660b735a',1,'client.h']]], + ['guac_5fclient_5fowner_5fnotify_5fleave_60',['guac_client_owner_notify_leave',['../client_8h.html#ad17cc55d4bb3162e3c544dc8aecf5c62',1,'client.h']]], + ['guac_5fclient_5fowner_5fsend_5frequired_61',['guac_client_owner_send_required',['../client_8h.html#aef81b4409308c195d26db3443e9e76fe',1,'client.h']]], + ['guac_5fclient_5fowner_5fsupports_5fmsg_62',['guac_client_owner_supports_msg',['../client_8h.html#a1fefd4006b7de5792920a8dd9da87f87',1,'client.h']]], + ['guac_5fclient_5fowner_5fsupports_5frequired_63',['guac_client_owner_supports_required',['../client_8h.html#a347fdf77fb6e0829f00513e6b4da406f',1,'client.h']]], + ['guac_5fclient_5fremove_5fuser_64',['guac_client_remove_user',['../client_8h.html#a02832d5be5330dc3de524b497b7c6dfa',1,'client.h']]], + ['guac_5fclient_5frunning_65',['GUAC_CLIENT_RUNNING',['../client-types_8h.html#a6f7e91d6dcb20598953948f077910c3bad1ddb6f9bcfcd89a9d8522acfd74d2b0',1,'client-types.h']]], + ['guac_5fclient_5fstate_66',['guac_client_state',['../client-types_8h.html#a6f7e91d6dcb20598953948f077910c3b',1,'client-types.h']]], + ['guac_5fclient_5fstop_67',['guac_client_stop',['../client_8h.html#a022d4b5587c84f2963b176ab7999aa1b',1,'client.h']]], + ['guac_5fclient_5fstopping_68',['GUAC_CLIENT_STOPPING',['../client-types_8h.html#a6f7e91d6dcb20598953948f077910c3ba5a21704bd35c396c4c640e0b1fc0c8fd',1,'client-types.h']]], + ['guac_5fclient_5fstream_5fargv_69',['guac_client_stream_argv',['../client_8h.html#a6c9d8717d4b8eaa50dbd7301af27a06f',1,'client.h']]], + ['guac_5fclient_5fstream_5fjpeg_70',['guac_client_stream_jpeg',['../client_8h.html#aa51ede155ad7777bc8d2e82aa6e779bf',1,'client.h']]], + ['guac_5fclient_5fstream_5fpng_71',['guac_client_stream_png',['../client_8h.html#a317b9d79afd0b0b473d7d359e0c33750',1,'client.h']]], + ['guac_5fclient_5fstream_5fwebp_72',['guac_client_stream_webp',['../client_8h.html#a55adbd5ee8f27c4df4394dbb5bf9416e',1,'client.h']]], + ['guac_5fclient_5fsupports_5fwebp_73',['guac_client_supports_webp',['../client_8h.html#a79cc74558e8f64807ea2847fbacd20e3',1,'client.h']]], + ['guac_5fcommon_5frecording_5fmax_5fname_5flength_74',['GUAC_COMMON_RECORDING_MAX_NAME_LENGTH',['../recording_8h.html#a1e16325caf669bc5ce4d70e81aa43e2f',1,'recording.h']]], + ['guac_5fcommon_5frecording_5fmax_5fsuffix_75',['GUAC_COMMON_RECORDING_MAX_SUFFIX',['../recording_8h.html#a7a08273eba73d8488b5807bcae228141',1,'recording.h']]], + ['guac_5fcommon_5frecording_5fmax_5fsuffix_5flength_76',['GUAC_COMMON_RECORDING_MAX_SUFFIX_LENGTH',['../recording_8h.html#a9f6e18fb05bfa6ef08a0329667b919af',1,'recording.h']]], + ['guac_5fcomposite_5fmode_77',['guac_composite_mode',['../protocol-types_8h.html#a93612063886db58071d02b5393abf186',1,'protocol-types.h']]], + ['guac_5fdefault_5flayer_78',['GUAC_DEFAULT_LAYER',['../client_8h.html#a336a485c006394d5eea88bf6d8d422d8',1,'client.h']]], + ['guac_5ferror_79',['guac_error',['../error_8h.html#a44aa5f7b9e896438fcdf16fe7feefd07',1,'guac_error: error.h'],['../error_8h.html#a44aa5f7b9e896438fcdf16fe7feefd07',1,'guac_error: error.h']]], + ['guac_5ferror_5fmessage_80',['guac_error_message',['../error_8h.html#a96ab3903ba0e97c745e8bfb006e123cd',1,'guac_error_message: error.h'],['../error_8h.html#a96ab3903ba0e97c745e8bfb006e123cd',1,'guac_error_message: error.h']]], + ['guac_5fhash_5fsurface_81',['guac_hash_surface',['../hash_8h.html#ae8243122fb0b158a22058f9dbd2bbc0c',1,'hash.h']]], + ['guac_5finstruction_5fmax_5fdigits_82',['GUAC_INSTRUCTION_MAX_DIGITS',['../parser-constants_8h.html#a408e5069154be109ad3dcf45cbc0b00f',1,'parser-constants.h']]], + ['guac_5finstruction_5fmax_5felements_83',['GUAC_INSTRUCTION_MAX_ELEMENTS',['../parser-constants_8h.html#a6f314dc5700812ca93ff132a15b86a46',1,'parser-constants.h']]], + ['guac_5finstruction_5fmax_5flength_84',['GUAC_INSTRUCTION_MAX_LENGTH',['../parser-constants_8h.html#a6cb4157503008653c5200ea640fe8744',1,'parser-constants.h']]], + ['guac_5flayer_85',['guac_layer',['../structguac__layer.html',1,'']]], + ['guac_5fline_5fcap_5fstyle_86',['guac_line_cap_style',['../protocol-types_8h.html#a4a0205f8ee2e29e1a4d78da74ab58efc',1,'protocol-types.h']]], + ['guac_5fline_5fjoin_5fstyle_87',['guac_line_join_style',['../protocol-types_8h.html#a6333200b3ff1634e0cb1826b271438b1',1,'protocol-types.h']]], + ['guac_5flog_5fdebug_88',['GUAC_LOG_DEBUG',['../client-types_8h.html#adfeeb4ff06541220c91ce3401d840727a070794a24cef7ef430b2edaff3c9ea9b',1,'client-types.h']]], + ['guac_5flog_5ferror_89',['GUAC_LOG_ERROR',['../client-types_8h.html#adfeeb4ff06541220c91ce3401d840727a4fd231414f22c9a104106ddaf2b12c2c',1,'client-types.h']]], + ['guac_5flog_5finfo_90',['GUAC_LOG_INFO',['../client-types_8h.html#adfeeb4ff06541220c91ce3401d840727aedc7d68f866aa570a055a88030d36b29',1,'client-types.h']]], + ['guac_5flog_5ftrace_91',['GUAC_LOG_TRACE',['../client-types_8h.html#adfeeb4ff06541220c91ce3401d840727ab507f156c21f790e9311c6c19f8a79eb',1,'client-types.h']]], + ['guac_5flog_5fwarning_92',['GUAC_LOG_WARNING',['../client-types_8h.html#adfeeb4ff06541220c91ce3401d840727a24865770a939aa238cd69cd7f11205be',1,'client-types.h']]], + ['guac_5fmem_5falloc_93',['guac_mem_alloc',['../mem_8h.html#a4bb1a3a4a576b07b46b7326435e19cc5',1,'mem.h']]], + ['guac_5fmem_5fckd_5fadd_94',['guac_mem_ckd_add',['../mem_8h.html#a80d61800f2ad718485fbfa959784f172',1,'mem.h']]], + ['guac_5fmem_5fckd_5fadd_5for_5fdie_95',['guac_mem_ckd_add_or_die',['../mem_8h.html#a57af96611f73a3f2300ba9fd64b0167a',1,'mem.h']]], + ['guac_5fmem_5fckd_5fmul_96',['guac_mem_ckd_mul',['../mem_8h.html#ae47dabfecd807b320fa8ca35b836c3ed',1,'mem.h']]], + ['guac_5fmem_5fckd_5fmul_5for_5fdie_97',['guac_mem_ckd_mul_or_die',['../mem_8h.html#a2ea1730f0b59705fcd6e8ce58fa6e244',1,'mem.h']]], + ['guac_5fmem_5fckd_5fsub_98',['guac_mem_ckd_sub',['../mem_8h.html#aa7f393eafbe5d770cddac0821b69a74c',1,'mem.h']]], + ['guac_5fmem_5fckd_5fsub_5for_5fdie_99',['guac_mem_ckd_sub_or_die',['../mem_8h.html#acfbd36b5c5601983cf87a67a4e0b7fc9',1,'mem.h']]], + ['guac_5fmem_5ffree_100',['guac_mem_free',['../mem_8h.html#aca926fbc99ae497f093235f787b5b328',1,'mem.h']]], + ['guac_5fmem_5ffree_5fconst_101',['guac_mem_free_const',['../mem_8h.html#a3af8ba72e97f84fbd7600be04cc6bf39',1,'mem.h']]], + ['guac_5fmem_5frealloc_102',['guac_mem_realloc',['../mem_8h.html#a57937a45796bf46eb8d3945f8eecc201',1,'mem.h']]], + ['guac_5fmem_5frealloc_5for_5fdie_103',['guac_mem_realloc_or_die',['../mem_8h.html#a1bf838d4e8ca2397170fa71a675192ba',1,'mem.h']]], + ['guac_5fmem_5fzalloc_104',['guac_mem_zalloc',['../mem_8h.html#a03391fbf6e9bababa2acc8d2094f42d2',1,'mem.h']]], + ['guac_5fmessage_5ftype_105',['guac_message_type',['../protocol-types_8h.html#ad1a58d77e6383cdf3796b2b3a5d45ff3',1,'protocol-types.h']]], + ['guac_5fmessage_5fuser_5fjoined_106',['GUAC_MESSAGE_USER_JOINED',['../protocol-types_8h.html#ad1a58d77e6383cdf3796b2b3a5d45ff3a9ab734040cf7e3256a7b447648ca31da',1,'protocol-types.h']]], + ['guac_5fmessage_5fuser_5fleft_107',['GUAC_MESSAGE_USER_LEFT',['../protocol-types_8h.html#ad1a58d77e6383cdf3796b2b3a5d45ff3a68026bc3f9747bba767f7e57ad1d51f0',1,'protocol-types.h']]], + ['guac_5fobject_108',['guac_object',['../structguac__object.html',1,'']]], + ['guac_5fparse_5fcomplete_109',['GUAC_PARSE_COMPLETE',['../parser-types_8h.html#a842bb8c1d5569ebebae3fdadb2527f30ac2f96a86cbe8d0f5db5efc09da4580cf',1,'parser-types.h']]], + ['guac_5fparse_5fcontent_110',['GUAC_PARSE_CONTENT',['../parser-types_8h.html#a842bb8c1d5569ebebae3fdadb2527f30a324af2c7faab24fd596a2a646bf8b55e',1,'parser-types.h']]], + ['guac_5fparse_5ferror_111',['GUAC_PARSE_ERROR',['../parser-types_8h.html#a842bb8c1d5569ebebae3fdadb2527f30ace4ab12c05611f0dbc5260430812b0bc',1,'parser-types.h']]], + ['guac_5fparse_5flength_112',['GUAC_PARSE_LENGTH',['../parser-types_8h.html#a842bb8c1d5569ebebae3fdadb2527f30ad3301ee4914616a122a999a6f28910cc',1,'parser-types.h']]], + ['guac_5fparse_5fstate_113',['guac_parse_state',['../parser-types_8h.html#a842bb8c1d5569ebebae3fdadb2527f30',1,'parser-types.h']]], + ['guac_5fparser_114',['guac_parser',['../structguac__parser.html',1,'']]], + ['guac_5fparser_5falloc_115',['guac_parser_alloc',['../parser_8h.html#a36ad81a0d47f1266160bc1691de1635e',1,'parser.h']]], + ['guac_5fparser_5fappend_116',['guac_parser_append',['../parser_8h.html#ab1ca22b7bf9c232cce0d122f03dc183d',1,'parser.h']]], + ['guac_5fparser_5fexpect_117',['guac_parser_expect',['../parser_8h.html#ac54c94465aead463ce10e9a090b9b701',1,'parser.h']]], + ['guac_5fparser_5ffree_118',['guac_parser_free',['../parser_8h.html#ad3b7d4df1ca25c5bced1c08b329f0a0f',1,'parser.h']]], + ['guac_5fparser_5flength_119',['guac_parser_length',['../parser_8h.html#a8899dd607997fcffd78517947b17760b',1,'parser.h']]], + ['guac_5fparser_5fread_120',['guac_parser_read',['../parser_8h.html#a8a1169f5040732e4f4b55ee6c1e1fe93',1,'parser.h']]], + ['guac_5fparser_5fshift_121',['guac_parser_shift',['../parser_8h.html#a56e7b2a85abdb6cb4ec4bd6e47a92ed3',1,'parser.h']]], + ['guac_5fpool_122',['guac_pool',['../structguac__pool.html',1,'']]], + ['guac_5fpool_5falloc_123',['guac_pool_alloc',['../pool_8h.html#a6b0352a9634fd985f6828b8ba7b8ee7b',1,'pool.h']]], + ['guac_5fpool_5ffree_124',['guac_pool_free',['../pool_8h.html#a7015e5939617ab7e55477ba0a4f85bdb',1,'pool.h']]], + ['guac_5fpool_5ffree_5fint_125',['guac_pool_free_int',['../pool_8h.html#ad90069a41689cf319f46af44bb113579',1,'pool.h']]], + ['guac_5fpool_5fint_126',['guac_pool_int',['../structguac__pool__int.html',1,'']]], + ['guac_5fpool_5fnext_5fint_127',['guac_pool_next_int',['../pool_8h.html#abe3c79e0fec121e3d1b1d3ce37aa45f4',1,'pool.h']]], + ['guac_5fprotocol_5fblob_5fmax_5flength_128',['GUAC_PROTOCOL_BLOB_MAX_LENGTH',['../protocol-constants_8h.html#af5dd5c766aeebead268d0daa6c8c2166',1,'protocol-constants.h']]], + ['guac_5fprotocol_5fdecode_5fbase64_129',['guac_protocol_decode_base64',['../protocol_8h.html#a0ad7d9b8b205d6fc368eff2d9e8e40ec',1,'protocol.h']]], + ['guac_5fprotocol_5flayer_5fparameter_5fmulti_5ftouch_130',['GUAC_PROTOCOL_LAYER_PARAMETER_MULTI_TOUCH',['../protocol-constants_8h.html#a78c3f4305edf37fa789c1f2a77be50fd',1,'protocol-constants.h']]], + ['guac_5fprotocol_5flibrary_5flimit_131',['GUAC_PROTOCOL_LIBRARY_LIMIT',['../plugin-constants_8h.html#a03c00580f4455d35c1ed33ed4dcfe2fe',1,'plugin-constants.h']]], + ['guac_5fprotocol_5flibrary_5fprefix_132',['GUAC_PROTOCOL_LIBRARY_PREFIX',['../plugin-constants_8h.html#ac328a06358d3e07e10999e556f77c05a',1,'plugin-constants.h']]], + ['guac_5fprotocol_5flibrary_5fsuffix_133',['GUAC_PROTOCOL_LIBRARY_SUFFIX',['../plugin-constants_8h.html#af3601bb5aaa3ca309987f70bd48005fd',1,'plugin-constants.h']]], + ['guac_5fprotocol_5fname_5flimit_134',['GUAC_PROTOCOL_NAME_LIMIT',['../plugin-constants_8h.html#a4ce2e3a2b6be66e9ab382fb8d2ab2621',1,'plugin-constants.h']]], + ['guac_5fprotocol_5fsend_5fack_135',['guac_protocol_send_ack',['../protocol_8h.html#ab02be6102d9f4aaa2bbb0b249f09d63e',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5farc_136',['guac_protocol_send_arc',['../protocol_8h.html#ad74bc43b5f03b79027bf02d873cd77b3',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fargs_137',['guac_protocol_send_args',['../protocol_8h.html#a6047d380b097ebc7d5f35b167e3419e6',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fargv_138',['guac_protocol_send_argv',['../protocol_8h.html#aaddd6d7c6ab1289efb3dd38c39bde531',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5faudio_139',['guac_protocol_send_audio',['../protocol_8h.html#ab92edb38a4df2db402a013422cee6b42',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fblob_140',['guac_protocol_send_blob',['../protocol_8h.html#a798d57ec3f3cdfa0d9bb4906f02d5127',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fblobs_141',['guac_protocol_send_blobs',['../protocol_8h.html#ad4b3d3b5741b377a197c02384e4b870e',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fbody_142',['guac_protocol_send_body',['../protocol_8h.html#aca9fb516e730233c33da297819f7ae7e',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fcfill_143',['guac_protocol_send_cfill',['../protocol_8h.html#afda3a1a8285e323fca6aef50cb2feb5e',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fclip_144',['guac_protocol_send_clip',['../protocol_8h.html#acbd1869635b752bbf52998613804df00',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fclipboard_145',['guac_protocol_send_clipboard',['../protocol_8h.html#a7e8a055e57afbcd9c9b520767d9a1c64',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fclose_146',['guac_protocol_send_close',['../protocol_8h.html#a45a3e4e32900594e17c49db6939fc10a',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fconnect_147',['guac_protocol_send_connect',['../protocol_8h.html#ac8dea4393e2ec69d5d27fd0759a70fcb',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fcopy_148',['guac_protocol_send_copy',['../protocol_8h.html#ad035df3781dc19ba2330b02ef1dd6eda',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fcstroke_149',['guac_protocol_send_cstroke',['../protocol_8h.html#ac6f28f1beb2fa07e1b3f6fa774789fd9',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fcursor_150',['guac_protocol_send_cursor',['../protocol_8h.html#a17da53514189083fa84aa3cc0bf6883a',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fcurve_151',['guac_protocol_send_curve',['../protocol_8h.html#a1b9985b080a339dcd14b95f5e46e8ab5',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fdisconnect_152',['guac_protocol_send_disconnect',['../protocol_8h.html#afd463766036afda4798edbe788d29524',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fdispose_153',['guac_protocol_send_dispose',['../protocol_8h.html#a7b2456a017f772a39be6d33a5da9149d',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fdistort_154',['guac_protocol_send_distort',['../protocol_8h.html#a6b4cdd9133dbdca8cfc1e78a0d6bdf13',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fend_155',['guac_protocol_send_end',['../protocol_8h.html#ae1bb569878a14efecccc0c05757d1cae',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5ferror_156',['guac_protocol_send_error',['../protocol_8h.html#abe696ca7c9841883c5d5bea513d4ee9a',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5ffile_157',['guac_protocol_send_file',['../protocol_8h.html#a453e1b22d63a9d07ba23b3a6726c2f06',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5ffilesystem_158',['guac_protocol_send_filesystem',['../protocol_8h.html#a3779c2287625af70fb001afbcc739da5',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fidentity_159',['guac_protocol_send_identity',['../protocol_8h.html#aac205e52801a875bfbef02ae237b6b15',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fimg_160',['guac_protocol_send_img',['../protocol_8h.html#afda8074f65d35795203f392f6688163e',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fkey_161',['guac_protocol_send_key',['../protocol_8h.html#a2d276595cea8a2d382240d868487f077',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5flfill_162',['guac_protocol_send_lfill',['../protocol_8h.html#a9271e3b6cc0030b833d18137969a4018',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fline_163',['guac_protocol_send_line',['../protocol_8h.html#afac3f57649c20b5e39c484a52d264005',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5flog_164',['guac_protocol_send_log',['../protocol_8h.html#a6f832f5b814129d2819f115d84da3cd0',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5flstroke_165',['guac_protocol_send_lstroke',['../protocol_8h.html#a5b7d621d534126e26178789800a1a5d5',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fmouse_166',['guac_protocol_send_mouse',['../protocol_8h.html#a8947056262da2f3263b9851370597622',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fmove_167',['guac_protocol_send_move',['../protocol_8h.html#ac7409451b0f2b18dc870d347545c9afd',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fmsg_168',['guac_protocol_send_msg',['../protocol_8h.html#a0e28f4a746af298f410c84929f39eebd',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fname_169',['guac_protocol_send_name',['../protocol_8h.html#a481fbaab3b8e72505df752ac2f6cc59e',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fnest_170',['guac_protocol_send_nest',['../protocol_8h.html#a94efa63c9895383e142a3f7ce559300b',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fnop_171',['guac_protocol_send_nop',['../protocol_8h.html#a8fa17d3aa1270b806ac6a386798c6d41',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fpipe_172',['guac_protocol_send_pipe',['../protocol_8h.html#a18b2c462077b7c51d211f3db09c30292',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fpop_173',['guac_protocol_send_pop',['../protocol_8h.html#ab29ab6edd91e954fd686742c92eab6d4',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fpush_174',['guac_protocol_send_push',['../protocol_8h.html#a9db04720cbb2bc972f48f2e9332f23a8',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fready_175',['guac_protocol_send_ready',['../protocol_8h.html#a102b7719fbd9c8ea0eb2dc4f51e26359',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5frect_176',['guac_protocol_send_rect',['../protocol_8h.html#a42dc3db797b83accd3418b76648adac5',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5frequired_177',['guac_protocol_send_required',['../protocol_8h.html#abd34768cdcdf71ad40acc0f02cc77ed1',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5freset_178',['guac_protocol_send_reset',['../protocol_8h.html#a5f6433cc21bc043c57fb7c468428373a',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fselect_179',['guac_protocol_send_select',['../protocol_8h.html#a8757c7870e648b220dbc76b8292fe5cf',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fset_180',['guac_protocol_send_set',['../protocol_8h.html#aa3750a6c0fbf190fb71a6ab0955cb31a',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fset_5fint_181',['guac_protocol_send_set_int',['../protocol_8h.html#a48774aa73feb8951367dfb4a313fd50b',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fshade_182',['guac_protocol_send_shade',['../protocol_8h.html#a0e72a4122a3a7c45fa21e0d5607cc4d5',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fsize_183',['guac_protocol_send_size',['../protocol_8h.html#affc4cf09c3337bd860439da99bdfef98',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fstart_184',['guac_protocol_send_start',['../protocol_8h.html#a60d33439eb4b5a11535a9a77e57c4126',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fsync_185',['guac_protocol_send_sync',['../protocol_8h.html#aa11f8798abca85fd2b47b5f9a027fa73',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5ftouch_186',['guac_protocol_send_touch',['../protocol_8h.html#a4b7d35cc19d822e53e074e0bdc2dd47a',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5ftransfer_187',['guac_protocol_send_transfer',['../protocol_8h.html#aecdce272ed4c317c5b7291e42239a1f9',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5ftransform_188',['guac_protocol_send_transform',['../protocol_8h.html#a17058795c93be51c82a9df95eca8e62b',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fundefine_189',['guac_protocol_send_undefine',['../protocol_8h.html#aefa251505e61332e8e1c27ade0478e64',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fvideo_190',['guac_protocol_send_video',['../protocol_8h.html#a657216f2e63d2d42e8624f96def84bf8',1,'protocol.h']]], + ['guac_5fprotocol_5fstatus_191',['guac_protocol_status',['../protocol-types_8h.html#af946f7f843fa5935dbeeb08f85dec9e2',1,'protocol-types.h']]], + ['guac_5fprotocol_5fstatus_5fclient_5fbad_5frequest_192',['GUAC_PROTOCOL_STATUS_CLIENT_BAD_REQUEST',['../protocol-types_8h.html#af946f7f843fa5935dbeeb08f85dec9e2a3368d253bd711779821fd35cfce26fb7',1,'protocol-types.h']]], + ['guac_5fprotocol_5fstatus_5fclient_5fbad_5ftype_193',['GUAC_PROTOCOL_STATUS_CLIENT_BAD_TYPE',['../protocol-types_8h.html#af946f7f843fa5935dbeeb08f85dec9e2aee8dbe77e34276c2c63ac48cfd9efb6a',1,'protocol-types.h']]], + ['guac_5fprotocol_5fstatus_5fclient_5fforbidden_194',['GUAC_PROTOCOL_STATUS_CLIENT_FORBIDDEN',['../protocol-types_8h.html#af946f7f843fa5935dbeeb08f85dec9e2ae69699ec97ca233ff2080e258cbaffc5',1,'protocol-types.h']]], + ['guac_5fprotocol_5fstatus_5fclient_5foverrun_195',['GUAC_PROTOCOL_STATUS_CLIENT_OVERRUN',['../protocol-types_8h.html#af946f7f843fa5935dbeeb08f85dec9e2a8d525475c60f4851a0e54f80e2106d13',1,'protocol-types.h']]], + ['guac_5fprotocol_5fstatus_5fclient_5ftimeout_196',['GUAC_PROTOCOL_STATUS_CLIENT_TIMEOUT',['../protocol-types_8h.html#af946f7f843fa5935dbeeb08f85dec9e2a48bbc2974575fc1418a74367b090dfff',1,'protocol-types.h']]], + ['guac_5fprotocol_5fstatus_5fclient_5ftoo_5fmany_197',['GUAC_PROTOCOL_STATUS_CLIENT_TOO_MANY',['../protocol-types_8h.html#af946f7f843fa5935dbeeb08f85dec9e2aea1d0ee50c190b937904da2ad68cabdc',1,'protocol-types.h']]], + ['guac_5fprotocol_5fstatus_5fclient_5funauthorized_198',['GUAC_PROTOCOL_STATUS_CLIENT_UNAUTHORIZED',['../protocol-types_8h.html#af946f7f843fa5935dbeeb08f85dec9e2af235e2bc03b76506e2b145bef2faadca',1,'protocol-types.h']]], + ['guac_5fprotocol_5fstatus_5fresource_5fclosed_199',['GUAC_PROTOCOL_STATUS_RESOURCE_CLOSED',['../protocol-types_8h.html#af946f7f843fa5935dbeeb08f85dec9e2a08b2dc0d23e51f7a2cba7cc807cb80da',1,'protocol-types.h']]], + ['guac_5fprotocol_5fstatus_5fresource_5fconflict_200',['GUAC_PROTOCOL_STATUS_RESOURCE_CONFLICT',['../protocol-types_8h.html#af946f7f843fa5935dbeeb08f85dec9e2a6f19a3fac58e804570a16351f8c35ee9',1,'protocol-types.h']]], + ['guac_5fprotocol_5fstatus_5fresource_5fnot_5ffound_201',['GUAC_PROTOCOL_STATUS_RESOURCE_NOT_FOUND',['../protocol-types_8h.html#af946f7f843fa5935dbeeb08f85dec9e2a3aa788cd4b2bbcfab592573dbddc2e22',1,'protocol-types.h']]], + ['guac_5fprotocol_5fstatus_5fserver_5fbusy_202',['GUAC_PROTOCOL_STATUS_SERVER_BUSY',['../protocol-types_8h.html#af946f7f843fa5935dbeeb08f85dec9e2a0344ce1d993b626382a44969934354d6',1,'protocol-types.h']]], + ['guac_5fprotocol_5fstatus_5fserver_5ferror_203',['GUAC_PROTOCOL_STATUS_SERVER_ERROR',['../protocol-types_8h.html#af946f7f843fa5935dbeeb08f85dec9e2a1540c5c1a0668f06a9d71443d95063ff',1,'protocol-types.h']]], + ['guac_5fprotocol_5fstatus_5fsession_5fclosed_204',['GUAC_PROTOCOL_STATUS_SESSION_CLOSED',['../protocol-types_8h.html#af946f7f843fa5935dbeeb08f85dec9e2a8e31816937bfdc75c639d3bf0c4063ab',1,'protocol-types.h']]], + ['guac_5fprotocol_5fstatus_5fsession_5fconflict_205',['GUAC_PROTOCOL_STATUS_SESSION_CONFLICT',['../protocol-types_8h.html#af946f7f843fa5935dbeeb08f85dec9e2ae92e68bf446315028b3f1992b19967f7',1,'protocol-types.h']]], + ['guac_5fprotocol_5fstatus_5fsession_5ftimeout_206',['GUAC_PROTOCOL_STATUS_SESSION_TIMEOUT',['../protocol-types_8h.html#af946f7f843fa5935dbeeb08f85dec9e2a3e4f469d39ea08bf7ff8fec3a2f36b23',1,'protocol-types.h']]], + ['guac_5fprotocol_5fstatus_5fsuccess_207',['GUAC_PROTOCOL_STATUS_SUCCESS',['../protocol-types_8h.html#af946f7f843fa5935dbeeb08f85dec9e2aece4c889b9d626073bf7a0cb8fe6d5ac',1,'protocol-types.h']]], + ['guac_5fprotocol_5fstatus_5funsupported_208',['GUAC_PROTOCOL_STATUS_UNSUPPORTED',['../protocol-types_8h.html#af946f7f843fa5935dbeeb08f85dec9e2a3a967a2c59d846eb6e6106066d95ef75',1,'protocol-types.h']]], + ['guac_5fprotocol_5fstatus_5fupstream_5ferror_209',['GUAC_PROTOCOL_STATUS_UPSTREAM_ERROR',['../protocol-types_8h.html#af946f7f843fa5935dbeeb08f85dec9e2a00d154907f7b45e526db18a5a5685d78',1,'protocol-types.h']]], + ['guac_5fprotocol_5fstatus_5fupstream_5fnot_5ffound_210',['GUAC_PROTOCOL_STATUS_UPSTREAM_NOT_FOUND',['../protocol-types_8h.html#af946f7f843fa5935dbeeb08f85dec9e2a503d6c0332647939536488a19513ae3e',1,'protocol-types.h']]], + ['guac_5fprotocol_5fstatus_5fupstream_5ftimeout_211',['GUAC_PROTOCOL_STATUS_UPSTREAM_TIMEOUT',['../protocol-types_8h.html#af946f7f843fa5935dbeeb08f85dec9e2a5829c4335b31db5c6f1e1764264f281f',1,'protocol-types.h']]], + ['guac_5fprotocol_5fstatus_5fupstream_5funavailable_212',['GUAC_PROTOCOL_STATUS_UPSTREAM_UNAVAILABLE',['../protocol-types_8h.html#af946f7f843fa5935dbeeb08f85dec9e2a238ff6f1d0e5fbcb0529fe4985dae814',1,'protocol-types.h']]], + ['guac_5fprotocol_5fstring_5fto_5fversion_213',['guac_protocol_string_to_version',['../protocol_8h.html#a3304f28ac07fa60ee7358a54e3f30396',1,'protocol.h']]], + ['guac_5fprotocol_5fversion_214',['guac_protocol_version',['../protocol-types_8h.html#ac7c1d15bae38b970886002bb9811ef8b',1,'protocol-types.h']]], + ['guac_5fprotocol_5fversion_5f1_5f0_5f0_215',['GUAC_PROTOCOL_VERSION_1_0_0',['../protocol-types_8h.html#ac7c1d15bae38b970886002bb9811ef8baeb36e8a192edae0a4cf22063801407fe',1,'protocol-types.h']]], + ['guac_5fprotocol_5fversion_5f1_5f1_5f0_216',['GUAC_PROTOCOL_VERSION_1_1_0',['../protocol-types_8h.html#ac7c1d15bae38b970886002bb9811ef8ba3d50a29f8fb2f29fa21dc7ca3889f41f',1,'protocol-types.h']]], + ['guac_5fprotocol_5fversion_5f1_5f3_5f0_217',['GUAC_PROTOCOL_VERSION_1_3_0',['../protocol-types_8h.html#ac7c1d15bae38b970886002bb9811ef8ba8f0ec641ce10a3b848a87d5870220835',1,'protocol-types.h']]], + ['guac_5fprotocol_5fversion_5f1_5f5_5f0_218',['GUAC_PROTOCOL_VERSION_1_5_0',['../protocol-types_8h.html#ac7c1d15bae38b970886002bb9811ef8ba5f599f8cb7086fbf03233710ac28e22a',1,'protocol-types.h']]], + ['guac_5fprotocol_5fversion_5fto_5fstring_219',['guac_protocol_version_to_string',['../protocol_8h.html#a30fcbea302b1a1eecd8516be0f552981',1,'protocol.h']]], + ['guac_5fprotocol_5fversion_5funknown_220',['GUAC_PROTOCOL_VERSION_UNKNOWN',['../protocol-types_8h.html#ac7c1d15bae38b970886002bb9811ef8baaa50b9f536a0346cb43437ea6b744052',1,'protocol-types.h']]], + ['guac_5frecording_221',['guac_recording',['../structguac__recording.html',1,'']]], + ['guac_5frecording_5fcreate_222',['guac_recording_create',['../recording_8h.html#ae73a354b488307495f4ea30ea3358ead',1,'recording.h']]], + ['guac_5frecording_5ffree_223',['guac_recording_free',['../recording_8h.html#aef315904339a279194089880d5ff91bc',1,'recording.h']]], + ['guac_5frecording_5freport_5fkey_224',['guac_recording_report_key',['../recording_8h.html#a41a03f63e01cdf139a301b161807a23f',1,'recording.h']]], + ['guac_5frecording_5freport_5fmouse_225',['guac_recording_report_mouse',['../recording_8h.html#a0f3fab8ec61a695440ef92e541d23679',1,'recording.h']]], + ['guac_5frecording_5freport_5ftouch_226',['guac_recording_report_touch',['../recording_8h.html#abce84ed9419ac815c6c090c605a7ca62',1,'recording.h']]], + ['guac_5frwlock_227',['guac_rwlock',['../structguac__rwlock.html',1,'']]], + ['guac_5fsocket_228',['guac_socket',['../structguac__socket.html',1,'']]], + ['guac_5fsocket_5falloc_229',['guac_socket_alloc',['../socket_8h.html#a79d263402c25a0f17939c037ebb717f1',1,'socket.h']]], + ['guac_5fsocket_5fbroadcast_230',['guac_socket_broadcast',['../socket_8h.html#a2f796129a6bb2b6656070f2066deba9d',1,'socket.h']]], + ['guac_5fsocket_5fbroadcast_5fpending_231',['guac_socket_broadcast_pending',['../socket_8h.html#a8b2ae1edf7f4b34c7eebe33c90f80d67',1,'socket.h']]], + ['guac_5fsocket_5fclosed_232',['GUAC_SOCKET_CLOSED',['../socket-types_8h.html#a0ac0c0cd123b57d8aba5e6ec6fd20939a02f70c652aab0536f0504d413560766e',1,'socket-types.h']]], + ['guac_5fsocket_5fflush_233',['guac_socket_flush',['../socket_8h.html#ababc834d5812e006b55a79da417bfe12',1,'socket.h']]], + ['guac_5fsocket_5fflush_5fbase64_234',['guac_socket_flush_base64',['../socket_8h.html#a09d5f60d75c57640a4c483d42445c1ab',1,'socket.h']]], + ['guac_5fsocket_5fflush_5fhandler_235',['guac_socket_flush_handler',['../socket-fntypes_8h.html#a894bc88c6288ee6b6713a2ea64bd05a0',1,'socket-fntypes.h']]], + ['guac_5fsocket_5ffree_236',['guac_socket_free',['../socket_8h.html#a376df8efcc02a7104504f104433884ed',1,'socket.h']]], + ['guac_5fsocket_5ffree_5fhandler_237',['guac_socket_free_handler',['../socket-fntypes_8h.html#a9700a8ba2011d6e6ce13e3e6c6397fc2',1,'socket-fntypes.h']]], + ['guac_5fsocket_5finstruction_5fbegin_238',['guac_socket_instruction_begin',['../socket_8h.html#a00c8f00ab54c42e42c9f489caf5478b1',1,'socket.h']]], + ['guac_5fsocket_5finstruction_5fend_239',['guac_socket_instruction_end',['../socket_8h.html#a603c23b24e2e2e95eeb2ce08d8115e94',1,'socket.h']]], + ['guac_5fsocket_5fkeep_5falive_5finterval_240',['GUAC_SOCKET_KEEP_ALIVE_INTERVAL',['../socket-constants_8h.html#aa8820e76e3d3471bdc8771591ebf29f7',1,'socket-constants.h']]], + ['guac_5fsocket_5flock_5fhandler_241',['guac_socket_lock_handler',['../socket-fntypes_8h.html#a1b714d65f18d57bb52f929c7d3909526',1,'socket-fntypes.h']]], + ['guac_5fsocket_5fnest_242',['guac_socket_nest',['../socket_8h.html#afa5052f0596a169da638d885f73e4e87',1,'socket.h']]], + ['guac_5fsocket_5fopen_243',['GUAC_SOCKET_OPEN',['../socket-types_8h.html#a0ac0c0cd123b57d8aba5e6ec6fd20939a7b8a48d941303b384b59a8203a801dc5',1,'socket-types.h']]], + ['guac_5fsocket_5fopen_244',['guac_socket_open',['../socket_8h.html#ada54a06fcd80f56608bd198d14d37c77',1,'socket.h']]], + ['guac_5fsocket_5fopen_5fsecure_245',['guac_socket_open_secure',['../socket-ssl_8h.html#ad831993464afec46efccf69990bdda50',1,'socket-ssl.h']]], + ['guac_5fsocket_5fopen_5fwsa_246',['guac_socket_open_wsa',['../socket-wsa_8h.html#a1fd412d62f5d1702fd78b9c0638a064e',1,'socket-wsa.h']]], + ['guac_5fsocket_5foutput_5fbuffer_5fsize_247',['GUAC_SOCKET_OUTPUT_BUFFER_SIZE',['../socket-constants_8h.html#af93053e27466c566624301d7b32a68c3',1,'socket-constants.h']]], + ['guac_5fsocket_5fread_248',['guac_socket_read',['../socket_8h.html#af5d6846212d792c5bce7f8a4fd46cd31',1,'socket.h']]], + ['guac_5fsocket_5fread_5fhandler_249',['guac_socket_read_handler',['../socket-fntypes_8h.html#a75396c8cb7b0ba91102fcd447a1eb36b',1,'socket-fntypes.h']]], + ['guac_5fsocket_5frequire_5fkeep_5falive_250',['guac_socket_require_keep_alive',['../socket_8h.html#a1d8c5111a8234c7785ae23f379f7db03',1,'socket.h']]], + ['guac_5fsocket_5fselect_251',['guac_socket_select',['../socket_8h.html#a41b0d7a25ccda3d0ae20143880cf53b7',1,'socket.h']]], + ['guac_5fsocket_5fselect_5fhandler_252',['guac_socket_select_handler',['../socket-fntypes_8h.html#a934350207615e0e2066954f9484153f8',1,'socket-fntypes.h']]], + ['guac_5fsocket_5fssl_5fdata_253',['guac_socket_ssl_data',['../structguac__socket__ssl__data.html',1,'']]], + ['guac_5fsocket_5fstate_254',['guac_socket_state',['../socket-types_8h.html#a0ac0c0cd123b57d8aba5e6ec6fd20939',1,'socket-types.h']]], + ['guac_5fsocket_5ftee_255',['guac_socket_tee',['../socket_8h.html#a1fccad6e6a4f135b4b694b400c768f97',1,'socket.h']]], + ['guac_5fsocket_5funlock_5fhandler_256',['guac_socket_unlock_handler',['../socket-fntypes_8h.html#af1a6f8eb81522aab289c9f4ed6051d3f',1,'socket-fntypes.h']]], + ['guac_5fsocket_5fwrite_257',['guac_socket_write',['../socket_8h.html#adb6eb960de27526bc96e1f9af797e2c4',1,'socket.h']]], + ['guac_5fsocket_5fwrite_5fbase64_258',['guac_socket_write_base64',['../socket_8h.html#ac7ec68bc42436ba316805718c292c510',1,'socket.h']]], + ['guac_5fsocket_5fwrite_5fhandler_259',['guac_socket_write_handler',['../socket-fntypes_8h.html#a7198af0a6bbac52794eb248c81d90c6a',1,'socket-fntypes.h']]], + ['guac_5fsocket_5fwrite_5fint_260',['guac_socket_write_int',['../socket_8h.html#a57a963e37377de2104c2d785980ff400',1,'socket.h']]], + ['guac_5fsocket_5fwrite_5fstring_261',['guac_socket_write_string',['../socket_8h.html#ad0cb48c7896361b522ae5a222a3b5efc',1,'socket.h']]], + ['guac_5fstatus_262',['guac_status',['../error-types_8h.html#a1f4f9a73ee399e5dff424376eb4f9c86',1,'error-types.h']]], + ['guac_5fstatus_5fbusy_263',['GUAC_STATUS_BUSY',['../error-types_8h.html#a1f4f9a73ee399e5dff424376eb4f9c86ae12700a53800d88ba4711e680cc50b55',1,'error-types.h']]], + ['guac_5fstatus_5fcanceled_264',['GUAC_STATUS_CANCELED',['../error-types_8h.html#a1f4f9a73ee399e5dff424376eb4f9c86a4c304f409d4fbde1834d1611c18fe98c',1,'error-types.h']]], + ['guac_5fstatus_5fclosed_265',['GUAC_STATUS_CLOSED',['../error-types_8h.html#a1f4f9a73ee399e5dff424376eb4f9c86a7e66422d5706e2be5306c634244a38ff',1,'error-types.h']]], + ['guac_5fstatus_5finput_5ftoo_5flarge_266',['GUAC_STATUS_INPUT_TOO_LARGE',['../error-types_8h.html#a1f4f9a73ee399e5dff424376eb4f9c86a918e06bdee8b3d84f9840665ccf95d3a',1,'error-types.h']]], + ['guac_5fstatus_5finternal_5ferror_267',['GUAC_STATUS_INTERNAL_ERROR',['../error-types_8h.html#a1f4f9a73ee399e5dff424376eb4f9c86a4a6fccd6ba5576c38b39b5adc05174ab',1,'error-types.h']]], + ['guac_5fstatus_5finvalid_5fargument_268',['GUAC_STATUS_INVALID_ARGUMENT',['../error-types_8h.html#a1f4f9a73ee399e5dff424376eb4f9c86a62db59024cea0e396c8d61051594d6d4',1,'error-types.h']]], + ['guac_5fstatus_5fio_5ferror_269',['GUAC_STATUS_IO_ERROR',['../error-types_8h.html#a1f4f9a73ee399e5dff424376eb4f9c86a32e98ba3d8f2b920728e9b373c02bf7a',1,'error-types.h']]], + ['guac_5fstatus_5fno_5fmemory_270',['GUAC_STATUS_NO_MEMORY',['../error-types_8h.html#a1f4f9a73ee399e5dff424376eb4f9c86abab29ecdd4072426136965c73186d80a',1,'error-types.h']]], + ['guac_5fstatus_5fno_5fspace_271',['GUAC_STATUS_NO_SPACE',['../error-types_8h.html#a1f4f9a73ee399e5dff424376eb4f9c86a26883cca94f7cdbe7199c8962197fbe3',1,'error-types.h']]], + ['guac_5fstatus_5fnot_5favailable_272',['GUAC_STATUS_NOT_AVAILABLE',['../error-types_8h.html#a1f4f9a73ee399e5dff424376eb4f9c86a7bd3cb62015b8eebcc8fdf7af3dd98b7',1,'error-types.h']]], + ['guac_5fstatus_5fnot_5ffound_273',['GUAC_STATUS_NOT_FOUND',['../error-types_8h.html#a1f4f9a73ee399e5dff424376eb4f9c86af990a7a671f2261669eb68023d3767c8',1,'error-types.h']]], + ['guac_5fstatus_5fnot_5fimplemented_274',['GUAC_STATUS_NOT_IMPLEMENTED',['../error-types_8h.html#a1f4f9a73ee399e5dff424376eb4f9c86ab88f5521c885bd66abeafe38d2672ea5',1,'error-types.h']]], + ['guac_5fstatus_5fnot_5finplemented_275',['GUAC_STATUS_NOT_INPLEMENTED',['../error-types_8h.html#a1f4f9a73ee399e5dff424376eb4f9c86a850c15f5310a728b370354e9757c0d8c',1,'error-types.h']]], + ['guac_5fstatus_5fnot_5fsupported_276',['GUAC_STATUS_NOT_SUPPORTED',['../error-types_8h.html#a1f4f9a73ee399e5dff424376eb4f9c86ae0b1c8264b30ab9339be44fbb64fd39e',1,'error-types.h']]], + ['guac_5fstatus_5fout_5fof_5frange_277',['GUAC_STATUS_OUT_OF_RANGE',['../error-types_8h.html#a1f4f9a73ee399e5dff424376eb4f9c86a79e0f730bcc2941322b7e4e99ed60cf4',1,'error-types.h']]], + ['guac_5fstatus_5fpermission_5fdenied_278',['GUAC_STATUS_PERMISSION_DENIED',['../error-types_8h.html#a1f4f9a73ee399e5dff424376eb4f9c86a00f3e091f403a998b27b3b0386bf5740',1,'error-types.h']]], + ['guac_5fstatus_5fprotocol_5ferror_279',['GUAC_STATUS_PROTOCOL_ERROR',['../error-types_8h.html#a1f4f9a73ee399e5dff424376eb4f9c86a0a09fc9f8030566fc8e1bc38438b5787',1,'error-types.h']]], + ['guac_5fstatus_5frefused_280',['GUAC_STATUS_REFUSED',['../error-types_8h.html#a1f4f9a73ee399e5dff424376eb4f9c86a47a9d13217f18fbdab621b9ee37b25d7',1,'error-types.h']]], + ['guac_5fstatus_5fresult_5ftoo_5flarge_281',['GUAC_STATUS_RESULT_TOO_LARGE',['../error-types_8h.html#a1f4f9a73ee399e5dff424376eb4f9c86a114e1037ead51082d710b22998a5f49d',1,'error-types.h']]], + ['guac_5fstatus_5fsee_5ferrno_282',['GUAC_STATUS_SEE_ERRNO',['../error-types_8h.html#a1f4f9a73ee399e5dff424376eb4f9c86af34a2ad1cc0601d22889bb5cbce273b7',1,'error-types.h']]], + ['guac_5fstatus_5fstring_283',['guac_status_string',['../error_8h.html#a39a2290527ea7c3f0acb07f002c397b1',1,'error.h']]], + ['guac_5fstatus_5fsuccess_284',['GUAC_STATUS_SUCCESS',['../error-types_8h.html#a1f4f9a73ee399e5dff424376eb4f9c86a05aa91b6406b1d4258619b4b6a2d92b3',1,'error-types.h']]], + ['guac_5fstatus_5ftimeout_285',['GUAC_STATUS_TIMEOUT',['../error-types_8h.html#a1f4f9a73ee399e5dff424376eb4f9c86ae1c538233d92f2c7e7fd58887ea487b3',1,'error-types.h']]], + ['guac_5fstatus_5ftoo_5fmany_286',['GUAC_STATUS_TOO_MANY',['../error-types_8h.html#a1f4f9a73ee399e5dff424376eb4f9c86a673866879da07e263c74ee215ad0b546',1,'error-types.h']]], + ['guac_5fstatus_5ftry_5fagain_287',['GUAC_STATUS_TRY_AGAIN',['../error-types_8h.html#a1f4f9a73ee399e5dff424376eb4f9c86a969fd36abf3176099ccd663957ee518a',1,'error-types.h']]], + ['guac_5fstatus_5fwould_5fblock_288',['GUAC_STATUS_WOULD_BLOCK',['../error-types_8h.html#a1f4f9a73ee399e5dff424376eb4f9c86a162c54095836dd13a63139d6debe060f',1,'error-types.h']]], + ['guac_5fstrdup_289',['guac_strdup',['../string_8h.html#ac446136fc070b071862d422b777eafc3',1,'string.h']]], + ['guac_5fstream_290',['guac_stream',['../structguac__stream.html',1,'']]], + ['guac_5fstrlcat_291',['guac_strlcat',['../string_8h.html#a0dccfb28be71414fb2a4b1b641799f57',1,'string.h']]], + ['guac_5fstrlcpy_292',['guac_strlcpy',['../string_8h.html#add551909cdd14d762106832a800a5e16',1,'string.h']]], + ['guac_5fstrljoin_293',['guac_strljoin',['../string_8h.html#a186ea73f38cfaf14f8a5b13ad7e9724f',1,'string.h']]], + ['guac_5fstrnstr_294',['guac_strnstr',['../string_8h.html#aa29a3e046b785d93e1db17f33f3e996e',1,'string.h']]], + ['guac_5fsurface_5fcmp_295',['guac_surface_cmp',['../hash_8h.html#a377c701a920281a98cbcf0842124aaac',1,'hash.h']]], + ['guac_5ftimestamp_296',['guac_timestamp',['../timestamp-types_8h.html#a69e916d1ff324fbe0e527f32359c9cea',1,'timestamp-types.h']]], + ['guac_5ftimestamp_5fcurrent_297',['guac_timestamp_current',['../timestamp_8h.html#ab85ce937dce4d8e94c173be917bc0719',1,'timestamp.h']]], + ['guac_5ftimestamp_5fmsleep_298',['guac_timestamp_msleep',['../timestamp_8h.html#a4d1fdc2698a04c75e196b014a4717868',1,'timestamp.h']]], + ['guac_5ftransfer_5ffunction_299',['guac_transfer_function',['../protocol-types_8h.html#a9c85e3f22f5dea8b2f38de6b4f75b1ff',1,'protocol-types.h']]], + ['guac_5fuser_300',['guac_user',['../structguac__user.html',1,'']]], + ['guac_5fuser_5fabort_301',['guac_user_abort',['../user_8h.html#a0eff54a869374e37237b2006ad77b958',1,'user.h']]], + ['guac_5fuser_5fack_5fhandler_302',['guac_user_ack_handler',['../user-fntypes_8h.html#a88f4b7af6d47c82f65e9332afcc7ab09',1,'user-fntypes.h']]], + ['guac_5fuser_5falloc_303',['guac_user_alloc',['../user_8h.html#a383751a58b70f6c59a6be4c10a6a8dc4',1,'user.h']]], + ['guac_5fuser_5falloc_5fobject_304',['guac_user_alloc_object',['../user_8h.html#a59025db48eae31380bd231bfb45dcf86',1,'user.h']]], + ['guac_5fuser_5falloc_5fstream_305',['guac_user_alloc_stream',['../user_8h.html#a58c2228a0ad1f7aa6c13b7b4f225f928',1,'user.h']]], + ['guac_5fuser_5fargv_5fhandler_306',['guac_user_argv_handler',['../user-fntypes_8h.html#a50636d9fb70c454a5e82cbf6ee4f9c8a',1,'user-fntypes.h']]], + ['guac_5fuser_5faudio_5fhandler_307',['guac_user_audio_handler',['../user-fntypes_8h.html#a1d2777aaa35f39e5ba5e803a3ffbd137',1,'user-fntypes.h']]], + ['guac_5fuser_5fblob_5fhandler_308',['guac_user_blob_handler',['../user-fntypes_8h.html#aead320956199884ff6af82d49d6163c1',1,'user-fntypes.h']]], + ['guac_5fuser_5fcallback_309',['guac_user_callback',['../user-fntypes_8h.html#a9ee45c027608defab75a364ec2fc2dbe',1,'user-fntypes.h']]], + ['guac_5fuser_5fclipboard_5fhandler_310',['guac_user_clipboard_handler',['../user-fntypes_8h.html#a1658ce15f8c6fe958e873015e12aeed9',1,'user-fntypes.h']]], + ['guac_5fuser_5fclosed_5fstream_5findex_311',['GUAC_USER_CLOSED_STREAM_INDEX',['../user-constants_8h.html#a8749ef8d1917591b82b7747edc85d275',1,'user-constants.h']]], + ['guac_5fuser_5fend_5fhandler_312',['guac_user_end_handler',['../user-fntypes_8h.html#afa8b0e25073cbe710265dc8a0ed150ca',1,'user-fntypes.h']]], + ['guac_5fuser_5ffile_5fhandler_313',['guac_user_file_handler',['../user-fntypes_8h.html#a6c24aa9dee9ee4be3f3d21e1e24b9e3e',1,'user-fntypes.h']]], + ['guac_5fuser_5ffree_314',['guac_user_free',['../user_8h.html#a7e0e1220fd00fd769b8e6b731f8c9bf8',1,'user.h']]], + ['guac_5fuser_5ffree_5fobject_315',['guac_user_free_object',['../user_8h.html#acf92065fb6bbc92f9794ea50255acdb9',1,'user.h']]], + ['guac_5fuser_5ffree_5fstream_316',['guac_user_free_stream',['../user_8h.html#a3b3c740837b8e2cae6a232b45ca362f4',1,'user.h']]], + ['guac_5fuser_5fget_5fhandler_317',['guac_user_get_handler',['../user-fntypes_8h.html#ab8b7cadf31aeac0b2ac0ce4f46dafe81',1,'user-fntypes.h']]], + ['guac_5fuser_5fhandle_5fconnection_318',['guac_user_handle_connection',['../user_8h.html#a28f08ab54f138796dea4655ef54526fe',1,'user.h']]], + ['guac_5fuser_5fhandle_5finstruction_319',['guac_user_handle_instruction',['../user_8h.html#a0303ef487d51b06bb0f007f1a5df0d78',1,'user.h']]], + ['guac_5fuser_5fid_5fprefix_320',['GUAC_USER_ID_PREFIX',['../user-constants_8h.html#aa6442383e07f6aa68fbe504037101a87',1,'user-constants.h']]], + ['guac_5fuser_5finfo_321',['guac_user_info',['../structguac__user__info.html',1,'']]], + ['guac_5fuser_5fjoin_5fhandler_322',['guac_user_join_handler',['../user-fntypes_8h.html#a88717a7ab29ac1e4a853fcc2caa8f872',1,'user-fntypes.h']]], + ['guac_5fuser_5fkey_5fhandler_323',['guac_user_key_handler',['../user-fntypes_8h.html#a48d196c39615f6a1ff9b129267cb402e',1,'user-fntypes.h']]], + ['guac_5fuser_5fleave_5fhandler_324',['guac_user_leave_handler',['../user-fntypes_8h.html#aaa5806d288a42d93a54864b6c35617b8',1,'user-fntypes.h']]], + ['guac_5fuser_5flog_325',['guac_user_log',['../user_8h.html#ab19481d0800901190d3d734eae466151',1,'user.h']]], + ['guac_5fuser_5fmax_5fobjects_326',['GUAC_USER_MAX_OBJECTS',['../user-constants_8h.html#afbdfab527f553d531ce690cabd4ae1e7',1,'user-constants.h']]], + ['guac_5fuser_5fmax_5fstreams_327',['GUAC_USER_MAX_STREAMS',['../user-constants_8h.html#a9e0884fe25345c84beac1c5a13b1c5ce',1,'user-constants.h']]], + ['guac_5fuser_5fmouse_5fhandler_328',['guac_user_mouse_handler',['../user-fntypes_8h.html#a337a3fe8b983e3e25e25dbb836ea2694',1,'user-fntypes.h']]], + ['guac_5fuser_5fobject_5froot_5fname_329',['GUAC_USER_OBJECT_ROOT_NAME',['../user-constants_8h.html#acb353db4f79b67678376bb521db182e5',1,'user-constants.h']]], + ['guac_5fuser_5fparse_5fargs_5fboolean_330',['guac_user_parse_args_boolean',['../user_8h.html#a5f0bae838d82357e95e98769f7b98cd2',1,'user.h']]], + ['guac_5fuser_5fparse_5fargs_5fint_331',['guac_user_parse_args_int',['../user_8h.html#a08f6fd4d84de665487a45fb324dc8844',1,'user.h']]], + ['guac_5fuser_5fparse_5fargs_5fstring_332',['guac_user_parse_args_string',['../user_8h.html#a48fa37571297fd9649a6eabd982854ae',1,'user.h']]], + ['guac_5fuser_5fpipe_5fhandler_333',['guac_user_pipe_handler',['../user-fntypes_8h.html#ab7ae6833c33b39618a8b78603581ff79',1,'user-fntypes.h']]], + ['guac_5fuser_5fput_5fhandler_334',['guac_user_put_handler',['../user-fntypes_8h.html#afd4c60871cc2dbbbdc82f58ae1c5baa0',1,'user-fntypes.h']]], + ['guac_5fuser_5fsize_5fhandler_335',['guac_user_size_handler',['../user-fntypes_8h.html#aca3c0d12202f7888146bb95986011b6f',1,'user-fntypes.h']]], + ['guac_5fuser_5fstop_336',['guac_user_stop',['../user_8h.html#a8216ec7024947564fb4ea6b8b0b07eaf',1,'user.h']]], + ['guac_5fuser_5fstream_5fargv_337',['guac_user_stream_argv',['../user_8h.html#aa3f85461f15abfb46fd7c732538b33ea',1,'user.h']]], + ['guac_5fuser_5fstream_5findex_5fmimetype_338',['GUAC_USER_STREAM_INDEX_MIMETYPE',['../user-constants_8h.html#af3135ba0f5c4cf3099374f612446b490',1,'user-constants.h']]], + ['guac_5fuser_5fstream_5fjpeg_339',['guac_user_stream_jpeg',['../user_8h.html#a6e947ee6996d5711f18d5b785757ccb3',1,'user.h']]], + ['guac_5fuser_5fstream_5fpng_340',['guac_user_stream_png',['../user_8h.html#a35e4c7ba75a16c0b512d543ef4fe9630',1,'user.h']]], + ['guac_5fuser_5fstream_5fwebp_341',['guac_user_stream_webp',['../user_8h.html#af00042d94cb64fb8ac92cd84aff05bf8',1,'user.h']]], + ['guac_5fuser_5fsupports_5fmsg_342',['guac_user_supports_msg',['../user_8h.html#a602117049c9731a0f165a78b2d7dfe17',1,'user.h']]], + ['guac_5fuser_5fsupports_5frequired_343',['guac_user_supports_required',['../user_8h.html#a0c54aa65599c3d2d6c62c752f850d6a6',1,'user.h']]], + ['guac_5fuser_5fsupports_5fwebp_344',['guac_user_supports_webp',['../user_8h.html#a26d186ee6b669c78278124ece46cc8f7',1,'user.h']]], + ['guac_5fuser_5fsync_5fhandler_345',['guac_user_sync_handler',['../user-fntypes_8h.html#ab60c51d865526c5c5d2c096e4fcb5539',1,'user-fntypes.h']]], + ['guac_5fuser_5ftouch_5fhandler_346',['guac_user_touch_handler',['../user-fntypes_8h.html#ad714880d0953214bc5e9458706af017b',1,'user-fntypes.h']]], + ['guac_5fuser_5fundefined_5fobject_5findex_347',['GUAC_USER_UNDEFINED_OBJECT_INDEX',['../user-constants_8h.html#ae0609bd43bffdfa9ebb8da62f8118c9f',1,'user-constants.h']]], + ['guac_5futf8_5fcharsize_348',['guac_utf8_charsize',['../unicode_8h.html#a423523f1531719c6ab4fafdb02008623',1,'unicode.h']]], + ['guac_5futf8_5fread_349',['guac_utf8_read',['../unicode_8h.html#a1690b7b5e4fbcfc556fa4ee7129a25af',1,'unicode.h']]], + ['guac_5futf8_5fstrlen_350',['guac_utf8_strlen',['../unicode_8h.html#a778e48706f4ee85f229711fe4cb1343b',1,'unicode.h']]], + ['guac_5futf8_5fwrite_351',['guac_utf8_write',['../unicode_8h.html#aa49339a4af9952b0b56402825059a2ce',1,'unicode.h']]], + ['guac_5fwol_5flocal_5fipv4_5fbroadcast_352',['GUAC_WOL_LOCAL_IPV4_BROADCAST',['../wol-constants_8h.html#a8a3ab3403bd4e7295bcc59f9edbcc35f',1,'wol-constants.h']]], + ['guac_5fwol_5fpacket_5fsize_353',['GUAC_WOL_PACKET_SIZE',['../wol-constants_8h.html#a93bd13de95bbdc785737ac23ad965f54',1,'wol-constants.h']]], + ['guac_5fwol_5fport_354',['GUAC_WOL_PORT',['../wol-constants_8h.html#a7fd19bb639955ecb864cc6d25de4f41b',1,'wol-constants.h']]], + ['guac_5fwol_5fwake_355',['guac_wol_wake',['../wol_8h.html#a33bdbda80a9ba04c6d173c5470c9137a',1,'wol.h']]], + ['guacamole_5fprotocol_5fversion_356',['GUACAMOLE_PROTOCOL_VERSION',['../protocol-constants_8h.html#ab1706e67b56808564438ef853a8d2821',1,'protocol-constants.h']]] +]; diff --git a/doc/1.5.5/libguac/search/all_7.js b/doc/1.5.5/libguac/search/all_7.js new file mode 100644 index 000000000..16a7cd303 --- /dev/null +++ b/doc/1.5.5/libguac/search/all_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['hash_2eh_0',['hash.h',['../hash_8h.html',1,'']]] +]; diff --git a/doc/1.5.5/libguac/search/all_8.js b/doc/1.5.5/libguac/search/all_8.js new file mode 100644 index 000000000..b08cc2d91 --- /dev/null +++ b/doc/1.5.5/libguac/search/all_8.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['image_5fmimetypes_0',['image_mimetypes',['../structguac__user__info.html#ac05b09cce376e656f4e4baa19f888345',1,'guac_user_info']]], + ['include_5fkeys_1',['include_keys',['../structguac__recording.html#abe405bddf126b78899464171f838cf35',1,'guac_recording']]], + ['include_5fmouse_2',['include_mouse',['../structguac__recording.html#a3a023a7adb2305f0dd1e4e3f12ad37d6',1,'guac_recording']]], + ['include_5foutput_3',['include_output',['../structguac__recording.html#a3efc682b40d7989c8e80e9bd7fa73b80',1,'guac_recording']]], + ['include_5ftouch_4',['include_touch',['../structguac__recording.html#a3189271cc506aae3d0980e7b2a580f23',1,'guac_recording']]], + ['index_5',['index',['../structguac__layer.html#a686a85d9d758ba5f2f4426a4c4ae13ba',1,'guac_layer::index'],['../structguac__object.html#a643f03695d246bbf73b5c4942755a4b4',1,'guac_object::index'],['../structguac__stream.html#a487951c2cc77b2e1637e3aa0b5faaa60',1,'guac_stream::index']]], + ['info_6',['info',['../structguac__user.html#a0120f63e0eb933761666047ed80e483f',1,'guac_user']]] +]; diff --git a/doc/1.5.5/libguac/search/all_9.js b/doc/1.5.5/libguac/search/all_9.js new file mode 100644 index 000000000..8437328c2 --- /dev/null +++ b/doc/1.5.5/libguac/search/all_9.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['join_5fhandler_0',['join_handler',['../structguac__audio__encoder.html#af2d0f6c14a6a30e4f91240865a680e5b',1,'guac_audio_encoder::join_handler'],['../structguac__client.html#a0adcf1953de6c315c2da9dac4b3eceb3',1,'guac_client::join_handler']]], + ['join_5fpending_5fhandler_1',['join_pending_handler',['../structguac__client.html#aa8f83a899e8f3c7811a06409476624bb',1,'guac_client']]] +]; diff --git a/doc/1.5.5/libguac/search/all_a.js b/doc/1.5.5/libguac/search/all_a.js new file mode 100644 index 000000000..1ace99927 --- /dev/null +++ b/doc/1.5.5/libguac/search/all_a.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['key_0',['key',['../structguac__rwlock.html#af2a3bbe2eeaa51fb9c955dff2e4fbefb',1,'guac_rwlock']]], + ['key_5fhandler_1',['key_handler',['../structguac__user.html#ab9b8b3c268a0d14a28bdae6929cffb13',1,'guac_user']]] +]; diff --git a/doc/1.5.5/libguac/search/all_b.js b/doc/1.5.5/libguac/search/all_b.js new file mode 100644 index 000000000..634ee8f76 --- /dev/null +++ b/doc/1.5.5/libguac/search/all_b.js @@ -0,0 +1,14 @@ +var searchData= +[ + ['last_5fframe_5fduration_0',['last_frame_duration',['../structguac__user.html#ac7e84b1bf15d3d15ba49ce58f1819060',1,'guac_user']]], + ['last_5freceived_5ftimestamp_1',['last_received_timestamp',['../structguac__user.html#aebdee192ef52dfe8956c776adc65fb16',1,'guac_user']]], + ['last_5fsent_5ftimestamp_2',['last_sent_timestamp',['../structguac__client.html#a0f3069566c7a5ca76ce4369715589dad',1,'guac_client']]], + ['last_5fwrite_5ftimestamp_3',['last_write_timestamp',['../structguac__socket.html#adf00e9c13ff3808fceb4c71c1172fb51',1,'guac_socket']]], + ['layer_2dtypes_2eh_4',['layer-types.h',['../layer-types_8h.html',1,'']]], + ['layer_2eh_5',['layer.h',['../layer_8h.html',1,'']]], + ['leave_5fhandler_6',['leave_handler',['../structguac__client.html#ad956a3935832e9048a2727d8c5a46cf6',1,'guac_client::leave_handler'],['../structguac__user.html#a12f1c20cab11d657e0f255db10f42e2f',1,'guac_user::leave_handler']]], + ['list_7',['Deprecated List',['../deprecated.html',1,'']]], + ['lock_8',['lock',['../structguac__rwlock.html#a46e78bee8a7478579a79efdf1f6e6c15',1,'guac_rwlock']]], + ['lock_5fhandler_9',['lock_handler',['../structguac__socket.html#a1d39f1476d3d3440485697a0eabfe471',1,'guac_socket']]], + ['log_5fhandler_10',['log_handler',['../structguac__client.html#a3eb24ba13be9ecb3a8c6f64a73932f43',1,'guac_client']]] +]; diff --git a/doc/1.5.5/libguac/search/all_c.js b/doc/1.5.5/libguac/search/all_c.js new file mode 100644 index 000000000..bd3daa684 --- /dev/null +++ b/doc/1.5.5/libguac/search/all_c.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['mem_2eh_0',['mem.h',['../mem_8h.html',1,'']]], + ['mimetype_1',['mimetype',['../structguac__audio__encoder.html#a51b8bfeae3709c1859710cbf1039e01b',1,'guac_audio_encoder']]], + ['min_5fsize_2',['min_size',['../structguac__pool.html#a71ed274c2481dbcd5e06bf7d8d74d71e',1,'guac_pool']]], + ['mouse_5fhandler_3',['mouse_handler',['../structguac__user.html#a05ec6fd1894ff8df10c051b20df1b763',1,'guac_user']]] +]; diff --git a/doc/1.5.5/libguac/search/all_d.js b/doc/1.5.5/libguac/search/all_d.js new file mode 100644 index 000000000..8c820056d --- /dev/null +++ b/doc/1.5.5/libguac/search/all_d.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['name_0',['name',['../structguac__user__info.html#a1529f54112f7a3891ae73f80ace9c0f3',1,'guac_user_info']]] +]; diff --git a/doc/1.5.5/libguac/search/all_e.js b/doc/1.5.5/libguac/search/all_e.js new file mode 100644 index 000000000..85a348ca3 --- /dev/null +++ b/doc/1.5.5/libguac/search/all_e.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['object_2dtypes_2eh_0',['object-types.h',['../object-types_8h.html',1,'']]], + ['object_2eh_1',['object.h',['../object_8h.html',1,'']]], + ['opcode_2',['opcode',['../structguac__parser.html#a725767c57dc6f157afe2d7dd6ce281e1',1,'guac_parser']]], + ['optimal_5fheight_3',['optimal_height',['../structguac__user__info.html#a252079af642b62554566e8675dc43354',1,'guac_user_info']]], + ['optimal_5fresolution_4',['optimal_resolution',['../structguac__user__info.html#ac19c08c0ef7441556be0afed6fb9c7c7',1,'guac_user_info']]], + ['optimal_5fwidth_5',['optimal_width',['../structguac__user__info.html#a496d5f3d26a7db0a0490afa553126c66',1,'guac_user_info']]], + ['owner_6',['owner',['../structguac__user.html#a265180af7291745b2e090ee6fa47cbb8',1,'guac_user']]] +]; diff --git a/doc/1.5.5/libguac/search/all_f.js b/doc/1.5.5/libguac/search/all_f.js new file mode 100644 index 000000000..3897149ef --- /dev/null +++ b/doc/1.5.5/libguac/search/all_f.js @@ -0,0 +1,18 @@ +var searchData= +[ + ['parser_2dconstants_2eh_0',['parser-constants.h',['../parser-constants_8h.html',1,'']]], + ['parser_2dtypes_2eh_1',['parser-types.h',['../parser-types_8h.html',1,'']]], + ['parser_2eh_2',['parser.h',['../parser_8h.html',1,'']]], + ['pending_5fsocket_3',['pending_socket',['../structguac__client.html#a0ee216933b366f01933dc7211fdfa649',1,'guac_client']]], + ['pipe_5fhandler_4',['pipe_handler',['../structguac__user.html#af35d1f6f2c97d917bf88cf66384f58a3',1,'guac_user']]], + ['plugin_2dconstants_2eh_5',['plugin-constants.h',['../plugin-constants_8h.html',1,'']]], + ['plugin_2eh_6',['plugin.h',['../plugin_8h.html',1,'']]], + ['pool_2dtypes_2eh_7',['pool-types.h',['../pool-types_8h.html',1,'']]], + ['pool_2eh_8',['pool.h',['../pool_8h.html',1,'']]], + ['processing_5flag_9',['processing_lag',['../structguac__user.html#a4b097cae9283bb0caf70189d4f3d1d0e',1,'guac_user']]], + ['protocol_2dconstants_2eh_10',['protocol-constants.h',['../protocol-constants_8h.html',1,'']]], + ['protocol_2dtypes_2eh_11',['protocol-types.h',['../protocol-types_8h.html',1,'']]], + ['protocol_2eh_12',['protocol.h',['../protocol_8h.html',1,'']]], + ['protocol_5fversion_13',['protocol_version',['../structguac__user__info.html#aae0a9e3db4f19e3052e7c9c9a81c5658',1,'guac_user_info']]], + ['put_5fhandler_14',['put_handler',['../structguac__object.html#a33771a9a72c560b8ea99f940c4c412a6',1,'guac_object::put_handler'],['../structguac__user.html#a0b33553d0e1af01d8c9fbc6ec33202c3',1,'guac_user::put_handler']]] +]; diff --git a/doc/1.5.5/libguac/search/classes_0.js b/doc/1.5.5/libguac/search/classes_0.js new file mode 100644 index 000000000..0006b1b68 --- /dev/null +++ b/doc/1.5.5/libguac/search/classes_0.js @@ -0,0 +1,18 @@ +var searchData= +[ + ['guac_5faudio_5fencoder_0',['guac_audio_encoder',['../structguac__audio__encoder.html',1,'']]], + ['guac_5faudio_5fstream_1',['guac_audio_stream',['../structguac__audio__stream.html',1,'']]], + ['guac_5fclient_2',['guac_client',['../structguac__client.html',1,'']]], + ['guac_5flayer_3',['guac_layer',['../structguac__layer.html',1,'']]], + ['guac_5fobject_4',['guac_object',['../structguac__object.html',1,'']]], + ['guac_5fparser_5',['guac_parser',['../structguac__parser.html',1,'']]], + ['guac_5fpool_6',['guac_pool',['../structguac__pool.html',1,'']]], + ['guac_5fpool_5fint_7',['guac_pool_int',['../structguac__pool__int.html',1,'']]], + ['guac_5frecording_8',['guac_recording',['../structguac__recording.html',1,'']]], + ['guac_5frwlock_9',['guac_rwlock',['../structguac__rwlock.html',1,'']]], + ['guac_5fsocket_10',['guac_socket',['../structguac__socket.html',1,'']]], + ['guac_5fsocket_5fssl_5fdata_11',['guac_socket_ssl_data',['../structguac__socket__ssl__data.html',1,'']]], + ['guac_5fstream_12',['guac_stream',['../structguac__stream.html',1,'']]], + ['guac_5fuser_13',['guac_user',['../structguac__user.html',1,'']]], + ['guac_5fuser_5finfo_14',['guac_user_info',['../structguac__user__info.html',1,'']]] +]; diff --git a/doc/1.5.5/libguac/search/close.svg b/doc/1.5.5/libguac/search/close.svg new file mode 100644 index 000000000..337d6cc13 --- /dev/null +++ b/doc/1.5.5/libguac/search/close.svg @@ -0,0 +1,18 @@ + + + + + + diff --git a/doc/1.5.5/libguac/search/defines_0.js b/doc/1.5.5/libguac/search/defines_0.js new file mode 100644 index 000000000..282c50e08 --- /dev/null +++ b/doc/1.5.5/libguac/search/defines_0.js @@ -0,0 +1,57 @@ +var searchData= +[ + ['guac_5fargv_5fmax_5flength_0',['GUAC_ARGV_MAX_LENGTH',['../argv-constants_8h.html#abd92a32fe9b7619580d50dbeaed8577d',1,'argv-constants.h']]], + ['guac_5fargv_5fmax_5fmimetype_5flength_1',['GUAC_ARGV_MAX_MIMETYPE_LENGTH',['../argv-constants_8h.html#a9e06672efd6fd7d2353d531be842d431',1,'argv-constants.h']]], + ['guac_5fargv_5fmax_5fname_5flength_2',['GUAC_ARGV_MAX_NAME_LENGTH',['../argv-constants_8h.html#aabc731c011c87d8db3580baa2f893b87',1,'argv-constants.h']]], + ['guac_5fargv_5fmax_5fregistered_3',['GUAC_ARGV_MAX_REGISTERED',['../argv-constants_8h.html#a69d1917b4f8b6d91b6b6ae17feaac99f',1,'argv-constants.h']]], + ['guac_5fargv_5foption_5fecho_4',['GUAC_ARGV_OPTION_ECHO',['../argv-constants_8h.html#a851551c2d9daf9b473da25aa32693e0e',1,'argv-constants.h']]], + ['guac_5fargv_5foption_5fonce_5',['GUAC_ARGV_OPTION_ONCE',['../argv-constants_8h.html#a4d2cae4a9598d24401fdc0067e879029',1,'argv-constants.h']]], + ['guac_5fbuffer_5fpool_5finitial_5fsize_6',['GUAC_BUFFER_POOL_INITIAL_SIZE',['../client-constants_8h.html#aa8a296e1032ff408ab141b0765fb9bfb',1,'client-constants.h']]], + ['guac_5fclient_5fclosed_5fstream_5findex_7',['GUAC_CLIENT_CLOSED_STREAM_INDEX',['../client-constants_8h.html#a6fda25106c4c454c22db2c7e042ee142',1,'client-constants.h']]], + ['guac_5fclient_5fid_5fprefix_8',['GUAC_CLIENT_ID_PREFIX',['../client-constants_8h.html#a8e2b48136e5c358e012a1558d5e5f0c2',1,'client-constants.h']]], + ['guac_5fclient_5fmax_5fstreams_9',['GUAC_CLIENT_MAX_STREAMS',['../client-constants_8h.html#ad9f977643c5ffee5c1eeb426664796a1',1,'client-constants.h']]], + ['guac_5fclient_5fmouse_5fleft_10',['GUAC_CLIENT_MOUSE_LEFT',['../client-constants_8h.html#a4bb4f5b852ac8c3e2d3c89cd5e63efd2',1,'client-constants.h']]], + ['guac_5fclient_5fmouse_5fmiddle_11',['GUAC_CLIENT_MOUSE_MIDDLE',['../client-constants_8h.html#ad14c5f1800aac863bbebcd676c5c2124',1,'client-constants.h']]], + ['guac_5fclient_5fmouse_5fright_12',['GUAC_CLIENT_MOUSE_RIGHT',['../client-constants_8h.html#a88917d2d7143a483c219eee62fd6317f',1,'client-constants.h']]], + ['guac_5fclient_5fmouse_5fscroll_5fdown_13',['GUAC_CLIENT_MOUSE_SCROLL_DOWN',['../client-constants_8h.html#a771231574e9d303aa08fc1cecc9069f0',1,'client-constants.h']]], + ['guac_5fclient_5fmouse_5fscroll_5fup_14',['GUAC_CLIENT_MOUSE_SCROLL_UP',['../client-constants_8h.html#a134afd8a0d8f10a34af51fc70981e39d',1,'client-constants.h']]], + ['guac_5fcommon_5frecording_5fmax_5fname_5flength_15',['GUAC_COMMON_RECORDING_MAX_NAME_LENGTH',['../recording_8h.html#a1e16325caf669bc5ce4d70e81aa43e2f',1,'recording.h']]], + ['guac_5fcommon_5frecording_5fmax_5fsuffix_16',['GUAC_COMMON_RECORDING_MAX_SUFFIX',['../recording_8h.html#a7a08273eba73d8488b5807bcae228141',1,'recording.h']]], + ['guac_5fcommon_5frecording_5fmax_5fsuffix_5flength_17',['GUAC_COMMON_RECORDING_MAX_SUFFIX_LENGTH',['../recording_8h.html#a9f6e18fb05bfa6ef08a0329667b919af',1,'recording.h']]], + ['guac_5ferror_18',['guac_error',['../error_8h.html#a44aa5f7b9e896438fcdf16fe7feefd07',1,'guac_error: error.h'],['../error_8h.html#a44aa5f7b9e896438fcdf16fe7feefd07',1,'guac_error: error.h']]], + ['guac_5ferror_5fmessage_19',['guac_error_message',['../error_8h.html#a96ab3903ba0e97c745e8bfb006e123cd',1,'guac_error_message: error.h'],['../error_8h.html#a96ab3903ba0e97c745e8bfb006e123cd',1,'guac_error_message: error.h']]], + ['guac_5finstruction_5fmax_5fdigits_20',['GUAC_INSTRUCTION_MAX_DIGITS',['../parser-constants_8h.html#a408e5069154be109ad3dcf45cbc0b00f',1,'parser-constants.h']]], + ['guac_5finstruction_5fmax_5felements_21',['GUAC_INSTRUCTION_MAX_ELEMENTS',['../parser-constants_8h.html#a6f314dc5700812ca93ff132a15b86a46',1,'parser-constants.h']]], + ['guac_5finstruction_5fmax_5flength_22',['GUAC_INSTRUCTION_MAX_LENGTH',['../parser-constants_8h.html#a6cb4157503008653c5200ea640fe8744',1,'parser-constants.h']]], + ['guac_5fmem_5falloc_23',['guac_mem_alloc',['../mem_8h.html#a4bb1a3a4a576b07b46b7326435e19cc5',1,'mem.h']]], + ['guac_5fmem_5fckd_5fadd_24',['guac_mem_ckd_add',['../mem_8h.html#a80d61800f2ad718485fbfa959784f172',1,'mem.h']]], + ['guac_5fmem_5fckd_5fadd_5for_5fdie_25',['guac_mem_ckd_add_or_die',['../mem_8h.html#a57af96611f73a3f2300ba9fd64b0167a',1,'mem.h']]], + ['guac_5fmem_5fckd_5fmul_26',['guac_mem_ckd_mul',['../mem_8h.html#ae47dabfecd807b320fa8ca35b836c3ed',1,'mem.h']]], + ['guac_5fmem_5fckd_5fmul_5for_5fdie_27',['guac_mem_ckd_mul_or_die',['../mem_8h.html#a2ea1730f0b59705fcd6e8ce58fa6e244',1,'mem.h']]], + ['guac_5fmem_5fckd_5fsub_28',['guac_mem_ckd_sub',['../mem_8h.html#aa7f393eafbe5d770cddac0821b69a74c',1,'mem.h']]], + ['guac_5fmem_5fckd_5fsub_5for_5fdie_29',['guac_mem_ckd_sub_or_die',['../mem_8h.html#acfbd36b5c5601983cf87a67a4e0b7fc9',1,'mem.h']]], + ['guac_5fmem_5ffree_30',['guac_mem_free',['../mem_8h.html#aca926fbc99ae497f093235f787b5b328',1,'mem.h']]], + ['guac_5fmem_5ffree_5fconst_31',['guac_mem_free_const',['../mem_8h.html#a3af8ba72e97f84fbd7600be04cc6bf39',1,'mem.h']]], + ['guac_5fmem_5frealloc_32',['guac_mem_realloc',['../mem_8h.html#a57937a45796bf46eb8d3945f8eecc201',1,'mem.h']]], + ['guac_5fmem_5frealloc_5for_5fdie_33',['guac_mem_realloc_or_die',['../mem_8h.html#a1bf838d4e8ca2397170fa71a675192ba',1,'mem.h']]], + ['guac_5fmem_5fzalloc_34',['guac_mem_zalloc',['../mem_8h.html#a03391fbf6e9bababa2acc8d2094f42d2',1,'mem.h']]], + ['guac_5fprotocol_5fblob_5fmax_5flength_35',['GUAC_PROTOCOL_BLOB_MAX_LENGTH',['../protocol-constants_8h.html#af5dd5c766aeebead268d0daa6c8c2166',1,'protocol-constants.h']]], + ['guac_5fprotocol_5flayer_5fparameter_5fmulti_5ftouch_36',['GUAC_PROTOCOL_LAYER_PARAMETER_MULTI_TOUCH',['../protocol-constants_8h.html#a78c3f4305edf37fa789c1f2a77be50fd',1,'protocol-constants.h']]], + ['guac_5fprotocol_5flibrary_5flimit_37',['GUAC_PROTOCOL_LIBRARY_LIMIT',['../plugin-constants_8h.html#a03c00580f4455d35c1ed33ed4dcfe2fe',1,'plugin-constants.h']]], + ['guac_5fprotocol_5flibrary_5fprefix_38',['GUAC_PROTOCOL_LIBRARY_PREFIX',['../plugin-constants_8h.html#ac328a06358d3e07e10999e556f77c05a',1,'plugin-constants.h']]], + ['guac_5fprotocol_5flibrary_5fsuffix_39',['GUAC_PROTOCOL_LIBRARY_SUFFIX',['../plugin-constants_8h.html#af3601bb5aaa3ca309987f70bd48005fd',1,'plugin-constants.h']]], + ['guac_5fprotocol_5fname_5flimit_40',['GUAC_PROTOCOL_NAME_LIMIT',['../plugin-constants_8h.html#a4ce2e3a2b6be66e9ab382fb8d2ab2621',1,'plugin-constants.h']]], + ['guac_5fsocket_5fkeep_5falive_5finterval_41',['GUAC_SOCKET_KEEP_ALIVE_INTERVAL',['../socket-constants_8h.html#aa8820e76e3d3471bdc8771591ebf29f7',1,'socket-constants.h']]], + ['guac_5fsocket_5foutput_5fbuffer_5fsize_42',['GUAC_SOCKET_OUTPUT_BUFFER_SIZE',['../socket-constants_8h.html#af93053e27466c566624301d7b32a68c3',1,'socket-constants.h']]], + ['guac_5fuser_5fclosed_5fstream_5findex_43',['GUAC_USER_CLOSED_STREAM_INDEX',['../user-constants_8h.html#a8749ef8d1917591b82b7747edc85d275',1,'user-constants.h']]], + ['guac_5fuser_5fid_5fprefix_44',['GUAC_USER_ID_PREFIX',['../user-constants_8h.html#aa6442383e07f6aa68fbe504037101a87',1,'user-constants.h']]], + ['guac_5fuser_5fmax_5fobjects_45',['GUAC_USER_MAX_OBJECTS',['../user-constants_8h.html#afbdfab527f553d531ce690cabd4ae1e7',1,'user-constants.h']]], + ['guac_5fuser_5fmax_5fstreams_46',['GUAC_USER_MAX_STREAMS',['../user-constants_8h.html#a9e0884fe25345c84beac1c5a13b1c5ce',1,'user-constants.h']]], + ['guac_5fuser_5fobject_5froot_5fname_47',['GUAC_USER_OBJECT_ROOT_NAME',['../user-constants_8h.html#acb353db4f79b67678376bb521db182e5',1,'user-constants.h']]], + ['guac_5fuser_5fstream_5findex_5fmimetype_48',['GUAC_USER_STREAM_INDEX_MIMETYPE',['../user-constants_8h.html#af3135ba0f5c4cf3099374f612446b490',1,'user-constants.h']]], + ['guac_5fuser_5fundefined_5fobject_5findex_49',['GUAC_USER_UNDEFINED_OBJECT_INDEX',['../user-constants_8h.html#ae0609bd43bffdfa9ebb8da62f8118c9f',1,'user-constants.h']]], + ['guac_5fwol_5flocal_5fipv4_5fbroadcast_50',['GUAC_WOL_LOCAL_IPV4_BROADCAST',['../wol-constants_8h.html#a8a3ab3403bd4e7295bcc59f9edbcc35f',1,'wol-constants.h']]], + ['guac_5fwol_5fpacket_5fsize_51',['GUAC_WOL_PACKET_SIZE',['../wol-constants_8h.html#a93bd13de95bbdc785737ac23ad965f54',1,'wol-constants.h']]], + ['guac_5fwol_5fport_52',['GUAC_WOL_PORT',['../wol-constants_8h.html#a7fd19bb639955ecb864cc6d25de4f41b',1,'wol-constants.h']]], + ['guacamole_5fprotocol_5fversion_53',['GUACAMOLE_PROTOCOL_VERSION',['../protocol-constants_8h.html#ab1706e67b56808564438ef853a8d2821',1,'protocol-constants.h']]] +]; diff --git a/doc/1.5.5/libguac/search/enums_0.js b/doc/1.5.5/libguac/search/enums_0.js new file mode 100644 index 000000000..a2835f988 --- /dev/null +++ b/doc/1.5.5/libguac/search/enums_0.js @@ -0,0 +1,15 @@ +var searchData= +[ + ['guac_5fclient_5flog_5flevel_0',['guac_client_log_level',['../client-types_8h.html#adfeeb4ff06541220c91ce3401d840727',1,'client-types.h']]], + ['guac_5fclient_5fstate_1',['guac_client_state',['../client-types_8h.html#a6f7e91d6dcb20598953948f077910c3b',1,'client-types.h']]], + ['guac_5fcomposite_5fmode_2',['guac_composite_mode',['../protocol-types_8h.html#a93612063886db58071d02b5393abf186',1,'protocol-types.h']]], + ['guac_5fline_5fcap_5fstyle_3',['guac_line_cap_style',['../protocol-types_8h.html#a4a0205f8ee2e29e1a4d78da74ab58efc',1,'protocol-types.h']]], + ['guac_5fline_5fjoin_5fstyle_4',['guac_line_join_style',['../protocol-types_8h.html#a6333200b3ff1634e0cb1826b271438b1',1,'protocol-types.h']]], + ['guac_5fmessage_5ftype_5',['guac_message_type',['../protocol-types_8h.html#ad1a58d77e6383cdf3796b2b3a5d45ff3',1,'protocol-types.h']]], + ['guac_5fparse_5fstate_6',['guac_parse_state',['../parser-types_8h.html#a842bb8c1d5569ebebae3fdadb2527f30',1,'parser-types.h']]], + ['guac_5fprotocol_5fstatus_7',['guac_protocol_status',['../protocol-types_8h.html#af946f7f843fa5935dbeeb08f85dec9e2',1,'protocol-types.h']]], + ['guac_5fprotocol_5fversion_8',['guac_protocol_version',['../protocol-types_8h.html#ac7c1d15bae38b970886002bb9811ef8b',1,'protocol-types.h']]], + ['guac_5fsocket_5fstate_9',['guac_socket_state',['../socket-types_8h.html#a0ac0c0cd123b57d8aba5e6ec6fd20939',1,'socket-types.h']]], + ['guac_5fstatus_10',['guac_status',['../error-types_8h.html#a1f4f9a73ee399e5dff424376eb4f9c86',1,'error-types.h']]], + ['guac_5ftransfer_5ffunction_11',['guac_transfer_function',['../protocol-types_8h.html#a9c85e3f22f5dea8b2f38de6b4f75b1ff',1,'protocol-types.h']]] +]; diff --git a/doc/1.5.5/libguac/search/enumvalues_0.js b/doc/1.5.5/libguac/search/enumvalues_0.js new file mode 100644 index 000000000..c513e44e9 --- /dev/null +++ b/doc/1.5.5/libguac/search/enumvalues_0.js @@ -0,0 +1,69 @@ +var searchData= +[ + ['guac_5fclient_5frunning_0',['GUAC_CLIENT_RUNNING',['../client-types_8h.html#a6f7e91d6dcb20598953948f077910c3bad1ddb6f9bcfcd89a9d8522acfd74d2b0',1,'client-types.h']]], + ['guac_5fclient_5fstopping_1',['GUAC_CLIENT_STOPPING',['../client-types_8h.html#a6f7e91d6dcb20598953948f077910c3ba5a21704bd35c396c4c640e0b1fc0c8fd',1,'client-types.h']]], + ['guac_5flog_5fdebug_2',['GUAC_LOG_DEBUG',['../client-types_8h.html#adfeeb4ff06541220c91ce3401d840727a070794a24cef7ef430b2edaff3c9ea9b',1,'client-types.h']]], + ['guac_5flog_5ferror_3',['GUAC_LOG_ERROR',['../client-types_8h.html#adfeeb4ff06541220c91ce3401d840727a4fd231414f22c9a104106ddaf2b12c2c',1,'client-types.h']]], + ['guac_5flog_5finfo_4',['GUAC_LOG_INFO',['../client-types_8h.html#adfeeb4ff06541220c91ce3401d840727aedc7d68f866aa570a055a88030d36b29',1,'client-types.h']]], + ['guac_5flog_5ftrace_5',['GUAC_LOG_TRACE',['../client-types_8h.html#adfeeb4ff06541220c91ce3401d840727ab507f156c21f790e9311c6c19f8a79eb',1,'client-types.h']]], + ['guac_5flog_5fwarning_6',['GUAC_LOG_WARNING',['../client-types_8h.html#adfeeb4ff06541220c91ce3401d840727a24865770a939aa238cd69cd7f11205be',1,'client-types.h']]], + ['guac_5fmessage_5fuser_5fjoined_7',['GUAC_MESSAGE_USER_JOINED',['../protocol-types_8h.html#ad1a58d77e6383cdf3796b2b3a5d45ff3a9ab734040cf7e3256a7b447648ca31da',1,'protocol-types.h']]], + ['guac_5fmessage_5fuser_5fleft_8',['GUAC_MESSAGE_USER_LEFT',['../protocol-types_8h.html#ad1a58d77e6383cdf3796b2b3a5d45ff3a68026bc3f9747bba767f7e57ad1d51f0',1,'protocol-types.h']]], + ['guac_5fparse_5fcomplete_9',['GUAC_PARSE_COMPLETE',['../parser-types_8h.html#a842bb8c1d5569ebebae3fdadb2527f30ac2f96a86cbe8d0f5db5efc09da4580cf',1,'parser-types.h']]], + ['guac_5fparse_5fcontent_10',['GUAC_PARSE_CONTENT',['../parser-types_8h.html#a842bb8c1d5569ebebae3fdadb2527f30a324af2c7faab24fd596a2a646bf8b55e',1,'parser-types.h']]], + ['guac_5fparse_5ferror_11',['GUAC_PARSE_ERROR',['../parser-types_8h.html#a842bb8c1d5569ebebae3fdadb2527f30ace4ab12c05611f0dbc5260430812b0bc',1,'parser-types.h']]], + ['guac_5fparse_5flength_12',['GUAC_PARSE_LENGTH',['../parser-types_8h.html#a842bb8c1d5569ebebae3fdadb2527f30ad3301ee4914616a122a999a6f28910cc',1,'parser-types.h']]], + ['guac_5fprotocol_5fstatus_5fclient_5fbad_5frequest_13',['GUAC_PROTOCOL_STATUS_CLIENT_BAD_REQUEST',['../protocol-types_8h.html#af946f7f843fa5935dbeeb08f85dec9e2a3368d253bd711779821fd35cfce26fb7',1,'protocol-types.h']]], + ['guac_5fprotocol_5fstatus_5fclient_5fbad_5ftype_14',['GUAC_PROTOCOL_STATUS_CLIENT_BAD_TYPE',['../protocol-types_8h.html#af946f7f843fa5935dbeeb08f85dec9e2aee8dbe77e34276c2c63ac48cfd9efb6a',1,'protocol-types.h']]], + ['guac_5fprotocol_5fstatus_5fclient_5fforbidden_15',['GUAC_PROTOCOL_STATUS_CLIENT_FORBIDDEN',['../protocol-types_8h.html#af946f7f843fa5935dbeeb08f85dec9e2ae69699ec97ca233ff2080e258cbaffc5',1,'protocol-types.h']]], + ['guac_5fprotocol_5fstatus_5fclient_5foverrun_16',['GUAC_PROTOCOL_STATUS_CLIENT_OVERRUN',['../protocol-types_8h.html#af946f7f843fa5935dbeeb08f85dec9e2a8d525475c60f4851a0e54f80e2106d13',1,'protocol-types.h']]], + ['guac_5fprotocol_5fstatus_5fclient_5ftimeout_17',['GUAC_PROTOCOL_STATUS_CLIENT_TIMEOUT',['../protocol-types_8h.html#af946f7f843fa5935dbeeb08f85dec9e2a48bbc2974575fc1418a74367b090dfff',1,'protocol-types.h']]], + ['guac_5fprotocol_5fstatus_5fclient_5ftoo_5fmany_18',['GUAC_PROTOCOL_STATUS_CLIENT_TOO_MANY',['../protocol-types_8h.html#af946f7f843fa5935dbeeb08f85dec9e2aea1d0ee50c190b937904da2ad68cabdc',1,'protocol-types.h']]], + ['guac_5fprotocol_5fstatus_5fclient_5funauthorized_19',['GUAC_PROTOCOL_STATUS_CLIENT_UNAUTHORIZED',['../protocol-types_8h.html#af946f7f843fa5935dbeeb08f85dec9e2af235e2bc03b76506e2b145bef2faadca',1,'protocol-types.h']]], + ['guac_5fprotocol_5fstatus_5fresource_5fclosed_20',['GUAC_PROTOCOL_STATUS_RESOURCE_CLOSED',['../protocol-types_8h.html#af946f7f843fa5935dbeeb08f85dec9e2a08b2dc0d23e51f7a2cba7cc807cb80da',1,'protocol-types.h']]], + ['guac_5fprotocol_5fstatus_5fresource_5fconflict_21',['GUAC_PROTOCOL_STATUS_RESOURCE_CONFLICT',['../protocol-types_8h.html#af946f7f843fa5935dbeeb08f85dec9e2a6f19a3fac58e804570a16351f8c35ee9',1,'protocol-types.h']]], + ['guac_5fprotocol_5fstatus_5fresource_5fnot_5ffound_22',['GUAC_PROTOCOL_STATUS_RESOURCE_NOT_FOUND',['../protocol-types_8h.html#af946f7f843fa5935dbeeb08f85dec9e2a3aa788cd4b2bbcfab592573dbddc2e22',1,'protocol-types.h']]], + ['guac_5fprotocol_5fstatus_5fserver_5fbusy_23',['GUAC_PROTOCOL_STATUS_SERVER_BUSY',['../protocol-types_8h.html#af946f7f843fa5935dbeeb08f85dec9e2a0344ce1d993b626382a44969934354d6',1,'protocol-types.h']]], + ['guac_5fprotocol_5fstatus_5fserver_5ferror_24',['GUAC_PROTOCOL_STATUS_SERVER_ERROR',['../protocol-types_8h.html#af946f7f843fa5935dbeeb08f85dec9e2a1540c5c1a0668f06a9d71443d95063ff',1,'protocol-types.h']]], + ['guac_5fprotocol_5fstatus_5fsession_5fclosed_25',['GUAC_PROTOCOL_STATUS_SESSION_CLOSED',['../protocol-types_8h.html#af946f7f843fa5935dbeeb08f85dec9e2a8e31816937bfdc75c639d3bf0c4063ab',1,'protocol-types.h']]], + ['guac_5fprotocol_5fstatus_5fsession_5fconflict_26',['GUAC_PROTOCOL_STATUS_SESSION_CONFLICT',['../protocol-types_8h.html#af946f7f843fa5935dbeeb08f85dec9e2ae92e68bf446315028b3f1992b19967f7',1,'protocol-types.h']]], + ['guac_5fprotocol_5fstatus_5fsession_5ftimeout_27',['GUAC_PROTOCOL_STATUS_SESSION_TIMEOUT',['../protocol-types_8h.html#af946f7f843fa5935dbeeb08f85dec9e2a3e4f469d39ea08bf7ff8fec3a2f36b23',1,'protocol-types.h']]], + ['guac_5fprotocol_5fstatus_5fsuccess_28',['GUAC_PROTOCOL_STATUS_SUCCESS',['../protocol-types_8h.html#af946f7f843fa5935dbeeb08f85dec9e2aece4c889b9d626073bf7a0cb8fe6d5ac',1,'protocol-types.h']]], + ['guac_5fprotocol_5fstatus_5funsupported_29',['GUAC_PROTOCOL_STATUS_UNSUPPORTED',['../protocol-types_8h.html#af946f7f843fa5935dbeeb08f85dec9e2a3a967a2c59d846eb6e6106066d95ef75',1,'protocol-types.h']]], + ['guac_5fprotocol_5fstatus_5fupstream_5ferror_30',['GUAC_PROTOCOL_STATUS_UPSTREAM_ERROR',['../protocol-types_8h.html#af946f7f843fa5935dbeeb08f85dec9e2a00d154907f7b45e526db18a5a5685d78',1,'protocol-types.h']]], + ['guac_5fprotocol_5fstatus_5fupstream_5fnot_5ffound_31',['GUAC_PROTOCOL_STATUS_UPSTREAM_NOT_FOUND',['../protocol-types_8h.html#af946f7f843fa5935dbeeb08f85dec9e2a503d6c0332647939536488a19513ae3e',1,'protocol-types.h']]], + ['guac_5fprotocol_5fstatus_5fupstream_5ftimeout_32',['GUAC_PROTOCOL_STATUS_UPSTREAM_TIMEOUT',['../protocol-types_8h.html#af946f7f843fa5935dbeeb08f85dec9e2a5829c4335b31db5c6f1e1764264f281f',1,'protocol-types.h']]], + ['guac_5fprotocol_5fstatus_5fupstream_5funavailable_33',['GUAC_PROTOCOL_STATUS_UPSTREAM_UNAVAILABLE',['../protocol-types_8h.html#af946f7f843fa5935dbeeb08f85dec9e2a238ff6f1d0e5fbcb0529fe4985dae814',1,'protocol-types.h']]], + ['guac_5fprotocol_5fversion_5f1_5f0_5f0_34',['GUAC_PROTOCOL_VERSION_1_0_0',['../protocol-types_8h.html#ac7c1d15bae38b970886002bb9811ef8baeb36e8a192edae0a4cf22063801407fe',1,'protocol-types.h']]], + ['guac_5fprotocol_5fversion_5f1_5f1_5f0_35',['GUAC_PROTOCOL_VERSION_1_1_0',['../protocol-types_8h.html#ac7c1d15bae38b970886002bb9811ef8ba3d50a29f8fb2f29fa21dc7ca3889f41f',1,'protocol-types.h']]], + ['guac_5fprotocol_5fversion_5f1_5f3_5f0_36',['GUAC_PROTOCOL_VERSION_1_3_0',['../protocol-types_8h.html#ac7c1d15bae38b970886002bb9811ef8ba8f0ec641ce10a3b848a87d5870220835',1,'protocol-types.h']]], + ['guac_5fprotocol_5fversion_5f1_5f5_5f0_37',['GUAC_PROTOCOL_VERSION_1_5_0',['../protocol-types_8h.html#ac7c1d15bae38b970886002bb9811ef8ba5f599f8cb7086fbf03233710ac28e22a',1,'protocol-types.h']]], + ['guac_5fprotocol_5fversion_5funknown_38',['GUAC_PROTOCOL_VERSION_UNKNOWN',['../protocol-types_8h.html#ac7c1d15bae38b970886002bb9811ef8baaa50b9f536a0346cb43437ea6b744052',1,'protocol-types.h']]], + ['guac_5fsocket_5fclosed_39',['GUAC_SOCKET_CLOSED',['../socket-types_8h.html#a0ac0c0cd123b57d8aba5e6ec6fd20939a02f70c652aab0536f0504d413560766e',1,'socket-types.h']]], + ['guac_5fsocket_5fopen_40',['GUAC_SOCKET_OPEN',['../socket-types_8h.html#a0ac0c0cd123b57d8aba5e6ec6fd20939a7b8a48d941303b384b59a8203a801dc5',1,'socket-types.h']]], + ['guac_5fstatus_5fbusy_41',['GUAC_STATUS_BUSY',['../error-types_8h.html#a1f4f9a73ee399e5dff424376eb4f9c86ae12700a53800d88ba4711e680cc50b55',1,'error-types.h']]], + ['guac_5fstatus_5fcanceled_42',['GUAC_STATUS_CANCELED',['../error-types_8h.html#a1f4f9a73ee399e5dff424376eb4f9c86a4c304f409d4fbde1834d1611c18fe98c',1,'error-types.h']]], + ['guac_5fstatus_5fclosed_43',['GUAC_STATUS_CLOSED',['../error-types_8h.html#a1f4f9a73ee399e5dff424376eb4f9c86a7e66422d5706e2be5306c634244a38ff',1,'error-types.h']]], + ['guac_5fstatus_5finput_5ftoo_5flarge_44',['GUAC_STATUS_INPUT_TOO_LARGE',['../error-types_8h.html#a1f4f9a73ee399e5dff424376eb4f9c86a918e06bdee8b3d84f9840665ccf95d3a',1,'error-types.h']]], + ['guac_5fstatus_5finternal_5ferror_45',['GUAC_STATUS_INTERNAL_ERROR',['../error-types_8h.html#a1f4f9a73ee399e5dff424376eb4f9c86a4a6fccd6ba5576c38b39b5adc05174ab',1,'error-types.h']]], + ['guac_5fstatus_5finvalid_5fargument_46',['GUAC_STATUS_INVALID_ARGUMENT',['../error-types_8h.html#a1f4f9a73ee399e5dff424376eb4f9c86a62db59024cea0e396c8d61051594d6d4',1,'error-types.h']]], + ['guac_5fstatus_5fio_5ferror_47',['GUAC_STATUS_IO_ERROR',['../error-types_8h.html#a1f4f9a73ee399e5dff424376eb4f9c86a32e98ba3d8f2b920728e9b373c02bf7a',1,'error-types.h']]], + ['guac_5fstatus_5fno_5fmemory_48',['GUAC_STATUS_NO_MEMORY',['../error-types_8h.html#a1f4f9a73ee399e5dff424376eb4f9c86abab29ecdd4072426136965c73186d80a',1,'error-types.h']]], + ['guac_5fstatus_5fno_5fspace_49',['GUAC_STATUS_NO_SPACE',['../error-types_8h.html#a1f4f9a73ee399e5dff424376eb4f9c86a26883cca94f7cdbe7199c8962197fbe3',1,'error-types.h']]], + ['guac_5fstatus_5fnot_5favailable_50',['GUAC_STATUS_NOT_AVAILABLE',['../error-types_8h.html#a1f4f9a73ee399e5dff424376eb4f9c86a7bd3cb62015b8eebcc8fdf7af3dd98b7',1,'error-types.h']]], + ['guac_5fstatus_5fnot_5ffound_51',['GUAC_STATUS_NOT_FOUND',['../error-types_8h.html#a1f4f9a73ee399e5dff424376eb4f9c86af990a7a671f2261669eb68023d3767c8',1,'error-types.h']]], + ['guac_5fstatus_5fnot_5fimplemented_52',['GUAC_STATUS_NOT_IMPLEMENTED',['../error-types_8h.html#a1f4f9a73ee399e5dff424376eb4f9c86ab88f5521c885bd66abeafe38d2672ea5',1,'error-types.h']]], + ['guac_5fstatus_5fnot_5finplemented_53',['GUAC_STATUS_NOT_INPLEMENTED',['../error-types_8h.html#a1f4f9a73ee399e5dff424376eb4f9c86a850c15f5310a728b370354e9757c0d8c',1,'error-types.h']]], + ['guac_5fstatus_5fnot_5fsupported_54',['GUAC_STATUS_NOT_SUPPORTED',['../error-types_8h.html#a1f4f9a73ee399e5dff424376eb4f9c86ae0b1c8264b30ab9339be44fbb64fd39e',1,'error-types.h']]], + ['guac_5fstatus_5fout_5fof_5frange_55',['GUAC_STATUS_OUT_OF_RANGE',['../error-types_8h.html#a1f4f9a73ee399e5dff424376eb4f9c86a79e0f730bcc2941322b7e4e99ed60cf4',1,'error-types.h']]], + ['guac_5fstatus_5fpermission_5fdenied_56',['GUAC_STATUS_PERMISSION_DENIED',['../error-types_8h.html#a1f4f9a73ee399e5dff424376eb4f9c86a00f3e091f403a998b27b3b0386bf5740',1,'error-types.h']]], + ['guac_5fstatus_5fprotocol_5ferror_57',['GUAC_STATUS_PROTOCOL_ERROR',['../error-types_8h.html#a1f4f9a73ee399e5dff424376eb4f9c86a0a09fc9f8030566fc8e1bc38438b5787',1,'error-types.h']]], + ['guac_5fstatus_5frefused_58',['GUAC_STATUS_REFUSED',['../error-types_8h.html#a1f4f9a73ee399e5dff424376eb4f9c86a47a9d13217f18fbdab621b9ee37b25d7',1,'error-types.h']]], + ['guac_5fstatus_5fresult_5ftoo_5flarge_59',['GUAC_STATUS_RESULT_TOO_LARGE',['../error-types_8h.html#a1f4f9a73ee399e5dff424376eb4f9c86a114e1037ead51082d710b22998a5f49d',1,'error-types.h']]], + ['guac_5fstatus_5fsee_5ferrno_60',['GUAC_STATUS_SEE_ERRNO',['../error-types_8h.html#a1f4f9a73ee399e5dff424376eb4f9c86af34a2ad1cc0601d22889bb5cbce273b7',1,'error-types.h']]], + ['guac_5fstatus_5fsuccess_61',['GUAC_STATUS_SUCCESS',['../error-types_8h.html#a1f4f9a73ee399e5dff424376eb4f9c86a05aa91b6406b1d4258619b4b6a2d92b3',1,'error-types.h']]], + ['guac_5fstatus_5ftimeout_62',['GUAC_STATUS_TIMEOUT',['../error-types_8h.html#a1f4f9a73ee399e5dff424376eb4f9c86ae1c538233d92f2c7e7fd58887ea487b3',1,'error-types.h']]], + ['guac_5fstatus_5ftoo_5fmany_63',['GUAC_STATUS_TOO_MANY',['../error-types_8h.html#a1f4f9a73ee399e5dff424376eb4f9c86a673866879da07e263c74ee215ad0b546',1,'error-types.h']]], + ['guac_5fstatus_5ftry_5fagain_64',['GUAC_STATUS_TRY_AGAIN',['../error-types_8h.html#a1f4f9a73ee399e5dff424376eb4f9c86a969fd36abf3176099ccd663957ee518a',1,'error-types.h']]], + ['guac_5fstatus_5fwould_5fblock_65',['GUAC_STATUS_WOULD_BLOCK',['../error-types_8h.html#a1f4f9a73ee399e5dff424376eb4f9c86a162c54095836dd13a63139d6debe060f',1,'error-types.h']]] +]; diff --git a/doc/1.5.5/libguac/search/files_0.js b/doc/1.5.5/libguac/search/files_0.js new file mode 100644 index 000000000..9a1f4cf7a --- /dev/null +++ b/doc/1.5.5/libguac/search/files_0.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['argv_2dconstants_2eh_0',['argv-constants.h',['../argv-constants_8h.html',1,'']]], + ['argv_2dfntypes_2eh_1',['argv-fntypes.h',['../argv-fntypes_8h.html',1,'']]], + ['argv_2eh_2',['argv.h',['../argv_8h.html',1,'']]], + ['audio_2dfntypes_2eh_3',['audio-fntypes.h',['../audio-fntypes_8h.html',1,'']]], + ['audio_2dtypes_2eh_4',['audio-types.h',['../audio-types_8h.html',1,'']]], + ['audio_2eh_5',['audio.h',['../audio_8h.html',1,'']]] +]; diff --git a/doc/1.5.5/libguac/search/files_1.js b/doc/1.5.5/libguac/search/files_1.js new file mode 100644 index 000000000..0fcf71ffc --- /dev/null +++ b/doc/1.5.5/libguac/search/files_1.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['client_2dconstants_2eh_0',['client-constants.h',['../client-constants_8h.html',1,'']]], + ['client_2dfntypes_2eh_1',['client-fntypes.h',['../client-fntypes_8h.html',1,'']]], + ['client_2dtypes_2eh_2',['client-types.h',['../client-types_8h.html',1,'']]], + ['client_2eh_3',['client.h',['../client_8h.html',1,'']]] +]; diff --git a/doc/1.5.5/libguac/search/files_2.js b/doc/1.5.5/libguac/search/files_2.js new file mode 100644 index 000000000..0ea8eafea --- /dev/null +++ b/doc/1.5.5/libguac/search/files_2.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['error_2dtypes_2eh_0',['error-types.h',['../error-types_8h.html',1,'']]], + ['error_2eh_1',['error.h',['../error_8h.html',1,'']]] +]; diff --git a/doc/1.5.5/libguac/search/files_3.js b/doc/1.5.5/libguac/search/files_3.js new file mode 100644 index 000000000..16a7cd303 --- /dev/null +++ b/doc/1.5.5/libguac/search/files_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['hash_2eh_0',['hash.h',['../hash_8h.html',1,'']]] +]; diff --git a/doc/1.5.5/libguac/search/files_4.js b/doc/1.5.5/libguac/search/files_4.js new file mode 100644 index 000000000..e511f191e --- /dev/null +++ b/doc/1.5.5/libguac/search/files_4.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['layer_2dtypes_2eh_0',['layer-types.h',['../layer-types_8h.html',1,'']]], + ['layer_2eh_1',['layer.h',['../layer_8h.html',1,'']]] +]; diff --git a/doc/1.5.5/libguac/search/files_5.js b/doc/1.5.5/libguac/search/files_5.js new file mode 100644 index 000000000..0d4ac2ea0 --- /dev/null +++ b/doc/1.5.5/libguac/search/files_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['mem_2eh_0',['mem.h',['../mem_8h.html',1,'']]] +]; diff --git a/doc/1.5.5/libguac/search/files_6.js b/doc/1.5.5/libguac/search/files_6.js new file mode 100644 index 000000000..0293d4e01 --- /dev/null +++ b/doc/1.5.5/libguac/search/files_6.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['object_2dtypes_2eh_0',['object-types.h',['../object-types_8h.html',1,'']]], + ['object_2eh_1',['object.h',['../object_8h.html',1,'']]] +]; diff --git a/doc/1.5.5/libguac/search/files_7.js b/doc/1.5.5/libguac/search/files_7.js new file mode 100644 index 000000000..8247cbf00 --- /dev/null +++ b/doc/1.5.5/libguac/search/files_7.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['parser_2dconstants_2eh_0',['parser-constants.h',['../parser-constants_8h.html',1,'']]], + ['parser_2dtypes_2eh_1',['parser-types.h',['../parser-types_8h.html',1,'']]], + ['parser_2eh_2',['parser.h',['../parser_8h.html',1,'']]], + ['plugin_2dconstants_2eh_3',['plugin-constants.h',['../plugin-constants_8h.html',1,'']]], + ['plugin_2eh_4',['plugin.h',['../plugin_8h.html',1,'']]], + ['pool_2dtypes_2eh_5',['pool-types.h',['../pool-types_8h.html',1,'']]], + ['pool_2eh_6',['pool.h',['../pool_8h.html',1,'']]], + ['protocol_2dconstants_2eh_7',['protocol-constants.h',['../protocol-constants_8h.html',1,'']]], + ['protocol_2dtypes_2eh_8',['protocol-types.h',['../protocol-types_8h.html',1,'']]], + ['protocol_2eh_9',['protocol.h',['../protocol_8h.html',1,'']]] +]; diff --git a/doc/1.5.5/libguac/search/files_8.js b/doc/1.5.5/libguac/search/files_8.js new file mode 100644 index 000000000..fbbd3585c --- /dev/null +++ b/doc/1.5.5/libguac/search/files_8.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['recording_2eh_0',['recording.h',['../recording_8h.html',1,'']]] +]; diff --git a/doc/1.5.5/libguac/search/files_9.js b/doc/1.5.5/libguac/search/files_9.js new file mode 100644 index 000000000..59af778c7 --- /dev/null +++ b/doc/1.5.5/libguac/search/files_9.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['socket_2dconstants_2eh_0',['socket-constants.h',['../socket-constants_8h.html',1,'']]], + ['socket_2dfntypes_2eh_1',['socket-fntypes.h',['../socket-fntypes_8h.html',1,'']]], + ['socket_2dssl_2eh_2',['socket-ssl.h',['../socket-ssl_8h.html',1,'']]], + ['socket_2dtypes_2eh_3',['socket-types.h',['../socket-types_8h.html',1,'']]], + ['socket_2dwsa_2eh_4',['socket-wsa.h',['../socket-wsa_8h.html',1,'']]], + ['socket_2eh_5',['socket.h',['../socket_8h.html',1,'']]], + ['stream_2dtypes_2eh_6',['stream-types.h',['../stream-types_8h.html',1,'']]], + ['stream_2eh_7',['stream.h',['../stream_8h.html',1,'']]], + ['string_2eh_8',['string.h',['../string_8h.html',1,'']]] +]; diff --git a/doc/1.5.5/libguac/search/files_a.js b/doc/1.5.5/libguac/search/files_a.js new file mode 100644 index 000000000..bcd8393e3 --- /dev/null +++ b/doc/1.5.5/libguac/search/files_a.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['timestamp_2dtypes_2eh_0',['timestamp-types.h',['../timestamp-types_8h.html',1,'']]], + ['timestamp_2eh_1',['timestamp.h',['../timestamp_8h.html',1,'']]] +]; diff --git a/doc/1.5.5/libguac/search/files_b.js b/doc/1.5.5/libguac/search/files_b.js new file mode 100644 index 000000000..ec20e4956 --- /dev/null +++ b/doc/1.5.5/libguac/search/files_b.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['unicode_2eh_0',['unicode.h',['../unicode_8h.html',1,'']]], + ['user_2dconstants_2eh_1',['user-constants.h',['../user-constants_8h.html',1,'']]], + ['user_2dfntypes_2eh_2',['user-fntypes.h',['../user-fntypes_8h.html',1,'']]], + ['user_2dtypes_2eh_3',['user-types.h',['../user-types_8h.html',1,'']]], + ['user_2eh_4',['user.h',['../user_8h.html',1,'']]] +]; diff --git a/doc/1.5.5/libguac/search/files_c.js b/doc/1.5.5/libguac/search/files_c.js new file mode 100644 index 000000000..4844dc739 --- /dev/null +++ b/doc/1.5.5/libguac/search/files_c.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['wol_2dconstants_2eh_0',['wol-constants.h',['../wol-constants_8h.html',1,'']]], + ['wol_2eh_1',['wol.h',['../wol_8h.html',1,'']]] +]; diff --git a/doc/1.5.5/libguac/search/functions_0.js b/doc/1.5.5/libguac/search/functions_0.js new file mode 100644 index 000000000..6617a9856 --- /dev/null +++ b/doc/1.5.5/libguac/search/functions_0.js @@ -0,0 +1,174 @@ +var searchData= +[ + ['guac_5fargv_5fawait_0',['guac_argv_await',['../argv_8h.html#a3390cfa416876991fcaf08871160415d',1,'argv.h']]], + ['guac_5fargv_5freceived_1',['guac_argv_received',['../argv_8h.html#adb02a115909eed11fcf0d864de04ea8d',1,'argv.h']]], + ['guac_5fargv_5fregister_2',['guac_argv_register',['../argv_8h.html#abc25c66eecc88d82851aab121f93f599',1,'argv.h']]], + ['guac_5fargv_5fstop_3',['guac_argv_stop',['../argv_8h.html#a600211a457a9db1ad0741b13d0179d33',1,'argv.h']]], + ['guac_5faudio_5fstream_5fadd_5fuser_4',['guac_audio_stream_add_user',['../audio_8h.html#a2b8e2f05a19b137454832a5dbc6c3864',1,'audio.h']]], + ['guac_5faudio_5fstream_5falloc_5',['guac_audio_stream_alloc',['../audio_8h.html#a67e64fe3ad44337fe5d2edfac23ef92d',1,'audio.h']]], + ['guac_5faudio_5fstream_5fflush_6',['guac_audio_stream_flush',['../audio_8h.html#af75feccacea2b14ee946064cf623f143',1,'audio.h']]], + ['guac_5faudio_5fstream_5ffree_7',['guac_audio_stream_free',['../audio_8h.html#adcc872292b5ba6c39905610b2bccbf31',1,'audio.h']]], + ['guac_5faudio_5fstream_5freset_8',['guac_audio_stream_reset',['../audio_8h.html#a0bbd483b1bfe5eede15539a0aacfedad',1,'audio.h']]], + ['guac_5faudio_5fstream_5fwrite_5fpcm_9',['guac_audio_stream_write_pcm',['../audio_8h.html#a11bdfee60584106ba85d97a3f8273cc2',1,'audio.h']]], + ['guac_5fclient_5fabort_10',['guac_client_abort',['../client_8h.html#a62a29f7820deaff00a10ec79aa81aed4',1,'client.h']]], + ['guac_5fclient_5fadd_5fuser_11',['guac_client_add_user',['../client_8h.html#af66d105dfd1453ec46b423e6b25fa371',1,'client.h']]], + ['guac_5fclient_5falloc_12',['guac_client_alloc',['../client_8h.html#ae0e9671c78de15dd05476565a7275408',1,'client.h']]], + ['guac_5fclient_5falloc_5fbuffer_13',['guac_client_alloc_buffer',['../client_8h.html#a597e311d0dbec67fc4c62afd4068682c',1,'client.h']]], + ['guac_5fclient_5falloc_5flayer_14',['guac_client_alloc_layer',['../client_8h.html#a5cb751861ac7591fd67bb0922bea789d',1,'client.h']]], + ['guac_5fclient_5falloc_5fstream_15',['guac_client_alloc_stream',['../client_8h.html#a4a6162122be6d34fde65c6f2b0235dc3',1,'client.h']]], + ['guac_5fclient_5fend_5fframe_16',['guac_client_end_frame',['../client_8h.html#a686fc65f5b1afcc3f3b53e36cd1a2ebc',1,'client.h']]], + ['guac_5fclient_5ffor_5fowner_17',['guac_client_for_owner',['../client_8h.html#a812bbf063bfc147bb71ed90de0684eea',1,'client.h']]], + ['guac_5fclient_5ffor_5fuser_18',['guac_client_for_user',['../client_8h.html#ac7e08a2af6d44a8e05f208499319f972',1,'client.h']]], + ['guac_5fclient_5fforeach_5fpending_5fuser_19',['guac_client_foreach_pending_user',['../client_8h.html#a7f2dc10c9d3b11917a9cdbbac41091a0',1,'client.h']]], + ['guac_5fclient_5fforeach_5fuser_20',['guac_client_foreach_user',['../client_8h.html#af652f3db0f89d488cef6d90f612a2077',1,'client.h']]], + ['guac_5fclient_5ffree_21',['guac_client_free',['../client_8h.html#a76cdc454a23fdcbb70d56f923f6b6427',1,'client.h']]], + ['guac_5fclient_5ffree_5fbuffer_22',['guac_client_free_buffer',['../client_8h.html#afc03a32b3113d9a95700cac54f1cbd4b',1,'client.h']]], + ['guac_5fclient_5ffree_5flayer_23',['guac_client_free_layer',['../client_8h.html#a4e5b374211012d1897792335112dcb89',1,'client.h']]], + ['guac_5fclient_5ffree_5fstream_24',['guac_client_free_stream',['../client_8h.html#af0103a5aae8ba76badd2e68e827f6782',1,'client.h']]], + ['guac_5fclient_5fget_5fprocessing_5flag_25',['guac_client_get_processing_lag',['../client_8h.html#aa2b94b3145fcebf2d7b1999df11d0b2c',1,'client.h']]], + ['guac_5fclient_5fload_5fplugin_26',['guac_client_load_plugin',['../client_8h.html#afa2b90d686c56cf753c36718ec085f35',1,'client.h']]], + ['guac_5fclient_5flog_27',['guac_client_log',['../client_8h.html#ad53666bbe29346497cabb04fc9628208',1,'client.h']]], + ['guac_5fclient_5fowner_5fnotify_5fjoin_28',['guac_client_owner_notify_join',['../client_8h.html#a4c51bb46159398910db2dac4660b735a',1,'client.h']]], + ['guac_5fclient_5fowner_5fnotify_5fleave_29',['guac_client_owner_notify_leave',['../client_8h.html#ad17cc55d4bb3162e3c544dc8aecf5c62',1,'client.h']]], + ['guac_5fclient_5fowner_5fsend_5frequired_30',['guac_client_owner_send_required',['../client_8h.html#aef81b4409308c195d26db3443e9e76fe',1,'client.h']]], + ['guac_5fclient_5fowner_5fsupports_5fmsg_31',['guac_client_owner_supports_msg',['../client_8h.html#a1fefd4006b7de5792920a8dd9da87f87',1,'client.h']]], + ['guac_5fclient_5fowner_5fsupports_5frequired_32',['guac_client_owner_supports_required',['../client_8h.html#a347fdf77fb6e0829f00513e6b4da406f',1,'client.h']]], + ['guac_5fclient_5fremove_5fuser_33',['guac_client_remove_user',['../client_8h.html#a02832d5be5330dc3de524b497b7c6dfa',1,'client.h']]], + ['guac_5fclient_5fstop_34',['guac_client_stop',['../client_8h.html#a022d4b5587c84f2963b176ab7999aa1b',1,'client.h']]], + ['guac_5fclient_5fstream_5fargv_35',['guac_client_stream_argv',['../client_8h.html#a6c9d8717d4b8eaa50dbd7301af27a06f',1,'client.h']]], + ['guac_5fclient_5fstream_5fjpeg_36',['guac_client_stream_jpeg',['../client_8h.html#aa51ede155ad7777bc8d2e82aa6e779bf',1,'client.h']]], + ['guac_5fclient_5fstream_5fpng_37',['guac_client_stream_png',['../client_8h.html#a317b9d79afd0b0b473d7d359e0c33750',1,'client.h']]], + ['guac_5fclient_5fstream_5fwebp_38',['guac_client_stream_webp',['../client_8h.html#a55adbd5ee8f27c4df4394dbb5bf9416e',1,'client.h']]], + ['guac_5fclient_5fsupports_5fwebp_39',['guac_client_supports_webp',['../client_8h.html#a79cc74558e8f64807ea2847fbacd20e3',1,'client.h']]], + ['guac_5fhash_5fsurface_40',['guac_hash_surface',['../hash_8h.html#ae8243122fb0b158a22058f9dbd2bbc0c',1,'hash.h']]], + ['guac_5fparser_5falloc_41',['guac_parser_alloc',['../parser_8h.html#a36ad81a0d47f1266160bc1691de1635e',1,'parser.h']]], + ['guac_5fparser_5fappend_42',['guac_parser_append',['../parser_8h.html#ab1ca22b7bf9c232cce0d122f03dc183d',1,'parser.h']]], + ['guac_5fparser_5fexpect_43',['guac_parser_expect',['../parser_8h.html#ac54c94465aead463ce10e9a090b9b701',1,'parser.h']]], + ['guac_5fparser_5ffree_44',['guac_parser_free',['../parser_8h.html#ad3b7d4df1ca25c5bced1c08b329f0a0f',1,'parser.h']]], + ['guac_5fparser_5flength_45',['guac_parser_length',['../parser_8h.html#a8899dd607997fcffd78517947b17760b',1,'parser.h']]], + ['guac_5fparser_5fread_46',['guac_parser_read',['../parser_8h.html#a8a1169f5040732e4f4b55ee6c1e1fe93',1,'parser.h']]], + ['guac_5fparser_5fshift_47',['guac_parser_shift',['../parser_8h.html#a56e7b2a85abdb6cb4ec4bd6e47a92ed3',1,'parser.h']]], + ['guac_5fpool_5falloc_48',['guac_pool_alloc',['../pool_8h.html#a6b0352a9634fd985f6828b8ba7b8ee7b',1,'pool.h']]], + ['guac_5fpool_5ffree_49',['guac_pool_free',['../pool_8h.html#a7015e5939617ab7e55477ba0a4f85bdb',1,'pool.h']]], + ['guac_5fpool_5ffree_5fint_50',['guac_pool_free_int',['../pool_8h.html#ad90069a41689cf319f46af44bb113579',1,'pool.h']]], + ['guac_5fpool_5fnext_5fint_51',['guac_pool_next_int',['../pool_8h.html#abe3c79e0fec121e3d1b1d3ce37aa45f4',1,'pool.h']]], + ['guac_5fprotocol_5fdecode_5fbase64_52',['guac_protocol_decode_base64',['../protocol_8h.html#a0ad7d9b8b205d6fc368eff2d9e8e40ec',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fack_53',['guac_protocol_send_ack',['../protocol_8h.html#ab02be6102d9f4aaa2bbb0b249f09d63e',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5farc_54',['guac_protocol_send_arc',['../protocol_8h.html#ad74bc43b5f03b79027bf02d873cd77b3',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fargs_55',['guac_protocol_send_args',['../protocol_8h.html#a6047d380b097ebc7d5f35b167e3419e6',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fargv_56',['guac_protocol_send_argv',['../protocol_8h.html#aaddd6d7c6ab1289efb3dd38c39bde531',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5faudio_57',['guac_protocol_send_audio',['../protocol_8h.html#ab92edb38a4df2db402a013422cee6b42',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fblob_58',['guac_protocol_send_blob',['../protocol_8h.html#a798d57ec3f3cdfa0d9bb4906f02d5127',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fblobs_59',['guac_protocol_send_blobs',['../protocol_8h.html#ad4b3d3b5741b377a197c02384e4b870e',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fbody_60',['guac_protocol_send_body',['../protocol_8h.html#aca9fb516e730233c33da297819f7ae7e',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fcfill_61',['guac_protocol_send_cfill',['../protocol_8h.html#afda3a1a8285e323fca6aef50cb2feb5e',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fclip_62',['guac_protocol_send_clip',['../protocol_8h.html#acbd1869635b752bbf52998613804df00',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fclipboard_63',['guac_protocol_send_clipboard',['../protocol_8h.html#a7e8a055e57afbcd9c9b520767d9a1c64',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fclose_64',['guac_protocol_send_close',['../protocol_8h.html#a45a3e4e32900594e17c49db6939fc10a',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fconnect_65',['guac_protocol_send_connect',['../protocol_8h.html#ac8dea4393e2ec69d5d27fd0759a70fcb',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fcopy_66',['guac_protocol_send_copy',['../protocol_8h.html#ad035df3781dc19ba2330b02ef1dd6eda',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fcstroke_67',['guac_protocol_send_cstroke',['../protocol_8h.html#ac6f28f1beb2fa07e1b3f6fa774789fd9',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fcursor_68',['guac_protocol_send_cursor',['../protocol_8h.html#a17da53514189083fa84aa3cc0bf6883a',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fcurve_69',['guac_protocol_send_curve',['../protocol_8h.html#a1b9985b080a339dcd14b95f5e46e8ab5',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fdisconnect_70',['guac_protocol_send_disconnect',['../protocol_8h.html#afd463766036afda4798edbe788d29524',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fdispose_71',['guac_protocol_send_dispose',['../protocol_8h.html#a7b2456a017f772a39be6d33a5da9149d',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fdistort_72',['guac_protocol_send_distort',['../protocol_8h.html#a6b4cdd9133dbdca8cfc1e78a0d6bdf13',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fend_73',['guac_protocol_send_end',['../protocol_8h.html#ae1bb569878a14efecccc0c05757d1cae',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5ferror_74',['guac_protocol_send_error',['../protocol_8h.html#abe696ca7c9841883c5d5bea513d4ee9a',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5ffile_75',['guac_protocol_send_file',['../protocol_8h.html#a453e1b22d63a9d07ba23b3a6726c2f06',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5ffilesystem_76',['guac_protocol_send_filesystem',['../protocol_8h.html#a3779c2287625af70fb001afbcc739da5',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fidentity_77',['guac_protocol_send_identity',['../protocol_8h.html#aac205e52801a875bfbef02ae237b6b15',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fimg_78',['guac_protocol_send_img',['../protocol_8h.html#afda8074f65d35795203f392f6688163e',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fkey_79',['guac_protocol_send_key',['../protocol_8h.html#a2d276595cea8a2d382240d868487f077',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5flfill_80',['guac_protocol_send_lfill',['../protocol_8h.html#a9271e3b6cc0030b833d18137969a4018',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fline_81',['guac_protocol_send_line',['../protocol_8h.html#afac3f57649c20b5e39c484a52d264005',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5flog_82',['guac_protocol_send_log',['../protocol_8h.html#a6f832f5b814129d2819f115d84da3cd0',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5flstroke_83',['guac_protocol_send_lstroke',['../protocol_8h.html#a5b7d621d534126e26178789800a1a5d5',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fmouse_84',['guac_protocol_send_mouse',['../protocol_8h.html#a8947056262da2f3263b9851370597622',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fmove_85',['guac_protocol_send_move',['../protocol_8h.html#ac7409451b0f2b18dc870d347545c9afd',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fmsg_86',['guac_protocol_send_msg',['../protocol_8h.html#a0e28f4a746af298f410c84929f39eebd',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fname_87',['guac_protocol_send_name',['../protocol_8h.html#a481fbaab3b8e72505df752ac2f6cc59e',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fnest_88',['guac_protocol_send_nest',['../protocol_8h.html#a94efa63c9895383e142a3f7ce559300b',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fnop_89',['guac_protocol_send_nop',['../protocol_8h.html#a8fa17d3aa1270b806ac6a386798c6d41',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fpipe_90',['guac_protocol_send_pipe',['../protocol_8h.html#a18b2c462077b7c51d211f3db09c30292',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fpop_91',['guac_protocol_send_pop',['../protocol_8h.html#ab29ab6edd91e954fd686742c92eab6d4',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fpush_92',['guac_protocol_send_push',['../protocol_8h.html#a9db04720cbb2bc972f48f2e9332f23a8',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fready_93',['guac_protocol_send_ready',['../protocol_8h.html#a102b7719fbd9c8ea0eb2dc4f51e26359',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5frect_94',['guac_protocol_send_rect',['../protocol_8h.html#a42dc3db797b83accd3418b76648adac5',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5frequired_95',['guac_protocol_send_required',['../protocol_8h.html#abd34768cdcdf71ad40acc0f02cc77ed1',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5freset_96',['guac_protocol_send_reset',['../protocol_8h.html#a5f6433cc21bc043c57fb7c468428373a',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fselect_97',['guac_protocol_send_select',['../protocol_8h.html#a8757c7870e648b220dbc76b8292fe5cf',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fset_98',['guac_protocol_send_set',['../protocol_8h.html#aa3750a6c0fbf190fb71a6ab0955cb31a',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fset_5fint_99',['guac_protocol_send_set_int',['../protocol_8h.html#a48774aa73feb8951367dfb4a313fd50b',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fshade_100',['guac_protocol_send_shade',['../protocol_8h.html#a0e72a4122a3a7c45fa21e0d5607cc4d5',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fsize_101',['guac_protocol_send_size',['../protocol_8h.html#affc4cf09c3337bd860439da99bdfef98',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fstart_102',['guac_protocol_send_start',['../protocol_8h.html#a60d33439eb4b5a11535a9a77e57c4126',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fsync_103',['guac_protocol_send_sync',['../protocol_8h.html#aa11f8798abca85fd2b47b5f9a027fa73',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5ftouch_104',['guac_protocol_send_touch',['../protocol_8h.html#a4b7d35cc19d822e53e074e0bdc2dd47a',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5ftransfer_105',['guac_protocol_send_transfer',['../protocol_8h.html#aecdce272ed4c317c5b7291e42239a1f9',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5ftransform_106',['guac_protocol_send_transform',['../protocol_8h.html#a17058795c93be51c82a9df95eca8e62b',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fundefine_107',['guac_protocol_send_undefine',['../protocol_8h.html#aefa251505e61332e8e1c27ade0478e64',1,'protocol.h']]], + ['guac_5fprotocol_5fsend_5fvideo_108',['guac_protocol_send_video',['../protocol_8h.html#a657216f2e63d2d42e8624f96def84bf8',1,'protocol.h']]], + ['guac_5fprotocol_5fstring_5fto_5fversion_109',['guac_protocol_string_to_version',['../protocol_8h.html#a3304f28ac07fa60ee7358a54e3f30396',1,'protocol.h']]], + ['guac_5fprotocol_5fversion_5fto_5fstring_110',['guac_protocol_version_to_string',['../protocol_8h.html#a30fcbea302b1a1eecd8516be0f552981',1,'protocol.h']]], + ['guac_5frecording_5fcreate_111',['guac_recording_create',['../recording_8h.html#ae73a354b488307495f4ea30ea3358ead',1,'recording.h']]], + ['guac_5frecording_5ffree_112',['guac_recording_free',['../recording_8h.html#aef315904339a279194089880d5ff91bc',1,'recording.h']]], + ['guac_5frecording_5freport_5fkey_113',['guac_recording_report_key',['../recording_8h.html#a41a03f63e01cdf139a301b161807a23f',1,'recording.h']]], + ['guac_5frecording_5freport_5fmouse_114',['guac_recording_report_mouse',['../recording_8h.html#a0f3fab8ec61a695440ef92e541d23679',1,'recording.h']]], + ['guac_5frecording_5freport_5ftouch_115',['guac_recording_report_touch',['../recording_8h.html#abce84ed9419ac815c6c090c605a7ca62',1,'recording.h']]], + ['guac_5fsocket_5falloc_116',['guac_socket_alloc',['../socket_8h.html#a79d263402c25a0f17939c037ebb717f1',1,'socket.h']]], + ['guac_5fsocket_5fbroadcast_117',['guac_socket_broadcast',['../socket_8h.html#a2f796129a6bb2b6656070f2066deba9d',1,'socket.h']]], + ['guac_5fsocket_5fbroadcast_5fpending_118',['guac_socket_broadcast_pending',['../socket_8h.html#a8b2ae1edf7f4b34c7eebe33c90f80d67',1,'socket.h']]], + ['guac_5fsocket_5fflush_119',['guac_socket_flush',['../socket_8h.html#ababc834d5812e006b55a79da417bfe12',1,'socket.h']]], + ['guac_5fsocket_5fflush_5fbase64_120',['guac_socket_flush_base64',['../socket_8h.html#a09d5f60d75c57640a4c483d42445c1ab',1,'socket.h']]], + ['guac_5fsocket_5ffree_121',['guac_socket_free',['../socket_8h.html#a376df8efcc02a7104504f104433884ed',1,'socket.h']]], + ['guac_5fsocket_5finstruction_5fbegin_122',['guac_socket_instruction_begin',['../socket_8h.html#a00c8f00ab54c42e42c9f489caf5478b1',1,'socket.h']]], + ['guac_5fsocket_5finstruction_5fend_123',['guac_socket_instruction_end',['../socket_8h.html#a603c23b24e2e2e95eeb2ce08d8115e94',1,'socket.h']]], + ['guac_5fsocket_5fnest_124',['guac_socket_nest',['../socket_8h.html#afa5052f0596a169da638d885f73e4e87',1,'socket.h']]], + ['guac_5fsocket_5fopen_125',['guac_socket_open',['../socket_8h.html#ada54a06fcd80f56608bd198d14d37c77',1,'socket.h']]], + ['guac_5fsocket_5fopen_5fsecure_126',['guac_socket_open_secure',['../socket-ssl_8h.html#ad831993464afec46efccf69990bdda50',1,'socket-ssl.h']]], + ['guac_5fsocket_5fopen_5fwsa_127',['guac_socket_open_wsa',['../socket-wsa_8h.html#a1fd412d62f5d1702fd78b9c0638a064e',1,'socket-wsa.h']]], + ['guac_5fsocket_5fread_128',['guac_socket_read',['../socket_8h.html#af5d6846212d792c5bce7f8a4fd46cd31',1,'socket.h']]], + ['guac_5fsocket_5frequire_5fkeep_5falive_129',['guac_socket_require_keep_alive',['../socket_8h.html#a1d8c5111a8234c7785ae23f379f7db03',1,'socket.h']]], + ['guac_5fsocket_5fselect_130',['guac_socket_select',['../socket_8h.html#a41b0d7a25ccda3d0ae20143880cf53b7',1,'socket.h']]], + ['guac_5fsocket_5ftee_131',['guac_socket_tee',['../socket_8h.html#a1fccad6e6a4f135b4b694b400c768f97',1,'socket.h']]], + ['guac_5fsocket_5fwrite_132',['guac_socket_write',['../socket_8h.html#adb6eb960de27526bc96e1f9af797e2c4',1,'socket.h']]], + ['guac_5fsocket_5fwrite_5fbase64_133',['guac_socket_write_base64',['../socket_8h.html#ac7ec68bc42436ba316805718c292c510',1,'socket.h']]], + ['guac_5fsocket_5fwrite_5fint_134',['guac_socket_write_int',['../socket_8h.html#a57a963e37377de2104c2d785980ff400',1,'socket.h']]], + ['guac_5fsocket_5fwrite_5fstring_135',['guac_socket_write_string',['../socket_8h.html#ad0cb48c7896361b522ae5a222a3b5efc',1,'socket.h']]], + ['guac_5fstatus_5fstring_136',['guac_status_string',['../error_8h.html#a39a2290527ea7c3f0acb07f002c397b1',1,'error.h']]], + ['guac_5fstrdup_137',['guac_strdup',['../string_8h.html#ac446136fc070b071862d422b777eafc3',1,'string.h']]], + ['guac_5fstrlcat_138',['guac_strlcat',['../string_8h.html#a0dccfb28be71414fb2a4b1b641799f57',1,'string.h']]], + ['guac_5fstrlcpy_139',['guac_strlcpy',['../string_8h.html#add551909cdd14d762106832a800a5e16',1,'string.h']]], + ['guac_5fstrljoin_140',['guac_strljoin',['../string_8h.html#a186ea73f38cfaf14f8a5b13ad7e9724f',1,'string.h']]], + ['guac_5fstrnstr_141',['guac_strnstr',['../string_8h.html#aa29a3e046b785d93e1db17f33f3e996e',1,'string.h']]], + ['guac_5fsurface_5fcmp_142',['guac_surface_cmp',['../hash_8h.html#a377c701a920281a98cbcf0842124aaac',1,'hash.h']]], + ['guac_5ftimestamp_5fcurrent_143',['guac_timestamp_current',['../timestamp_8h.html#ab85ce937dce4d8e94c173be917bc0719',1,'timestamp.h']]], + ['guac_5ftimestamp_5fmsleep_144',['guac_timestamp_msleep',['../timestamp_8h.html#a4d1fdc2698a04c75e196b014a4717868',1,'timestamp.h']]], + ['guac_5fuser_5fabort_145',['guac_user_abort',['../user_8h.html#a0eff54a869374e37237b2006ad77b958',1,'user.h']]], + ['guac_5fuser_5falloc_146',['guac_user_alloc',['../user_8h.html#a383751a58b70f6c59a6be4c10a6a8dc4',1,'user.h']]], + ['guac_5fuser_5falloc_5fobject_147',['guac_user_alloc_object',['../user_8h.html#a59025db48eae31380bd231bfb45dcf86',1,'user.h']]], + ['guac_5fuser_5falloc_5fstream_148',['guac_user_alloc_stream',['../user_8h.html#a58c2228a0ad1f7aa6c13b7b4f225f928',1,'user.h']]], + ['guac_5fuser_5ffree_149',['guac_user_free',['../user_8h.html#a7e0e1220fd00fd769b8e6b731f8c9bf8',1,'user.h']]], + ['guac_5fuser_5ffree_5fobject_150',['guac_user_free_object',['../user_8h.html#acf92065fb6bbc92f9794ea50255acdb9',1,'user.h']]], + ['guac_5fuser_5ffree_5fstream_151',['guac_user_free_stream',['../user_8h.html#a3b3c740837b8e2cae6a232b45ca362f4',1,'user.h']]], + ['guac_5fuser_5fhandle_5fconnection_152',['guac_user_handle_connection',['../user_8h.html#a28f08ab54f138796dea4655ef54526fe',1,'user.h']]], + ['guac_5fuser_5fhandle_5finstruction_153',['guac_user_handle_instruction',['../user_8h.html#a0303ef487d51b06bb0f007f1a5df0d78',1,'user.h']]], + ['guac_5fuser_5flog_154',['guac_user_log',['../user_8h.html#ab19481d0800901190d3d734eae466151',1,'user.h']]], + ['guac_5fuser_5fparse_5fargs_5fboolean_155',['guac_user_parse_args_boolean',['../user_8h.html#a5f0bae838d82357e95e98769f7b98cd2',1,'user.h']]], + ['guac_5fuser_5fparse_5fargs_5fint_156',['guac_user_parse_args_int',['../user_8h.html#a08f6fd4d84de665487a45fb324dc8844',1,'user.h']]], + ['guac_5fuser_5fparse_5fargs_5fstring_157',['guac_user_parse_args_string',['../user_8h.html#a48fa37571297fd9649a6eabd982854ae',1,'user.h']]], + ['guac_5fuser_5fstop_158',['guac_user_stop',['../user_8h.html#a8216ec7024947564fb4ea6b8b0b07eaf',1,'user.h']]], + ['guac_5fuser_5fstream_5fargv_159',['guac_user_stream_argv',['../user_8h.html#aa3f85461f15abfb46fd7c732538b33ea',1,'user.h']]], + ['guac_5fuser_5fstream_5fjpeg_160',['guac_user_stream_jpeg',['../user_8h.html#a6e947ee6996d5711f18d5b785757ccb3',1,'user.h']]], + ['guac_5fuser_5fstream_5fpng_161',['guac_user_stream_png',['../user_8h.html#a35e4c7ba75a16c0b512d543ef4fe9630',1,'user.h']]], + ['guac_5fuser_5fstream_5fwebp_162',['guac_user_stream_webp',['../user_8h.html#af00042d94cb64fb8ac92cd84aff05bf8',1,'user.h']]], + ['guac_5fuser_5fsupports_5fmsg_163',['guac_user_supports_msg',['../user_8h.html#a602117049c9731a0f165a78b2d7dfe17',1,'user.h']]], + ['guac_5fuser_5fsupports_5frequired_164',['guac_user_supports_required',['../user_8h.html#a0c54aa65599c3d2d6c62c752f850d6a6',1,'user.h']]], + ['guac_5fuser_5fsupports_5fwebp_165',['guac_user_supports_webp',['../user_8h.html#a26d186ee6b669c78278124ece46cc8f7',1,'user.h']]], + ['guac_5futf8_5fcharsize_166',['guac_utf8_charsize',['../unicode_8h.html#a423523f1531719c6ab4fafdb02008623',1,'unicode.h']]], + ['guac_5futf8_5fread_167',['guac_utf8_read',['../unicode_8h.html#a1690b7b5e4fbcfc556fa4ee7129a25af',1,'unicode.h']]], + ['guac_5futf8_5fstrlen_168',['guac_utf8_strlen',['../unicode_8h.html#a778e48706f4ee85f229711fe4cb1343b',1,'unicode.h']]], + ['guac_5futf8_5fwrite_169',['guac_utf8_write',['../unicode_8h.html#aa49339a4af9952b0b56402825059a2ce',1,'unicode.h']]], + ['guac_5fwol_5fwake_170',['guac_wol_wake',['../wol_8h.html#a33bdbda80a9ba04c6d173c5470c9137a',1,'wol.h']]] +]; diff --git a/doc/1.5.5/libguac/search/functions_1.js b/doc/1.5.5/libguac/search/functions_1.js new file mode 100644 index 000000000..21584ce0b --- /dev/null +++ b/doc/1.5.5/libguac/search/functions_1.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['vguac_5fclient_5fabort_0',['vguac_client_abort',['../client_8h.html#a4c0eccd7d0ed3dbf3e7941ce297e0224',1,'client.h']]], + ['vguac_5fclient_5flog_1',['vguac_client_log',['../client_8h.html#a37a0fa9cfc4c02236085e3852972f494',1,'client.h']]], + ['vguac_5fprotocol_5fsend_5flog_2',['vguac_protocol_send_log',['../protocol_8h.html#a3a783d771e1727ba2a82b2298acf4ee4',1,'protocol.h']]], + ['vguac_5fuser_5fabort_3',['vguac_user_abort',['../user_8h.html#ad8529247b551cb93509236a7f9138dd2',1,'user.h']]], + ['vguac_5fuser_5flog_4',['vguac_user_log',['../user_8h.html#af15509bcb891932a3fa93a142018b95c',1,'user.h']]] +]; diff --git a/doc/1.5.5/libguac/search/mag.svg b/doc/1.5.5/libguac/search/mag.svg new file mode 100644 index 000000000..ffb6cf0d0 --- /dev/null +++ b/doc/1.5.5/libguac/search/mag.svg @@ -0,0 +1,24 @@ + + + + + + + diff --git a/doc/1.5.5/libguac/search/mag_d.svg b/doc/1.5.5/libguac/search/mag_d.svg new file mode 100644 index 000000000..4122773f9 --- /dev/null +++ b/doc/1.5.5/libguac/search/mag_d.svg @@ -0,0 +1,24 @@ + + + + + + + diff --git a/doc/1.5.5/libguac/search/mag_sel.svg b/doc/1.5.5/libguac/search/mag_sel.svg new file mode 100644 index 000000000..553dba877 --- /dev/null +++ b/doc/1.5.5/libguac/search/mag_sel.svg @@ -0,0 +1,31 @@ + + + + + + + + + diff --git a/doc/1.5.5/libguac/search/mag_seld.svg b/doc/1.5.5/libguac/search/mag_seld.svg new file mode 100644 index 000000000..c906f84c8 --- /dev/null +++ b/doc/1.5.5/libguac/search/mag_seld.svg @@ -0,0 +1,31 @@ + + + + + + + + + diff --git a/doc/1.5.5/libguac/search/pages_0.js b/doc/1.5.5/libguac/search/pages_0.js new file mode 100644 index 000000000..4d858458c --- /dev/null +++ b/doc/1.5.5/libguac/search/pages_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['deprecated_20list_0',['Deprecated List',['../deprecated.html',1,'']]] +]; diff --git a/doc/1.5.5/libguac/search/pages_1.js b/doc/1.5.5/libguac/search/pages_1.js new file mode 100644 index 000000000..1ad91e39e --- /dev/null +++ b/doc/1.5.5/libguac/search/pages_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['list_0',['Deprecated List',['../deprecated.html',1,'']]] +]; diff --git a/doc/1.5.5/libguac/search/search.css b/doc/1.5.5/libguac/search/search.css new file mode 100644 index 000000000..19f76f9d5 --- /dev/null +++ b/doc/1.5.5/libguac/search/search.css @@ -0,0 +1,291 @@ +/*---------------- Search Box positioning */ + +#main-menu > li:last-child { + /* This
  • object is the parent of the search bar */ + display: flex; + justify-content: center; + align-items: center; + height: 36px; + margin-right: 1em; +} + +/*---------------- Search box styling */ + +.SRPage * { + font-weight: normal; + line-height: normal; +} + +dark-mode-toggle { + margin-left: 5px; + display: flex; + float: right; +} + +#MSearchBox { + display: inline-block; + white-space : nowrap; + background: var(--search-background-color); + border-radius: 0.65em; + box-shadow: var(--search-box-shadow); + z-index: 102; +} + +#MSearchBox .left { + display: inline-block; + vertical-align: middle; + height: 1.4em; +} + +#MSearchSelect { + display: inline-block; + vertical-align: middle; + width: 20px; + height: 19px; + background-image: var(--search-magnification-select-image); + margin: 0 0 0 0.3em; + padding: 0; +} + +#MSearchSelectExt { + display: inline-block; + vertical-align: middle; + width: 10px; + height: 19px; + background-image: var(--search-magnification-image); + margin: 0 0 0 0.5em; + padding: 0; +} + + +#MSearchField { + display: inline-block; + vertical-align: middle; + width: 7.5em; + height: 19px; + margin: 0 0.15em; + padding: 0; + line-height: 1em; + border:none; + color: var(--search-foreground-color); + outline: none; + font-family: var(--font-family-search); + -webkit-border-radius: 0px; + border-radius: 0px; + background: none; +} + +@media(hover: none) { + /* to avoid zooming on iOS */ + #MSearchField { + font-size: 16px; + } +} + +#MSearchBox .right { + display: inline-block; + vertical-align: middle; + width: 1.4em; + height: 1.4em; +} + +#MSearchClose { + display: none; + font-size: inherit; + background : none; + border: none; + margin: 0; + padding: 0; + outline: none; + +} + +#MSearchCloseImg { + padding: 0.3em; + margin: 0; +} + +.MSearchBoxActive #MSearchField { + color: var(--search-active-color); +} + + + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid var(--search-filter-border-color); + background-color: var(--search-filter-background-color); + z-index: 10001; + padding-top: 4px; + padding-bottom: 4px; + -moz-border-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +.SelectItem { + font: 8pt var(--font-family-search); + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: var(--font-family-monospace); + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: var(--search-filter-foreground-color); + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: var(--search-filter-foreground-color); + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: var(--search-filter-highlight-text-color); + background-color: var(--search-filter-highlight-bg-color); + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + /*width: 60ex;*/ + height: 15em; +} + +#MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid var(--search-results-border-color); + background-color: var(--search-results-background-color); + z-index:10000; + width: 300px; + height: 400px; + overflow: auto; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +div.SRPage { + margin: 5px 2px; + background-color: var(--search-results-background-color); +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: var(--search-results-foreground-color); + font-family: var(--font-family-search); + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: var(--search-results-foreground-color); + font-family: var(--font-family-search); + font-size: 8pt; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +span.SRScope { + padding-left: 4px; + font-family: var(--font-family-search); +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; + font-family: var(--font-family-search); +} + +.SRResult { + display: none; +} + +div.searchresults { + margin-left: 10px; + margin-right: 10px; +} + +/*---------------- External search page results */ + +.pages b { + color: white; + padding: 5px 5px 3px 5px; + background-image: var(--nav-gradient-active-image-parent); + background-repeat: repeat-x; + text-shadow: 0 1px 1px #000000; +} + +.pages { + line-height: 17px; + margin-left: 4px; + text-decoration: none; +} + +.hl { + font-weight: bold; +} + +#searchresults { + margin-bottom: 20px; +} + +.searchpages { + margin-top: 10px; +} + diff --git a/doc/1.5.5/libguac/search/search.js b/doc/1.5.5/libguac/search/search.js new file mode 100644 index 000000000..666af01e5 --- /dev/null +++ b/doc/1.5.5/libguac/search/search.js @@ -0,0 +1,694 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +const SEARCH_COOKIE_NAME = ''+'search_grp'; + +const searchResults = new SearchResults(); + +/* A class handling everything associated with the search panel. + + Parameters: + name - The name of the global variable that will be + storing this instance. Is needed to be able to set timeouts. + resultPath - path to use for external files +*/ +function SearchBox(name, resultsPath, extension) { + if (!name || !resultsPath) { alert("Missing parameters to SearchBox."); } + if (!extension || extension == "") { extension = ".html"; } + + function getXPos(item) { + let x = 0; + if (item.offsetWidth) { + while (item && item!=document.body) { + x += item.offsetLeft; + item = item.offsetParent; + } + } + return x; + } + + function getYPos(item) { + let y = 0; + if (item.offsetWidth) { + while (item && item!=document.body) { + y += item.offsetTop; + item = item.offsetParent; + } + } + return y; + } + + // ---------- Instance variables + this.name = name; + this.resultsPath = resultsPath; + this.keyTimeout = 0; + this.keyTimeoutLength = 500; + this.closeSelectionTimeout = 300; + this.lastSearchValue = ""; + this.lastResultsPage = ""; + this.hideTimeout = 0; + this.searchIndex = 0; + this.searchActive = false; + this.extension = extension; + + // ----------- DOM Elements + + this.DOMSearchField = () => document.getElementById("MSearchField"); + this.DOMSearchSelect = () => document.getElementById("MSearchSelect"); + this.DOMSearchSelectWindow = () => document.getElementById("MSearchSelectWindow"); + this.DOMPopupSearchResults = () => document.getElementById("MSearchResults"); + this.DOMPopupSearchResultsWindow = () => document.getElementById("MSearchResultsWindow"); + this.DOMSearchClose = () => document.getElementById("MSearchClose"); + this.DOMSearchBox = () => document.getElementById("MSearchBox"); + + // ------------ Event Handlers + + // Called when focus is added or removed from the search field. + this.OnSearchFieldFocus = function(isActive) { + this.Activate(isActive); + } + + this.OnSearchSelectShow = function() { + const searchSelectWindow = this.DOMSearchSelectWindow(); + const searchField = this.DOMSearchSelect(); + + const left = getXPos(searchField); + const top = getYPos(searchField) + searchField.offsetHeight; + + // show search selection popup + searchSelectWindow.style.display='block'; + searchSelectWindow.style.left = left + 'px'; + searchSelectWindow.style.top = top + 'px'; + + // stop selection hide timer + if (this.hideTimeout) { + clearTimeout(this.hideTimeout); + this.hideTimeout=0; + } + return false; // to avoid "image drag" default event + } + + this.OnSearchSelectHide = function() { + this.hideTimeout = setTimeout(this.CloseSelectionWindow.bind(this), + this.closeSelectionTimeout); + } + + // Called when the content of the search field is changed. + this.OnSearchFieldChange = function(evt) { + if (this.keyTimeout) { // kill running timer + clearTimeout(this.keyTimeout); + this.keyTimeout = 0; + } + + const e = evt ? evt : window.event; // for IE + if (e.keyCode==40 || e.keyCode==13) { + if (e.shiftKey==1) { + this.OnSearchSelectShow(); + const win=this.DOMSearchSelectWindow(); + for (let i=0;i do a search + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) { + const e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 && this.searchIndex0) { // Up + this.searchIndex--; + this.OnSelectItem(this.searchIndex); + } else if (e.keyCode==13 || e.keyCode==27) { + e.stopPropagation(); + this.OnSelectItem(this.searchIndex); + this.CloseSelectionWindow(); + this.DOMSearchField().focus(); + } + return false; + } + + // --------- Actions + + // Closes the results window. + this.CloseResultsWindow = function() { + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.Activate(false); + } + + this.CloseSelectionWindow = function() { + this.DOMSearchSelectWindow().style.display = 'none'; + } + + // Performs a search. + this.Search = function() { + this.keyTimeout = 0; + + // strip leading whitespace + const searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + + const code = searchValue.toLowerCase().charCodeAt(0); + let idxChar = searchValue.substr(0, 1).toLowerCase(); + if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) { // surrogate pair + idxChar = searchValue.substr(0, 2); + } + + let jsFile; + let idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); + if (idx!=-1) { + const hexCode=idx.toString(16); + jsFile = this.resultsPath + indexSectionNames[this.searchIndex] + '_' + hexCode + '.js'; + } + + const loadJS = function(url, impl, loc) { + const scriptTag = document.createElement('script'); + scriptTag.src = url; + scriptTag.onload = impl; + scriptTag.onreadystatechange = impl; + loc.appendChild(scriptTag); + } + + const domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + const domSearchBox = this.DOMSearchBox(); + const domPopupSearchResults = this.DOMPopupSearchResults(); + const domSearchClose = this.DOMSearchClose(); + const resultsPath = this.resultsPath; + + const handleResults = function() { + document.getElementById("Loading").style.display="none"; + if (typeof searchData !== 'undefined') { + createResults(resultsPath); + document.getElementById("NoMatches").style.display="none"; + } + + if (idx!=-1) { + searchResults.Search(searchValue); + } else { // no file with search results => force empty search results + searchResults.Search('===='); + } + + if (domPopupSearchResultsWindow.style.display!='block') { + domSearchClose.style.display = 'inline-block'; + let left = getXPos(domSearchBox) + 150; + let top = getYPos(domSearchBox) + 20; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + const maxWidth = document.body.clientWidth; + const maxHeight = document.body.clientHeight; + let width = 300; + if (left<10) left=10; + if (width+left+8>maxWidth) width=maxWidth-left-8; + let height = 400; + if (height+top+8>maxHeight) height=maxHeight-top-8; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + domPopupSearchResultsWindow.style.width = width + 'px'; + domPopupSearchResultsWindow.style.height = height + 'px'; + } + } + + if (jsFile) { + loadJS(jsFile, handleResults, this.DOMPopupSearchResultsWindow()); + } else { + handleResults(); + } + + this.lastSearchValue = searchValue; + } + + // -------- Activation Functions + + // Activates or deactivates the search panel, resetting things to + // their default values if necessary. + this.Activate = function(isActive) { + if (isActive || // open it + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) { + this.DOMSearchBox().className = 'MSearchBoxActive'; + this.searchActive = true; + } else if (!isActive) { // directly remove the panel + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + this.DOMSearchField().value = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// The class that handles everything on the search results page. +function SearchResults() { + + function convertToId(search) { + let result = ''; + for (let i=0;i. + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; + + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) { + const parentElement = document.getElementById(id); + let element = parentElement.firstChild; + + while (element && element!=parentElement) { + if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren') { + return element; + } + + if (element.nodeName.toLowerCase() == 'div' && element.hasChildNodes()) { + element = element.firstChild; + } else if (element.nextSibling) { + element = element.nextSibling; + } else { + do { + element = element.parentNode; + } + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) { + element = element.nextSibling; + } + } + } + } + + this.Toggle = function(id) { + const element = this.FindChildElement(id); + if (element) { + if (element.style.display == 'block') { + element.style.display = 'none'; + } else { + element.style.display = 'block'; + } + } + } + + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) { + if (!search) { // get search word from URL + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + const resultRows = document.getElementsByTagName("div"); + let matches = 0; + + let i = 0; + while (i < resultRows.length) { + const row = resultRows.item(i); + if (row.className == "SRResult") { + let rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) { + row.style.display = 'block'; + matches++; + } else { + row.style.display = 'none'; + } + } + i++; + } + document.getElementById("Searching").style.display='none'; + if (matches == 0) { // no results + document.getElementById("NoMatches").style.display='block'; + } else { // at least one result + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } + + // return the first item with index index or higher that is visible + this.NavNext = function(index) { + let focusItem; + for (;;) { + const focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') { + break; + } else if (!focusItem) { // last element + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) { + let focusItem; + for (;;) { + const focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') { + break; + } else if (!focusItem) { // last element + break; + } + focusItem=null; + index--; + } + return focusItem; + } + + this.ProcessKeys = function(e) { + if (e.type == "keydown") { + this.repeatOn = false; + this.lastKey = e.keyCode; + } else if (e.type == "keypress") { + if (!this.repeatOn) { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown + } + } else if (e.type == "keyup") { + this.lastKey = 0; + this.repeatOn = false; + } + return this.lastKey!=0; + } + + this.Nav = function(evt,itemIndex) { + const e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) { // Up + const newIndex = itemIndex-1; + let focusItem = this.NavPrev(newIndex); + if (focusItem) { + let child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') { // children visible + let n=0; + let tmpElem; + for (;;) { // search for last child + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) { + focusItem = tmpElem; + } else { // found it! + break; + } + n++; + } + } + } + if (focusItem) { + focusItem.focus(); + } else { // return focus to search field + document.getElementById("MSearchField").focus(); + } + } else if (this.lastKey==40) { // Down + const newIndex = itemIndex+1; + let focusItem; + const item = document.getElementById('Item'+itemIndex); + const elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') { // children visible + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } else if (this.lastKey==39) { // Right + const item = document.getElementById('Item'+itemIndex); + const elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } else if (this.lastKey==37) { // Left + const item = document.getElementById('Item'+itemIndex); + const elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } else if (this.lastKey==27) { // Escape + e.stopPropagation(); + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } else if (this.lastKey==13) { // Enter + return true; + } + return false; + } + + this.NavChild = function(evt,itemIndex,childIndex) { + const e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) { // Up + if (childIndex>0) { + const newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } else { // already at first child, jump to parent + document.getElementById('Item'+itemIndex).focus(); + } + } else if (this.lastKey==40) { // Down + const newIndex = childIndex+1; + let elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) { // last child, jump to parent next parent + elem = this.NavNext(itemIndex+1); + } + if (elem) { + elem.focus(); + } + } else if (this.lastKey==27) { // Escape + e.stopPropagation(); + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } else if (this.lastKey==13) { // Enter + return true; + } + return false; + } +} + +function createResults(resultsPath) { + + function setKeyActions(elem,action) { + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); + } + + function setClassAttr(elem,attr) { + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); + } + + const results = document.getElementById("SRResults"); + results.innerHTML = ''; + searchData.forEach((elem,index) => { + const id = elem[0]; + const srResult = document.createElement('div'); + srResult.setAttribute('id','SR_'+id); + setClassAttr(srResult,'SRResult'); + const srEntry = document.createElement('div'); + setClassAttr(srEntry,'SREntry'); + const srLink = document.createElement('a'); + srLink.setAttribute('id','Item'+index); + setKeyActions(srLink,'return searchResults.Nav(event,'+index+')'); + setClassAttr(srLink,'SRSymbol'); + srLink.innerHTML = elem[1][0]; + srEntry.appendChild(srLink); + if (elem[1].length==2) { // single result + srLink.setAttribute('href',resultsPath+elem[1][1][0]); + srLink.setAttribute('onclick','searchBox.CloseResultsWindow()'); + if (elem[1][1][1]) { + srLink.setAttribute('target','_parent'); + } else { + srLink.setAttribute('target','_blank'); + } + const srScope = document.createElement('span'); + setClassAttr(srScope,'SRScope'); + srScope.innerHTML = elem[1][1][2]; + srEntry.appendChild(srScope); + } else { // multiple results + srLink.setAttribute('href','javascript:searchResults.Toggle("SR_'+id+'")'); + const srChildren = document.createElement('div'); + setClassAttr(srChildren,'SRChildren'); + for (let c=0; c + + + + + + +libguac: guacamole/socket-constants.h File Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    socket-constants.h File Reference
    +
    +
    + +

    Constants related to the guac_socket object. +More...

    + +

    Go to the source code of this file.

    + + + + + + + + +

    +Macros

    +#define GUAC_SOCKET_OUTPUT_BUFFER_SIZE   8192
     The number of bytes to buffer within each socket before flushing.
     
    +#define GUAC_SOCKET_KEEP_ALIVE_INTERVAL   5000
     The number of milliseconds to wait between keep-alive pings on a socket with keep-alive enabled.
     
    +

    Detailed Description

    +

    Constants related to the guac_socket object.

    +
    + + + + diff --git a/doc/1.5.5/libguac/socket-constants_8h_source.html b/doc/1.5.5/libguac/socket-constants_8h_source.html new file mode 100644 index 000000000..d14d66ffb --- /dev/null +++ b/doc/1.5.5/libguac/socket-constants_8h_source.html @@ -0,0 +1,120 @@ + + + + + + + +libguac: guacamole/socket-constants.h Source File + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    socket-constants.h
    +
    +
    +Go to the documentation of this file.
    1/*
    +
    2 * Licensed to the Apache Software Foundation (ASF) under one
    +
    3 * or more contributor license agreements. See the NOTICE file
    +
    4 * distributed with this work for additional information
    +
    5 * regarding copyright ownership. The ASF licenses this file
    +
    6 * to you under the Apache License, Version 2.0 (the
    +
    7 * "License"); you may not use this file except in compliance
    +
    8 * with the License. You may obtain a copy of the License at
    +
    9 *
    +
    10 * http://www.apache.org/licenses/LICENSE-2.0
    +
    11 *
    +
    12 * Unless required by applicable law or agreed to in writing,
    +
    13 * software distributed under the License is distributed on an
    +
    14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    15 * KIND, either express or implied. See the License for the
    +
    16 * specific language governing permissions and limitations
    +
    17 * under the License.
    +
    18 */
    +
    19
    +
    20#ifndef _GUAC_SOCKET_CONSTANTS_H
    +
    21#define _GUAC_SOCKET_CONSTANTS_H
    +
    22
    +
    32#define GUAC_SOCKET_OUTPUT_BUFFER_SIZE 8192
    +
    33
    +
    38#define GUAC_SOCKET_KEEP_ALIVE_INTERVAL 5000
    +
    39
    +
    40#endif
    +
    41
    +
    + + + + diff --git a/doc/1.5.5/libguac/socket-fntypes_8h.html b/doc/1.5.5/libguac/socket-fntypes_8h.html new file mode 100644 index 000000000..7576dcb06 --- /dev/null +++ b/doc/1.5.5/libguac/socket-fntypes_8h.html @@ -0,0 +1,291 @@ + + + + + + + +libguac: guacamole/socket-fntypes.h File Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    socket-fntypes.h File Reference
    +
    +
    + +

    Function type definitions related to the guac_socket object. +More...

    + +

    Go to the source code of this file.

    + + + + + + + + + + + + + + + + + + + + + + + +

    +Typedefs

    typedef ssize_t guac_socket_read_handler(guac_socket *socket, void *buf, size_t count)
     Generic read handler for socket read operations, modeled after the standard POSIX read() function.
     
    typedef ssize_t guac_socket_write_handler(guac_socket *socket, const void *buf, size_t count)
     Generic write handler for socket write operations, modeled after the standard POSIX write() function.
     
    typedef int guac_socket_select_handler(guac_socket *socket, int usec_timeout)
     Generic handler for socket select operations, similar to the POSIX select() function.
     
    typedef ssize_t guac_socket_flush_handler(guac_socket *socket)
     Generic flush handler for socket flush operations.
     
    typedef void guac_socket_lock_handler(guac_socket *socket)
     When set within a guac_socket, a handler of this type will be called whenever exclusive access to the guac_socket is required, such as when guac_socket_instruction_begin() is called.
     
    typedef void guac_socket_unlock_handler(guac_socket *socket)
     When set within a guac_socket, a handler of this type will be called whenever exclusive access to the guac_socket is no longer required, such as when guac_socket_instruction_end() is called.
     
    typedef int guac_socket_free_handler(guac_socket *socket)
     Generic handler for the closing of a socket, modeled after the standard POSIX close() function.
     
    +

    Detailed Description

    +

    Function type definitions related to the guac_socket object.

    +

    Typedef Documentation

    + +

    ◆ guac_socket_flush_handler

    + +
    +
    + + + + +
    typedef ssize_t guac_socket_flush_handler(guac_socket *socket)
    +
    + +

    Generic flush handler for socket flush operations.

    +

    This function is not modeled after any POSIX function. When set within a guac_socket, a handler of this type will be called when guac_socket_flush() is called.

    +
    Parameters
    + + +
    socketThe guac_socket being flushed.
    +
    +
    +
    Returns
    Zero on success, or non-zero if an error occurs during flush.
    + +
    +
    + +

    ◆ guac_socket_free_handler

    + +
    +
    + + + + +
    typedef int guac_socket_free_handler(guac_socket *socket)
    +
    + +

    Generic handler for the closing of a socket, modeled after the standard POSIX close() function.

    +

    When set within a guac_socket, a handler of this type will be called when the socket is closed.

    +
    Parameters
    + + +
    socketThe guac_socket being closed.
    +
    +
    +
    Returns
    Zero on success, or -1 if an error occurs.
    + +
    +
    + +

    ◆ guac_socket_lock_handler

    + +
    +
    + + + + +
    typedef void guac_socket_lock_handler(guac_socket *socket)
    +
    + +

    When set within a guac_socket, a handler of this type will be called whenever exclusive access to the guac_socket is required, such as when guac_socket_instruction_begin() is called.

    +
    Parameters
    + + +
    socketThe guac_socket to which exclusive access is required.
    +
    +
    + +
    +
    + +

    ◆ guac_socket_read_handler

    + +
    +
    + + + + +
    typedef ssize_t guac_socket_read_handler(guac_socket *socket, void *buf, size_t count)
    +
    + +

    Generic read handler for socket read operations, modeled after the standard POSIX read() function.

    +

    When set within a guac_socket, a handler of this type will be called when data needs to be read into the socket.

    +
    Parameters
    + + + + +
    socketThe guac_socket being read from.
    bufThe arbitrary buffer we must populate with data.
    countThe maximum number of bytes to read into the buffer.
    +
    +
    +
    Returns
    The number of bytes read, or -1 if an error occurs.
    + +
    +
    + +

    ◆ guac_socket_select_handler

    + +
    +
    + + + + +
    typedef int guac_socket_select_handler(guac_socket *socket, int usec_timeout)
    +
    + +

    Generic handler for socket select operations, similar to the POSIX select() function.

    +

    When guac_socket_select() is called on a guac_socket, its guac_socket_select_handler will be invoked, if defined.

    +
    Parameters
    + + + +
    socketThe guac_socket being selected.
    usec_timeoutThe maximum number of microseconds to wait for data, or -1 to potentially wait forever.
    +
    +
    +
    Returns
    Positive on success, zero if the timeout elapsed and no data is available, negative on error.
    + +
    +
    + +

    ◆ guac_socket_unlock_handler

    + +
    +
    + + + + +
    typedef void guac_socket_unlock_handler(guac_socket *socket)
    +
    + +

    When set within a guac_socket, a handler of this type will be called whenever exclusive access to the guac_socket is no longer required, such as when guac_socket_instruction_end() is called.

    +
    Parameters
    + + +
    socketThe guac_socket to which exclusive access is no longer required.
    +
    +
    + +
    +
    + +

    ◆ guac_socket_write_handler

    + +
    +
    + + + + +
    typedef ssize_t guac_socket_write_handler(guac_socket *socket, const void *buf, size_t count)
    +
    + +

    Generic write handler for socket write operations, modeled after the standard POSIX write() function.

    +

    When set within a guac_socket, a handler of this type will be called when data needs to be written to the socket.

    +
    Parameters
    + + + + +
    socketThe guac_socket being written to.
    bufThe arbitrary buffer containing data to be written.
    countThe maximum number of bytes to written to the buffer.
    +
    +
    +
    Returns
    The number of bytes written, or -1 if an error occurs.
    + +
    +
    +
    + + + + diff --git a/doc/1.5.5/libguac/socket-fntypes_8h_source.html b/doc/1.5.5/libguac/socket-fntypes_8h_source.html new file mode 100644 index 000000000..def23179c --- /dev/null +++ b/doc/1.5.5/libguac/socket-fntypes_8h_source.html @@ -0,0 +1,145 @@ + + + + + + + +libguac: guacamole/socket-fntypes.h Source File + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    socket-fntypes.h
    +
    +
    +Go to the documentation of this file.
    1/*
    +
    2 * Licensed to the Apache Software Foundation (ASF) under one
    +
    3 * or more contributor license agreements. See the NOTICE file
    +
    4 * distributed with this work for additional information
    +
    5 * regarding copyright ownership. The ASF licenses this file
    +
    6 * to you under the Apache License, Version 2.0 (the
    +
    7 * "License"); you may not use this file except in compliance
    +
    8 * with the License. You may obtain a copy of the License at
    +
    9 *
    +
    10 * http://www.apache.org/licenses/LICENSE-2.0
    +
    11 *
    +
    12 * Unless required by applicable law or agreed to in writing,
    +
    13 * software distributed under the License is distributed on an
    +
    14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    15 * KIND, either express or implied. See the License for the
    +
    16 * specific language governing permissions and limitations
    +
    17 * under the License.
    +
    18 */
    +
    19
    +
    20#ifndef _GUAC_SOCKET_FNTYPES_H
    +
    21#define _GUAC_SOCKET_FNTYPES_H
    +
    22
    +
    29#include "socket-types.h"
    +
    30
    +
    31#include <unistd.h>
    +
    32
    +
    43typedef ssize_t guac_socket_read_handler(guac_socket* socket,
    +
    44 void* buf, size_t count);
    +
    45
    +
    56typedef ssize_t guac_socket_write_handler(guac_socket* socket,
    +
    57 const void* buf, size_t count);
    +
    58
    +
    70typedef int guac_socket_select_handler(guac_socket* socket, int usec_timeout);
    +
    71
    +
    83typedef ssize_t guac_socket_flush_handler(guac_socket* socket);
    +
    84
    + +
    94
    + +
    104
    + +
    114
    +
    115#endif
    +
    116
    +
    void guac_socket_lock_handler(guac_socket *socket)
    When set within a guac_socket, a handler of this type will be called whenever exclusive access to the...
    Definition socket-fntypes.h:93
    +
    ssize_t guac_socket_write_handler(guac_socket *socket, const void *buf, size_t count)
    Generic write handler for socket write operations, modeled after the standard POSIX write() function.
    Definition socket-fntypes.h:56
    +
    ssize_t guac_socket_read_handler(guac_socket *socket, void *buf, size_t count)
    Generic read handler for socket read operations, modeled after the standard POSIX read() function.
    Definition socket-fntypes.h:43
    +
    ssize_t guac_socket_flush_handler(guac_socket *socket)
    Generic flush handler for socket flush operations.
    Definition socket-fntypes.h:83
    +
    int guac_socket_select_handler(guac_socket *socket, int usec_timeout)
    Generic handler for socket select operations, similar to the POSIX select() function.
    Definition socket-fntypes.h:70
    +
    int guac_socket_free_handler(guac_socket *socket)
    Generic handler for the closing of a socket, modeled after the standard POSIX close() function.
    Definition socket-fntypes.h:113
    +
    void guac_socket_unlock_handler(guac_socket *socket)
    When set within a guac_socket, a handler of this type will be called whenever exclusive access to the...
    Definition socket-fntypes.h:103
    +
    Type definitions related to the guac_socket object.
    +
    The core I/O object of Guacamole.
    Definition socket.h:39
    +
    + + + + diff --git a/doc/1.5.5/libguac/socket-ssl_8h.html b/doc/1.5.5/libguac/socket-ssl_8h.html new file mode 100644 index 000000000..2ddcae35c --- /dev/null +++ b/doc/1.5.5/libguac/socket-ssl_8h.html @@ -0,0 +1,144 @@ + + + + + + + +libguac: guacamole/socket-ssl.h File Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    socket-ssl.h File Reference
    +
    +
    + +

    Provides an SSL/TLS implementation of guac_socket. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Data Structures

    struct  guac_socket_ssl_data
     SSL socket-specific data. More...
     
    + + + + +

    +Functions

    guac_socketguac_socket_open_secure (SSL_CTX *context, int fd)
     Creates a new guac_socket which will use SSL for all communication.
     
    +

    Detailed Description

    +

    Provides an SSL/TLS implementation of guac_socket.

    +

    This header will only be available if libguac was built with SSL support.

    +

    Function Documentation

    + +

    ◆ guac_socket_open_secure()

    + +
    +
    + + + + + + + + + + + +
    guac_socket * guac_socket_open_secure (SSL_CTX * context,
    int fd )
    +
    + +

    Creates a new guac_socket which will use SSL for all communication.

    +

    Freeing this guac_socket will automatically close the associated file descriptor.

    +
    Parameters
    + + + +
    contextThe SSL_CTX structure describing the desired SSL configuration.
    fdThe file descriptor to use for the SSL connection underlying the created guac_socket.
    +
    +
    +
    Returns
    A newly-allocated guac_socket which will transparently use SSL for all communication.
    + +
    +
    +
    + + + + diff --git a/doc/1.5.5/libguac/socket-ssl_8h_source.html b/doc/1.5.5/libguac/socket-ssl_8h_source.html new file mode 100644 index 000000000..6e0a13950 --- /dev/null +++ b/doc/1.5.5/libguac/socket-ssl_8h_source.html @@ -0,0 +1,145 @@ + + + + + + + +libguac: guacamole/socket-ssl.h Source File + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    socket-ssl.h
    +
    +
    +Go to the documentation of this file.
    1/*
    +
    2 * Licensed to the Apache Software Foundation (ASF) under one
    +
    3 * or more contributor license agreements. See the NOTICE file
    +
    4 * distributed with this work for additional information
    +
    5 * regarding copyright ownership. The ASF licenses this file
    +
    6 * to you under the Apache License, Version 2.0 (the
    +
    7 * "License"); you may not use this file except in compliance
    +
    8 * with the License. You may obtain a copy of the License at
    +
    9 *
    +
    10 * http://www.apache.org/licenses/LICENSE-2.0
    +
    11 *
    +
    12 * Unless required by applicable law or agreed to in writing,
    +
    13 * software distributed under the License is distributed on an
    +
    14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    15 * KIND, either express or implied. See the License for the
    +
    16 * specific language governing permissions and limitations
    +
    17 * under the License.
    +
    18 */
    +
    19
    +
    20#ifndef __GUACD_SOCKET_SSL_H
    +
    21#define __GUACD_SOCKET_SSL_H
    +
    22
    +
    30#include "socket-types.h"
    +
    31
    +
    32#include <openssl/ssl.h>
    +
    33#include <pthread.h>
    +
    34
    +
    +
    38typedef struct guac_socket_ssl_data {
    +
    39
    +
    44 int fd;
    +
    45
    +
    49 SSL_CTX* context;
    +
    50
    +
    55 SSL* ssl;
    +
    56
    +
    61 pthread_mutex_t socket_lock;
    +
    62
    + +
    +
    64
    +
    80guac_socket* guac_socket_open_secure(SSL_CTX* context, int fd);
    +
    81
    +
    82#endif
    +
    83
    +
    guac_socket * guac_socket_open_secure(SSL_CTX *context, int fd)
    Creates a new guac_socket which will use SSL for all communication.
    +
    Type definitions related to the guac_socket object.
    +
    SSL socket-specific data.
    Definition socket-ssl.h:38
    +
    SSL_CTX * context
    The current SSL context.
    Definition socket-ssl.h:49
    +
    int fd
    The file descriptor that SSL communication will take place over.
    Definition socket-ssl.h:44
    +
    SSL * ssl
    The SSL connection, created automatically via guac_socket_open_secure().
    Definition socket-ssl.h:55
    +
    pthread_mutex_t socket_lock
    Lock that is acquired when an instruction is being written, and released when the instruction is fini...
    Definition socket-ssl.h:61
    +
    The core I/O object of Guacamole.
    Definition socket.h:39
    +
    + + + + diff --git a/doc/1.5.5/libguac/socket-types_8h.html b/doc/1.5.5/libguac/socket-types_8h.html new file mode 100644 index 000000000..292feaf70 --- /dev/null +++ b/doc/1.5.5/libguac/socket-types_8h.html @@ -0,0 +1,129 @@ + + + + + + + +libguac: guacamole/socket-types.h File Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    socket-types.h File Reference
    +
    +
    + +

    Type definitions related to the guac_socket object. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Enumerations

    enum  guac_socket_state { GUAC_SOCKET_OPEN +, GUAC_SOCKET_CLOSED + }
     Possible current states of a guac_socket. More...
     
    +

    Detailed Description

    +

    Type definitions related to the guac_socket object.

    +

    Enumeration Type Documentation

    + +

    ◆ guac_socket_state

    + +
    +
    + + + + +
    enum guac_socket_state
    +
    + +

    Possible current states of a guac_socket.

    + + + +
    Enumerator
    GUAC_SOCKET_OPEN 

    The socket is open and can be written to / read from.

    +
    GUAC_SOCKET_CLOSED 

    The socket is closed.

    +

    Reads and writes will fail.

    +
    + +
    +
    +
    + + + + diff --git a/doc/1.5.5/libguac/socket-types_8h_source.html b/doc/1.5.5/libguac/socket-types_8h_source.html new file mode 100644 index 000000000..09df8d38f --- /dev/null +++ b/doc/1.5.5/libguac/socket-types_8h_source.html @@ -0,0 +1,132 @@ + + + + + + + +libguac: guacamole/socket-types.h Source File + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    socket-types.h
    +
    +
    +Go to the documentation of this file.
    1/*
    +
    2 * Licensed to the Apache Software Foundation (ASF) under one
    +
    3 * or more contributor license agreements. See the NOTICE file
    +
    4 * distributed with this work for additional information
    +
    5 * regarding copyright ownership. The ASF licenses this file
    +
    6 * to you under the Apache License, Version 2.0 (the
    +
    7 * "License"); you may not use this file except in compliance
    +
    8 * with the License. You may obtain a copy of the License at
    +
    9 *
    +
    10 * http://www.apache.org/licenses/LICENSE-2.0
    +
    11 *
    +
    12 * Unless required by applicable law or agreed to in writing,
    +
    13 * software distributed under the License is distributed on an
    +
    14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    15 * KIND, either express or implied. See the License for the
    +
    16 * specific language governing permissions and limitations
    +
    17 * under the License.
    +
    18 */
    +
    19
    +
    20#ifndef _GUAC_SOCKET_TYPES_H
    +
    21#define _GUAC_SOCKET_TYPES_H
    +
    22
    +
    33typedef struct guac_socket guac_socket;
    +
    34
    + +
    51
    +
    52#endif
    +
    53
    +
    guac_socket_state
    Possible current states of a guac_socket.
    Definition socket-types.h:38
    +
    @ GUAC_SOCKET_CLOSED
    The socket is closed.
    Definition socket-types.h:48
    +
    @ GUAC_SOCKET_OPEN
    The socket is open and can be written to / read from.
    Definition socket-types.h:43
    +
    The core I/O object of Guacamole.
    Definition socket.h:39
    +
    + + + + diff --git a/doc/1.5.5/libguac/socket-wsa_8h.html b/doc/1.5.5/libguac/socket-wsa_8h.html new file mode 100644 index 000000000..2d02eb1e0 --- /dev/null +++ b/doc/1.5.5/libguac/socket-wsa_8h.html @@ -0,0 +1,132 @@ + + + + + + + +libguac: guacamole/socket-wsa.h File Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    socket-wsa.h File Reference
    +
    +
    + +

    Provides an implementation of guac_socket specific to the Windows Socket API (aka WSA or "winsock"). +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Functions

    guac_socketguac_socket_open_wsa (SOCKET sock)
     Creates a new guac_socket which will use the Windows Socket API (aka WSA or "winsock") for all communication.
     
    +

    Detailed Description

    +

    Provides an implementation of guac_socket specific to the Windows Socket API (aka WSA or "winsock").

    +

    This header will only be available if libguac was built with WSA support.

    +

    Function Documentation

    + +

    ◆ guac_socket_open_wsa()

    + +
    +
    + + + + + + + +
    guac_socket * guac_socket_open_wsa (SOCKET sock)
    +
    + +

    Creates a new guac_socket which will use the Windows Socket API (aka WSA or "winsock") for all communication.

    +

    Freeing this guac_socket will automatically close the associated SOCKET handle.

    +
    Parameters
    + + +
    sockThe WSA SOCKET handle to use for the connection underlying the created guac_socket.
    +
    +
    +
    Returns
    A newly-allocated guac_socket which will transparently use the Windows Socket API for all communication.
    + +
    +
    +
    + + + + diff --git a/doc/1.5.5/libguac/socket-wsa_8h_source.html b/doc/1.5.5/libguac/socket-wsa_8h_source.html new file mode 100644 index 000000000..d1eab6a84 --- /dev/null +++ b/doc/1.5.5/libguac/socket-wsa_8h_source.html @@ -0,0 +1,125 @@ + + + + + + + +libguac: guacamole/socket-wsa.h Source File + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    socket-wsa.h
    +
    +
    +Go to the documentation of this file.
    1/*
    +
    2 * Licensed to the Apache Software Foundation (ASF) under one
    +
    3 * or more contributor license agreements. See the NOTICE file
    +
    4 * distributed with this work for additional information
    +
    5 * regarding copyright ownership. The ASF licenses this file
    +
    6 * to you under the Apache License, Version 2.0 (the
    +
    7 * "License"); you may not use this file except in compliance
    +
    8 * with the License. You may obtain a copy of the License at
    +
    9 *
    +
    10 * http://www.apache.org/licenses/LICENSE-2.0
    +
    11 *
    +
    12 * Unless required by applicable law or agreed to in writing,
    +
    13 * software distributed under the License is distributed on an
    +
    14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    15 * KIND, either express or implied. See the License for the
    +
    16 * specific language governing permissions and limitations
    +
    17 * under the License.
    +
    18 */
    +
    19
    +
    20#ifndef GUAC_SOCKET_WSA_H
    +
    21#define GUAC_SOCKET_WSA_H
    +
    22
    +
    31#include "socket-types.h"
    +
    32
    +
    33#include <winsock2.h>
    +
    34
    + +
    49
    +
    50#endif
    +
    51
    +
    Type definitions related to the guac_socket object.
    +
    guac_socket * guac_socket_open_wsa(SOCKET sock)
    Creates a new guac_socket which will use the Windows Socket API (aka WSA or "winsock") for all commun...
    +
    The core I/O object of Guacamole.
    Definition socket.h:39
    +
    + + + + diff --git a/doc/1.5.5/libguac/socket_8h.html b/doc/1.5.5/libguac/socket_8h.html new file mode 100644 index 000000000..fbcfaadc7 --- /dev/null +++ b/doc/1.5.5/libguac/socket_8h.html @@ -0,0 +1,707 @@ + + + + + + + +libguac: guacamole/socket.h File Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    socket.h File Reference
    +
    +
    + +

    Defines the guac_socket object and functions for using and manipulating it. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Data Structures

    struct  guac_socket
     The core I/O object of Guacamole. More...
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    guac_socketguac_socket_alloc ()
     Allocates a new, completely blank guac_socket.
     
    void guac_socket_free (guac_socket *socket)
     Frees the given guac_socket and all associated resources.
     
    void guac_socket_require_keep_alive (guac_socket *socket)
     Declares that the given socket must automatically send a keep-alive ping to ensure neither side of the socket times out while the socket is open.
     
    void guac_socket_instruction_begin (guac_socket *socket)
     Marks the beginning of a Guacamole protocol instruction.
     
    void guac_socket_instruction_end (guac_socket *socket)
     Marks the end of a Guacamole protocol instruction.
     
    guac_socketguac_socket_open (int fd)
     Allocates and initializes a new guac_socket object with the given open file descriptor.
     
    guac_socketguac_socket_nest (guac_socket *parent, int index)
     Allocates and initializes a new guac_socket which writes all data via nest instructions to the given existing, open guac_socket.
     
    guac_socketguac_socket_tee (guac_socket *primary, guac_socket *secondary)
     Allocates and initializes a new guac_socket which delegates all socket operations to the given primary socket, while simultaneously duplicating all written data to the secondary socket.
     
    guac_socketguac_socket_broadcast (guac_client *client)
     Allocates and initializes a new guac_socket which duplicates all instructions written across the sockets of each connected user of the given guac_client.
     
    guac_socketguac_socket_broadcast_pending (guac_client *client)
     Allocates and initializes a new guac_socket which duplicates all instructions written across the sockets of each pending connected user of the given guac_client.
     
    ssize_t guac_socket_write_int (guac_socket *socket, int64_t i)
     Writes the given unsigned int to the given guac_socket object.
     
    ssize_t guac_socket_write_string (guac_socket *socket, const char *str)
     Writes the given string to the given guac_socket object.
     
    ssize_t guac_socket_write_base64 (guac_socket *socket, const void *buf, size_t count)
     Writes the given binary data to the given guac_socket object as base64- encoded data.
     
    ssize_t guac_socket_write (guac_socket *socket, const void *buf, size_t count)
     Writes the given data to the specified socket.
     
    ssize_t guac_socket_read (guac_socket *socket, void *buf, size_t count)
     Attempts to read data from the socket, filling up to the specified number of bytes in the given buffer.
     
    ssize_t guac_socket_flush_base64 (guac_socket *socket)
     Flushes the base64 buffer, writing padding characters as necessary.
     
    ssize_t guac_socket_flush (guac_socket *socket)
     Flushes the write buffer.
     
    int guac_socket_select (guac_socket *socket, int usec_timeout)
     Waits for input to be available on the given guac_socket object until the specified timeout elapses.
     
    +

    Detailed Description

    +

    Defines the guac_socket object and functions for using and manipulating it.

    +

    Function Documentation

    + +

    ◆ guac_socket_alloc()

    + +
    +
    + + + + + + + +
    guac_socket * guac_socket_alloc ()
    +
    + +

    Allocates a new, completely blank guac_socket.

    +

    This guac_socket will do absolutely nothing when used unless its handlers are defined.

    +
    Returns
    A newly-allocated guac_socket, or NULL if the guac_socket could not be allocated.
    + +
    +
    + +

    ◆ guac_socket_broadcast()

    + +
    +
    + + + + + + + +
    guac_socket * guac_socket_broadcast (guac_client * client)
    +
    + +

    Allocates and initializes a new guac_socket which duplicates all instructions written across the sockets of each connected user of the given guac_client.

    +

    The returned socket is a write-only socket. Attempts to read from the socket will fail. If a write occurs while no users are connected, that write will simply be dropped.

    +

    Return values (error codes) from each user's socket will not affect the in-progress write, but each failing user will be forcibly stopped with guac_user_stop().

    +

    If an error occurs while allocating the guac_socket object, NULL is returned, and guac_error is set appropriately.

    +
    Parameters
    + + +
    clientThe client associated with the group of connected users across which duplicates of all instructions should be written.
    +
    +
    +
    Returns
    A write-only guac_socket object which broadcasts copies of all instructions written across all non-pending connected users of the given guac_client, or NULL if an error occurs while allocating the guac_socket object.
    + +
    +
    + +

    ◆ guac_socket_broadcast_pending()

    + +
    +
    + + + + + + + +
    guac_socket * guac_socket_broadcast_pending (guac_client * client)
    +
    + +

    Allocates and initializes a new guac_socket which duplicates all instructions written across the sockets of each pending connected user of the given guac_client.

    +

    The returned socket is a write-only socket. Attempts to read from the socket will fail. If a write occurs while no users are connected, that write will simply be dropped.

    +

    Return values (error codes) from each user's socket will not affect the in-progress write, but each failing user will be forcibly stopped with guac_user_stop().

    +

    If an error occurs while allocating the guac_socket object, NULL is returned, and guac_error is set appropriately.

    +
    Parameters
    + + +
    clientThe client associated with the group of pending users across which duplicates of all instructions should be written.
    +
    +
    +
    Returns
    A write-only guac_socket object which broadcasts copies of all instructions written across all pending connected users of the given guac_client, or NULL if an error occurs while allocating the guac_socket object.
    + +
    +
    + +

    ◆ guac_socket_flush()

    + +
    +
    + + + + + + + +
    ssize_t guac_socket_flush (guac_socket * socket)
    +
    + +

    Flushes the write buffer.

    +

    If an error occurs while writing, a non-zero value is returned, and guac_error is set appropriately.

    +
    Parameters
    + + +
    socketThe guac_socket object to flush
    +
    +
    +
    Returns
    Zero on success, or non-zero if an error occurs during flush.
    + +
    +
    + +

    ◆ guac_socket_flush_base64()

    + +
    +
    + + + + + + + +
    ssize_t guac_socket_flush_base64 (guac_socket * socket)
    +
    + +

    Flushes the base64 buffer, writing padding characters as necessary.

    +

    If an error occurs while writing, a non-zero value is returned, and guac_error is set appropriately.

    +
    Parameters
    + + +
    socketThe guac_socket object to flush
    +
    +
    +
    Returns
    Zero on success, or non-zero if an error occurs during flush.
    + +
    +
    + +

    ◆ guac_socket_free()

    + +
    +
    + + + + + + + +
    void guac_socket_free (guac_socket * socket)
    +
    + +

    Frees the given guac_socket and all associated resources.

    +
    Parameters
    + + +
    socketThe guac_socket to free.
    +
    +
    + +
    +
    + +

    ◆ guac_socket_instruction_begin()

    + +
    +
    + + + + + + + +
    void guac_socket_instruction_begin (guac_socket * socket)
    +
    + +

    Marks the beginning of a Guacamole protocol instruction.

    +
    Parameters
    + + +
    socketThe guac_socket beginning an instruction.
    +
    +
    + +
    +
    + +

    ◆ guac_socket_instruction_end()

    + +
    +
    + + + + + + + +
    void guac_socket_instruction_end (guac_socket * socket)
    +
    + +

    Marks the end of a Guacamole protocol instruction.

    +
    Parameters
    + + +
    socketThe guac_socket ending an instruction.
    +
    +
    + +
    +
    + +

    ◆ guac_socket_nest()

    + +
    +
    + + + + + + + + + + + +
    guac_socket * guac_socket_nest (guac_socket * parent,
    int index )
    +
    + +

    Allocates and initializes a new guac_socket which writes all data via nest instructions to the given existing, open guac_socket.

    +

    Freeing the returned guac_socket has no effect on the underlying, nested guac_socket.

    +

    If an error occurs while allocating the guac_socket object, NULL is returned, and guac_error is set appropriately.

    +
    Deprecated
    The "nest" instruction and the corresponding guac_socket implementation are no longer necessary, having been replaced by the streaming instructions ("blob", "ack", "end"). Code using nested sockets or the "nest" instruction should instead write to a normal socket directly.
    +
    Parameters
    + + + +
    parentThe guac_socket this new guac_socket should write nest instructions to.
    indexThe stream index to use for the written nest instructions.
    +
    +
    +
    Returns
    A newly allocated guac_socket object associated with the given guac_socket and stream index, or NULL if an error occurs while allocating the guac_socket object.
    + +
    +
    + +

    ◆ guac_socket_open()

    + +
    +
    + + + + + + + +
    guac_socket * guac_socket_open (int fd)
    +
    + +

    Allocates and initializes a new guac_socket object with the given open file descriptor.

    +

    The file descriptor will be automatically closed when the allocated guac_socket is freed.

    +

    If an error occurs while allocating the guac_socket object, NULL is returned, and guac_error is set appropriately.

    +
    Parameters
    + + +
    fdAn open file descriptor that this guac_socket object should manage.
    +
    +
    +
    Returns
    A newly allocated guac_socket object associated with the given file descriptor, or NULL if an error occurs while allocating the guac_socket object.
    + +
    +
    + +

    ◆ guac_socket_read()

    + +
    +
    + + + + + + + + + + + + + + + + +
    ssize_t guac_socket_read (guac_socket * socket,
    void * buf,
    size_t count )
    +
    + +

    Attempts to read data from the socket, filling up to the specified number of bytes in the given buffer.

    +

    If an error occurs while writing, a non-zero value is returned, and guac_error is set appropriately.

    +
    Parameters
    + + + + +
    socketThe guac_socket to read from.
    bufThe buffer to read bytes into.
    countThe maximum number of bytes to read.
    +
    +
    +
    Returns
    The number of bytes read, or non-zero if an error occurs while reading.
    + +
    +
    + +

    ◆ guac_socket_require_keep_alive()

    + +
    +
    + + + + + + + +
    void guac_socket_require_keep_alive (guac_socket * socket)
    +
    + +

    Declares that the given socket must automatically send a keep-alive ping to ensure neither side of the socket times out while the socket is open.

    +

    This ping will take the form of a "nop" instruction.

    +
    Parameters
    + + +
    socketThe guac_socket to declare as requiring an automatic keep-alive ping.
    +
    +
    + +
    +
    + +

    ◆ guac_socket_select()

    + +
    +
    + + + + + + + + + + + +
    int guac_socket_select (guac_socket * socket,
    int usec_timeout )
    +
    + +

    Waits for input to be available on the given guac_socket object until the specified timeout elapses.

    +

    If an error occurs while waiting, a negative value is returned, and guac_error is set appropriately.

    +

    If a timeout occurs while waiting, zero value is returned, and guac_error is set to GUAC_STATUS_INPUT_TIMEOUT.

    +
    Parameters
    + + + +
    socketThe guac_socket object to wait for.
    usec_timeoutThe maximum number of microseconds to wait for data, or -1 to potentially wait forever.
    +
    +
    +
    Returns
    Positive on success, zero if the timeout elapsed and no data is available, negative on error.
    + +
    +
    + +

    ◆ guac_socket_tee()

    + +
    +
    + + + + + + + + + + + +
    guac_socket * guac_socket_tee (guac_socket * primary,
    guac_socket * secondary )
    +
    + +

    Allocates and initializes a new guac_socket which delegates all socket operations to the given primary socket, while simultaneously duplicating all written data to the secondary socket.

    +

    Freeing the returned guac_socket will free both primary and secondary sockets.

    +

    Return values (error codes) will come only from the primary socket. Locks (like those used by guac_socket_instruction_begin() and guac_socket_instruction_end()) will affect only the primary socket.

    +

    If an error occurs while allocating the guac_socket object, NULL is returned, and guac_error is set appropriately.

    +
    Parameters
    + + + +
    primaryThe primary guac_socket to which all socket operations should be delegated. The error codes returned by socket operations, if any, will always come from this socket. This socket will also be the only socket locked when instructions begin (or unlocked when instructions end).
    secondaryThe secondary guac_socket to which all data written to the primary guac_socket should be copied. If an error prevents the write from succeeding, that error will be ignored. Only errors from the primary guac_socket will be acknowledged.
    +
    +
    +
    Returns
    A newly allocated guac_socket object associated with the given primary and secondary sockets, or NULL if an error occurs while allocating the guac_socket object.
    + +
    +
    + +

    ◆ guac_socket_write()

    + +
    +
    + + + + + + + + + + + + + + + + +
    ssize_t guac_socket_write (guac_socket * socket,
    const void * buf,
    size_t count )
    +
    + +

    Writes the given data to the specified socket.

    +

    The data written may be buffered until the buffer is flushed automatically or manually.

    +

    If an error occurs while writing, a non-zero value is returned, and guac_error is set appropriately.

    +
    Parameters
    + + + + +
    socketThe guac_socket object to write to.
    bufA buffer containing the data to write.
    countThe number of bytes to write.
    +
    +
    +
    Returns
    Zero on success, or non-zero if an error occurs while writing.
    + +
    +
    + +

    ◆ guac_socket_write_base64()

    + +
    +
    + + + + + + + + + + + + + + + + +
    ssize_t guac_socket_write_base64 (guac_socket * socket,
    const void * buf,
    size_t count )
    +
    + +

    Writes the given binary data to the given guac_socket object as base64- encoded data.

    +

    The data written may be buffered until the buffer is flushed automatically or manually. Beware that, because base64 data is buffered on top of the write buffer already used, a call to guac_socket_flush_base64() MUST be made before non-base64 writes (or writes of an independent block of base64 data) can be made.

    +

    If an error occurs while writing, a non-zero value is returned, and guac_error is set appropriately.

    +
    Parameters
    + + + + +
    socketThe guac_socket object to write to.
    bufA buffer containing the data to write.
    countThe number of bytes to write.
    +
    +
    +
    Returns
    Zero on success, or non-zero if an error occurs while writing.
    + +
    +
    + +

    ◆ guac_socket_write_int()

    + +
    +
    + + + + + + + + + + + +
    ssize_t guac_socket_write_int (guac_socket * socket,
    int64_t i )
    +
    + +

    Writes the given unsigned int to the given guac_socket object.

    +

    The data written may be buffered until the buffer is flushed automatically or manually.

    +

    If an error occurs while writing, a non-zero value is returned, and guac_error is set appropriately.

    +
    Parameters
    + + + +
    socketThe guac_socket object to write to.
    iThe unsigned int to write.
    +
    +
    +
    Returns
    Zero on success, or non-zero if an error occurs while writing.
    + +
    +
    + +

    ◆ guac_socket_write_string()

    + +
    +
    + + + + + + + + + + + +
    ssize_t guac_socket_write_string (guac_socket * socket,
    const char * str )
    +
    + +

    Writes the given string to the given guac_socket object.

    +

    The data written may be buffered until the buffer is flushed automatically or manually.

    +

    If an error occurs while writing, a non-zero value is returned, and guac_error is set appropriately.

    +
    Parameters
    + + + +
    socketThe guac_socket object to write to.
    strThe string to write.
    +
    +
    +
    Returns
    Zero on success, or non-zero if an error occurs while writing.
    + +
    +
    +
    + + + + diff --git a/doc/1.5.5/libguac/socket_8h_source.html b/doc/1.5.5/libguac/socket_8h_source.html new file mode 100644 index 000000000..3bd254cc1 --- /dev/null +++ b/doc/1.5.5/libguac/socket_8h_source.html @@ -0,0 +1,240 @@ + + + + + + + +libguac: guacamole/socket.h Source File + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    socket.h
    +
    +
    +Go to the documentation of this file.
    1/*
    +
    2 * Licensed to the Apache Software Foundation (ASF) under one
    +
    3 * or more contributor license agreements. See the NOTICE file
    +
    4 * distributed with this work for additional information
    +
    5 * regarding copyright ownership. The ASF licenses this file
    +
    6 * to you under the Apache License, Version 2.0 (the
    +
    7 * "License"); you may not use this file except in compliance
    +
    8 * with the License. You may obtain a copy of the License at
    +
    9 *
    +
    10 * http://www.apache.org/licenses/LICENSE-2.0
    +
    11 *
    +
    12 * Unless required by applicable law or agreed to in writing,
    +
    13 * software distributed under the License is distributed on an
    +
    14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    15 * KIND, either express or implied. See the License for the
    +
    16 * specific language governing permissions and limitations
    +
    17 * under the License.
    +
    18 */
    +
    19
    +
    20#ifndef _GUAC_SOCKET_H
    +
    21#define _GUAC_SOCKET_H
    +
    22
    +
    29#include "client-types.h"
    +
    30#include "socket-constants.h"
    +
    31#include "socket-fntypes.h"
    +
    32#include "socket-types.h"
    +
    33#include "timestamp-types.h"
    +
    34
    +
    35#include <pthread.h>
    +
    36#include <stdint.h>
    +
    37#include <unistd.h>
    +
    38
    +
    + +
    40
    +
    44 void* data;
    +
    45
    + +
    50
    + +
    55
    + +
    60
    + +
    66
    + +
    72
    + +
    78
    + +
    83
    + +
    88
    + +
    94
    +
    98 int __ready;
    +
    99
    +
    104 int __ready_buf[3];
    +
    105
    +
    109 int __keep_alive_enabled;
    +
    110
    +
    114 pthread_t __keep_alive_thread;
    +
    115
    +
    116};
    +
    +
    117
    + +
    126
    + +
    133
    + +
    143
    + +
    151
    + +
    159
    + +
    174
    + +
    198
    + +
    230
    + +
    256
    + +
    282
    +
    295ssize_t guac_socket_write_int(guac_socket* socket, int64_t i);
    +
    296
    +
    309ssize_t guac_socket_write_string(guac_socket* socket, const char* str);
    +
    310
    +
    327ssize_t guac_socket_write_base64(guac_socket* socket, const void* buf, size_t count);
    +
    328
    +
    341ssize_t guac_socket_write(guac_socket* socket, const void* buf, size_t count);
    +
    342
    +
    356ssize_t guac_socket_read(guac_socket* socket, void* buf, size_t count);
    +
    357
    + +
    368
    + +
    379
    +
    396int guac_socket_select(guac_socket* socket, int usec_timeout);
    +
    397
    +
    398#endif
    +
    399
    +
    Type definitions related to the Guacamole client structure, guac_client.
    +
    Constants related to the guac_socket object.
    +
    Function type definitions related to the guac_socket object.
    +
    void guac_socket_lock_handler(guac_socket *socket)
    When set within a guac_socket, a handler of this type will be called whenever exclusive access to the...
    Definition socket-fntypes.h:93
    +
    ssize_t guac_socket_write_handler(guac_socket *socket, const void *buf, size_t count)
    Generic write handler for socket write operations, modeled after the standard POSIX write() function.
    Definition socket-fntypes.h:56
    +
    ssize_t guac_socket_read_handler(guac_socket *socket, void *buf, size_t count)
    Generic read handler for socket read operations, modeled after the standard POSIX read() function.
    Definition socket-fntypes.h:43
    +
    ssize_t guac_socket_flush_handler(guac_socket *socket)
    Generic flush handler for socket flush operations.
    Definition socket-fntypes.h:83
    +
    int guac_socket_select_handler(guac_socket *socket, int usec_timeout)
    Generic handler for socket select operations, similar to the POSIX select() function.
    Definition socket-fntypes.h:70
    +
    int guac_socket_free_handler(guac_socket *socket)
    Generic handler for the closing of a socket, modeled after the standard POSIX close() function.
    Definition socket-fntypes.h:113
    +
    void guac_socket_unlock_handler(guac_socket *socket)
    When set within a guac_socket, a handler of this type will be called whenever exclusive access to the...
    Definition socket-fntypes.h:103
    +
    Type definitions related to the guac_socket object.
    +
    guac_socket_state
    Possible current states of a guac_socket.
    Definition socket-types.h:38
    +
    void guac_socket_instruction_begin(guac_socket *socket)
    Marks the beginning of a Guacamole protocol instruction.
    +
    ssize_t guac_socket_flush_base64(guac_socket *socket)
    Flushes the base64 buffer, writing padding characters as necessary.
    +
    void guac_socket_require_keep_alive(guac_socket *socket)
    Declares that the given socket must automatically send a keep-alive ping to ensure neither side of th...
    +
    guac_socket * guac_socket_tee(guac_socket *primary, guac_socket *secondary)
    Allocates and initializes a new guac_socket which delegates all socket operations to the given primar...
    +
    guac_socket * guac_socket_broadcast(guac_client *client)
    Allocates and initializes a new guac_socket which duplicates all instructions written across the sock...
    +
    void guac_socket_free(guac_socket *socket)
    Frees the given guac_socket and all associated resources.
    +
    int guac_socket_select(guac_socket *socket, int usec_timeout)
    Waits for input to be available on the given guac_socket object until the specified timeout elapses.
    +
    ssize_t guac_socket_write_int(guac_socket *socket, int64_t i)
    Writes the given unsigned int to the given guac_socket object.
    +
    void guac_socket_instruction_end(guac_socket *socket)
    Marks the end of a Guacamole protocol instruction.
    +
    guac_socket * guac_socket_alloc()
    Allocates a new, completely blank guac_socket.
    +
    guac_socket * guac_socket_broadcast_pending(guac_client *client)
    Allocates and initializes a new guac_socket which duplicates all instructions written across the sock...
    +
    ssize_t guac_socket_flush(guac_socket *socket)
    Flushes the write buffer.
    +
    ssize_t guac_socket_write_base64(guac_socket *socket, const void *buf, size_t count)
    Writes the given binary data to the given guac_socket object as base64- encoded data.
    +
    ssize_t guac_socket_write_string(guac_socket *socket, const char *str)
    Writes the given string to the given guac_socket object.
    +
    guac_socket * guac_socket_open(int fd)
    Allocates and initializes a new guac_socket object with the given open file descriptor.
    +
    ssize_t guac_socket_write(guac_socket *socket, const void *buf, size_t count)
    Writes the given data to the specified socket.
    +
    ssize_t guac_socket_read(guac_socket *socket, void *buf, size_t count)
    Attempts to read data from the socket, filling up to the specified number of bytes in the given buffe...
    +
    guac_socket * guac_socket_nest(guac_socket *parent, int index)
    Allocates and initializes a new guac_socket which writes all data via nest instructions to the given ...
    +
    Guacamole proxy client.
    Definition client.h:48
    +
    The core I/O object of Guacamole.
    Definition socket.h:39
    +
    guac_socket_write_handler * write_handler
    Handler which will be called whenever data is written to this socket.
    Definition socket.h:54
    +
    guac_socket_read_handler * read_handler
    Handler which will be called when data needs to be read from the socket.
    Definition socket.h:49
    +
    guac_socket_free_handler * free_handler
    Handler which will be called when the socket is free'd (closed).
    Definition socket.h:82
    +
    guac_socket_lock_handler * lock_handler
    Handler which will be called whenever a socket needs to be acquired for exclusive access,...
    Definition socket.h:65
    +
    guac_socket_unlock_handler * unlock_handler
    Handler which will be called whenever exclusive access to a socket is being released,...
    Definition socket.h:71
    +
    guac_socket_state state
    The current state of this guac_socket.
    Definition socket.h:87
    +
    void * data
    Arbitrary socket-specific data.
    Definition socket.h:44
    +
    guac_socket_select_handler * select_handler
    Handler which will be called whenever guac_socket_select() is invoked on this socket.
    Definition socket.h:77
    +
    guac_timestamp last_write_timestamp
    The timestamp associated with the time the last block of data was written to this guac_socket.
    Definition socket.h:93
    +
    guac_socket_flush_handler * flush_handler
    Handler which will be called whenever this socket needs to be flushed.
    Definition socket.h:59
    +
    Type definitions related to Guacamole protocol timestamps.
    +
    int64_t guac_timestamp
    An arbitrary timestamp denoting a relative time value in milliseconds.
    Definition timestamp-types.h:34
    +
    + + + + diff --git a/doc/1.5.5/libguac/splitbar.png b/doc/1.5.5/libguac/splitbar.png new file mode 100644 index 0000000000000000000000000000000000000000..fe895f2c58179b471a22d8320b39a4bd7312ec8e GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0vp^Yzz!63>-{AmhX=Jf(#6djGiuzAr*{o?=JLmPLyc> z_*`QK&+BH@jWrYJ7>r6%keRM@)Qyv8R=enp0jiI>aWlGyB58O zFVR20d+y`K7vDw(hJF3;>dD*3-?v=<8M)@x|EEGLnJsniYK!2U1 Y!`|5biEc?d1`HDhPgg&ebxsLQ02F6;9RL6T literal 0 HcmV?d00001 diff --git a/doc/1.5.5/libguac/splitbard.png b/doc/1.5.5/libguac/splitbard.png new file mode 100644 index 0000000000000000000000000000000000000000..8367416d757fd7b6dc4272b6432dc75a75abd068 GIT binary patch literal 282 zcmeAS@N?(olHy`uVBq!ia0vp^Yzz!63>-{AmhX=Jf@VhhFKy35^fiT zT~&lUj3=cDh^%3HDY9k5CEku}PHXNoNC(_$U3XPb&Q*ME25pT;2(*BOgAf<+R$lzakPG`kF31()Fx{L5Wrac|GQzjeE= zueY1`Ze{#x<8=S|`~MgGetGce)#vN&|J{Cd^tS%;tBYTo?+^d68<#n_Y_xx`J||4O V@QB{^CqU0Kc)I$ztaD0e0svEzbJzd? literal 0 HcmV?d00001 diff --git a/doc/1.5.5/libguac/stream-types_8h.html b/doc/1.5.5/libguac/stream-types_8h.html new file mode 100644 index 000000000..c0d3d6284 --- /dev/null +++ b/doc/1.5.5/libguac/stream-types_8h.html @@ -0,0 +1,94 @@ + + + + + + + +libguac: guacamole/stream-types.h File Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    stream-types.h File Reference
    +
    +
    + +

    Type definitions related to Guacamole protocol streams. +More...

    + +

    Go to the source code of this file.

    +

    Detailed Description

    +

    Type definitions related to Guacamole protocol streams.

    +
    + + + + diff --git a/doc/1.5.5/libguac/stream-types_8h_source.html b/doc/1.5.5/libguac/stream-types_8h_source.html new file mode 100644 index 000000000..703b95667 --- /dev/null +++ b/doc/1.5.5/libguac/stream-types_8h_source.html @@ -0,0 +1,119 @@ + + + + + + + +libguac: guacamole/stream-types.h Source File + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    stream-types.h
    +
    +
    +Go to the documentation of this file.
    1/*
    +
    2 * Licensed to the Apache Software Foundation (ASF) under one
    +
    3 * or more contributor license agreements. See the NOTICE file
    +
    4 * distributed with this work for additional information
    +
    5 * regarding copyright ownership. The ASF licenses this file
    +
    6 * to you under the Apache License, Version 2.0 (the
    +
    7 * "License"); you may not use this file except in compliance
    +
    8 * with the License. You may obtain a copy of the License at
    +
    9 *
    +
    10 * http://www.apache.org/licenses/LICENSE-2.0
    +
    11 *
    +
    12 * Unless required by applicable law or agreed to in writing,
    +
    13 * software distributed under the License is distributed on an
    +
    14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    15 * KIND, either express or implied. See the License for the
    +
    16 * specific language governing permissions and limitations
    +
    17 * under the License.
    +
    18 */
    +
    19
    +
    20#ifndef _GUAC_STREAM_TYPES_H
    +
    21#define _GUAC_STREAM_TYPES_H
    +
    22
    +
    32typedef struct guac_stream guac_stream;
    +
    33
    +
    34#endif
    +
    35
    +
    Represents a single stream within the Guacamole protocol.
    Definition stream.h:32
    +
    + + + + diff --git a/doc/1.5.5/libguac/stream_8h.html b/doc/1.5.5/libguac/stream_8h.html new file mode 100644 index 000000000..e8551f7d4 --- /dev/null +++ b/doc/1.5.5/libguac/stream_8h.html @@ -0,0 +1,103 @@ + + + + + + + +libguac: guacamole/stream.h File Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    stream.h File Reference
    +
    +
    + +

    Provides functions and structures required for allocating and using streams. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Data Structures

    struct  guac_stream
     Represents a single stream within the Guacamole protocol. More...
     
    +

    Detailed Description

    +

    Provides functions and structures required for allocating and using streams.

    +
    + + + + diff --git a/doc/1.5.5/libguac/stream_8h_source.html b/doc/1.5.5/libguac/stream_8h_source.html new file mode 100644 index 000000000..123095185 --- /dev/null +++ b/doc/1.5.5/libguac/stream_8h_source.html @@ -0,0 +1,146 @@ + + + + + + + +libguac: guacamole/stream.h Source File + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    stream.h
    +
    +
    +Go to the documentation of this file.
    1/*
    +
    2 * Licensed to the Apache Software Foundation (ASF) under one
    +
    3 * or more contributor license agreements. See the NOTICE file
    +
    4 * distributed with this work for additional information
    +
    5 * regarding copyright ownership. The ASF licenses this file
    +
    6 * to you under the Apache License, Version 2.0 (the
    +
    7 * "License"); you may not use this file except in compliance
    +
    8 * with the License. You may obtain a copy of the License at
    +
    9 *
    +
    10 * http://www.apache.org/licenses/LICENSE-2.0
    +
    11 *
    +
    12 * Unless required by applicable law or agreed to in writing,
    +
    13 * software distributed under the License is distributed on an
    +
    14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    15 * KIND, either express or implied. See the License for the
    +
    16 * specific language governing permissions and limitations
    +
    17 * under the License.
    +
    18 */
    +
    19
    +
    20#ifndef _GUAC_STREAM_H
    +
    21#define _GUAC_STREAM_H
    +
    22
    +
    29#include "user-fntypes.h"
    +
    30#include "stream-types.h"
    +
    31
    + +
    109
    +
    110#endif
    +
    111
    +
    Type definitions related to Guacamole protocol streams.
    +
    Represents a single stream within the Guacamole protocol.
    Definition stream.h:32
    +
    int index
    The index of this stream.
    Definition stream.h:37
    +
    guac_user_blob_handler * blob_handler
    Handler for blob events sent by the Guacamole web-client.
    Definition stream.h:87
    +
    guac_user_end_handler * end_handler
    Handler for stream end events sent by the Guacamole web-client.
    Definition stream.h:106
    +
    guac_user_ack_handler * ack_handler
    Handler for ack events sent by the Guacamole web-client.
    Definition stream.h:67
    +
    void * data
    Arbitrary data associated with this stream.
    Definition stream.h:42
    +
    Function type definitions related to the guac_user object.
    +
    int guac_user_ack_handler(guac_user *user, guac_stream *stream, char *error, guac_protocol_status status)
    Handler for Guacamole stream "ack" instructions.
    Definition user-fntypes.h:364
    +
    int guac_user_blob_handler(guac_user *user, guac_stream *stream, void *data, int length)
    Handler for Guacamole stream blobs.
    Definition user-fntypes.h:335
    +
    int guac_user_end_handler(guac_user *user, guac_stream *stream)
    Handler for Guacamole stream "end" instructions.
    Definition user-fntypes.h:381
    +
    + + + + diff --git a/doc/1.5.5/libguac/string_8h.html b/doc/1.5.5/libguac/string_8h.html new file mode 100644 index 000000000..d6fca5dcd --- /dev/null +++ b/doc/1.5.5/libguac/string_8h.html @@ -0,0 +1,317 @@ + + + + + + + +libguac: guacamole/string.h File Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    string.h File Reference
    +
    +
    + +

    Provides convenience functions for manipulating strings. +More...

    + +

    Go to the source code of this file.

    + + + + + + + + + + + + + + + + + +

    +Functions

    size_t guac_strlcpy (char *restrict dest, const char *restrict src, size_t n)
     Copies a limited number of bytes from the given source string to the given destination buffer.
     
    size_t guac_strlcat (char *restrict dest, const char *restrict src, size_t n)
     Appends the given source string after the end of the given destination string, writing at most the given number of bytes.
     
    char * guac_strnstr (const char *haystack, const char *needle, size_t len)
     Search for the null-terminated string needle in the possibly null- terminated haystack, looking at no more than len bytes.
     
    char * guac_strdup (const char *str)
     Duplicates the given string, returning a newly-allocated string containing the same contents.
     
    size_t guac_strljoin (char *restrict dest, const char *restrict const *elements, int nmemb, const char *restrict delim, size_t n)
     Concatenates each of the given strings, separated by the given delimiter, storing the result within a destination buffer.
     
    +

    Detailed Description

    +

    Provides convenience functions for manipulating strings.

    +

    Function Documentation

    + +

    ◆ guac_strdup()

    + +
    +
    + + + + + + + +
    char * guac_strdup (const char * str)
    +
    + +

    Duplicates the given string, returning a newly-allocated string containing the same contents.

    +

    The provided string must be null-terminated. The size of the memory block for the newly-allocated string is only guaranteed to include enough space for the contents of the provided string, including null terminator.

    +

    The pointer returned by guac_strdup() SHOULD be freed with a subsequent call to guac_mem_free(), but MAY instead be freed with a subsequent call to free().

    +

    This function behaves identically to standard strdup(), except that NULL will be returned if the provided string is NULL.

    +
    Parameters
    + + +
    strThe string to duplicate as a newly-allocated string.
    +
    +
    +
    Returns
    A newly-allocated string containing identically the same content as the given string, or NULL if the given string was NULL.
    + +
    +
    + +

    ◆ guac_strlcat()

    + +
    +
    + + + + + + + + + + + + + + + + +
    size_t guac_strlcat (char *restrict dest,
    const char *restrict src,
    size_t n )
    +
    + +

    Appends the given source string after the end of the given destination string, writing at most the given number of bytes.

    +

    Both the source and destination strings MUST be null-terminated. The resulting buffer will always be null-terminated, even if doing so means that the intended string is truncated, unless the destination buffer has no space available at all. As this function always returns the length of the string it tried to create (the length of destination and source strings added together), whether truncation has occurred can be detected by comparing the return value against the size of the destination buffer. If the value returned is greater than or equal to the size of the destination buffer, then the string has been truncated.

    +

    The source and destination buffers MAY NOT overlap.

    +
    Parameters
    + + +
    destThe buffer which should be appended with the contents of the source string. This buffer MUST already be null-terminated and will always be null-terminated unless zero bytes are available within the buffer.
    +
    +
    +

    As a safeguard against incorrectly-written code, in the event that the destination buffer is not null-terminated, this function will still stop before overrunning the buffer, instead behaving as if the length of the string in the buffer is exactly the size of the buffer. The destination buffer will remain untouched (and unterminated) in this case.

    +
    Parameters
    + + + +
    srcThe source string to append to the destination buffer. This string MUST be null-terminated.
    nThe number of bytes available within the destination buffer. If this value is not greater than zero, no bytes will be written to the destination buffer, and the destination buffer may not be null-terminated. In all other cases, the destination buffer will always be null-terminated, even if doing so means that the copied data from the source string will be truncated.
    +
    +
    +
    Returns
    The length of the string this function tried to create (the lengths of the source and destination strings added together) in bytes, excluding the null terminator.
    + +
    +
    + +

    ◆ guac_strlcpy()

    + +
    +
    + + + + + + + + + + + + + + + + +
    size_t guac_strlcpy (char *restrict dest,
    const char *restrict src,
    size_t n )
    +
    + +

    Copies a limited number of bytes from the given source string to the given destination buffer.

    +

    The resulting buffer will always be null-terminated, even if doing so means that the intended string is truncated, unless the destination buffer has no space available at all. As this function always returns the length of the string it tried to create (the length of the source string), whether truncation has occurred can be detected by comparing the return value against the size of the destination buffer. If the value returned is greater than or equal to the size of the destination buffer, then the string has been truncated.

    +

    The source and destination buffers MAY NOT overlap.

    +
    Parameters
    + + + + +
    destThe buffer which should receive the contents of the source string. This buffer will always be null terminated unless zero bytes are available within the buffer.
    srcThe source string to copy into the destination buffer. This string MUST be null terminated.
    nThe number of bytes available within the destination buffer. If this value is zero, no bytes will be written to the destination buffer, and the destination buffer may not be null terminated. In all other cases, the destination buffer will always be null terminated, even if doing so means that the copied data from the source string will be truncated.
    +
    +
    +
    Returns
    The length of the copied string (the source string) in bytes, excluding the null terminator.
    + +
    +
    + +

    ◆ guac_strljoin()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    size_t guac_strljoin (char *restrict dest,
    const char *restrict const * elements,
    int nmemb,
    const char *restrict delim,
    size_t n )
    +
    + +

    Concatenates each of the given strings, separated by the given delimiter, storing the result within a destination buffer.

    +

    The number of bytes written will be no more than the given number of bytes, and the destination buffer is guaranteed to be null-terminated, even if doing so means that one or more of the intended strings are truncated or omitted from the end of the result, unless the destination buffer has no space available at all. As this function always returns the length of the string it tried to create (the length of all source strings and all delimiters added together), whether truncation has occurred can be detected by comparing the return value against the size of the destination buffer. If the value returned is greater than or equal to the size of the destination buffer, then the string has been truncated.

    +

    The source strings, delimiter string, and destination buffer MAY NOT overlap.

    +
    Parameters
    + + + + + + +
    destThe buffer which should receive the result of joining the given strings. This buffer will always be null terminated unless zero bytes are available within the buffer.
    elementsThe elements to concatenate together, separated by the given delimiter. Each element MUST be null-terminated.
    nmembThe number of elements within the elements array.
    delimThe delimiter to include between each pair of elements.
    nThe number of bytes available within the destination buffer. If this value is not greater than zero, no bytes will be written to the destination buffer, and the destination buffer may not be null terminated. In all other cases, the destination buffer will always be null terminated, even if doing so means that the result will be truncated.
    +
    +
    +
    Returns
    The length of the string this function tried to create (the length of all source strings and all delimiters added together) in bytes, excluding the null terminator.
    + +
    +
    + +

    ◆ guac_strnstr()

    + +
    +
    + + + + + + + + + + + + + + + + +
    char * guac_strnstr (const char * haystack,
    const char * needle,
    size_t len )
    +
    + +

    Search for the null-terminated string needle in the possibly null- terminated haystack, looking at no more than len bytes.

    +
    Parameters
    + + + + +
    haystackThe string to search. It may or may not be null-terminated. Only the first len bytes are searched.
    needleThe string to look for. It must be null-terminated.
    lenThe maximum number of bytes to examine in haystack.
    +
    +
    +
    Returns
    A pointer to the first instance of needle within haystack, or NULL if needle does not exist in haystack. If needle is the empty string, haystack is returned.
    + +
    +
    +
    + + + + diff --git a/doc/1.5.5/libguac/string_8h_source.html b/doc/1.5.5/libguac/string_8h_source.html new file mode 100644 index 000000000..3b16320c7 --- /dev/null +++ b/doc/1.5.5/libguac/string_8h_source.html @@ -0,0 +1,136 @@ + + + + + + + +libguac: guacamole/string.h Source File + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    string.h
    +
    +
    +Go to the documentation of this file.
    1/*
    +
    2 * Licensed to the Apache Software Foundation (ASF) under one
    +
    3 * or more contributor license agreements. See the NOTICE file
    +
    4 * distributed with this work for additional information
    +
    5 * regarding copyright ownership. The ASF licenses this file
    +
    6 * to you under the Apache License, Version 2.0 (the
    +
    7 * "License"); you may not use this file except in compliance
    +
    8 * with the License. You may obtain a copy of the License at
    +
    9 *
    +
    10 * http://www.apache.org/licenses/LICENSE-2.0
    +
    11 *
    +
    12 * Unless required by applicable law or agreed to in writing,
    +
    13 * software distributed under the License is distributed on an
    +
    14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    15 * KIND, either express or implied. See the License for the
    +
    16 * specific language governing permissions and limitations
    +
    17 * under the License.
    +
    18 */
    +
    19
    +
    20#ifndef GUAC_STRING_H
    +
    21#define GUAC_STRING_H
    +
    22
    +
    29#include <stddef.h>
    +
    30#include <string.h>
    +
    31
    +
    65size_t guac_strlcpy(char* restrict dest, const char* restrict src, size_t n);
    +
    66
    +
    110size_t guac_strlcat(char* restrict dest, const char* restrict src, size_t n);
    +
    111
    +
    132char* guac_strnstr(const char *haystack, const char *needle, size_t len);
    +
    133
    +
    154char* guac_strdup(const char* str);
    +
    155
    +
    201size_t guac_strljoin(char* restrict dest, const char* restrict const* elements,
    +
    202 int nmemb, const char* restrict delim, size_t n);
    +
    203
    +
    204#endif
    +
    205
    +
    Provides convenience functions for manipulating strings.
    +
    size_t guac_strlcat(char *restrict dest, const char *restrict src, size_t n)
    Appends the given source string after the end of the given destination string, writing at most the gi...
    +
    size_t guac_strljoin(char *restrict dest, const char *restrict const *elements, int nmemb, const char *restrict delim, size_t n)
    Concatenates each of the given strings, separated by the given delimiter, storing the result within a...
    +
    char * guac_strnstr(const char *haystack, const char *needle, size_t len)
    Search for the null-terminated string needle in the possibly null- terminated haystack,...
    +
    char * guac_strdup(const char *str)
    Duplicates the given string, returning a newly-allocated string containing the same contents.
    +
    size_t guac_strlcpy(char *restrict dest, const char *restrict src, size_t n)
    Copies a limited number of bytes from the given source string to the given destination buffer.
    +
    + + + + diff --git a/doc/1.5.5/libguac/structguac__audio__encoder.html b/doc/1.5.5/libguac/structguac__audio__encoder.html new file mode 100644 index 000000000..5251af0f7 --- /dev/null +++ b/doc/1.5.5/libguac/structguac__audio__encoder.html @@ -0,0 +1,121 @@ + + + + + + + +libguac: guac_audio_encoder Struct Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    + +
    guac_audio_encoder Struct Reference
    +
    +
    + +

    Arbitrary audio codec encoder. + More...

    + + + + + + + + + + + + + + + + + + + + +

    +Data Fields

    +const char * mimetype
     The mimetype of the audio data encoded by this audio encoder.
     
    +guac_audio_encoder_begin_handlerbegin_handler
     Handler which will be called when the audio stream is first created.
     
    +guac_audio_encoder_write_handlerwrite_handler
     Handler which will be called when PCM data is written to the audio stream for encoding.
     
    +guac_audio_encoder_flush_handlerflush_handler
     Handler which will be called when the audio stream is flushed.
     
    +guac_audio_encoder_end_handlerend_handler
     Handler which will be called when the audio stream is closed.
     
    +guac_audio_encoder_join_handlerjoin_handler
     Handler which will be called when a new user joins the Guacamole connection associated with an audio stream.
     
    +

    Detailed Description

    +

    Arbitrary audio codec encoder.

    +

    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/doc/1.5.5/libguac/structguac__audio__stream.html b/doc/1.5.5/libguac/structguac__audio__stream.html new file mode 100644 index 000000000..258c41993 --- /dev/null +++ b/doc/1.5.5/libguac/structguac__audio__stream.html @@ -0,0 +1,159 @@ + + + + + + + +libguac: guac_audio_stream Struct Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    + +
    guac_audio_stream Struct Reference
    +
    +
    + +

    Basic audio stream. + More...

    + + + + + + + + + + + + + + + + + + + + + + + +

    +Data Fields

    +guac_audio_encoderencoder
     Arbitrary codec encoder which will receive raw PCM data.
     
    +guac_clientclient
     The client associated with this audio stream.
     
    +guac_streamstream
     The actual stream associated with this audio stream.
     
    +int rate
     The number of samples per second of PCM data sent to this stream.
     
    int channels
     The number of audio channels per sample of PCM data.
     
    int bps
     The number of bits per sample per channel for PCM data.
     
    +void * data
     Encoder-specific state data.
     
    +

    Detailed Description

    +

    Basic audio stream.

    +

    PCM data is added to the stream. When the stream is flushed, a write handler receives PCM data packets and, presumably, streams them to the guac_stream provided.

    +

    Field Documentation

    + +

    ◆ bps

    + +
    +
    + + + + +
    int guac_audio_stream::bps
    +
    + +

    The number of bits per sample per channel for PCM data.

    +

    Legal values are 8 or 16.

    + +
    +
    + +

    ◆ channels

    + +
    +
    + + + + +
    int guac_audio_stream::channels
    +
    + +

    The number of audio channels per sample of PCM data.

    +

    Legal values are 1 or 2.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/doc/1.5.5/libguac/structguac__client.html b/doc/1.5.5/libguac/structguac__client.html new file mode 100644 index 000000000..1c27ae505 --- /dev/null +++ b/doc/1.5.5/libguac/structguac__client.html @@ -0,0 +1,396 @@ + + + + + + + +libguac: guac_client Struct Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    + +
    guac_client Struct Reference
    +
    +
    + +

    Guacamole proxy client. + More...

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Data Fields

    guac_socketsocket
     The guac_socket structure to be used to communicate with all non-pending connected web-clients (users).
     
    guac_socketpending_socket
     The guac_socket structure to be used to communicate with all pending connected web-clients (users).
     
    guac_client_state state
     The current state of the client.
     
    void * data
     Arbitrary reference to proxy client-specific data.
     
    +guac_timestamp last_sent_timestamp
     The time (in milliseconds) that the last sync message was sent to the client.
     
    guac_client_free_handlerfree_handler
     Handler for freeing data when the client is being unloaded.
     
    guac_client_log_handlerlog_handler
     Logging handler.
     
    char * connection_id
     The unique identifier allocated for the connection, which may be used within the Guacamole protocol to refer to this connection.
     
    int connected_users
     The number of currently-connected users.
     
    guac_user_join_handlerjoin_handler
     Handler for join events, called whenever a new user is joining an active connection.
     
    guac_client_join_pending_handlerjoin_pending_handler
     A handler that will be run prior to pending users being promoted to full users.
     
    guac_user_leave_handlerleave_handler
     Handler for leave events, called whenever a new user is leaving an active connection.
     
    const char ** args
     NULL-terminated array of all arguments accepted by this client , in order.
     
    +

    Detailed Description

    +

    Guacamole proxy client.

    +

    Represents a Guacamole proxy client (the client which communicates to a server on behalf of Guacamole, on behalf of the web-client).

    +

    Field Documentation

    + +

    ◆ args

    + +
    +
    + + + + +
    const char** guac_client::args
    +
    + +

    NULL-terminated array of all arguments accepted by this client , in order.

    +

    New users will specify these arguments when they join the connection, and the values of those arguments will be made available to the function initializing newly-joined users.

    +

    The guac_client_init entry point is expected to initialize this, if arguments are expected.

    +

    Example:

    const char* __my_args[] = {
    +
    "hostname",
    +
    "port",
    +
    "username",
    +
    "password",
    +
    NULL
    +
    };
    +
    +
    int guac_client_init(guac_client* client) {
    +
    client->args = __my_args;
    +
    }
    +
    Guacamole proxy client.
    Definition client.h:48
    +
    const char ** args
    NULL-terminated array of all arguments accepted by this client , in order.
    Definition client.h:308
    +
    +
    +
    + +

    ◆ connected_users

    + +
    +
    + + + + +
    int guac_client::connected_users
    +
    + +

    The number of currently-connected users.

    +

    This value may include inactive users if cleanup of those users has not yet finished.

    + +
    +
    + +

    ◆ connection_id

    + +
    +
    + + + + +
    char* guac_client::connection_id
    +
    + +

    The unique identifier allocated for the connection, which may be used within the Guacamole protocol to refer to this connection.

    +

    This identifier is guaranteed to be unique from all existing connections and will not collide with any available protocol names.

    + +
    +
    + +

    ◆ data

    + +
    +
    + + + + +
    void* guac_client::data
    +
    + +

    Arbitrary reference to proxy client-specific data.

    +

    Implementors of a Guacamole proxy client can store any data they want here, which can then be retrieved as necessary in the message handlers.

    + +
    +
    + +

    ◆ free_handler

    + +
    +
    + + + + +
    guac_client_free_handler* guac_client::free_handler
    +
    + +

    Handler for freeing data when the client is being unloaded.

    +

    This handler will be called when the client needs to be unloaded by the proxy, and any data allocated by the proxy client should be freed.

    +

    Note that this handler will NOT be called if the client's guac_client_init() function fails.

    +

    Implement this handler if you store data inside the client.

    +

    Example:

    +
    +
    int guac_client_init(guac_client* client) {
    + +
    }
    +
    guac_client_free_handler * free_handler
    Handler for freeing data when the client is being unloaded.
    Definition client.h:111
    +
    +
    +
    + +

    ◆ join_handler

    + +
    +
    + + + + +
    guac_user_join_handler* guac_client::join_handler
    +
    + +

    Handler for join events, called whenever a new user is joining an active connection.

    +

    Note that because users may leave the connection at any time, a reference to a guac_user can become invalid at any time and should never be maintained outside the scope of a function invoked by libguac to which that guac_user was passed (the scope in which the guac_user reference is guaranteed to be valid) UNLESS that reference is properly invalidated within the leave_handler.

    +

    The handler is given a pointer to a newly-allocated guac_user which must then be initialized, if needed.

    +

    Example:

    int join_handler(guac_user* user, int argc, char** argv);
    +
    +
    int guac_client_init(guac_client* client) {
    + +
    }
    +
    guac_user_join_handler * join_handler
    Handler for join events, called whenever a new user is joining an active connection.
    Definition client.h:248
    +
    Representation of a physical connection within a larger logical connection which may be shared.
    Definition user.h:115
    +
    +
    +
    + +

    ◆ join_pending_handler

    + +
    +
    + + + + +
    guac_client_join_pending_handler* guac_client::join_pending_handler
    +
    + +

    A handler that will be run prior to pending users being promoted to full users.

    +

    Any required pending user operations should be performed using the client's pending user socket.

    +

    Example:

    +
    +
    int guac_client_init(guac_client* client) {
    + +
    }
    +
    guac_client_join_pending_handler * join_pending_handler
    A handler that will be run prior to pending users being promoted to full users.
    Definition client.h:264
    +
    +
    +
    + +

    ◆ leave_handler

    + +
    +
    + + + + +
    guac_user_leave_handler* guac_client::leave_handler
    +
    + +

    Handler for leave events, called whenever a new user is leaving an active connection.

    +

    The handler is given a pointer to the leaving guac_user whose custom data and associated resources must now be freed, if any.

    +

    Example:

    +
    +
    int guac_client_init(guac_client* client) {
    + +
    }
    +
    guac_user_leave_handler * leave_handler
    Handler for leave events, called whenever a new user is leaving an active connection.
    Definition client.h:282
    +
    +
    +
    + +

    ◆ log_handler

    + +
    +
    + + + + +
    guac_client_log_handler* guac_client::log_handler
    +
    + +

    Logging handler.

    +

    This handler will be called via guac_client_log() when the client needs to log messages of any type.

    +

    In general, only programs loading the client should implement this handler, as those are the programs that would provide the logging facilities.

    +

    Client implementations should expect these handlers to already be set.

    +

    Example:

    void log_handler(guac_client* client, guac_client_log_level level, const char* format, va_list args);
    +
    +
    void function_of_daemon() {
    +
    +
    guac_client* client = [pass log_handler to guac_client_plugin_get_client()];
    +
    +
    }
    +
    guac_client_log_level
    All supported log levels used by the logging subsystem of each Guacamole client.
    Definition client-types.h:62
    +
    guac_client_log_handler * log_handler
    Logging handler.
    Definition client.h:135
    +
    +
    +
    + +

    ◆ pending_socket

    + +
    +
    + + + + +
    guac_socket* guac_client::pending_socket
    +
    + +

    The guac_socket structure to be used to communicate with all pending connected web-clients (users).

    +

    Aside from operating on a different subset of users, this socket has all the same behavior and semantics as the non-pending socket.

    + +
    +
    + +

    ◆ socket

    + +
    +
    + + + + +
    guac_socket* guac_client::socket
    +
    + +

    The guac_socket structure to be used to communicate with all non-pending connected web-clients (users).

    +

    Unlike the user-level guac_socket, this guac_socket will broadcast instructions to all non-pending connected users simultaneously. It is expected that the implementor of any Guacamole proxy client will provide their own mechanism of I/O for their protocol. The guac_socket structure is used only to communicate conveniently with the Guacamole web-client.

    + +
    +
    + +

    ◆ state

    + +
    +
    + + + + +
    guac_client_state guac_client::state
    +
    + +

    The current state of the client.

    +

    When the client is first allocated, this will be initialized to GUAC_CLIENT_RUNNING. It will remain at GUAC_CLIENT_RUNNING until an event occurs which requires the client to shutdown, at which point the state becomes GUAC_CLIENT_STOPPING.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/doc/1.5.5/libguac/structguac__layer.html b/doc/1.5.5/libguac/structguac__layer.html new file mode 100644 index 000000000..ee31dea03 --- /dev/null +++ b/doc/1.5.5/libguac/structguac__layer.html @@ -0,0 +1,103 @@ + + + + + + + +libguac: guac_layer Struct Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    + +
    guac_layer Struct Reference
    +
    +
    + +

    Represents a single layer within the Guacamole protocol. + More...

    + +

    #include <layer.h>

    + + + + + +

    +Data Fields

    +int index
     The index of this layer.
     
    +

    Detailed Description

    +

    Represents a single layer within the Guacamole protocol.

    +

    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/doc/1.5.5/libguac/structguac__object.html b/doc/1.5.5/libguac/structguac__object.html new file mode 100644 index 000000000..0740ef356 --- /dev/null +++ b/doc/1.5.5/libguac/structguac__object.html @@ -0,0 +1,170 @@ + + + + + + + +libguac: guac_object Struct Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    + +
    guac_object Struct Reference
    +
    +
    + +

    Represents a single object within the Guacamole protocol. + More...

    + + + + + + + + + + + + + + +

    +Data Fields

    +int index
     The index of this object.
     
    +void * data
     Arbitrary data associated with this object.
     
    guac_user_get_handlerget_handler
     Handler for get events sent by the Guacamole web-client.
     
    guac_user_put_handlerput_handler
     Handler for put events sent by the Guacamole web-client.
     
    +

    Detailed Description

    +

    Represents a single object within the Guacamole protocol.

    +

    Field Documentation

    + +

    ◆ get_handler

    + +
    +
    + + + + +
    guac_user_get_handler* guac_object::get_handler
    +
    + +

    Handler for get events sent by the Guacamole web-client.

    +

    The handler takes a guac_object, containing the object index which will persist through the duration of the transfer, and the name of the stream being requested. It is up to the get handler to create the required body stream.

    +

    Example:

    int get_handler(guac_user* user, guac_object* object,
    +
    char* name);
    +
    +
    int some_function(guac_user* user) {
    +
    + +
    object->get_handler = get_handler;
    +
    +
    }
    +
    Represents a single object within the Guacamole protocol.
    Definition object.h:32
    +
    guac_user_get_handler * get_handler
    Handler for get events sent by the Guacamole web-client.
    Definition object.h:65
    +
    Representation of a physical connection within a larger logical connection which may be shared.
    Definition user.h:115
    +
    guac_object * guac_user_alloc_object(guac_user *user)
    Allocates a new object.
    +
    +
    +
    + +

    ◆ put_handler

    + +
    +
    + + + + +
    guac_user_put_handler* guac_object::put_handler
    +
    + +

    Handler for put events sent by the Guacamole web-client.

    +

    The handler takes a guac_object and guac_stream, which each contain their respective indices which will persist through the duration of the transfer, the mimetype of the data being transferred, and the name of the stream within the object being written to.

    +

    Example:

    int put_handler(guac_user* user, guac_object* object,
    +
    guac_stream* stream, char* mimetype, char* name);
    +
    +
    int some_function(guac_user* user) {
    +
    + +
    object->put_handler = put_handler;
    +
    +
    }
    +
    guac_user_put_handler * put_handler
    Handler for put events sent by the Guacamole web-client.
    Definition object.h:88
    +
    Represents a single stream within the Guacamole protocol.
    Definition stream.h:32
    +
    +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/doc/1.5.5/libguac/structguac__parser.html b/doc/1.5.5/libguac/structguac__parser.html new file mode 100644 index 000000000..68dd8c861 --- /dev/null +++ b/doc/1.5.5/libguac/structguac__parser.html @@ -0,0 +1,113 @@ + + + + + + + +libguac: guac_parser Struct Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    + +
    guac_parser Struct Reference
    +
    +
    + +

    A Guacamole protocol parser, which reads individual instructions, filling its own internal structure with the most recently read instruction data. + More...

    + + + + + + + + + + + + + + +

    +Data Fields

    +char * opcode
     The opcode of the instruction.
     
    +int argc
     The number of arguments passed to this instruction.
     
    +char ** argv
     Array of all arguments passed to this instruction.
     
    +guac_parse_state state
     The parse state of the instruction.
     
    +

    Detailed Description

    +

    A Guacamole protocol parser, which reads individual instructions, filling its own internal structure with the most recently read instruction data.

    +

    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/doc/1.5.5/libguac/structguac__pool.html b/doc/1.5.5/libguac/structguac__pool.html new file mode 100644 index 000000000..c1304d253 --- /dev/null +++ b/doc/1.5.5/libguac/structguac__pool.html @@ -0,0 +1,106 @@ + + + + + + + +libguac: guac_pool Struct Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    + +
    guac_pool Struct Reference
    +
    +
    + +

    A pool of integers. + More...

    + + + + + + + + +

    +Data Fields

    +int min_size
     The minimum number of integers which must have been returned by guac_pool_next_int before previously-used and freed integers are allowed to be returned.
     
    +int active
     The number of integers currently in use.
     
    +

    Detailed Description

    +

    A pool of integers.

    +

    Integers can be removed from and later free'd back into the pool. New integers are returned when the pool is exhausted, or when the pool has not met some minimum size. Old, free'd integers are returned otherwise.

    +

    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/doc/1.5.5/libguac/structguac__pool__int.html b/doc/1.5.5/libguac/structguac__pool__int.html new file mode 100644 index 000000000..f786b6164 --- /dev/null +++ b/doc/1.5.5/libguac/structguac__pool__int.html @@ -0,0 +1,101 @@ + + + + + + + +libguac: guac_pool_int Struct Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    + +
    guac_pool_int Struct Reference
    +
    +
    + +

    Represents a single integer within a larger pool of integers. + More...

    + + + + + +

    +Data Fields

    +int value
     The integer value of this pool entry.
     
    +

    Detailed Description

    +

    Represents a single integer within a larger pool of integers.

    +

    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/doc/1.5.5/libguac/structguac__recording.html b/doc/1.5.5/libguac/structguac__recording.html new file mode 100644 index 000000000..7d271df66 --- /dev/null +++ b/doc/1.5.5/libguac/structguac__recording.html @@ -0,0 +1,184 @@ + + + + + + + +libguac: guac_recording Struct Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    + +
    guac_recording Struct Reference
    +
    +
    + +

    An in-progress session recording, attached to a guac_client instance such that output Guacamole instructions may be dynamically intercepted and written to a file. + More...

    + +

    #include <recording.h>

    + + + + + + + + + + + + + + + + + +

    +Data Fields

    +guac_socketsocket
     The guac_socket which writes directly to the recording file, rather than to any particular user.
     
    int include_output
     Non-zero if output which is broadcast to each connected client (graphics, streams, etc.) should be included in the session recording, zero otherwise.
     
    int include_mouse
     Non-zero if changes to mouse state, such as position and buttons pressed or released, should be included in the session recording, zero otherwise.
     
    int include_touch
     Non-zero if multi-touch events should be included in the session recording, zero otherwise.
     
    int include_keys
     Non-zero if keys pressed and released should be included in the session recording, zero otherwise.
     
    +

    Detailed Description

    +

    An in-progress session recording, attached to a guac_client instance such that output Guacamole instructions may be dynamically intercepted and written to a file.

    +

    Field Documentation

    + +

    ◆ include_keys

    + +
    +
    + + + + +
    int guac_recording::include_keys
    +
    + +

    Non-zero if keys pressed and released should be included in the session recording, zero otherwise.

    +

    Including key events within the recording may be necessary in certain auditing contexts, but should only be done with caution. Key events can easily contain sensitive information, such as passwords, credit card numbers, etc.

    + +
    +
    + +

    ◆ include_mouse

    + +
    +
    + + + + +
    int guac_recording::include_mouse
    +
    + +

    Non-zero if changes to mouse state, such as position and buttons pressed or released, should be included in the session recording, zero otherwise.

    +

    Including mouse state is necessary for the mouse cursor to be rendered in any resulting video.

    + +
    +
    + +

    ◆ include_output

    + +
    +
    + + + + +
    int guac_recording::include_output
    +
    + +

    Non-zero if output which is broadcast to each connected client (graphics, streams, etc.) should be included in the session recording, zero otherwise.

    +

    Including output is necessary for any recording which must later be viewable as video.

    + +
    +
    + +

    ◆ include_touch

    + +
    +
    + + + + +
    int guac_recording::include_touch
    +
    + +

    Non-zero if multi-touch events should be included in the session recording, zero otherwise.

    +

    Depending on whether the remote desktop will automatically provide graphical feedback for touches, including touch events may be necessary for multi-touch interactions to be rendered in any resulting video.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/doc/1.5.5/libguac/structguac__rwlock.html b/doc/1.5.5/libguac/structguac__rwlock.html new file mode 100644 index 000000000..f64305fc9 --- /dev/null +++ b/doc/1.5.5/libguac/structguac__rwlock.html @@ -0,0 +1,109 @@ + + + + + + + +libguac: guac_rwlock Struct Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    + +
    guac_rwlock Struct Reference
    +
    +
    + +

    This file implements reentrant read-write locks using thread-local storage to keep track of how locks are held and released by the current thread, since the pthread locks do not support reentrant behavior. + More...

    + +

    #include <rwlock.h>

    + + + + + + + + +

    +Data Fields

    +pthread_rwlock_t lock
     A non-reentrant pthread rwlock to be wrapped by the local lock, functions providing reentrant behavior.
     
    +pthread_key_t key
     A key to access a thread-local property tracking any ownership of the lock by the current thread.
     
    +

    Detailed Description

    +

    This file implements reentrant read-write locks using thread-local storage to keep track of how locks are held and released by the current thread, since the pthread locks do not support reentrant behavior.

    +

    A thread will attempt to acquire the requested lock on the first acquire function call, and will release it once the number of unlock requests matches the number of lock requests. Therefore, it is safe to acquire a lock and then call a function that also acquires the same lock, provided that the caller and the callee request to unlock the lock when done with it.

    +

    Any lock that's locked using one of the functions defined in this file must only be unlocked using the unlock function defined here to avoid unexpected behavior. A structure packaging together a pthread rwlock along with a key to a thread-local property to keep track of the current status of the lock, allowing the functions defined in this header to provide reentrant behavior. Note that both the lock and key must be initialized before being provided to any of these functions.

    +

    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/doc/1.5.5/libguac/structguac__socket.html b/doc/1.5.5/libguac/structguac__socket.html new file mode 100644 index 000000000..03d17d2b1 --- /dev/null +++ b/doc/1.5.5/libguac/structguac__socket.html @@ -0,0 +1,138 @@ + + + + + + + +libguac: guac_socket Struct Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    + +
    guac_socket Struct Reference
    +
    +
    + +

    The core I/O object of Guacamole. + More...

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Data Fields

    +void * data
     Arbitrary socket-specific data.
     
    +guac_socket_read_handlerread_handler
     Handler which will be called when data needs to be read from the socket.
     
    +guac_socket_write_handlerwrite_handler
     Handler which will be called whenever data is written to this socket.
     
    +guac_socket_flush_handlerflush_handler
     Handler which will be called whenever this socket needs to be flushed.
     
    +guac_socket_lock_handlerlock_handler
     Handler which will be called whenever a socket needs to be acquired for exclusive access, such as when an instruction is about to be written.
     
    +guac_socket_unlock_handlerunlock_handler
     Handler which will be called whenever exclusive access to a socket is being released, such as when an instruction has finished being written.
     
    +guac_socket_select_handlerselect_handler
     Handler which will be called whenever guac_socket_select() is invoked on this socket.
     
    +guac_socket_free_handlerfree_handler
     Handler which will be called when the socket is free'd (closed).
     
    +guac_socket_state state
     The current state of this guac_socket.
     
    +guac_timestamp last_write_timestamp
     The timestamp associated with the time the last block of data was written to this guac_socket.
     
    +

    Detailed Description

    +

    The core I/O object of Guacamole.

    +

    guac_socket provides buffered input and output as well as convenience methods for efficiently writing base64 data.

    +

    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/doc/1.5.5/libguac/structguac__socket__ssl__data.html b/doc/1.5.5/libguac/structguac__socket__ssl__data.html new file mode 100644 index 000000000..4f12827e8 --- /dev/null +++ b/doc/1.5.5/libguac/structguac__socket__ssl__data.html @@ -0,0 +1,115 @@ + + + + + + + +libguac: guac_socket_ssl_data Struct Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    + +
    guac_socket_ssl_data Struct Reference
    +
    +
    + +

    SSL socket-specific data. + More...

    + +

    #include <socket-ssl.h>

    + + + + + + + + + + + + + + +

    +Data Fields

    +int fd
     The file descriptor that SSL communication will take place over.
     
    +SSL_CTX * context
     The current SSL context.
     
    +SSL * ssl
     The SSL connection, created automatically via guac_socket_open_secure().
     
    +pthread_mutex_t socket_lock
     Lock that is acquired when an instruction is being written, and released when the instruction is finished being written.
     
    +

    Detailed Description

    +

    SSL socket-specific data.

    +

    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/doc/1.5.5/libguac/structguac__stream.html b/doc/1.5.5/libguac/structguac__stream.html new file mode 100644 index 000000000..0bed280ba --- /dev/null +++ b/doc/1.5.5/libguac/structguac__stream.html @@ -0,0 +1,201 @@ + + + + + + + +libguac: guac_stream Struct Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    + +
    guac_stream Struct Reference
    +
    +
    + +

    Represents a single stream within the Guacamole protocol. + More...

    + + + + + + + + + + + + + + + + + +

    +Data Fields

    +int index
     The index of this stream.
     
    +void * data
     Arbitrary data associated with this stream.
     
    guac_user_ack_handlerack_handler
     Handler for ack events sent by the Guacamole web-client.
     
    guac_user_blob_handlerblob_handler
     Handler for blob events sent by the Guacamole web-client.
     
    guac_user_end_handlerend_handler
     Handler for stream end events sent by the Guacamole web-client.
     
    +

    Detailed Description

    +

    Represents a single stream within the Guacamole protocol.

    +

    Field Documentation

    + +

    ◆ ack_handler

    + +
    +
    + + + + +
    guac_user_ack_handler* guac_stream::ack_handler
    +
    + +

    Handler for ack events sent by the Guacamole web-client.

    +

    The handler takes a guac_stream which contains the stream index and will persist through the duration of the transfer, a string containing the error or status message, and a status code.

    +

    Example:

    int ack_handler(guac_user* user, guac_stream* stream,
    +
    char* error, guac_protocol_status status);
    +
    +
    int some_function(guac_user* user) {
    +
    + + +
    + +
    stream, "text/plain");
    +
    +
    }
    +
    guac_protocol_status
    Set of all possible status codes returned by protocol operations.
    Definition protocol-types.h:44
    +
    int guac_protocol_send_clipboard(guac_socket *socket, const guac_stream *stream, const char *mimetype)
    Sends a clipboard instruction over the given guac_socket connection.
    +
    Represents a single stream within the Guacamole protocol.
    Definition stream.h:32
    +
    guac_user_ack_handler * ack_handler
    Handler for ack events sent by the Guacamole web-client.
    Definition stream.h:67
    +
    Representation of a physical connection within a larger logical connection which may be shared.
    Definition user.h:115
    +
    guac_socket * socket
    This user's actual socket.
    Definition user.h:127
    +
    guac_stream * guac_user_alloc_stream(guac_user *user)
    Allocates a new stream.
    +
    +
    +
    + +

    ◆ blob_handler

    + +
    +
    + + + + +
    guac_user_blob_handler* guac_stream::blob_handler
    +
    + +

    Handler for blob events sent by the Guacamole web-client.

    +

    The handler takes a guac_stream which contains the stream index and will persist through the duration of the transfer, an arbitrary buffer containing the blob, and the length of the blob.

    +

    Example:

    int blob_handler(guac_user* user, guac_stream* stream,
    +
    void* data, int length);
    +
    +
    int my_clipboard_handler(guac_user* user, guac_stream* stream,
    +
    char* mimetype) {
    + +
    }
    +
    guac_user_blob_handler * blob_handler
    Handler for blob events sent by the Guacamole web-client.
    Definition stream.h:87
    +
    void * data
    Arbitrary data associated with this stream.
    Definition stream.h:42
    +
    +
    +
    + +

    ◆ end_handler

    + +
    +
    + + + + +
    guac_user_end_handler* guac_stream::end_handler
    +
    + +

    Handler for stream end events sent by the Guacamole web-client.

    +

    The handler takes only a guac_stream which contains the stream index. This guac_stream will be disposed of immediately after this event is finished.

    +

    Example:

    int end_handler(guac_user* user, guac_stream* stream);
    +
    +
    int my_clipboard_handler(guac_user* user, guac_stream* stream,
    +
    char* mimetype) {
    + +
    }
    +
    guac_user_end_handler * end_handler
    Handler for stream end events sent by the Guacamole web-client.
    Definition stream.h:106
    +
    +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/doc/1.5.5/libguac/structguac__user.html b/doc/1.5.5/libguac/structguac__user.html new file mode 100644 index 000000000..a734d6989 --- /dev/null +++ b/doc/1.5.5/libguac/structguac__user.html @@ -0,0 +1,668 @@ + + + + + + + +libguac: guac_user Struct Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    + +
    guac_user Struct Reference
    +
    +
    + +

    Representation of a physical connection within a larger logical connection which may be shared. + More...

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Data Fields

    +guac_clientclient
     The guac_client to which this user belongs.
     
    guac_socketsocket
     This user's actual socket.
     
    char * user_id
     The unique identifier allocated for this user, which may be used within the Guacamole protocol to refer to this user.
     
    int owner
     Non-zero if this user is the owner of the associated connection, zero otherwise.
     
    int active
     Non-zero if this user is active (connected), and zero otherwise.
     
    +guac_timestamp last_received_timestamp
     The time (in milliseconds) of receipt of the last sync message from the user.
     
    int last_frame_duration
     The duration of the last frame rendered by the user, in milliseconds.
     
    +int processing_lag
     The overall lag experienced by the user relative to the stream of frames, roughly excluding network lag.
     
    +guac_user_info info
     Information structure containing properties exposed by the remote user during the initial handshake process.
     
    +void * data
     Arbitrary user-specific data.
     
    guac_user_mouse_handlermouse_handler
     Handler for mouse events sent by the Gaucamole web-client.
     
    guac_user_key_handlerkey_handler
     Handler for key events sent by the Guacamole web-client.
     
    guac_user_clipboard_handlerclipboard_handler
     Handler for clipboard events sent by the Guacamole web-client.
     
    guac_user_size_handlersize_handler
     Handler for size events sent by the Guacamole web-client.
     
    guac_user_file_handlerfile_handler
     Handler for file events sent by the Guacamole web-client.
     
    guac_user_pipe_handlerpipe_handler
     Handler for pipe events sent by the Guacamole web-client.
     
    guac_user_ack_handlerack_handler
     Handler for ack events sent by the Guacamole web-client.
     
    guac_user_blob_handlerblob_handler
     Handler for blob events sent by the Guacamole web-client.
     
    guac_user_end_handlerend_handler
     Handler for stream end events sent by the Guacamole web-client.
     
    guac_user_sync_handlersync_handler
     Handler for sync events sent by the Guacamole web-client.
     
    guac_user_leave_handlerleave_handler
     Handler for leave events fired by the guac_client when a guac_user is leaving an active connection.
     
    guac_user_get_handlerget_handler
     Handler for get events sent by the Guacamole web-client.
     
    guac_user_put_handlerput_handler
     Handler for put events sent by the Guacamole web-client.
     
    guac_user_audio_handleraudio_handler
     Handler for audio events sent by the Guacamole web-client.
     
    guac_user_argv_handlerargv_handler
     Handler for argv events (updates to the connection parameters of an in-progress connection) sent by the Guacamole web-client.
     
    guac_user_touch_handlertouch_handler
     Handler for touch events sent by the Guacamole web-client.
     
    +

    Detailed Description

    +

    Representation of a physical connection within a larger logical connection which may be shared.

    +

    Logical connections are represented by guac_client.

    +

    Field Documentation

    + +

    ◆ ack_handler

    + +
    +
    + + + + +
    guac_user_ack_handler* guac_user::ack_handler
    +
    + +

    Handler for ack events sent by the Guacamole web-client.

    +

    The handler takes a guac_stream which contains the stream index and will persist through the duration of the transfer, a string containing the error or status message, and a status code.

    +

    Example:

    int ack_handler(guac_user* user, guac_stream* stream,
    +
    char* error, guac_protocol_status status);
    +
    +
    int guac_user_init(guac_user* user, int argc, char** argv) {
    + +
    }
    +
    guac_protocol_status
    Set of all possible status codes returned by protocol operations.
    Definition protocol-types.h:44
    +
    Represents a single stream within the Guacamole protocol.
    Definition stream.h:32
    +
    Representation of a physical connection within a larger logical connection which may be shared.
    Definition user.h:115
    +
    guac_user_ack_handler * ack_handler
    Handler for ack events sent by the Guacamole web-client.
    Definition user.h:360
    +
    +
    +
    + +

    ◆ active

    + +
    +
    + + + + +
    int guac_user::active
    +
    + +

    Non-zero if this user is active (connected), and zero otherwise.

    +

    When the user is created, this will be set to a non-zero value. If an event occurs which requires that the user disconnect, or the user has disconnected, this will be reset to zero.

    + +
    +
    + +

    ◆ argv_handler

    + +
    +
    + + + + +
    guac_user_argv_handler* guac_user::argv_handler
    +
    + +

    Handler for argv events (updates to the connection parameters of an in-progress connection) sent by the Guacamole web-client.

    +

    The handler takes a guac_stream which contains the stream index and will persist through the duration of the transfer, the mimetype of the data being transferred, and the argument (connection parameter) name.

    +

    Example:

    int argv_handler(guac_user* user, guac_stream* stream,
    +
    char* mimetype, char* name);
    +
    +
    int guac_user_init(guac_user* user, int argc, char** argv) {
    + +
    }
    +
    guac_user_argv_handler * argv_handler
    Handler for argv events (updates to the connection parameters of an in-progress connection) sent by t...
    Definition user.h:518
    +
    +
    +
    + +

    ◆ audio_handler

    + +
    +
    + + + + +
    guac_user_audio_handler* guac_user::audio_handler
    +
    + +

    Handler for audio events sent by the Guacamole web-client.

    +

    This handler will be called whenever the web-client wishes to send a continuous stream of audio data from some arbitrary source (a microphone, for example).

    +

    The handler takes a guac_stream, which contains the stream index and will persist through the duration of the transfer, and the mimetype of the data being transferred.

    +

    Example:

    int audio_handler(guac_user* user, guac_stream* stream,
    +
    char* mimetype);
    +
    +
    int guac_user_init(guac_user* user, int argc, char** argv) {
    + +
    }
    +
    guac_user_audio_handler * audio_handler
    Handler for audio events sent by the Guacamole web-client.
    Definition user.h:497
    +
    +
    +
    + +

    ◆ blob_handler

    + +
    +
    + + + + +
    guac_user_blob_handler* guac_user::blob_handler
    +
    + +

    Handler for blob events sent by the Guacamole web-client.

    +

    The handler takes a guac_stream which contains the stream index and will persist through the duration of the transfer, an arbitrary buffer containing the blob, and the length of the blob.

    +

    Example:

    int blob_handler(guac_user* user, guac_stream* stream,
    +
    void* data, int length);
    +
    +
    int guac_user_init(guac_user* user, int argc, char** argv) {
    + +
    }
    +
    guac_user_blob_handler * blob_handler
    Handler for blob events sent by the Guacamole web-client.
    Definition user.h:379
    +
    void * data
    Arbitrary user-specific data.
    Definition user.h:220
    +
    +
    +
    + +

    ◆ clipboard_handler

    + +
    +
    + + + + +
    guac_user_clipboard_handler* guac_user::clipboard_handler
    +
    + +

    Handler for clipboard events sent by the Guacamole web-client.

    +

    This handler will be called whenever the web-client sets the data of the clipboard.

    +

    The handler takes a guac_stream, which contains the stream index and will persist through the duration of the transfer, and the mimetype of the data being transferred.

    +

    Example:

    +
    char* mimetype);
    +
    +
    int guac_user_init(guac_user* user, int argc, char** argv) {
    + +
    }
    +
    guac_user_clipboard_handler * clipboard_handler
    Handler for clipboard events sent by the Guacamole web-client.
    Definition user.h:286
    +
    +
    +
    + +

    ◆ end_handler

    + +
    +
    + + + + +
    guac_user_end_handler* guac_user::end_handler
    +
    + +

    Handler for stream end events sent by the Guacamole web-client.

    +

    The handler takes only a guac_stream which contains the stream index. This guac_stream will be disposed of immediately after this event is finished.

    +

    Example:

    int end_handler(guac_user* user, guac_stream* stream);
    +
    +
    int guac_user_init(guac_user* user, int argc, char** argv) {
    + +
    }
    +
    guac_user_end_handler * end_handler
    Handler for stream end events sent by the Guacamole web-client.
    Definition user.h:397
    +
    +
    +
    + +

    ◆ file_handler

    + +
    +
    + + + + +
    guac_user_file_handler* guac_user::file_handler
    +
    + +

    Handler for file events sent by the Guacamole web-client.

    +

    The handler takes a guac_stream which contains the stream index and will persist through the duration of the transfer, the mimetype of the file being transferred, and the filename.

    +

    Example:

    int file_handler(guac_user* user, guac_stream* stream,
    +
    char* mimetype, char* filename);
    +
    +
    int guac_user_init(guac_user* user, int argc, char** argv) {
    + +
    }
    +
    guac_user_file_handler * file_handler
    Handler for file events sent by the Guacamole web-client.
    Definition user.h:322
    +
    +
    +
    + +

    ◆ get_handler

    + +
    +
    + + + + +
    guac_user_get_handler* guac_user::get_handler
    +
    + +

    Handler for get events sent by the Guacamole web-client.

    +

    The handler takes a guac_object, containing the object index which will persist through the duration of the transfer, and the name of the stream being requested. It is up to the get handler to create the required body stream.

    +

    Example:

    int get_handler(guac_user* user, guac_object* object,
    +
    char* name);
    +
    +
    int guac_user_init(guac_user* user, int argc, char** argv) {
    + +
    }
    +
    Represents a single object within the Guacamole protocol.
    Definition object.h:32
    +
    guac_user_get_handler * get_handler
    Handler for get events sent by the Guacamole web-client.
    Definition user.h:455
    +
    +
    +
    + +

    ◆ key_handler

    + +
    +
    + + + + +
    guac_user_key_handler* guac_user::key_handler
    +
    + +

    Handler for key events sent by the Guacamole web-client.

    +

    The handler takes the integer X11 keysym associated with the key being pressed/released, and an integer representing whether the key is being pressed (1) or released (0).

    +

    Example:

    int key_handler(guac_user* user, int keysym, int pressed);
    +
    +
    int guac_user_init(guac_user* user, int argc, char** argv) {
    + +
    }
    +
    guac_user_key_handler * key_handler
    Handler for key events sent by the Guacamole web-client.
    Definition user.h:265
    +
    +
    +
    + +

    ◆ last_frame_duration

    + +
    +
    + + + + +
    int guac_user::last_frame_duration
    +
    + +

    The duration of the last frame rendered by the user, in milliseconds.

    +

    This duration will include network and processing lag, and thus should be slightly higher than the true frame duration.

    + +
    +
    + +

    ◆ leave_handler

    + +
    +
    + + + + +
    guac_user_leave_handler* guac_user::leave_handler
    +
    + +

    Handler for leave events fired by the guac_client when a guac_user is leaving an active connection.

    +

    The handler takes only a guac_user which will be the guac_user that left the connection. This guac_user will be disposed of immediately after this event is finished.

    +

    Example:

    +
    +
    int my_join_handler(guac_user* user, int argv, char** argv) {
    + +
    }
    +
    guac_user_leave_handler * leave_handler
    Handler for leave events fired by the guac_client when a guac_user is leaving an active connection.
    Definition user.h:435
    +
    +
    +
    + +

    ◆ mouse_handler

    + +
    +
    + + + + +
    guac_user_mouse_handler* guac_user::mouse_handler
    +
    + +

    Handler for mouse events sent by the Gaucamole web-client.

    +

    The handler takes the integer mouse X and Y coordinates, as well as a button mask containing the bitwise OR of all button values currently being pressed. Those values are:

    + + + + + + + + + + + + + +
    Button Value
    Left 1
    Middle 2
    Right 4
    Scrollwheel Up 8
    Scrollwheel Down16
    +

    Example:

    int mouse_handler(guac_user* user, int x, int y, int button_mask);
    +
    +
    int guac_user_init(guac_user* user, int argc, char** argv) {
    + +
    }
    +
    guac_user_mouse_handler * mouse_handler
    Handler for mouse events sent by the Gaucamole web-client.
    Definition user.h:247
    +
    +
    +
    + +

    ◆ owner

    + +
    +
    + + + + +
    int guac_user::owner
    +
    + +

    Non-zero if this user is the owner of the associated connection, zero otherwise.

    +

    The owner is the user which created the connection.

    + +
    +
    + +

    ◆ pipe_handler

    + +
    +
    + + + + +
    guac_user_pipe_handler* guac_user::pipe_handler
    +
    + +

    Handler for pipe events sent by the Guacamole web-client.

    +

    The handler takes a guac_stream which contains the stream index and will persist through the duration of the transfer, the mimetype of the data being transferred, and the pipe name.

    +

    Example:

    int pipe_handler(guac_user* user, guac_stream* stream,
    +
    char* mimetype, char* name);
    +
    +
    int guac_user_init(guac_user* user, int argc, char** argv) {
    + +
    }
    +
    guac_user_pipe_handler * pipe_handler
    Handler for pipe events sent by the Guacamole web-client.
    Definition user.h:341
    +
    +
    +
    + +

    ◆ put_handler

    + +
    +
    + + + + +
    guac_user_put_handler* guac_user::put_handler
    +
    + +

    Handler for put events sent by the Guacamole web-client.

    +

    The handler takes a guac_object and guac_stream, which each contain their respective indices which will persist through the duration of the transfer, the mimetype of the data being transferred, and the name of the stream within the object being written to.

    +

    Example:

    int put_handler(guac_user* user, guac_object* object,
    +
    guac_stream* stream, char* mimetype, char* name);
    +
    +
    int guac_user_init(guac_user* user, int argc, char** argv) {
    + +
    }
    +
    guac_user_put_handler * put_handler
    Handler for put events sent by the Guacamole web-client.
    Definition user.h:475
    +
    +
    +
    + +

    ◆ size_handler

    + +
    +
    + + + + +
    guac_user_size_handler* guac_user::size_handler
    +
    + +

    Handler for size events sent by the Guacamole web-client.

    +

    The handler takes an integer width and integer height, representing the current visible screen area of the client.

    +

    Example:

    int size_handler(guac_user* user, int width, int height);
    +
    +
    int guac_user_init(guac_user* user, int argc, char** argv) {
    + +
    }
    +
    guac_user_size_handler * size_handler
    Handler for size events sent by the Guacamole web-client.
    Definition user.h:303
    +
    +
    +
    + +

    ◆ socket

    + +
    +
    + + + + +
    guac_socket* guac_user::socket
    +
    + +

    This user's actual socket.

    +

    Data written to this socket will be received by this user alone, and data sent by this specific user will be received by this socket.

    + +
    +
    + +

    ◆ sync_handler

    + +
    +
    + + + + +
    guac_user_sync_handler* guac_user::sync_handler
    +
    + +

    Handler for sync events sent by the Guacamole web-client.

    +

    Sync events are used to track per-user latency.

    +

    The handler takes only a guac_timestamp which contains the timestamp received from the user. Latency can be determined by comparing this timestamp against the last_sent_timestamp of guac_client.

    +

    Example:

    int sync_handler(guac_user* user, guac_timestamp timestamp);
    +
    +
    int guac_user_init(guac_user* user, int argc, char** argv) {
    + +
    }
    +
    guac_user_sync_handler * sync_handler
    Handler for sync events sent by the Guacamole web-client.
    Definition user.h:416
    +
    int64_t guac_timestamp
    An arbitrary timestamp denoting a relative time value in milliseconds.
    Definition timestamp-types.h:34
    +
    +
    +
    + +

    ◆ touch_handler

    + +
    +
    + + + + +
    guac_user_touch_handler* guac_user::touch_handler
    +
    + +

    Handler for touch events sent by the Guacamole web-client.

    +

    The handler takes the integer X and Y coordinates representing the center of the touch contact, as well as several parameters describing the general shape of the contact area. The force parameter indicates the amount of force exerted by the contact, including whether the contact has been lifted.

    +

    Example:

    int touch_handler(guac_user* user, int id, int x, int y,
    +
    int x_radius, int y_radius, double angle, double force);
    +
    +
    int guac_user_init(guac_user* user, int argc, char** argv) {
    + +
    }
    +
    guac_user_touch_handler * touch_handler
    Handler for touch events sent by the Guacamole web-client.
    Definition user.h:539
    +
    +
    +
    + +

    ◆ user_id

    + +
    +
    + + + + +
    char* guac_user::user_id
    +
    + +

    The unique identifier allocated for this user, which may be used within the Guacamole protocol to refer to this user.

    +

    This identifier is guaranteed to be unique from all existing connections and users, and will not collide with any available protocol names.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/doc/1.5.5/libguac/structguac__user__info.html b/doc/1.5.5/libguac/structguac__user__info.html new file mode 100644 index 000000000..d8181a148 --- /dev/null +++ b/doc/1.5.5/libguac/structguac__user__info.html @@ -0,0 +1,262 @@ + + + + + + + +libguac: guac_user_info Struct Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    + +
    guac_user_info Struct Reference
    +
    +
    + +

    Information exposed by the remote client during the connection handshake which can be used by a client plugin. + More...

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Data Fields

    int optimal_width
     The number of pixels the remote client requests for the display width.
     
    int optimal_height
     The number of pixels the remote client requests for the display height.
     
    const char ** audio_mimetypes
     NULL-terminated array of client-supported audio mimetypes.
     
    const char ** video_mimetypes
     NULL-terminated array of client-supported video mimetypes.
     
    const char ** image_mimetypes
     NULL-terminated array of client-supported image mimetypes.
     
    int optimal_resolution
     The DPI of the physical remote display if configured for the optimal width/height combination described here.
     
    const char * timezone
     The timezone of the remote system.
     
    +guac_protocol_version protocol_version
     The Guacamole protocol version that the remote system supports, allowing for feature support to be negotiated between client and server.
     
    const char * name
     The human-readable name of the Guacamole user, supplied by the client during the handshake.
     
    +

    Detailed Description

    +

    Information exposed by the remote client during the connection handshake which can be used by a client plugin.

    +

    Field Documentation

    + +

    ◆ audio_mimetypes

    + +
    +
    + + + + +
    const char** guac_user_info::audio_mimetypes
    +
    + +

    NULL-terminated array of client-supported audio mimetypes.

    +

    If the client does not support audio at all, this will be NULL.

    + +
    +
    + +

    ◆ image_mimetypes

    + +
    +
    + + + + +
    const char** guac_user_info::image_mimetypes
    +
    + +

    NULL-terminated array of client-supported image mimetypes.

    +

    Though all supported image mimetypes will be listed here, it can be safely assumed that all clients will support at least "image/png" and "image/jpeg".

    + +
    +
    + +

    ◆ name

    + +
    +
    + + + + +
    const char* guac_user_info::name
    +
    + +

    The human-readable name of the Guacamole user, supplied by the client during the handshake.

    +

    This is an arbitrary value, with no requirements or constraints, including that it need not uniquely identify the user. If the client does not provide a name then this will be NULL.

    + +
    +
    + +

    ◆ optimal_height

    + +
    +
    + + + + +
    int guac_user_info::optimal_height
    +
    + +

    The number of pixels the remote client requests for the display height.

    +

    This need not be honored by a client plugin implementation, but if the underlying protocol of the client plugin supports dynamic sizing of the screen, honoring the display size request is recommended.

    + +
    +
    + +

    ◆ optimal_resolution

    + +
    +
    + + + + +
    int guac_user_info::optimal_resolution
    +
    + +

    The DPI of the physical remote display if configured for the optimal width/height combination described here.

    +

    This need not be honored by a client plugin implementation, but if the underlying protocol of the client plugin supports dynamic sizing of the screen, honoring the stated resolution of the display size request is recommended.

    + +
    +
    + +

    ◆ optimal_width

    + +
    +
    + + + + +
    int guac_user_info::optimal_width
    +
    + +

    The number of pixels the remote client requests for the display width.

    +

    This need not be honored by a client plugin implementation, but if the underlying protocol of the client plugin supports dynamic sizing of the screen, honoring the display size request is recommended.

    + +
    +
    + +

    ◆ timezone

    + +
    +
    + + + + +
    const char* guac_user_info::timezone
    +
    + +

    The timezone of the remote system.

    +

    If the client does not provide a specific timezone then this will be NULL. The format of the timezone is the standard tzdata naming convention.

    + +
    +
    + +

    ◆ video_mimetypes

    + +
    +
    + + + + +
    const char** guac_user_info::video_mimetypes
    +
    + +

    NULL-terminated array of client-supported video mimetypes.

    +

    If the client does not support video at all, this will be NULL.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/doc/1.5.5/libguac/sync_off.png b/doc/1.5.5/libguac/sync_off.png new file mode 100644 index 0000000000000000000000000000000000000000..3b443fc62892114406e3d399421b2a881b897acc GIT binary patch literal 853 zcmV-b1FHOqP)oT|#XixUYy%lpuf3i8{fX!o zUyDD0jOrAiT^tq>fLSOOABs-#u{dV^F$b{L9&!2=9&RmV;;8s^x&UqB$PCj4FdKbh zoB1WTskPUPu05XzFbA}=KZ-GP1fPpAfSs>6AHb12UlR%-i&uOlTpFNS7{jm@mkU1V zh`nrXr~+^lsV-s1dkZOaI|kYyVj3WBpPCY{n~yd%u%e+d=f%`N0FItMPtdgBb@py; zq@v6NVArhyTC7)ULw-Jy8y42S1~4n(3LkrW8mW(F-4oXUP3E`e#g**YyqI7h-J2zK zK{m9##m4ri!7N>CqQqCcnI3hqo1I;Yh&QLNY4T`*ptiQGozK>FF$!$+84Z`xwmeMh zJ0WT+OH$WYFALEaGj2_l+#DC3t7_S`vHpSivNeFbP6+r50cO8iu)`7i%Z4BTPh@_m3Tk!nAm^)5Bqnr%Ov|Baunj#&RPtRuK& z4RGz|D5HNrW83-#ydk}tVKJrNmyYt-sTxLGlJY5nc&Re zU4SgHNPx8~Yxwr$bsju?4q&%T1874xxzq+_%?h8_ofw~(bld=o3iC)LUNR*BY%c0y zWd_jX{Y8`l%z+ol1$@Qa?Cy!(0CVIEeYpKZ`(9{z>3$CIe;pJDQk$m3p}$>xBm4lb zKo{4S)`wdU9Ba9jJbVJ0C=SOefZe%d$8=2r={nu<_^a3~>c#t_U6dye5)JrR(_a^E f@}b6j1K9lwFJq@>o)+Ry00000NkvXXu0mjfWa5j* literal 0 HcmV?d00001 diff --git a/doc/1.5.5/libguac/sync_on.png b/doc/1.5.5/libguac/sync_on.png new file mode 100644 index 0000000000000000000000000000000000000000..e08320fb64e6fa33b573005ed6d8fe294e19db76 GIT binary patch literal 845 zcmV-T1G4;yP)Y;xxyHF2B5Wzm| zOOGupOTn@c(JmBOl)e;XMNnZuiTJP>rM8<|Q`7I_))aP?*T)ow&n59{}X4$3Goat zgjs?*aasfbrokzG5cT4K=uG`E14xZl@z)F={P0Y^?$4t z>v!teRnNZym<6h{7sLyF1V0HsfEl+l6TrZpsfr1}luH~F7L}ktXu|*uVX^RG$L0`K zWs3j|0tIvVe(N%_?2{(iCPFGf#B6Hjy6o&}D$A%W%jfO8_W%ZO#-mh}EM$LMn7joJ z05dHr!5Y92g+31l<%i1(=L1a1pXX+OYnalY>31V4K}BjyRe3)9n#;-cCVRD_IG1fT zOKGeNY8q;TL@K{dj@D^scf&VCs*-Jb>8b>|`b*osv52-!A?BpbYtTQBns5EAU**$m zSnVSm(teh>tQi*S*A>#ySc=n;`BHz`DuG4&g4Kf8lLhca+zvZ7t7RflD6-i-mcK=M z!=^P$*u2)bkY5asG4gsss!Hn%u~>}kIW`vMs%lJLH+u*9<4PaV_c6U`KqWXQH%+Nu zTv41O(^ZVi@qhjQdG!fbZw&y+2o!iYymO^?ud3{P*HdoX83YV*Uu_HB=?U&W9%AU# z80}k1SS-CXTU7dcQlsm<^oYLxVSseqY6NO}dc`Nj?8vrhNuCdm@^{a3AQ_>6myOj+ z`1RsLUXF|dm|3k7s2jD(B{rzE>WI2scH8i1;=O5Cc9xB3^aJk%fQjqsu+kH#0=_5a z0nCE8@dbQa-|YIuUVvG0L_IwHMEhOj$Mj4Uq05 X8=0q~qBNan00000NkvXXu0mjfptF>5 literal 0 HcmV?d00001 diff --git a/doc/1.5.5/libguac/tab_a.png b/doc/1.5.5/libguac/tab_a.png new file mode 100644 index 0000000000000000000000000000000000000000..3b725c41c5a527a3a3e40097077d0e206a681247 GIT binary patch literal 142 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QlXwMjv*C{Z|8b*H5dputLHD# z=<0|*y7z(Vor?d;H&?EG&cXR}?!j-Lm&u1OOI7AIF5&c)RFE;&p0MYK>*Kl@eiymD r@|NpwKX@^z+;{u_Z~trSBfrMKa%3`zocFjEXaR$#tDnm{r-UW|TZ1%4 literal 0 HcmV?d00001 diff --git a/doc/1.5.5/libguac/tab_ad.png b/doc/1.5.5/libguac/tab_ad.png new file mode 100644 index 0000000000000000000000000000000000000000..e34850acfc24be58da6d2fd1ccc6b29cc84fe34d GIT binary patch literal 135 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QhuH;jv*C{Z|5d*H3V=pKi{In zd2jxLclDRPylmD}^l7{QOtL{vUjO{-WqItb5sQp2h-99b8^^Scr-=2mblCdZuUm?4 jzOJvgvt3{(cjKLW5(A@0qPS@<&}0TrS3j3^P6y&q2{!U5bk+Tso_B!YCpDh>v z{CM*1U8YvQRyBUHt^Ju0W_sq-?;9@_4equ-bavTs=gk796zopr0EBT&m;e9( literal 0 HcmV?d00001 diff --git a/doc/1.5.5/libguac/tab_s.png b/doc/1.5.5/libguac/tab_s.png new file mode 100644 index 0000000000000000000000000000000000000000..ab478c95b67371d700a20869f7de1ddd73522d50 GIT binary patch literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QuUrLjv*C{Z|^p8HaRdjTwH7) zC?wLlL}}I{)n%R&r+1}IGmDnq;&J#%V6)9VsYhS`O^BVBQlxOUep0c$RENLq#g8A$ z)z7%K_bI&n@J+X_=x}fJoEKed-$<>=ZI-;YrdjIl`U`uzuDWSP?o#Dmo{%SgM#oan kX~E1%D-|#H#QbHoIja2U-MgvsK&LQxy85}Sb4q9e0Efg%P5=M^ literal 0 HcmV?d00001 diff --git a/doc/1.5.5/libguac/tab_sd.png b/doc/1.5.5/libguac/tab_sd.png new file mode 100644 index 0000000000000000000000000000000000000000..757a565ced4730f85c833fb2547d8e199ae68f19 GIT binary patch literal 188 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!Qq7(&jv*C{Z|_!fH5o7*c=%9% zcILh!EA=pAQKdx-Cdiev=v{eg{8Ht<{e8_NAN~b=)%W>-WDCE0PyDHGemi$BoXwcK z{>e9^za6*c1ilttWw&V+U;WCPlV9{LdC~Ey%_H(qj`xgfES(4Yz5jSTZfCt`4E$0YRsR*S^mTCR^;V&sxC8{l_Cp7w8-YPgg&ebxsLQ00$vXK>z>% literal 0 HcmV?d00001 diff --git a/doc/1.5.5/libguac/tabs.css b/doc/1.5.5/libguac/tabs.css new file mode 100644 index 000000000..fe4854aa5 --- /dev/null +++ b/doc/1.5.5/libguac/tabs.css @@ -0,0 +1 @@ +.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.main-menu-btn{position:relative;display:inline-block;width:36px;height:36px;text-indent:36px;margin-left:8px;white-space:nowrap;overflow:hidden;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0)}.main-menu-btn-icon,.main-menu-btn-icon:before,.main-menu-btn-icon:after{position:absolute;top:50%;left:2px;height:2px;width:24px;background:var(--nav-menu-button-color);-webkit-transition:all .25s;transition:all .25s}.main-menu-btn-icon:before{content:'';top:-7px;left:0}.main-menu-btn-icon:after{content:'';top:7px;left:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon{height:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:before{top:0;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:after{top:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}#main-menu-state{position:absolute;width:1px;height:1px;margin:-1px;border:0;padding:0;overflow:hidden;clip:rect(1px,1px,1px,1px)}#main-menu-state:not(:checked) ~ #main-menu{display:none}#main-menu-state:checked ~ #main-menu{display:block}@media(min-width:768px){.main-menu-btn{position:absolute;top:-99999px}#main-menu-state:not(:checked) ~ #main-menu{display:block}}.sm-dox{background-image:var(--nav-gradient-image)}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:var(--font-family-nav);font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:var(--nav-text-normal-shadow);color:var(--nav-text-normal-color);outline:0}.sm-dox a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:var(--nav-menu-toggle-color);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a span.sub-arrow:before{display:block;content:'+'}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:var(--nav-menu-background-color)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:var(--nav-menu-background-color);background-image:none}.sm-dox ul a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:var(--nav-gradient-image);line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:var(--nav-text-normal-color) transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:var(--nav-separator-image);background-repeat:no-repeat;background-position:right;-moz-border-radius:0 !important;-webkit-border-radius:0;border-radius:0 !important}.sm-dox a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox a:hover span.sub-arrow{border-color:var(--nav-text-hover-color) transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent var(--nav-menu-background-color) transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:var(--nav-menu-background-color);-moz-border-radius:5px !important;-webkit-border-radius:5px;border-radius:5px !important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent var(--nav-menu-foreground-color);border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:var(--nav-menu-foreground-color);background-image:none;border:0 !important}.sm-dox ul a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent var(--nav-text-hover-color)}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:var(--nav-menu-background-color);height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent var(--nav-menu-foreground-color) transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:var(--nav-menu-foreground-color) transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:var(--nav-gradient-image)}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:var(--nav-menu-background-color)}} \ No newline at end of file diff --git a/doc/1.5.5/libguac/timestamp-types_8h.html b/doc/1.5.5/libguac/timestamp-types_8h.html new file mode 100644 index 000000000..8f88657e4 --- /dev/null +++ b/doc/1.5.5/libguac/timestamp-types_8h.html @@ -0,0 +1,104 @@ + + + + + + + +libguac: guacamole/timestamp-types.h File Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    timestamp-types.h File Reference
    +
    +
    + +

    Type definitions related to Guacamole protocol timestamps. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Typedefs

    +typedef int64_t guac_timestamp
     An arbitrary timestamp denoting a relative time value in milliseconds.
     
    +

    Detailed Description

    +

    Type definitions related to Guacamole protocol timestamps.

    +
    + + + + diff --git a/doc/1.5.5/libguac/timestamp-types_8h_source.html b/doc/1.5.5/libguac/timestamp-types_8h_source.html new file mode 100644 index 000000000..5c13ab7b7 --- /dev/null +++ b/doc/1.5.5/libguac/timestamp-types_8h_source.html @@ -0,0 +1,121 @@ + + + + + + + +libguac: guacamole/timestamp-types.h Source File + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    timestamp-types.h
    +
    +
    +Go to the documentation of this file.
    1/*
    +
    2 * Licensed to the Apache Software Foundation (ASF) under one
    +
    3 * or more contributor license agreements. See the NOTICE file
    +
    4 * distributed with this work for additional information
    +
    5 * regarding copyright ownership. The ASF licenses this file
    +
    6 * to you under the Apache License, Version 2.0 (the
    +
    7 * "License"); you may not use this file except in compliance
    +
    8 * with the License. You may obtain a copy of the License at
    +
    9 *
    +
    10 * http://www.apache.org/licenses/LICENSE-2.0
    +
    11 *
    +
    12 * Unless required by applicable law or agreed to in writing,
    +
    13 * software distributed under the License is distributed on an
    +
    14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    15 * KIND, either express or implied. See the License for the
    +
    16 * specific language governing permissions and limitations
    +
    17 * under the License.
    +
    18 */
    +
    19
    +
    20#ifndef _GUAC_TIMESTAMP_TYPES_H
    +
    21#define _GUAC_TIMESTAMP_TYPES_H
    +
    22
    +
    29#include <stdint.h>
    +
    30
    +
    34typedef int64_t guac_timestamp;
    +
    35
    +
    36#endif
    +
    37
    +
    int64_t guac_timestamp
    An arbitrary timestamp denoting a relative time value in milliseconds.
    Definition timestamp-types.h:34
    +
    + + + + diff --git a/doc/1.5.5/libguac/timestamp_8h.html b/doc/1.5.5/libguac/timestamp_8h.html new file mode 100644 index 000000000..d0ae74a68 --- /dev/null +++ b/doc/1.5.5/libguac/timestamp_8h.html @@ -0,0 +1,153 @@ + + + + + + + +libguac: guacamole/timestamp.h File Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    timestamp.h File Reference
    +
    +
    + +

    Provides functions and structures for creating timestamps. +More...

    + +

    Go to the source code of this file.

    + + + + + + + + +

    +Functions

    guac_timestamp guac_timestamp_current ()
     Returns an arbitrary timestamp.
     
    void guac_timestamp_msleep (int duration)
     Sleeps for the given number of milliseconds.
     
    +

    Detailed Description

    +

    Provides functions and structures for creating timestamps.

    +

    Function Documentation

    + +

    ◆ guac_timestamp_current()

    + +
    +
    + + + + + + + +
    guac_timestamp guac_timestamp_current ()
    +
    + +

    Returns an arbitrary timestamp.

    +

    The difference between return values of any two calls is equal to the amount of time in milliseconds between those calls. The return value from a single call will not have any useful (or defined) meaning.

    +
    Returns
    An arbitrary millisecond timestamp.
    + +
    +
    + +

    ◆ guac_timestamp_msleep()

    + +
    +
    + + + + + + + +
    void guac_timestamp_msleep (int duration)
    +
    + +

    Sleeps for the given number of milliseconds.

    +
    Parameters
    + + +
    durationThe number of milliseconds to sleep.
    +
    +
    + +
    +
    +
    + + + + diff --git a/doc/1.5.5/libguac/timestamp_8h_source.html b/doc/1.5.5/libguac/timestamp_8h_source.html new file mode 100644 index 000000000..71c7d3dc1 --- /dev/null +++ b/doc/1.5.5/libguac/timestamp_8h_source.html @@ -0,0 +1,126 @@ + + + + + + + +libguac: guacamole/timestamp.h Source File + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    timestamp.h
    +
    +
    +Go to the documentation of this file.
    1/*
    +
    2 * Licensed to the Apache Software Foundation (ASF) under one
    +
    3 * or more contributor license agreements. See the NOTICE file
    +
    4 * distributed with this work for additional information
    +
    5 * regarding copyright ownership. The ASF licenses this file
    +
    6 * to you under the Apache License, Version 2.0 (the
    +
    7 * "License"); you may not use this file except in compliance
    +
    8 * with the License. You may obtain a copy of the License at
    +
    9 *
    +
    10 * http://www.apache.org/licenses/LICENSE-2.0
    +
    11 *
    +
    12 * Unless required by applicable law or agreed to in writing,
    +
    13 * software distributed under the License is distributed on an
    +
    14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    15 * KIND, either express or implied. See the License for the
    +
    16 * specific language governing permissions and limitations
    +
    17 * under the License.
    +
    18 */
    +
    19
    +
    20#ifndef _GUAC_TIMESTAMP_H
    +
    21#define _GUAC_TIMESTAMP_H
    +
    22
    +
    29#include "timestamp-types.h"
    +
    30
    + +
    41
    +
    48void guac_timestamp_msleep(int duration);
    +
    49
    +
    50#endif
    +
    51
    +
    Type definitions related to Guacamole protocol timestamps.
    +
    int64_t guac_timestamp
    An arbitrary timestamp denoting a relative time value in milliseconds.
    Definition timestamp-types.h:34
    +
    void guac_timestamp_msleep(int duration)
    Sleeps for the given number of milliseconds.
    +
    guac_timestamp guac_timestamp_current()
    Returns an arbitrary timestamp.
    +
    + + + + diff --git a/doc/1.5.5/libguac/unicode_8h.html b/doc/1.5.5/libguac/unicode_8h.html new file mode 100644 index 000000000..56593978f --- /dev/null +++ b/doc/1.5.5/libguac/unicode_8h.html @@ -0,0 +1,241 @@ + + + + + + + +libguac: guacamole/unicode.h File Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    unicode.h File Reference
    +
    +
    + +

    Provides functions for manipulating Unicode strings. +More...

    + +

    Go to the source code of this file.

    + + + + + + + + + + + + + + +

    +Functions

    size_t guac_utf8_charsize (unsigned char c)
     Given the initial byte of a single UTF-8 character, returns the overall byte size of the entire character.
     
    size_t guac_utf8_strlen (const char *str)
     Given a UTF-8-encoded string, returns the length of the string in characters (not bytes).
     
    int guac_utf8_write (int codepoint, char *utf8, int length)
     Given destination buffer and its length, writes the given codepoint as UTF-8 to the buffer, returning the number of bytes written.
     
    int guac_utf8_read (const char *utf8, int length, int *codepoint)
     Given a buffer containing UTF-8 characters, reads the first codepoint in the buffer, returning the length of the codepoint in bytes.
     
    +

    Detailed Description

    +

    Provides functions for manipulating Unicode strings.

    +

    Function Documentation

    + +

    ◆ guac_utf8_charsize()

    + +
    +
    + + + + + + + +
    size_t guac_utf8_charsize (unsigned char c)
    +
    + +

    Given the initial byte of a single UTF-8 character, returns the overall byte size of the entire character.

    +
    Parameters
    + + +
    cThe initial byte of the character to check.
    +
    +
    +
    Returns
    The number of bytes in the given character overall.
    + +
    +
    + +

    ◆ guac_utf8_read()

    + +
    +
    + + + + + + + + + + + + + + + + +
    int guac_utf8_read (const char * utf8,
    int length,
    int * codepoint )
    +
    + +

    Given a buffer containing UTF-8 characters, reads the first codepoint in the buffer, returning the length of the codepoint in bytes.

    +

    If no codepoint could be read, zero is returned.

    +
    Parameters
    + + + + +
    utf8A buffer containing UTF-8 characters.
    lengthThe length of the buffer, in bytes.
    codepointA pointer to an integer which will contain the codepoint read, if any. If no character can be read, the integer will be left untouched.
    +
    +
    +
    Returns
    The number of bytes read, which may be zero if there is not enough space in the buffer to read a character.
    + +
    +
    + +

    ◆ guac_utf8_strlen()

    + +
    +
    + + + + + + + +
    size_t guac_utf8_strlen (const char * str)
    +
    + +

    Given a UTF-8-encoded string, returns the length of the string in characters (not bytes).

    +
    Parameters
    + + +
    strThe UTF-8 string to calculate the length of.
    +
    +
    +
    Returns
    The length in characters of the given UTF-8 string.
    + +
    +
    + +

    ◆ guac_utf8_write()

    + +
    +
    + + + + + + + + + + + + + + + + +
    int guac_utf8_write (int codepoint,
    char * utf8,
    int length )
    +
    + +

    Given destination buffer and its length, writes the given codepoint as UTF-8 to the buffer, returning the number of bytes written.

    +

    If there is not enough space in the buffer to write the character, no bytes are written at all.

    +
    Parameters
    + + + + +
    codepointThe Unicode codepoint to write to the buffer.
    utf8The buffer to write to.
    lengthThe length of the buffer, in bytes.
    +
    +
    +
    Returns
    The number of bytes written, which may be zero if there is not enough space in the buffer to write the UTF-8 character.
    + +
    +
    +
    + + + + diff --git a/doc/1.5.5/libguac/unicode_8h_source.html b/doc/1.5.5/libguac/unicode_8h_source.html new file mode 100644 index 000000000..3bcb3f7dd --- /dev/null +++ b/doc/1.5.5/libguac/unicode_8h_source.html @@ -0,0 +1,130 @@ + + + + + + + +libguac: guacamole/unicode.h Source File + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    unicode.h
    +
    +
    +Go to the documentation of this file.
    1/*
    +
    2 * Licensed to the Apache Software Foundation (ASF) under one
    +
    3 * or more contributor license agreements. See the NOTICE file
    +
    4 * distributed with this work for additional information
    +
    5 * regarding copyright ownership. The ASF licenses this file
    +
    6 * to you under the Apache License, Version 2.0 (the
    +
    7 * "License"); you may not use this file except in compliance
    +
    8 * with the License. You may obtain a copy of the License at
    +
    9 *
    +
    10 * http://www.apache.org/licenses/LICENSE-2.0
    +
    11 *
    +
    12 * Unless required by applicable law or agreed to in writing,
    +
    13 * software distributed under the License is distributed on an
    +
    14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    15 * KIND, either express or implied. See the License for the
    +
    16 * specific language governing permissions and limitations
    +
    17 * under the License.
    +
    18 */
    +
    19
    +
    20#ifndef _GUAC_UNICODE_H
    +
    21#define _GUAC_UNICODE_H
    +
    22
    +
    29#include <stddef.h>
    +
    30
    +
    38size_t guac_utf8_charsize(unsigned char c);
    +
    39
    +
    47size_t guac_utf8_strlen(const char* str);
    +
    48
    +
    60int guac_utf8_write(int codepoint, char* utf8, int length);
    +
    61
    +
    75int guac_utf8_read(const char* utf8, int length, int* codepoint);
    +
    76
    +
    77#endif
    +
    78
    +
    int guac_utf8_read(const char *utf8, int length, int *codepoint)
    Given a buffer containing UTF-8 characters, reads the first codepoint in the buffer,...
    +
    size_t guac_utf8_charsize(unsigned char c)
    Given the initial byte of a single UTF-8 character, returns the overall byte size of the entire chara...
    +
    size_t guac_utf8_strlen(const char *str)
    Given a UTF-8-encoded string, returns the length of the string in characters (not bytes).
    +
    int guac_utf8_write(int codepoint, char *utf8, int length)
    Given destination buffer and its length, writes the given codepoint as UTF-8 to the buffer,...
    +
    + + + + diff --git a/doc/1.5.5/libguac/user-constants_8h.html b/doc/1.5.5/libguac/user-constants_8h.html new file mode 100644 index 000000000..8a0d008a4 --- /dev/null +++ b/doc/1.5.5/libguac/user-constants_8h.html @@ -0,0 +1,145 @@ + + + + + + + +libguac: guacamole/user-constants.h File Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    user-constants.h File Reference
    +
    +
    + +

    Constants related to the Guacamole user structure, guac_user. +More...

    + +

    Go to the source code of this file.

    + + + + + + + + + + + + + + + + + + + + + + + +

    +Macros

    +#define GUAC_USER_ID_PREFIX   '@'
     The character prefix which identifies a user ID.
     
    +#define GUAC_USER_MAX_STREAMS   64
     The maximum number of inbound or outbound streams supported by any one guac_user.
     
    +#define GUAC_USER_CLOSED_STREAM_INDEX   -1
     The index of a closed stream.
     
    +#define GUAC_USER_MAX_OBJECTS   64
     The maximum number of objects supported by any one guac_client.
     
    +#define GUAC_USER_UNDEFINED_OBJECT_INDEX   -1
     The index of an object which has not been defined.
     
    +#define GUAC_USER_OBJECT_ROOT_NAME   "/"
     The stream name reserved for the root of a Guacamole protocol object.
     
    #define GUAC_USER_STREAM_INDEX_MIMETYPE   "application/vnd.glyptodon.guacamole.stream-index+json"
     The mimetype of a stream containing a map of available stream names to their corresponding mimetypes.
     
    +

    Detailed Description

    +

    Constants related to the Guacamole user structure, guac_user.

    +

    Macro Definition Documentation

    + +

    ◆ GUAC_USER_STREAM_INDEX_MIMETYPE

    + +
    +
    + + + + +
    #define GUAC_USER_STREAM_INDEX_MIMETYPE   "application/vnd.glyptodon.guacamole.stream-index+json"
    +
    + +

    The mimetype of a stream containing a map of available stream names to their corresponding mimetypes.

    +

    The root of a Guacamole protocol object is guaranteed to have this type.

    + +
    +
    +
    + + + + diff --git a/doc/1.5.5/libguac/user-constants_8h_source.html b/doc/1.5.5/libguac/user-constants_8h_source.html new file mode 100644 index 000000000..c282c6268 --- /dev/null +++ b/doc/1.5.5/libguac/user-constants_8h_source.html @@ -0,0 +1,130 @@ + + + + + + + +libguac: guacamole/user-constants.h Source File + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    user-constants.h
    +
    +
    +Go to the documentation of this file.
    1/*
    +
    2 * Licensed to the Apache Software Foundation (ASF) under one
    +
    3 * or more contributor license agreements. See the NOTICE file
    +
    4 * distributed with this work for additional information
    +
    5 * regarding copyright ownership. The ASF licenses this file
    +
    6 * to you under the Apache License, Version 2.0 (the
    +
    7 * "License"); you may not use this file except in compliance
    +
    8 * with the License. You may obtain a copy of the License at
    +
    9 *
    +
    10 * http://www.apache.org/licenses/LICENSE-2.0
    +
    11 *
    +
    12 * Unless required by applicable law or agreed to in writing,
    +
    13 * software distributed under the License is distributed on an
    +
    14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    15 * KIND, either express or implied. See the License for the
    +
    16 * specific language governing permissions and limitations
    +
    17 * under the License.
    +
    18 */
    +
    19
    +
    20#ifndef _GUAC_USER_CONSTANTS_H
    +
    21#define _GUAC_USER_CONSTANTS_H
    +
    22
    +
    32#define GUAC_USER_ID_PREFIX '@'
    +
    33
    +
    38#define GUAC_USER_MAX_STREAMS 64
    +
    39
    +
    43#define GUAC_USER_CLOSED_STREAM_INDEX -1
    +
    44
    +
    48#define GUAC_USER_MAX_OBJECTS 64
    +
    49
    +
    53#define GUAC_USER_UNDEFINED_OBJECT_INDEX -1
    +
    54
    +
    58#define GUAC_USER_OBJECT_ROOT_NAME "/"
    +
    59
    +
    65#define GUAC_USER_STREAM_INDEX_MIMETYPE "application/vnd.glyptodon.guacamole.stream-index+json"
    +
    66
    +
    67#endif
    +
    68
    +
    + + + + diff --git a/doc/1.5.5/libguac/user-fntypes_8h.html b/doc/1.5.5/libguac/user-fntypes_8h.html new file mode 100644 index 000000000..aefa6f266 --- /dev/null +++ b/doc/1.5.5/libguac/user-fntypes_8h.html @@ -0,0 +1,641 @@ + + + + + + + +libguac: guacamole/user-fntypes.h File Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    user-fntypes.h File Reference
    +
    +
    + +

    Function type definitions related to the guac_user object. +More...

    + +

    Go to the source code of this file.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Typedefs

    typedef void * guac_user_callback(guac_user *user, void *data)
     Callback which relates to a single guac_user at a time, along with arbitrary data.
     
    typedef int guac_user_mouse_handler(guac_user *user, int x, int y, int button_mask)
     Handler for Guacamole mouse events, invoked when a "mouse" instruction has been received from a user.
     
    typedef int guac_user_touch_handler(guac_user *user, int id, int x, int y, int x_radius, int y_radius, double angle, double force)
     Handler for Guacamole touch events, invoked when a "touch" instruction has been received from a user.
     
    typedef int guac_user_key_handler(guac_user *user, int keysym, int pressed)
     Handler for Guacamole key events, invoked when a "key" event has been received from a user.
     
    typedef int guac_user_audio_handler(guac_user *user, guac_stream *stream, char *mimetype)
     Handler for Guacamole audio streams received from a user.
     
    typedef int guac_user_clipboard_handler(guac_user *user, guac_stream *stream, char *mimetype)
     Handler for Guacamole clipboard streams received from a user.
     
    typedef int guac_user_size_handler(guac_user *user, int width, int height)
     Handler for Guacamole size events, invoked when a "size" instruction has been received from a user.
     
    typedef int guac_user_file_handler(guac_user *user, guac_stream *stream, char *mimetype, char *filename)
     Handler for Guacamole file streams received from a user.
     
    typedef int guac_user_pipe_handler(guac_user *user, guac_stream *stream, char *mimetype, char *name)
     Handler for Guacamole pipe streams received from a user.
     
    typedef int guac_user_argv_handler(guac_user *user, guac_stream *stream, char *mimetype, char *name)
     Handler for Guacamole argument value (argv) streams received from a user.
     
    typedef int guac_user_blob_handler(guac_user *user, guac_stream *stream, void *data, int length)
     Handler for Guacamole stream blobs.
     
    typedef int guac_user_ack_handler(guac_user *user, guac_stream *stream, char *error, guac_protocol_status status)
     Handler for Guacamole stream "ack" instructions.
     
    typedef int guac_user_end_handler(guac_user *user, guac_stream *stream)
     Handler for Guacamole stream "end" instructions.
     
    typedef int guac_user_join_handler(guac_user *user, int argc, char **argv)
     Handler for Guacamole join events.
     
    typedef int guac_user_leave_handler(guac_user *user)
     Handler for Guacamole leave events.
     
    typedef int guac_user_sync_handler(guac_user *user, guac_timestamp timestamp)
     Handler for Guacamole sync events.
     
    typedef int guac_user_get_handler(guac_user *user, guac_object *object, char *name)
     Handler for Guacamole object get requests.
     
    typedef int guac_user_put_handler(guac_user *user, guac_object *object, guac_stream *stream, char *mimetype, char *name)
     Handler for Guacamole object put requests.
     
    +

    Detailed Description

    +

    Function type definitions related to the guac_user object.

    +

    Typedef Documentation

    + +

    ◆ guac_user_ack_handler

    + +
    +
    + + + + +
    typedef int guac_user_ack_handler(guac_user *user, guac_stream *stream, char *error, guac_protocol_status status)
    +
    + +

    Handler for Guacamole stream "ack" instructions.

    +

    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.

    +
    Parameters
    + + + + + +
    userThe user sending the "ack" instruction.
    streamThe stream for which the "ack" was received.
    errorAn 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.
    statusGUAC_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.
    +
    +
    +
    Returns
    Zero if the "ack" message was successfully handled, non-zero otherwise.
    + +
    +
    + +

    ◆ guac_user_argv_handler

    + +
    +
    + + + + +
    typedef int guac_user_argv_handler(guac_user *user, guac_stream *stream, char *mimetype, char *name)
    +
    + +

    Handler for Guacamole argument value (argv) streams received from a user.

    +

    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.

    +
    Parameters
    + + + + + +
    userThe user that opened the argument value stream.
    streamThe stream object allocated by libguac to represent the argument value stream opened by the user.
    mimetypeThe mimetype of the data that will be sent along the stream.
    nameThe 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.
    +
    +
    +
    Returns
    Zero if the opening of the argument value stream has been handled successfully, or non-zero if an error occurs.
    + +
    +
    + +

    ◆ guac_user_audio_handler

    + +
    +
    + + + + +
    typedef int guac_user_audio_handler(guac_user *user, guac_stream *stream, char *mimetype)
    +
    + +

    Handler for Guacamole audio streams received from a user.

    +

    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.

    +
    Parameters
    + + + + +
    userThe user that opened the audio stream.
    streamThe stream object allocated by libguac to represent the audio stream opened by the user.
    mimetypeThe mimetype of the data that will be sent along the stream.
    +
    +
    +
    Returns
    Zero if the opening of the audio stream has been handled successfully, or non-zero if an error occurs.
    + +
    +
    + +

    ◆ guac_user_blob_handler

    + +
    +
    + + + + +
    typedef int guac_user_blob_handler(guac_user *user, guac_stream *stream, void *data, int length)
    +
    + +

    Handler for Guacamole stream blobs.

    +

    Each blob originates from a "blob" instruction which was associated with a previously-created stream.

    +
    Parameters
    + + + + + +
    userThe user that is sending this blob of data along the stream.
    streamThe stream along which the blob was received. The semantics associated with this stream are determined by the manner of its creation.
    dataThe blob of data received.
    lengthThe number of bytes within the blob of data received.
    +
    +
    +
    Returns
    Zero if the blob of data was successfully handled, non-zero otherwise.
    + +
    +
    + +

    ◆ guac_user_callback

    + +
    +
    + + + + +
    typedef void * guac_user_callback(guac_user *user, void *data)
    +
    + +

    Callback which relates to a single guac_user at a time, along with arbitrary data.

    +
    See also
    guac_client_foreach_user()
    +
    +guac_client_for_owner()
    +
    Parameters
    + + + +
    userThe user for which this callback was invoked. Depending on whether guac_client_foreach_user() or guac_client_for_owner() was called, this will either be the current user as the "foreach" iteration continues, or the owner of the connection. If guac_client_for_owner() was called for a connection which has no owner, this may be NULL.
    dataThe arbitrary data passed to guac_client_foreach_user() or guac_client_for_owner().
    +
    +
    +
    Returns
    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 guac_client_foreach_user(), this value is always discarded.
    + +
    +
    + +

    ◆ guac_user_clipboard_handler

    + +
    +
    + + + + +
    typedef int guac_user_clipboard_handler(guac_user *user, guac_stream *stream, char *mimetype)
    +
    + +

    Handler for Guacamole clipboard streams received from a user.

    +

    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.

    +
    Parameters
    + + + + +
    userThe user that opened the clipboard stream.
    streamThe stream object allocated by libguac to represent the clipboard stream opened by the user.
    mimetypeThe mimetype of the data that will be sent along the stream.
    +
    +
    +
    Returns
    Zero if the opening of the clipboard stream has been handled successfully, or non-zero if an error occurs.
    + +
    +
    + +

    ◆ guac_user_end_handler

    + +
    +
    + + + + +
    typedef int guac_user_end_handler(guac_user *user, guac_stream *stream)
    +
    + +

    Handler for Guacamole stream "end" instructions.

    +

    End instructions are sent by the user when a stream is closing because its end has been reached.

    +
    Parameters
    + + + +
    userThe user that sent the "end" instruction.
    streamThe stream that is being closed.
    +
    +
    +
    Returns
    Zero if the end-of-stream condition has been successfully handled, non-zero otherwise.
    + +
    +
    + +

    ◆ guac_user_file_handler

    + +
    +
    + + + + +
    typedef int guac_user_file_handler(guac_user *user, guac_stream *stream, char *mimetype, char *filename)
    +
    + +

    Handler for Guacamole file streams received from a user.

    +

    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.

    +
    Parameters
    + + + + + +
    userThe user that opened the file stream.
    streamThe stream object allocated by libguac to represent the file stream opened by the user.
    mimetypeThe mimetype of the data that will be sent along the stream.
    filenameThe name of the file being transferred.
    +
    +
    +
    Returns
    Zero if the opening of the file stream has been handled successfully, or non-zero if an error occurs.
    + +
    +
    + +

    ◆ guac_user_get_handler

    + +
    +
    + + + + +
    typedef int guac_user_get_handler(guac_user *user, guac_object *object, char *name)
    +
    + +

    Handler for Guacamole object get requests.

    +

    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.

    +
    Parameters
    + + + + +
    userThe user requesting read access to the stream having the given name.
    objectThe object from which the given named stream is being requested.
    nameThe name of the stream being requested.
    +
    +
    +
    Returns
    Zero if the get request was successfully handled, non-zero otherwise.
    + +
    +
    + +

    ◆ guac_user_join_handler

    + +
    +
    + + + + +
    typedef int guac_user_join_handler(guac_user *user, int argc, char **argv)
    +
    + +

    Handler for Guacamole join events.

    +

    A join event is fired by the guac_client whenever a guac_user joins the connection. There is no instruction associated with a join event.

    +

    Implementations of the join handler MUST NOT use the client-level broadcast socket, nor invoke guac_client_foreach_user() or guac_client_for_owner(). Doing so will result in undefined behavior, including segfaults.

    +
    Parameters
    + + + + +
    userThe user joining the connection. The guac_client associated with the connection will already be populated within the user object.
    argcThe number of arguments stored within argv.
    argvAn array of all arguments provided by the user when they joined. These arguments must correspond to the argument names declared when the guac_client 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.
    +
    +
    +
    Returns
    Zero if the user has been successfully initialized and should be allowed to join the connection, non-zero otherwise.
    + +
    +
    + +

    ◆ guac_user_key_handler

    + +
    +
    + + + + +
    typedef int guac_user_key_handler(guac_user *user, int keysym, int pressed)
    +
    + +

    Handler for Guacamole key events, invoked when a "key" event has been received from a user.

    +
    Parameters
    + + + + +
    userThe user that sent the key event.
    keysymThe X11 keysym of the key that was pressed or released.
    pressedNon-zero if the key represented by the given keysym is currently pressed, zero if it is released.
    +
    +
    +
    Returns
    Zero if the key event was handled successfully, or non-zero if an error occurred.
    + +
    +
    + +

    ◆ guac_user_leave_handler

    + +
    +
    + + + + +
    typedef int guac_user_leave_handler(guac_user *user)
    +
    + +

    Handler for Guacamole leave events.

    +

    A leave event is fired by the guac_client whenever a guac_user leaves the connection. There is no instruction associated with a leave event.

    +

    Implementations of the leave handler MUST NOT use the client-level broadcast socket, nor invoke guac_client_foreach_user() or guac_client_for_owner(). Doing so will result in undefined behavior, including segfaults.

    +
    Parameters
    + + +
    userThe user that has left the connection.
    +
    +
    +
    Returns
    Zero if the leave event has been successfully handled, non-zero otherwise.
    + +
    +
    + +

    ◆ guac_user_mouse_handler

    + +
    +
    + + + + +
    typedef int guac_user_mouse_handler(guac_user *user, int x, int y, int button_mask)
    +
    + +

    Handler for Guacamole mouse events, invoked when a "mouse" instruction has been received from a user.

    +
    Parameters
    + + + + + +
    userThe user that sent the mouse event.
    xThe 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.
    yThe 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.
    button_maskAn 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.
    +
    +
    +
    See also
    GUAC_CLIENT_MOUSE_LEFT
    +
    +GUAC_CLIENT_MOUSE_MIDDLE
    +
    +GUAC_CLIENT_MOUSE_RIGHT
    +
    +GUAC_CLIENT_MOUSE_SCROLL_UP
    +
    +GUAC_CLIENT_MOUSE_SCROLL_DOWN
    +
    Returns
    Zero if the mouse event was handled successfully, or non-zero if an error occurred.
    + +
    +
    + +

    ◆ guac_user_pipe_handler

    + +
    +
    + + + + +
    typedef int guac_user_pipe_handler(guac_user *user, guac_stream *stream, char *mimetype, char *name)
    +
    + +

    Handler for Guacamole pipe streams received from a user.

    +

    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.

    +
    Parameters
    + + + + + +
    userThe user that opened the pipe stream.
    streamThe stream object allocated by libguac to represent the pipe stream opened by the user.
    mimetypeThe mimetype of the data that will be sent along the stream.
    nameThe 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.
    +
    +
    +
    Returns
    Zero if the opening of the pipe stream has been handled successfully, or non-zero if an error occurs.
    + +
    +
    + +

    ◆ guac_user_put_handler

    + +
    +
    + + + + +
    typedef int guac_user_put_handler(guac_user *user, guac_object *object, guac_stream *stream, char *mimetype, char *name)
    +
    + +

    Handler for Guacamole object put requests.

    +

    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.

    +
    Parameters
    + + + + + + +
    userThe user requesting write access to the stream having the given name.
    objectThe object from which the given named stream is being requested.
    streamThe stream along which the blobs which should be written to the named stream will be received.
    mimetypeThe mimetype of the data that will be received along the given stream.
    nameThe name of the stream being requested.
    +
    +
    +
    Returns
    Zero if the put request was successfully handled, non-zero otherwise.
    + +
    +
    + +

    ◆ guac_user_size_handler

    + +
    +
    + + + + +
    typedef int guac_user_size_handler(guac_user *user, int width, int height)
    +
    + +

    Handler for Guacamole size events, invoked when a "size" instruction has been received from a user.

    +

    A "size" instruction indicates that the desired display size has changed.

    +
    Parameters
    + + + + +
    userThe user whose desired display size has changed.
    widthThe desired width of the display, in pixels.
    heightThe desired height of the display, in pixels.
    +
    +
    +
    Returns
    Zero if the size event has been successfully handled, non-zero otherwise.
    + +
    +
    + +

    ◆ guac_user_sync_handler

    + +
    +
    + + + + +
    typedef int guac_user_sync_handler(guac_user *user, guac_timestamp timestamp)
    +
    + +

    Handler for Guacamole sync events.

    +

    A sync event is fired by the guac_client whenever a guac_user 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.

    +
    Parameters
    + + + +
    userThe user that sent the "sync" instruction.
    timestampThe timestamp contained within the sync instruction.
    +
    +
    +
    Returns
    Zero if the sync event has been handled successfully, non-zero otherwise.
    + +
    +
    + +

    ◆ guac_user_touch_handler

    + +
    +
    + + + + +
    typedef int guac_user_touch_handler(guac_user *user, int id, int x, int y, int x_radius, int y_radius, double angle, double force)
    +
    + +

    Handler for Guacamole touch events, invoked when a "touch" instruction has been received from a user.

    +
    Parameters
    + + + + + + + + + +
    userThe user that sent the touch event.
    idAn arbitrary integer ID which uniquely identifies this contact relative to other active contacts.
    xThe X coordinate of the center of the touch contact within the display when the event occurred, in pixels. This value is not guaranteed to be within the bounds of the display area.
    yThe Y coordinate of the center of the touch contact within the display when the event occurred, in pixels. This value is not guaranteed to be within the bounds of the display area.
    x_radiusThe X radius of the ellipse covering the general area of the touch contact, in pixels.
    y_radiusThe Y radius of the ellipse covering the general area of the touch contact, in pixels.
    angleThe rough angle of clockwise rotation of the general area of the touch contact, in degrees.
    forceThe relative force exerted by the touch contact, where 0 is no force (the touch has been lifted) and 1 is maximum force (the maximum amount of force representable by the device).
    +
    +
    +
    Returns
    Zero if the touch event was handled successfully, or non-zero if an error occurred.
    + +
    +
    +
    + + + + diff --git a/doc/1.5.5/libguac/user-fntypes_8h_source.html b/doc/1.5.5/libguac/user-fntypes_8h_source.html new file mode 100644 index 000000000..bd17b3f85 --- /dev/null +++ b/doc/1.5.5/libguac/user-fntypes_8h_source.html @@ -0,0 +1,198 @@ + + + + + + + +libguac: guacamole/user-fntypes.h Source File + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    user-fntypes.h
    +
    +
    +Go to the documentation of this file.
    1/*
    +
    2 * Licensed to the Apache Software Foundation (ASF) under one
    +
    3 * or more contributor license agreements. See the NOTICE file
    +
    4 * distributed with this work for additional information
    +
    5 * regarding copyright ownership. The ASF licenses this file
    +
    6 * to you under the Apache License, Version 2.0 (the
    +
    7 * "License"); you may not use this file except in compliance
    +
    8 * with the License. You may obtain a copy of the License at
    +
    9 *
    +
    10 * http://www.apache.org/licenses/LICENSE-2.0
    +
    11 *
    +
    12 * Unless required by applicable law or agreed to in writing,
    +
    13 * software distributed under the License is distributed on an
    +
    14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    15 * KIND, either express or implied. See the License for the
    +
    16 * specific language governing permissions and limitations
    +
    17 * under the License.
    +
    18 */
    +
    19
    +
    20#ifndef _GUAC_USER_FNTYPES_H
    +
    21#define _GUAC_USER_FNTYPES_H
    +
    22
    +
    29#include "object-types.h"
    +
    30#include "protocol-types.h"
    +
    31#include "stream-types.h"
    +
    32#include "timestamp-types.h"
    +
    33#include "user-types.h"
    +
    34
    +
    59typedef void* guac_user_callback(guac_user* user, void* data);
    +
    60
    +
    95typedef int guac_user_mouse_handler(guac_user* user, int x, int y,
    +
    96 int button_mask);
    +
    97
    +
    140typedef int guac_user_touch_handler(guac_user* user, int id, int x, int y,
    +
    141 int x_radius, int y_radius, double angle, double force);
    +
    142
    +
    161typedef int guac_user_key_handler(guac_user* user, int keysym, int pressed);
    +
    162
    + +
    184 char* mimetype);
    +
    185
    + +
    207 char* mimetype);
    +
    208
    + +
    228 int width, int height);
    +
    229
    + +
    254 char* mimetype, char* filename);
    +
    255
    + +
    283 char* mimetype, char* name);
    +
    284
    + +
    313 char* mimetype, char* name);
    +
    314
    + +
    336 void* data, int length);
    +
    337
    +
    364typedef int guac_user_ack_handler(guac_user* user, guac_stream* stream,
    +
    365 char* error, guac_protocol_status status);
    +
    366
    +
    381typedef int guac_user_end_handler(guac_user* user, guac_stream* stream);
    +
    382
    +
    411typedef int guac_user_join_handler(guac_user* user, int argc, char** argv);
    +
    412
    + +
    431
    +
    451typedef int guac_user_sync_handler(guac_user* user, guac_timestamp timestamp);
    +
    452
    +
    472typedef int guac_user_get_handler(guac_user* user, guac_object* object,
    +
    473 char* name);
    +
    474
    +
    499typedef int guac_user_put_handler(guac_user* user, guac_object* object,
    +
    500 guac_stream* stream, char* mimetype, char* name);
    +
    501
    +
    502#endif
    +
    503
    +
    Type definitions related to Guacamole protocol objects.
    +
    Type definitions related to the Guacamole protocol.
    +
    guac_protocol_status
    Set of all possible status codes returned by protocol operations.
    Definition protocol-types.h:44
    +
    Type definitions related to Guacamole protocol streams.
    +
    Represents a single object within the Guacamole protocol.
    Definition object.h:32
    +
    Represents a single stream within the Guacamole protocol.
    Definition stream.h:32
    +
    Representation of a physical connection within a larger logical connection which may be shared.
    Definition user.h:115
    +
    Type definitions related to Guacamole protocol timestamps.
    +
    int64_t guac_timestamp
    An arbitrary timestamp denoting a relative time value in milliseconds.
    Definition timestamp-types.h:34
    +
    int guac_user_clipboard_handler(guac_user *user, guac_stream *stream, char *mimetype)
    Handler for Guacamole clipboard streams received from a user.
    Definition user-fntypes.h:206
    +
    int guac_user_audio_handler(guac_user *user, guac_stream *stream, char *mimetype)
    Handler for Guacamole audio streams received from a user.
    Definition user-fntypes.h:183
    +
    int guac_user_mouse_handler(guac_user *user, int x, int y, int button_mask)
    Handler for Guacamole mouse events, invoked when a "mouse" instruction has been received from a user.
    Definition user-fntypes.h:95
    +
    int guac_user_key_handler(guac_user *user, int keysym, int pressed)
    Handler for Guacamole key events, invoked when a "key" event has been received from a user.
    Definition user-fntypes.h:161
    +
    int guac_user_argv_handler(guac_user *user, guac_stream *stream, char *mimetype, char *name)
    Handler for Guacamole argument value (argv) streams received from a user.
    Definition user-fntypes.h:312
    +
    int guac_user_file_handler(guac_user *user, guac_stream *stream, char *mimetype, char *filename)
    Handler for Guacamole file streams received from a user.
    Definition user-fntypes.h:253
    +
    int guac_user_join_handler(guac_user *user, int argc, char **argv)
    Handler for Guacamole join events.
    Definition user-fntypes.h:411
    +
    int guac_user_ack_handler(guac_user *user, guac_stream *stream, char *error, guac_protocol_status status)
    Handler for Guacamole stream "ack" instructions.
    Definition user-fntypes.h:364
    +
    void * guac_user_callback(guac_user *user, void *data)
    Callback which relates to a single guac_user at a time, along with arbitrary data.
    Definition user-fntypes.h:59
    +
    int guac_user_leave_handler(guac_user *user)
    Handler for Guacamole leave events.
    Definition user-fntypes.h:430
    +
    int guac_user_sync_handler(guac_user *user, guac_timestamp timestamp)
    Handler for Guacamole sync events.
    Definition user-fntypes.h:451
    +
    int guac_user_pipe_handler(guac_user *user, guac_stream *stream, char *mimetype, char *name)
    Handler for Guacamole pipe streams received from a user.
    Definition user-fntypes.h:282
    +
    int guac_user_get_handler(guac_user *user, guac_object *object, char *name)
    Handler for Guacamole object get requests.
    Definition user-fntypes.h:472
    +
    int guac_user_size_handler(guac_user *user, int width, int height)
    Handler for Guacamole size events, invoked when a "size" instruction has been received from a user.
    Definition user-fntypes.h:227
    +
    int guac_user_touch_handler(guac_user *user, int id, int x, int y, int x_radius, int y_radius, double angle, double force)
    Handler for Guacamole touch events, invoked when a "touch" instruction has been received from a user.
    Definition user-fntypes.h:140
    +
    int guac_user_blob_handler(guac_user *user, guac_stream *stream, void *data, int length)
    Handler for Guacamole stream blobs.
    Definition user-fntypes.h:335
    +
    int guac_user_end_handler(guac_user *user, guac_stream *stream)
    Handler for Guacamole stream "end" instructions.
    Definition user-fntypes.h:381
    +
    int guac_user_put_handler(guac_user *user, guac_object *object, guac_stream *stream, char *mimetype, char *name)
    Handler for Guacamole object put requests.
    Definition user-fntypes.h:499
    +
    Type definitions related to the guac_user object.
    +
    + + + + diff --git a/doc/1.5.5/libguac/user-types_8h.html b/doc/1.5.5/libguac/user-types_8h.html new file mode 100644 index 000000000..64a2f02d9 --- /dev/null +++ b/doc/1.5.5/libguac/user-types_8h.html @@ -0,0 +1,94 @@ + + + + + + + +libguac: guacamole/user-types.h File Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    user-types.h File Reference
    +
    +
    + +

    Type definitions related to the guac_user object. +More...

    + +

    Go to the source code of this file.

    +

    Detailed Description

    +

    Type definitions related to the guac_user object.

    +
    + + + + diff --git a/doc/1.5.5/libguac/user-types_8h_source.html b/doc/1.5.5/libguac/user-types_8h_source.html new file mode 100644 index 000000000..f379945c6 --- /dev/null +++ b/doc/1.5.5/libguac/user-types_8h_source.html @@ -0,0 +1,122 @@ + + + + + + + +libguac: guacamole/user-types.h Source File + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    user-types.h
    +
    +
    +Go to the documentation of this file.
    1/*
    +
    2 * Licensed to the Apache Software Foundation (ASF) under one
    +
    3 * or more contributor license agreements. See the NOTICE file
    +
    4 * distributed with this work for additional information
    +
    5 * regarding copyright ownership. The ASF licenses this file
    +
    6 * to you under the Apache License, Version 2.0 (the
    +
    7 * "License"); you may not use this file except in compliance
    +
    8 * with the License. You may obtain a copy of the License at
    +
    9 *
    +
    10 * http://www.apache.org/licenses/LICENSE-2.0
    +
    11 *
    +
    12 * Unless required by applicable law or agreed to in writing,
    +
    13 * software distributed under the License is distributed on an
    +
    14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    15 * KIND, either express or implied. See the License for the
    +
    16 * specific language governing permissions and limitations
    +
    17 * under the License.
    +
    18 */
    +
    19
    +
    20#ifndef _GUAC_USER_TYPES_H
    +
    21#define _GUAC_USER_TYPES_H
    +
    22
    +
    33typedef struct guac_user guac_user;
    +
    34
    +
    39typedef struct guac_user_info guac_user_info;
    +
    40
    +
    41#endif
    +
    42
    +
    Information exposed by the remote client during the connection handshake which can be used by a clien...
    Definition user.h:46
    +
    Representation of a physical connection within a larger logical connection which may be shared.
    Definition user.h:115
    +
    + + + + diff --git a/doc/1.5.5/libguac/user_8h.html b/doc/1.5.5/libguac/user_8h.html new file mode 100644 index 000000000..5032ecdfc --- /dev/null +++ b/doc/1.5.5/libguac/user_8h.html @@ -0,0 +1,1091 @@ + + + + + + + +libguac: guacamole/user.h File Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    user.h File Reference
    +
    +
    + +

    Defines the guac_user object, which represents a physical connection within a larger, possibly shared, logical connection represented by a guac_client. +More...

    + +

    Go to the source code of this file.

    + + + + + + + + +

    +Data Structures

    struct  guac_user_info
     Information exposed by the remote client during the connection handshake which can be used by a client plugin. More...
     
    struct  guac_user
     Representation of a physical connection within a larger logical connection which may be shared. More...
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    guac_userguac_user_alloc ()
     Allocates a new, blank user, not associated with any specific client or socket.
     
    void guac_user_free (guac_user *user)
     Frees the given user and all associated resources.
     
    int guac_user_handle_connection (guac_user *user, int usec_timeout)
     Handles all I/O for the portion of a user's Guacamole connection following the initial "select" instruction, including the rest of the handshake.
     
    int guac_user_handle_instruction (guac_user *user, const char *opcode, int argc, char **argv)
     Call the appropriate handler defined by the given user for the given instruction.
     
    guac_streamguac_user_alloc_stream (guac_user *user)
     Allocates a new stream.
     
    void guac_user_free_stream (guac_user *user, guac_stream *stream)
     Returns the given stream to the pool of available streams, such that it can be reused by any subsequent call to guac_user_alloc_stream().
     
    void guac_user_stop (guac_user *user)
     Signals the given user that it must disconnect, or advises cooperating services that the given user is no longer connected.
     
    void guac_user_abort (guac_user *user, guac_protocol_status status, const char *format,...)
     Signals the given user to stop gracefully, while also signalling via the Guacamole protocol that an error has occurred.
     
    void vguac_user_abort (guac_user *user, guac_protocol_status status, const char *format, va_list ap)
     Signals the given user to stop gracefully, while also signalling via the Guacamole protocol that an error has occurred.
     
    void guac_user_log (guac_user *user, guac_client_log_level level, const char *format,...)
     Writes a message in the log used by the given user.
     
    void vguac_user_log (guac_user *user, guac_client_log_level level, const char *format, va_list ap)
     Writes a message in the log used by the given user.
     
    guac_objectguac_user_alloc_object (guac_user *user)
     Allocates a new object.
     
    void guac_user_free_object (guac_user *user, guac_object *object)
     Returns the given object to the pool of available objects, such that it can be reused by any subsequent call to guac_user_alloc_object().
     
    void guac_user_stream_argv (guac_user *user, guac_socket *socket, const char *mimetype, const char *name, const char *value)
     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.
     
    void guac_user_stream_png (guac_user *user, guac_socket *socket, guac_composite_mode mode, const guac_layer *layer, int x, int y, cairo_surface_t *surface)
     Streams the image data of the given surface over an image stream ("img" instruction) as PNG-encoded data.
     
    void guac_user_stream_jpeg (guac_user *user, guac_socket *socket, guac_composite_mode mode, const guac_layer *layer, int x, int y, cairo_surface_t *surface, int quality)
     Streams the image data of the given surface over an image stream ("img" instruction) as JPEG-encoded data at the given quality.
     
    void guac_user_stream_webp (guac_user *user, guac_socket *socket, guac_composite_mode mode, const guac_layer *layer, int x, int y, cairo_surface_t *surface, int quality, int lossless)
     Streams the image data of the given surface over an image stream ("img" instruction) as WebP-encoded data at the given quality.
     
    int guac_user_supports_msg (guac_user *user)
     Returns whether the given user supports the "msg" instruction.
     
    int guac_user_supports_required (guac_user *user)
     Returns whether the given user supports the "required" instruction.
     
    int guac_user_supports_webp (guac_user *user)
     Returns whether the given user supports WebP.
     
    char * guac_user_parse_args_string (guac_user *user, const char **arg_names, const char **argv, int index, const char *default_value)
     Automatically handles a single argument received from a joining user, returning a newly-allocated string containing that value.
     
    int guac_user_parse_args_int (guac_user *user, const char **arg_names, const char **argv, int index, int default_value)
     Automatically handles a single integer argument received from a joining user, returning the integer value of that argument.
     
    int guac_user_parse_args_boolean (guac_user *user, const char **arg_names, const char **argv, int index, int default_value)
     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).
     
    +

    Detailed Description

    +

    Defines the guac_user object, which represents a physical connection within a larger, possibly shared, logical connection represented by a guac_client.

    +

    Function Documentation

    + +

    ◆ guac_user_abort()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    void guac_user_abort (guac_user * user,
    guac_protocol_status status,
    const char * format,
    ... )
    +
    + +

    Signals the given user to stop gracefully, while also signalling via the Guacamole protocol that an error has occurred.

    +

    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.

    +
    Parameters
    + + + + + +
    userThe user to signal to stop.
    statusThe status to send over the Guacamole protocol.
    formatA printf-style format string to log.
    ...Arguments to use when filling the format string for printing.
    +
    +
    + +
    +
    + +

    ◆ guac_user_alloc()

    + +
    +
    + + + + + + + +
    guac_user * guac_user_alloc ()
    +
    + +

    Allocates a new, blank user, not associated with any specific client or socket.

    +
    Returns
    The newly allocated guac_user, or NULL if allocation failed.
    + +
    +
    + +

    ◆ guac_user_alloc_object()

    + +
    +
    + + + + + + + +
    guac_object * guac_user_alloc_object (guac_user * user)
    +
    + +

    Allocates a new object.

    +

    An arbitrary index is automatically assigned if no previously-allocated object is available for use.

    +
    Parameters
    + + +
    userThe user to allocate the object for.
    +
    +
    +
    Returns
    The next available object, or a newly allocated object.
    + +
    +
    + +

    ◆ guac_user_alloc_stream()

    + +
    +
    + + + + + + + +
    guac_stream * guac_user_alloc_stream (guac_user * user)
    +
    + +

    Allocates a new stream.

    +

    An arbitrary index is automatically assigned if no previously-allocated stream is available for use.

    +
    Parameters
    + + +
    userThe user to allocate the stream for.
    +
    +
    +
    Returns
    The next available stream, or a newly allocated stream, or NULL if the maximum number of active streams has been reached.
    + +
    +
    + +

    ◆ guac_user_free()

    + +
    +
    + + + + + + + +
    void guac_user_free (guac_user * user)
    +
    + +

    Frees the given user and all associated resources.

    +
    Parameters
    + + +
    userThe guac_user to free.
    +
    +
    + +
    +
    + +

    ◆ guac_user_free_object()

    + +
    +
    + + + + + + + + + + + +
    void guac_user_free_object (guac_user * user,
    guac_object * object )
    +
    + +

    Returns the given object to the pool of available objects, such that it can be reused by any subsequent call to guac_user_alloc_object().

    +
    Parameters
    + + + +
    userThe user to return the object to.
    objectThe object to return to the pool of available object.
    +
    +
    + +
    +
    + +

    ◆ guac_user_free_stream()

    + +
    +
    + + + + + + + + + + + +
    void guac_user_free_stream (guac_user * user,
    guac_stream * stream )
    +
    + +

    Returns the given stream to the pool of available streams, such that it can be reused by any subsequent call to guac_user_alloc_stream().

    +
    Parameters
    + + + +
    userThe user to return the stream to.
    streamThe stream to return to the pool of available stream.
    +
    +
    + +
    +
    + +

    ◆ guac_user_handle_connection()

    + +
    +
    + + + + + + + + + + + +
    int guac_user_handle_connection (guac_user * user,
    int usec_timeout )
    +
    + +

    Handles all I/O for the portion of a user's Guacamole connection following the initial "select" instruction, including the rest of the handshake.

    +

    The handshake-related properties of the given guac_user are automatically populated, and guac_user_handle_instruction() is invoked for all instructions received after the handshake has completed. This function blocks until the connection/user is aborted or the user disconnects.

    +
    Parameters
    + + + +
    userThe user whose handshake and entire Guacamole protocol exchange should be handled. The user must already be associated with a guac_socket and guac_client, and the guac_client must already be fully initialized.
    usec_timeoutThe number of microseconds to wait for instructions from the given user before closing the connection with an error.
    +
    +
    +
    Returns
    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.
    + +
    +
    + +

    ◆ guac_user_handle_instruction()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    int guac_user_handle_instruction (guac_user * user,
    const char * opcode,
    int argc,
    char ** argv )
    +
    + +

    Call the appropriate handler defined by the given user for the given instruction.

    +

    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).

    +
    Parameters
    + + + + + +
    userThe user whose handlers should be called.
    opcodeThe opcode of the instruction to pass to the user via the appropriate handler.
    argcThe number of arguments which are part of the instruction.
    argvAn array of all arguments which are part of the instruction.
    +
    +
    +
    Returns
    Non-negative if the instruction was handled successfully, or negative if an error occurred.
    + +
    +
    + +

    ◆ guac_user_log()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    void guac_user_log (guac_user * user,
    guac_client_log_level level,
    const char * format,
    ... )
    +
    + +

    Writes a message in the log used by the given user.

    +

    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.

    +
    Parameters
    + + + + + +
    userThe user logging this message.
    levelThe level at which to log this message.
    formatA printf-style format string to log.
    ...Arguments to use when filling the format string for printing.
    +
    +
    + +
    +
    + +

    ◆ guac_user_parse_args_boolean()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    int guac_user_parse_args_boolean (guac_user * user,
    const char ** arg_names,
    const char ** argv,
    int index,
    int default_value )
    +
    + +

    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).

    +

    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.

    +
    Parameters
    + + + + + + +
    userThe user joining the connection and providing the given arguments.
    arg_namesA 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.
    argvAn 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.
    indexThe index of the entry in both the arg_names and argv arrays which corresponds to the argument being parsed.
    default_valueThe value to return if the provided argument is blank or invalid.
    +
    +
    +
    Returns
    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.
    + +
    +
    + +

    ◆ guac_user_parse_args_int()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    int guac_user_parse_args_int (guac_user * user,
    const char ** arg_names,
    const char ** argv,
    int index,
    int default_value )
    +
    + +

    Automatically handles a single integer argument received from a joining user, returning the integer value of that argument.

    +

    If the argument provided by the user is blank or invalid, the default value is returned.

    +
    Parameters
    + + + + + + +
    userThe user joining the connection and providing the given arguments.
    arg_namesA 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.
    argvAn 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.
    indexThe index of the entry in both the arg_names and argv arrays which corresponds to the argument being parsed.
    default_valueThe value to return if the provided argument is blank or invalid.
    +
    +
    +
    Returns
    The integer value parsed from the provided argument value, or the default value if the provided argument value is blank or invalid.
    + +
    +
    + +

    ◆ guac_user_parse_args_string()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    char * guac_user_parse_args_string (guac_user * user,
    const char ** arg_names,
    const char ** argv,
    int index,
    const char * default_value )
    +
    + +

    Automatically handles a single argument received from a joining user, returning a newly-allocated string containing that value.

    +

    If the argument provided by the user is blank, a newly-allocated string containing the default value is returned.

    +
    Parameters
    + + + + + + +
    userThe user joining the connection and providing the given arguments.
    arg_namesA 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.
    argvAn 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.
    indexThe index of the entry in both the arg_names and argv arrays which corresponds to the argument being parsed.
    default_valueThe 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.
    +
    +
    +
    Returns
    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.
    + +
    +
    + +

    ◆ guac_user_stop()

    + +
    +
    + + + + + + + +
    void guac_user_stop (guac_user * user)
    +
    + +

    Signals the given user that it must disconnect, or advises cooperating services that the given user is no longer connected.

    +
    Parameters
    + + +
    userThe user to stop.
    +
    +
    + +
    +
    + +

    ◆ guac_user_stream_argv()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void guac_user_stream_argv (guac_user * user,
    guac_socket * socket,
    const char * mimetype,
    const char * name,
    const char * value )
    +
    + +

    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.

    +

    The argument value stream will be automatically allocated and freed.

    +
    Parameters
    + + + + + + +
    userThe Guacamole user who should receive the connection parameter value.
    socketThe socket over which instructions associated with the argument value stream should be sent.
    mimetypeThe mimetype of the data within the connection parameter value being sent.
    nameThe name of the connection parameter being sent.
    valueThe current value of the connection parameter being sent.
    +
    +
    + +
    +
    + +

    ◆ guac_user_stream_jpeg()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void guac_user_stream_jpeg (guac_user * user,
    guac_socket * socket,
    guac_composite_mode mode,
    const guac_layer * layer,
    int x,
    int y,
    cairo_surface_t * surface,
    int quality )
    +
    + +

    Streams the image data of the given surface over an image stream ("img" instruction) as JPEG-encoded data at the given quality.

    +

    The image stream will be automatically allocated and freed.

    +
    Parameters
    + + + + + + + + + +
    userThe Guacamole user for whom the image stream should be allocated.
    socketThe socket over which instructions associated with the image stream should be sent.
    modeThe composite mode to use when rendering the image over the given layer.
    layerThe destination layer.
    xThe X coordinate of the upper-left corner of the destination rectangle within the given layer.
    yThe Y coordinate of the upper-left corner of the destination rectangle within the given layer.
    surfaceA Cairo surface containing the image data to be streamed.
    qualityThe 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.
    +
    +
    + +
    +
    + +

    ◆ guac_user_stream_png()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void guac_user_stream_png (guac_user * user,
    guac_socket * socket,
    guac_composite_mode mode,
    const guac_layer * layer,
    int x,
    int y,
    cairo_surface_t * surface )
    +
    + +

    Streams the image data of the given surface over an image stream ("img" instruction) as PNG-encoded data.

    +

    The image stream will be automatically allocated and freed.

    +
    Parameters
    + + + + + + + + +
    userThe Guacamole user for whom the image stream should be allocated.
    socketThe socket over which instructions associated with the image stream should be sent.
    modeThe composite mode to use when rendering the image over the given layer.
    layerThe destination layer.
    xThe X coordinate of the upper-left corner of the destination rectangle within the given layer.
    yThe Y coordinate of the upper-left corner of the destination rectangle within the given layer.
    surfaceA Cairo surface containing the image data to be streamed.
    +
    +
    + +
    +
    + +

    ◆ guac_user_stream_webp()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void guac_user_stream_webp (guac_user * user,
    guac_socket * socket,
    guac_composite_mode mode,
    const guac_layer * layer,
    int x,
    int y,
    cairo_surface_t * surface,
    int quality,
    int lossless )
    +
    + +

    Streams the image data of the given surface over an image stream ("img" instruction) as WebP-encoded data at the given quality.

    +

    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 guac_user_supports_webp() or guac_client_supports_webp() prior to calling this function.

    +
    Parameters
    + + + + + + + + + + +
    userThe Guacamole user for whom the image stream should be allocated.
    socketThe socket over which instructions associated with the image stream should be sent.
    modeThe composite mode to use when rendering the image over the given layer.
    layerThe destination layer.
    xThe X coordinate of the upper-left corner of the destination rectangle within the given layer.
    yThe Y coordinate of the upper-left corner of the destination rectangle within the given layer.
    surfaceA Cairo surface containing the image data to be streamed.
    qualityThe 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.
    losslessZero to encode a lossy image, non-zero to encode losslessly.
    +
    +
    + +
    +
    + +

    ◆ guac_user_supports_msg()

    + +
    +
    + + + + + + + +
    int guac_user_supports_msg (guac_user * user)
    +
    + +

    Returns whether the given user supports the "msg" instruction.

    +
    Parameters
    + + +
    userThe Guacamole user to check for support of the "msg" instruction.
    +
    +
    +
    Returns
    Non-zero if the user supports the "msg" instruction, otherwise zero.
    + +
    +
    + +

    ◆ guac_user_supports_required()

    + +
    +
    + + + + + + + +
    int guac_user_supports_required (guac_user * user)
    +
    + +

    Returns whether the given user supports the "required" instruction.

    +
    Parameters
    + + +
    userThe Guacamole user to check for support of the "required" instruction.
    +
    +
    +
    Returns
    Non-zero if the user supports the "required" instruction, otherwise zero.
    + +
    +
    + +

    ◆ guac_user_supports_webp()

    + +
    +
    + + + + + + + +
    int guac_user_supports_webp (guac_user * user)
    +
    + +

    Returns whether the given user supports WebP.

    +

    If the user does not support WebP, or the server cannot encode WebP images, zero is returned.

    +
    Parameters
    + + +
    userThe Guacamole user to check for WebP support.
    +
    +
    +
    Returns
    Non-zero if the given user claims to support WebP and the server has been built with WebP support, zero otherwise.
    + +
    +
    + +

    ◆ vguac_user_abort()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    void vguac_user_abort (guac_user * user,
    guac_protocol_status status,
    const char * format,
    va_list ap )
    +
    + +

    Signals the given user to stop gracefully, while also signalling via the Guacamole protocol that an error has occurred.

    +

    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.

    +
    Parameters
    + + + + + +
    userThe user to signal to stop.
    statusThe status to send over the Guacamole protocol.
    formatA printf-style format string to log.
    apThe va_list containing the arguments to be used when filling the format string for printing.
    +
    +
    + +
    +
    + +

    ◆ vguac_user_log()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    void vguac_user_log (guac_user * user,
    guac_client_log_level level,
    const char * format,
    va_list ap )
    +
    + +

    Writes a message in the log used by the given user.

    +

    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.

    +
    Parameters
    + + + + + +
    userThe user logging this message.
    levelThe level at which to log this message.
    formatA printf-style format string to log.
    apThe va_list containing the arguments to be used when filling the format string for printing.
    +
    +
    + +
    +
    +
    + + + + diff --git a/doc/1.5.5/libguac/user_8h_source.html b/doc/1.5.5/libguac/user_8h_source.html new file mode 100644 index 000000000..32c589afe --- /dev/null +++ b/doc/1.5.5/libguac/user_8h_source.html @@ -0,0 +1,384 @@ + + + + + + + +libguac: guacamole/user.h Source File + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    user.h
    +
    +
    +Go to the documentation of this file.
    1/*
    +
    2 * Licensed to the Apache Software Foundation (ASF) under one
    +
    3 * or more contributor license agreements. See the NOTICE file
    +
    4 * distributed with this work for additional information
    +
    5 * regarding copyright ownership. The ASF licenses this file
    +
    6 * to you under the Apache License, Version 2.0 (the
    +
    7 * "License"); you may not use this file except in compliance
    +
    8 * with the License. You may obtain a copy of the License at
    +
    9 *
    +
    10 * http://www.apache.org/licenses/LICENSE-2.0
    +
    11 *
    +
    12 * Unless required by applicable law or agreed to in writing,
    +
    13 * software distributed under the License is distributed on an
    +
    14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    15 * KIND, either express or implied. See the License for the
    +
    16 * specific language governing permissions and limitations
    +
    17 * under the License.
    +
    18 */
    +
    19
    +
    20#ifndef _GUAC_USER_H
    +
    21#define _GUAC_USER_H
    +
    22
    +
    31#include "client-types.h"
    +
    32#include "layer-types.h"
    +
    33#include "pool-types.h"
    +
    34#include "socket-types.h"
    +
    35#include "stream-types.h"
    +
    36#include "timestamp-types.h"
    +
    37#include "user-constants.h"
    +
    38#include "user-fntypes.h"
    +
    39#include "user-types.h"
    +
    40
    +
    41#include <cairo/cairo.h>
    +
    42
    +
    43#include <pthread.h>
    +
    44#include <stdarg.h>
    +
    45
    +
    + +
    47
    + +
    55
    + +
    63
    +
    68 const char** audio_mimetypes;
    +
    69
    +
    74 const char** video_mimetypes;
    +
    75
    +
    81 const char** image_mimetypes;
    +
    82
    + +
    91
    +
    97 const char* timezone;
    +
    98
    + +
    104
    +
    111 const char* name;
    +
    112
    +
    113};
    +
    +
    114
    + +
    542
    + +
    550
    + +
    557
    +
    580int guac_user_handle_connection(guac_user* user, int usec_timeout);
    +
    581
    +
    605int guac_user_handle_instruction(guac_user* user, const char* opcode,
    +
    606 int argc, char** argv);
    +
    607
    + +
    620
    + +
    629
    + +
    637
    + +
    650 const char* format, ...);
    +
    651
    + +
    665 const char* format, va_list ap);
    +
    666
    + +
    678 const char* format, ...);
    +
    679
    + +
    692 const char* format, va_list ap);
    +
    693
    + +
    705
    + +
    717
    + +
    742 const char* mimetype, const char* name, const char* value);
    +
    743
    + +
    774 guac_composite_mode mode, const guac_layer* layer, int x, int y,
    +
    775 cairo_surface_t* surface);
    +
    776
    + +
    812 guac_composite_mode mode, const guac_layer* layer, int x, int y,
    +
    813 cairo_surface_t* surface, int quality);
    +
    814
    + +
    858 guac_composite_mode mode, const guac_layer* layer, int x, int y,
    +
    859 cairo_surface_t* surface, int quality, int lossless);
    +
    860
    + +
    871
    + +
    882
    + +
    895
    +
    932char* guac_user_parse_args_string(guac_user* user, const char** arg_names,
    +
    933 const char** argv, int index, const char* default_value);
    +
    934
    +
    965int guac_user_parse_args_int(guac_user* user, const char** arg_names,
    +
    966 const char** argv, int index, int default_value);
    +
    967
    +
    1001int guac_user_parse_args_boolean(guac_user* user, const char** arg_names,
    +
    1002 const char** argv, int index, int default_value);
    +
    1003
    +
    1004#endif
    +
    1005
    +
    Type definitions related to the Guacamole client structure, guac_client.
    +
    guac_client_log_level
    All supported log levels used by the logging subsystem of each Guacamole client.
    Definition client-types.h:62
    +
    Type definitions related to Guacamole layers.
    +
    Type definitions related to the guac_pool pool of unique integers.
    +
    guac_composite_mode
    Composite modes used by Guacamole draw instructions.
    Definition protocol-types.h:170
    +
    guac_protocol_version
    The set of protocol versions known to guacd to handle negotiation or feature support between differin...
    Definition protocol-types.h:283
    +
    guac_protocol_status
    Set of all possible status codes returned by protocol operations.
    Definition protocol-types.h:44
    +
    Type definitions related to the guac_socket object.
    +
    Type definitions related to Guacamole protocol streams.
    +
    Guacamole proxy client.
    Definition client.h:48
    +
    Represents a single layer within the Guacamole protocol.
    Definition layer.h:34
    +
    Represents a single object within the Guacamole protocol.
    Definition object.h:32
    +
    A pool of integers.
    Definition pool.h:34
    +
    The core I/O object of Guacamole.
    Definition socket.h:39
    +
    Represents a single stream within the Guacamole protocol.
    Definition stream.h:32
    +
    Information exposed by the remote client during the connection handshake which can be used by a clien...
    Definition user.h:46
    +
    const char ** audio_mimetypes
    NULL-terminated array of client-supported audio mimetypes.
    Definition user.h:68
    +
    const char * name
    The human-readable name of the Guacamole user, supplied by the client during the handshake.
    Definition user.h:111
    +
    int optimal_height
    The number of pixels the remote client requests for the display height.
    Definition user.h:62
    +
    const char * timezone
    The timezone of the remote system.
    Definition user.h:97
    +
    int optimal_width
    The number of pixels the remote client requests for the display width.
    Definition user.h:54
    +
    guac_protocol_version protocol_version
    The Guacamole protocol version that the remote system supports, allowing for feature support to be ne...
    Definition user.h:103
    +
    const char ** image_mimetypes
    NULL-terminated array of client-supported image mimetypes.
    Definition user.h:81
    +
    int optimal_resolution
    The DPI of the physical remote display if configured for the optimal width/height combination describ...
    Definition user.h:90
    +
    const char ** video_mimetypes
    NULL-terminated array of client-supported video mimetypes.
    Definition user.h:74
    +
    Representation of a physical connection within a larger logical connection which may be shared.
    Definition user.h:115
    +
    guac_user_info info
    Information structure containing properties exposed by the remote user during the initial handshake p...
    Definition user.h:190
    +
    guac_user_mouse_handler * mouse_handler
    Handler for mouse events sent by the Gaucamole web-client.
    Definition user.h:247
    +
    guac_user_put_handler * put_handler
    Handler for put events sent by the Guacamole web-client.
    Definition user.h:475
    +
    guac_user_leave_handler * leave_handler
    Handler for leave events fired by the guac_client when a guac_user is leaving an active connection.
    Definition user.h:435
    +
    int active
    Non-zero if this user is active (connected), and zero otherwise.
    Definition user.h:149
    +
    guac_user_sync_handler * sync_handler
    Handler for sync events sent by the Guacamole web-client.
    Definition user.h:416
    +
    int owner
    Non-zero if this user is the owner of the associated connection, zero otherwise.
    Definition user.h:141
    +
    guac_user_size_handler * size_handler
    Handler for size events sent by the Guacamole web-client.
    Definition user.h:303
    +
    guac_user_audio_handler * audio_handler
    Handler for audio events sent by the Guacamole web-client.
    Definition user.h:497
    +
    int processing_lag
    The overall lag experienced by the user relative to the stream of frames, roughly excluding network l...
    Definition user.h:184
    +
    guac_client * client
    The guac_client to which this user belongs.
    Definition user.h:120
    +
    guac_user_touch_handler * touch_handler
    Handler for touch events sent by the Guacamole web-client.
    Definition user.h:539
    +
    guac_user_clipboard_handler * clipboard_handler
    Handler for clipboard events sent by the Guacamole web-client.
    Definition user.h:286
    +
    guac_user_end_handler * end_handler
    Handler for stream end events sent by the Guacamole web-client.
    Definition user.h:397
    +
    guac_socket * socket
    This user's actual socket.
    Definition user.h:127
    +
    guac_user_blob_handler * blob_handler
    Handler for blob events sent by the Guacamole web-client.
    Definition user.h:379
    +
    guac_user_file_handler * file_handler
    Handler for file events sent by the Guacamole web-client.
    Definition user.h:322
    +
    char * user_id
    The unique identifier allocated for this user, which may be used within the Guacamole protocol to ref...
    Definition user.h:135
    +
    guac_user_argv_handler * argv_handler
    Handler for argv events (updates to the connection parameters of an in-progress connection) sent by t...
    Definition user.h:518
    +
    guac_user_key_handler * key_handler
    Handler for key events sent by the Guacamole web-client.
    Definition user.h:265
    +
    int last_frame_duration
    The duration of the last frame rendered by the user, in milliseconds.
    Definition user.h:178
    +
    void * data
    Arbitrary user-specific data.
    Definition user.h:220
    +
    guac_user_ack_handler * ack_handler
    Handler for ack events sent by the Guacamole web-client.
    Definition user.h:360
    +
    guac_user_get_handler * get_handler
    Handler for get events sent by the Guacamole web-client.
    Definition user.h:455
    +
    guac_timestamp last_received_timestamp
    The time (in milliseconds) of receipt of the last sync message from the user.
    Definition user.h:171
    +
    guac_user_pipe_handler * pipe_handler
    Handler for pipe events sent by the Guacamole web-client.
    Definition user.h:341
    +
    Type definitions related to Guacamole protocol timestamps.
    +
    int64_t guac_timestamp
    An arbitrary timestamp denoting a relative time value in milliseconds.
    Definition timestamp-types.h:34
    +
    Constants related to the Guacamole user structure, guac_user.
    +
    Function type definitions related to the guac_user object.
    +
    int guac_user_clipboard_handler(guac_user *user, guac_stream *stream, char *mimetype)
    Handler for Guacamole clipboard streams received from a user.
    Definition user-fntypes.h:206
    +
    int guac_user_audio_handler(guac_user *user, guac_stream *stream, char *mimetype)
    Handler for Guacamole audio streams received from a user.
    Definition user-fntypes.h:183
    +
    int guac_user_mouse_handler(guac_user *user, int x, int y, int button_mask)
    Handler for Guacamole mouse events, invoked when a "mouse" instruction has been received from a user.
    Definition user-fntypes.h:95
    +
    int guac_user_key_handler(guac_user *user, int keysym, int pressed)
    Handler for Guacamole key events, invoked when a "key" event has been received from a user.
    Definition user-fntypes.h:161
    +
    int guac_user_argv_handler(guac_user *user, guac_stream *stream, char *mimetype, char *name)
    Handler for Guacamole argument value (argv) streams received from a user.
    Definition user-fntypes.h:312
    +
    int guac_user_file_handler(guac_user *user, guac_stream *stream, char *mimetype, char *filename)
    Handler for Guacamole file streams received from a user.
    Definition user-fntypes.h:253
    +
    int guac_user_ack_handler(guac_user *user, guac_stream *stream, char *error, guac_protocol_status status)
    Handler for Guacamole stream "ack" instructions.
    Definition user-fntypes.h:364
    +
    int guac_user_leave_handler(guac_user *user)
    Handler for Guacamole leave events.
    Definition user-fntypes.h:430
    +
    int guac_user_sync_handler(guac_user *user, guac_timestamp timestamp)
    Handler for Guacamole sync events.
    Definition user-fntypes.h:451
    +
    int guac_user_pipe_handler(guac_user *user, guac_stream *stream, char *mimetype, char *name)
    Handler for Guacamole pipe streams received from a user.
    Definition user-fntypes.h:282
    +
    int guac_user_get_handler(guac_user *user, guac_object *object, char *name)
    Handler for Guacamole object get requests.
    Definition user-fntypes.h:472
    +
    int guac_user_size_handler(guac_user *user, int width, int height)
    Handler for Guacamole size events, invoked when a "size" instruction has been received from a user.
    Definition user-fntypes.h:227
    +
    int guac_user_touch_handler(guac_user *user, int id, int x, int y, int x_radius, int y_radius, double angle, double force)
    Handler for Guacamole touch events, invoked when a "touch" instruction has been received from a user.
    Definition user-fntypes.h:140
    +
    int guac_user_blob_handler(guac_user *user, guac_stream *stream, void *data, int length)
    Handler for Guacamole stream blobs.
    Definition user-fntypes.h:335
    +
    int guac_user_end_handler(guac_user *user, guac_stream *stream)
    Handler for Guacamole stream "end" instructions.
    Definition user-fntypes.h:381
    +
    int guac_user_put_handler(guac_user *user, guac_object *object, guac_stream *stream, char *mimetype, char *name)
    Handler for Guacamole object put requests.
    Definition user-fntypes.h:499
    +
    Type definitions related to the guac_user object.
    +
    int guac_user_handle_instruction(guac_user *user, const char *opcode, int argc, char **argv)
    Call the appropriate handler defined by the given user for the given instruction.
    +
    int guac_user_parse_args_int(guac_user *user, const char **arg_names, const char **argv, int index, int default_value)
    Automatically handles a single integer argument received from a joining user, returning the integer v...
    +
    int guac_user_supports_required(guac_user *user)
    Returns whether the given user supports the "required" instruction.
    +
    void guac_user_abort(guac_user *user, guac_protocol_status status, const char *format,...)
    Signals the given user to stop gracefully, while also signalling via the Guacamole protocol that an e...
    +
    int guac_user_supports_webp(guac_user *user)
    Returns whether the given user supports WebP.
    +
    int guac_user_handle_connection(guac_user *user, int usec_timeout)
    Handles all I/O for the portion of a user's Guacamole connection following the initial "select" instr...
    +
    void guac_user_stream_png(guac_user *user, guac_socket *socket, guac_composite_mode mode, const guac_layer *layer, int x, int y, cairo_surface_t *surface)
    Streams the image data of the given surface over an image stream ("img" instruction) as PNG-encoded d...
    +
    guac_user * guac_user_alloc()
    Allocates a new, blank user, not associated with any specific client or socket.
    +
    void guac_user_free_stream(guac_user *user, guac_stream *stream)
    Returns the given stream to the pool of available streams, such that it can be reused by any subseque...
    +
    char * guac_user_parse_args_string(guac_user *user, const char **arg_names, const char **argv, int index, const char *default_value)
    Automatically handles a single argument received from a joining user, returning a newly-allocated str...
    +
    guac_stream * guac_user_alloc_stream(guac_user *user)
    Allocates a new stream.
    +
    guac_object * guac_user_alloc_object(guac_user *user)
    Allocates a new object.
    +
    int guac_user_parse_args_boolean(guac_user *user, const char **arg_names, const char **argv, int index, int default_value)
    Automatically handles a single boolean argument received from a joining user, returning the value of ...
    +
    int guac_user_supports_msg(guac_user *user)
    Returns whether the given user supports the "msg" instruction.
    +
    void guac_user_stream_jpeg(guac_user *user, guac_socket *socket, guac_composite_mode mode, const guac_layer *layer, int x, int y, cairo_surface_t *surface, int quality)
    Streams the image data of the given surface over an image stream ("img" instruction) as JPEG-encoded ...
    +
    void guac_user_free(guac_user *user)
    Frees the given user and all associated resources.
    +
    void guac_user_stop(guac_user *user)
    Signals the given user that it must disconnect, or advises cooperating services that the given user i...
    +
    void guac_user_stream_argv(guac_user *user, guac_socket *socket, const char *mimetype, const char *name, const char *value)
    Streams the given connection parameter value over an argument value stream ("argv" instruction),...
    +
    void guac_user_log(guac_user *user, guac_client_log_level level, const char *format,...)
    Writes a message in the log used by the given user.
    +
    void guac_user_free_object(guac_user *user, guac_object *object)
    Returns the given object to the pool of available objects, such that it can be reused by any subseque...
    +
    void vguac_user_abort(guac_user *user, guac_protocol_status status, const char *format, va_list ap)
    Signals the given user to stop gracefully, while also signalling via the Guacamole protocol that an e...
    +
    void guac_user_stream_webp(guac_user *user, guac_socket *socket, guac_composite_mode mode, const guac_layer *layer, int x, int y, cairo_surface_t *surface, int quality, int lossless)
    Streams the image data of the given surface over an image stream ("img" instruction) as WebP-encoded ...
    +
    void vguac_user_log(guac_user *user, guac_client_log_level level, const char *format, va_list ap)
    Writes a message in the log used by the given user.
    +
    + + + + diff --git a/doc/1.5.5/libguac/wol-constants_8h.html b/doc/1.5.5/libguac/wol-constants_8h.html new file mode 100644 index 000000000..fcd622b3f --- /dev/null +++ b/doc/1.5.5/libguac/wol-constants_8h.html @@ -0,0 +1,145 @@ + + + + + + + +libguac: guacamole/wol-constants.h File Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    wol-constants.h File Reference
    +
    +
    + +

    Header file that provides constants and defaults related to libguac Wake-on-LAN support. +More...

    + +

    Go to the source code of this file.

    + + + + + + + + + + + +

    +Macros

    +#define GUAC_WOL_LOCAL_IPV4_BROADCAST   "255.255.255.255"
     The value for the local IPv4 broadcast address.
     
    #define GUAC_WOL_PACKET_SIZE   102
     The size of the magic Wake-on-LAN packet to send to wake a remote host.
     
    #define GUAC_WOL_PORT   9
     The port number that the magic packet should contain as the destination.
     
    +

    Detailed Description

    +

    Header file that provides constants and defaults related to libguac Wake-on-LAN support.

    +

    Macro Definition Documentation

    + +

    ◆ GUAC_WOL_PACKET_SIZE

    + +
    +
    + + + + +
    #define GUAC_WOL_PACKET_SIZE   102
    +
    + +

    The size of the magic Wake-on-LAN packet to send to wake a remote host.

    +

    This consists of 6 bytes of 0xFF, and then the MAC address repeated 16 times. https://en.wikipedia.org/wiki/Wake-on-LAN#Magic_packet

    + +
    +
    + +

    ◆ GUAC_WOL_PORT

    + +
    +
    + + + + +
    #define GUAC_WOL_PORT   9
    +
    + +

    The port number that the magic packet should contain as the destination.

    +

    In reality this doesn't matter all that much, since the packet is not usually processed by a full IP stack, but defining one is considered a standard practice.

    + +
    +
    +
    + + + + diff --git a/doc/1.5.5/libguac/wol-constants_8h_source.html b/doc/1.5.5/libguac/wol-constants_8h_source.html new file mode 100644 index 000000000..283d135cc --- /dev/null +++ b/doc/1.5.5/libguac/wol-constants_8h_source.html @@ -0,0 +1,122 @@ + + + + + + + +libguac: guacamole/wol-constants.h Source File + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    wol-constants.h
    +
    +
    +Go to the documentation of this file.
    1/*
    +
    2 * Licensed to the Apache Software Foundation (ASF) under one
    +
    3 * or more contributor license agreements. See the NOTICE file
    +
    4 * distributed with this work for additional information
    +
    5 * regarding copyright ownership. The ASF licenses this file
    +
    6 * to you under the Apache License, Version 2.0 (the
    +
    7 * "License"); you may not use this file except in compliance
    +
    8 * with the License. You may obtain a copy of the License at
    +
    9 *
    +
    10 * http://www.apache.org/licenses/LICENSE-2.0
    +
    11 *
    +
    12 * Unless required by applicable law or agreed to in writing,
    +
    13 * software distributed under the License is distributed on an
    +
    14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    15 * KIND, either express or implied. See the License for the
    +
    16 * specific language governing permissions and limitations
    +
    17 * under the License.
    +
    18 */
    +
    19
    +
    20#ifndef GUAC_WOL_CONSTANTS_H
    +
    21#define GUAC_WOL_CONSTANTS_H
    +
    22
    +
    33#define GUAC_WOL_LOCAL_IPV4_BROADCAST "255.255.255.255"
    +
    34
    +
    40#define GUAC_WOL_PACKET_SIZE 102
    +
    41
    +
    48#define GUAC_WOL_PORT 9
    +
    49
    +
    50#endif /* GUAC_WOL_CONSTANTS_H */
    +
    51
    +
    + + + + diff --git a/doc/1.5.5/libguac/wol_8h.html b/doc/1.5.5/libguac/wol_8h.html new file mode 100644 index 000000000..511cda40c --- /dev/null +++ b/doc/1.5.5/libguac/wol_8h.html @@ -0,0 +1,142 @@ + + + + + + + +libguac: guacamole/wol.h File Reference + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    wol.h File Reference
    +
    +
    + +

    Header that provides functions and structures related to Wake-on-LAN support in libguac. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Functions

    int guac_wol_wake (const char *mac_addr, const char *broadcast_addr, const unsigned short udp_port)
     Send the wake-up packet to the specified destination, returning zero if the wake was sent successfully, or non-zero if an error occurs sending the wake packet.
     
    +

    Detailed Description

    +

    Header that provides functions and structures related to Wake-on-LAN support in libguac.

    +

    Function Documentation

    + +

    ◆ guac_wol_wake()

    + +
    +
    + + + + + + + + + + + + + + + + +
    int guac_wol_wake (const char * mac_addr,
    const char * broadcast_addr,
    const unsigned short udp_port )
    +
    + +

    Send the wake-up packet to the specified destination, returning zero if the wake was sent successfully, or non-zero if an error occurs sending the wake packet.

    +

    Note that the return value does not specify whether the system actually wakes up successfully, only whether or not the packet is transmitted.

    +
    Parameters
    + + + + +
    mac_addrThe MAC address to place in the magic Wake-on-LAN packet.
    broadcast_addrThe broadcast address to which to send the magic Wake-on-LAN packet.
    udp_portThe UDP port to use when sending the WoL packet.
    +
    +
    +
    Returns
    Zero if the packet is successfully sent to the destination; non-zero if the packet cannot be sent.
    + +
    +
    +
    + + + + diff --git a/doc/1.5.5/libguac/wol_8h_source.html b/doc/1.5.5/libguac/wol_8h_source.html new file mode 100644 index 000000000..091be4089 --- /dev/null +++ b/doc/1.5.5/libguac/wol_8h_source.html @@ -0,0 +1,123 @@ + + + + + + + +libguac: guacamole/wol.h Source File + + + + + + + + + + + +
    +
    + + + + + + +
    +
    libguac 1.5.5 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    wol.h
    +
    +
    +Go to the documentation of this file.
    1/*
    +
    2 * Licensed to the Apache Software Foundation (ASF) under one
    +
    3 * or more contributor license agreements. See the NOTICE file
    +
    4 * distributed with this work for additional information
    +
    5 * regarding copyright ownership. The ASF licenses this file
    +
    6 * to you under the Apache License, Version 2.0 (the
    +
    7 * "License"); you may not use this file except in compliance
    +
    8 * with the License. You may obtain a copy of the License at
    +
    9 *
    +
    10 * http://www.apache.org/licenses/LICENSE-2.0
    +
    11 *
    +
    12 * Unless required by applicable law or agreed to in writing,
    +
    13 * software distributed under the License is distributed on an
    +
    14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    15 * KIND, either express or implied. See the License for the
    +
    16 * specific language governing permissions and limitations
    +
    17 * under the License.
    +
    18 */
    +
    19
    +
    20#ifndef GUAC_WOL_H
    +
    21#define GUAC_WOL_H
    +
    22
    +
    30#include "wol-constants.h"
    +
    31
    +
    52int guac_wol_wake(const char* mac_addr, const char* broadcast_addr,
    +
    53 const unsigned short udp_port);
    +
    54
    +
    55#endif /* GUAC_WOL_H */
    +
    56
    +
    Header file that provides constants and defaults related to libguac Wake-on-LAN support.
    +
    int guac_wol_wake(const char *mac_addr, const char *broadcast_addr, const unsigned short udp_port)
    Send the wake-up packet to the specified destination, returning zero if the wake was sent successfull...
    +
    + + + +
  • )CdQ3F!eKyF|9D2V!F-rhUpJ8J+l7g0OBBVM#THTI&O8)>EGR%u6Gd9D9pm5!S}%&6DxW}^f|7=Y zPoO3(pTZY#?(7(|!5}5Nn!D%DotZmlW)?smSMcEE<^aT$6gw#LlwubPI9BYTffL0! zyu-EPCnz{Y#ZR&1d{F!hr_NW!&#~mXis$jseXDo@U)-kR7sMBeUt-T&RQw9By@BF9 z3f?cpmw4m-R{RHncaC**(V--ipJ<~6LkW2fi6RVfh%vcYt9@z>&M0LBSf-Q|Et8wU zCt43_*JB)mHR71wb`K@~5Cizwp{`A2uuJ^_Bcl3k{7ree$8&@l?;^2nagS+NqCDBfkB?pJws=PbK~+A7|2 z{gCDJKI-i%m4LD$n{WIwWR|c+NRy`C1#)1sSBI7FiH6z-QkhY&Q_|%I3exQ zQ`X1M?cZH4^M&BSyr;2z$+^SZUMA*0001Z+HKHROw(}?!13=vX`$@Br+fGR zZ%e`5O6%Txi$Yrz0gF{}p>fY>OnlS0Uevf}oDXW;D{d2gcE<2)oFcV80@g$H)63L{HN*d{8kVzKVW(;E)$9N_%kx5Ku3R9WJbY?JW^G#k0Wdx>E$NBBVtKRLiL?sA*s%w`TdsNz1=+~FRNdB8&+@iBD0 zXFTC4C-8-Cwv(4U=LLQ~^Oa4^rG|OTr5?ItoaPMYxxh`%a*kVU z;HYGAjq6;IY{`*awo0DlOMw(hkrYdb(O28l;MYvSx*ChcQW4f^QL5UdE3HbqvbxB$pfSg`>Cj#;?~00;nMAg}==M6d%RaIhCe zARtS)01i=0um)3FSgr#ump{<1pq_<0a34Kp8x=7I1^|9 literal 0 HcmV?d00001 diff --git a/doc/1.5.5/guacamole-common-js/fonts/OpenSans-Regular-webfont.eot b/doc/1.5.5/guacamole-common-js/fonts/OpenSans-Regular-webfont.eot new file mode 100644 index 0000000000000000000000000000000000000000..6bbc3cf58cb011a6b4bf3cb1612ce212608f7274 GIT binary patch literal 19836 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/doc/1.5.5/guacamole-common-js/fonts/OpenSans-Regular-webfont.woff b/doc/1.5.5/guacamole-common-js/fonts/OpenSans-Regular-webfont.woff new file mode 100644 index 0000000000000000000000000000000000000000..e231183dce4c7b452afc9e7799586fd285e146f4 GIT binary patch literal 22660 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 ML;wL%uV=LY00kR;TmS$7 literal 0 HcmV?d00001 diff --git a/doc/1.5.5/guacamole-common-js/index.html b/doc/1.5.5/guacamole-common-js/index.html new file mode 100644 index 000000000..03a9d3b93 --- /dev/null +++ b/doc/1.5.5/guacamole-common-js/index.html @@ -0,0 +1,65 @@ + + + + + JSDoc: Home + + + + + + + + + + +