diff options
| author | Daiqian Hu <[email protected]> | 2016-11-21 08:54:24 +0800 |
|---|---|---|
| committer | Daiqian Hu <[email protected]> | 2016-11-21 08:54:24 +0800 |
| commit | a95eaad088f61aa55da9d73015cf1ed86e64a67e (patch) | |
| tree | 15b498a08a4aee4b7f8b1627d39c965b3aa3ba98 /network/wlan/WDI/COMMON/P2PSvc_Object.c | |
| parent | 1aa0338ec5418345ea0c383e92b4fa19f7c98425 (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.c | 691 |
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 |
