| /******************************************************************************* |
| * Copyright (c) 2000, 2003 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Common Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/cpl-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 java.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_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.getString("VerbosePacketStream.Remaining_data__1")); //$NON-NLS-1$ |
| byte[] data= e.getRemainingData(); |
| if (data == null) { |
| printHex(packet.data()); |
| } else { |
| printHex(e.getRemainingData()); |
| } |
| println(); |
| } |
| } |
| |
| protected void printHeader(JdwpPacket packet, boolean fromVM) throws IOException, UnableToParseDataException { |
| if (fromVM) { |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.From_VM_1")); //$NON-NLS-1$ |
| } else { |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.From_Debugger_2")); //$NON-NLS-1$ |
| } |
| |
| printDescription(TcpIpSpyMessages.getString("VerbosePacketStream.Packet_ID__3")); //$NON-NLS-1$ |
| printHex(packet.getId()); |
| println(); |
| |
| printDescription(TcpIpSpyMessages.getString("VerbosePacketStream.Length__4")); //$NON-NLS-1$ |
| print(packet.getLength()); |
| println(); |
| |
| printDescription(TcpIpSpyMessages.getString("VerbosePacketStream.Flags__5")); //$NON-NLS-1$ |
| byte flags= (byte)packet.getFlags(); |
| printHex(flags); |
| if ((flags & JdwpPacket.FLAG_REPLY_PACKET) != 0) { |
| print(MessageFormat.format(TcpIpSpyMessages.getString("VerbosePacketStream._(REPLY_to_{0})_6"), new String[] {(String) JdwpCommandPacket.commandMap().get(new Integer(TcpipSpy.getCommand((JdwpReplyPacket)packet)))})); //$NON-NLS-1$ |
| } else { |
| print(TcpIpSpyMessages.getString("VerbosePacketStream._(COMMAND)_7")); //$NON-NLS-1$ |
| } |
| 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.getString("VerbosePacketStream.Command_set__8")); //$NON-NLS-1$ |
| int commandAndSet= commandPacket.getCommand(); |
| byte set= (byte)(commandAndSet >> 8); |
| byte command= (byte)commandAndSet; |
| printHex(set); |
| printParanthetical(set); |
| println(); |
| printDescription(TcpIpSpyMessages.getString("VerbosePacketStream.Command__9")); //$NON-NLS-1$ |
| 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.getString("VerbosePacketStream.Error__10")); //$NON-NLS-1$ |
| 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; |
| |
| /** 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; |
| |
| /** 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; |
| |
| /** 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.getString("VerbosePacketStream.NOT_MANAGED_COMMAND_11"), remainderData(in)); //$NON-NLS-1$ |
| |
| default: |
| int cset= commandId >> 8; |
| int cmd= commandId & 0xFF; |
| println(MessageFormat.format(TcpIpSpyMessages.getString("VerbosePacketStream.Unknown_command___{0}_{1}_12"), new String[] {"" + cset, "" + cmd})); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ |
| 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: |
| printVmSetDefaultStratumCommand(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; |
| |
| /** 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; |
| |
| /** 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.getString("VerbosePacketStream.NOT_MANAGED_COMMAND_11"), remainderData(in)); //$NON-NLS-1$ |
| |
| default: |
| int cset= commandId >> 8; |
| int cmd= commandId & 0xFF; |
| println(MessageFormat.format(TcpIpSpyMessages.getString("VerbosePacketStream.Unknown_command___{0}_{1}_12"), new String[] {"" + cset, "" + cmd})); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ |
| break; |
| } |
| } |
| |
| private void printRefTypeTag(byte refTypeTag) { |
| printDescription(TcpIpSpyMessages.getString("VerbosePacketStream.Type_tag__19")); //$NON-NLS-1$ |
| 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.getString("VerbosePacketStream.unknow_20")); //$NON-NLS-1$ |
| } |
| print(')'); |
| } |
| |
| private void printClassStatus(int status) { |
| printDescription(TcpIpSpyMessages.getString("VerbosePacketStream.Status__21")); //$NON-NLS-1$ |
| 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.getString("VerbosePacketStream.unknow_20")); //$NON-NLS-1$ |
| } |
| println(')'); |
| } |
| |
| private void printModifiers(int modifiers) { |
| printDescription(TcpIpSpyMessages.getString("VerbosePacketStream.Modifiers__23")); //$NON-NLS-1$ |
| 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_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_NATIVE) != 0) { |
| if (spaceNeeded) { |
| print(' '); |
| } else { |
| spaceNeeded= true; |
| } |
| print("NATIVE"); //$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_STRICT) != 0) { |
| if (spaceNeeded) { |
| print(' '); |
| } else { |
| spaceNeeded= true; |
| } |
| print("STRICT"); //$NON-NLS-1$ |
| } |
| if ((modifiers & ACC_EXT_SYNTHETIC) != 0) { |
| if (spaceNeeded) { |
| print(' '); |
| } else { |
| spaceNeeded= true; |
| } |
| print("SYNTHETIC"); //$NON-NLS-1$ |
| } |
| println(')'); |
| } |
| |
| private void printInvocationOptions(int invocationOptions) { |
| printDescription(TcpIpSpyMessages.getString("VerbosePacketStream.Invocation_Options__24")); //$NON-NLS-1$ |
| 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.getString("VerbosePacketStream.Thread_status__25")); //$NON-NLS-1$ |
| 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.getString("VerbosePacketStream.unknow_20")); //$NON-NLS-1$ |
| break; |
| } |
| println(')'); |
| } |
| |
| private void printSuspendStatus(int suspendStatus) { |
| printDescription(TcpIpSpyMessages.getString("VerbosePacketStream.Suspend_status__27")); //$NON-NLS-1$ |
| 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.getString("VerbosePacketStream.Event_kind__28")); //$NON-NLS-1$ |
| 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.getString("VerbosePacketStream.unknow_20")); //$NON-NLS-1$ |
| break; |
| } |
| println(')'); |
| } |
| |
| private void printSuspendPolicy(byte suspendPolicy) { |
| printDescription(TcpIpSpyMessages.getString("VerbosePacketStream.Suspend_policy__30")); //$NON-NLS-1$ |
| 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.getString("VerbosePacketStream.unknow_20")); //$NON-NLS-1$ |
| break; |
| } |
| println(')'); |
| } |
| |
| private void printStepDepth(int setDepth) { |
| printDescription(TcpIpSpyMessages.getString("VerbosePacketStream.Step_depth__32")); //$NON-NLS-1$ |
| 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.getString("VerbosePacketStream.unknow_20")); //$NON-NLS-1$ |
| break; |
| } |
| println(')'); |
| } |
| |
| private void printStepSize(int setSize) { |
| printDescription(TcpIpSpyMessages.getString("VerbosePacketStream.Step_size__34")); //$NON-NLS-1$ |
| 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.getString("VerbosePacketStream.unknow_20")); //$NON-NLS-1$ |
| 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.getString("VerbosePacketStream.VM_Description__36"), description); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.JDWP_Major_Version__37"), jdwpMajor); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.JDWP_Minor_Version__38"), jdwpMinor); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.VM_Version__39"), vmVersion); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.VM_Name__40"), vmName); //$NON-NLS-1$ |
| } |
| |
| private void printVmClassesBySignatureCommand(DataInputStream in) throws IOException { |
| String signature= readString(in); |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Class_signature__41"), signature); //$NON-NLS-1$ |
| } |
| |
| private void printVmClassesBySignatureReply(DataInputStream in) throws IOException, UnableToParseDataException { |
| int classesCount= in.readInt(); |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Classes_count__42"), classesCount); //$NON-NLS-1$ |
| for(int i= 0; i < classesCount; i++) { |
| byte refTypeTag= in.readByte(); |
| long typeId= readReferenceTypeID(in); |
| int status= in.readInt(); |
| printRefTypeTag(refTypeTag); |
| printlnReferenceTypeId(TcpIpSpyMessages.getString("VerbosePacketStream.Type_id__43"), typeId); //$NON-NLS-1$ |
| printClassStatus(status); |
| } |
| } |
| |
| private void printVmAllClassesReply(DataInputStream in) throws IOException, UnableToParseDataException { |
| int classesCount= in.readInt(); |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Classes_count__42"), classesCount); //$NON-NLS-1$ |
| 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.getString("VerbosePacketStream.Type_id__43"), typeId); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Class_signature__41"), signature); //$NON-NLS-1$ |
| printClassStatus(status); |
| } |
| } |
| |
| private void printVmAllThreadsReply(DataInputStream in) throws IOException, UnableToParseDataException { |
| int threadsCount= in.readInt(); |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Threads_count__47"), threadsCount); //$NON-NLS-1$ |
| for(int i= 0; i < threadsCount; i++) { |
| long threadId= readObjectID(in); |
| printlnObjectId(TcpIpSpyMessages.getString("VerbosePacketStream.Thread_id__48"), threadId); //$NON-NLS-1$ |
| } |
| } |
| |
| private void printVmTopLevelThreadGroupReply(DataInputStream in) throws IOException, UnableToParseDataException { |
| int groupsCount= in.readInt(); |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Threads_count__47"), groupsCount); //$NON-NLS-1$ |
| for(int i= 0; i < groupsCount; i++) { |
| long threadGroupId= readObjectID(in); |
| printlnObjectId(TcpIpSpyMessages.getString("VerbosePacketStream.Thread_id__48"), threadGroupId); //$NON-NLS-1$ |
| } |
| } |
| |
| 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.getString("VerbosePacketStream.Field_ID_size__51"), fieldIDSize); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Method_ID_size__52"), methodIDSize); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Object_ID_size__53"), objectIDSize); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Reference_type_ID_size__54"), referenceTypeIDSize); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Frame_ID_size__55"), frameIDSize); //$NON-NLS-1$ |
| 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.getString("VerbosePacketStream.Exit_code__56"), exitCode); //$NON-NLS-1$ |
| } |
| |
| private void printVmCreateStringCommand(DataInputStream in) throws IOException { |
| String string= readString(in); |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.String__57"), string); //$NON-NLS-1$ |
| } |
| |
| private void printVmCreateStringReply(DataInputStream in) throws IOException, UnableToParseDataException { |
| long stringId= readObjectID(in); |
| printlnObjectId(TcpIpSpyMessages.getString("VerbosePacketStream.String_id__58"), stringId); //$NON-NLS-1$ |
| } |
| |
| 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.getString("VerbosePacketStream.Can_watch_field_modification__59"), canWatchFieldModification); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.can_watch_field_access__60"), canWatchFieldAccess); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Can_get_bytecodes__61"), canGetBytecodes); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Can_get_synthetic_attribute__62"), canGetSyntheticAttribute); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Can_get_owned_monitor_info__63"), canGetOwnedMonitorInfo); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Can_get_cur._contended_monitor__64"), canGetCurrentContendedMonitor); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Can_get_monitor_info__65"), canGetMonitorInfo); //$NON-NLS-1$ |
| } |
| |
| private void printVmClassPathsReply(DataInputStream in) throws IOException { |
| String baseDir= readString(in); |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Base_directory__66"), baseDir); //$NON-NLS-1$ |
| int classpathCount= in.readInt(); |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Classpaths_count__67"), classpathCount); //$NON-NLS-1$ |
| for (int i= 0; i < classpathCount; i++) { |
| String path= readString(in); |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Classpath__68"), path); //$NON-NLS-1$ |
| } |
| int bootclasspathCount= in.readInt(); |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Bootclasspaths_count__69"), bootclasspathCount); //$NON-NLS-1$ |
| for (int i= 0; i < bootclasspathCount; i++) { |
| String path= readString(in); |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Bootclasspath__70"), path); //$NON-NLS-1$ |
| } |
| } |
| |
| private void printVmDisposeObjectsCommand(DataInputStream in) throws IOException, UnableToParseDataException { |
| int requestsCount= in.readInt(); |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Requests_Count__71"), requestsCount); //$NON-NLS-1$ |
| for (int i=0; i < requestsCount; i++) { |
| long objectId= readObjectID(in); |
| int refsCounts= in.readInt(); |
| printlnObjectId(TcpIpSpyMessages.getString("VerbosePacketStream.Object_id__72"), objectId); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.References_count__73"), refsCounts); //$NON-NLS-1$ |
| } |
| } |
| |
| 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.getString("VerbosePacketStream.Can_redefine_classes__74"), canRedefineClasses); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Can_add_method__75"), canAddMethod); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Can_unrestrictedly_rd._classes__76"), canUnrestrictedlyRedefineClasses); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Can_pop_frames__77"), canPopFrames); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Can_use_instance_filters__78"), canUseInstanceFilters); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Can_get_source_debug_extension__79"), canGetSourceDebugExtension); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Can_request_VMDeath_event__80"), canRequestVMDeathEvent); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Can_set_default_stratum__81"), canSetDefaultStratum); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Reserved__82"), reserved16); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Reserved__82"), reserved17); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Reserved__82"), reserved18); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Reserved__82"), reserved19); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Reserved__82"), reserved20); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Reserved__82"), reserved21); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Reserved__82"), reserved22); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Reserved__82"), reserved23); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Reserved__82"), reserved24); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Reserved__82"), reserved25); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Reserved__82"), reserved26); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Reserved__82"), reserved27); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Reserved__82"), reserved28); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Reserved__82"), reserved29); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Reserved__82"), reserved30); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Reserved__82"), reserved31); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Reserved__82"), reserved32); //$NON-NLS-1$ |
| } |
| |
| private void printVmRedefineClassCommand(DataInputStream in) throws IOException, UnableToParseDataException { |
| int typesCount= in.readInt(); |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Types_count__99"), typesCount); //$NON-NLS-1$ |
| for (int i= 0; i < typesCount; i++) { |
| long typeId= readReferenceTypeID(in); |
| int classfileLength= in.readInt(); |
| printlnReferenceTypeId(TcpIpSpyMessages.getString("VerbosePacketStream.Type_id__43"), typeId); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Classfile_length__101"), classfileLength); //$NON-NLS-1$ |
| while((classfileLength -= in.skipBytes(classfileLength)) != 0) { |
| } |
| printDescription(TcpIpSpyMessages.getString("VerbosePacketStream.Class_bytes__102")); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.skipped_103")); //$NON-NLS-1$ |
| } |
| } |
| |
| private void printVmSetDefaultStratumCommand(DataInputStream in) throws IOException { |
| String stratumId= readString(in); |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Stratum_id__104"), stratumId); //$NON-NLS-1$ |
| } |
| |
| private void printRtDefaultCommand(DataInputStream in) throws IOException, UnableToParseDataException { |
| long typeId= readReferenceTypeID(in); |
| printlnReferenceTypeId(TcpIpSpyMessages.getString("VerbosePacketStream.Type_id__43"), typeId); //$NON-NLS-1$ |
| } |
| |
| private void printRtSignatureReply(DataInputStream in) throws IOException { |
| String signature= readString(in); |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Signature__106"), signature); //$NON-NLS-1$ |
| } |
| |
| private void printRtClassLoaderReply(DataInputStream in) throws IOException, UnableToParseDataException { |
| long classLoaderId= readObjectID(in); |
| printlnObjectId(TcpIpSpyMessages.getString("VerbosePacketStream.ClassLoader_id__107"), classLoaderId); //$NON-NLS-1$ |
| } |
| |
| private void printRtModifiersReply(DataInputStream in) throws IOException { |
| int modifiers= in.readInt(); |
| printModifiers(modifiers); |
| } |
| |
| private void printRtFieldsReply(DataInputStream in) throws IOException, UnableToParseDataException { |
| int fieldsCount= in.readInt(); |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Fields_count__108"), fieldsCount); //$NON-NLS-1$ |
| 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.getString("VerbosePacketStream.Field_id__109"), fieldId); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Name__110"), name); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Signature__106"), signature); //$NON-NLS-1$ |
| printModifiers(modifiers); |
| } |
| } |
| |
| private void printRtMethodsReply(DataInputStream in) throws IOException, UnableToParseDataException { |
| int methodsCount= in.readInt(); |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Methods_count__112"), methodsCount); //$NON-NLS-1$ |
| for (int i= 0; i < methodsCount; i++) { |
| long methodId= readMethodID(in); |
| String name= readString(in); |
| String signature= readString(in); |
| int modifiers= in.readInt(); |
| printlnFieldId(TcpIpSpyMessages.getString("VerbosePacketStream.Method_id__113"), methodId); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Name__110"), name); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Signature__106"), signature); //$NON-NLS-1$ |
| printModifiers(modifiers); |
| } |
| } |
| |
| private void printRtGetValuesCommand(DataInputStream in) throws IOException, UnableToParseDataException { |
| long typeId= readReferenceTypeID(in); |
| int fieldsCount= in.readInt(); |
| printlnReferenceTypeId(TcpIpSpyMessages.getString("VerbosePacketStream.Type_id__43"), typeId); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Fields_count__108"), fieldsCount); //$NON-NLS-1$ |
| for (int i= 0; i < fieldsCount; i++) { |
| long fieldId= readFieldID(in); |
| printlnFieldId(TcpIpSpyMessages.getString("VerbosePacketStream.Field_id__109"), fieldId); //$NON-NLS-1$ |
| } |
| } |
| |
| private void printRtGetValuesReply(DataInputStream in) throws IOException, UnableToParseDataException { |
| int valuesCount= in.readInt(); |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Values_count__119"), valuesCount); //$NON-NLS-1$ |
| for (int i= 0; i < valuesCount; i++) { |
| readAndPrintlnTaggedValue(TcpIpSpyMessages.getString("VerbosePacketStream.Value__120"), in); //$NON-NLS-1$ |
| } |
| } |
| |
| private void printRtSourceFileReply(DataInputStream in) throws IOException { |
| String sourceFile= readString(in); |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Source_file__121"), sourceFile); //$NON-NLS-1$ |
| } |
| |
| private void printRtNestedTypesReply(DataInputStream in) throws IOException, UnableToParseDataException { |
| int typesCount= in.readInt(); |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Types_count__99"), typesCount); //$NON-NLS-1$ |
| for (int i= 0; i < typesCount; i++) { |
| byte typeTag= in.readByte(); |
| long typeId= readReferenceTypeID(in); |
| printRefTypeTag(typeTag); |
| printlnReferenceTypeId(TcpIpSpyMessages.getString("VerbosePacketStream.Type_id_43"), typeId); //$NON-NLS-1$ |
| } |
| } |
| |
| 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.getString("VerbosePacketStream.Interfaces_count__124"), interfacesCount); //$NON-NLS-1$ |
| for (int i= 0; i < interfacesCount; i ++) { |
| long interfaceId= readReferenceTypeID(in); |
| printlnReferenceTypeId(TcpIpSpyMessages.getString("VerbosePacketStream.Interface_type_id__125"), interfaceId); //$NON-NLS-1$ |
| } |
| } |
| |
| private void printRtClassObjectReply(DataInputStream in) throws IOException, UnableToParseDataException { |
| long classObjectId= readObjectID(in); |
| printlnObjectId(TcpIpSpyMessages.getString("VerbosePacketStream.Class_object_id__126"), classObjectId); //$NON-NLS-1$ |
| } |
| |
| private void printRtSourceDebugExtensionReply(DataInputStream in) throws IOException { |
| String extension= readString(in); |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Extension__127"), extension); //$NON-NLS-1$ |
| } |
| |
| private void printCtSuperclassCommand(DataInputStream in) throws IOException, UnableToParseDataException { |
| long classTypeId= readReferenceTypeID(in); |
| printlnReferenceTypeId(TcpIpSpyMessages.getString("VerbosePacketStream.Class_type_id__128"), classTypeId); //$NON-NLS-1$ |
| } |
| |
| private void printCtSuperclassReply(DataInputStream in) throws IOException, UnableToParseDataException { |
| long superclassTypeId= readReferenceTypeID(in); |
| printlnReferenceTypeId(TcpIpSpyMessages.getString("VerbosePacketStream.Superclass_type_id__129"), superclassTypeId); //$NON-NLS-1$ |
| } |
| |
| private void printCtSetValuesCommand(DataInputStream in) throws IOException, UnableToParseDataException { |
| long classTypeId= readReferenceTypeID(in); |
| int fieldsCount= in.readInt(); |
| printlnReferenceTypeId(TcpIpSpyMessages.getString("VerbosePacketStream.Class_type_id__128"), classTypeId); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Fields_count__108"), fieldsCount); //$NON-NLS-1$ |
| throw new UnableToParseDataException(TcpIpSpyMessages.getString("VerbosePacketStream.List_of_values__NOT_MANAGED_132"), remainderData(in)); //$NON-NLS-1$ |
| } |
| |
| 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.getString("VerbosePacketStream.Class_type_id__128"), classTypeId); //$NON-NLS-1$ |
| printlnObjectId(TcpIpSpyMessages.getString("VerbosePacketStream.Thread_id__48"), threadId); //$NON-NLS-1$ |
| printlnMethodId(TcpIpSpyMessages.getString("VerbosePacketStream.Method_id__113"), methodId); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Arguments_count__136"), argumentsCount); //$NON-NLS-1$ |
| for (int i= 0; i < argumentsCount; i++) { |
| readAndPrintlnTaggedValue(TcpIpSpyMessages.getString("VerbosePacketStream.Argument__137"), in); //$NON-NLS-1$ |
| } |
| int invocationOptions= in.readInt(); |
| printInvocationOptions(invocationOptions); |
| } |
| |
| private void printCtInvokeMethodReply(DataInputStream in) throws IOException, UnableToParseDataException { |
| readAndPrintlnTaggedValue(TcpIpSpyMessages.getString("VerbosePacketStream.Return_value__138"), in); //$NON-NLS-1$ |
| byte signatureByte= in.readByte(); |
| long exception= readObjectID(in); |
| printlnTaggedObjectId(TcpIpSpyMessages.getString("VerbosePacketStream.Exception_object_id__139"), exception, signatureByte); //$NON-NLS-1$ |
| } |
| |
| 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.getString("VerbosePacketStream.New_object_id__140"), newObjectId, objectSignatureByte); //$NON-NLS-1$ |
| printlnTaggedObjectId(TcpIpSpyMessages.getString("VerbosePacketStream.Exception_object_id__139"), exception, exceptionSignatureByte); //$NON-NLS-1$ |
| } |
| |
| private void printAtNewInstanceCommand(DataInputStream in) throws IOException, UnableToParseDataException { |
| long arrayTypeId= readReferenceTypeID(in); |
| int length= in.readInt(); |
| printlnReferenceTypeId(TcpIpSpyMessages.getString("VerbosePacketStream.Array_type_id__142"), arrayTypeId); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Length__143"), length); //$NON-NLS-1$ |
| } |
| |
| private void printAtNewInstanceReply(DataInputStream in) throws IOException, UnableToParseDataException { |
| byte signatureByte= in.readByte(); |
| long newArrayId= readObjectID(in); |
| printlnTaggedObjectId(TcpIpSpyMessages.getString("VerbosePacketStream.New_array_id__144"), newArrayId, signatureByte); //$NON-NLS-1$ |
| } |
| |
| private void printMDefaultCommand(DataInputStream in) throws IOException, UnableToParseDataException { |
| long classTypeId= readReferenceTypeID(in); |
| long methodId= readMethodID(in); |
| printlnReferenceTypeId(TcpIpSpyMessages.getString("VerbosePacketStream.Class_type_id__128"), classTypeId); //$NON-NLS-1$ |
| printlnMethodId(TcpIpSpyMessages.getString("VerbosePacketStream.Method_id__113"), methodId); //$NON-NLS-1$ |
| } |
| |
| private void printMLineTableReply(DataInputStream in) throws IOException { |
| long start= in.readLong(); |
| long end= in.readLong(); |
| int lines= in.readInt(); |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Lowest_valid_code_index__147"), start); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Highest_valid_code_index__148"), end); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Number_of_lines__149"), lines); //$NON-NLS-1$ |
| for (int i= 0; i < lines; i++) { |
| long lineCodeIndex= in.readLong(); |
| int lineNumber= in.readInt(); |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Line_code_Index__150"), lineCodeIndex); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Line_number__151"), lineNumber); //$NON-NLS-1$ |
| } |
| } |
| |
| private void printMVariableTableReply(DataInputStream in) throws IOException { |
| int slotsUsedByArgs= in.readInt(); |
| int variablesCount= in.readInt(); |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Nb_of_slots_used_by_all_args__152"), slotsUsedByArgs); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Nb_of_variables__153"), variablesCount); //$NON-NLS-1$ |
| 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.getString("VerbosePacketStream.First_code_index__154"), codeIndex); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Variable_name__155"), name); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Variable_type_signature__156"), signature); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Code_index_length__157"), length); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Slot_id__158"), slotId); //$NON-NLS-1$ |
| } |
| } |
| |
| private void printMBytecodesReply(DataInputStream in) throws IOException { |
| int bytes= in.readInt(); |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Nb_of_bytes__159"), bytes); //$NON-NLS-1$ |
| while((bytes -= in.skipBytes(bytes)) != 0) { |
| } |
| printDescription(TcpIpSpyMessages.getString("VerbosePacketStream.Method_bytes__160")); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.skipped_103")); //$NON-NLS-1$ |
| } |
| |
| private void printMIsObsoleteReply(DataInputStream in) throws IOException { |
| boolean isObsolete= in.readBoolean(); |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Is_obsolete__162"), isObsolete); //$NON-NLS-1$ |
| } |
| |
| private void printOrDefaultCommand(DataInputStream in) throws IOException, UnableToParseDataException { |
| long objectId= readObjectID(in); |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Object_id__72"), objectId); //$NON-NLS-1$ |
| } |
| |
| private void printOrReferenceTypeReply(DataInputStream in) throws IOException, UnableToParseDataException { |
| byte refTypeTag= in.readByte(); |
| long typeId= readReferenceTypeID(in); |
| printRefTypeTag(refTypeTag); |
| printlnReferenceTypeId(TcpIpSpyMessages.getString("VerbosePacketStream.Type_id__43"), typeId); //$NON-NLS-1$ |
| } |
| |
| private void printOrGetValuesCommand(DataInputStream in) throws IOException, UnableToParseDataException { |
| long objectId= readObjectID(in); |
| int fieldsCount= in.readInt(); |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Object_id__72"), objectId); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Fields_count__108"), fieldsCount); //$NON-NLS-1$ |
| for (int i= 0; i < fieldsCount; i++) { |
| long fieldId= readFieldID(in); |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Field_id__109"), fieldId); //$NON-NLS-1$ |
| } |
| } |
| |
| private void printOrGetValuesReply(DataInputStream in) throws IOException, UnableToParseDataException { |
| int valuesCount= in.readInt(); |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Values_count__119"), valuesCount); //$NON-NLS-1$ |
| for (int i= 0; i < valuesCount; i++) { |
| readAndPrintlnTaggedValue(TcpIpSpyMessages.getString("VerbosePacketStream.Value__120"), in); //$NON-NLS-1$ |
| } |
| } |
| |
| private void printOrSetValuesCommand(DataInputStream in) throws IOException, UnableToParseDataException { |
| long objectId= readObjectID(in); |
| int fieldsCount= in.readInt(); |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Object_id__72"), objectId); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Fields_count__108"), fieldsCount); //$NON-NLS-1$ |
| throw new UnableToParseDataException(TcpIpSpyMessages.getString("VerbosePacketStream.List_of_values__NOT_MANAGED_132"), remainderData(in)); //$NON-NLS-1$ |
| } |
| |
| private void printOrMonitorInfoReply(DataInputStream in) throws IOException, UnableToParseDataException { |
| long ownerThreadId= readObjectID(in); |
| int entryCount= in.readInt(); |
| int waiters= in.readInt(); |
| printlnObjectId(TcpIpSpyMessages.getString("VerbosePacketStream.Owner_thread_id__173"), ownerThreadId); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Entry_count__174"), entryCount); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Nb_of_waiters__175"), waiters); //$NON-NLS-1$ |
| long waiterThreadId; |
| for (int i= 0; i < waiters; i++) { |
| waiterThreadId= readObjectID(in); |
| printlnObjectId(TcpIpSpyMessages.getString("VerbosePacketStream.Waiting_thread_id__176"), waiterThreadId); //$NON-NLS-1$ |
| } |
| } |
| |
| 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.getString("VerbosePacketStream.Object_id__72"), objectId); //$NON-NLS-1$ |
| printlnObjectId(TcpIpSpyMessages.getString("VerbosePacketStream.Thread_id__48"), threadId); //$NON-NLS-1$ |
| printlnReferenceTypeId(TcpIpSpyMessages.getString("VerbosePacketStream.Class_type_id__128"), classTypeId); //$NON-NLS-1$ |
| printlnMethodId(TcpIpSpyMessages.getString("VerbosePacketStream.Method_id__113"), methodId); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Arguments_count__136"), argsCount); //$NON-NLS-1$ |
| for (int i= 0; i < argsCount; i++) { |
| readAndPrintlnTaggedValue(TcpIpSpyMessages.getString("VerbosePacketStream.Argument__137"), in); //$NON-NLS-1$ |
| } |
| int invocationOption= in.readInt(); |
| printInvocationOptions(invocationOption); |
| } |
| |
| private void printOrInvokeMethodReply(DataInputStream in) throws IOException, UnableToParseDataException { |
| readAndPrintlnTaggedValue(TcpIpSpyMessages.getString("VerbosePacketStream.Return_value__138"), in); //$NON-NLS-1$ |
| byte signatureByte= in.readByte(); |
| long exception= readObjectID(in); |
| printlnTaggedObjectId(TcpIpSpyMessages.getString("VerbosePacketStream.Exception_object_id__139"), exception, signatureByte); //$NON-NLS-1$ |
| } |
| |
| private void printOrIsCollectedReply(DataInputStream in) throws IOException { |
| boolean isCollected= in.readBoolean(); |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Is_collected__185"), isCollected); //$NON-NLS-1$ |
| } |
| |
| private void printSrValueCommand(DataInputStream in) throws IOException, UnableToParseDataException { |
| long stringObjectId= readObjectID(in); |
| printlnObjectId(TcpIpSpyMessages.getString("VerbosePacketStream.String_object_id__186"), stringObjectId); //$NON-NLS-1$ |
| } |
| |
| private void printSrValueReply(DataInputStream in) throws IOException { |
| String value= readString(in); |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Value__120"), value); //$NON-NLS-1$ |
| } |
| |
| private void printTrDefaultCommand(DataInputStream in) throws IOException, UnableToParseDataException { |
| long threadId= readObjectID(in); |
| printlnObjectId(TcpIpSpyMessages.getString("VerbosePacketStream.Thread_id__48"), threadId); //$NON-NLS-1$ |
| } |
| |
| private void printTrNameReply(DataInputStream in) throws IOException { |
| String threadName= readString(in); |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Name__110"), threadName); //$NON-NLS-1$ |
| } |
| |
| 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.getString("VerbosePacketStream.Thread_group_id__190"), threadGroupId); //$NON-NLS-1$ |
| } |
| |
| private void printTrFramesCommand(DataInputStream in) throws IOException, UnableToParseDataException { |
| long threadId= readObjectID(in); |
| int startFrame= in.readInt(); |
| int length= in.readInt(); |
| printlnObjectId(TcpIpSpyMessages.getString("VerbosePacketStream.Thread_id__48"), threadId); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.First_frame__192"), startFrame); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Number_of_frame__193"), length); //$NON-NLS-1$ |
| } |
| |
| private void printTrFramesReply(DataInputStream in) throws IOException, UnableToParseDataException { |
| int framesCount= in.readInt(); |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Frames_count__194"), framesCount); //$NON-NLS-1$ |
| for (int i= 0; i < framesCount; i++) { |
| long frameId= readFrameID(in); |
| printlnFrameId(TcpIpSpyMessages.getString("VerbosePacketStream.Frame_id__195"), frameId); //$NON-NLS-1$ |
| readAndPrintLocation(in); |
| } |
| } |
| |
| private void printTrFrameCountReply(DataInputStream in) throws IOException { |
| int framesCount= in.readInt(); |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Frames_count__194"), framesCount); //$NON-NLS-1$ |
| } |
| |
| private void printTrOwnedMonitorsReply(DataInputStream in) throws IOException, UnableToParseDataException { |
| int monitorsCount= in.readInt(); |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Monitors_count__197"), monitorsCount); //$NON-NLS-1$ |
| for (int i= 0; i < monitorsCount; i++) { |
| byte signatureByte= in.readByte(); |
| long monitorObjectId= readObjectID(in); |
| printlnTaggedObjectId(TcpIpSpyMessages.getString("VerbosePacketStream.Monitor_object_id__198"), monitorObjectId, signatureByte); //$NON-NLS-1$ |
| } |
| } |
| |
| private void printTrCurrentContendedMonitorReply(DataInputStream in) throws IOException, UnableToParseDataException { |
| byte signatureByte= in.readByte(); |
| long monitorObjectId= readObjectID(in); |
| printlnTaggedObjectId(TcpIpSpyMessages.getString("VerbosePacketStream.Monitor_object_id__198"), monitorObjectId, signatureByte); //$NON-NLS-1$ |
| } |
| |
| private void printTrStopCommand(DataInputStream in) throws IOException, UnableToParseDataException { |
| long threadId= readObjectID(in); |
| long exceptionObjectId= readObjectID(in); |
| printlnObjectId(TcpIpSpyMessages.getString("VerbosePacketStream.Thread_id__48"), threadId); //$NON-NLS-1$ |
| printlnObjectId(TcpIpSpyMessages.getString("VerbosePacketStream.Exception_object_id__139"), exceptionObjectId); //$NON-NLS-1$ |
| } |
| |
| private void printTrSuspendCountReply(DataInputStream in) throws IOException { |
| int suspendCount= in.readInt(); |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Suspend_count__202"), suspendCount); //$NON-NLS-1$ |
| } |
| |
| private void printTgrDefaultCommand(DataInputStream in) throws IOException, UnableToParseDataException { |
| long threadGroupId= readObjectID(in); |
| printlnObjectId(TcpIpSpyMessages.getString("VerbosePacketStream.Thread_group_id__190"), threadGroupId); //$NON-NLS-1$ |
| } |
| |
| private void printTgrNameReply(DataInputStream in) throws IOException { |
| String name= readString(in); |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Name__110"), name); //$NON-NLS-1$ |
| } |
| |
| private void printTgrParentReply(DataInputStream in) throws IOException, UnableToParseDataException { |
| long parentThreadGroupId= readObjectID(in); |
| printlnObjectId(TcpIpSpyMessages.getString("VerbosePacketStream.Parent_thread_group_id__205"), parentThreadGroupId); //$NON-NLS-1$ |
| } |
| |
| private void printTgrChildrenReply(DataInputStream in) throws IOException, UnableToParseDataException { |
| int childThreadsCount= in.readInt(); |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Child_threads_count__206"), childThreadsCount); //$NON-NLS-1$ |
| for (int i= 0; i < childThreadsCount; i++) { |
| long childThreadId= readObjectID(in); |
| printlnObjectId(TcpIpSpyMessages.getString("VerbosePacketStream.Child_thread_id__207"), childThreadId); //$NON-NLS-1$ |
| } |
| int childGroupThreadsCount= in.readInt(); |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Child_group_threads_count__208"), childGroupThreadsCount); //$NON-NLS-1$ |
| for (int i= 0; i < childGroupThreadsCount; i++) { |
| long childGroupThreadId= readObjectID(in); |
| printlnObjectId(TcpIpSpyMessages.getString("VerbosePacketStream.Child_group_thread_id__209"), childGroupThreadId); //$NON-NLS-1$ |
| } |
| } |
| |
| private void printArLengthCommand(DataInputStream in) throws IOException, UnableToParseDataException { |
| long arrayObjectId= readObjectID(in); |
| printlnObjectId(TcpIpSpyMessages.getString("VerbosePacketStream.Array_object_id__210"), arrayObjectId); //$NON-NLS-1$ |
| } |
| |
| private void printArLengthReply(DataInputStream in) throws IOException { |
| int length= in.readInt(); |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Length__143"), length); //$NON-NLS-1$ |
| } |
| |
| private void printArGetValuesCommand(DataInputStream in) throws IOException, UnableToParseDataException { |
| long arrayObjectId= readObjectID(in); |
| int firstIndex= in.readInt(); |
| int length= in.readInt(); |
| printlnObjectId(TcpIpSpyMessages.getString("VerbosePacketStream.Array_object_id__210"), arrayObjectId); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.First_index__213"), firstIndex); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Length__214"), length); //$NON-NLS-1$ |
| } |
| |
| 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.getString("VerbosePacketStream.Array_object_id__210"), arrayObjectId); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.First_index__213"), firstIndex); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Length__214"), length); //$NON-NLS-1$ |
| throw new UnableToParseDataException(TcpIpSpyMessages.getString("VerbosePacketStream.List_of_values__NOT_MANAGED_132"), remainderData(in)); //$NON-NLS-1$ |
| } |
| |
| private void printClrVisibleClassesCommand(DataInputStream in) throws IOException, UnableToParseDataException { |
| long classLoaderObjectId= readObjectID(in); |
| printlnObjectId(TcpIpSpyMessages.getString("VerbosePacketStream.Class_loader_object_id__219"), classLoaderObjectId); //$NON-NLS-1$ |
| } |
| |
| private void printClrVisibleClassesReply(DataInputStream in) throws IOException, UnableToParseDataException { |
| int classesCount= in.readInt(); |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Classes_count__42"), classesCount); //$NON-NLS-1$ |
| for (int i= 0; i < classesCount; i++) { |
| byte refTypeTag= in.readByte(); |
| long typeId= readReferenceTypeID(in); |
| printRefTypeTag(refTypeTag); |
| printlnReferenceTypeId(TcpIpSpyMessages.getString("VerbosePacketStream.Type_id__43"), typeId); //$NON-NLS-1$ |
| } |
| } |
| |
| 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.getString("VerbosePacketStream.Modifiers_count__222"), modifiersCount); //$NON-NLS-1$ |
| for (int i= 0; i < modifiersCount; i++) { |
| byte modKind= in.readByte(); |
| printDescription(TcpIpSpyMessages.getString("VerbosePacketStream.Modifier_kind__223")); //$NON-NLS-1$ |
| printHex(modKind); |
| switch (modKind) { |
| case 1: // count |
| println(TcpIpSpyMessages.getString("VerbosePacketStream._(Count)_224")); //$NON-NLS-1$ |
| int count= in.readInt(); |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Count__225"), count); //$NON-NLS-1$ |
| break; |
| case 2: // conditional |
| println(TcpIpSpyMessages.getString("VerbosePacketStream._(Conditional)_226")); //$NON-NLS-1$ |
| int exprId= in.readInt(); |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Expression_id__227"), exprId); //$NON-NLS-1$ |
| break; |
| case 3: // thread only |
| println(TcpIpSpyMessages.getString("VerbosePacketStream._(ThreadOnly)_228")); //$NON-NLS-1$ |
| long threadId= readObjectID(in); |
| printlnObjectId(TcpIpSpyMessages.getString("VerbosePacketStream.Thread_id__48"), threadId); //$NON-NLS-1$ |
| break; |
| case 4: // class only |
| println(TcpIpSpyMessages.getString("VerbosePacketStream._(ClassOnly)_230")); //$NON-NLS-1$ |
| long classId= readReferenceTypeID(in); |
| printlnReferenceTypeId(TcpIpSpyMessages.getString("VerbosePacketStream.Class_type_id__128"), classId); //$NON-NLS-1$ |
| break; |
| case 5: // class match |
| println(TcpIpSpyMessages.getString("VerbosePacketStream._(ClassMatch)_232")); //$NON-NLS-1$ |
| String classPatern= readString(in); |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Class_patern__233"), classPatern); //$NON-NLS-1$ |
| break; |
| case 6: // class exclude |
| println(TcpIpSpyMessages.getString("VerbosePacketStream._(ClassExclude)_234")); //$NON-NLS-1$ |
| classPatern= readString(in); |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Class_patern__235"), classPatern); //$NON-NLS-1$ |
| break; |
| case 7: // location only |
| println(TcpIpSpyMessages.getString("VerbosePacketStream._(LocationOnly)_236")); //$NON-NLS-1$ |
| readAndPrintLocation(in); |
| break; |
| case 8: // exception only |
| println(TcpIpSpyMessages.getString("VerbosePacketStream._(ExceptionOnly)_237")); //$NON-NLS-1$ |
| long typeId= readReferenceTypeID(in); |
| boolean caught= in.readBoolean(); |
| boolean uncaught= in.readBoolean(); |
| printlnReferenceTypeId(TcpIpSpyMessages.getString("VerbosePacketStream.Exception_type_id__238"), typeId); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Caught__239"), caught); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Uncaught__240"), uncaught); //$NON-NLS-1$ |
| break; |
| case 9: // field only |
| println(TcpIpSpyMessages.getString("VerbosePacketStream._(FieldOnly)_241")); //$NON-NLS-1$ |
| long declaringTypeId= readReferenceTypeID(in); |
| long fieldId= readFieldID(in); |
| printlnReferenceTypeId(TcpIpSpyMessages.getString("VerbosePacketStream.Declaring_type_id__242"), declaringTypeId); //$NON-NLS-1$ |
| printlnFieldId(TcpIpSpyMessages.getString("VerbosePacketStream.Field_id__109"), fieldId); //$NON-NLS-1$ |
| break; |
| case 10: // step |
| println(TcpIpSpyMessages.getString("VerbosePacketStream._(Step)_244")); //$NON-NLS-1$ |
| threadId= readObjectID(in); |
| int stepSize= in.readInt(); |
| int stepDepth= in.readInt(); |
| printlnObjectId(TcpIpSpyMessages.getString("VerbosePacketStream.Thread_id__48"), threadId); //$NON-NLS-1$ |
| printStepSize(stepSize); |
| printStepDepth(stepDepth); |
| break; |
| case 11: // instance only |
| println(TcpIpSpyMessages.getString("VerbosePacketStream._(InstanceOnly)_246")); //$NON-NLS-1$ |
| long objectId= readObjectID(in); |
| printlnObjectId(TcpIpSpyMessages.getString("VerbosePacketStream.Object_id__72"), objectId); //$NON-NLS-1$ |
| break; |
| } |
| } |
| } |
| |
| private void printErSetReply(DataInputStream in) throws IOException { |
| int requestId= in.readInt(); |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Request_id__248"), requestId); //$NON-NLS-1$ |
| } |
| |
| private void printErClearCommand(DataInputStream in) throws IOException { |
| byte eventKind= in.readByte(); |
| int requestId= in.readInt(); |
| printEventKind(eventKind); |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Request_id__248"), requestId); //$NON-NLS-1$ |
| } |
| |
| private void printSfDefaultCommand(DataInputStream in) throws IOException, UnableToParseDataException { |
| long threadId= readObjectID(in); |
| long frameId= readFrameID(in); |
| printlnObjectId(TcpIpSpyMessages.getString("VerbosePacketStream.Thread_object_id__250"), threadId); //$NON-NLS-1$ |
| printlnFrameId(TcpIpSpyMessages.getString("VerbosePacketStream.Frame_id__195"), frameId); //$NON-NLS-1$ |
| } |
| |
| private void printSfGetValuesCommand(DataInputStream in) throws IOException, UnableToParseDataException { |
| long threadId= readObjectID(in); |
| long frameId= readFrameID(in); |
| int slotsCount= in.readInt(); |
| printlnObjectId(TcpIpSpyMessages.getString("VerbosePacketStream.Thread_object_id__250"), threadId); //$NON-NLS-1$ |
| printlnFrameId(TcpIpSpyMessages.getString("VerbosePacketStream.Frame_id__195"), frameId); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Slots_count__254"), slotsCount); //$NON-NLS-1$ |
| for (int i= 0; i < slotsCount; i++) { |
| int slotIndex= in.readInt(); |
| byte signatureTag= in.readByte(); |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Slot_index__255"), slotIndex); //$NON-NLS-1$ |
| printDescription(TcpIpSpyMessages.getString("VerbosePacketStream.Signature_tag__256")); //$NON-NLS-1$ |
| printSignatureByte(signatureTag, true); |
| println(); |
| } |
| } |
| |
| private void printSfGetValuesReply(DataInputStream in) throws IOException, UnableToParseDataException { |
| int valuesCount= in.readInt(); |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Values_count__119"), valuesCount); //$NON-NLS-1$ |
| for (int i= 0; i < valuesCount; i++) { |
| readAndPrintlnTaggedValue(TcpIpSpyMessages.getString("VerbosePacketStream.Value__120"), in); //$NON-NLS-1$ |
| } |
| } |
| |
| private void printSfSetValuesCommand(DataInputStream in) throws IOException, UnableToParseDataException { |
| long threadId= readObjectID(in); |
| long frameId= readFrameID(in); |
| int slotsCount= in.readInt(); |
| printlnObjectId(TcpIpSpyMessages.getString("VerbosePacketStream.Thread_object_id__250"), threadId); //$NON-NLS-1$ |
| printlnFrameId(TcpIpSpyMessages.getString("VerbosePacketStream.Frame_id__195"), frameId); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Slots_count__254"), slotsCount); //$NON-NLS-1$ |
| for (int i= 0; i < slotsCount; i++) { |
| int slotIndex= in.readInt(); |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Slot_index__255"), slotIndex); //$NON-NLS-1$ |
| readAndPrintlnTaggedValue(TcpIpSpyMessages.getString("VerbosePacketStream.Values__263"), in); //$NON-NLS-1$ |
| } |
| } |
| |
| private void printSfThisObjectReply(DataInputStream in) throws IOException, UnableToParseDataException { |
| byte signatureByte= in.readByte(); |
| long objectId= readObjectID(in); |
| printlnTaggedObjectId(TcpIpSpyMessages.getString("VerbosePacketStream.__this___object_id__264"), objectId, signatureByte); //$NON-NLS-1$ |
| } |
| |
| private void printCorReflectedTypeCommand(DataInputStream in) throws IOException, UnableToParseDataException { |
| long classObjectId= readObjectID(in); |
| printlnObjectId(TcpIpSpyMessages.getString("VerbosePacketStream.Class_object_id__126"), classObjectId); //$NON-NLS-1$ |
| } |
| |
| private void printCorReflectedTypeReply(DataInputStream in) throws IOException, UnableToParseDataException { |
| byte refTypeTag= in.readByte(); |
| long typeId= readReferenceTypeID(in); |
| printRefTypeTag(refTypeTag); |
| printlnReferenceTypeId(TcpIpSpyMessages.getString("VerbosePacketStream.Type_id__43"), typeId); //$NON-NLS-1$ |
| } |
| |
| private void printECompositeCommand(DataInputStream in) throws IOException, UnableToParseDataException { |
| byte suspendPolicy= in.readByte(); |
| int eventsCount= in.readInt(); |
| printSuspendPolicy(suspendPolicy); |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Events_count__267"), eventsCount); //$NON-NLS-1$ |
| for (int i= 0; i < eventsCount; i++) { |
| byte eventKind= in.readByte(); |
| int requestId= in.readInt(); |
| printEventKind(eventKind); |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Request_id__248"), requestId); //$NON-NLS-1$ |
| switch (eventKind) { |
| case EVENTKIND_VM_START: |
| long threadId= readObjectID(in); |
| printlnObjectId(TcpIpSpyMessages.getString("VerbosePacketStream.Initial_thread_object_id__269"), threadId); //$NON-NLS-1$ |
| break; |
| case EVENTKIND_SINGLE_STEP: |
| case EVENTKIND_BREAKPOINT: |
| case EVENTKIND_METHOD_ENTRY: |
| case EVENTKIND_METHOD_EXIT: |
| threadId= readObjectID(in); |
| printlnObjectId(TcpIpSpyMessages.getString("VerbosePacketStream.Thread_object_id__250"), threadId); //$NON-NLS-1$ |
| readAndPrintLocation(in); |
| break; |
| case EVENTKIND_EXCEPTION: |
| threadId= readObjectID(in); |
| readAndPrintLocation(in); |
| byte signatureByte= in.readByte(); |
| long objectId= readObjectID(in); |
| printlnTaggedObjectId(TcpIpSpyMessages.getString("VerbosePacketStream.Exception_object_id__139"), objectId, signatureByte); //$NON-NLS-1$ |
| readAndPrintLocation(in); |
| break; |
| case EVENTKIND_THREAD_START: |
| case EVENTKIND_THREAD_DEATH: |
| threadId= readObjectID(in); |
| printlnObjectId(TcpIpSpyMessages.getString("VerbosePacketStream.Thread_object_id__250"), threadId); //$NON-NLS-1$ |
| 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.getString("VerbosePacketStream.Thread_object_id__250"), threadId); //$NON-NLS-1$ |
| printRefTypeTag(refTypeTag); |
| printlnReferenceTypeId(TcpIpSpyMessages.getString("VerbosePacketStream.Type_id__43"), typeId); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Type_signature__275"), typeSignature); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Status__276"), status); //$NON-NLS-1$ |
| break; |
| case EVENTKIND_CLASS_UNLOAD: |
| typeSignature= readString(in); |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Type_signature__275"), typeSignature); //$NON-NLS-1$ |
| break; |
| case EVENTKIND_FIELD_ACCESS: |
| threadId= readObjectID(in); |
| printlnObjectId(TcpIpSpyMessages.getString("VerbosePacketStream.Thread_object_id__250"), threadId); //$NON-NLS-1$ |
| readAndPrintLocation(in); |
| refTypeTag= in.readByte(); |
| typeId= readReferenceTypeID(in); |
| long fieldId= readFieldID(in); |
| signatureByte= in.readByte(); |
| objectId= readObjectID(in); |
| printRefTypeTag(refTypeTag); |
| printlnReferenceTypeId(TcpIpSpyMessages.getString("VerbosePacketStream.Type_id__43"), typeId); //$NON-NLS-1$ |
| printlnFieldId(TcpIpSpyMessages.getString("VerbosePacketStream.Field_id__109"), fieldId); //$NON-NLS-1$ |
| printlnTaggedObjectId(TcpIpSpyMessages.getString("VerbosePacketStream.Object_id__72"), objectId, signatureByte); //$NON-NLS-1$ |
| break; |
| case EVENTKIND_FIELD_MODIFICATION: |
| threadId= readObjectID(in); |
| printlnObjectId(TcpIpSpyMessages.getString("VerbosePacketStream.Thread_object_id__250"), threadId); //$NON-NLS-1$ |
| readAndPrintLocation(in); |
| refTypeTag= in.readByte(); |
| typeId= readReferenceTypeID(in); |
| fieldId= readFieldID(in); |
| signatureByte= in.readByte(); |
| objectId= readObjectID(in); |
| printRefTypeTag(refTypeTag); |
| printlnReferenceTypeId(TcpIpSpyMessages.getString("VerbosePacketStream.Type_id__43"), typeId); //$NON-NLS-1$ |
| printlnFieldId(TcpIpSpyMessages.getString("VerbosePacketStream.Field_id__109"), fieldId); //$NON-NLS-1$ |
| printlnTaggedObjectId(TcpIpSpyMessages.getString("VerbosePacketStream.Object_id__72"), objectId, signatureByte); //$NON-NLS-1$ |
| readAndPrintlnTaggedValue(TcpIpSpyMessages.getString("VerbosePacketStream.Value__120"), in); //$NON-NLS-1$ |
| 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.getString("VerbosePacketStream.Second_byte_input_does_not_match_UTF_Specification_287")); //$NON-NLS-1$ |
| } |
| 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.getString("VerbosePacketStream.Second_or_third_byte_input_does_not_mach_UTF_Specification__288")); //$NON-NLS-1$ |
| } |
| strBuffer.append((char) (((a & 0x0F) << 12) | ((b & 0x3F) << 6) | (c & 0x3F))); |
| i += 3; |
| } else { |
| throw new UTFDataFormatException(TcpIpSpyMessages.getString("VerbosePacketStream.Input_does_not_match_UTF_Specification_289")); //$NON-NLS-1$ |
| } |
| } |
| } |
| } |
| 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.getString("VerbosePacketStream.Unable_to_parse_remaining_data_290"), remainderData(in)); //$NON-NLS-1$ |
| } |
| return readID(in, TcpipSpy.getObjectIDSize()); |
| } |
| |
| private long readReferenceTypeID(DataInputStream in) throws IOException, UnableToParseDataException { |
| if (!TcpipSpy.hasSizes()) { |
| throw new UnableToParseDataException(TcpIpSpyMessages.getString("VerbosePacketStream.Unable_to_parse_remaining_data_290"), remainderData(in)); //$NON-NLS-1$ |
| } |
| return readID(in, TcpipSpy.getReferenceTypeIDSize()); |
| } |
| |
| private long readFieldID(DataInputStream in) throws IOException, UnableToParseDataException { |
| if (!TcpipSpy.hasSizes()) { |
| throw new UnableToParseDataException(TcpIpSpyMessages.getString("VerbosePacketStream.Unable_to_parse_remaining_data_290"), remainderData(in)); //$NON-NLS-1$ |
| } |
| return readID(in, TcpipSpy.getFieldIDSize()); |
| } |
| |
| private long readMethodID(DataInputStream in) throws IOException, UnableToParseDataException { |
| if (!TcpipSpy.hasSizes()) { |
| throw new UnableToParseDataException(TcpIpSpyMessages.getString("VerbosePacketStream.Unable_to_parse_remaining_data_290"), remainderData(in)); //$NON-NLS-1$ |
| } |
| return readID(in, TcpipSpy.getMethodIDSize()); |
| } |
| |
| private long readFrameID(DataInputStream in) throws IOException, UnableToParseDataException { |
| if (!TcpipSpy.hasSizes()) { |
| throw new UnableToParseDataException(TcpIpSpyMessages.getString("VerbosePacketStream.Unable_to_parse_remaining_data_290"), remainderData(in)); //$NON-NLS-1$ |
| } |
| 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.getString("VerbosePacketStream.Unable_to_parse_remaining_data_290"), remainderData(in)); //$NON-NLS-1$ |
| } |
| 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.getString("VerbosePacketStream.unknow_20"); //$NON-NLS-1$ |
| 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.getString("VerbosePacketStream.Location__class_id__297"), classId, typeTag); //$NON-NLS-1$ |
| printlnMethodId(TcpIpSpyMessages.getString("VerbosePacketStream.__________method_id__298"), methodId); //$NON-NLS-1$ |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.__________index__299"), index); //$NON-NLS-1$ |
| } |
| |
| private void readAndPrintArrayRegion(DataInputStream in) throws IOException, UnableToParseDataException { |
| byte signatureByte= in.readByte(); |
| int valuesCount= in.readInt(); |
| printDescription(TcpIpSpyMessages.getString("VerbosePacketStream.Signature_byte__300")); //$NON-NLS-1$ |
| printSignatureByte(signatureByte, true); |
| println(); |
| println(TcpIpSpyMessages.getString("VerbosePacketStream.Values_count__119"), valuesCount); //$NON-NLS-1$ |
| 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.getString("VerbosePacketStream.Value_302"), in); //$NON-NLS-1$ |
| } |
| break; |
| default: |
| for (int i= 0; i < valuesCount; i ++) { |
| readAndPrintlnUntaggedValue(TcpIpSpyMessages.getString("VerbosePacketStream.Value_302"), in, signatureByte, false); //$NON-NLS-1$ |
| } |
| 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((int)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(')'); |
| } |
| |
| } |