Turn ISessiondCommand into an abstract class
[deliverable/lttng-ust.git] / liblttng-ust-java-agent / java / lttng-ust-agent-common / org / lttng / ust / agent / client / SessiondCommand.java
diff --git a/liblttng-ust-java-agent/java/lttng-ust-agent-common/org/lttng/ust/agent/client/SessiondCommand.java b/liblttng-ust-java-agent/java/lttng-ust-agent-common/org/lttng/ust/agent/client/SessiondCommand.java
new file mode 100644 (file)
index 0000000..ee191da
--- /dev/null
@@ -0,0 +1,89 @@
+/*
+ * Copyright (C) 2015-2016 - EfficiOS Inc., Alexandre Montplaisir <alexmonthy@efficios.com>
+ * Copyright (C) 2013 - David Goulet <dgoulet@efficios.com>
+ *
+ * This library is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License, version 2.1 only,
+ * as published by the Free Software Foundation.
+ *
+ * This library 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 Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+package org.lttng.ust.agent.client;
+
+import java.nio.ByteBuffer;
+
+/**
+ * Base class to represent all commands sent from the session daemon to the Java
+ * agent. The agent is then expected to execute the command and provide a
+ * response.
+ *
+ * @author Alexandre Montplaisir
+ */
+abstract class SessiondCommand {
+
+       enum CommandType {
+
+               /** List logger(s). */
+               CMD_LIST(1),
+               /** Enable logger by name. */
+               CMD_ENABLE(2),
+               /** Disable logger by name. */
+               CMD_DISABLE(3),
+               /** Registration done */
+               CMD_REG_DONE(4);
+
+               private int code;
+
+               private CommandType(int c) {
+                       code = c;
+               }
+
+               public int getCommandType() {
+                       return code;
+               }
+       }
+
+       /**
+        * Execute the command handler's action on the specified tracing agent.
+        *
+        * @param agent
+        *            The agent on which to execute the command
+        * @return If the command completed successfully or not
+        */
+       public abstract LttngAgentResponse execute(ILttngTcpClientListener agent);
+
+       /**
+        * Utility method to read agent-protocol strings passed on the socket. The
+        * buffer will contain a 32-bit integer representing the length, immediately
+        * followed by the string itself.
+        *
+        * @param buffer
+        *            The ByteBuffer from which to read. It should already be setup
+        *            and positioned where the read should begin.
+        * @return The string that was read, or <code>null</code> if it was badly
+        *         formatted.
+        */
+       protected static String readNextString(ByteBuffer buffer) {
+               int length = buffer.getInt();
+               if (length < 0) {
+                       /* The string length should be positive */
+                       return null;
+               }
+               if (length == 0) {
+                       /* The string is explicitly an empty string */
+                       return "";
+               }
+
+               byte[] stringBytes = new byte[length];
+               buffer.get(stringBytes);
+               return new String(stringBytes).trim();
+       }
+}
This page took 0.024513 seconds and 5 git commands to generate.