SuperBuffer.cpp 873 B

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