LNBuffer.cpp 979 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. #include "stdafx.h"
  2. #include "LNBuffer.h"
  3. #include <Simplelog.h>
  4. #include <string>
  5. CLNBuffer::CLNBuffer()
  6. {
  7. }
  8. CLNBuffer::~CLNBuffer()
  9. {
  10. }
  11. int CLNBuffer::HasPack()
  12. {
  13. static DWORD64 headid = 0xABAAAAAAAAAAAAAA;
  14. int i, nStart = -1;
  15. //find pack head
  16. for (i = 0; i < m_nPos - 1 && m_nPos > 4; i++)
  17. {
  18. if (*(DWORD64*)(m_pBuffer + i) == headid)
  19. {
  20. nStart = i;
  21. break;
  22. }
  23. }
  24. if (nStart == -1)
  25. {
  26. m_nPos = 0;
  27. return 0;
  28. }
  29. else if (nStart > 0)
  30. {
  31. m_nPos -= nStart;
  32. memmove(m_pBuffer, m_pBuffer + nStart, m_nPos);
  33. nStart = 0;
  34. }
  35. int nlen = 0;
  36. //find pack tail
  37. DWORD nLen = htonl(*(DWORD*)(m_pBuffer + sizeof(headid)));
  38. if ((DWORD)m_nPos >= sizeof(HJDATAHEAD2) + nLen + 2)
  39. {
  40. if (m_pBuffer[sizeof(HJDATAHEAD2) + nLen] == 0x00 && m_pBuffer[sizeof(HJDATAHEAD2) + nLen + 1] == 0xab)
  41. {
  42. nlen = sizeof(HJDATAHEAD2) + nLen + 2;
  43. }
  44. else
  45. {
  46. ASSERT(0);
  47. m_nPos = 0;
  48. }
  49. }
  50. return nlen;
  51. }