1 //===-- StringExtractorGDBRemote.h ------------------------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #ifndef utility_StringExtractorGDBRemote_h_
11 #define utility_StringExtractorGDBRemote_h_
16 // Other libraries and framework includes
18 #include "lldb/Utility/StringExtractor.h"
20 class StringExtractorGDBRemote : public StringExtractor
23 typedef bool (*ResponseValidatorCallback)(void * baton, const StringExtractorGDBRemote &response);
25 StringExtractorGDBRemote() :
31 StringExtractorGDBRemote(const char *cstr) :
32 StringExtractor(cstr),
37 StringExtractorGDBRemote(const StringExtractorGDBRemote& rhs) :
39 m_validator(rhs.m_validator)
43 virtual ~StringExtractorGDBRemote()
48 ValidateResponse() const;
51 CopyResponseValidator(const StringExtractorGDBRemote& rhs);
54 SetResponseValidator(ResponseValidatorCallback callback, void *baton);
57 SetResponseValidatorToOKErrorNotSupported();
60 SetResponseValidatorToASCIIHexBytes();
63 SetResponseValidatorToJSON();
67 eServerPacketType_nack = 0,
68 eServerPacketType_ack,
69 eServerPacketType_invalid,
70 eServerPacketType_unimplemented,
71 eServerPacketType_interrupt, // CTRL+c packet or "\x03"
72 eServerPacketType_A, // Program arguments packet
73 eServerPacketType_qfProcessInfo,
74 eServerPacketType_qsProcessInfo,
76 eServerPacketType_qEcho,
77 eServerPacketType_qGroupName,
78 eServerPacketType_qHostInfo,
79 eServerPacketType_qLaunchGDBServer,
80 eServerPacketType_qQueryGDBServer,
81 eServerPacketType_qKillSpawnedProcess,
82 eServerPacketType_qLaunchSuccess,
83 eServerPacketType_qModuleInfo,
84 eServerPacketType_qProcessInfoPID,
85 eServerPacketType_qSpeedTest,
86 eServerPacketType_qUserName,
87 eServerPacketType_qGetWorkingDir,
88 eServerPacketType_qFileLoadAddress,
89 eServerPacketType_QEnvironment,
90 eServerPacketType_QLaunchArch,
91 eServerPacketType_QSetDisableASLR,
92 eServerPacketType_QSetDetachOnError,
93 eServerPacketType_QSetSTDIN,
94 eServerPacketType_QSetSTDOUT,
95 eServerPacketType_QSetSTDERR,
96 eServerPacketType_QSetWorkingDir,
97 eServerPacketType_QStartNoAckMode,
98 eServerPacketType_qPlatform_shell,
99 eServerPacketType_qPlatform_mkdir,
100 eServerPacketType_qPlatform_chmod,
101 eServerPacketType_vFile_open,
102 eServerPacketType_vFile_close,
103 eServerPacketType_vFile_pread,
104 eServerPacketType_vFile_pwrite,
105 eServerPacketType_vFile_size,
106 eServerPacketType_vFile_mode,
107 eServerPacketType_vFile_exists,
108 eServerPacketType_vFile_md5,
109 eServerPacketType_vFile_stat,
110 eServerPacketType_vFile_symlink,
111 eServerPacketType_vFile_unlink,
112 // debug server packages
113 eServerPacketType_QEnvironmentHexEncoded,
114 eServerPacketType_QListThreadsInStopReply,
115 eServerPacketType_QRestoreRegisterState,
116 eServerPacketType_QSaveRegisterState,
117 eServerPacketType_QSetLogging,
118 eServerPacketType_QSetMaxPacketSize,
119 eServerPacketType_QSetMaxPayloadSize,
120 eServerPacketType_QSetEnableAsyncProfiling,
121 eServerPacketType_QSyncThreadState,
122 eServerPacketType_QThreadSuffixSupported,
124 eServerPacketType_jThreadsInfo,
125 eServerPacketType_qsThreadInfo,
126 eServerPacketType_qfThreadInfo,
127 eServerPacketType_qGetPid,
128 eServerPacketType_qGetProfileData,
129 eServerPacketType_qGDBServerVersion,
130 eServerPacketType_qMemoryRegionInfo,
131 eServerPacketType_qMemoryRegionInfoSupported,
132 eServerPacketType_qProcessInfo,
133 eServerPacketType_qRcmd,
134 eServerPacketType_qRegisterInfo,
135 eServerPacketType_qShlibInfoAddr,
136 eServerPacketType_qStepPacketSupported,
137 eServerPacketType_qSupported,
138 eServerPacketType_qSyncThreadStateSupported,
139 eServerPacketType_qThreadExtraInfo,
140 eServerPacketType_qThreadStopInfo,
141 eServerPacketType_qVAttachOrWaitSupported,
142 eServerPacketType_qWatchpointSupportInfo,
143 eServerPacketType_qWatchpointSupportInfoSupported,
144 eServerPacketType_qXfer_auxv_read,
146 eServerPacketType_jSignalsInfo,
148 eServerPacketType_vAttach,
149 eServerPacketType_vAttachWait,
150 eServerPacketType_vAttachOrWait,
151 eServerPacketType_vAttachName,
152 eServerPacketType_vCont,
153 eServerPacketType_vCont_actions, // vCont?
155 eServerPacketType_stop_reason, // '?'
163 eServerPacketType_I, // stdin notification
177 eServerPacketType__M,
178 eServerPacketType__m,
179 eServerPacketType_notify, // '%' notification
183 GetServerPacketType () const;
196 GetResponseType () const;
199 IsOKResponse() const;
202 IsUnsupportedResponse() const;
205 IsNormalResponse () const;
208 IsErrorResponse() const;
210 // Returns zero if the packet isn't a EXX packet where XX are two hex
211 // digits. Otherwise the error encoded in XX is returned.
216 GetEscapedBinaryData (std::string &str);
219 ResponseValidatorCallback m_validator;
220 void *m_validator_baton;
223 #endif // utility_StringExtractorGDBRemote_h_