• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
GetThreadSuffixSupported()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
SetPortRange(uint16_t lo_port_num,uint16_t hi_port_num)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_
148