IGDBStub.h
Go to the documentation of this file.
1 #pragma once
2 #include <string>
3 #include <bzscore/buffer.h>
4 #include "BreakInSocket.h"
5 
6 namespace GDBServerFoundation
7 {
10  {
11  BazisLib::BasicBuffer m_Buffer;
12 
13  public:
14  StubResponse(const StubResponse &anotherResponse)
15  : m_Buffer(anotherResponse.m_Buffer.GetSize())
16  {
17  memcpy(m_Buffer.GetData(), anotherResponse.m_Buffer.GetConstData(), anotherResponse.m_Buffer.GetSize());
18  m_Buffer.SetSize(anotherResponse.m_Buffer.GetSize());
19  }
20 
22  {
23  }
24 
25  StubResponse(const char *pText)
26  : m_Buffer(pText, strlen(pText))
27  {
28  }
29 
30  StubResponse(const void *pData, size_t length)
31  : m_Buffer((const char *)pData, length)
32  {
33  }
34 
35  size_t GetSize() {return m_Buffer.GetSize();}
36  const char *GetData() {return (const char *)m_Buffer.GetConstData();}
37 
38  void Append(const char *pStr)
39  {
40  m_Buffer.append(pStr, strlen(pStr), 4096);
41  }
42 
43  void Append(const char *pStr, size_t length)
44  {
45  m_Buffer.append(pStr, length, 4096);
46  }
47 
48  char *AllocateAppend(size_t length)
49  {
50  size_t oldSize = m_Buffer.GetSize();
51  if (!m_Buffer.EnsureSize(oldSize + length))
52  return NULL;
53  m_Buffer.SetSize(oldSize + length);
54  return (char *)m_Buffer.GetData(oldSize);
55  }
56 
57  StubResponse &operator+=(const char *pStr)
58  {
59  Append(pStr);
60  return *this;
61  }
62  };
63 
66  {
69  static StubResponse OK;
70  };
71 
73  class IGDBStub : public IBreakInTarget
74  {
75  public:
77  virtual StubResponse HandleRequest(const BazisLib::TempStringA &requestType, char splitterChar, const BazisLib::TempStringA &requestData)=0;
78  virtual ~IGDBStub(){}
79  };
80 
83  {
84  public:
85  virtual IGDBStub *CreateStub(class GDBServer *pServer)=0;
86  virtual void OnProtocolError(const TCHAR *errorDescription)=0;
87  };
88 }