GUACAMOLE-313: Add function for sending "key" instructions.

Project: http://git-wip-us.apache.org/repos/asf/guacamole-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/guacamole-server/commit/b21aef56
Tree: http://git-wip-us.apache.org/repos/asf/guacamole-server/tree/b21aef56
Diff: http://git-wip-us.apache.org/repos/asf/guacamole-server/diff/b21aef56

Branch: refs/heads/master
Commit: b21aef565b12bf074355cd13bdf3270bc4eba4ab
Parents: 81a0e66
Author: Michael Jumper <mjum...@apache.org>
Authored: Mon Nov 27 23:30:13 2017 -0800
Committer: Michael Jumper <mjum...@apache.org>
Committed: Fri Jan 26 16:42:14 2018 -0800

----------------------------------------------------------------------
 src/libguac/guacamole/protocol.h | 26 ++++++++++++++++++++++++++
 src/libguac/protocol.c           | 18 ++++++++++++++++++
 2 files changed, 44 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/guacamole-server/blob/b21aef56/src/libguac/guacamole/protocol.h
----------------------------------------------------------------------
diff --git a/src/libguac/guacamole/protocol.h b/src/libguac/guacamole/protocol.h
index a3e6c18..fd824af 100644
--- a/src/libguac/guacamole/protocol.h
+++ b/src/libguac/guacamole/protocol.h
@@ -107,6 +107,32 @@ int guac_protocol_send_error(guac_socket* socket, const 
char* error,
         guac_protocol_status status);
 
 /**
+ * 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.
+ *
+ * @param socket
+ *     The guac_socket connection to use.
+ *
+ * @param keysym
+ *     The X11 keysym of the key that was pressed or released.
+ *
+ * @param pressed
+ *     Non-zero if the key represented by the given keysym is currently
+ *     pressed, zero if it is released.
+ *
+ * @param timestamp
+ *     The server timestamp (in milliseconds) at the point in time this key
+ *     event was acknowledged.
+ *
+ * @return
+ *     Zero on success, non-zero on error.
+ */
+int guac_protocol_send_key(guac_socket* socket, int keysym, int pressed,
+        guac_timestamp timestamp);
+
+/**
  * Sends a log instruction over the given guac_socket connection. This is
  * mainly useful in debugging.
  *

http://git-wip-us.apache.org/repos/asf/guacamole-server/blob/b21aef56/src/libguac/protocol.c
----------------------------------------------------------------------
diff --git a/src/libguac/protocol.c b/src/libguac/protocol.c
index a5fe3e9..dba9c56 100644
--- a/src/libguac/protocol.c
+++ b/src/libguac/protocol.c
@@ -615,6 +615,24 @@ int guac_protocol_send_identity(guac_socket* socket, const 
guac_layer* layer) {
 
 }
 
+int guac_protocol_send_key(guac_socket* socket, int keysym, int pressed,
+        guac_timestamp timestamp) {
+
+    int ret_val;
+
+    guac_socket_instruction_begin(socket);
+    ret_val =
+           guac_socket_write_string(socket, "3.key,")
+        || __guac_socket_write_length_int(socket, keysym)
+        || guac_socket_write_string(socket, pressed ? ",1.1," : ",1.0,")
+        || __guac_socket_write_length_int(socket, timestamp)
+        || guac_socket_write_string(socket, ";");
+
+    guac_socket_instruction_end(socket);
+    return ret_val;
+
+}
+
 int guac_protocol_send_lfill(guac_socket* socket,
         guac_composite_mode mode, const guac_layer* layer,
         const guac_layer* srcl) {

Reply via email to