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