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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
#include "Mp_Precomp.h"
#if WPP_SOFTWARE_TRACE
#include "P2P_AdditionalIe.tmh"
#endif
#include "P2P_AdditionalIe.h"
#if (P2P_SUPPORT == 1)
//-----------------------------------------------------------------------------
// Local
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// Exported
//-----------------------------------------------------------------------------
VOID
P2P_AddIe_Init(
IN PP2P_ADD_IES addIes
)
{
PlatformZeroMemory(addIes, sizeof(*addIes));
return;
}
VOID
P2P_AddIe_Free(
IN PP2P_ADD_IES addIes
)
{
u4Byte itAddIe = 0;
for(itAddIe = 0; itAddIe < P2P_ADD_IE_MAX; itAddIe++)
{
if(addIes->addIe[itAddIe])
{
FrameBuf_Free(addIes->addIe[itAddIe]);
addIes->addIe[itAddIe] = NULL;
}
}
}
BOOLEAN
P2P_AddIe_Set(
IN PP2P_ADD_IES addIes,
IN P2P_ADD_IE_ID id,
IN u4Byte bufLen,
IN u1Byte *pBuf
)
{
FRAME_BUF srcBuf;
FRAME_BUF *pClonedSrcBuf = NULL;
FRAME_BUF **ppDestBuf = NULL;
if(P2P_ADD_IE_MAX < id)
{
RT_TRACE(COMP_P2P, DBG_LOUD, ("%s: invalid id: %u!\n", __FUNCTION__, id));
return FALSE;
}
FrameBuf_Init((u2Byte)bufLen, (u2Byte)bufLen, pBuf, &srcBuf);
ppDestBuf = &(addIes->addIe[id]);
if(NULL == (pClonedSrcBuf = FrameBuf_Clone(&srcBuf)))
{
RT_TRACE(COMP_P2P, DBG_LOUD, ("%s: Frame buffer clone Failure!\n", __FUNCTION__));
return FALSE;
}
if(*ppDestBuf) FrameBuf_Free(*ppDestBuf);
*ppDestBuf = pClonedSrcBuf;
return TRUE;
}
const FRAME_BUF *
P2P_AddIe_Get(
IN const PP2P_ADD_IES addIes,
IN P2P_ADD_IE_ID id
)
{
FRAME_BUF *pBuf = NULL;
if(P2P_ADD_IE_MAX < id)
{
RT_TRACE(COMP_P2P, DBG_LOUD, ("%s: invalid id: %u!\n", __FUNCTION__, id));
return NULL;
}
if (addIes->addIe != NULL)
{
// Prefast warning C6385: Reading invalid data from 'addIes->addIe': the readable size is '44' bytes, but 'id' bytes may be read.
// false positive, disable it here.
#pragma warning( disable: 6385 )
pBuf = addIes->addIe[id];
}
return pBuf;
}
u2Byte
P2P_AddIe_Append(
IN const PP2P_ADD_IES addIes,
IN P2P_ADD_IE_ID id,
IN FRAME_BUF *pBuf
)
{
const FRAME_BUF *pAddIeBuf = NULL;
u2Byte bytesWritten = 0;
pAddIeBuf = P2P_AddIe_Get(addIes, id);
if(pAddIeBuf)
{
if(FrameBuf_Append(pBuf, pAddIeBuf))
{
bytesWritten = FrameBuf_Length(pAddIeBuf);
}
FrameBuf_Dump(pAddIeBuf, 0, DBG_LOUD, __FUNCTION__);
}
return bytesWritten;
}
#endif
|