blob: 63d4bf7a98a24a359f5d251c107ad3bcf5fc3b29 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2005 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jdi.internal.spy;
import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintStream;
import java.io.UTFDataFormatException;
import com.ibm.icu.text.MessageFormat;
import java.util.Arrays;
/**
* The <code>VerbosePacketWriter</code> is responsible for writing
* out JdwpPacket data in human readable form.
*/
public class VerbosePacketStream extends PrintStream {
/** Tag Constants. */
// public static final byte NULL_TAG = 91; // Used for tagged null values.
public static final byte ARRAY_TAG = 91; // '[' - an array object (objectID size).
public static final byte BYTE_TAG = 66; // 'B' - a byte value (1 byte).
public static final byte CHAR_TAG = 67; // 'C' - a character value (2 bytes).
public static final byte OBJECT_TAG = 76; // 'L' - an object (objectID size).
public static final byte FLOAT_TAG = 70; // 'F' - a float value (4 bytes).
public static final byte DOUBLE_TAG = 68; // 'D' - a double value (8 bytes).
public static final byte INT_TAG = 73; // 'I' - an int value (4 bytes).
public static final byte LONG_TAG = 74; // 'J' - a long value (8 bytes).
public static final byte SHORT_TAG = 83; // 'S' - a short value (2 bytes).
public static final byte VOID_TAG = 86; // 'V' - a void value (no bytes).
public static final byte BOOLEAN_TAG = 90; // 'Z' - a boolean value (1 byte).
public static final byte STRING_TAG = 115; // 's' - a String object (objectID size).
public static final byte THREAD_TAG = 116; // 't' - a Thread object (objectID size).
public static final byte THREAD_GROUP_TAG = 103; // 'g' - a ThreadGroup object (objectID size).
public static final byte CLASS_LOADER_TAG = 108; // 'l' - a ClassLoader object (objectID size).
public static final byte CLASS_OBJECT_TAG = 99; // 'c' - a class object object (objectID size).
/** TypeTag Constants. */
public static final byte TYPE_TAG_CLASS = 1; // ReferenceType is a class.
public static final byte TYPE_TAG_INTERFACE = 2; // ReferenceType is an interface.
public static final byte TYPE_TAG_ARRAY = 3; // ReferenceType is an array.
/** ClassStatus Constants. */
public static final int JDWP_CLASS_STATUS_VERIFIED = 1;
public static final int JDWP_CLASS_STATUS_PREPARED = 2;
public static final int JDWP_CLASS_STATUS_INITIALIZED = 4;
public static final int JDWP_CLASS_STATUS_ERROR = 8;
/** access_flags Constants */
public static final int ACC_PUBLIC= 0x0001;
public static final int ACC_PRIVATE= 0x0002;
public static final int ACC_PROTECTED= 0x0004;
public static final int ACC_STATIC= 0x0008;
public static final int ACC_FINAL= 0x0010;
public static final int ACC_SUPER= 0x0020;
public static final int ACC_VOLATILE= 0x0040;
public static final int ACC_TRANSIENT= 0x0080;
public static final int ACC_NATIVE= 0x0100;
public static final int ACC_INTERFACE= 0x0200;
public static final int ACC_ABSTRACT= 0x0400;
public static final int ACC_STRICT= 0x0800;
public static final int ACC_ENUM= 0x0100;
public static final int ACC_VARARGS= 0x0080;
public static final int ACC_BRIDGE= 0x0040;
public static final int ACC_SYNTHETIC= 0x1000;
public static final int ACC_SYNCHRONIZED=0x0020;
public static final int ACC_EXT_SYNTHETIC= 0xf0000000;
/** Invoke options constants */
public static final int INVOKE_SINGLE_THREADED= 0x01;
public static final int INVOKE_NONVIRTUAL= 0x02;
/** ThreadStatus Constants */
public static final int THREAD_STATUS_ZOMBIE= 0;
public static final int THREAD_STATUS_RUNNING= 1;
public static final int THREAD_STATUS_SLEEPING= 2;
public static final int THREAD_STATUS_MONITOR= 3;
public static final int THREAD_STATUS_WAIT= 4;
/** EventKind Constants */
public static final int EVENTKIND_SINGLE_STEP= 1;
public static final int EVENTKIND_BREAKPOINT= 2;
public static final int EVENTKIND_FRAME_POP= 3;
public static final int EVENTKIND_EXCEPTION= 4;
public static final int EVENTKIND_USER_DEFINED= 5;
public static final int EVENTKIND_THREAD_START= 6;
public static final int EVENTKIND_THREAD_END= 7;
public static final int EVENTKIND_THREAD_DEATH= EVENTKIND_THREAD_END;
public static final int EVENTKIND_CLASS_PREPARE= 8;
public static final int EVENTKIND_CLASS_UNLOAD= 9;
public static final int EVENTKIND_CLASS_LOAD= 10;
public static final int EVENTKIND_FIELD_ACCESS= 20;
public static final int EVENTKIND_FIELD_MODIFICATION= 21;
public static final int EVENTKIND_EXCEPTION_CATCH= 30;
public static final int EVENTKIND_METHOD_ENTRY= 40;
public static final int EVENTKIND_METHOD_EXIT= 41;
public static final int EVENTKIND_VM_INIT= 90;
public static final int EVENTKIND_VM_START= EVENTKIND_VM_INIT;
public static final int EVENTKIND_VM_DEATH= 99;
public static final int EVENTKIND_VM_DISCONNECTED= 100;
/** SuspendStatus Constants */
public static final int SUSPEND_STATUS_SUSPENDED= 0x01;
/** SuspendPolicy Constants */
public static final int SUSPENDPOLICY_NONE= 0;
public static final int SUSPENDPOLICY_EVENT_THREAD= 1;
public static final int SUSPENDPOLICY_ALL= 2;
/** StepDepth Constants */
public static final int STEPDEPTH_INTO= 0;
public static final int STEPDEPTH_OVER= 1;
public static final int STEPDEPTH_OUT= 2;
/** StepSize Constants */
public static final int STEPSIZE_MIN= 0;
public static final int STEPSIZE_LINE= 1;
private static final byte[] padding;
static {
padding= new byte[256];
Arrays.fill(padding, (byte)' ');
}
private static final String shift= new String(padding, 0, 32);
public VerbosePacketStream(OutputStream out) {
super(out);
}
private static final byte[] zeros;
static {
zeros= new byte[16];
Arrays.fill(zeros, (byte)'0');
}
public synchronized void print(JdwpPacket packet, boolean fromVM) throws IOException {
try {
printHeader(packet, fromVM);
printData(packet);
println();
} catch (UnableToParseDataException e) {
println("\n" + e.getMessage() + ':'); //$NON-NLS-1$
printDescription(TcpIpSpyMessages.VerbosePacketStream_Remaining_data__1);
byte[] data= e.getRemainingData();
if (data == null) {
printHex(packet.data());
} else {
printHex(e.getRemainingData());
}
println();
}
}
protected void printHeader(JdwpPacket packet, boolean fromVM) throws UnableToParseDataException {
if (fromVM) {
println(TcpIpSpyMessages.VerbosePacketStream_From_VM_1);
} else {
println(TcpIpSpyMessages.VerbosePacketStream_From_Debugger_2);
}
printDescription(TcpIpSpyMessages.VerbosePacketStream_Packet_ID__3);
printHex(packet.getId());
println();
printDescription(TcpIpSpyMessages.VerbosePacketStream_Length__4);
print(packet.getLength());
println();
printDescription(TcpIpSpyMessages.VerbosePacketStream_Flags__5);
byte flags= packet.getFlags();
printHex(flags);
if ((flags & JdwpPacket.FLAG_REPLY_PACKET) != 0) {
print(MessageFormat.format(TcpIpSpyMessages.VerbosePacketStream___REPLY_to__0___6, new String[] {(String) JdwpCommandPacket.commandMap().get(new Integer(TcpipSpy.getCommand(packet)))}));
} else {
print(TcpIpSpyMessages.VerbosePacketStream___COMMAND__7);
}
println();
printSpecificHeaderFields(packet);
}
protected void printSpecificHeaderFields(JdwpPacket packet) {
if (packet instanceof JdwpReplyPacket) {
printError((JdwpReplyPacket) packet);
} else if (packet instanceof JdwpCommandPacket) {
printCommand((JdwpCommandPacket) packet);
}
}
protected void printCommand(JdwpCommandPacket commandPacket) {
printDescription(TcpIpSpyMessages.VerbosePacketStream_Command_set__8);
int commandAndSet= commandPacket.getCommand();
byte set= (byte)(commandAndSet >> 8);
byte command= (byte)commandAndSet;
printHex(set);
printParanthetical(set);
println();
printDescription(TcpIpSpyMessages.VerbosePacketStream_Command__9);
printHex(command);
printParanthetical(command);
print(" ("); //$NON-NLS-1$
print(JdwpCommandPacket.commandMap().get(new Integer(commandAndSet)));
println(')');
}
protected void printError(JdwpReplyPacket reply) {
int error= reply.errorCode();
printDescription(TcpIpSpyMessages.VerbosePacketStream_Error__10);
printHex(error);
if (error != 0) {
print(" ("); //$NON-NLS-1$
print(JdwpReplyPacket.errorMap().get(new Integer(error)));
print(')');
}
println();
}
protected void printData(JdwpPacket packet) throws IOException, UnableToParseDataException {
if ((packet.getFlags() & JdwpPacket.FLAG_REPLY_PACKET) != 0) {
printReplyData((JdwpReplyPacket) packet);
} else {
printCommandData((JdwpCommandPacket) packet);
}
}
private void printCommandData(JdwpCommandPacket command) throws IOException, UnableToParseDataException {
byte[] data= command.data();
if (data == null)
return;
DataInputStream in= new DataInputStream(new ByteArrayInputStream(data));
int commandId= command.getCommand();
switch (commandId) {
/** Commands VirtualMachine. */
case JdwpCommandPacket.VM_VERSION:
// no data
break;
case JdwpCommandPacket.VM_CLASSES_BY_SIGNATURE:
printVmClassesBySignatureCommand(in);
break;
case JdwpCommandPacket.VM_ALL_CLASSES:
// no data
break;
case JdwpCommandPacket.VM_ALL_THREADS:
// no data
break;
case JdwpCommandPacket.VM_TOP_LEVEL_THREAD_GROUPS:
// no data
break;
case JdwpCommandPacket.VM_DISPOSE:
// no data
break;
case JdwpCommandPacket.VM_ID_SIZES:
// no data
break;
case JdwpCommandPacket.VM_SUSPEND:
// no data
break;
case JdwpCommandPacket.VM_RESUME:
// no data
break;
case JdwpCommandPacket.VM_EXIT:
printVmExitCommand(in);
break;
case JdwpCommandPacket.VM_CREATE_STRING:
printVmCreateStringCommand(in);
break;
case JdwpCommandPacket.VM_CAPABILITIES:
// no data
break;
case JdwpCommandPacket.VM_CLASS_PATHS:
// no data
break;
case JdwpCommandPacket.VM_DISPOSE_OBJECTS:
printVmDisposeObjectsCommand(in);
break;
case JdwpCommandPacket.VM_HOLD_EVENTS:
// no data
break;
case JdwpCommandPacket.VM_RELEASE_EVENTS:
// no data
break;
case JdwpCommandPacket.VM_CAPABILITIES_NEW:
// no data
break;
case JdwpCommandPacket.VM_REDEFINE_CLASSES:
printVmRedefineClassCommand(in);
break;
case JdwpCommandPacket.VM_SET_DEFAULT_STRATUM:
printVmSetDefaultStratumCommand(in);
break;
case JdwpCommandPacket.VM_ALL_CLASSES_WITH_GENERIC:
// no data
break;
/** Commands ReferenceType. */
case JdwpCommandPacket.RT_SIGNATURE:
printRtDefaultCommand(in);
break;
case JdwpCommandPacket.RT_CLASS_LOADER:
printRtDefaultCommand(in);
break;
case JdwpCommandPacket.RT_MODIFIERS:
printRtDefaultCommand(in);
break;
case JdwpCommandPacket.RT_FIELDS:
printRtDefaultCommand(in);
break;
case JdwpCommandPacket.RT_METHODS:
printRtDefaultCommand(in);
break;
case JdwpCommandPacket.RT_GET_VALUES:
printRtGetValuesCommand(in);
break;
case JdwpCommandPacket.RT_SOURCE_FILE:
printRtDefaultCommand(in);
break;
case JdwpCommandPacket.RT_NESTED_TYPES:
printRtDefaultCommand(in);
break;
case JdwpCommandPacket.RT_STATUS:
printRtDefaultCommand(in);
break;
case JdwpCommandPacket.RT_INTERFACES:
printRtDefaultCommand(in);
break;
case JdwpCommandPacket.RT_CLASS_OBJECT:
printRtDefaultCommand(in);
break;
case JdwpCommandPacket.RT_SOURCE_DEBUG_EXTENSION:
printRtDefaultCommand(in);
break;
case JdwpCommandPacket.RT_SIGNATURE_WITH_GENERIC:
printRtDefaultCommand(in);
break;
case JdwpCommandPacket.RT_FIELDS_WITH_GENERIC:
printRtDefaultCommand(in);
break;
case JdwpCommandPacket.RT_METHODS_WITH_GENERIC:
printRtDefaultCommand(in);
break;
/** Commands ClassType. */
case JdwpCommandPacket.CT_SUPERCLASS:
printCtSuperclassCommand(in);
break;
case JdwpCommandPacket.CT_SET_VALUES:
printCtSetValuesCommand(in);
break;
case JdwpCommandPacket.CT_INVOKE_METHOD:
printCtInvokeMethodCommand(in);
break;
case JdwpCommandPacket.CT_NEW_INSTANCE:
printCtNewInstanceCommand(in);
break;
/** Commands ArrayType. */
case JdwpCommandPacket.AT_NEW_INSTANCE:
printAtNewInstanceCommand(in);
break;
/** Commands Method. */
case JdwpCommandPacket.M_LINE_TABLE:
printMDefaultCommand(in);
break;
case JdwpCommandPacket.M_VARIABLE_TABLE:
printMDefaultCommand(in);
break;
case JdwpCommandPacket.M_BYTECODES:
printMDefaultCommand(in);
break;
case JdwpCommandPacket.M_IS_OBSOLETE:
printMDefaultCommand(in);
break;
case JdwpCommandPacket.M_VARIABLE_TABLE_WITH_GENERIC:
printMDefaultCommand(in);
break;
/** Commands ObjectReference. */
case JdwpCommandPacket.OR_REFERENCE_TYPE:
printOrDefaultCommand(in);
break;
case JdwpCommandPacket.OR_GET_VALUES:
printOrGetValuesCommand(in);
break;
case JdwpCommandPacket.OR_SET_VALUES:
printOrSetValuesCommand(in);
break;
case JdwpCommandPacket.OR_MONITOR_INFO:
printOrDefaultCommand(in);
break;
case JdwpCommandPacket.OR_INVOKE_METHOD:
printOrInvokeMethodCommand(in);
break;
case JdwpCommandPacket.OR_DISABLE_COLLECTION:
printOrDefaultCommand(in);
break;
case JdwpCommandPacket.OR_ENABLE_COLLECTION:
printOrDefaultCommand(in);
break;
case JdwpCommandPacket.OR_IS_COLLECTED:
printOrDefaultCommand(in);
break;
/** Commands StringReference. */
case JdwpCommandPacket.SR_VALUE:
printSrValueCommand(in);
break;
/** Commands ThreadReference. */
case JdwpCommandPacket.TR_NAME:
printTrDefaultCommand(in);
break;
case JdwpCommandPacket.TR_SUSPEND:
printTrDefaultCommand(in);
break;
case JdwpCommandPacket.TR_RESUME:
printTrDefaultCommand(in);
break;
case JdwpCommandPacket.TR_STATUS:
printTrDefaultCommand(in);
break;
case JdwpCommandPacket.TR_THREAD_GROUP:
printTrDefaultCommand(in);
break;
case JdwpCommandPacket.TR_FRAMES:
printTrFramesCommand(in);
break;
case JdwpCommandPacket.TR_FRAME_COUNT:
printTrDefaultCommand(in);
break;
case JdwpCommandPacket.TR_OWNED_MONITORS:
printTrDefaultCommand(in);
break;
case JdwpCommandPacket.TR_CURRENT_CONTENDED_MONITOR:
printTrDefaultCommand(in);
break;
case JdwpCommandPacket.TR_STOP:
printTrStopCommand(in);
break;
case JdwpCommandPacket.TR_INTERRUPT:
printTrDefaultCommand(in);
break;
case JdwpCommandPacket.TR_SUSPEND_COUNT:
printTrDefaultCommand(in);
break;
/* no more in the jdwp spec
case JdwpCommandPacket.TR_POP_TOP_FRAME:
break;
*/
/** Commands ThreadGroupReference. */
case JdwpCommandPacket.TGR_NAME:
printTgrDefaultCommand(in);
break;
case JdwpCommandPacket.TGR_PARENT:
printTgrDefaultCommand(in);
break;
case JdwpCommandPacket.TGR_CHILDREN:
printTgrDefaultCommand(in);
break;
/** Commands ArrayReference. */
case JdwpCommandPacket.AR_LENGTH:
printArLengthCommand(in);
break;
case JdwpCommandPacket.AR_GET_VALUES:
printArGetValuesCommand(in);
break;
case JdwpCommandPacket.AR_SET_VALUES:
printArSetValuesCommand(in);
break;
/** Commands ClassLoaderReference. */
case JdwpCommandPacket.CLR_VISIBLE_CLASSES:
printClrVisibleClassesCommand(in);
break;
/** Commands EventRequest. */
case JdwpCommandPacket.ER_SET:
printErSetCommand(in);
break;
case JdwpCommandPacket.ER_CLEAR:
printErClearCommand(in);
break;
case JdwpCommandPacket.ER_CLEAR_ALL_BREAKPOINTS:
// no data
break;
/** Commands StackFrame. */
case JdwpCommandPacket.SF_GET_VALUES:
printSfGetValuesCommand(in);
break;
case JdwpCommandPacket.SF_SET_VALUES:
printSfSetValuesCommand(in);
break;
case JdwpCommandPacket.SF_THIS_OBJECT:
printSfDefaultCommand(in);
break;
case JdwpCommandPacket.SF_POP_FRAME:
printSfDefaultCommand(in);
break;
/** Commands ClassObjectReference. */
case JdwpCommandPacket.COR_REFLECTED_TYPE:
printCorReflectedTypeCommand(in);
break;
/** Commands Event. */
case JdwpCommandPacket.E_COMPOSITE:
printECompositeCommand(in);
break;
/** Commands Hot Code Replacement (OTI specific). */
case JdwpCommandPacket.HCR_CLASSES_HAVE_CHANGED:
case JdwpCommandPacket.HCR_GET_CLASS_VERSION:
case JdwpCommandPacket.HCR_DO_RETURN:
case JdwpCommandPacket.HCR_REENTER_ON_EXIT:
case JdwpCommandPacket.HCR_CAPABILITIES:
throw new UnableToParseDataException(TcpIpSpyMessages.VerbosePacketStream_NOT_MANAGED_COMMAND_11, remainderData(in));
default:
int cset= commandId >> 8;
int cmd= commandId & 0xFF;
println(MessageFormat.format(TcpIpSpyMessages.VerbosePacketStream_Unknown_command____0___1__12, new String[] {"" + cset, "" + cmd})); //$NON-NLS-1$ //$NON-NLS-2$
break;
}
}
private void printReplyData(JdwpReplyPacket reply) throws IOException, UnableToParseDataException {
byte[] data= reply.data();
if (data == null)
return;
DataInputStream in= new DataInputStream(new ByteArrayInputStream(data));
JdwpCommandPacket command= TcpipSpy.getCommand(reply.getId());
int commandId= command.getCommand();
switch (commandId) {
/** Commands VirtualMachine. */
case JdwpCommandPacket.VM_VERSION:
printVmVersionReply(in);
break;
case JdwpCommandPacket.VM_CLASSES_BY_SIGNATURE:
printVmClassesBySignatureReply(in);
break;
case JdwpCommandPacket.VM_ALL_CLASSES:
printVmAllClassesReply(in);
break;
case JdwpCommandPacket.VM_ALL_THREADS:
printVmAllThreadsReply(in);
break;
case JdwpCommandPacket.VM_TOP_LEVEL_THREAD_GROUPS:
printVmTopLevelThreadGroupReply(in);
break;
case JdwpCommandPacket.VM_DISPOSE:
// no data
break;
case JdwpCommandPacket.VM_ID_SIZES:
printVmIdSizesReply(in);
break;
case JdwpCommandPacket.VM_SUSPEND:
// no data
break;
case JdwpCommandPacket.VM_RESUME:
// no data
break;
case JdwpCommandPacket.VM_EXIT:
// no data
break;
case JdwpCommandPacket.VM_CREATE_STRING:
printVmCreateStringReply(in);
break;
case JdwpCommandPacket.VM_CAPABILITIES:
printVmCapabilitiesReply(in);
break;
case JdwpCommandPacket.VM_CLASS_PATHS:
printVmClassPathsReply(in);
break;
case JdwpCommandPacket.VM_DISPOSE_OBJECTS:
// no data
break;
case JdwpCommandPacket.VM_HOLD_EVENTS:
// no data
break;
case JdwpCommandPacket.VM_RELEASE_EVENTS:
// no data
break;
case JdwpCommandPacket.VM_CAPABILITIES_NEW:
printVmCapabilitiesNewReply(in);
break;
case JdwpCommandPacket.VM_REDEFINE_CLASSES:
// no data
break;
case JdwpCommandPacket.VM_SET_DEFAULT_STRATUM:
// no data
break;
case JdwpCommandPacket.VM_ALL_CLASSES_WITH_GENERIC:
printVmAllClassesWithGenericReply(in);
break;
/** Commands ReferenceType. */
case JdwpCommandPacket.RT_SIGNATURE:
printRtSignatureReply(in);
break;
case JdwpCommandPacket.RT_CLASS_LOADER:
printRtClassLoaderReply(in);
break;
case JdwpCommandPacket.RT_MODIFIERS:
printRtModifiersReply(in);
break;
case JdwpCommandPacket.RT_FIELDS:
printRtFieldsReply(in);
break;
case JdwpCommandPacket.RT_METHODS:
printRtMethodsReply(in);
break;
case JdwpCommandPacket.RT_GET_VALUES:
printRtGetValuesReply(in);
break;
case JdwpCommandPacket.RT_SOURCE_FILE:
printRtSourceFileReply(in);
break;
case JdwpCommandPacket.RT_NESTED_TYPES:
printRtNestedTypesReply(in);
break;
case JdwpCommandPacket.RT_STATUS:
printRtStatusReply(in);
break;
case JdwpCommandPacket.RT_INTERFACES:
printRtInterfacesReply(in);
break;
case JdwpCommandPacket.RT_CLASS_OBJECT:
printRtClassObjectReply(in);
break;
case JdwpCommandPacket.RT_SOURCE_DEBUG_EXTENSION:
printRtSourceDebugExtensionReply(in);
break;
case JdwpCommandPacket.RT_SIGNATURE_WITH_GENERIC:
printRtSignatureWithGenericReply(in);
break;
case JdwpCommandPacket.RT_FIELDS_WITH_GENERIC:
printRtFieldsWithGenericReply(in);
break;
case JdwpCommandPacket.RT_METHODS_WITH_GENERIC:
printRtMethodsWithGenericReply(in);
break;
/** Commands ClassType. */
case JdwpCommandPacket.CT_SUPERCLASS:
printCtSuperclassReply(in);
break;
case JdwpCommandPacket.CT_SET_VALUES:
// no data
break;
case JdwpCommandPacket.CT_INVOKE_METHOD:
printCtInvokeMethodReply(in);
break;
case JdwpCommandPacket.CT_NEW_INSTANCE:
printCtNewInstanceReply(in);
break;
/** Commands ArrayType. */
case JdwpCommandPacket.AT_NEW_INSTANCE:
printAtNewInstanceReply(in);
break;
/** Commands Method. */
case JdwpCommandPacket.M_LINE_TABLE:
printMLineTableReply(in);
break;
case JdwpCommandPacket.M_VARIABLE_TABLE:
printMVariableTableReply(in);
break;
case JdwpCommandPacket.M_BYTECODES:
printMBytecodesReply(in);
break;
case JdwpCommandPacket.M_IS_OBSOLETE:
printMIsObsoleteReply(in);
break;
case JdwpCommandPacket.M_VARIABLE_TABLE_WITH_GENERIC:
printMVariableTableWithGenericReply(in);
break;
/** Commands ObjectReference. */
case JdwpCommandPacket.OR_REFERENCE_TYPE:
printOrReferenceTypeReply(in);
break;
case JdwpCommandPacket.OR_GET_VALUES:
printOrGetValuesReply(in);
break;
case JdwpCommandPacket.OR_SET_VALUES:
// no data
break;
case JdwpCommandPacket.OR_MONITOR_INFO:
printOrMonitorInfoReply(in);
break;
case JdwpCommandPacket.OR_INVOKE_METHOD:
printOrInvokeMethodReply(in);
break;
case JdwpCommandPacket.OR_DISABLE_COLLECTION:
// no data
break;
case JdwpCommandPacket.OR_ENABLE_COLLECTION:
// no data
break;
case JdwpCommandPacket.OR_IS_COLLECTED:
printOrIsCollectedReply(in);
break;
/** Commands StringReference. */
case JdwpCommandPacket.SR_VALUE:
printSrValueReply(in);
break;
/** Commands ThreadReference. */
case JdwpCommandPacket.TR_NAME:
printTrNameReply(in);
break;
case JdwpCommandPacket.TR_SUSPEND:
// no data
break;
case JdwpCommandPacket.TR_RESUME:
// no data
break;
case JdwpCommandPacket.TR_STATUS:
printTrStatusReply(in);
break;
case JdwpCommandPacket.TR_THREAD_GROUP:
printTrThreadGroupReply(in);
break;
case JdwpCommandPacket.TR_FRAMES:
printTrFramesReply(in);
break;
case JdwpCommandPacket.TR_FRAME_COUNT:
printTrFrameCountReply(in);
break;
case JdwpCommandPacket.TR_OWNED_MONITORS:
printTrOwnedMonitorsReply(in);
break;
case JdwpCommandPacket.TR_CURRENT_CONTENDED_MONITOR:
printTrCurrentContendedMonitorReply(in);
break;
case JdwpCommandPacket.TR_STOP:
// no data
break;
case JdwpCommandPacket.TR_INTERRUPT:
// no data
break;
case JdwpCommandPacket.TR_SUSPEND_COUNT:
printTrSuspendCountReply(in);
break;
/* no more in the jdwp spec
case JdwpCommandPacket.TR_POP_TOP_FRAME:
break;
*/
/** Commands ThreadGroupReference. */
case JdwpCommandPacket.TGR_NAME:
printTgrNameReply(in);
break;
case JdwpCommandPacket.TGR_PARENT:
printTgrParentReply(in);
break;
case JdwpCommandPacket.TGR_CHILDREN:
printTgrChildrenReply(in);
break;
/** Commands ArrayReference. */
case JdwpCommandPacket.AR_LENGTH:
printArLengthReply(in);
break;
case JdwpCommandPacket.AR_GET_VALUES:
printArGetValuesReply(in);
break;
case JdwpCommandPacket.AR_SET_VALUES:
// no data
break;
/** Commands ClassLoaderReference. */
case JdwpCommandPacket.CLR_VISIBLE_CLASSES:
printClrVisibleClassesReply(in);
break;
/** Commands EventRequest. */
case JdwpCommandPacket.ER_SET:
printErSetReply(in);
break;
case JdwpCommandPacket.ER_CLEAR:
// no data
break;
case JdwpCommandPacket.ER_CLEAR_ALL_BREAKPOINTS:
// no data
break;
/** Commands StackFrame. */
case JdwpCommandPacket.SF_GET_VALUES:
printSfGetValuesReply(in);
break;
case JdwpCommandPacket.SF_SET_VALUES:
// no data
break;
case JdwpCommandPacket.SF_THIS_OBJECT:
printSfThisObjectReply(in);
break;
case JdwpCommandPacket.SF_POP_FRAME:
// no data
break;
/** Commands ClassObjectReference. */
case JdwpCommandPacket.COR_REFLECTED_TYPE:
printCorReflectedTypeReply(in);
break;
/** Commands Event. */
/* no reply
case JdwpCommandPacket.E_COMPOSITE:
break;*/
/** Commands Hot Code Replacement (OTI specific). */
case JdwpCommandPacket.HCR_CLASSES_HAVE_CHANGED:
case JdwpCommandPacket.HCR_GET_CLASS_VERSION:
case JdwpCommandPacket.HCR_DO_RETURN:
case JdwpCommandPacket.HCR_REENTER_ON_EXIT:
case JdwpCommandPacket.HCR_CAPABILITIES:
throw new UnableToParseDataException(TcpIpSpyMessages.VerbosePacketStream_NOT_MANAGED_COMMAND_11, remainderData(in));
default:
int cset= commandId >> 8;
int cmd= commandId & 0xFF;
println(MessageFormat.format(TcpIpSpyMessages.VerbosePacketStream_Unknown_command____0___1__12, new String[] {"" + cset, "" + cmd})); //$NON-NLS-1$ //$NON-NLS-2$
break;
}
}
private void printRefTypeTag(byte refTypeTag) {
printDescription(TcpIpSpyMessages.VerbosePacketStream_Type_tag__19);
printRefTypeTagValue(refTypeTag);
println();
}
private void printRefTypeTagValue(byte refTypeTag) {
printHex(refTypeTag);
print(" ("); //$NON-NLS-1$
switch (refTypeTag) {
case TYPE_TAG_CLASS:
print("CLASS"); //$NON-NLS-1$
break;
case TYPE_TAG_INTERFACE:
print("INTERFACE"); //$NON-NLS-1$
break;
case TYPE_TAG_ARRAY:
print("ARRAY"); //$NON-NLS-1$
break;
default:
print(TcpIpSpyMessages.VerbosePacketStream_unknow_20);
}
print(')');
}
private void printClassStatus(int status) {
printDescription(TcpIpSpyMessages.VerbosePacketStream_Status__21);
printHex(status);
print(" ("); //$NON-NLS-1$
boolean spaceNeeded= false;
if ((status & JDWP_CLASS_STATUS_VERIFIED) != 0) {
print("VERIFIED"); //$NON-NLS-1$
spaceNeeded= true;
}
if ((status & JDWP_CLASS_STATUS_PREPARED) != 0) {
if (spaceNeeded) {
print(' ');
} else {
spaceNeeded= true;
}
print("PREPARED"); //$NON-NLS-1$
}
if ((status & JDWP_CLASS_STATUS_INITIALIZED) != 0) {
if (spaceNeeded) {
print(' ');
} else {
spaceNeeded= true;
}
print("INITIALIZED"); //$NON-NLS-1$
}
if ((status & JDWP_CLASS_STATUS_ERROR) != 0) {
if (spaceNeeded) {
print(' ');
}
print(TcpIpSpyMessages.VerbosePacketStream_unknow_20);
}
println(')');
}
private void printClassModifiers(int modifiers) {
printDescription(TcpIpSpyMessages.VerbosePacketStream_Modifiers__23);
printHex(modifiers);
print(" ("); //$NON-NLS-1$
boolean spaceNeeded= false;
if ((modifiers & ACC_PUBLIC) != 0) {
print("PUBLIC"); //$NON-NLS-1$
spaceNeeded= true;
}
if ((modifiers & ACC_PRIVATE) != 0) {
if (spaceNeeded) {
print(' ');
} else {
spaceNeeded= true;
}
print("PRIVATE"); //$NON-NLS-1$
}
if ((modifiers & ACC_PROTECTED) != 0) {
if (spaceNeeded) {
print(' ');
} else {
spaceNeeded= true;
}
print("PROTECTED"); //$NON-NLS-1$
}
if ((modifiers & ACC_STATIC) != 0) {
if (spaceNeeded) {
print(' ');
} else {
spaceNeeded= true;
}
print("STATIC"); //$NON-NLS-1$
}
if ((modifiers & ACC_FINAL) != 0) {
if (spaceNeeded) {
print(' ');
} else {
spaceNeeded= true;
}
print("FINAL"); //$NON-NLS-1$
}
if ((modifiers & ACC_SUPER) != 0) {
if (spaceNeeded) {
print(' ');
} else {
spaceNeeded= true;
}
print("SUPER"); //$NON-NLS-1$
}
if ((modifiers & ACC_INTERFACE) != 0) {
if (spaceNeeded) {
print(' ');
} else {
spaceNeeded= true;
}
print("INTERFACE"); //$NON-NLS-1$
}
if ((modifiers & ACC_ABSTRACT) != 0) {
if (spaceNeeded) {
print(' ');
} else {
spaceNeeded= true;
}
print("ABSTRACT"); //$NON-NLS-1$
}
if ((modifiers & (ACC_EXT_SYNTHETIC | ACC_SYNTHETIC)) != 0) {
if (spaceNeeded) {
print(' ');
} else {
spaceNeeded= true;
}
print("SYNTHETIC"); //$NON-NLS-1$
}
println(')');
}
private void printMethodModifiers(int modifiers) {
printDescription(TcpIpSpyMessages.VerbosePacketStream_Modifiers__23);
printHex(modifiers);
print(" ("); //$NON-NLS-1$
boolean spaceNeeded= false;
if ((modifiers & ACC_PUBLIC) != 0) {
print("PUBLIC"); //$NON-NLS-1$
spaceNeeded= true;
}
if ((modifiers & ACC_PRIVATE) != 0) {
if (spaceNeeded) {
print(' ');
} else {
spaceNeeded= true;
}
print("PRIVATE"); //$NON-NLS-1$
}
if ((modifiers & ACC_PROTECTED) != 0) {
if (spaceNeeded) {
print(' ');
} else {
spaceNeeded= true;
}
print("PROTECTED"); //$NON-NLS-1$
}
if ((modifiers & ACC_STATIC) != 0) {
if (spaceNeeded) {
print(' ');
} else {
spaceNeeded= true;
}
print("STATIC"); //$NON-NLS-1$
}
if ((modifiers & ACC_FINAL) != 0) {
if (spaceNeeded) {
print(' ');
} else {
spaceNeeded= true;
}
print("FINAL"); //$NON-NLS-1$
}
if ((modifiers & ACC_SYNCHRONIZED) != 0) {
if (spaceNeeded) {
print(' ');
} else {
spaceNeeded= true;
}
print("SYNCHRONIZED"); //$NON-NLS-1$
}
if ((modifiers & ACC_BRIDGE) != 0) {
if (spaceNeeded) {
print(' ');
} else {
spaceNeeded= true;
}
print("BRIDGE"); //$NON-NLS-1$
}
if ((modifiers & ACC_VARARGS) != 0) {
if (spaceNeeded) {
print(' ');
} else {
spaceNeeded= true;
}
print("VARARGS"); //$NON-NLS-1$
}
if ((modifiers & ACC_NATIVE) != 0) {
if (spaceNeeded) {
print(' ');
} else {
spaceNeeded= true;
}
print("NATIVE"); //$NON-NLS-1$
}
if ((modifiers & ACC_ABSTRACT) != 0) {
if (spaceNeeded) {
print(' ');
} else {
spaceNeeded= true;
}
print("ABSTRACT"); //$NON-NLS-1$
}
if ((modifiers & ACC_STRICT) != 0) {
if (spaceNeeded) {
print(' ');
} else {
spaceNeeded= true;
}
print("STRICT"); //$NON-NLS-1$
}
if ((modifiers & (ACC_EXT_SYNTHETIC | ACC_SYNTHETIC )) != 0) {
if (spaceNeeded) {
print(' ');
} else {
spaceNeeded= true;
}
print("SYNTHETIC"); //$NON-NLS-1$
}
println(')');
}
private void printFieldModifiers(int modifiers) {
printDescription(TcpIpSpyMessages.VerbosePacketStream_Modifiers__23);
printHex(modifiers);
print(" ("); //$NON-NLS-1$
boolean spaceNeeded= false;
if ((modifiers & ACC_PUBLIC) != 0) {
print("PUBLIC"); //$NON-NLS-1$
spaceNeeded= true;
}
if ((modifiers & ACC_PRIVATE) != 0) {
if (spaceNeeded) {
print(' ');
} else {
spaceNeeded= true;
}
print("PRIVATE"); //$NON-NLS-1$
}
if ((modifiers & ACC_PROTECTED) != 0) {
if (spaceNeeded) {
print(' ');
} else {
spaceNeeded= true;
}
print("PROTECTED"); //$NON-NLS-1$
}
if ((modifiers & ACC_STATIC) != 0) {
if (spaceNeeded) {
print(' ');
} else {
spaceNeeded= true;
}
print("STATIC"); //$NON-NLS-1$
}
if ((modifiers & ACC_FINAL) != 0) {
if (spaceNeeded) {
print(' ');
} else {
spaceNeeded= true;
}
print("FINAL"); //$NON-NLS-1$
}
if ((modifiers & ACC_VOLATILE) != 0) {
if (spaceNeeded) {
print(' ');
} else {
spaceNeeded= true;
}
print("VOLATILE"); //$NON-NLS-1$
}
if ((modifiers & ACC_TRANSIENT) != 0) {
if (spaceNeeded) {
print(' ');
} else {
spaceNeeded= true;
}
print("TRANSIENT"); //$NON-NLS-1$
}
if ((modifiers & ACC_ENUM) != 0) {
if (spaceNeeded) {
print(' ');
} else {
spaceNeeded= true;
}
print("ENUM"); //$NON-NLS-1$
}
if ((modifiers & (ACC_EXT_SYNTHETIC | ACC_SYNTHETIC)) != 0) {
if (spaceNeeded) {
print(' ');
} else {
spaceNeeded= true;
}
print("SYNTHETIC"); //$NON-NLS-1$
}
println(')');
}
private void printInvocationOptions(int invocationOptions) {
printDescription(TcpIpSpyMessages.VerbosePacketStream_Invocation_Options__24);
printHex(invocationOptions);
print(" ("); //$NON-NLS-1$
boolean spaceNeeded= false;
if ((invocationOptions & INVOKE_SINGLE_THREADED) != 0) {
print("SINGLE_THREADED"); //$NON-NLS-1$
spaceNeeded= true;
}
if ((invocationOptions & INVOKE_NONVIRTUAL) != 0) {
if (spaceNeeded) {
print(' ');
}
print("NONVIRTUAL"); //$NON-NLS-1$
}
println(')');
}
private void printThreadStatus(int threadStatus) {
printDescription(TcpIpSpyMessages.VerbosePacketStream_Thread_status__25);
printHex(threadStatus);
print(" ("); //$NON-NLS-1$
switch (threadStatus) {
case THREAD_STATUS_ZOMBIE:
print("ZOMBIE"); //$NON-NLS-1$
break;
case THREAD_STATUS_RUNNING:
print("RUNNING"); //$NON-NLS-1$
break;
case THREAD_STATUS_SLEEPING:
print("SLEEPING"); //$NON-NLS-1$
break;
case THREAD_STATUS_MONITOR:
print("MONITOR"); //$NON-NLS-1$
break;
case THREAD_STATUS_WAIT:
print("WAIT"); //$NON-NLS-1$
break;
default:
print(TcpIpSpyMessages.VerbosePacketStream_unknow_20);
break;
}
println(')');
}
private void printSuspendStatus(int suspendStatus) {
printDescription(TcpIpSpyMessages.VerbosePacketStream_Suspend_status__27);
printHex(suspendStatus);
print(" ("); //$NON-NLS-1$
if ((suspendStatus & SUSPEND_STATUS_SUSPENDED) != 0) {
print("SUSPENDED"); //$NON-NLS-1$
}
println(')');
}
private void printEventKind(byte eventKind) {
printDescription(TcpIpSpyMessages.VerbosePacketStream_Event_kind__28);
printHex(eventKind);
print(" ("); //$NON-NLS-1$
switch (eventKind) {
case EVENTKIND_SINGLE_STEP:
print("SINGLE_STEP"); //$NON-NLS-1$
break;
case EVENTKIND_BREAKPOINT:
print("BREAKPOINT"); //$NON-NLS-1$
break;
case EVENTKIND_FRAME_POP:
print("FRAME_POP"); //$NON-NLS-1$
break;
case EVENTKIND_EXCEPTION:
print("EXCEPTION"); //$NON-NLS-1$
break;
case EVENTKIND_USER_DEFINED:
print("USER_DEFINED"); //$NON-NLS-1$
break;
case EVENTKIND_THREAD_START:
print("THREAD_START"); //$NON-NLS-1$
break;
case EVENTKIND_THREAD_END:
print("THREAD_END"); //$NON-NLS-1$
break;
case EVENTKIND_CLASS_PREPARE:
print("CLASS_PREPARE"); //$NON-NLS-1$
break;
case EVENTKIND_CLASS_UNLOAD:
print("CLASS_UNLOAD"); //$NON-NLS-1$
break;
case EVENTKIND_CLASS_LOAD:
print("CLASS_LOAD"); //$NON-NLS-1$
break;
case EVENTKIND_FIELD_ACCESS:
print("FIELD_ACCESS"); //$NON-NLS-1$
break;
case EVENTKIND_FIELD_MODIFICATION:
print("FIELD_MODIFICATION"); //$NON-NLS-1$
break;
case EVENTKIND_EXCEPTION_CATCH:
print("EXCEPTION_CATCH"); //$NON-NLS-1$
break;
case EVENTKIND_METHOD_ENTRY:
print("METHOD_ENTRY"); //$NON-NLS-1$
break;
case EVENTKIND_METHOD_EXIT:
print("METHOD_EXIT"); //$NON-NLS-1$
break;
case EVENTKIND_VM_INIT:
print("VM_INIT"); //$NON-NLS-1$
break;
case EVENTKIND_VM_DEATH:
print("VM_DEATH"); //$NON-NLS-1$
break;
case EVENTKIND_VM_DISCONNECTED:
print("VM_DISCONNECTED"); //$NON-NLS-1$
break;
default:
print(TcpIpSpyMessages.VerbosePacketStream_unknow_20);
break;
}
println(')');
}
private void printSuspendPolicy(byte suspendPolicy) {
printDescription(TcpIpSpyMessages.VerbosePacketStream_Suspend_policy__30);
printHex(suspendPolicy);
print(" ("); //$NON-NLS-1$
switch (suspendPolicy) {
case SUSPENDPOLICY_NONE:
print("NONE"); //$NON-NLS-1$
break;
case SUSPENDPOLICY_EVENT_THREAD:
print("EVENT_THREAD"); //$NON-NLS-1$
break;
case SUSPENDPOLICY_ALL:
print("ALL"); //$NON-NLS-1$
break;
default:
print(TcpIpSpyMessages.VerbosePacketStream_unknow_20);
break;
}
println(')');
}
private void printStepDepth(int setDepth) {
printDescription(TcpIpSpyMessages.VerbosePacketStream_Step_depth__32);
printHex(setDepth);
print(" ("); //$NON-NLS-1$
switch (setDepth) {
case STEPDEPTH_INTO:
print("INTO"); //$NON-NLS-1$
break;
case STEPDEPTH_OVER:
print("OVER"); //$NON-NLS-1$
break;
case STEPDEPTH_OUT:
print("OUT"); //$NON-NLS-1$
break;
default:
print(TcpIpSpyMessages.VerbosePacketStream_unknow_20);
break;
}
println(')');
}
private void printStepSize(int setSize) {
printDescription(TcpIpSpyMessages.VerbosePacketStream_Step_size__34);
printHex(setSize);
print(" ("); //$NON-NLS-1$
switch (setSize) {
case STEPSIZE_MIN:
print("MIN"); //$NON-NLS-1$
break;
case STEPSIZE_LINE:
print("LINE"); //$NON-NLS-1$
break;
default:
print(TcpIpSpyMessages.VerbosePacketStream_unknow_20);
break;
}
println(')');
}
private void printVmVersionReply(DataInputStream in) throws IOException {
String description= readString(in);
int jdwpMajor= in.readInt();
int jdwpMinor= in.readInt();
String vmVersion= readString(in);
String vmName= readString(in);
println(TcpIpSpyMessages.VerbosePacketStream_VM_Description__36, description);
println(TcpIpSpyMessages.VerbosePacketStream_JDWP_Major_Version__37, jdwpMajor);
println(TcpIpSpyMessages.VerbosePacketStream_JDWP_Minor_Version__38, jdwpMinor);
println(TcpIpSpyMessages.VerbosePacketStream_VM_Version__39, vmVersion);
println(TcpIpSpyMessages.VerbosePacketStream_VM_Name__40, vmName);
}
private void printVmClassesBySignatureCommand(DataInputStream in) throws IOException {
String signature= readString(in);
println(TcpIpSpyMessages.VerbosePacketStream_Class_signature__41, signature);
}
private void printVmClassesBySignatureReply(DataInputStream in) throws IOException, UnableToParseDataException {
int classesCount= in.readInt();
println(TcpIpSpyMessages.VerbosePacketStream_Classes_count__42, classesCount);
for(int i= 0; i < classesCount; i++) {
byte refTypeTag= in.readByte();
long typeId= readReferenceTypeID(in);
int status= in.readInt();
printRefTypeTag(refTypeTag);
printlnReferenceTypeId(TcpIpSpyMessages.VerbosePacketStream_Type_id__43, typeId);
printClassStatus(status);
}
}
private void printVmAllClassesReply(DataInputStream in) throws IOException, UnableToParseDataException {
int classesCount= in.readInt();
println(TcpIpSpyMessages.VerbosePacketStream_Classes_count__42, classesCount);
for(int i= 0; i < classesCount; i++) {
byte refTypeTag= in.readByte();
long typeId= readReferenceTypeID(in);
String signature= readString(in);
int status= in.readInt();
printRefTypeTag(refTypeTag);
printlnReferenceTypeId(TcpIpSpyMessages.VerbosePacketStream_Type_id__43, typeId);
println(TcpIpSpyMessages.VerbosePacketStream_Class_signature__41, signature);
printClassStatus(status);
}
}
private void printVmAllThreadsReply(DataInputStream in) throws IOException, UnableToParseDataException {
int threadsCount= in.readInt();
println(TcpIpSpyMessages.VerbosePacketStream_Threads_count__47, threadsCount);
for(int i= 0; i < threadsCount; i++) {
long threadId= readObjectID(in);
printlnObjectId(TcpIpSpyMessages.VerbosePacketStream_Thread_id__48, threadId);
}
}
private void printVmTopLevelThreadGroupReply(DataInputStream in) throws IOException, UnableToParseDataException {
int groupsCount= in.readInt();
println(TcpIpSpyMessages.VerbosePacketStream_Threads_count__47, groupsCount);
for(int i= 0; i < groupsCount; i++) {
long threadGroupId= readObjectID(in);
printlnObjectId(TcpIpSpyMessages.VerbosePacketStream_Thread_id__48, threadGroupId);
}
}
private void printVmIdSizesReply(DataInputStream in) throws IOException {
int fieldIDSize= in.readInt();
int methodIDSize= in.readInt();
int objectIDSize= in.readInt();
int referenceTypeIDSize= in.readInt();
int frameIDSize= in.readInt();
println(TcpIpSpyMessages.VerbosePacketStream_Field_ID_size__51, fieldIDSize);
println(TcpIpSpyMessages.VerbosePacketStream_Method_ID_size__52, methodIDSize);
println(TcpIpSpyMessages.VerbosePacketStream_Object_ID_size__53, objectIDSize);
println(TcpIpSpyMessages.VerbosePacketStream_Reference_type_ID_size__54, referenceTypeIDSize);
println(TcpIpSpyMessages.VerbosePacketStream_Frame_ID_size__55, frameIDSize);
TcpipSpy.setFieldIDSize(fieldIDSize);
TcpipSpy.setMethodIDSize(methodIDSize);
TcpipSpy.setObjectIDSize(objectIDSize);
TcpipSpy.setReferenceTypeIDSize(referenceTypeIDSize);
TcpipSpy.setFrameIDSize(frameIDSize);
TcpipSpy.setHasSizes(true);
}
private void printVmExitCommand(DataInputStream in) throws IOException {
int exitCode= in.readInt();
println(TcpIpSpyMessages.VerbosePacketStream_Exit_code__56, exitCode);
}
private void printVmCreateStringCommand(DataInputStream in) throws IOException {
String string= readString(in);
println(TcpIpSpyMessages.VerbosePacketStream_String__57, string);
}
private void printVmCreateStringReply(DataInputStream in) throws IOException, UnableToParseDataException {
long stringId= readObjectID(in);
printlnObjectId(TcpIpSpyMessages.VerbosePacketStream_String_id__58, stringId);
}
private void printVmCapabilitiesReply(DataInputStream in) throws IOException {
boolean canWatchFieldModification= in.readBoolean();
boolean canWatchFieldAccess= in.readBoolean();
boolean canGetBytecodes= in.readBoolean();
boolean canGetSyntheticAttribute= in.readBoolean();
boolean canGetOwnedMonitorInfo= in.readBoolean();
boolean canGetCurrentContendedMonitor= in.readBoolean();
boolean canGetMonitorInfo= in.readBoolean();
println(TcpIpSpyMessages.VerbosePacketStream_Can_watch_field_modification__59, canWatchFieldModification);
println(TcpIpSpyMessages.VerbosePacketStream_can_watch_field_access__60, canWatchFieldAccess);
println(TcpIpSpyMessages.VerbosePacketStream_Can_get_bytecodes__61, canGetBytecodes);
println(TcpIpSpyMessages.VerbosePacketStream_Can_get_synthetic_attribute__62, canGetSyntheticAttribute);
println(TcpIpSpyMessages.VerbosePacketStream_Can_get_owned_monitor_info__63, canGetOwnedMonitorInfo);
println(TcpIpSpyMessages.VerbosePacketStream_Can_get_cur__contended_monitor__64, canGetCurrentContendedMonitor);
println(TcpIpSpyMessages.VerbosePacketStream_Can_get_monitor_info__65, canGetMonitorInfo);
}
private void printVmClassPathsReply(DataInputStream in) throws IOException {
String baseDir= readString(in);
println(TcpIpSpyMessages.VerbosePacketStream_Base_directory__66, baseDir);
int classpathCount= in.readInt();
println(TcpIpSpyMessages.VerbosePacketStream_Classpaths_count__67, classpathCount);
for (int i= 0; i < classpathCount; i++) {
String path= readString(in);
println(TcpIpSpyMessages.VerbosePacketStream_Classpath__68, path);
}
int bootclasspathCount= in.readInt();
println(TcpIpSpyMessages.VerbosePacketStream_Bootclasspaths_count__69, bootclasspathCount);
for (int i= 0; i < bootclasspathCount; i++) {
String path= readString(in);
println(TcpIpSpyMessages.VerbosePacketStream_Bootclasspath__70, path);
}
}
private void printVmDisposeObjectsCommand(DataInputStream in) throws IOException, UnableToParseDataException {
int requestsCount= in.readInt();
println(TcpIpSpyMessages.VerbosePacketStream_Requests_Count__71, requestsCount);
for (int i=0; i < requestsCount; i++) {
long objectId= readObjectID(in);
int refsCounts= in.readInt();
printlnObjectId(TcpIpSpyMessages.VerbosePacketStream_Object_id__72, objectId);
println(TcpIpSpyMessages.VerbosePacketStream_References_count__73, refsCounts);
}
}
private void printVmCapabilitiesNewReply(DataInputStream in) throws IOException {
printVmCapabilitiesReply(in);
boolean canRedefineClasses= in.readBoolean();
boolean canAddMethod= in.readBoolean();
boolean canUnrestrictedlyRedefineClasses= in.readBoolean();
boolean canPopFrames= in.readBoolean();
boolean canUseInstanceFilters= in.readBoolean();
boolean canGetSourceDebugExtension= in.readBoolean();
boolean canRequestVMDeathEvent= in.readBoolean();
boolean canSetDefaultStratum= in.readBoolean();
boolean reserved16= in.readBoolean();
boolean reserved17= in.readBoolean();
boolean reserved18= in.readBoolean();
boolean reserved19= in.readBoolean();
boolean reserved20= in.readBoolean();
boolean reserved21= in.readBoolean();
boolean reserved22= in.readBoolean();
boolean reserved23= in.readBoolean();
boolean reserved24= in.readBoolean();
boolean reserved25= in.readBoolean();
boolean reserved26= in.readBoolean();
boolean reserved27= in.readBoolean();
boolean reserved28= in.readBoolean();
boolean reserved29= in.readBoolean();
boolean reserved30= in.readBoolean();
boolean reserved31= in.readBoolean();
boolean reserved32= in.readBoolean();
println(TcpIpSpyMessages.VerbosePacketStream_Can_redefine_classes__74, canRedefineClasses);
println(TcpIpSpyMessages.VerbosePacketStream_Can_add_method__75, canAddMethod);
println(TcpIpSpyMessages.VerbosePacketStream_Can_unrestrictedly_rd__classes__76, canUnrestrictedlyRedefineClasses);
println(TcpIpSpyMessages.VerbosePacketStream_Can_pop_frames__77, canPopFrames);
println(TcpIpSpyMessages.VerbosePacketStream_Can_use_instance_filters__78, canUseInstanceFilters);
println(TcpIpSpyMessages.VerbosePacketStream_Can_get_source_debug_extension__79, canGetSourceDebugExtension);
println(TcpIpSpyMessages.VerbosePacketStream_Can_request_VMDeath_event__80, canRequestVMDeathEvent);
println(TcpIpSpyMessages.VerbosePacketStream_Can_set_default_stratum__81, canSetDefaultStratum);
println(TcpIpSpyMessages.VerbosePacketStream_Reserved__82, reserved16);
println(TcpIpSpyMessages.VerbosePacketStream_Reserved__82, reserved17);
println(TcpIpSpyMessages.VerbosePacketStream_Reserved__82, reserved18);
println(TcpIpSpyMessages.VerbosePacketStream_Reserved__82, reserved19);
println(TcpIpSpyMessages.VerbosePacketStream_Reserved__82, reserved20);
println(TcpIpSpyMessages.VerbosePacketStream_Reserved__82, reserved21);
println(TcpIpSpyMessages.VerbosePacketStream_Reserved__82, reserved22);
println(TcpIpSpyMessages.VerbosePacketStream_Reserved__82, reserved23);
println(TcpIpSpyMessages.VerbosePacketStream_Reserved__82, reserved24);
println(TcpIpSpyMessages.VerbosePacketStream_Reserved__82, reserved25);
println(TcpIpSpyMessages.VerbosePacketStream_Reserved__82, reserved26);
println(TcpIpSpyMessages.VerbosePacketStream_Reserved__82, reserved27);
println(TcpIpSpyMessages.VerbosePacketStream_Reserved__82, reserved28);
println(TcpIpSpyMessages.VerbosePacketStream_Reserved__82, reserved29);
println(TcpIpSpyMessages.VerbosePacketStream_Reserved__82, reserved30);
println(TcpIpSpyMessages.VerbosePacketStream_Reserved__82, reserved31);
println(TcpIpSpyMessages.VerbosePacketStream_Reserved__82, reserved32);
}
private void printVmRedefineClassCommand(DataInputStream in) throws IOException, UnableToParseDataException {
int typesCount= in.readInt();
println(TcpIpSpyMessages.VerbosePacketStream_Types_count__99, typesCount);
for (int i= 0; i < typesCount; i++) {
long typeId= readReferenceTypeID(in);
int classfileLength= in.readInt();
printlnReferenceTypeId(TcpIpSpyMessages.VerbosePacketStream_Type_id__43, typeId);
println(TcpIpSpyMessages.VerbosePacketStream_Classfile_length__101, classfileLength);
while((classfileLength -= in.skipBytes(classfileLength)) != 0) {
}
printDescription(TcpIpSpyMessages.VerbosePacketStream_Class_bytes__102);
println(TcpIpSpyMessages.VerbosePacketStream_skipped_103);
}
}
private void printVmSetDefaultStratumCommand(DataInputStream in) throws IOException {
String stratumId= readString(in);
println(TcpIpSpyMessages.VerbosePacketStream_Stratum_id__104, stratumId);
}
private void printVmAllClassesWithGenericReply(DataInputStream in) throws IOException, UnableToParseDataException {
int classesCount= in.readInt();
println(TcpIpSpyMessages.VerbosePacketStream_Classes_count__42, classesCount);
for(int i= 0; i < classesCount; i++) {
byte refTypeTag= in.readByte();
long typeId= readReferenceTypeID(in);
String signature= readString(in);
String genericSignature= readString(in);
int status= in.readInt();
printRefTypeTag(refTypeTag);
printlnReferenceTypeId(TcpIpSpyMessages.VerbosePacketStream_Type_id__43, typeId);
println(TcpIpSpyMessages.VerbosePacketStream_Class_signature__41, signature);
println(TcpIpSpyMessages.VerbosePacketStream_Generic_class_signature__405, genericSignature);
printClassStatus(status);
}
}
private void printRtDefaultCommand(DataInputStream in) throws IOException, UnableToParseDataException {
long typeId= readReferenceTypeID(in);
printlnReferenceTypeId(TcpIpSpyMessages.VerbosePacketStream_Type_id__43, typeId);
}
private void printRtSignatureReply(DataInputStream in) throws IOException {
String signature= readString(in);
println(TcpIpSpyMessages.VerbosePacketStream_Signature__106, signature);
}
private void printRtClassLoaderReply(DataInputStream in) throws IOException, UnableToParseDataException {
long classLoaderId= readObjectID(in);
printlnObjectId(TcpIpSpyMessages.VerbosePacketStream_ClassLoader_id__107, classLoaderId);
}
private void printRtModifiersReply(DataInputStream in) throws IOException {
int modifiers= in.readInt();
printClassModifiers(modifiers);
}
private void printRtFieldsReply(DataInputStream in) throws IOException, UnableToParseDataException {
int fieldsCount= in.readInt();
println(TcpIpSpyMessages.VerbosePacketStream_Fields_count__108, fieldsCount);
for (int i= 0; i < fieldsCount; i++) {
long fieldId= readFieldID(in);
String name= readString(in);
String signature= readString(in);
int modifiers= in.readInt();
printlnFieldId(TcpIpSpyMessages.VerbosePacketStream_Field_id__109, fieldId);
println(TcpIpSpyMessages.VerbosePacketStream_Name__110, name);
println(TcpIpSpyMessages.VerbosePacketStream_Signature__106, signature);
printFieldModifiers(modifiers);
}
}
private void printRtMethodsReply(DataInputStream in) throws IOException, UnableToParseDataException {
int methodsCount= in.readInt();
println(TcpIpSpyMessages.VerbosePacketStream_Methods_count__112, methodsCount);
for (int i= 0; i < methodsCount; i++) {
long methodId= readMethodID(in);
String name= readString(in);
String signature= readString(in);
int modifiers= in.readInt();
printlnMethodId(TcpIpSpyMessages.VerbosePacketStream_Method_id__113, methodId);
println(TcpIpSpyMessages.VerbosePacketStream_Name__110, name);
println(TcpIpSpyMessages.VerbosePacketStream_Signature__106, signature);
printMethodModifiers(modifiers);
}
}
private void printRtGetValuesCommand(DataInputStream in) throws IOException, UnableToParseDataException {
long typeId= readReferenceTypeID(in);
int fieldsCount= in.readInt();
printlnReferenceTypeId(TcpIpSpyMessages.VerbosePacketStream_Type_id__43, typeId);
println(TcpIpSpyMessages.VerbosePacketStream_Fields_count__108, fieldsCount);
for (int i= 0; i < fieldsCount; i++) {
long fieldId= readFieldID(in);
printlnFieldId(TcpIpSpyMessages.VerbosePacketStream_Field_id__109, fieldId);
}
}
private void printRtGetValuesReply(DataInputStream in) throws IOException, UnableToParseDataException {
int valuesCount= in.readInt();
println(TcpIpSpyMessages.VerbosePacketStream_Values_count__119, valuesCount);
for (int i= 0; i < valuesCount; i++) {
readAndPrintlnTaggedValue(TcpIpSpyMessages.VerbosePacketStream_Value__120, in);
}
}
private void printRtSourceFileReply(DataInputStream in) throws IOException {
String sourceFile= readString(in);
println(TcpIpSpyMessages.VerbosePacketStream_Source_file__121, sourceFile);
}
private void printRtNestedTypesReply(DataInputStream in) throws IOException, UnableToParseDataException {
int typesCount= in.readInt();
println(TcpIpSpyMessages.VerbosePacketStream_Types_count__99, typesCount);
for (int i= 0; i < typesCount; i++) {
byte typeTag= in.readByte();
long typeId= readReferenceTypeID(in);
printRefTypeTag(typeTag);
printlnReferenceTypeId(TcpIpSpyMessages.VerbosePacketStream_Type_id__43, typeId);
}
}
private void printRtStatusReply(DataInputStream in) throws IOException {
int status= in.readInt();
printClassStatus(status);
}
private void printRtInterfacesReply(DataInputStream in) throws IOException, UnableToParseDataException {
int interfacesCount= in.readInt();
println(TcpIpSpyMessages.VerbosePacketStream_Interfaces_count__124, interfacesCount);
for (int i= 0; i < interfacesCount; i ++) {
long interfaceId= readReferenceTypeID(in);
printlnReferenceTypeId(TcpIpSpyMessages.VerbosePacketStream_Interface_type_id__125, interfaceId);
}
}
private void printRtClassObjectReply(DataInputStream in) throws IOException, UnableToParseDataException {
long classObjectId= readObjectID(in);
printlnObjectId(TcpIpSpyMessages.VerbosePacketStream_Class_object_id__126, classObjectId);
}
private void printRtSourceDebugExtensionReply(DataInputStream in) throws IOException {
String extension= readString(in);
println(TcpIpSpyMessages.VerbosePacketStream_Extension__127, extension);
}
private void printRtSignatureWithGenericReply(DataInputStream in) throws IOException {
String signature= readString(in);
String genericSignature= readString(in);
println(TcpIpSpyMessages.VerbosePacketStream_Signature__106, signature);
println(TcpIpSpyMessages.VerbosePacketStream_Generic_signature__422, genericSignature);
}
private void printRtFieldsWithGenericReply(DataInputStream in) throws IOException, UnableToParseDataException {
int fieldsCount= in.readInt();
println(TcpIpSpyMessages.VerbosePacketStream_Fields_count__108, fieldsCount);
for (int i= 0; i < fieldsCount; i++) {
long fieldId= readFieldID(in);
String name= readString(in);
String signature= readString(in);
String genericSignature= readString(in);
int modifiers= in.readInt();
printlnFieldId(TcpIpSpyMessages.VerbosePacketStream_Field_id__109, fieldId);
println(TcpIpSpyMessages.VerbosePacketStream_Name__110, name);
println(TcpIpSpyMessages.VerbosePacketStream_Signature__106, signature);
println(TcpIpSpyMessages.VerbosePacketStream_Generic_signature__422, genericSignature);
printFieldModifiers(modifiers);
}
}
private void printRtMethodsWithGenericReply(DataInputStream in) throws IOException, UnableToParseDataException {
int methodsCount= in.readInt();
println(TcpIpSpyMessages.VerbosePacketStream_Methods_count__112, methodsCount);
for (int i= 0; i < methodsCount; i++) {
long methodId= readMethodID(in);
String name= readString(in);
String signature= readString(in);
String genericSignature= readString(in);
int modifiers= in.readInt();
printlnMethodId(TcpIpSpyMessages.VerbosePacketStream_Method_id__113, methodId);
println(TcpIpSpyMessages.VerbosePacketStream_Name__110, name);
// println(TcpIpSpyMessages.VerbosePacketStream_Signature__106, signature);
println(TcpIpSpyMessages.VerbosePacketStream_Generic_signature__422, genericSignature);
printMethodModifiers(modifiers);
}
}
private void printCtSuperclassCommand(DataInputStream in) throws IOException, UnableToParseDataException {
long classTypeId= readReferenceTypeID(in);
printlnReferenceTypeId(TcpIpSpyMessages.VerbosePacketStream_Class_type_id__128, classTypeId);
}
private void printCtSuperclassReply(DataInputStream in) throws IOException, UnableToParseDataException {
long superclassTypeId= readReferenceTypeID(in);
printlnReferenceTypeId(TcpIpSpyMessages.VerbosePacketStream_Superclass_type_id__129, superclassTypeId);
}
private void printCtSetValuesCommand(DataInputStream in) throws IOException, UnableToParseDataException {
long classTypeId= readReferenceTypeID(in);
int fieldsCount= in.readInt();
printlnReferenceTypeId(TcpIpSpyMessages.VerbosePacketStream_Class_type_id__128, classTypeId);
println(TcpIpSpyMessages.VerbosePacketStream_Fields_count__108, fieldsCount);
throw new UnableToParseDataException(TcpIpSpyMessages.VerbosePacketStream_List_of_values__NOT_MANAGED_132, remainderData(in));
}
private void printCtInvokeMethodCommand(DataInputStream in) throws IOException, UnableToParseDataException {
long classTypeId= readReferenceTypeID(in);
long threadId= readObjectID(in);
long methodId= readMethodID(in);
int argumentsCount= in.readInt();
printlnReferenceTypeId(TcpIpSpyMessages.VerbosePacketStream_Class_type_id__128, classTypeId);
printlnObjectId(TcpIpSpyMessages.VerbosePacketStream_Thread_id__48, threadId);
printlnMethodId(TcpIpSpyMessages.VerbosePacketStream_Method_id__113, methodId);
println(TcpIpSpyMessages.VerbosePacketStream_Arguments_count__136, argumentsCount);
for (int i= 0; i < argumentsCount; i++) {
readAndPrintlnTaggedValue(TcpIpSpyMessages.VerbosePacketStream_Argument__137, in);
}
int invocationOptions= in.readInt();
printInvocationOptions(invocationOptions);
}
private void printCtInvokeMethodReply(DataInputStream in) throws IOException, UnableToParseDataException {
readAndPrintlnTaggedValue(TcpIpSpyMessages.VerbosePacketStream_Return_value__138, in);
byte signatureByte= in.readByte();
long exception= readObjectID(in);
printlnTaggedObjectId(TcpIpSpyMessages.VerbosePacketStream_Exception_object_id__139, exception, signatureByte);
}
private void printCtNewInstanceCommand(DataInputStream in) throws IOException, UnableToParseDataException {
printCtInvokeMethodCommand(in);
}
private void printCtNewInstanceReply(DataInputStream in) throws IOException, UnableToParseDataException {
byte objectSignatureByte= in.readByte();
long newObjectId= readObjectID(in);
byte exceptionSignatureByte= in.readByte();
long exception= readObjectID(in);
printlnTaggedObjectId(TcpIpSpyMessages.VerbosePacketStream_New_object_id__140, newObjectId, objectSignatureByte);
printlnTaggedObjectId(TcpIpSpyMessages.VerbosePacketStream_Exception_object_id__139, exception, exceptionSignatureByte);
}
private void printAtNewInstanceCommand(DataInputStream in) throws IOException, UnableToParseDataException {
long arrayTypeId= readReferenceTypeID(in);
int length= in.readInt();
printlnReferenceTypeId(TcpIpSpyMessages.VerbosePacketStream_Array_type_id__142, arrayTypeId);
println(TcpIpSpyMessages.VerbosePacketStream_Length__143, length);
}
private void printAtNewInstanceReply(DataInputStream in) throws IOException, UnableToParseDataException {
byte signatureByte= in.readByte();
long newArrayId= readObjectID(in);
printlnTaggedObjectId(TcpIpSpyMessages.VerbosePacketStream_New_array_id__144, newArrayId, signatureByte);
}
private void printMDefaultCommand(DataInputStream in) throws IOException, UnableToParseDataException {
long classTypeId= readReferenceTypeID(in);
long methodId= readMethodID(in);
printlnReferenceTypeId(TcpIpSpyMessages.VerbosePacketStream_Class_type_id__128, classTypeId);
printlnMethodId(TcpIpSpyMessages.VerbosePacketStream_Method_id__113, methodId);
}
private void printMLineTableReply(DataInputStream in) throws IOException {
long start= in.readLong();
long end= in.readLong();
int lines= in.readInt();
println(TcpIpSpyMessages.VerbosePacketStream_Lowest_valid_code_index__147, start);
println(TcpIpSpyMessages.VerbosePacketStream_Highest_valid_code_index__148, end);
println(TcpIpSpyMessages.VerbosePacketStream_Number_of_lines__149, lines);
for (int i= 0; i < lines; i++) {
long lineCodeIndex= in.readLong();
int lineNumber= in.readInt();
println(TcpIpSpyMessages.VerbosePacketStream_Line_code_Index__150, lineCodeIndex);
println(TcpIpSpyMessages.VerbosePacketStream_Line_number__151, lineNumber);
}
}
private void printMVariableTableReply(DataInputStream in) throws IOException {
int slotsUsedByArgs= in.readInt();
int variablesCount= in.readInt();
println(TcpIpSpyMessages.VerbosePacketStream_Nb_of_slots_used_by_all_args__152, slotsUsedByArgs);
println(TcpIpSpyMessages.VerbosePacketStream_Nb_of_variables__153, variablesCount);
for (int i= 0; i < variablesCount; i++) {
long codeIndex= in.readLong();
String name= readString(in);
String signature= readString(in);
int length= in.readInt();
int slotId= in.readInt();
println(TcpIpSpyMessages.VerbosePacketStream_First_code_index__154, codeIndex);
println(TcpIpSpyMessages.VerbosePacketStream_Variable_name__155, name);
println(TcpIpSpyMessages.VerbosePacketStream_Variable_type_signature__156, signature);
println(TcpIpSpyMessages.VerbosePacketStream_Code_index_length__157, length);
println(TcpIpSpyMessages.VerbosePacketStream_Slot_id__158, slotId);
}
}
private void printMBytecodesReply(DataInputStream in) throws IOException {
int bytes= in.readInt();
println(TcpIpSpyMessages.VerbosePacketStream_Nb_of_bytes__159, bytes);
while((bytes -= in.skipBytes(bytes)) != 0) {
}
printDescription(TcpIpSpyMessages.VerbosePacketStream_Method_bytes__160);
println(TcpIpSpyMessages.VerbosePacketStream_skipped_103);
}
private void printMIsObsoleteReply(DataInputStream in) throws IOException {
boolean isObsolete= in.readBoolean();
println(TcpIpSpyMessages.VerbosePacketStream_Is_obsolete__162, isObsolete);
}
private void printMVariableTableWithGenericReply(DataInputStream in) throws IOException {
int slotsUsedByArgs= in.readInt();
int variablesCount= in.readInt();
println(TcpIpSpyMessages.VerbosePacketStream_Nb_of_slots_used_by_all_args__152, slotsUsedByArgs);
println(TcpIpSpyMessages.VerbosePacketStream_Nb_of_variables__153, variablesCount);
for (int i= 0; i < variablesCount; i++) {
long codeIndex= in.readLong();
String name= readString(in);
String signature= readString(in);
String genericSignature= readString(in);
int length= in.readInt();
int slotId= in.readInt();
println(TcpIpSpyMessages.VerbosePacketStream_First_code_index__154, codeIndex);
println(TcpIpSpyMessages.VerbosePacketStream_Variable_name__155, name);
println(TcpIpSpyMessages.VerbosePacketStream_Variable_type_signature__156, signature);
println(TcpIpSpyMessages.VerbosePacketStream_Variable_type_generic_signature__425, genericSignature);
println(TcpIpSpyMessages.VerbosePacketStream_Code_index_length__157, length);
println(TcpIpSpyMessages.VerbosePacketStream_Slot_id__158, slotId);
}
}
private void printOrDefaultCommand(DataInputStream in) throws IOException, UnableToParseDataException {
long objectId= readObjectID(in);
println(TcpIpSpyMessages.VerbosePacketStream_Object_id__72, objectId);
}
private void printOrReferenceTypeReply(DataInputStream in) throws IOException, UnableToParseDataException {
byte refTypeTag= in.readByte();
long typeId= readReferenceTypeID(in);
printRefTypeTag(refTypeTag);
printlnReferenceTypeId(TcpIpSpyMessages.VerbosePacketStream_Type_id__43, typeId);
}
private void printOrGetValuesCommand(DataInputStream in) throws IOException, UnableToParseDataException {
long objectId= readObjectID(in);
int fieldsCount= in.readInt();
println(TcpIpSpyMessages.VerbosePacketStream_Object_id__72, objectId);
println(TcpIpSpyMessages.VerbosePacketStream_Fields_count__108, fieldsCount);
for (int i= 0; i < fieldsCount; i++) {
long fieldId= readFieldID(in);
println(TcpIpSpyMessages.VerbosePacketStream_Field_id__109, fieldId);
}
}
private void printOrGetValuesReply(DataInputStream in) throws IOException, UnableToParseDataException {
int valuesCount= in.readInt();
println(TcpIpSpyMessages.VerbosePacketStream_Values_count__119, valuesCount);
for (int i= 0; i < valuesCount; i++) {
readAndPrintlnTaggedValue(TcpIpSpyMessages.VerbosePacketStream_Value__120, in);
}
}
private void printOrSetValuesCommand(DataInputStream in) throws IOException, UnableToParseDataException {
long objectId= readObjectID(in);
int fieldsCount= in.readInt();
println(TcpIpSpyMessages.VerbosePacketStream_Object_id__72, objectId);
println(TcpIpSpyMessages.VerbosePacketStream_Fields_count__108, fieldsCount);
throw new UnableToParseDataException(TcpIpSpyMessages.VerbosePacketStream_List_of_values__NOT_MANAGED_132, remainderData(in));
}
private void printOrMonitorInfoReply(DataInputStream in) throws IOException, UnableToParseDataException {
long ownerThreadId= readObjectID(in);
int entryCount= in.readInt();
int waiters= in.readInt();
printlnObjectId(TcpIpSpyMessages.VerbosePacketStream_Owner_thread_id__173, ownerThreadId);
println(TcpIpSpyMessages.VerbosePacketStream_Entry_count__174, entryCount);
println(TcpIpSpyMessages.VerbosePacketStream_Nb_of_waiters__175, waiters);
long waiterThreadId;
for (int i= 0; i < waiters; i++) {
waiterThreadId= readObjectID(in);
printlnObjectId(TcpIpSpyMessages.VerbosePacketStream_Waiting_thread_id__176, waiterThreadId);
}
}
private void printOrInvokeMethodCommand(DataInputStream in) throws IOException, UnableToParseDataException {
long objectId= readObjectID(in);
long threadId= readObjectID(in);
long classTypeId= readReferenceTypeID(in);
long methodId= readMethodID(in);
int argsCount= in.readInt();
printlnObjectId(TcpIpSpyMessages.VerbosePacketStream_Object_id__72, objectId);
printlnObjectId(TcpIpSpyMessages.VerbosePacketStream_Thread_id__48, threadId);
printlnReferenceTypeId(TcpIpSpyMessages.VerbosePacketStream_Class_type_id__128, classTypeId);
printlnMethodId(TcpIpSpyMessages.VerbosePacketStream_Method_id__113, methodId);
println(TcpIpSpyMessages.VerbosePacketStream_Arguments_count__136, argsCount);
for (int i= 0; i < argsCount; i++) {
readAndPrintlnTaggedValue(TcpIpSpyMessages.VerbosePacketStream_Argument__137, in);
}
int invocationOption= in.readInt();
printInvocationOptions(invocationOption);
}
private void printOrInvokeMethodReply(DataInputStream in) throws IOException, UnableToParseDataException {
readAndPrintlnTaggedValue(TcpIpSpyMessages.VerbosePacketStream_Return_value__138, in);
byte signatureByte= in.readByte();
long exception= readObjectID(in);
printlnTaggedObjectId(TcpIpSpyMessages.VerbosePacketStream_Exception_object_id__139, exception, signatureByte);
}
private void printOrIsCollectedReply(DataInputStream in) throws IOException {
boolean isCollected= in.readBoolean();
println(TcpIpSpyMessages.VerbosePacketStream_Is_collected__185, isCollected);
}
private void printSrValueCommand(DataInputStream in) throws IOException, UnableToParseDataException {
long stringObjectId= readObjectID(in);
printlnObjectId(TcpIpSpyMessages.VerbosePacketStream_String_object_id__186, stringObjectId);
}
private void printSrValueReply(DataInputStream in) throws IOException {
String value= readString(in);
println(TcpIpSpyMessages.VerbosePacketStream_Value__120, value);
}
private void printTrDefaultCommand(DataInputStream in) throws IOException, UnableToParseDataException {
long threadId= readObjectID(in);
printlnObjectId(TcpIpSpyMessages.VerbosePacketStream_Thread_id__48, threadId);
}
private void printTrNameReply(DataInputStream in) throws IOException {
String threadName= readString(in);
println(TcpIpSpyMessages.VerbosePacketStream_Name__110, threadName);
}
private void printTrStatusReply(DataInputStream in) throws IOException {
int threadStatus= in.readInt();
int suspendStatus= in.readInt();
printThreadStatus(threadStatus);
printSuspendStatus(suspendStatus);
}
private void printTrThreadGroupReply(DataInputStream in) throws IOException, UnableToParseDataException {
long threadGroupId= readObjectID(in);
printlnObjectId(TcpIpSpyMessages.VerbosePacketStream_Thread_group_id__190, threadGroupId);
}
private void printTrFramesCommand(DataInputStream in) throws IOException, UnableToParseDataException {
long threadId= readObjectID(in);
int startFrame= in.readInt();
int length= in.readInt();
printlnObjectId(TcpIpSpyMessages.VerbosePacketStream_Thread_id__48, threadId);
println(TcpIpSpyMessages.VerbosePacketStream_First_frame__192, startFrame);
println(TcpIpSpyMessages.VerbosePacketStream_Number_of_frame__193, length);
}
private void printTrFramesReply(DataInputStream in) throws IOException, UnableToParseDataException {
int framesCount= in.readInt();
println(TcpIpSpyMessages.VerbosePacketStream_Frames_count__194, framesCount);
for (int i= 0; i < framesCount; i++) {
long frameId= readFrameID(in);
printlnFrameId(TcpIpSpyMessages.VerbosePacketStream_Frame_id__195, frameId);
readAndPrintLocation(in);
}
}
private void printTrFrameCountReply(DataInputStream in) throws IOException {
int framesCount= in.readInt();
println(TcpIpSpyMessages.VerbosePacketStream_Frames_count__194, framesCount);
}
private void printTrOwnedMonitorsReply(DataInputStream in) throws IOException, UnableToParseDataException {
int monitorsCount= in.readInt();
println(TcpIpSpyMessages.VerbosePacketStream_Monitors_count__197, monitorsCount);
for (int i= 0; i < monitorsCount; i++) {
byte signatureByte= in.readByte();
long monitorObjectId= readObjectID(in);
printlnTaggedObjectId(TcpIpSpyMessages.VerbosePacketStream_Monitor_object_id__198, monitorObjectId, signatureByte);
}
}
private void printTrCurrentContendedMonitorReply(DataInputStream in) throws IOException, UnableToParseDataException {
byte signatureByte= in.readByte();
long monitorObjectId= readObjectID(in);
printlnTaggedObjectId(TcpIpSpyMessages.VerbosePacketStream_Monitor_object_id__198, monitorObjectId, signatureByte);
}
private void printTrStopCommand(DataInputStream in) throws IOException, UnableToParseDataException {
long threadId= readObjectID(in);
long exceptionObjectId= readObjectID(in);
printlnObjectId(TcpIpSpyMessages.VerbosePacketStream_Thread_id__48, threadId);
printlnObjectId(TcpIpSpyMessages.VerbosePacketStream_Exception_object_id__139, exceptionObjectId);
}
private void printTrSuspendCountReply(DataInputStream in) throws IOException {
int suspendCount= in.readInt();
println(TcpIpSpyMessages.VerbosePacketStream_Suspend_count__202, suspendCount);
}
private void printTgrDefaultCommand(DataInputStream in) throws IOException, UnableToParseDataException {
long threadGroupId= readObjectID(in);
printlnObjectId(TcpIpSpyMessages.VerbosePacketStream_Thread_group_id__190, threadGroupId);
}
private void printTgrNameReply(DataInputStream in) throws IOException {
String name= readString(in);
println(TcpIpSpyMessages.VerbosePacketStream_Name__110, name);
}
private void printTgrParentReply(DataInputStream in) throws IOException, UnableToParseDataException {
long parentThreadGroupId= readObjectID(in);
printlnObjectId(TcpIpSpyMessages.VerbosePacketStream_Parent_thread_group_id__205, parentThreadGroupId);
}
private void printTgrChildrenReply(DataInputStream in) throws IOException, UnableToParseDataException {
int childThreadsCount= in.readInt();
println(TcpIpSpyMessages.VerbosePacketStream_Child_threads_count__206, childThreadsCount);
for (int i= 0; i < childThreadsCount; i++) {
long childThreadId= readObjectID(in);
printlnObjectId(TcpIpSpyMessages.VerbosePacketStream_Child_thread_id__207, childThreadId);
}
int childGroupThreadsCount= in.readInt();
println(TcpIpSpyMessages.VerbosePacketStream_Child_group_threads_count__208, childGroupThreadsCount);
for (int i= 0; i < childGroupThreadsCount; i++) {
long childGroupThreadId= readObjectID(in);
printlnObjectId(TcpIpSpyMessages.VerbosePacketStream_Child_group_thread_id__209, childGroupThreadId);
}
}
private void printArLengthCommand(DataInputStream in) throws IOException, UnableToParseDataException {
long arrayObjectId= readObjectID(in);
printlnObjectId(TcpIpSpyMessages.VerbosePacketStream_Array_object_id__210, arrayObjectId);
}
private void printArLengthReply(DataInputStream in) throws IOException {
int length= in.readInt();
println(TcpIpSpyMessages.VerbosePacketStream_Length__143, length);
}
private void printArGetValuesCommand(DataInputStream in) throws IOException, UnableToParseDataException {
long arrayObjectId= readObjectID(in);
int firstIndex= in.readInt();
int length= in.readInt();
printlnObjectId(TcpIpSpyMessages.VerbosePacketStream_Array_object_id__210, arrayObjectId);
println(TcpIpSpyMessages.VerbosePacketStream_First_index__213, firstIndex);
println(TcpIpSpyMessages.VerbosePacketStream_Length__214, length);
}
private void printArGetValuesReply(DataInputStream in) throws IOException, UnableToParseDataException {
readAndPrintArrayRegion(in);
}
private void printArSetValuesCommand(DataInputStream in) throws IOException, UnableToParseDataException {
long arrayObjectId= readObjectID(in);
int firstIndex= in.readInt();
int length= in.readInt();
printlnObjectId(TcpIpSpyMessages.VerbosePacketStream_Array_object_id__210, arrayObjectId);
println(TcpIpSpyMessages.VerbosePacketStream_First_index__213, firstIndex);
println(TcpIpSpyMessages.VerbosePacketStream_Length__214, length);
throw new UnableToParseDataException(TcpIpSpyMessages.VerbosePacketStream_List_of_values__NOT_MANAGED_132, remainderData(in));
}
private void printClrVisibleClassesCommand(DataInputStream in) throws IOException, UnableToParseDataException {
long classLoaderObjectId= readObjectID(in);
printlnObjectId(TcpIpSpyMessages.VerbosePacketStream_Class_loader_object_id__219, classLoaderObjectId);
}
private void printClrVisibleClassesReply(DataInputStream in) throws IOException, UnableToParseDataException {
int classesCount= in.readInt();
println(TcpIpSpyMessages.VerbosePacketStream_Classes_count__42, classesCount);
for (int i= 0; i < classesCount; i++) {
byte refTypeTag= in.readByte();
long typeId= readReferenceTypeID(in);
printRefTypeTag(refTypeTag);
printlnReferenceTypeId(TcpIpSpyMessages.VerbosePacketStream_Type_id__43, typeId);
}
}
private void printErSetCommand(DataInputStream in) throws IOException, UnableToParseDataException {
byte eventKind= in.readByte();
byte suspendPolicy= in.readByte();
int modifiersCount= in.readInt();
printEventKind(eventKind);
printSuspendPolicy(suspendPolicy);
println(TcpIpSpyMessages.VerbosePacketStream_Modifiers_count__222, modifiersCount);
for (int i= 0; i < modifiersCount; i++) {
byte modKind= in.readByte();
printDescription(TcpIpSpyMessages.VerbosePacketStream_Modifier_kind__223);
printHex(modKind);
switch (modKind) {
case 1: // count
println(TcpIpSpyMessages.VerbosePacketStream___Count__224);
int count= in.readInt();
println(TcpIpSpyMessages.VerbosePacketStream_Count__225, count);
break;
case 2: // conditional
println(TcpIpSpyMessages.VerbosePacketStream___Conditional__226);
int exprId= in.readInt();
println(TcpIpSpyMessages.VerbosePacketStream_Expression_id__227, exprId);
break;
case 3: // thread only
println(TcpIpSpyMessages.VerbosePacketStream___ThreadOnly__228);
long threadId= readObjectID(in);
printlnObjectId(TcpIpSpyMessages.VerbosePacketStream_Thread_id__48, threadId);
break;
case 4: // class only
println(TcpIpSpyMessages.VerbosePacketStream___ClassOnly__230);
long classId= readReferenceTypeID(in);
printlnReferenceTypeId(TcpIpSpyMessages.VerbosePacketStream_Class_type_id__128, classId);
break;
case 5: // class match
println(TcpIpSpyMessages.VerbosePacketStream___ClassMatch__232);
String classPatern= readString(in);
println(TcpIpSpyMessages.VerbosePacketStream_Class_patern__233, classPatern);
break;
case 6: // class exclude
println(TcpIpSpyMessages.VerbosePacketStream___ClassExclude__234);
classPatern= readString(in);
println(TcpIpSpyMessages.VerbosePacketStream_Class_patern__235, classPatern);
break;
case 7: // location only
println(TcpIpSpyMessages.VerbosePacketStream___LocationOnly__236);
readAndPrintLocation(in);
break;
case 8: // exception only
println(TcpIpSpyMessages.VerbosePacketStream___ExceptionOnly__237);
long typeId= readReferenceTypeID(in);
boolean caught= in.readBoolean();
boolean uncaught= in.readBoolean();
printlnReferenceTypeId(TcpIpSpyMessages.VerbosePacketStream_Exception_type_id__238, typeId);
println(TcpIpSpyMessages.VerbosePacketStream_Caught__239, caught);
println(TcpIpSpyMessages.VerbosePacketStream_Uncaught__240, uncaught);
break;
case 9: // field only
println(TcpIpSpyMessages.VerbosePacketStream___FieldOnly__241);
long declaringTypeId= readReferenceTypeID(in);
long fieldId= readFieldID(in);
printlnReferenceTypeId(TcpIpSpyMessages.VerbosePacketStream_Declaring_type_id__242, declaringTypeId);
printlnFieldId(TcpIpSpyMessages.VerbosePacketStream_Field_id__109, fieldId);
break;
case 10: // step
println(TcpIpSpyMessages.VerbosePacketStream___Step__244);
threadId= readObjectID(in);
int stepSize= in.readInt();
int stepDepth= in.readInt();
printlnObjectId(TcpIpSpyMessages.VerbosePacketStream_Thread_id__48, threadId);
printStepSize(stepSize);
printStepDepth(stepDepth);
break;
case 11: // instance only
println(TcpIpSpyMessages.VerbosePacketStream___InstanceOnly__246);
long objectId= readObjectID(in);
printlnObjectId(TcpIpSpyMessages.VerbosePacketStream_Object_id__72, objectId);
break;
}
}
}
private void printErSetReply(DataInputStream in) throws IOException {
int requestId= in.readInt();
println(TcpIpSpyMessages.VerbosePacketStream_Request_id__248, requestId);
}
private void printErClearCommand(DataInputStream in) throws IOException {
byte eventKind= in.readByte();
int requestId= in.readInt();
printEventKind(eventKind);
println(TcpIpSpyMessages.VerbosePacketStream_Request_id__248, requestId);
}
private void printSfDefaultCommand(DataInputStream in) throws IOException, UnableToParseDataException {
long threadId= readObjectID(in);
long frameId= readFrameID(in);
printlnObjectId(TcpIpSpyMessages.VerbosePacketStream_Thread_object_id__250, threadId);
printlnFrameId(TcpIpSpyMessages.VerbosePacketStream_Frame_id__195, frameId);
}
private void printSfGetValuesCommand(DataInputStream in) throws IOException, UnableToParseDataException {
long threadId= readObjectID(in);
long frameId= readFrameID(in);
int slotsCount= in.readInt();
printlnObjectId(TcpIpSpyMessages.VerbosePacketStream_Thread_object_id__250, threadId);
printlnFrameId(TcpIpSpyMessages.VerbosePacketStream_Frame_id__195, frameId);
println(TcpIpSpyMessages.VerbosePacketStream_Slots_count__254, slotsCount);
for (int i= 0; i < slotsCount; i++) {
int slotIndex= in.readInt();
byte signatureTag= in.readByte();
println(TcpIpSpyMessages.VerbosePacketStream_Slot_index__255, slotIndex);
printDescription(TcpIpSpyMessages.VerbosePacketStream_Signature_tag__256);
printSignatureByte(signatureTag, true);
println();
}
}
private void printSfGetValuesReply(DataInputStream in) throws IOException, UnableToParseDataException {
int valuesCount= in.readInt();
println(TcpIpSpyMessages.VerbosePacketStream_Values_count__119, valuesCount);
for (int i= 0; i < valuesCount; i++) {
readAndPrintlnTaggedValue(TcpIpSpyMessages.VerbosePacketStream_Value__120, in);
}
}
private void printSfSetValuesCommand(DataInputStream in) throws IOException, UnableToParseDataException {
long threadId= readObjectID(in);
long frameId= readFrameID(in);
int slotsCount= in.readInt();
printlnObjectId(TcpIpSpyMessages.VerbosePacketStream_Thread_object_id__250, threadId);
printlnFrameId(TcpIpSpyMessages.VerbosePacketStream_Frame_id__195, frameId);
println(TcpIpSpyMessages.VerbosePacketStream_Slots_count__254, slotsCount);
for (int i= 0; i < slotsCount; i++) {
int slotIndex= in.readInt();
println(TcpIpSpyMessages.VerbosePacketStream_Slot_index__255, slotIndex);
readAndPrintlnTaggedValue(TcpIpSpyMessages.VerbosePacketStream_Values__263, in);
}
}
private void printSfThisObjectReply(DataInputStream in) throws IOException, UnableToParseDataException {
byte signatureByte= in.readByte();
long objectId= readObjectID(in);
printlnTaggedObjectId(TcpIpSpyMessages.VerbosePacketStream___this___object_id__264, objectId, signatureByte);
}
private void printCorReflectedTypeCommand(DataInputStream in) throws IOException, UnableToParseDataException {
long classObjectId= readObjectID(in);
printlnObjectId(TcpIpSpyMessages.VerbosePacketStream_Class_object_id__126, classObjectId);
}
private void printCorReflectedTypeReply(DataInputStream in) throws IOException, UnableToParseDataException {
byte refTypeTag= in.readByte();
long typeId= readReferenceTypeID(in);
printRefTypeTag(refTypeTag);
printlnReferenceTypeId(TcpIpSpyMessages.VerbosePacketStream_Type_id__43, typeId);
}
private void printECompositeCommand(DataInputStream in) throws IOException, UnableToParseDataException {
byte suspendPolicy= in.readByte();
int eventsCount= in.readInt();
printSuspendPolicy(suspendPolicy);
println(TcpIpSpyMessages.VerbosePacketStream_Events_count__267, eventsCount);
for (int i= 0; i < eventsCount; i++) {
byte eventKind= in.readByte();
int requestId= in.readInt();
printEventKind(eventKind);
println(TcpIpSpyMessages.VerbosePacketStream_Request_id__248, requestId);
switch (eventKind) {
case EVENTKIND_VM_START:
long threadId= readObjectID(in);
printlnObjectId(TcpIpSpyMessages.VerbosePacketStream_Initial_thread_object_id__269, threadId);
break;
case EVENTKIND_SINGLE_STEP:
case EVENTKIND_BREAKPOINT:
case EVENTKIND_METHOD_ENTRY:
case EVENTKIND_METHOD_EXIT:
threadId= readObjectID(in);
printlnObjectId(TcpIpSpyMessages.VerbosePacketStream_Thread_object_id__250, threadId);
readAndPrintLocation(in);
break;
case EVENTKIND_EXCEPTION:
threadId= readObjectID(in);
readAndPrintLocation(in);
byte signatureByte= in.readByte();
long objectId= readObjectID(in);
printlnTaggedObjectId(TcpIpSpyMessages.VerbosePacketStream_Exception_object_id__139, objectId, signatureByte);
readAndPrintLocation(in);
break;
case EVENTKIND_THREAD_START:
case EVENTKIND_THREAD_DEATH:
threadId= readObjectID(in);
printlnObjectId(TcpIpSpyMessages.VerbosePacketStream_Thread_object_id__250, threadId);
break;
case EVENTKIND_CLASS_PREPARE:
threadId= readObjectID(in);
byte refTypeTag= in.readByte();
long typeId= readReferenceTypeID(in);
String typeSignature= readString(in);
int status= in.readInt();
printlnObjectId(TcpIpSpyMessages.VerbosePacketStream_Thread_object_id__250, threadId);
printRefTypeTag(refTypeTag);
printlnReferenceTypeId(TcpIpSpyMessages.VerbosePacketStream_Type_id__43, typeId);
println(TcpIpSpyMessages.VerbosePacketStream_Type_signature__275, typeSignature);
println(TcpIpSpyMessages.VerbosePacketStream_Status__276, status);
break;
case EVENTKIND_CLASS_UNLOAD:
typeSignature= readString(in);
println(TcpIpSpyMessages.VerbosePacketStream_Type_signature__275, typeSignature);
break;
case EVENTKIND_FIELD_ACCESS:
threadId= readObjectID(in);
printlnObjectId(TcpIpSpyMessages.VerbosePacketStream_Thread_object_id__250, threadId);
readAndPrintLocation(in);
refTypeTag= in.readByte();
typeId= readReferenceTypeID(in);
long fieldId= readFieldID(in);
signatureByte= in.readByte();
objectId= readObjectID(in);
printRefTypeTag(refTypeTag);
printlnReferenceTypeId(TcpIpSpyMessages.VerbosePacketStream_Type_id__43, typeId);
printlnFieldId(TcpIpSpyMessages.VerbosePacketStream_Field_id__109, fieldId);
printlnTaggedObjectId(TcpIpSpyMessages.VerbosePacketStream_Object_id__72, objectId, signatureByte);
break;
case EVENTKIND_FIELD_MODIFICATION:
threadId= readObjectID(in);
printlnObjectId(TcpIpSpyMessages.VerbosePacketStream_Thread_object_id__250, threadId);
readAndPrintLocation(in);
refTypeTag= in.readByte();
typeId= readReferenceTypeID(in);
fieldId= readFieldID(in);
signatureByte= in.readByte();
objectId= readObjectID(in);
printRefTypeTag(refTypeTag);
printlnReferenceTypeId(TcpIpSpyMessages.VerbosePacketStream_Type_id__43, typeId);
printlnFieldId(TcpIpSpyMessages.VerbosePacketStream_Field_id__109, fieldId);
printlnTaggedObjectId(TcpIpSpyMessages.VerbosePacketStream_Object_id__72, objectId, signatureByte);
readAndPrintlnTaggedValue(TcpIpSpyMessages.VerbosePacketStream_Value__120, in);
break;
case EVENTKIND_VM_DEATH:
break;
}
}
}
/**
* Reads String from Jdwp stream.
* Read a UTF where length has 4 bytes, and not just 2.
* This code was based on the OTI Retysin source for readUTF.
*/
private static String readString(DataInputStream in) throws IOException {
int utfSize = in.readInt();
byte utfBytes[] = new byte[utfSize];
in.readFully(utfBytes);
/* Guess at buffer size */
StringBuffer strBuffer = new StringBuffer(utfSize / 3 * 2);
for (int i = 0; i < utfSize;) {
int a = utfBytes[i] & 0xFF;
if ((a >> 4) < 12) {
strBuffer.append((char) a);
i++;
} else {
int b = utfBytes[i + 1] & 0xFF;
if ((a >> 4) < 14) {
if ((b & 0xBF) == 0) {
throw new UTFDataFormatException(TcpIpSpyMessages.VerbosePacketStream_Second_byte_input_does_not_match_UTF_Specification_287);
}
strBuffer.append((char) (((a & 0x1F) << 6) | (b & 0x3F)));
i += 2;
} else {
int c = utfBytes[i + 2] & 0xFF;
if ((a & 0xEF) > 0) {
if (((b & 0xBF) == 0) || ((c & 0xBF) == 0)) {
throw new UTFDataFormatException(TcpIpSpyMessages.VerbosePacketStream_Second_or_third_byte_input_does_not_mach_UTF_Specification__288);
}
strBuffer.append((char) (((a & 0x0F) << 12) | ((b & 0x3F) << 6) | (c & 0x3F)));
i += 3;
} else {
throw new UTFDataFormatException(TcpIpSpyMessages.VerbosePacketStream_Input_does_not_match_UTF_Specification_289);
}
}
}
}
return strBuffer.toString();
}
private byte[] remainderData(DataInputStream in) throws IOException {
byte[] buffer= new byte[100];
byte[] res = new byte[0], newRes;
int resLength= 0, length;
while ((length= in.read(buffer)) != -1) {
newRes= new byte[resLength + length];
System.arraycopy(res, 0, newRes, 0, resLength);
System.arraycopy(buffer, 0, newRes, resLength, length);
res= newRes;
resLength += length;
}
return res;
}
private long readObjectID(DataInputStream in) throws IOException, UnableToParseDataException {
if (!TcpipSpy.hasSizes()) {
throw new UnableToParseDataException(TcpIpSpyMessages.VerbosePacketStream_Unable_to_parse_remaining_data_290, remainderData(in));
}
return readID(in, TcpipSpy.getObjectIDSize());
}
private long readReferenceTypeID(DataInputStream in) throws IOException, UnableToParseDataException {
if (!TcpipSpy.hasSizes()) {
throw new UnableToParseDataException(TcpIpSpyMessages.VerbosePacketStream_Unable_to_parse_remaining_data_290, remainderData(in));
}
return readID(in, TcpipSpy.getReferenceTypeIDSize());
}
private long readFieldID(DataInputStream in) throws IOException, UnableToParseDataException {
if (!TcpipSpy.hasSizes()) {
throw new UnableToParseDataException(TcpIpSpyMessages.VerbosePacketStream_Unable_to_parse_remaining_data_290, remainderData(in));
}
return readID(in, TcpipSpy.getFieldIDSize());
}
private long readMethodID(DataInputStream in) throws IOException, UnableToParseDataException {
if (!TcpipSpy.hasSizes()) {
throw new UnableToParseDataException(TcpIpSpyMessages.VerbosePacketStream_Unable_to_parse_remaining_data_290, remainderData(in));
}
return readID(in, TcpipSpy.getMethodIDSize());
}
private long readFrameID(DataInputStream in) throws IOException, UnableToParseDataException {
if (!TcpipSpy.hasSizes()) {
throw new UnableToParseDataException(TcpIpSpyMessages.VerbosePacketStream_Unable_to_parse_remaining_data_290, remainderData(in));
}
return readID(in, TcpipSpy.getFrameIDSize());
}
private long readID(DataInputStream in, int size) throws IOException {
long id = 0;
for (int i = 0; i < size; i++) {
int b = in.readUnsignedByte(); // Note that the byte must be treated as unsigned.
id = id << 8 | b;
}
return id;
}
private void readAndPrintlnTaggedValue(String description, DataInputStream in) throws IOException, UnableToParseDataException {
byte tag= in.readByte();
readAndPrintlnUntaggedValue(description, in, tag, true);
}
private void readAndPrintlnUntaggedValue(String description, DataInputStream in, byte tag, boolean printTagValue) throws IOException, UnableToParseDataException {
printDescription(description);
int size;
boolean isId= false;
switch (tag) {
case VOID_TAG:
printSignatureByte(tag, printTagValue);
println();
return;
case BOOLEAN_TAG:
if (printTagValue) {
printSignatureByte(tag, true);
print(' ');
println(in.readBoolean());
} else {
println(in.readBoolean());
print(' ');
printSignatureByte(tag, false);
}
return;
case BYTE_TAG:
size= 1;
break;
case CHAR_TAG:
case SHORT_TAG:
size= 2;
break;
case INT_TAG:
case FLOAT_TAG:
size= 4;
break;
case DOUBLE_TAG:
case LONG_TAG:
size= 8;
break;
case ARRAY_TAG:
case OBJECT_TAG:
case STRING_TAG:
case THREAD_TAG:
case THREAD_GROUP_TAG:
case CLASS_LOADER_TAG:
case CLASS_OBJECT_TAG:
if (!TcpipSpy.hasSizes()) {
throw new UnableToParseDataException(TcpIpSpyMessages.VerbosePacketStream_Unable_to_parse_remaining_data_290, remainderData(in));
}
size= TcpipSpy.getObjectIDSize();
isId= true;
break;
default:
size= 0;
break;
}
long value= readID(in, size);
if (printTagValue) {
printSignatureByte(tag, true);
print(' ');
}
printHex(value, size);
if (isId) {
printParanthetical(value);
} else {
switch (tag) {
case BYTE_TAG:
printParanthetical((byte) value);
break;
case CHAR_TAG:
printParanthetical((char) value);
break;
case SHORT_TAG:
printParanthetical((short) value);
break;
case INT_TAG:
printParanthetical((int) value);
break;
case FLOAT_TAG:
printParanthetical(Float.intBitsToFloat((int) value));
break;
case DOUBLE_TAG:
printParanthetical(Double.longBitsToDouble(value));
break;
case LONG_TAG:
printParanthetical(value);
break;
}
}
if (!printTagValue) {
print(' ');
printSignatureByte(tag, false);
}
println();
}
private void printSignatureByte(byte signatureByte, boolean printValue) {
String type;
switch (signatureByte) {
case VOID_TAG:
type= "void"; //$NON-NLS-1$
break;
case BOOLEAN_TAG:
type= "boolean"; //$NON-NLS-1$
break;
case BYTE_TAG:
type= "byte"; //$NON-NLS-1$
break;
case CHAR_TAG:
type= "char"; //$NON-NLS-1$
break;
case SHORT_TAG:
type= "short"; //$NON-NLS-1$
break;
case INT_TAG:
type= "int"; //$NON-NLS-1$
break;
case FLOAT_TAG:
type= "float"; //$NON-NLS-1$
break;
case DOUBLE_TAG:
type= "double"; //$NON-NLS-1$
break;
case LONG_TAG:
type= "long"; //$NON-NLS-1$
break;
case ARRAY_TAG:
type= "array id"; //$NON-NLS-1$
break;
case OBJECT_TAG:
type= "object id"; //$NON-NLS-1$
break;
case STRING_TAG:
type= "string id"; //$NON-NLS-1$
break;
case THREAD_TAG:
type= "thread id"; //$NON-NLS-1$
break;
case THREAD_GROUP_TAG:
type= "thread group id"; //$NON-NLS-1$
break;
case CLASS_LOADER_TAG:
type= "class loader id"; //$NON-NLS-1$
break;
case CLASS_OBJECT_TAG:
type= "class object id"; //$NON-NLS-1$
break;
default:
type= TcpIpSpyMessages.VerbosePacketStream_unknow_20;
break;
}
if (printValue) {
printHex(signatureByte);
print(" ("); //$NON-NLS-1$
print(signatureByte);
print(" - "); //$NON-NLS-1$
} else {
print(" ("); //$NON-NLS-1$
}
print(type + ')');
}
private void readAndPrintLocation(DataInputStream in) throws IOException, UnableToParseDataException {
byte typeTag= in.readByte();
long classId= readReferenceTypeID(in);
long methodId= readMethodID(in);
long index= in.readLong();
printlnReferenceTypeIdWithTypeTag(TcpIpSpyMessages.VerbosePacketStream_Location__class_id__297, classId, typeTag);
printlnMethodId(TcpIpSpyMessages.VerbosePacketStream___________method_id__298, methodId);
println(TcpIpSpyMessages.VerbosePacketStream___________index__299, index);
}
private void readAndPrintArrayRegion(DataInputStream in) throws IOException, UnableToParseDataException {
byte signatureByte= in.readByte();
int valuesCount= in.readInt();
printDescription(TcpIpSpyMessages.VerbosePacketStream_Signature_byte__300);
printSignatureByte(signatureByte, true);
println();
println(TcpIpSpyMessages.VerbosePacketStream_Values_count__119, valuesCount);
switch (signatureByte) {
case ARRAY_TAG:
case OBJECT_TAG:
case STRING_TAG:
case THREAD_TAG:
case THREAD_GROUP_TAG:
case CLASS_LOADER_TAG:
case CLASS_OBJECT_TAG:
for (int i= 0; i < valuesCount; i ++) {
readAndPrintlnTaggedValue(TcpIpSpyMessages.VerbosePacketStream_Value_302, in);
}
break;
default:
for (int i= 0; i < valuesCount; i ++) {
readAndPrintlnUntaggedValue(TcpIpSpyMessages.VerbosePacketStream_Value_302, in, signatureByte, false);
}
break;
}
}
protected void println(String description, int value) {
printDescription(description);
printHex(value);
printParanthetical(value);
println();
}
protected void println(String description, long value) {
printDescription(description);
printHex(value);
printParanthetical(value);
println();
}
protected void println(String description, String value) {
printDescription(description);
print('\"');
StringBuffer val= new StringBuffer();
int pos= 0, lastPos= 0;
while ((pos= value.indexOf('\n', lastPos)) != -1) {
pos++;
val.append(value.substring(lastPos, pos));
val.append(shift);
lastPos= pos;
}
val.append(value.substring(lastPos, value.length()));
print(val);
println('"');
}
protected void println(String description, boolean value) {
printDescription(description);
println(value);
}
protected void printlnReferenceTypeId(String description, long value) {
println(description, value, TcpipSpy.getReferenceTypeIDSize());
}
protected void printlnReferenceTypeIdWithTypeTag(String description, long value, byte typeTag) {
printDescription(description);
printRefTypeTagValue(typeTag);
print(" - "); //$NON-NLS-1$
printHex(value, TcpipSpy.getReferenceTypeIDSize());
printParanthetical(value);
println();
}
protected void printlnObjectId(String description, long value) {
printDescription(description);
printHex(value, TcpipSpy.getObjectIDSize());
if (value == 0) {
println(" (NULL)"); //$NON-NLS-1$
} else {
printParanthetical(value);
println();
}
}
protected void printlnTaggedObjectId(String description, long value, byte signatureByte) {
printDescription(description);
printSignatureByte(signatureByte, true);
print(' ');
printHex(value, TcpipSpy.getReferenceTypeIDSize());
if (value == 0) {
println(" (NULL)"); //$NON-NLS-1$
} else {
printParanthetical(value);
println();
}
}
protected void printlnFieldId(String description, long value) {
println(description, value, TcpipSpy.getFieldIDSize());
}
protected void printlnMethodId(String description, long value) {
println(description, value, TcpipSpy.getMethodIDSize());
}
protected void printlnFrameId(String description, long value) {
println(description, value, TcpipSpy.getFrameIDSize());
}
protected void println(String description, long value, int size) {
printDescription(description);
printHex(value, size);
printParanthetical(value);
println();
}
protected void printDescription(String description) {
int width= 32- description.length();
print(description);
write(padding, 0, width);
}
protected void printHexString(String hex, int width) {
width-= hex.length();
print("0x"); //$NON-NLS-1$
write(zeros, 0, width);
print(hex);
}
protected void printHex(long l, int byteNumber) {
printHexString(Long.toHexString(l).toUpperCase(), byteNumber * 2);
}
protected void printHex(byte b) {
printHexString(Integer.toHexString(b & 0xFF).toUpperCase(), 2);
}
protected void printHex(int i) {
printHexString(Integer.toHexString(i).toUpperCase(), 8);
}
protected void printHex(long l) {
printHexString(Long.toHexString(l).toUpperCase(), 16);
}
protected void printHex(byte[] b) {
if (b == null) {
println("NULL"); //$NON-NLS-1$
return;
}
int i, length;
for (i= 0, length= b.length; i < length; i ++) {
String hexa= Integer.toHexString(b[i]).toUpperCase();
if (hexa.length() == 1) {
print('0');
}
print(hexa);
if ((i % 32) == 0 && i != 0) {
println();
print(shift);
} else {
print(' ');
}
}
println();
}
protected void printParanthetical(byte i) {
print(" ("); //$NON-NLS-1$
print(i);
print(')');
}
protected void printParanthetical(char i) {
print(" ("); //$NON-NLS-1$
print(i);
print(')');
}
protected void printParanthetical(short i) {
print(" ("); //$NON-NLS-1$
print(i);
print(')');
}
protected void printParanthetical(int i) {
print(" ("); //$NON-NLS-1$
print(i);
print(')');
}
protected void printParanthetical(long l) {
print(" ("); //$NON-NLS-1$
print(l);
print(')');
}
protected void printParanthetical(float f) {
print(" ("); //$NON-NLS-1$
print(f);
print(')');
}
protected void printParanthetical(double d) {
print(" ("); //$NON-NLS-1$
print(d);
print(')');
}
protected void printParanthetical(String s) {
print(" ("); //$NON-NLS-1$
print(s);
print(')');
}
}