diff options
Diffstat (limited to 'network/wlan/WDI/COMMON/P2P_AdditionalIe.c')
| -rw-r--r-- | network/wlan/WDI/COMMON/P2P_AdditionalIe.c | 131 |
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 |
