File: XnLinkResponseMsgParser.cpp

package info (click to toggle)
openni2 2.2.0.33%2Bdfsg-11
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 22,216 kB
  • sloc: cpp: 111,197; ansic: 35,511; sh: 10,542; python: 1,313; java: 952; makefile: 575; xml: 12
file content (59 lines) | stat: -rw-r--r-- 1,504 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include "XnLinkResponseMsgParser.h"
#include "XnLinkStatusCodes.h"
#include "XnLinkProtoUtils.h"
#include <XnOS.h>
#include <XnLog.h>

#define XN_MASK_LINK "xnLink"

namespace xn
{

XnStatus LinkResponseMsgParser::ParsePacketImpl(XnLinkFragmentation /*fragmentation*/,
												const XnUInt8* pSrc, 
												const XnUInt8* pSrcEnd, 
												XnUInt8*& pDst, 
												const XnUInt8* pDstEnd)
{
	XnStatus nRetVal = XN_STATUS_OK;
	
	XnSizeT nPacketDataSize = pSrcEnd - pSrc;
	if (nPacketDataSize < sizeof(XnLinkResponseInfo))
	{
		XN_ASSERT(FALSE);
		return XN_STATUS_LINK_MISSING_RESPONSE_INFO;
	}
	XnUInt16 nResponseCode = XN_PREPARE_VAR16_IN_BUFFER(((XnLinkResponseInfo*)pSrc)->m_nResponseCode);

	nPacketDataSize -= sizeof(XnLinkResponseInfo);
	pSrc += sizeof(XnLinkResponseInfo);

	if (pDst + nPacketDataSize > pDstEnd)
	{
		XN_ASSERT(FALSE);
		return XN_STATUS_OUTPUT_BUFFER_OVERFLOW;
	}

	////////////////////////////////////////////
	xnOSMemCopy(pDst, pSrc, nPacketDataSize);
	////////////////////////////////////////////
	nRetVal = xnLinkResponseCodeToStatus(nResponseCode);
	if (nRetVal != XN_STATUS_OK)
	{
		xnLogWarning(XN_MASK_LINK, "Received error from link layer response: '%s' (%u)",
			xnGetStatusString(nRetVal), nResponseCode);
		xnLogWriteBinaryData(XN_MASK_LINK, XN_LOG_WARNING, 
			__FILE__, __LINE__, (XnUChar*)pSrc, (XnUInt32)nPacketDataSize, "Response extra data: ");

		XN_ASSERT(FALSE);
		return nRetVal;
	}

	pDst += nPacketDataSize;

	return XN_STATUS_OK;
}



}