130fdc8d8SChris Lattner //===-- StringExtractorGDBRemote.cpp ----------------------------*- C++ -*-===//
230fdc8d8SChris Lattner //
330fdc8d8SChris Lattner //                     The LLVM Compiler Infrastructure
430fdc8d8SChris Lattner //
530fdc8d8SChris Lattner // This file is distributed under the University of Illinois Open Source
630fdc8d8SChris Lattner // License. See LICENSE.TXT for details.
730fdc8d8SChris Lattner //
830fdc8d8SChris Lattner //===----------------------------------------------------------------------===//
930fdc8d8SChris Lattner 
10*c982c768SGreg Clayton #include "Utility/StringExtractorGDBRemote.h"
1130fdc8d8SChris Lattner 
1230fdc8d8SChris Lattner // C Includes
1330fdc8d8SChris Lattner // C++ Includes
1430fdc8d8SChris Lattner // Other libraries and framework includes
1530fdc8d8SChris Lattner // Project includes
1630fdc8d8SChris Lattner 
1730fdc8d8SChris Lattner 
1830fdc8d8SChris Lattner 
1930fdc8d8SChris Lattner StringExtractorGDBRemote::Type
2030fdc8d8SChris Lattner StringExtractorGDBRemote::GetType () const
2130fdc8d8SChris Lattner {
2230fdc8d8SChris Lattner     if (m_packet.empty())
2330fdc8d8SChris Lattner         return eUnsupported;
2430fdc8d8SChris Lattner 
2530fdc8d8SChris Lattner     switch (m_packet[0])
2630fdc8d8SChris Lattner     {
2730fdc8d8SChris Lattner     case 'E':
2830fdc8d8SChris Lattner         if (m_packet.size() == 3 &&
2930fdc8d8SChris Lattner             isxdigit(m_packet[1]) &&
3030fdc8d8SChris Lattner             isxdigit(m_packet[2]))
3130fdc8d8SChris Lattner             return eError;
3230fdc8d8SChris Lattner         break;
3330fdc8d8SChris Lattner 
3430fdc8d8SChris Lattner     case 'O':
3530fdc8d8SChris Lattner         if (m_packet.size() == 2 && m_packet[1] == 'K')
3630fdc8d8SChris Lattner             return eOK;
3730fdc8d8SChris Lattner         break;
3830fdc8d8SChris Lattner 
3930fdc8d8SChris Lattner     case '+':
4030fdc8d8SChris Lattner         if (m_packet.size() == 1)
4130fdc8d8SChris Lattner             return eAck;
4230fdc8d8SChris Lattner         break;
4330fdc8d8SChris Lattner 
4430fdc8d8SChris Lattner     case '-':
4530fdc8d8SChris Lattner         if (m_packet.size() == 1)
4630fdc8d8SChris Lattner             return eNack;
4730fdc8d8SChris Lattner         break;
4830fdc8d8SChris Lattner     }
4930fdc8d8SChris Lattner     return eResponse;
5030fdc8d8SChris Lattner }
5130fdc8d8SChris Lattner 
5230fdc8d8SChris Lattner bool
5330fdc8d8SChris Lattner StringExtractorGDBRemote::IsOKPacket() const
5430fdc8d8SChris Lattner {
5530fdc8d8SChris Lattner     return GetType () == eOK;
5630fdc8d8SChris Lattner }
5730fdc8d8SChris Lattner 
5830fdc8d8SChris Lattner 
5930fdc8d8SChris Lattner bool
6030fdc8d8SChris Lattner StringExtractorGDBRemote::IsUnsupportedPacket() const
6130fdc8d8SChris Lattner {
6230fdc8d8SChris Lattner     return GetType () == eUnsupported;
6330fdc8d8SChris Lattner }
6430fdc8d8SChris Lattner 
6530fdc8d8SChris Lattner bool
6630fdc8d8SChris Lattner StringExtractorGDBRemote::IsNormalPacket() const
6730fdc8d8SChris Lattner {
6830fdc8d8SChris Lattner     return GetType () == eResponse;
6930fdc8d8SChris Lattner }
7030fdc8d8SChris Lattner 
7130fdc8d8SChris Lattner bool
7230fdc8d8SChris Lattner StringExtractorGDBRemote::IsErrorPacket() const
7330fdc8d8SChris Lattner {
7430fdc8d8SChris Lattner     return GetType () == eError &&
7530fdc8d8SChris Lattner            m_packet.size() == 3 &&
7630fdc8d8SChris Lattner            isxdigit(m_packet[1]) &&
7730fdc8d8SChris Lattner            isxdigit(m_packet[2]);
7830fdc8d8SChris Lattner }
7930fdc8d8SChris Lattner 
8030fdc8d8SChris Lattner uint8_t
8130fdc8d8SChris Lattner StringExtractorGDBRemote::GetError ()
8230fdc8d8SChris Lattner {
8330fdc8d8SChris Lattner     if (GetType() == eError)
8430fdc8d8SChris Lattner     {
8530fdc8d8SChris Lattner         SetFilePos(1);
8630fdc8d8SChris Lattner         return GetHexU8(255);
8730fdc8d8SChris Lattner     }
8830fdc8d8SChris Lattner     return 0;
8930fdc8d8SChris Lattner }
90