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