From 7d7a0260bf778a2c3134ad2c04330c006474bc16 Mon Sep 17 00:00:00 2001 From: Matt Hortman Date: Tue, 21 Feb 2012 11:20:32 -0500 Subject: [PATCH 1/8] added constants for raster operations --- libguac/include/protocol.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) mode change 100644 => 100755 libguac/include/protocol.h diff --git a/libguac/include/protocol.h b/libguac/include/protocol.h old mode 100644 new mode 100755 index d7d282ed..822b0566 --- a/libguac/include/protocol.h +++ b/libguac/include/protocol.h @@ -90,7 +90,12 @@ typedef enum guac_composite_mode { GUAC_COMP_IN = 0x4, /* 0100 */ GUAC_COMP_OUT = 0x8, /* 1000 */ GUAC_COMP_RATOP = 0x9, /* 1001 */ - GUAC_COMP_SRC = 0xC /* 1100 */ + GUAC_COMP_SRC = 0xC, /* 1100 */ + + GUAC_COMP_OR = 0xF0, /* perform OR ternary raster operation */ + GUAC_COMP_AND = 0xF1, /* perform AND ternary raster operation */ + GUAC_COMP_XOR2 = 0xF2, /* perform XOR ternary raster operation */ + GUAC_COMP_NOR = 0xF3 /* perform NOR ternary raster operation */ } guac_composite_mode; From e110b9ce92dbfeeee68b6cb50ffeba21f3399235 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Thu, 23 Feb 2012 14:44:48 -0800 Subject: [PATCH 2/8] LICENSE and Doxyfile should be present in source tarball (fixes ticket #84). --- libguac/Makefile.am | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libguac/Makefile.am b/libguac/Makefile.am index 41bbc815..a0b2f5bd 100644 --- a/libguac/Makefile.am +++ b/libguac/Makefile.am @@ -48,3 +48,5 @@ libguac_la_SOURCES = src/client.c src/socket.c src/protocol.c src/client-handler libguac_la_LDFLAGS = -version-info 3:0:0 +EXTRA_DIST = LICENSE doc/Doxyfile + From f77e0dbcc8e1a10dddb76402ed492a11ca79783b Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Mon, 27 Feb 2012 01:02:04 -0800 Subject: [PATCH 3/8] Fully enumerate raster operations. --- libguac/include/protocol.h | 44 ++++++++++++++++++++++++++++++++++---- 1 file changed, 40 insertions(+), 4 deletions(-) diff --git a/libguac/include/protocol.h b/libguac/include/protocol.h index 8b6db447..5a13a65d 100755 --- a/libguac/include/protocol.h +++ b/libguac/include/protocol.h @@ -92,10 +92,46 @@ typedef enum guac_composite_mode { GUAC_COMP_RATOP = 0x9, /* 1001 */ GUAC_COMP_SRC = 0xC, /* 1100 */ - GUAC_COMP_OR = 0xF0, /* perform OR ternary raster operation */ - GUAC_COMP_AND = 0xF1, /* perform AND ternary raster operation */ - GUAC_COMP_XOR2 = 0xF2, /* perform XOR ternary raster operation */ - GUAC_COMP_NOR = 0xF3 /* perform NOR ternary raster operation */ + /* Bitwise composite operations (binary) */ + + /* + * A: S' & D' + * B: S' & D + * C: S & D' + * D: S & D + * + * 0 = Active, 1 = Inactive + */ + + /* ABCD */ + GUAC_COMP_BINARY_BLACK = 0x10, /* 0000 */ + GUAC_COMP_BINARY_WHITE = 0x1F, /* 1111 */ + + GUAC_COMP_BINARY_SRC = 0x13, /* 0011 */ + GUAC_COMP_BINARY_DEST = 0x15, /* 0101 */ + GUAC_COMP_BINARY_NSRC = 0x1C, /* 1100 */ + GUAC_COMP_BINARY_NDEST = 0x1A, /* 1010 */ + + GUAC_COMP_BINARY_AND = 0x11, /* 0001 */ + GUAC_COMP_BINARY_NAND = 0x1E, /* 1110 */ + + GUAC_COMP_BINARY_OR = 0x17, /* 0111 */ + GUAC_COMP_BINARY_NOR = 0x18, /* 1000 */ + + GUAC_COMP_BINARY_XOR = 0x16, /* 0110 */ + GUAC_COMP_BINARY_XNOR = 0x19, /* 1001 */ + + GUAC_COMP_BINARY_NSRC_AND = 0x14, /* 0100 */ + GUAC_COMP_BINARY_NSRC_NAND = 0x1B, /* 1011 */ + + GUAC_COMP_BINARY_NSRC_OR = 0x1D, /* 1101 */ + GUAC_COMP_BINARY_NSRC_NOR = 0x12, /* 0010 */ + + GUAC_COMP_BINARY_NDEST_AND = 0x12, /* 0010 */ + GUAC_COMP_BINARY_NDEST_NAND = 0x1D, /* 1101 */ + + GUAC_COMP_BINARY_NDEST_OR = 0x1B, /* 1011 */ + GUAC_COMP_BINARY_NDEST_NOR = 0x14 /* 0100 */ } guac_composite_mode; From 3942cabfd027cc0bd4d4e81968faabc2b54054c2 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Mon, 27 Feb 2012 10:26:58 -0800 Subject: [PATCH 4/8] Improved comments for raster ops. --- libguac/include/protocol.h | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/libguac/include/protocol.h b/libguac/include/protocol.h index 5a13a65d..5c957819 100755 --- a/libguac/include/protocol.h +++ b/libguac/include/protocol.h @@ -103,33 +103,41 @@ typedef enum guac_composite_mode { * 0 = Active, 1 = Inactive */ - /* ABCD */ + /* Constant functions */ /* ABCD */ GUAC_COMP_BINARY_BLACK = 0x10, /* 0000 */ GUAC_COMP_BINARY_WHITE = 0x1F, /* 1111 */ + /* Copy functions */ GUAC_COMP_BINARY_SRC = 0x13, /* 0011 */ GUAC_COMP_BINARY_DEST = 0x15, /* 0101 */ GUAC_COMP_BINARY_NSRC = 0x1C, /* 1100 */ GUAC_COMP_BINARY_NDEST = 0x1A, /* 1010 */ + /* AND / NAND */ GUAC_COMP_BINARY_AND = 0x11, /* 0001 */ GUAC_COMP_BINARY_NAND = 0x1E, /* 1110 */ + /* OR / NOR */ GUAC_COMP_BINARY_OR = 0x17, /* 0111 */ GUAC_COMP_BINARY_NOR = 0x18, /* 1000 */ + /* XOR / XNOR */ GUAC_COMP_BINARY_XOR = 0x16, /* 0110 */ GUAC_COMP_BINARY_XNOR = 0x19, /* 1001 */ + /* AND / NAND with inverted source */ GUAC_COMP_BINARY_NSRC_AND = 0x14, /* 0100 */ GUAC_COMP_BINARY_NSRC_NAND = 0x1B, /* 1011 */ + /* OR / NOR with inverted source */ GUAC_COMP_BINARY_NSRC_OR = 0x1D, /* 1101 */ GUAC_COMP_BINARY_NSRC_NOR = 0x12, /* 0010 */ + /* AND / NAND with inverted destination */ GUAC_COMP_BINARY_NDEST_AND = 0x12, /* 0010 */ GUAC_COMP_BINARY_NDEST_NAND = 0x1D, /* 1101 */ + /* OR / NOR with inverted destination */ GUAC_COMP_BINARY_NDEST_OR = 0x1B, /* 1011 */ GUAC_COMP_BINARY_NDEST_NOR = 0x14 /* 0100 */ From 13db6307b65cc1fa946bab6bde9aaaf397f2bb93 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Mon, 27 Feb 2012 10:27:46 -0800 Subject: [PATCH 5/8] Changed tabs to spaces. --- libguac/include/protocol.h | 40 +++++++++++++++++++------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/libguac/include/protocol.h b/libguac/include/protocol.h index 5c957819..2b347b1c 100755 --- a/libguac/include/protocol.h +++ b/libguac/include/protocol.h @@ -104,42 +104,42 @@ typedef enum guac_composite_mode { */ /* Constant functions */ /* ABCD */ - GUAC_COMP_BINARY_BLACK = 0x10, /* 0000 */ - GUAC_COMP_BINARY_WHITE = 0x1F, /* 1111 */ + GUAC_COMP_BINARY_BLACK = 0x10, /* 0000 */ + GUAC_COMP_BINARY_WHITE = 0x1F, /* 1111 */ /* Copy functions */ - GUAC_COMP_BINARY_SRC = 0x13, /* 0011 */ - GUAC_COMP_BINARY_DEST = 0x15, /* 0101 */ - GUAC_COMP_BINARY_NSRC = 0x1C, /* 1100 */ - GUAC_COMP_BINARY_NDEST = 0x1A, /* 1010 */ + GUAC_COMP_BINARY_SRC = 0x13, /* 0011 */ + GUAC_COMP_BINARY_DEST = 0x15, /* 0101 */ + GUAC_COMP_BINARY_NSRC = 0x1C, /* 1100 */ + GUAC_COMP_BINARY_NDEST = 0x1A, /* 1010 */ /* AND / NAND */ - GUAC_COMP_BINARY_AND = 0x11, /* 0001 */ - GUAC_COMP_BINARY_NAND = 0x1E, /* 1110 */ + GUAC_COMP_BINARY_AND = 0x11, /* 0001 */ + GUAC_COMP_BINARY_NAND = 0x1E, /* 1110 */ /* OR / NOR */ - GUAC_COMP_BINARY_OR = 0x17, /* 0111 */ - GUAC_COMP_BINARY_NOR = 0x18, /* 1000 */ + GUAC_COMP_BINARY_OR = 0x17, /* 0111 */ + GUAC_COMP_BINARY_NOR = 0x18, /* 1000 */ /* XOR / XNOR */ - GUAC_COMP_BINARY_XOR = 0x16, /* 0110 */ - GUAC_COMP_BINARY_XNOR = 0x19, /* 1001 */ + GUAC_COMP_BINARY_XOR = 0x16, /* 0110 */ + GUAC_COMP_BINARY_XNOR = 0x19, /* 1001 */ /* AND / NAND with inverted source */ - GUAC_COMP_BINARY_NSRC_AND = 0x14, /* 0100 */ - GUAC_COMP_BINARY_NSRC_NAND = 0x1B, /* 1011 */ + GUAC_COMP_BINARY_NSRC_AND = 0x14, /* 0100 */ + GUAC_COMP_BINARY_NSRC_NAND = 0x1B, /* 1011 */ /* OR / NOR with inverted source */ - GUAC_COMP_BINARY_NSRC_OR = 0x1D, /* 1101 */ - GUAC_COMP_BINARY_NSRC_NOR = 0x12, /* 0010 */ + GUAC_COMP_BINARY_NSRC_OR = 0x1D, /* 1101 */ + GUAC_COMP_BINARY_NSRC_NOR = 0x12, /* 0010 */ /* AND / NAND with inverted destination */ - GUAC_COMP_BINARY_NDEST_AND = 0x12, /* 0010 */ - GUAC_COMP_BINARY_NDEST_NAND = 0x1D, /* 1101 */ + GUAC_COMP_BINARY_NDEST_AND = 0x12, /* 0010 */ + GUAC_COMP_BINARY_NDEST_NAND = 0x1D, /* 1101 */ /* OR / NOR with inverted destination */ - GUAC_COMP_BINARY_NDEST_OR = 0x1B, /* 1011 */ - GUAC_COMP_BINARY_NDEST_NOR = 0x14 /* 0100 */ + GUAC_COMP_BINARY_NDEST_OR = 0x1B, /* 1011 */ + GUAC_COMP_BINARY_NDEST_NOR = 0x14 /* 0100 */ } guac_composite_mode; From 54cc87093a1cb8f63ddd2e85b9607a4b025bb176 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Mon, 27 Feb 2012 10:36:46 -0800 Subject: [PATCH 6/8] Removed execute permissions from source. --- libguac/include/protocol.h | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 libguac/include/protocol.h diff --git a/libguac/include/protocol.h b/libguac/include/protocol.h old mode 100755 new mode 100644 From 554d6e1ec1c86ba75c12187fe693864c9bcb4435 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Mon, 27 Feb 2012 12:28:12 -0800 Subject: [PATCH 7/8] Implemented transfer instruction, initial transfer function definitions. --- libguac/include/protocol.h | 77 +++++++++++++++++++++++++++----------- libguac/src/protocol.c | 27 +++++++++++++ 2 files changed, 82 insertions(+), 22 deletions(-) diff --git a/libguac/include/protocol.h b/libguac/include/protocol.h index 2b347b1c..1539c323 100644 --- a/libguac/include/protocol.h +++ b/libguac/include/protocol.h @@ -103,45 +103,54 @@ typedef enum guac_composite_mode { * 0 = Active, 1 = Inactive */ - /* Constant functions */ /* ABCD */ - GUAC_COMP_BINARY_BLACK = 0x10, /* 0000 */ - GUAC_COMP_BINARY_WHITE = 0x1F, /* 1111 */ +} guac_composite_mode; + + +/** + * Default transfer functions. There is no current facility in the + * Guacamole protocol to define custom transfer functions. + */ +typedef enum guac_transfer_function { + + /* Constant functions */ /* ABCD */ + GUAC_TRANSFER_BINARY_BLACK = 0x10, /* 0000 */ + GUAC_TRANSFER_BINARY_WHITE = 0x1F, /* 1111 */ /* Copy functions */ - GUAC_COMP_BINARY_SRC = 0x13, /* 0011 */ - GUAC_COMP_BINARY_DEST = 0x15, /* 0101 */ - GUAC_COMP_BINARY_NSRC = 0x1C, /* 1100 */ - GUAC_COMP_BINARY_NDEST = 0x1A, /* 1010 */ + GUAC_TRANSFER_BINARY_SRC = 0x13, /* 0011 */ + GUAC_TRANSFER_BINARY_DEST = 0x15, /* 0101 */ + GUAC_TRANSFER_BINARY_NSRC = 0x1C, /* 1100 */ + GUAC_TRANSFER_BINARY_NDEST = 0x1A, /* 1010 */ /* AND / NAND */ - GUAC_COMP_BINARY_AND = 0x11, /* 0001 */ - GUAC_COMP_BINARY_NAND = 0x1E, /* 1110 */ + GUAC_TRANSFER_BINARY_AND = 0x11, /* 0001 */ + GUAC_TRANSFER_BINARY_NAND = 0x1E, /* 1110 */ /* OR / NOR */ - GUAC_COMP_BINARY_OR = 0x17, /* 0111 */ - GUAC_COMP_BINARY_NOR = 0x18, /* 1000 */ + GUAC_TRANSFER_BINARY_OR = 0x17, /* 0111 */ + GUAC_TRANSFER_BINARY_NOR = 0x18, /* 1000 */ /* XOR / XNOR */ - GUAC_COMP_BINARY_XOR = 0x16, /* 0110 */ - GUAC_COMP_BINARY_XNOR = 0x19, /* 1001 */ + GUAC_TRANSFER_BINARY_XOR = 0x16, /* 0110 */ + GUAC_TRANSFER_BINARY_XNOR = 0x19, /* 1001 */ /* AND / NAND with inverted source */ - GUAC_COMP_BINARY_NSRC_AND = 0x14, /* 0100 */ - GUAC_COMP_BINARY_NSRC_NAND = 0x1B, /* 1011 */ + GUAC_TRANSFER_BINARY_NSRC_AND = 0x14, /* 0100 */ + GUAC_TRANSFER_BINARY_NSRC_NAND = 0x1B, /* 1011 */ /* OR / NOR with inverted source */ - GUAC_COMP_BINARY_NSRC_OR = 0x1D, /* 1101 */ - GUAC_COMP_BINARY_NSRC_NOR = 0x12, /* 0010 */ + GUAC_TRANSFER_BINARY_NSRC_OR = 0x1D, /* 1101 */ + GUAC_TRANSFER_BINARY_NSRC_NOR = 0x12, /* 0010 */ /* AND / NAND with inverted destination */ - GUAC_COMP_BINARY_NDEST_AND = 0x12, /* 0010 */ - GUAC_COMP_BINARY_NDEST_NAND = 0x1D, /* 1101 */ + GUAC_TRANSFER_BINARY_NDEST_AND = 0x12, /* 0010 */ + GUAC_TRANSFER_BINARY_NDEST_NAND = 0x1D, /* 1101 */ /* OR / NOR with inverted destination */ - GUAC_COMP_BINARY_NDEST_OR = 0x1B, /* 1011 */ - GUAC_COMP_BINARY_NDEST_NOR = 0x14 /* 0100 */ + GUAC_TRANSFER_BINARY_NDEST_OR = 0x1B, /* 1011 */ + GUAC_TRANSFER_BINARY_NDEST_NOR = 0x14 /* 0100 */ -} guac_composite_mode; +} guac_transfer_function; typedef struct guac_layer guac_layer; @@ -325,6 +334,30 @@ 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 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. + * + * @param socket The guac_socket connection to use. + * @param srcl The source layer. + * @param srcx The X coordinate of the source rectangle. + * @param srcy The Y coordinate of the source rectangle. + * @param w The width of the source rectangle. + * @param h The height of the source rectangle. + * @param fn The transfer function to use. + * @param dstl The destination layer. + * @param dstx The X coordinate of the destination, where the source rectangle + * should be copied. + * @param dsty The Y coordinate of the destination, where the source rectangle + * should be copied. + * @return Zero on success, non-zero on error. + */ +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 rect instruction over the given guac_socket connection. * diff --git a/libguac/src/protocol.c b/libguac/src/protocol.c index 1075e46c..58e1d7f7 100644 --- a/libguac/src/protocol.c +++ b/libguac/src/protocol.c @@ -204,6 +204,33 @@ int guac_protocol_send_copy(guac_socket* socket, } +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) { + + return + guac_socket_write_string(socket, "8.transfer,") + || __guac_socket_write_length_int(socket, srcl->index) + || guac_socket_write_string(socket, ",") + || __guac_socket_write_length_int(socket, srcx) + || guac_socket_write_string(socket, ",") + || __guac_socket_write_length_int(socket, srcy) + || guac_socket_write_string(socket, ",") + || __guac_socket_write_length_int(socket, w) + || guac_socket_write_string(socket, ",") + || __guac_socket_write_length_int(socket, h) + || guac_socket_write_string(socket, ",") + || __guac_socket_write_length_int(socket, fn) + || guac_socket_write_string(socket, ",") + || __guac_socket_write_length_int(socket, dstl->index) + || guac_socket_write_string(socket, ",") + || __guac_socket_write_length_int(socket, dstx) + || guac_socket_write_string(socket, ",") + || __guac_socket_write_length_int(socket, dsty) + || guac_socket_write_string(socket, ";"); + +} + int guac_protocol_send_rect(guac_socket* socket, guac_composite_mode mode, const guac_layer* layer, int x, int y, int width, int height, From c55bef0c4144a5efc9ca864392b3e8da23b34928 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Mon, 27 Feb 2012 13:14:19 -0800 Subject: [PATCH 8/8] Fix transfer function indices. --- libguac/include/protocol.h | 42 +++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/libguac/include/protocol.h b/libguac/include/protocol.h index 1539c323..11727fec 100644 --- a/libguac/include/protocol.h +++ b/libguac/include/protocol.h @@ -112,43 +112,43 @@ typedef enum guac_composite_mode { */ typedef enum guac_transfer_function { - /* Constant functions */ /* ABCD */ - GUAC_TRANSFER_BINARY_BLACK = 0x10, /* 0000 */ - GUAC_TRANSFER_BINARY_WHITE = 0x1F, /* 1111 */ + /* Constant functions */ /* ABCD */ + GUAC_TRANSFER_BINARY_BLACK = 0x0, /* 0000 */ + GUAC_TRANSFER_BINARY_WHITE = 0xF, /* 1111 */ /* Copy functions */ - GUAC_TRANSFER_BINARY_SRC = 0x13, /* 0011 */ - GUAC_TRANSFER_BINARY_DEST = 0x15, /* 0101 */ - GUAC_TRANSFER_BINARY_NSRC = 0x1C, /* 1100 */ - GUAC_TRANSFER_BINARY_NDEST = 0x1A, /* 1010 */ + GUAC_TRANSFER_BINARY_SRC = 0x3, /* 0011 */ + GUAC_TRANSFER_BINARY_DEST = 0x5, /* 0101 */ + GUAC_TRANSFER_BINARY_NSRC = 0xC, /* 1100 */ + GUAC_TRANSFER_BINARY_NDEST = 0xA, /* 1010 */ /* AND / NAND */ - GUAC_TRANSFER_BINARY_AND = 0x11, /* 0001 */ - GUAC_TRANSFER_BINARY_NAND = 0x1E, /* 1110 */ + GUAC_TRANSFER_BINARY_AND = 0x1, /* 0001 */ + GUAC_TRANSFER_BINARY_NAND = 0xE, /* 1110 */ /* OR / NOR */ - GUAC_TRANSFER_BINARY_OR = 0x17, /* 0111 */ - GUAC_TRANSFER_BINARY_NOR = 0x18, /* 1000 */ + GUAC_TRANSFER_BINARY_OR = 0x7, /* 0111 */ + GUAC_TRANSFER_BINARY_NOR = 0x8, /* 1000 */ /* XOR / XNOR */ - GUAC_TRANSFER_BINARY_XOR = 0x16, /* 0110 */ - GUAC_TRANSFER_BINARY_XNOR = 0x19, /* 1001 */ + GUAC_TRANSFER_BINARY_XOR = 0x6, /* 0110 */ + GUAC_TRANSFER_BINARY_XNOR = 0x9, /* 1001 */ /* AND / NAND with inverted source */ - GUAC_TRANSFER_BINARY_NSRC_AND = 0x14, /* 0100 */ - GUAC_TRANSFER_BINARY_NSRC_NAND = 0x1B, /* 1011 */ + GUAC_TRANSFER_BINARY_NSRC_AND = 0x4, /* 0100 */ + GUAC_TRANSFER_BINARY_NSRC_NAND = 0xB, /* 1011 */ /* OR / NOR with inverted source */ - GUAC_TRANSFER_BINARY_NSRC_OR = 0x1D, /* 1101 */ - GUAC_TRANSFER_BINARY_NSRC_NOR = 0x12, /* 0010 */ + GUAC_TRANSFER_BINARY_NSRC_OR = 0xD, /* 1101 */ + GUAC_TRANSFER_BINARY_NSRC_NOR = 0x2, /* 0010 */ /* AND / NAND with inverted destination */ - GUAC_TRANSFER_BINARY_NDEST_AND = 0x12, /* 0010 */ - GUAC_TRANSFER_BINARY_NDEST_NAND = 0x1D, /* 1101 */ + GUAC_TRANSFER_BINARY_NDEST_AND = 0x2, /* 0010 */ + GUAC_TRANSFER_BINARY_NDEST_NAND = 0xD, /* 1101 */ /* OR / NOR with inverted destination */ - GUAC_TRANSFER_BINARY_NDEST_OR = 0x1B, /* 1011 */ - GUAC_TRANSFER_BINARY_NDEST_NOR = 0x14 /* 0100 */ + GUAC_TRANSFER_BINARY_NDEST_OR = 0xB, /* 1011 */ + GUAC_TRANSFER_BINARY_NDEST_NOR = 0x4 /* 0100 */ } guac_transfer_function;