summaryrefslogtreecommitdiff
path: root/network/wlan/WDI/COMMON/P2PSvc_Object.c
diff options
context:
space:
mode:
authorDaiqian Hu <[email protected]>2016-11-21 08:54:24 +0800
committerDaiqian Hu <[email protected]>2016-11-21 08:54:24 +0800
commita95eaad088f61aa55da9d73015cf1ed86e64a67e (patch)
tree15b498a08a4aee4b7f8b1627d39c965b3aa3ba98 /network/wlan/WDI/COMMON/P2PSvc_Object.c
parent1aa0338ec5418345ea0c383e92b4fa19f7c98425 (diff)
Re-submit for WDI sample driver to GitHub
Submit WDI sample driver to GitHub for RS1.
Diffstat (limited to 'network/wlan/WDI/COMMON/P2PSvc_Object.c')
-rw-r--r--network/wlan/WDI/COMMON/P2PSvc_Object.c691
1 files changed, 691 insertions, 0 deletions
diff --git a/network/wlan/WDI/COMMON/P2PSvc_Object.c b/network/wlan/WDI/COMMON/P2PSvc_Object.c
new file mode 100644
index 00000000..cfa5dafd
--- /dev/null
+++ b/network/wlan/WDI/COMMON/P2PSvc_Object.c
@@ -0,0 +1,691 @@
+#include "Mp_Precomp.h"
+
+#include "P2PSvc_Internal.h"
+
+#if (P2P_SUPPORT == 1)
+#if (P2PSVC_SUPPORT == 1)
+
+//-----------------------------------------------------------------------------
+// Local
+//-----------------------------------------------------------------------------
+u4Byte
+p2psvc_AttachObjToObjList(
+ IN PP2PSVC_OBJ_LIST pObjList,
+ IN u4Byte type,
+ IN u4Byte id,
+ IN u4Byte ver,
+ IN u4Byte len,
+ IN PVOID buf
+ )
+{
+ // Assume that
+ // * the obj list is valid
+ // * the object to attach is valid
+ //
+
+ ULONG bytesWritten = 0;
+ PRT_OBJECT_HEADER pObjToFill = NULL;
+
+ if(0 == pObjList->nObjs)
+ {
+ pObjList->ObjTab[0] = 0;
+ pObjToFill = (PRT_OBJECT_HEADER)(pObjList->varStart + pObjList->ObjTab[0]);
+ }
+ else
+ {
+ PRT_OBJECT_HEADER pPrevObj = (PRT_OBJECT_HEADER)(pObjList->varStart + pObjList->ObjTab[pObjList->nObjs - 1]);
+ u4Byte prevObjLen = RT_OBJECT_HEADER_SIZE + pPrevObj->Length;
+
+ pObjList->ObjTab[pObjList->nObjs] = pObjList->ObjTab[pObjList->nObjs - 1] + prevObjLen;
+ pObjToFill = (PRT_OBJECT_HEADER)(pObjList->varStart + pObjList->ObjTab[pObjList->nObjs]);
+ }
+
+ // Fill the obj
+ RT_ASSIGN_OBJECT_HEADER(pObjToFill,
+ type,
+ id,
+ ver,
+ len);
+
+ if(0 < len)
+ {
+ PlatformMoveMemory(pObjToFill->Value, buf, len);
+ }
+
+ bytesWritten = RT_OBJECT_HEADER_SIZE + len;
+
+ // Update obj list header
+ pObjList->nObjs++;
+ pObjList->hdr.Length += bytesWritten;
+
+ return bytesWritten;
+}
+
+
+//-----------------------------------------------------------------------------
+// Exported
+//-----------------------------------------------------------------------------
+
+u4Byte
+P2PSvc_MakeObj(
+ IN PP2PSVC_OBJ_LIST pObjList,
+ IN u4Byte id,
+ IN u4Byte bufLEn,
+ IN PVOID pBuf
+ )
+{
+ u4Byte bytesWritten = 0;
+
+ do
+ {
+ bytesWritten = p2psvc_AttachObjToObjList(pObjList,
+ RT_OB_HDR_TYPE_DATA,
+ id,
+ P2PSVC_MIN_SUPPORT_VER,
+ bufLEn,
+ pBuf);
+ }while(FALSE);
+
+ return bytesWritten;
+}
+
+u4Byte
+P2PSvc_MakeSvcDescObjList(
+ IN PP2PSVC_OBJ_LIST pObjList,
+ OUT PP2PSVC_OBJ_LIST *ppSvcDescObjList
+ )
+{
+ u4Byte bytesWritten = 0;
+ P2PSVC_OBJ_LIST objList;
+
+ do
+ {
+ PlatformZeroMemory(&objList, sizeof(objList));
+ P2PSVC_OBJ_LIST_INIT(&objList,
+ RT_OB_HDR_TYPE_DATA,
+ P2PSVC_OBJ_HDR_ID_DATA_SVC_DESC_LIST,
+ P2PSVC_MIN_SUPPORT_VER);
+
+ // p2psvc_AttachObjToObjList will make obj hdr for us,
+ // so we copy from the fild right after the obj hdr.
+ bytesWritten = p2psvc_AttachObjToObjList(pObjList,
+ RT_OB_HDR_TYPE_DATA,
+ P2PSVC_OBJ_HDR_ID_DATA_SVC_DESC_LIST,
+ P2PSVC_MIN_SUPPORT_VER,
+ FIELD_OFFSET(P2PSVC_OBJ_LIST, varStart) - FIELD_OFFSET(RT_OBJECT_HEADER, Value),
+ (pu1Byte)(&objList) + FIELD_OFFSET(RT_OBJECT_HEADER, Value));
+
+ if(ppSvcDescObjList)
+ {
+ *ppSvcDescObjList = (PP2PSVC_OBJ_LIST)(pObjList->varStart + pObjList->ObjTab[pObjList->nObjs - 1]);
+ }
+ }while(FALSE);
+
+ return bytesWritten;
+}
+
+//
+// Description:
+// Currently not used
+//
+u4Byte
+P2PSvc_MakeTimeObj(
+ IN PP2PSVC_OBJ_LIST pObjList,
+ IN u4Byte paramId,
+ IN u8Byte time
+ )
+{
+ u4Byte bytesWritten = 0;
+
+ do
+ {
+ bytesWritten = p2psvc_AttachObjToObjList(pObjList,
+ RT_OB_HDR_TYPE_DATA,
+ paramId,
+ P2PSVC_MIN_SUPPORT_VER,
+ sizeof(time),
+ &time);
+ }while(FALSE);
+
+ return bytesWritten;
+}
+
+u4Byte
+P2PSvc_MakeSearchIdObj(
+ IN PP2PSVC_OBJ_LIST pObjList,
+ IN PP2PSVC_REQ_INFO_ENTRY pSeekInfoEntry,
+ OUT pu1Byte pSearchId
+ )
+{
+ u4Byte bytesWritten = 0;
+
+ do
+ {
+ PRT_OBJECT_HEADER pSearchIdObj = NULL;
+
+ if(NULL == (pSearchIdObj = P2PSvc_GetParam(&pSeekInfoEntry->objList, P2PSVC_OBJ_HDR_ID_DATA_SEARCH_ID, 0)))
+ {
+ break;
+ }
+
+ if(1 != pSearchIdObj->Length)
+ {
+ break;
+ }
+
+ if(pSearchId) *pSearchId = *((pu1Byte)pSearchIdObj->Value);
+
+ bytesWritten = p2psvc_AttachObjToObjList(pObjList,
+ RT_OB_HDR_TYPE_DATA,
+ P2PSVC_OBJ_HDR_ID_DATA_SEARCH_ID,
+ P2PSVC_MIN_SUPPORT_VER,
+ pSearchIdObj->Length,
+ pSearchIdObj->Value);
+ }while(FALSE);
+
+ return bytesWritten;
+}
+
+u4Byte
+P2PSvc_MakeDevAddrObj(
+ IN PP2PSVC_OBJ_LIST pObjList,
+ IN pu1Byte pDevAddr
+ )
+{
+ u4Byte bytesWritten = 0;
+ u1Byte bcstAddr[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
+
+ bytesWritten = p2psvc_AttachObjToObjList(pObjList,
+ RT_OB_HDR_TYPE_DATA,
+ P2PSVC_OBJ_HDR_ID_DATA_DEV_ADDR,
+ P2PSVC_MIN_SUPPORT_VER,
+ 6,
+ (NULL == pDevAddr) ? (bcstAddr) : (pDevAddr));
+
+ return bytesWritten;
+}
+
+u4Byte
+P2PSvc_MakeDevNameObj_FromP2PAttrs(
+ IN PP2PSVC_OBJ_LIST pObjList,
+ IN POCTET_STRING posP2PAttrs
+ )
+{
+ u4Byte bytesWritten = 0;
+ OCTET_STRING osDevName = {NULL, 0};
+
+ do
+ {
+ if(RT_STATUS_SUCCESS != P2PSvc_GetDevNameFromDevInfoAttr(posP2PAttrs, &osDevName))
+ {
+ break;
+ }
+
+ bytesWritten = p2psvc_AttachObjToObjList(pObjList,
+ RT_OB_HDR_TYPE_DATA,
+ P2PSVC_OBJ_HDR_ID_DATA_DEV_NAME,
+ P2PSVC_MIN_SUPPORT_VER,
+ osDevName.Length,
+ osDevName.Octet);
+
+ RT_PRINT_DATA(COMP_P2P, DBG_TRACE, "P2PSvc_MakeDevNameObj_FromP2PAttrs():\n", osDevName.Octet, osDevName.Length);
+ }while(FALSE);
+
+ return bytesWritten;
+}
+
+u4Byte
+P2PSvc_MakeDevNameObj_FromDevNameOctet(
+ IN PP2PSVC_OBJ_LIST pObjList,
+ IN OCTET_STRING osDevName
+ )
+{
+ u4Byte bytesWritten = 0;
+
+ do
+ {
+ bytesWritten = p2psvc_AttachObjToObjList(pObjList,
+ RT_OB_HDR_TYPE_DATA,
+ P2PSVC_OBJ_HDR_ID_DATA_DEV_NAME,
+ P2PSVC_MIN_SUPPORT_VER,
+ osDevName.Length,
+ osDevName.Octet);
+ }while(FALSE);
+
+ return bytesWritten;
+}
+
+
+u4Byte
+P2PSvc_MakeAdvIdObj(
+ IN PP2PSVC_OBJ_LIST pObjList,
+ IN u4Byte advId
+ )
+{
+ u4Byte bytesWritten = 0;
+
+ bytesWritten = p2psvc_AttachObjToObjList(pObjList,
+ RT_OB_HDR_TYPE_DATA,
+ P2PSVC_OBJ_HDR_ID_DATA_ADV_ID,
+ P2PSVC_MIN_SUPPORT_VER,
+ sizeof(advId),
+ &advId);
+
+ return bytesWritten;
+}
+
+u4Byte
+P2PSvc_MakeSessionIdObj(
+ IN PP2PSVC_OBJ_LIST pObjList,
+ IN u4Byte sessionId
+ )
+{
+ u4Byte bytesWritten = 0;
+
+ bytesWritten = p2psvc_AttachObjToObjList(pObjList,
+ RT_OB_HDR_TYPE_DATA,
+ P2PSVC_OBJ_HDR_ID_DATA_SESSION_ID,
+ P2PSVC_MIN_SUPPORT_VER,
+ sizeof(sessionId),
+ &sessionId);
+
+ return bytesWritten;
+}
+
+u4Byte
+P2PSvc_MakeSvcNameObj(
+ IN PP2PSVC_OBJ_LIST pObjList,
+ IN u1Byte svcNameBufLen,
+ IN pu1Byte pSvcNameBuf
+ )
+{
+ u4Byte bytesWritten = 0;
+
+ do
+ {
+ // The svc-name shall be encoded in UTF-8 and
+ // it is upper's responsibility to translate
+ // it to other format (e.g., UTF-16).
+
+ bytesWritten = p2psvc_AttachObjToObjList(pObjList,
+ RT_OB_HDR_TYPE_DATA,
+ P2PSVC_OBJ_HDR_ID_DATA_SVC_NAME,
+ P2PSVC_MIN_SUPPORT_VER,
+ svcNameBufLen,
+ pSvcNameBuf);
+ }while(FALSE);
+
+ return bytesWritten;
+}
+
+u4Byte
+P2PSvc_MakeSvcInfoObj(
+ IN PP2PSVC_OBJ_LIST pObjList,
+ IN u2Byte svcInfoBufLen,
+ IN pu1Byte pSvcInfoBuf
+ )
+{
+ u4Byte bytesWritten = 0;
+
+ do
+ {
+ bytesWritten = p2psvc_AttachObjToObjList(pObjList,
+ RT_OB_HDR_TYPE_DATA,
+ P2PSVC_OBJ_HDR_ID_DATA_SVC_INFO,
+ P2PSVC_MIN_SUPPORT_VER,
+ svcInfoBufLen,
+ pSvcInfoBuf);
+ }while(FALSE);
+
+ return bytesWritten;
+}
+
+u4Byte
+P2PSvc_MakeAutoAcceptObj(
+ IN PP2PSVC_OBJ_LIST pObjList,
+ IN BOOLEAN bAutoAccept
+ )
+{
+ u4Byte bytesWritten = 0;
+
+ do
+ {
+ bytesWritten = p2psvc_AttachObjToObjList(pObjList,
+ RT_OB_HDR_TYPE_DATA,
+ P2PSVC_OBJ_HDR_ID_DATA_SVC_AUTO_ACCEPT,
+ P2PSVC_MIN_SUPPORT_VER,
+ sizeof(bAutoAccept),
+ &bAutoAccept);
+ }while(FALSE);
+
+ return bytesWritten;
+}
+
+u4Byte
+P2PSvc_MakeSvcStatusObj(
+ IN PP2PSVC_OBJ_LIST pObjList,
+ IN u1Byte svcStatus
+ )
+{
+ u4Byte bytesWritten = 0;
+
+ do
+ {
+ bytesWritten = p2psvc_AttachObjToObjList(pObjList,
+ RT_OB_HDR_TYPE_DATA,
+ P2PSVC_OBJ_HDR_ID_DATA_SVC_STATUS,
+ P2PSVC_MIN_SUPPORT_VER,
+ 1,
+ &svcStatus);
+ }while(FALSE);
+
+ return bytesWritten;
+}
+
+u4Byte
+P2PSvc_MakeUserAcceptedObj(
+ IN PP2PSVC_OBJ_LIST pObjList,
+ IN BOOLEAN bUserAccepted
+ )
+{
+ u4Byte bytesWritten = 0;
+
+ do
+ {
+ bytesWritten = p2psvc_AttachObjToObjList(pObjList,
+ RT_OB_HDR_TYPE_DATA,
+ P2PSVC_OBJ_HDR_ID_DATA_USER_ACCEPTED,
+ P2PSVC_MIN_SUPPORT_VER,
+ sizeof(bUserAccepted),
+ &bUserAccepted);
+ }while(FALSE);
+
+ return bytesWritten;
+}
+
+u4Byte
+P2PSvc_MakeSvcCountObj(
+ IN PP2PSVC_OBJ_LIST pObjList,
+ IN u1Byte svcCount
+ )
+{
+ u4Byte bytesWritten = 0;
+
+ do
+ {
+ bytesWritten = p2psvc_AttachObjToObjList(pObjList,
+ RT_OB_HDR_TYPE_DATA,
+ P2PSVC_OBJ_HDR_ID_DATA_SVC_COUNT,
+ P2PSVC_MIN_SUPPORT_VER,
+ sizeof(svcCount),
+ &svcCount);
+ }while(FALSE);
+
+ return bytesWritten;
+}
+
+u4Byte
+P2PSvc_MakeP2PStatusObj(
+ IN PP2PSVC_OBJ_LIST pObjList,
+ IN P2P_STATUS_CODE P2PStatus
+ )
+{
+ u4Byte bytesWritten = 0;
+
+ do
+ {
+ bytesWritten = p2psvc_AttachObjToObjList(pObjList,
+ RT_OB_HDR_TYPE_DATA,
+ P2PSVC_OBJ_HDR_ID_DATA_P2P_STATUS,
+ P2PSVC_MIN_SUPPORT_VER,
+ sizeof(P2PStatus),
+ &P2PStatus);
+ }while(FALSE);
+
+ return bytesWritten;
+}
+
+u4Byte
+P2PSvc_MakeSsidObj(
+ IN PP2PSVC_OBJ_LIST pObjList,
+ IN u1Byte ssidLen,
+ IN pu1Byte ssidBuf
+ )
+{
+ u4Byte bytesWritten = 0;
+
+ do
+ {
+ bytesWritten = p2psvc_AttachObjToObjList(pObjList,
+ RT_OB_HDR_TYPE_DATA,
+ P2PSVC_OBJ_HDR_ID_DATA_SSID,
+ P2PSVC_MIN_SUPPORT_VER,
+ ssidLen,
+ ssidBuf);
+ }while(FALSE);
+
+ return bytesWritten;
+}
+
+u4Byte
+P2PSvc_MakeIntfAddrObj(
+ IN PP2PSVC_OBJ_LIST pObjList,
+ IN pu1Byte intfAddr
+ )
+{
+ u4Byte bytesWritten = 0;
+
+ do
+ {
+ bytesWritten = p2psvc_AttachObjToObjList(pObjList,
+ RT_OB_HDR_TYPE_DATA,
+ P2PSVC_OBJ_HDR_ID_DATA_INTF_ADDR,
+ P2PSVC_MIN_SUPPORT_VER,
+ 6,
+ intfAddr);
+ }while(FALSE);
+
+ return bytesWritten;
+}
+
+u4Byte
+P2PSvc_MakeOpChannelObj(
+ IN PP2PSVC_OBJ_LIST pObjList,
+ IN u1Byte opChannel
+ )
+{
+ u4Byte bytesWritten = 0;
+
+ do
+ {
+ bytesWritten = p2psvc_AttachObjToObjList(pObjList,
+ RT_OB_HDR_TYPE_DATA,
+ P2PSVC_OBJ_HDR_ID_DATA_OP_CHNL,
+ P2PSVC_MIN_SUPPORT_VER,
+ sizeof(opChannel),
+ &opChannel);
+ }while(FALSE);
+
+ return bytesWritten;
+}
+
+u4Byte
+P2PSvc_MakeConfigMethodObj(
+ IN PP2PSVC_OBJ_LIST pObjList,
+ IN u2Byte configMethod
+ )
+{
+ u4Byte bytesWritten = 0;
+
+ do
+ {
+ bytesWritten = p2psvc_AttachObjToObjList(pObjList,
+ RT_OB_HDR_TYPE_DATA,
+ P2PSVC_OBJ_HDR_ID_DATA_CONFIG_METHOD,
+ P2PSVC_MIN_SUPPORT_VER,
+ sizeof(configMethod),
+ &configMethod);
+ }while(FALSE);
+
+ return bytesWritten;
+}
+
+u4Byte
+P2PSvc_MakeP2PAttrsObj(
+ IN PP2PSVC_OBJ_LIST pObjList,
+ IN u2Byte attrLen,
+ IN pu1Byte pAttrs
+ )
+{
+ u4Byte bytesWritten = 0;
+
+ do
+ {
+ bytesWritten = p2psvc_AttachObjToObjList(pObjList,
+ RT_OB_HDR_TYPE_DATA,
+ P2PSVC_OBJ_HDR_ID_DATA_P2P_ATTRIBUTES,
+ P2PSVC_MIN_SUPPORT_VER,
+ attrLen,
+ pAttrs);
+ }while(FALSE);
+
+ return bytesWritten;
+}
+
+u4Byte
+P2PSvc_MakeDeferredObj(
+ IN PP2PSVC_OBJ_LIST pObjList,
+ IN BOOLEAN bDeferred
+ )
+{
+ u4Byte bytesWritten = 0;
+
+ bytesWritten = p2psvc_AttachObjToObjList(pObjList,
+ RT_OB_HDR_TYPE_DATA,
+ P2PSVC_OBJ_HDR_ID_DATA_DEFERRED,
+ P2PSVC_MIN_SUPPORT_VER,
+ sizeof(bDeferred),
+ &bDeferred);
+
+ return bytesWritten;
+}
+
+u4Byte
+P2PSvc_MakeIsSDDoneObj(
+ IN PP2PSVC_OBJ_LIST pObjList,
+ IN BOOLEAN bSDDone
+ )
+{
+ u4Byte bytesWritten = 0;
+
+ bytesWritten = p2psvc_AttachObjToObjList(pObjList,
+ RT_OB_HDR_TYPE_DATA,
+ P2PSVC_OBJ_HDR_ID_DATA_IS_SD_DONE,
+ P2PSVC_MIN_SUPPORT_VER,
+ sizeof(bSDDone),
+ &bSDDone);
+
+ return bytesWritten;
+}
+
+u4Byte
+P2PSvc_MakeIsPersistentObj(
+ IN PP2PSVC_OBJ_LIST pObjList,
+ IN BOOLEAN bPersistent
+ )
+{
+ u4Byte bytesWritten = 0;
+
+ bytesWritten = p2psvc_AttachObjToObjList(pObjList,
+ RT_OB_HDR_TYPE_DATA,
+ P2PSVC_OBJ_HDR_ID_DATA_IS_PERSISTENT,
+ P2PSVC_MIN_SUPPORT_VER,
+ sizeof(bPersistent),
+ &bPersistent);
+
+ return bytesWritten;
+}
+
+u4Byte
+P2PSvc_MakeConnActionObj(
+ IN PP2PSVC_OBJ_LIST pObjList,
+ IN u4Byte connAction
+ )
+{
+ u4Byte bytesWritten = 0;
+
+ do
+ {
+ bytesWritten = p2psvc_AttachObjToObjList(pObjList,
+ RT_OB_HDR_TYPE_DATA,
+ P2PSVC_OBJ_HDR_ID_DATA_CONN_ACTION,
+ P2PSVC_MIN_SUPPORT_VER,
+ sizeof(connAction),
+ &connAction);
+ }while(FALSE);
+
+ return bytesWritten;
+}
+
+u4Byte
+P2PSvc_MakeReasonObj(
+ IN PP2PSVC_OBJ_LIST pObjList,
+ IN P2PSVC_REASON reason
+ )
+{
+ u4Byte bytesWritten = 0;
+
+ do
+ {
+ bytesWritten = p2psvc_AttachObjToObjList(pObjList,
+ RT_OB_HDR_TYPE_DATA,
+ P2PSVC_OBJ_HDR_ID_DATA_REASON,
+ P2PSVC_MIN_SUPPORT_VER,
+ sizeof(reason),
+ &reason);
+ }while(FALSE);
+
+ return bytesWritten;
+}
+
+u4Byte
+P2PSvc_MakeSessionInfoDataInfoObj(
+ IN PP2PSVC_OBJ_LIST pObjList,
+ IN OCTET_STRING osSessionInfoDataInfo
+ )
+{
+ u4Byte bytesWritten = 0;
+
+ do
+ {
+ bytesWritten = p2psvc_AttachObjToObjList(pObjList,
+ RT_OB_HDR_TYPE_DATA,
+ P2PSVC_OBJ_HDR_ID_DATA_SESSION_INFO,
+ P2PSVC_MIN_SUPPORT_VER,
+ osSessionInfoDataInfo.Length,
+ osSessionInfoDataInfo.Octet);
+ }while(FALSE);
+
+ return bytesWritten;
+}
+
+u4Byte
+P2PSvc_MakeGrpDevAddrObj(
+ IN PP2PSVC_OBJ_LIST pObjList,
+ IN pu1Byte pGrpDevAddr
+ )
+{
+ u4Byte bytesWritten = 0;
+
+ bytesWritten = p2psvc_AttachObjToObjList(pObjList,
+ RT_OB_HDR_TYPE_DATA,
+ P2PSVC_OBJ_HDR_ID_DATA_GRP_DEV_ADDR,
+ P2PSVC_MIN_SUPPORT_VER,
+ 6,
+ pGrpDevAddr);
+
+ return bytesWritten;
+}
+
+#endif // #if (P2PSVC_SUPPORT == 1)
+#endif // #if (P2P_SUPPORT == 1) \ No newline at end of file