]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - contrib/llvm/tools/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServer.h
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / contrib / llvm / tools / lldb / source / Plugins / Process / gdb-remote / GDBRemoteCommunicationServer.h
1 //===-- GDBRemoteCommunicationServer.h --------------------------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9
10 #ifndef liblldb_GDBRemoteCommunicationServer_h_
11 #define liblldb_GDBRemoteCommunicationServer_h_
12
13 // C Includes
14 // C++ Includes
15 // Other libraries and framework includes
16 // Project includes
17 #include "lldb/Target/Process.h"
18
19 #include "GDBRemoteCommunication.h"
20
21 class ProcessGDBRemote;
22 class StringExtractorGDBRemote;
23
24 class GDBRemoteCommunicationServer : public GDBRemoteCommunication
25 {
26 public:
27     enum
28     {
29         eBroadcastBitRunPacketSent = kLoUserBroadcastBit
30     };
31     //------------------------------------------------------------------
32     // Constructors and Destructors
33     //------------------------------------------------------------------
34     GDBRemoteCommunicationServer(bool is_platform);
35
36     virtual
37     ~GDBRemoteCommunicationServer();
38
39     bool
40     GetPacketAndSendResponse (uint32_t timeout_usec,
41                               lldb_private::Error &error,
42                               bool &interrupt, 
43                               bool &quit);
44
45     virtual bool
46     GetThreadSuffixSupported ()
47     {
48         return true;
49     }
50
51     // After connecting, do a little handshake with the client to make sure
52     // we are at least communicating
53     bool
54     HandshakeWithClient (lldb_private::Error *error_ptr);
55
56     // Set both ports to zero to let the platform automatically bind to 
57     // a port chosen by the OS.
58     void
59     SetPortRange (uint16_t lo_port_num, uint16_t hi_port_num)
60     {
61         m_lo_port_num = lo_port_num;
62         m_hi_port_num = hi_port_num;
63     }
64
65 protected:
66     //typedef std::map<uint16_t, lldb::pid_t> PortToPIDMap;
67
68     lldb::thread_t m_async_thread;
69     lldb_private::ProcessLaunchInfo m_process_launch_info;
70     lldb_private::Error m_process_launch_error;
71     lldb_private::ProcessInstanceInfoList m_proc_infos;
72     uint32_t m_proc_infos_index;
73     uint16_t m_lo_port_num;
74     uint16_t m_hi_port_num;
75     //PortToPIDMap m_port_to_pid_map;
76
77     size_t
78     SendUnimplementedResponse (const char *packet);
79
80     size_t
81     SendErrorResponse (uint8_t error);
82
83     size_t
84     SendOKResponse ();
85
86     bool
87     Handle_A (StringExtractorGDBRemote &packet);
88
89     bool
90     Handle_qLaunchSuccess (StringExtractorGDBRemote &packet);
91
92     bool
93     Handle_qHostInfo (StringExtractorGDBRemote &packet);
94     
95     bool
96     Handle_qLaunchGDBServer (StringExtractorGDBRemote &packet);
97
98     bool
99     Handle_qProcessInfoPID (StringExtractorGDBRemote &packet);
100     
101     bool
102     Handle_qfProcessInfo (StringExtractorGDBRemote &packet);
103     
104     bool 
105     Handle_qsProcessInfo (StringExtractorGDBRemote &packet);
106
107     bool
108     Handle_qC (StringExtractorGDBRemote &packet);
109
110     bool 
111     Handle_qUserName (StringExtractorGDBRemote &packet);
112
113     bool 
114     Handle_qGroupName (StringExtractorGDBRemote &packet);
115
116     bool
117     Handle_qSpeedTest (StringExtractorGDBRemote &packet);
118
119     bool
120     Handle_QEnvironment  (StringExtractorGDBRemote &packet);
121     
122     bool
123     Handle_QSetDisableASLR (StringExtractorGDBRemote &packet);
124
125     bool
126     Handle_QSetWorkingDir (StringExtractorGDBRemote &packet);
127
128     bool
129     Handle_QStartNoAckMode (StringExtractorGDBRemote &packet);
130
131     bool
132     Handle_QSetSTDIN (StringExtractorGDBRemote &packet);
133
134     bool
135     Handle_QSetSTDOUT (StringExtractorGDBRemote &packet);
136
137     bool
138     Handle_QSetSTDERR (StringExtractorGDBRemote &packet);
139     
140 private:
141     //------------------------------------------------------------------
142     // For GDBRemoteCommunicationServer only
143     //------------------------------------------------------------------
144     DISALLOW_COPY_AND_ASSIGN (GDBRemoteCommunicationServer);
145 };
146
147 #endif  // liblldb_GDBRemoteCommunicationServer_h_