xref: /llvm-project/lldb/source/Utility/StringExtractorGDBRemote.cpp (revision 30fdc8d841c9d24ac5f3d452b6ece84ee0ac991c)
1 //===-- StringExtractorGDBRemote.cpp ----------------------------*- 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 #include "StringExtractorGDBRemote.h"
11 
12 // C Includes
13 // C++ Includes
14 // Other libraries and framework includes
15 // Project includes
16 
17 
18 
19 StringExtractorGDBRemote::Type
20 StringExtractorGDBRemote::GetType () const
21 {
22     if (m_packet.empty())
23         return eUnsupported;
24 
25     switch (m_packet[0])
26     {
27     case 'E':
28         if (m_packet.size() == 3 &&
29             isxdigit(m_packet[1]) &&
30             isxdigit(m_packet[2]))
31             return eError;
32         break;
33 
34     case 'O':
35         if (m_packet.size() == 2 && m_packet[1] == 'K')
36             return eOK;
37         break;
38 
39     case '+':
40         if (m_packet.size() == 1)
41             return eAck;
42         break;
43 
44     case '-':
45         if (m_packet.size() == 1)
46             return eNack;
47         break;
48     }
49     return eResponse;
50 }
51 
52 bool
53 StringExtractorGDBRemote::IsOKPacket() const
54 {
55     return GetType () == eOK;
56 }
57 
58 
59 bool
60 StringExtractorGDBRemote::IsUnsupportedPacket() const
61 {
62     return GetType () == eUnsupported;
63 }
64 
65 bool
66 StringExtractorGDBRemote::IsNormalPacket() const
67 {
68     return GetType () == eResponse;
69 }
70 
71 bool
72 StringExtractorGDBRemote::IsErrorPacket() const
73 {
74     return GetType () == eError &&
75            m_packet.size() == 3 &&
76            isxdigit(m_packet[1]) &&
77            isxdigit(m_packet[2]);
78 }
79 
80 uint8_t
81 StringExtractorGDBRemote::GetError ()
82 {
83     if (GetType() == eError)
84     {
85         SetFilePos(1);
86         return GetHexU8(255);
87     }
88     return 0;
89 }
90