X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=liblttng-ust-java-agent%2Fjava%2Flttng-ust-agent-common%2Forg%2Flttng%2Fust%2Fagent%2Fclient%2FSessiondEnableEventCommand.java;h=089c36c0a44f60313cedc84e8f4c86975af2a22e;hb=f35c6aa089659c7d16867ce4eac740d30c2c0213;hp=82204eb19b895af2d22eca200169769f40d59114;hpb=3165c2f51abe3093f4c5512b499e33cb380b387d;p=lttng-ust.git diff --git a/liblttng-ust-java-agent/java/lttng-ust-agent-common/org/lttng/ust/agent/client/SessiondEnableEventCommand.java b/liblttng-ust-java-agent/java/lttng-ust-agent-common/org/lttng/ust/agent/client/SessiondEnableEventCommand.java index 82204eb1..089c36c0 100644 --- a/liblttng-ust-java-agent/java/lttng-ust-agent-common/org/lttng/ust/agent/client/SessiondEnableEventCommand.java +++ b/liblttng-ust-java-agent/java/lttng-ust-agent-common/org/lttng/ust/agent/client/SessiondEnableEventCommand.java @@ -21,6 +21,9 @@ package org.lttng.ust.agent.client; import java.nio.ByteBuffer; import java.nio.ByteOrder; +import org.lttng.ust.agent.session.EventRule; +import org.lttng.ust.agent.session.LogLevelSelector; + /** * Session daemon command indicating to the Java agent that some events were * enabled in the tracing session. @@ -28,29 +31,57 @@ import java.nio.ByteOrder; * @author Alexandre Montplaisir * @author David Goulet */ -class SessiondEnableEventCommand implements ISessiondCommand { +class SessiondEnableEventCommand extends SessiondCommand { + + /** Fixed event name length. Value defined by the lttng agent protocol. */ + private static final int EVENT_NAME_LENGTH = 256; - private static final int INT_SIZE = 4; + private final boolean commandIsValid; - /** Event name to enable in the tracing session */ + /* Parameters of the event rule being enabled */ private final String eventName; + private final LogLevelSelector logLevelFilter; + private final String filterString; public SessiondEnableEventCommand(byte[] data) { if (data == null) { throw new IllegalArgumentException(); } - int dataOffset = INT_SIZE * 2; - ByteBuffer buf = ByteBuffer.wrap(data); - buf.order(ByteOrder.LITTLE_ENDIAN); - buf.getInt(); // logLevel, currently unused - buf.getInt(); // logLevelType, currently unused - eventName = new String(data, dataOffset, data.length - dataOffset).trim(); + buf.order(ByteOrder.BIG_ENDIAN); + int logLevel = buf.getInt(); + int logLevelType = buf.getInt(); + logLevelFilter = new LogLevelSelector(logLevel, logLevelType); + + /* Read the event name */ + byte[] eventNameBytes = new byte[EVENT_NAME_LENGTH]; + buf.get(eventNameBytes); + eventName = new String(eventNameBytes, SESSIOND_PROTOCOL_CHARSET).trim(); + + /* Read the filter string */ + filterString = readNextString(buf); + + /* The command was invalid if the string could not be read correctly */ + commandIsValid = (filterString != null); } @Override public LttngAgentResponse execute(ILttngTcpClientListener agent) { - boolean success = agent.eventEnabled(this.eventName); + if (!commandIsValid) { + return LttngAgentResponse.FAILURE_RESPONSE; + } + + EventRule rule = new EventRule(eventName, logLevelFilter, filterString); + boolean success = agent.eventEnabled(rule); return (success ? LttngAgentResponse.SUCESS_RESPONSE : LttngAgentResponse.FAILURE_RESPONSE); } + + @Override + public String toString() { + return "SessiondEnableEventCommand[" + + "eventName=" + eventName + + ", logLevel=" + logLevelFilter.toString() + + ", filterString=" + filterString + +"]"; + } }