summaryrefslogtreecommitdiff
path: root/network/wlan/WDI/COMMON/P2P_AdditionalIe.c
diff options
context:
space:
mode:
Diffstat (limited to 'network/wlan/WDI/COMMON/P2P_AdditionalIe.c')
-rw-r--r--network/wlan/WDI/COMMON/P2P_AdditionalIe.c131
1 files changed, 131 insertions, 0 deletions
diff --git a/network/wlan/WDI/COMMON/P2P_AdditionalIe.c b/network/wlan/WDI/COMMON/P2P_AdditionalIe.c
new file mode 100644
index 00000000..bf943808
--- /dev/null
+++ b/network/wlan/WDI/COMMON/P2P_AdditionalIe.c
@@ -0,0 +1,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