00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00027 #include <iostream>
00028 #include "inspectorj/jdwp/jdwpcommand.h"
00029
00030 using namespace inspectorj::jdwp;
00031
00032
00033 int JDWPCommand::nextId = 0;
00034
00041 JDWPCommand::JDWPCommand(jdwpCmdPacket &packet) : JDWPPacket()
00042 {
00043
00044 cmdPacket.len = packet.len;
00045 cmdPacket.id = packet.id;
00046 cmdPacket.flags = packet.flags;
00047 cmdPacket.cmdSet = packet.cmdSet;
00048 cmdPacket.cmd = packet.cmd;
00049 int dataSize = cmdPacket.len - JDWP_HEADER_LENGTH;
00050
00051 cmdPacket.data = new jbyte[dataSize];
00052 memcpy(cmdPacket.data, packet.data, dataSize);
00053
00054 bytes = QByteArray((char*)cmdPacket.data, dataSize);
00055 data = new QDataStream(&bytes, QIODevice::ReadWrite);
00056 }
00057
00064 JDWPCommand* JDWPCommand::copy()
00065 {
00066 return new JDWPCommand(cmdPacket);
00067 }
00068
00072 JDWPCommand::~JDWPCommand()
00073 {
00074 if (cmdPacket.data) {
00075 delete[] cmdPacket.data;
00076 cmdPacket.data = 0;
00077 }
00078 }
00079
00087 JDWPCommand::JDWPCommand(jbyte cmdSet, jbyte cmd) : JDWPPacket()
00088 {
00089
00090 data = new QDataStream(&bytes, QIODevice::WriteOnly);
00091 cmdPacket.cmdSet = cmdSet;
00092 cmdPacket.cmd = cmd;
00093 cmdPacket.id = getNextId();
00094 cmdPacket.flags = JDWPTRANSPORT_FLAGS_NONE;
00095 cmdPacket.data = new jbyte[0];
00096 }
00097
00098
00099
00100
00101
00102
00108 JDWPCommand* JDWPCommand::newCommand(referenceTypeCmd cmd)
00109 {
00110 return new JDWPCommand((jbyte)REF_TYPE_COMMAND_SET, (jbyte)cmd);
00111 }
00112
00118 JDWPCommand* JDWPCommand::newCommand(byteCodeCmd cmd)
00119 {
00120 return new JDWPCommand((jbyte)BYTECODE_COMMAND_SET, (jbyte)cmd);
00121 }
00122
00128 JDWPCommand* JDWPCommand::newCommand(virtualMachineCmd cmd)
00129 {
00130 return new JDWPCommand((jbyte)VM_COMMAND_SET, (jbyte)cmd);
00131 }
00132
00138 JDWPCommand* JDWPCommand::newCommand(inspectorjCmd cmd)
00139 {
00140 return new JDWPCommand((jbyte)INSPECTORJ_COMMAND_SET, (jbyte)cmd);
00141 }
00142
00148 JDWPCommand* JDWPCommand::newCommand(classTypeCmd cmd)
00149 {
00150 return new JDWPCommand((jbyte)CLASS_TYPE_COMMAND_SET, (jbyte)cmd);
00151 }
00152
00158 JDWPCommand* JDWPCommand::newCommand(arrayTypeCmd cmd)
00159 {
00160 return new JDWPCommand((jbyte)ARRAY_TYPE_COMMAND_SET, (jbyte)cmd);
00161 }
00162
00168 JDWPCommand* JDWPCommand::newCommand(methodCmd cmd)
00169 {
00170 return new JDWPCommand((jbyte)METHOD_COMMAND_SET, (jbyte)cmd);
00171 }
00172
00178 JDWPCommand* JDWPCommand::newCommand(objectReferenceCmd cmd)
00179 {
00180 return new JDWPCommand((jbyte)OBJECT_REF_COMMAND_SET, (jbyte)cmd);
00181 }
00182
00188 JDWPCommand* JDWPCommand::newCommand(stringReferenceCmd cmd)
00189 {
00190 return new JDWPCommand((jbyte)STRING_REF_COMMAND_SET, (jbyte)cmd);
00191 }
00192
00198 JDWPCommand* JDWPCommand::newCommand(threadReferenceCmd cmd)
00199 {
00200 return new JDWPCommand((jbyte)THREAD_REF_COMMAND_SET, (jbyte)cmd);
00201 }
00202
00208 JDWPCommand* JDWPCommand::newCommand(threadGroupReferenceCmd cmd)
00209 {
00210 return new JDWPCommand((jbyte)THREAD_GROUP_REF_COMMAND_SET, (jbyte)cmd);
00211 }
00212
00218 JDWPCommand* JDWPCommand::newCommand(arrayReferenceCmd cmd)
00219 {
00220 return new JDWPCommand((jbyte)ARRAY_REF_COMMAND_SET, (jbyte)cmd);
00221 }
00222
00228 JDWPCommand* JDWPCommand::newCommand(classLoaderReferenceCmd cmd)
00229 {
00230 return new JDWPCommand((jbyte)CLASS_LDR_REF_COMMAND_SET, (jbyte)cmd);
00231 }
00232
00238 JDWPCommand* JDWPCommand::newCommand(eventRequestCmd cmd)
00239 {
00240 return new JDWPCommand((jbyte)EVENT_REQUEST_COMMAND_SET, (jbyte)cmd);
00241 }
00242
00248 JDWPCommand* JDWPCommand::newCommand(stackFrameCmd cmd)
00249 {
00250 return new JDWPCommand((jbyte)STACK_FRAME_COMMAND_SET, (jbyte)cmd);
00251 }
00252
00258 JDWPCommand* JDWPCommand::newCommand(classObjectReferenceCmd cmd)
00259 {
00260 return new JDWPCommand((jbyte)CLASS_OBJECT_REF_COMMAND_SET, (jbyte)cmd);
00261 }
00262
00268 JDWPCommand* JDWPCommand::newCommand(eventCmd cmd)
00269 {
00270 return new JDWPCommand((jbyte)EVENT_COMMAND_SET, (jbyte)cmd);
00271 }
00272
00277 jbyte JDWPCommand::getPacketType()
00278 {
00279 return cmdPacket.flags;
00280 }
00281
00285 jbyte JDWPCommand::getCmd()
00286 {
00287 return cmdPacket.cmd;
00288 }
00289
00293 jbyte JDWPCommand::getCmdSet()
00294 {
00295 return cmdPacket.cmdSet;
00296 }
00297
00301 jint JDWPCommand::getId()
00302 {
00303 return cmdPacket.id;
00304 }
00305
00310 int JDWPCommand::getNextId()
00311 {
00312 return ++nextId;
00313 }