jdwp_priv.h revision 68a5e3c9115f9ba396563ce3b72df9cb036bc665
120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber/* 220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * Copyright (C) 2008 The Android Open Source Project 320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * 420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * you may not use this file except in compliance with the License. 620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * You may obtain a copy of the License at 720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * 820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * http://www.apache.org/licenses/LICENSE-2.0 920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * 1020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * Unless required by applicable law or agreed to in writing, software 1120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 1220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * See the License for the specific language governing permissions and 1420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * limitations under the License. 1520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber */ 1620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber/* 1720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * JDWP internal interfaces. 1820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber */ 1920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber#ifndef ART_JDWP_JDWPPRIV_H_ 2020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber#define ART_JDWP_JDWPPRIV_H_ 2120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 2220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber#include "debugger.h" 2320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber#include "jdwp/jdwp.h" 2420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber#include "jdwp/jdwp_event.h" 2520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 2620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber#include <pthread.h> 2720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber#include <sys/uio.h> 2820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 2920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber/* 3020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * JDWP constants. 3120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber */ 32693d271e62a3726689ff68f4505ba49228eb94b2Andreas Huber#define kJDWPHeaderLen 11 3320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber#define kJDWPFlagReply 0x80 34693d271e62a3726689ff68f4505ba49228eb94b2Andreas Huber 35693d271e62a3726689ff68f4505ba49228eb94b2Andreas Huber#define kMagicHandshake "JDWP-Handshake" 36693d271e62a3726689ff68f4505ba49228eb94b2Andreas Huber#define kMagicHandshakeLen (sizeof(kMagicHandshake)-1) 37693d271e62a3726689ff68f4505ba49228eb94b2Andreas Huber 38693d271e62a3726689ff68f4505ba49228eb94b2Andreas Huber/* DDM support */ 39693d271e62a3726689ff68f4505ba49228eb94b2Andreas Huber#define kJDWPDdmCmdSet 199 /* 0xc7, or 'G'+128 */ 4020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber#define kJDWPDdmCmd 1 4120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 4220111aa043c5f404472bc63b90bc5aad906b1101Andreas Hubernamespace art { 4320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 4420111aa043c5f404472bc63b90bc5aad906b1101Andreas Hubernamespace JDWP { 4520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 46693d271e62a3726689ff68f4505ba49228eb94b2Andreas Huberstruct JdwpState; 4720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 4820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber/* 49693d271e62a3726689ff68f4505ba49228eb94b2Andreas Huber * Transport functions. 5020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber */ 5120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberstruct JdwpTransport { 5220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber bool (*startup)(JdwpState* state, const JdwpOptions* options); 5320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber bool (*accept)(JdwpState* state); 5420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber bool (*establish)(JdwpState* state, const JdwpOptions* options); 5520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber void (*shutdown)(JdwpState* state); 5620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber void (*free)(JdwpState* state); 5720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber bool (*processIncoming)(JdwpState* state); 5820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber}; 5920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 6020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberconst JdwpTransport* SocketTransport(); 6120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberconst JdwpTransport* AndroidAdbTransport(); 6220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 63693d271e62a3726689ff68f4505ba49228eb94b2Andreas Huber/* 64693d271e62a3726689ff68f4505ba49228eb94b2Andreas Huber * Base class for the adb and socket JdwpNetState implementations. 6520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber */ 6620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberclass JdwpNetStateBase { 6720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber public: 6820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber int clientSock; /* active connection to debugger */ 69 70 enum { kInputBufferSize = 8192 }; 71 72 unsigned char inputBuffer[kInputBufferSize]; 73 size_t inputCount; 74 75 JdwpNetStateBase(); 76 77 void ConsumeBytes(size_t byte_count); 78 79 bool IsConnected(); 80 81 bool IsAwaitingHandshake(); 82 void SetAwaitingHandshake(bool new_state); 83 84 bool HaveFullPacket(); 85 86 void Close(); 87 88 ssize_t WritePacket(ExpandBuf* pReply); 89 ssize_t WriteBufferedPacket(const iovec* iov, int iov_count); 90 91 private: 92 // Used to serialize writes to the socket. 93 Mutex socket_lock_; 94 95 // Are we waiting for the JDWP handshake? 96 bool awaiting_handshake_; 97}; 98 99} // namespace JDWP 100 101} // namespace art 102 103#endif // ART_JDWP_JDWPPRIV_H_ 104