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