ij-16.png   inspectorJ -- JavaTM Profiler
sf project site browse source checkout source
SourceForge.net Logo



src/inspectorj/jdwp/jdwpcommand.cpp

Go to the documentation of this file.
00001 /***************************************************************************
00002  *   inspectorJ - java profiler                                            *
00003  *   Copyright (C) 2007 by James May
00004  *                                                                         *
00005  *   This program is free software; you can redistribute it and/or modify  *
00006  *   it under the terms of the GNU General Public License as published by  *
00007  *   the Free Software Foundation; either version 2 of the License, or     *
00008  *   (at your option) any later version.                                   *
00009  *                                                                         *
00010  *   This program is distributed in the hope that it will be useful,       *
00011  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
00012  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
00013  *   GNU General Public License for more details.                          *
00014  *                                                                         *
00015  *   You should have received a copy of the GNU General Public License     *
00016  *   along with this program; if not, write to the                         *
00017  *   Free Software Foundation, Inc.,                                       *
00018  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
00019  ***************************************************************************/
00020 
00027 #include <iostream>
00028 #include "inspectorj/jdwp/jdwpcommand.h"
00029 
00030 using namespace inspectorj::jdwp;
00031         
00032 // initialize the id
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     The following constructors are used to create command packets
00100     to be sent to the profiler server.
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 }

Generated on Sun Aug 19 17:07:53 2007 for inspectorJ by  doxygen 1.5.1