diff options
author | Etan Cohen <etancohen@google.com> | 2017-02-17 13:46:19 -0800 |
---|---|---|
committer | Etan Cohen <etancohen@google.com> | 2017-02-21 20:05:01 +0000 |
commit | a7543a7423f65a93cb1adab1170e6c1eec5e3386 (patch) | |
tree | 8d942b05b73d6d0e153974baebfb53c3e9698dd5 /wifi/1.0/default/hidl_struct_util.cpp | |
parent | c190f93111e7bd92809a4b298a6ad4754f08675e (diff) |
[AWARE] Add service support for SDEA service info
Wire-up the SDEA service info (aka Extended Service Specific
Info) to the newly available legacy HAL.
Bug: 35193423
Test: integration (sl4a) tests
Change-Id: I2cbd82ecc4274c5137693dde34370f2b68646e19
Diffstat (limited to 'wifi/1.0/default/hidl_struct_util.cpp')
-rw-r--r-- | wifi/1.0/default/hidl_struct_util.cpp | 45 |
1 files changed, 38 insertions, 7 deletions
diff --git a/wifi/1.0/default/hidl_struct_util.cpp b/wifi/1.0/default/hidl_struct_util.cpp index 0bf0d323c4..7dbc8ebbed 100644 --- a/wifi/1.0/default/hidl_struct_util.cpp +++ b/wifi/1.0/default/hidl_struct_util.cpp @@ -917,7 +917,15 @@ bool convertHidlNanPublishRequestToLegacy( memcpy(legacy_request->service_specific_info, hidl_request.baseConfigs.serviceSpecificInfo.data(), legacy_request->service_specific_info_len); - // TODO: b/35193423 add support for extended service specific info + legacy_request->sdea_service_specific_info_len = + hidl_request.baseConfigs.extendedServiceSpecificInfo.size(); + if (legacy_request->sdea_service_specific_info_len > NAN_MAX_SDEA_SERVICE_SPECIFIC_INFO_LEN) { + LOG(ERROR) << "convertHidlNanPublishRequestToLegacy: sdea_service_specific_info_len too large"; + return false; + } + memcpy(legacy_request->sdea_service_specific_info, + hidl_request.baseConfigs.extendedServiceSpecificInfo.data(), + legacy_request->sdea_service_specific_info_len); legacy_request->rx_match_filter_len = hidl_request.baseConfigs.rxMatchFilter.size(); if (legacy_request->rx_match_filter_len > NAN_MAX_MATCH_FILTER_LEN) { LOG(ERROR) << "convertHidlNanPublishRequestToLegacy: rx_match_filter_len too large"; @@ -999,7 +1007,16 @@ bool convertHidlNanSubscribeRequestToLegacy( memcpy(legacy_request->service_specific_info, hidl_request.baseConfigs.serviceSpecificInfo.data(), legacy_request->service_specific_info_len); - // TODO: b/35193423 add support for extended service specific info + legacy_request->sdea_service_specific_info_len = + hidl_request.baseConfigs.extendedServiceSpecificInfo.size(); + if (legacy_request->sdea_service_specific_info_len > NAN_MAX_SDEA_SERVICE_SPECIFIC_INFO_LEN) { + LOG(ERROR) << + "convertHidlNanSubscribeRequestToLegacy: sdea_service_specific_info_len too large"; + return false; + } + memcpy(legacy_request->sdea_service_specific_info, + hidl_request.baseConfigs.extendedServiceSpecificInfo.data(), + legacy_request->sdea_service_specific_info_len); legacy_request->rx_match_filter_len = hidl_request.baseConfigs.rxMatchFilter.size(); if (legacy_request->rx_match_filter_len > NAN_MAX_MATCH_FILTER_LEN) { LOG(ERROR) << "convertHidlNanSubscribeRequestToLegacy: rx_match_filter_len too large"; @@ -1083,13 +1100,22 @@ bool convertHidlNanTransmitFollowupRequestToLegacy( legacy_hal::NAN_TRANSMIT_IN_DW : legacy_hal::NAN_TRANSMIT_IN_FAW; legacy_request->service_specific_info_len = hidl_request.serviceSpecificInfo.size(); if (legacy_request->service_specific_info_len > NAN_MAX_SERVICE_SPECIFIC_INFO_LEN) { - LOG(ERROR) << "convertHidlNanTransmitFollowupRequestToLegacy: service_specific_info_len too large"; + LOG(ERROR) << + "convertHidlNanTransmitFollowupRequestToLegacy: service_specific_info_len too large"; return false; } memcpy(legacy_request->service_specific_info, hidl_request.serviceSpecificInfo.data(), legacy_request->service_specific_info_len); - // TODO: b/35193423 add support for extended service specific info + legacy_request->sdea_service_specific_info_len = hidl_request.extendedServiceSpecificInfo.size(); + if (legacy_request->sdea_service_specific_info_len > NAN_MAX_SDEA_SERVICE_SPECIFIC_INFO_LEN) { + LOG(ERROR) << + "convertHidlNanTransmitFollowupRequestToLegacy: sdea_service_specific_info_len too large"; + return false; + } + memcpy(legacy_request->sdea_service_specific_info, + hidl_request.extendedServiceSpecificInfo.data(), + legacy_request->sdea_service_specific_info_len); legacy_request->recv_indication_cfg = hidl_request.disableFollowupResultIndication ? 0x1 : 0x0; return true; @@ -1279,8 +1305,8 @@ bool convertLegacyNanCapabilitiesResponseToHidl( hidl_response->maxMatchFilterLen = legacy_response.max_match_filter_len; hidl_response->maxTotalMatchFilterLen = legacy_response.max_total_match_filter_len; hidl_response->maxServiceSpecificInfoLen = legacy_response.max_service_specific_info_len; - // TODO: b/35193423 add support for extended service specific info - hidl_response->maxExtendedServiceSpecificInfoLen = 0; + hidl_response->maxExtendedServiceSpecificInfoLen = + legacy_response.max_sdea_service_specific_info_len; hidl_response->maxNdiInterfaces = legacy_response.max_ndi_interfaces; hidl_response->maxNdpSessions = legacy_response.max_ndp_sessions; hidl_response->maxAppInfoLen = legacy_response.max_app_info_len; @@ -1303,7 +1329,9 @@ bool convertLegacyNanMatchIndToHidl( hidl_ind->addr = hidl_array<uint8_t, 6>(legacy_ind.addr); hidl_ind->serviceSpecificInfo = std::vector<uint8_t>(legacy_ind.service_specific_info, legacy_ind.service_specific_info + legacy_ind.service_specific_info_len); - // TODO: b/35193423 add support for extended service specific info + hidl_ind->extendedServiceSpecificInfo = std::vector<uint8_t>( + legacy_ind.sdea_service_specific_info, + legacy_ind.sdea_service_specific_info + legacy_ind.sdea_service_specific_info_len); hidl_ind->matchFilter = std::vector<uint8_t>(legacy_ind.sdf_match_filter, legacy_ind.sdf_match_filter + legacy_ind.sdf_match_filter_len); hidl_ind->matchOccuredInBeaconFlag = legacy_ind.match_occured_flag == 1; @@ -1333,6 +1361,9 @@ bool convertLegacyNanFollowupIndToHidl( hidl_ind->receivedInFaw = legacy_ind.dw_or_faw == 1; hidl_ind->serviceSpecificInfo = std::vector<uint8_t>(legacy_ind.service_specific_info, legacy_ind.service_specific_info + legacy_ind.service_specific_info_len); + hidl_ind->extendedServiceSpecificInfo = std::vector<uint8_t>( + legacy_ind.sdea_service_specific_info, + legacy_ind.sdea_service_specific_info + legacy_ind.sdea_service_specific_info_len); return true; } |