blob: cead61aef0fcfd141a1cf9c13a080e1678f9a0b8 [file] [log] [blame]
Elliott Hughes872d4ec2011-10-21 17:07:15 -07001/*
2 * Copyright (C) 2008 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16/*
17 * JDWP internal interfaces.
18 */
19#ifndef ART_JDWP_JDWPPRIV_H_
20#define ART_JDWP_JDWPPRIV_H_
21
Elliott Hughes872d4ec2011-10-21 17:07:15 -070022#include "debugger.h"
23#include "jdwp/jdwp.h"
24#include "jdwp/jdwp_event.h"
Elliott Hughes872d4ec2011-10-21 17:07:15 -070025
26#include <pthread.h>
27#include <sys/uio.h>
28
29/*
30 * JDWP constants.
31 */
32#define kJDWPHeaderLen 11
33#define kJDWPFlagReply 0x80
34
Elliott Hughes74847412012-06-20 18:10:21 -070035#define kMagicHandshake "JDWP-Handshake"
36#define kMagicHandshakeLen (sizeof(kMagicHandshake)-1)
37
Elliott Hughes872d4ec2011-10-21 17:07:15 -070038/* DDM support */
39#define kJDWPDdmCmdSet 199 /* 0xc7, or 'G'+128 */
40#define kJDWPDdmCmd 1
41
42namespace art {
43
44namespace JDWP {
45
46/*
47 * Transport-specific network status.
48 */
49struct JdwpNetState;
50struct JdwpState;
51
52/*
53 * Transport functions.
54 */
55struct JdwpTransport {
Elliott Hughes376a7a02011-10-24 18:35:55 -070056 bool (*startup)(JdwpState* state, const JdwpOptions* options);
Elliott Hughes872d4ec2011-10-21 17:07:15 -070057 bool (*accept)(JdwpState* state);
Elliott Hughesa21039c2012-06-21 12:09:25 -070058 bool (*establish)(JdwpState* state, const JdwpOptions* options);
Elliott Hughes872d4ec2011-10-21 17:07:15 -070059 void (*close)(JdwpState* state);
60 void (*shutdown)(JdwpState* state);
61 void (*free)(JdwpState* state);
62 bool (*isConnected)(JdwpState* state);
63 bool (*awaitingHandshake)(JdwpState* state);
64 bool (*processIncoming)(JdwpState* state);
65 bool (*sendRequest)(JdwpState* state, ExpandBuf* pReq);
Elliott Hughescccd84f2011-12-05 16:51:54 -080066 bool (*sendBufferedRequest)(JdwpState* state, const iovec* iov, int iov_count);
Elliott Hughes872d4ec2011-10-21 17:07:15 -070067};
68
69const JdwpTransport* SocketTransport();
70const JdwpTransport* AndroidAdbTransport();
71
Elliott Hughes872d4ec2011-10-21 17:07:15 -070072/*
73 * Base class for JdwpNetState
74 */
75class JdwpNetStateBase {
Elliott Hughesf8349362012-06-18 15:00:06 -070076 public:
Elliott Hughes872d4ec2011-10-21 17:07:15 -070077 int clientSock; /* active connection to debugger */
78
79 JdwpNetStateBase();
80 ssize_t writePacket(ExpandBuf* pReply);
Elliott Hughescccd84f2011-12-05 16:51:54 -080081 ssize_t writeBufferedPacket(const iovec* iov, int iov_count);
Elliott Hughes872d4ec2011-10-21 17:07:15 -070082
Elliott Hughesf8349362012-06-18 15:00:06 -070083 private:
84 // Used to serialize writes to the socket.
Elliott Hughes872d4ec2011-10-21 17:07:15 -070085 Mutex socket_lock_;
86};
87
Elliott Hughes872d4ec2011-10-21 17:07:15 -070088} // namespace JDWP
89
90} // namespace art
91
92#endif // ART_JDWP_JDWPPRIV_H_