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