X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=liblttng-ust-java-agent%2Fjava%2Flttng-ust-agent-common%2Forg%2Flttng%2Fust%2Fagent%2Fclient%2FSessiondEnableEventCommand.java;h=5b36ac5d10a006c0e2ed1365a83b628f7dd631fe;hb=cbe2ebd686831fdfa657d7096c32fe67da704372;hp=388edc7d328afcaaf1134cc5f45d2d5023b60b6c;hpb=3daf5cba66edbd7d8b608be1372a1665189b3c67;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 388edc7d..5b36ac5d 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 @@ -31,9 +31,12 @@ import org.lttng.ust.agent.session.LogLevelSelector; * @author Alexandre Montplaisir * @author David Goulet */ -class SessiondEnableEventCommand implements ISessiondCommand { +class SessiondEnableEventCommand extends SessiondCommand { - private static final int INT_SIZE = 4; + /** Fixed event name length. Value defined by the lttng agent protocol. */ + private static final int EVENT_NAME_LENGTH = 256; + + private final boolean commandIsValid; /* Parameters of the event rule being enabled */ private final String eventName; @@ -44,20 +47,30 @@ class SessiondEnableEventCommand implements ISessiondCommand { if (data == null) { throw new IllegalArgumentException(); } - int dataOffset = INT_SIZE * 2; - ByteBuffer buf = ByteBuffer.wrap(data); - buf.order(ByteOrder.LITTLE_ENDIAN); + buf.order(ByteOrder.BIG_ENDIAN); int logLevel = buf.getInt(); int logLevelType = buf.getInt(); logLevelFilter = new LogLevelSelector(logLevel, logLevelType); - eventName = new String(data, dataOffset, data.length - dataOffset).trim(); - filterString = null; /* Not yet sent by the sessiond */ + /* Read the event name */ + byte[] eventNameBytes = new byte[EVENT_NAME_LENGTH]; + buf.get(eventNameBytes); + eventName = new String(eventNameBytes).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) { + 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);