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