12d4d9a4dSopenharmony_ci/*
22d4d9a4dSopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd.
32d4d9a4dSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
42d4d9a4dSopenharmony_ci * you may not use this file except in compliance with the License.
52d4d9a4dSopenharmony_ci * You may obtain a copy of the License at
62d4d9a4dSopenharmony_ci *
72d4d9a4dSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
82d4d9a4dSopenharmony_ci *
92d4d9a4dSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
102d4d9a4dSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
112d4d9a4dSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
122d4d9a4dSopenharmony_ci * See the License for the specific language governing permissions and
132d4d9a4dSopenharmony_ci * limitations under the License.
142d4d9a4dSopenharmony_ci */
152d4d9a4dSopenharmony_ci
162d4d9a4dSopenharmony_ci#include "dinputonsessionopend_fuzzer.h"
172d4d9a4dSopenharmony_ci
182d4d9a4dSopenharmony_ci#include <cstddef>
192d4d9a4dSopenharmony_ci#include <cstdint>
202d4d9a4dSopenharmony_ci#include <functional>
212d4d9a4dSopenharmony_ci#include <iostream>
222d4d9a4dSopenharmony_ci#include <thread>
232d4d9a4dSopenharmony_ci#include <unistd.h>
242d4d9a4dSopenharmony_ci#include <refbase.h>
252d4d9a4dSopenharmony_ci
262d4d9a4dSopenharmony_ci#include "socket.h"
272d4d9a4dSopenharmony_ci
282d4d9a4dSopenharmony_ci#include "distributed_input_transport_base.h"
292d4d9a4dSopenharmony_ci
302d4d9a4dSopenharmony_cinamespace OHOS {
312d4d9a4dSopenharmony_cinamespace DistributedHardware {
322d4d9a4dSopenharmony_cinamespace {
332d4d9a4dSopenharmony_ci    const std::string PEER_SESSION_NAME = "ohos.dhardware.dinput.session8647073e02e7a78f09473aa122";
342d4d9a4dSopenharmony_ci    const std::string REMOTE_DEV_ID = "f6d4c0864707aefte7a78f09473aa122ff57fc81c00981fcf5be989e7d112591";
352d4d9a4dSopenharmony_ci    const std::string DINPUT_PKG_NAME_TEST = "ohos.dhardware.dinput";
362d4d9a4dSopenharmony_ci}
372d4d9a4dSopenharmony_civoid OnSessionOpenedFuzzTest(const uint8_t *data, size_t size)
382d4d9a4dSopenharmony_ci{
392d4d9a4dSopenharmony_ci    if ((data == nullptr) || (size < sizeof(int32_t))) {
402d4d9a4dSopenharmony_ci        return;
412d4d9a4dSopenharmony_ci    }
422d4d9a4dSopenharmony_ci    int32_t sessionId = *(reinterpret_cast<const int32_t*>(data));
432d4d9a4dSopenharmony_ci    PeerSocketInfo peerSocketInfo = {
442d4d9a4dSopenharmony_ci        .name = const_cast<char*>(PEER_SESSION_NAME.c_str()),
452d4d9a4dSopenharmony_ci        .networkId = const_cast<char*>(REMOTE_DEV_ID.c_str()),
462d4d9a4dSopenharmony_ci        .pkgName = const_cast<char*>(DINPUT_PKG_NAME_TEST.c_str()),
472d4d9a4dSopenharmony_ci        .dataType = DATA_TYPE_BYTES
482d4d9a4dSopenharmony_ci    };
492d4d9a4dSopenharmony_ci    DistributedInput::DistributedInputTransportBase::GetInstance().OnSessionOpened(sessionId, peerSocketInfo);
502d4d9a4dSopenharmony_ci}
512d4d9a4dSopenharmony_ci} // namespace DistributedHardware
522d4d9a4dSopenharmony_ci} // namespace OHOS
532d4d9a4dSopenharmony_ci
542d4d9a4dSopenharmony_ci/* Fuzzer entry point */
552d4d9a4dSopenharmony_ciextern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
562d4d9a4dSopenharmony_ci{
572d4d9a4dSopenharmony_ci    /* Run your code on data */
582d4d9a4dSopenharmony_ci    OHOS::DistributedHardware::OnSessionOpenedFuzzTest(data, size);
592d4d9a4dSopenharmony_ci    return 0;
602d4d9a4dSopenharmony_ci}