1*30fdc8d8SChris Lattner //===-- StringExtractorGDBRemote.cpp ----------------------------*- C++ -*-===// 2*30fdc8d8SChris Lattner // 3*30fdc8d8SChris Lattner // The LLVM Compiler Infrastructure 4*30fdc8d8SChris Lattner // 5*30fdc8d8SChris Lattner // This file is distributed under the University of Illinois Open Source 6*30fdc8d8SChris Lattner // License. See LICENSE.TXT for details. 7*30fdc8d8SChris Lattner // 8*30fdc8d8SChris Lattner //===----------------------------------------------------------------------===// 9*30fdc8d8SChris Lattner 10*30fdc8d8SChris Lattner #include "StringExtractorGDBRemote.h" 11*30fdc8d8SChris Lattner 12*30fdc8d8SChris Lattner // C Includes 13*30fdc8d8SChris Lattner // C++ Includes 14*30fdc8d8SChris Lattner // Other libraries and framework includes 15*30fdc8d8SChris Lattner // Project includes 16*30fdc8d8SChris Lattner 17*30fdc8d8SChris Lattner 18*30fdc8d8SChris Lattner 19*30fdc8d8SChris Lattner StringExtractorGDBRemote::Type 20*30fdc8d8SChris Lattner StringExtractorGDBRemote::GetType () const 21*30fdc8d8SChris Lattner { 22*30fdc8d8SChris Lattner if (m_packet.empty()) 23*30fdc8d8SChris Lattner return eUnsupported; 24*30fdc8d8SChris Lattner 25*30fdc8d8SChris Lattner switch (m_packet[0]) 26*30fdc8d8SChris Lattner { 27*30fdc8d8SChris Lattner case 'E': 28*30fdc8d8SChris Lattner if (m_packet.size() == 3 && 29*30fdc8d8SChris Lattner isxdigit(m_packet[1]) && 30*30fdc8d8SChris Lattner isxdigit(m_packet[2])) 31*30fdc8d8SChris Lattner return eError; 32*30fdc8d8SChris Lattner break; 33*30fdc8d8SChris Lattner 34*30fdc8d8SChris Lattner case 'O': 35*30fdc8d8SChris Lattner if (m_packet.size() == 2 && m_packet[1] == 'K') 36*30fdc8d8SChris Lattner return eOK; 37*30fdc8d8SChris Lattner break; 38*30fdc8d8SChris Lattner 39*30fdc8d8SChris Lattner case '+': 40*30fdc8d8SChris Lattner if (m_packet.size() == 1) 41*30fdc8d8SChris Lattner return eAck; 42*30fdc8d8SChris Lattner break; 43*30fdc8d8SChris Lattner 44*30fdc8d8SChris Lattner case '-': 45*30fdc8d8SChris Lattner if (m_packet.size() == 1) 46*30fdc8d8SChris Lattner return eNack; 47*30fdc8d8SChris Lattner break; 48*30fdc8d8SChris Lattner } 49*30fdc8d8SChris Lattner return eResponse; 50*30fdc8d8SChris Lattner } 51*30fdc8d8SChris Lattner 52*30fdc8d8SChris Lattner bool 53*30fdc8d8SChris Lattner StringExtractorGDBRemote::IsOKPacket() const 54*30fdc8d8SChris Lattner { 55*30fdc8d8SChris Lattner return GetType () == eOK; 56*30fdc8d8SChris Lattner } 57*30fdc8d8SChris Lattner 58*30fdc8d8SChris Lattner 59*30fdc8d8SChris Lattner bool 60*30fdc8d8SChris Lattner StringExtractorGDBRemote::IsUnsupportedPacket() const 61*30fdc8d8SChris Lattner { 62*30fdc8d8SChris Lattner return GetType () == eUnsupported; 63*30fdc8d8SChris Lattner } 64*30fdc8d8SChris Lattner 65*30fdc8d8SChris Lattner bool 66*30fdc8d8SChris Lattner StringExtractorGDBRemote::IsNormalPacket() const 67*30fdc8d8SChris Lattner { 68*30fdc8d8SChris Lattner return GetType () == eResponse; 69*30fdc8d8SChris Lattner } 70*30fdc8d8SChris Lattner 71*30fdc8d8SChris Lattner bool 72*30fdc8d8SChris Lattner StringExtractorGDBRemote::IsErrorPacket() const 73*30fdc8d8SChris Lattner { 74*30fdc8d8SChris Lattner return GetType () == eError && 75*30fdc8d8SChris Lattner m_packet.size() == 3 && 76*30fdc8d8SChris Lattner isxdigit(m_packet[1]) && 77*30fdc8d8SChris Lattner isxdigit(m_packet[2]); 78*30fdc8d8SChris Lattner } 79*30fdc8d8SChris Lattner 80*30fdc8d8SChris Lattner uint8_t 81*30fdc8d8SChris Lattner StringExtractorGDBRemote::GetError () 82*30fdc8d8SChris Lattner { 83*30fdc8d8SChris Lattner if (GetType() == eError) 84*30fdc8d8SChris Lattner { 85*30fdc8d8SChris Lattner SetFilePos(1); 86*30fdc8d8SChris Lattner return GetHexU8(255); 87*30fdc8d8SChris Lattner } 88*30fdc8d8SChris Lattner return 0; 89*30fdc8d8SChris Lattner } 90