StringExtractorGDBRemote.h revision 263367
1//===-- StringExtractorGDBRemote.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 utility_StringExtractorGDBRemote_h_
11#define utility_StringExtractorGDBRemote_h_
12
13// C Includes
14// C++ Includes
15#include <string>
16// Other libraries and framework includes
17// Project includes
18#include "Utility/StringExtractor.h"
19
20class StringExtractorGDBRemote : public StringExtractor
21{
22public:
23
24    StringExtractorGDBRemote() :
25        StringExtractor ()
26    {
27    }
28
29    StringExtractorGDBRemote(const char *cstr) :
30        StringExtractor (cstr)
31    {
32    }
33    StringExtractorGDBRemote(const StringExtractorGDBRemote& rhs) :
34        StringExtractor (rhs)
35    {
36    }
37
38    virtual ~StringExtractorGDBRemote()
39    {
40    }
41
42    enum ServerPacketType
43    {
44        eServerPacketType_nack = 0,
45        eServerPacketType_ack,
46        eServerPacketType_invalid,
47        eServerPacketType_unimplemented,
48        eServerPacketType_interrupt, // CTRL+c packet or "\x03"
49        eServerPacketType_A, // Program arguments packet
50        eServerPacketType_qfProcessInfo,
51        eServerPacketType_qsProcessInfo,
52        eServerPacketType_qC,
53        eServerPacketType_qGroupName,
54        eServerPacketType_qHostInfo,
55        eServerPacketType_qLaunchGDBServer,
56        eServerPacketType_qKillSpawnedProcess,
57        eServerPacketType_qLaunchSuccess,
58        eServerPacketType_qProcessInfoPID,
59        eServerPacketType_qSpeedTest,
60        eServerPacketType_qUserName,
61        eServerPacketType_qGetWorkingDir,
62        eServerPacketType_QEnvironment,
63        eServerPacketType_QLaunchArch,
64        eServerPacketType_QSetDisableASLR,
65        eServerPacketType_QSetSTDIN,
66        eServerPacketType_QSetSTDOUT,
67        eServerPacketType_QSetSTDERR,
68        eServerPacketType_QSetWorkingDir,
69        eServerPacketType_QStartNoAckMode,
70        eServerPacketType_qPlatform_shell,
71        eServerPacketType_qPlatform_mkdir,
72        eServerPacketType_qPlatform_chmod,
73        eServerPacketType_vFile_open,
74        eServerPacketType_vFile_close,
75        eServerPacketType_vFile_pread,
76        eServerPacketType_vFile_pwrite,
77        eServerPacketType_vFile_size,
78        eServerPacketType_vFile_mode,
79        eServerPacketType_vFile_exists,
80        eServerPacketType_vFile_md5,
81        eServerPacketType_vFile_stat,
82        eServerPacketType_vFile_symlink,
83        eServerPacketType_vFile_unlink
84    };
85
86    ServerPacketType
87    GetServerPacketType () const;
88
89    enum ResponseType
90    {
91        eUnsupported = 0,
92        eAck,
93        eNack,
94        eError,
95        eOK,
96        eResponse
97    };
98
99    ResponseType
100    GetResponseType () const;
101
102    bool
103    IsOKResponse() const;
104
105    bool
106    IsUnsupportedResponse() const;
107
108    bool
109    IsNormalResponse () const;
110
111    bool
112    IsErrorResponse() const;
113
114    // Returns zero if the packet isn't a EXX packet where XX are two hex
115    // digits. Otherwise the error encoded in XX is returned.
116    uint8_t
117    GetError();
118
119    size_t
120    GetEscapedBinaryData (std::string &str);
121
122};
123
124#endif  // utility_StringExtractorGDBRemote_h_
125