18e745fdaSopenharmony_ci/*
28e745fdaSopenharmony_ci * Copyright (C) 2023 Huawei Device Co., Ltd.
38e745fdaSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
48e745fdaSopenharmony_ci * you may not use this file except in compliance with the License.
58e745fdaSopenharmony_ci * You may obtain a copy of the License at
68e745fdaSopenharmony_ci *
78e745fdaSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
88e745fdaSopenharmony_ci *
98e745fdaSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
108e745fdaSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
118e745fdaSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
128e745fdaSopenharmony_ci * See the License for the specific language governing permissions and
138e745fdaSopenharmony_ci * limitations under the License.
148e745fdaSopenharmony_ci */
158e745fdaSopenharmony_ci
168e745fdaSopenharmony_ci#ifndef MDNS_CLIENT_H
178e745fdaSopenharmony_ci#define MDNS_CLIENT_H
188e745fdaSopenharmony_ci
198e745fdaSopenharmony_ci#include <map>
208e745fdaSopenharmony_ci#include <string>
218e745fdaSopenharmony_ci
228e745fdaSopenharmony_ci#include "parcel.h"
238e745fdaSopenharmony_ci#include "singleton.h"
248e745fdaSopenharmony_ci#include "system_ability_load_callback_stub.h"
258e745fdaSopenharmony_ci
268e745fdaSopenharmony_ci#include "i_mdns_event.h"
278e745fdaSopenharmony_ci#include "i_mdns_service.h"
288e745fdaSopenharmony_ci#include "mdns_service_info.h"
298e745fdaSopenharmony_ci
308e745fdaSopenharmony_cinamespace OHOS {
318e745fdaSopenharmony_cinamespace NetManagerStandard {
328e745fdaSopenharmony_ciclass OnDemandLoadCallback : public SystemAbilityLoadCallbackStub {
338e745fdaSopenharmony_cipublic:
348e745fdaSopenharmony_ci    void OnLoadSystemAbilitySuccess(int32_t systemAbilityId, const sptr<IRemoteObject> &remoteObject) override;
358e745fdaSopenharmony_ci    void OnLoadSystemAbilityFail(int32_t systemAbilityId) override;
368e745fdaSopenharmony_ci    const sptr<IRemoteObject> &GetRemoteObject() const;
378e745fdaSopenharmony_ci
388e745fdaSopenharmony_ciprivate:
398e745fdaSopenharmony_ci    sptr<IRemoteObject> remoteObject_ = nullptr;
408e745fdaSopenharmony_ci};
418e745fdaSopenharmony_ci
428e745fdaSopenharmony_ciclass MDnsClient {
438e745fdaSopenharmony_ci    DECLARE_DELAYED_SINGLETON(MDnsClient);
448e745fdaSopenharmony_ci
458e745fdaSopenharmony_cipublic:
468e745fdaSopenharmony_ci/**
478e745fdaSopenharmony_ci     * Register mDNS service instance
488e745fdaSopenharmony_ci     *
498e745fdaSopenharmony_ci     * @param serviceInfo.name Service instance name
508e745fdaSopenharmony_ci     * @param serviceInfo.type Service instance type
518e745fdaSopenharmony_ci     * @param serviceInfo.port Service instance port
528e745fdaSopenharmony_ci     * @param cb callback object
538e745fdaSopenharmony_ci     * @return Return NETMANAGER_EXT_SUCCESS if process normal, others is error
548e745fdaSopenharmony_ci     * @permission ohos.permission.CONNECTIVITY_INTERNAL
558e745fdaSopenharmony_ci     * @systemapi Hide this for inner system use.
568e745fdaSopenharmony_ci     */
578e745fdaSopenharmony_ci    int32_t RegisterService(const MDnsServiceInfo &serviceInfo, const sptr<IRegistrationCallback> &cb);
588e745fdaSopenharmony_ci
598e745fdaSopenharmony_ci    /**
608e745fdaSopenharmony_ci     * UnRegister mDNS service instance
618e745fdaSopenharmony_ci     *
628e745fdaSopenharmony_ci     * @param cb callback object used in RegisterService
638e745fdaSopenharmony_ci     * @return Return NETMANAGER_EXT_SUCCESS if process normal, others is error
648e745fdaSopenharmony_ci     * @permission ohos.permission.CONNECTIVITY_INTERNAL
658e745fdaSopenharmony_ci     * @systemapi Hide this for inner system use.
668e745fdaSopenharmony_ci     */
678e745fdaSopenharmony_ci    int32_t UnRegisterService(const sptr<IRegistrationCallback> &cb);
688e745fdaSopenharmony_ci
698e745fdaSopenharmony_ci    /**
708e745fdaSopenharmony_ci     * Browse mDNS service instance by service type
718e745fdaSopenharmony_ci     *
728e745fdaSopenharmony_ci     * @param serviceType Service instance type
738e745fdaSopenharmony_ci     * @param cb callback object
748e745fdaSopenharmony_ci     * @return Return NETMANAGER_EXT_SUCCESS if process normal, others is error
758e745fdaSopenharmony_ci     * @permission ohos.permission.CONNECTIVITY_INTERNAL
768e745fdaSopenharmony_ci     * @systemapi Hide this for inner system use.
778e745fdaSopenharmony_ci     */
788e745fdaSopenharmony_ci    int32_t StartDiscoverService(const std::string &serviceType, const sptr<IDiscoveryCallback> &cb);
798e745fdaSopenharmony_ci
808e745fdaSopenharmony_ci    /**
818e745fdaSopenharmony_ci     * Stop browse mDNS service instance by service type
828e745fdaSopenharmony_ci     *
838e745fdaSopenharmony_ci     * @param cb callback object used in StartDiscoverService
848e745fdaSopenharmony_ci     * @return Return NETMANAGER_EXT_SUCCESS if process normal, others is error
858e745fdaSopenharmony_ci     * @permission ohos.permission.CONNECTIVITY_INTERNAL
868e745fdaSopenharmony_ci     * @systemapi Hide this for inner system use.
878e745fdaSopenharmony_ci     */
888e745fdaSopenharmony_ci    int32_t StopDiscoverService(const sptr<IDiscoveryCallback> &cb);
898e745fdaSopenharmony_ci
908e745fdaSopenharmony_ci    /**
918e745fdaSopenharmony_ci     * Resolve browse mDNS service instance by service type and name
928e745fdaSopenharmony_ci     *
938e745fdaSopenharmony_ci     * @param serviceInfo.name Service instance name
948e745fdaSopenharmony_ci     * @param serviceInfo.type Service instance type
958e745fdaSopenharmony_ci     * @param serviceInfo.port Service instance port
968e745fdaSopenharmony_ci     * @param cb callback object
978e745fdaSopenharmony_ci     * @return Return NETMANAGER_EXT_SUCCESS if process normal, others is error
988e745fdaSopenharmony_ci     * @permission ohos.permission.CONNECTIVITY_INTERNAL
998e745fdaSopenharmony_ci     * @systemapi Hide this for inner system use.
1008e745fdaSopenharmony_ci     */
1018e745fdaSopenharmony_ci    int32_t ResolveService(const MDnsServiceInfo &serviceInfo, const sptr<IResolveCallback> &cb);
1028e745fdaSopenharmony_ci
1038e745fdaSopenharmony_ci    void RestartResume();
1048e745fdaSopenharmony_ci    sptr<IMDnsService> GetProxy();
1058e745fdaSopenharmony_ci
1068e745fdaSopenharmony_ciprivate:
1078e745fdaSopenharmony_ci    class MDnsDeathRecipient : public IRemoteObject::DeathRecipient {
1088e745fdaSopenharmony_ci    public:
1098e745fdaSopenharmony_ci        explicit MDnsDeathRecipient(MDnsClient &client) : client_(client) {}
1108e745fdaSopenharmony_ci        ~MDnsDeathRecipient() = default;
1118e745fdaSopenharmony_ci        void OnRemoteDied(const wptr<IRemoteObject> &remote) override
1128e745fdaSopenharmony_ci        {
1138e745fdaSopenharmony_ci            client_.OnRemoteDied(remote);
1148e745fdaSopenharmony_ci        }
1158e745fdaSopenharmony_ci
1168e745fdaSopenharmony_ci    private:
1178e745fdaSopenharmony_ci        MDnsClient &client_;
1188e745fdaSopenharmony_ci    };
1198e745fdaSopenharmony_ci
1208e745fdaSopenharmony_ci    sptr<IRemoteObject> LoadSaOnDemand();
1218e745fdaSopenharmony_ci    void OnRemoteDied(const wptr<IRemoteObject> &remote);
1228e745fdaSopenharmony_ci
1238e745fdaSopenharmony_ci    std::mutex mutex_;
1248e745fdaSopenharmony_ci    sptr<IMDnsService> mdnsService_ = nullptr;
1258e745fdaSopenharmony_ci    sptr<IRemoteObject::DeathRecipient> deathRecipient_ = nullptr;
1268e745fdaSopenharmony_ci    sptr<OnDemandLoadCallback> loadCallback_ = nullptr;
1278e745fdaSopenharmony_ci};
1288e745fdaSopenharmony_ci} // namespace NetManagerStandard
1298e745fdaSopenharmony_ci} // namespace OHOS
1308e745fdaSopenharmony_ci#endif // MDNS_CLIENT_H
131