jdwp_priv.h revision 68a5e3c9115f9ba396563ce3b72df9cb036bc665
1bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant/* 2bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant * Copyright (C) 2008 The Android Open Source Project 3f5256e16dfc425c1d466f6308d4026d529ce9e0bHoward Hinnant * 4bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant * Licensed under the Apache License, Version 2.0 (the "License"); 5b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant * you may not use this file except in compliance with the License. 6b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant * You may obtain a copy of the License at 7bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant * 8bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant * http://www.apache.org/licenses/LICENSE-2.0 9bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant * 10bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant * Unless required by applicable law or agreed to in writing, software 11bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant * distributed under the License is distributed on an "AS IS" BASIS, 12bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant * See the License for the specific language governing permissions and 14bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant * limitations under the License. 15bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant */ 16bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant/* 171b92188a82b01e76ac6e8ad5f997293c2a078adcMarshall Clow * JDWP internal interfaces. 18061d0cc4db18d17bf01ed14c5db0be098205bd47Marshall Clow */ 19bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#ifndef ART_JDWP_JDWPPRIV_H_ 20bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#define ART_JDWP_JDWPPRIV_H_ 21bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 22bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include "debugger.h" 23bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include "jdwp/jdwp.h" 24bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include "jdwp/jdwp_event.h" 25bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 26bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <pthread.h> 27bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <sys/uio.h> 28bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 29bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant/* 30bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant * JDWP constants. 31bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant */ 32bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#define kJDWPHeaderLen 11 33bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#define kJDWPFlagReply 0x80 34bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 35bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#define kMagicHandshake "JDWP-Handshake" 36bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#define kMagicHandshakeLen (sizeof(kMagicHandshake)-1) 37bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 38bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant/* DDM support */ 39bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#define kJDWPDdmCmdSet 199 /* 0xc7, or 'G'+128 */ 40bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#define kJDWPDdmCmd 1 41bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 42bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantnamespace art { 43bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 44bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantnamespace JDWP { 45bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 46bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantstruct JdwpState; 47bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 48bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant/* 49bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant * Transport functions. 50bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant */ 51bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantstruct JdwpTransport { 52bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant bool (*startup)(JdwpState* state, const JdwpOptions* options); 53bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant bool (*accept)(JdwpState* state); 54bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant bool (*establish)(JdwpState* state, const JdwpOptions* options); 55bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant void (*shutdown)(JdwpState* state); 56bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant void (*free)(JdwpState* state); 57bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant bool (*processIncoming)(JdwpState* state); 58bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 59bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 60bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantconst JdwpTransport* SocketTransport(); 61bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantconst JdwpTransport* AndroidAdbTransport(); 62bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 63bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant/* 64bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant * Base class for the adb and socket JdwpNetState implementations. 65bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant */ 66bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantclass JdwpNetStateBase { 67bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant public: 68bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant int clientSock; /* active connection to debugger */ 69bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 70bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant enum { kInputBufferSize = 8192 }; 71bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 72bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant unsigned char inputBuffer[kInputBufferSize]; 73bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant size_t inputCount; 74bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 75bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant JdwpNetStateBase(); 76bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 77bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant void ConsumeBytes(size_t byte_count); 78bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 79bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant bool IsConnected(); 80bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 81bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant bool IsAwaitingHandshake(); 82bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant void SetAwaitingHandshake(bool new_state); 83bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 84bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant bool HaveFullPacket(); 85bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 86bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant void Close(); 87bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 88bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ssize_t WritePacket(ExpandBuf* pReply); 89bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ssize_t WriteBufferedPacket(const iovec* iov, int iov_count); 90bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 91bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant private: 92bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant // Used to serialize writes to the socket. 93bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant Mutex socket_lock_; 94bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 95bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant // Are we waiting for the JDWP handshake? 96bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant bool awaiting_handshake_; 97bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 98bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 99bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} // namespace JDWP 100bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 101bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} // namespace art 102bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 103bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#endif // ART_JDWP_JDWPPRIV_H_ 104bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant