GDBRemoteCommunicationServer.h revision 63afdb07641f04aa7b60d895120b056124d3469b
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
21class ProcessGDBRemote;
22class StringExtractorGDBRemote;
23
24class GDBRemoteCommunicationServer : public GDBRemoteCommunication
25{
26public:
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
65protected:
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
140private:
141    //------------------------------------------------------------------
142    // For GDBRemoteCommunicationServer only
143    //------------------------------------------------------------------
144    DISALLOW_COPY_AND_ASSIGN (GDBRemoteCommunicationServer);
145};
146
147#endif  // liblldb_GDBRemoteCommunicationServer_h_
148