wifi_nan_hal_mock.cpp revision 80fcd6da60c59a395c4154feae75d1015bc9691e
1/* 2 * Copyright 2016, The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17#include <stdint.h> 18#include "JniConstants.h" 19#include <ScopedUtfChars.h> 20#include <ScopedBytes.h> 21#include <utils/misc.h> 22#include <android_runtime/AndroidRuntime.h> 23#include <utils/Log.h> 24#include <utils/String16.h> 25#include <ctype.h> 26#include <sys/socket.h> 27#include <linux/if.h> 28#include "wifi.h" 29#include "wifi_hal.h" 30#include "jni_helper.h" 31#include "wifi_hal_mock.h" 32#include <sstream> 33#include <rapidjson/document.h> 34#include <rapidjson/stringbuffer.h> 35#include <rapidjson/writer.h> 36 37namespace android { 38 39extern jobject mock_mObj; /* saved NanHalMock object */ 40extern JavaVM* mock_mVM; /* saved JVM pointer */ 41 42/* Variable and function declared and defined in: 43 * com_android_servier_wifi_nan_WifiNanNative.cpp 44 */ 45extern wifi_hal_fn hal_fn; 46extern "C" jint Java_com_android_server_wifi_nan_WifiNanNative_registerNanNatives( 47 JNIEnv* env, jclass clazz); 48 49static NanCallbackHandler mCallbackHandlers; 50 51wifi_error wifi_nan_enable_request_mock(transaction_id id, 52 wifi_interface_handle iface, 53 NanEnableRequest* msg) { 54 JNIHelper helper(mock_mVM); 55 56 ALOGD("wifi_nan_enable_request_mock"); 57 HalMockJsonWriter jsonW; 58 jsonW.put_int("master_pref", msg->master_pref); 59 jsonW.put_int("cluster_low", msg->cluster_low); 60 jsonW.put_int("cluster_high", msg->cluster_high); 61 jsonW.put_int("config_support_5g", msg->config_support_5g); 62 jsonW.put_int("support_5g_val", msg->support_5g_val); 63 jsonW.put_int("config_sid_beacon", msg->config_sid_beacon); 64 jsonW.put_int("sid_beacon_val", msg->sid_beacon_val); 65 jsonW.put_int("config_2dot4g_rssi_close", msg->config_2dot4g_rssi_close); 66 jsonW.put_int("rssi_close_2dot4g_val", msg->rssi_close_2dot4g_val); 67 jsonW.put_int("config_2dot4g_rssi_middle", msg->config_2dot4g_rssi_middle); 68 jsonW.put_int("rssi_middle_2dot4g_val", msg->rssi_middle_2dot4g_val); 69 jsonW.put_int("config_2dot4g_rssi_proximity", 70 msg->config_2dot4g_rssi_proximity); 71 jsonW.put_int("rssi_proximity_2dot4g_val", msg->rssi_proximity_2dot4g_val); 72 jsonW.put_int("config_hop_count_limit", msg->config_hop_count_limit); 73 jsonW.put_int("hop_count_limit_val", msg->hop_count_limit_val); 74 jsonW.put_int("config_2dot4g_support", msg->config_2dot4g_support); 75 jsonW.put_int("support_2dot4g_val", msg->support_2dot4g_val); 76 jsonW.put_int("config_2dot4g_beacons", msg->config_2dot4g_beacons); 77 jsonW.put_int("beacon_2dot4g_val", msg->beacon_2dot4g_val); 78 jsonW.put_int("config_2dot4g_sdf", msg->config_2dot4g_sdf); 79 jsonW.put_int("sdf_2dot4g_val", msg->sdf_2dot4g_val); 80 jsonW.put_int("config_5g_beacons", msg->config_5g_beacons); 81 jsonW.put_int("beacon_5g_val", msg->beacon_5g_val); 82 jsonW.put_int("config_5g_sdf", msg->config_5g_sdf); 83 jsonW.put_int("sdf_5g_val", msg->sdf_5g_val); 84 jsonW.put_int("config_5g_rssi_close", msg->config_5g_rssi_close); 85 jsonW.put_int("rssi_close_5g_val", msg->rssi_close_5g_val); 86 jsonW.put_int("config_5g_rssi_middle", msg->config_5g_rssi_middle); 87 jsonW.put_int("rssi_middle_5g_val", msg->rssi_middle_5g_val); 88 jsonW.put_int("config_5g_rssi_close_proximity", 89 msg->config_5g_rssi_close_proximity); 90 jsonW.put_int("rssi_close_proximity_5g_val", 91 msg->rssi_close_proximity_5g_val); 92 jsonW.put_int("config_rssi_window_size", msg->config_rssi_window_size); 93 jsonW.put_int("rssi_window_size_val", msg->rssi_window_size_val); 94 jsonW.put_int("config_oui", msg->config_oui); 95 jsonW.put_int("oui_val", msg->oui_val); 96 jsonW.put_int("config_intf_addr", msg->config_intf_addr); 97 jsonW.put_byte_array("intf_addr_val", msg->intf_addr_val, 6); 98 jsonW.put_int("config_cluster_attribute_val", 99 msg->config_cluster_attribute_val); 100 jsonW.put_int("config_scan_params", msg->config_scan_params); 101 jsonW.put_int("scan_params_val.dwell_time.0", 102 msg->scan_params_val.dwell_time[NAN_CHANNEL_24G_BAND]); 103 jsonW.put_int("scan_params_val.dwell_time.1", 104 msg->scan_params_val.dwell_time[NAN_CHANNEL_5G_BAND_LOW]); 105 jsonW.put_int("scan_params_val.dwell_time.2", 106 msg->scan_params_val.dwell_time[NAN_CHANNEL_5G_BAND_HIGH]); 107 jsonW.put_int("scan_params_val.scan_period.0", 108 msg->scan_params_val.scan_period[NAN_CHANNEL_24G_BAND]); 109 jsonW.put_int("scan_params_val.scan_period.0", 110 msg->scan_params_val.scan_period[NAN_CHANNEL_5G_BAND_LOW]); 111 jsonW.put_int("scan_params_val.scan_period.0", 112 msg->scan_params_val.scan_period[NAN_CHANNEL_5G_BAND_HIGH]); 113 jsonW.put_int("config_random_factor_force", msg->config_random_factor_force); 114 jsonW.put_int("random_factor_force_val", msg->random_factor_force_val); 115 jsonW.put_int("config_hop_count_force", msg->config_hop_count_force); 116 jsonW.put_int("hop_count_force_val", msg->hop_count_force_val); 117 std::string str = jsonW.to_string(); 118 119 JNIObject < jstring > json_write_string = helper.newStringUTF(str.c_str()); 120 121 helper.callMethod(mock_mObj, "enableHalMockNative", "(SLjava/lang/String;)V", 122 (short) id, json_write_string.get()); 123 124 return WIFI_SUCCESS; 125} 126 127wifi_error wifi_nan_disable_request_mock(transaction_id id, 128 wifi_interface_handle iface) { 129 JNIHelper helper(mock_mVM); 130 131 ALOGD("wifi_nan_disable_request_mock"); 132 helper.callMethod(mock_mObj, "disableHalMockNative", "(S)V", (short) id); 133 134 return WIFI_SUCCESS; 135} 136 137wifi_error wifi_nan_publish_request_mock(transaction_id id, 138 wifi_interface_handle iface, 139 NanPublishRequest* msg) { 140 JNIHelper helper(mock_mVM); 141 142 ALOGD("wifi_nan_publish_request_mock"); 143 HalMockJsonWriter jsonW; 144 jsonW.put_int("publish_id", msg->publish_id); 145 jsonW.put_int("ttl", msg->ttl); 146 jsonW.put_int("publish_type", msg->publish_type); 147 jsonW.put_int("tx_type", msg->tx_type); 148 jsonW.put_int("publish_count", msg->publish_count); 149 jsonW.put_int("service_name_len", msg->service_name_len); 150 jsonW.put_byte_array("service_name", msg->service_name, 151 msg->service_name_len); 152 jsonW.put_int("publish_match_indicator", msg->publish_match_indicator); 153 jsonW.put_int("service_specific_info_len", msg->service_specific_info_len); 154 jsonW.put_byte_array("service_specific_info", msg->service_specific_info, 155 msg->service_specific_info_len); 156 jsonW.put_int("rx_match_filter_len", msg->rx_match_filter_len); 157 jsonW.put_byte_array("rx_match_filter", msg->rx_match_filter, 158 msg->rx_match_filter_len); 159 jsonW.put_int("tx_match_filter_len", msg->tx_match_filter_len); 160 jsonW.put_byte_array("tx_match_filter", msg->tx_match_filter, 161 msg->tx_match_filter_len); 162 jsonW.put_int("rssi_threshold_flag", msg->rssi_threshold_flag); 163 jsonW.put_int("connmap", msg->connmap); 164 std::string str = jsonW.to_string(); 165 166 JNIObject < jstring > json_write_string = helper.newStringUTF(str.c_str()); 167 168 helper.callMethod(mock_mObj, "publishHalMockNative", "(SLjava/lang/String;)V", 169 (short) id, json_write_string.get()); 170 return WIFI_SUCCESS; 171} 172 173wifi_error wifi_nan_publish_cancel_request_mock(transaction_id id, 174 wifi_interface_handle iface, 175 NanPublishCancelRequest* msg) { 176 JNIHelper helper(mock_mVM); 177 178 ALOGD("wifi_nan_publish_cancel_request_mock"); 179 HalMockJsonWriter jsonW; 180 jsonW.put_int("publish_id", msg->publish_id); 181 std::string str = jsonW.to_string(); 182 183 JNIObject < jstring > json_write_string = helper.newStringUTF(str.c_str()); 184 185 helper.callMethod(mock_mObj, "publishCancelHalMockNative", 186 "(SLjava/lang/String;)V", (short) id, 187 json_write_string.get()); 188 return WIFI_SUCCESS; 189} 190 191wifi_error wifi_nan_subscribe_request_mock(transaction_id id, 192 wifi_interface_handle iface, 193 NanSubscribeRequest* msg) { 194 JNIHelper helper(mock_mVM); 195 196 ALOGD("wifi_nan_subscribe_request_mock"); 197 HalMockJsonWriter jsonW; 198 jsonW.put_int("subscribe_id", msg->subscribe_id); 199 jsonW.put_int("ttl", msg->ttl); 200 jsonW.put_int("period", msg->period); 201 jsonW.put_int("subscribe_type", msg->subscribe_type); 202 jsonW.put_int("serviceResponseFilter", msg->serviceResponseFilter); 203 jsonW.put_int("serviceResponseInclude", msg->serviceResponseInclude); 204 jsonW.put_int("useServiceResponseFilter", msg->useServiceResponseFilter); 205 jsonW.put_int("ssiRequiredForMatchIndication", 206 msg->ssiRequiredForMatchIndication); 207 jsonW.put_int("subscribe_match_indicator", msg->subscribe_match_indicator); 208 jsonW.put_int("subscribe_count", msg->subscribe_count); 209 jsonW.put_int("service_name_len", msg->service_name_len); 210 jsonW.put_byte_array("service_name", msg->service_name, 211 msg->service_name_len); 212 jsonW.put_int("service_specific_info_len", msg->service_name_len); 213 jsonW.put_byte_array("service_specific_info", msg->service_specific_info, 214 msg->service_specific_info_len); 215 jsonW.put_int("rx_match_filter_len", msg->rx_match_filter_len); 216 jsonW.put_byte_array("rx_match_filter", msg->rx_match_filter, 217 msg->rx_match_filter_len); 218 jsonW.put_int("tx_match_filter_len", msg->tx_match_filter_len); 219 jsonW.put_byte_array("tx_match_filter", msg->tx_match_filter, 220 msg->tx_match_filter_len); 221 jsonW.put_int("rssi_threshold_flag", msg->rssi_threshold_flag); 222 jsonW.put_int("connmap", msg->connmap); 223 jsonW.put_int("num_intf_addr_present", msg->num_intf_addr_present); 224 // TODO: jsonW.put_byte_array("intf_addr", msg->intf_addr, NAN_MAX_SUBSCRIBE_MAX_ADDRESS * NAN_MAC_ADDR_LEN); 225 std::string str = jsonW.to_string(); 226 227 JNIObject < jstring > json_write_string = helper.newStringUTF(str.c_str()); 228 229 helper.callMethod(mock_mObj, "subscribeHalMockNative", 230 "(SLjava/lang/String;)V", (short) id, 231 json_write_string.get()); 232 return WIFI_SUCCESS; 233} 234 235wifi_error wifi_nan_subscribe_cancel_request_mock( 236 transaction_id id, wifi_interface_handle iface, 237 NanSubscribeCancelRequest* msg) { 238 JNIHelper helper(mock_mVM); 239 240 ALOGD("wifi_nan_subscribe_cancel_request_mock"); 241 HalMockJsonWriter jsonW; 242 jsonW.put_int("subscribe_id", msg->subscribe_id); 243 std::string str = jsonW.to_string(); 244 245 JNIObject < jstring > json_write_string = helper.newStringUTF(str.c_str()); 246 247 helper.callMethod(mock_mObj, "subscribeCancelHalMockNative", 248 "(SLjava/lang/String;)V", (short) id, 249 json_write_string.get()); 250 return WIFI_SUCCESS; 251} 252 253wifi_error wifi_nan_transmit_followup_request_mock( 254 transaction_id id, wifi_interface_handle iface, 255 NanTransmitFollowupRequest* msg) { 256 JNIHelper helper(mock_mVM); 257 258 ALOGD("wifi_nan_transmit_followup_request_mock"); 259 HalMockJsonWriter jsonW; 260 jsonW.put_int("publish_subscribe_id", msg->publish_subscribe_id); 261 jsonW.put_int("requestor_instance_id", msg->requestor_instance_id); 262 jsonW.put_byte_array("addr", msg->addr, 6); 263 jsonW.put_int("priority", msg->priority); 264 jsonW.put_int("dw_or_faw", msg->dw_or_faw); 265 jsonW.put_int("service_specific_info_len", msg->service_specific_info_len); 266 jsonW.put_byte_array("service_specific_info", msg->service_specific_info, 267 msg->service_specific_info_len); 268 269 std::string str = jsonW.to_string(); 270 271 JNIObject < jstring > json_write_string = helper.newStringUTF(str.c_str()); 272 273 helper.callMethod(mock_mObj, "transmitFollowupHalMockNative", 274 "(SLjava/lang/String;)V", (short) id, 275 json_write_string.get()); 276 return WIFI_SUCCESS; 277} 278 279wifi_error wifi_nan_stats_request_mock(transaction_id id, 280 wifi_interface_handle iface, 281 NanStatsRequest* msg) { 282 ALOGD("wifi_nan_stats_request_mock"); 283 return WIFI_ERROR_UNINITIALIZED; 284} 285 286wifi_error wifi_nan_config_request_mock(transaction_id id, 287 wifi_interface_handle iface, 288 NanConfigRequest* msg) { 289 ALOGD("wifi_nan_config_request_mock"); 290 return WIFI_ERROR_UNINITIALIZED; 291} 292 293wifi_error wifi_nan_tca_request_mock(transaction_id id, 294 wifi_interface_handle iface, 295 NanTCARequest* msg) { 296 ALOGD("wifi_nan_tca_request_mock"); 297 return WIFI_ERROR_UNINITIALIZED; 298} 299 300wifi_error wifi_nan_beacon_sdf_payload_request_mock( 301 transaction_id id, wifi_interface_handle iface, 302 NanBeaconSdfPayloadRequest* msg) { 303 ALOGD("wifi_nan_beacon_sdf_payload_request_mock"); 304 return WIFI_ERROR_UNINITIALIZED; 305} 306 307wifi_error wifi_nan_register_handler_mock(wifi_interface_handle iface, 308 NanCallbackHandler handlers) { 309 ALOGD("wifi_nan_register_handler_mock"); 310 mCallbackHandlers = handlers; 311 return WIFI_SUCCESS; 312} 313 314wifi_error wifi_nan_get_version_mock(wifi_handle handle, NanVersion* version) { 315 ALOGD("wifi_nan_get_version_mock"); 316 return WIFI_ERROR_UNINITIALIZED; 317} 318 319wifi_error wifi_nan_get_capabilities_mock(transaction_id id, 320 wifi_interface_handle iface) { 321 JNIHelper helper(mock_mVM); 322 323 ALOGD("wifi_nan_get_capabilities_mock"); 324 325 helper.callMethod(mock_mObj, "getCapabilitiesHalMockNative", "(S)V", 326 (short) id); 327 return WIFI_SUCCESS; 328} 329 330// Callbacks 331 332extern "C" void Java_com_android_server_wifi_nan_WifiNanHalMock_callNotifyResponse( 333 JNIEnv* env, jclass clazz, jshort transaction_id, 334 jstring json_args_jstring) { 335 ScopedUtfChars chars(env, json_args_jstring); 336 HalMockJsonReader jsonR(chars.c_str()); 337 bool error = false; 338 339 ALOGD("Java_com_android_server_wifi_nan_WifiNanHalMock_callNotifyResponse: '%s'", 340 chars.c_str()); 341 342 NanResponseMsg msg; 343 msg.status = (NanStatusType) jsonR.get_int("status", &error); 344 msg.value = jsonR.get_int("value", &error); 345 msg.response_type = (NanResponseType) jsonR.get_int("response_type", &error); 346 if (msg.response_type == NAN_RESPONSE_PUBLISH) { 347 msg.body.publish_response.publish_id = jsonR.get_int( 348 "body.publish_response.publish_id", &error); 349 } else if (msg.response_type == NAN_RESPONSE_SUBSCRIBE) { 350 msg.body.subscribe_response.subscribe_id = jsonR.get_int( 351 "body.subscribe_response.subscribe_id", &error); 352 } else if (msg.response_type == NAN_GET_CAPABILITIES) { 353 msg.body.nan_capabilities.max_concurrent_nan_clusters = jsonR.get_int( 354 "body.nan_capabilities.max_concurrent_nan_clusters", &error); 355 msg.body.nan_capabilities.max_publishes = jsonR.get_int( 356 "body.nan_capabilities.max_publishes", &error); 357 msg.body.nan_capabilities.max_subscribes = jsonR.get_int( 358 "body.nan_capabilities.max_subscribes", &error); 359 msg.body.nan_capabilities.max_service_name_len = jsonR.get_int( 360 "body.nan_capabilities.max_service_name_len", &error); 361 msg.body.nan_capabilities.max_match_filter_len = jsonR.get_int( 362 "body.nan_capabilities.max_match_filter_len", &error); 363 msg.body.nan_capabilities.max_total_match_filter_len = jsonR.get_int( 364 "body.nan_capabilities.max_total_match_filter_len", &error); 365 msg.body.nan_capabilities.max_service_specific_info_len = jsonR.get_int( 366 "body.nan_capabilities.max_service_specific_info_len", &error); 367 msg.body.nan_capabilities.max_vsa_data_len = jsonR.get_int( 368 "body.nan_capabilities.max_vsa_data_len", &error); 369 msg.body.nan_capabilities.max_mesh_data_len = jsonR.get_int( 370 "body.nan_capabilities.max_mesh_data_len", &error); 371 msg.body.nan_capabilities.max_ndi_interfaces = jsonR.get_int( 372 "body.nan_capabilities.max_ndi_interfaces", &error); 373 msg.body.nan_capabilities.max_ndp_sessions = jsonR.get_int( 374 "body.nan_capabilities.max_ndp_sessions", &error); 375 msg.body.nan_capabilities.max_app_info_len = jsonR.get_int( 376 "body.nan_capabilities.max_app_info_len", &error); 377 } 378 379 if (error) { 380 ALOGE("Java_com_android_server_wifi_nan_WifiNanHalMock_callNotifyResponse: " 381 "error parsing args"); 382 return; 383 } 384 385 mCallbackHandlers.NotifyResponse(transaction_id, &msg); 386} 387 388extern "C" void Java_com_android_server_wifi_nan_WifiNanHalMock_callPublishTerminated( 389 JNIEnv* env, jclass clazz, jstring json_args_jstring) { 390 ScopedUtfChars chars(env, json_args_jstring); 391 HalMockJsonReader jsonR(chars.c_str()); 392 bool error = false; 393 394 ALOGD( 395 "Java_com_android_server_wifi_nan_WifiNanHalMock_callPublishTerminated: '%s'", 396 chars.c_str()); 397 398 NanPublishTerminatedInd msg; 399 msg.publish_id = jsonR.get_int("publish_id", &error); 400 msg.reason = (NanStatusType) jsonR.get_int("reason", &error); 401 402 if (error) { 403 ALOGE("Java_com_android_server_wifi_nan_WifiNanHalMock_callPublishTerminated: " 404 "error parsing args"); 405 return; 406 } 407 408 mCallbackHandlers.EventPublishTerminated(&msg); 409} 410 411extern "C" void Java_com_android_server_wifi_nan_WifiNanHalMock_callSubscribeTerminated( 412 JNIEnv* env, jclass clazz, jstring json_args_jstring) { 413 ScopedUtfChars chars(env, json_args_jstring); 414 HalMockJsonReader jsonR(chars.c_str()); 415 bool error = false; 416 417 ALOGD( 418 "Java_com_android_server_wifi_nan_WifiNanHalMock_callSubscribeTerminated: '%s'", 419 chars.c_str()); 420 421 NanSubscribeTerminatedInd msg; 422 msg.subscribe_id = jsonR.get_int("subscribe_id", &error); 423 msg.reason = (NanStatusType) jsonR.get_int("reason", &error); 424 425 if (error) { 426 ALOGE("Java_com_android_server_wifi_nan_WifiNanHalMock_callSubscribeTerminated:" 427 " error parsing args"); 428 return; 429 } 430 431 mCallbackHandlers.EventSubscribeTerminated(&msg); 432} 433 434extern "C" void Java_com_android_server_wifi_nan_WifiNanHalMock_callFollowup( 435 JNIEnv* env, jclass clazz, jstring json_args_jstring) { 436 ScopedUtfChars chars(env, json_args_jstring); 437 HalMockJsonReader jsonR(chars.c_str()); 438 bool error = false; 439 440 ALOGD("Java_com_android_server_wifi_nan_WifiNanHalMock_callFollowup: '%s'", 441 chars.c_str()); 442 443 NanFollowupInd msg; 444 msg.publish_subscribe_id = jsonR.get_int("publish_subscribe_id", &error); 445 msg.requestor_instance_id = jsonR.get_int("requestor_instance_id", &error); 446 jsonR.get_byte_array("addr", &error, msg.addr, NAN_MAC_ADDR_LEN); 447 msg.dw_or_faw = jsonR.get_int("dw_or_faw", &error); 448 msg.service_specific_info_len = jsonR.get_int("service_specific_info_len", 449 &error); 450 jsonR.get_byte_array("service_specific_info", &error, 451 msg.service_specific_info, 452 NAN_MAX_SERVICE_SPECIFIC_INFO_LEN); 453 454 if (error) { 455 ALOGE("Java_com_android_server_wifi_nan_WifiNanHalMock_callFollowup: " 456 "error parsing args"); 457 return; 458 } 459 460 mCallbackHandlers.EventFollowup(&msg); 461} 462 463extern "C" void Java_com_android_server_wifi_nan_WifiNanHalMock_callMatch( 464 JNIEnv* env, jclass clazz, jstring json_args_jstring) { 465 ScopedUtfChars chars(env, json_args_jstring); 466 HalMockJsonReader jsonR(chars.c_str()); 467 bool error = false; 468 469 ALOGD("Java_com_android_server_wifi_nan_WifiNanHalMock_callMatch: '%s'", 470 chars.c_str()); 471 472 NanMatchInd msg; 473 msg.publish_subscribe_id = jsonR.get_int("publish_subscribe_id", &error); 474 msg.requestor_instance_id = jsonR.get_int("requestor_instance_id", &error); 475 jsonR.get_byte_array("addr", &error, msg.addr, NAN_MAC_ADDR_LEN); 476 msg.service_specific_info_len = jsonR.get_int("service_specific_info_len", 477 &error); 478 jsonR.get_byte_array("service_specific_info", &error, 479 msg.service_specific_info, 480 NAN_MAX_SERVICE_SPECIFIC_INFO_LEN); 481 msg.sdf_match_filter_len = jsonR.get_int("sdf_match_filter_len", &error); 482 jsonR.get_byte_array("sdf_match_filter", &error, msg.sdf_match_filter, 483 NAN_MAX_MATCH_FILTER_LEN); 484 /* a few more fields here - but not used (yet/never?) */ 485 486 if (error) { 487 ALOGE("Java_com_android_server_wifi_nan_WifiNanHalMock_callMatch: " 488 "error parsing args"); 489 return; 490 } 491 492 mCallbackHandlers.EventMatch(&msg); 493} 494 495extern "C" void Java_com_android_server_wifi_nan_WifiNanHalMock_callDiscEngEvent( 496 JNIEnv* env, jclass clazz, jstring json_args_jstring) { 497 ScopedUtfChars chars(env, json_args_jstring); 498 HalMockJsonReader jsonR(chars.c_str()); 499 bool error = false; 500 501 ALOGD("Java_com_android_server_wifi_nan_WifiNanHalMock_callDiscEngEvent: '%s'", 502 chars.c_str()); 503 504 NanDiscEngEventInd msg; 505 msg.event_type = (NanDiscEngEventType) jsonR.get_int("event_type", &error); 506 if (msg.event_type == NAN_EVENT_ID_DISC_MAC_ADDR) { 507 jsonR.get_byte_array("data", &error, msg.data.mac_addr.addr, 508 NAN_MAC_ADDR_LEN); 509 } else { 510 jsonR.get_byte_array("data", &error, msg.data.cluster.addr, 511 NAN_MAC_ADDR_LEN); 512 } 513 514 if (error) { 515 ALOGE("Java_com_android_server_wifi_nan_WifiNanHalMock_callDiscEngEvent: " 516 "error parsing args"); 517 return; 518 } 519 520 mCallbackHandlers.EventDiscEngEvent(&msg); 521} 522 523extern "C" void Java_com_android_server_wifi_nan_WifiNanHalMock_callDisabled( 524 JNIEnv* env, jclass clazz, jstring json_args_jstring) { 525 ScopedUtfChars chars(env, json_args_jstring); 526 HalMockJsonReader jsonR(chars.c_str()); 527 bool error = false; 528 529 ALOGD("Java_com_android_server_wifi_nan_WifiNanHalMock_callDisabled: '%s'", 530 chars.c_str()); 531 532 NanDisabledInd msg; 533 msg.reason = (NanStatusType) jsonR.get_int("reason", &error); 534 535 if (error) { 536 ALOGE("Java_com_android_server_wifi_nan_WifiNanHalMock_callDisabled: " 537 "error parsing args"); 538 return; 539 } 540 541 mCallbackHandlers.EventDisabled(&msg); 542} 543 544// TODO: Not currently used: add as needed 545//void (*EventUnMatch) (NanUnmatchInd* event); 546//void (*EventTca) (NanTCAInd* event); 547//void (*EventBeaconSdfPayload) (NanBeaconSdfPayloadInd* event); 548 549int init_wifi_nan_hal_func_table_mock(wifi_hal_fn *fn) { 550 if (fn == NULL) { 551 return -1; 552 } 553 554 fn->wifi_nan_enable_request = wifi_nan_enable_request_mock; 555 fn->wifi_nan_disable_request = wifi_nan_disable_request_mock; 556 fn->wifi_nan_publish_request = wifi_nan_publish_request_mock; 557 fn->wifi_nan_publish_cancel_request = 558 wifi_nan_publish_cancel_request_mock; 559 fn->wifi_nan_subscribe_request = wifi_nan_subscribe_request_mock; 560 fn->wifi_nan_subscribe_cancel_request = 561 wifi_nan_subscribe_cancel_request_mock; 562 fn->wifi_nan_transmit_followup_request = 563 wifi_nan_transmit_followup_request_mock; 564 fn->wifi_nan_stats_request = wifi_nan_stats_request_mock; 565 fn->wifi_nan_config_request = wifi_nan_config_request_mock; 566 fn->wifi_nan_tca_request = wifi_nan_tca_request_mock; 567 fn->wifi_nan_beacon_sdf_payload_request = 568 wifi_nan_beacon_sdf_payload_request_mock; 569 fn->wifi_nan_register_handler = wifi_nan_register_handler_mock; 570 fn->wifi_nan_get_version = wifi_nan_get_version_mock; 571 fn->wifi_nan_get_capabilities = wifi_nan_get_capabilities_mock; 572 573 return 0; 574} 575 576extern "C" jint Java_com_android_server_wifi_nan_WifiNanHalMock_initNanHalMock( 577 JNIEnv* env, jclass clazz) { 578 Java_com_android_server_wifi_nan_WifiNanNative_registerNanNatives(env, clazz); 579 return init_wifi_nan_hal_func_table_mock(&hal_fn); 580} 581 582}// namespace android 583