1 /*
2 * Copyright (C) 2023 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include "mdns_service_stub.h"
17
18 #include "net_manager_ext_constants.h"
19 #include "netmgr_ext_log_wrapper.h"
20
21 namespace OHOS {
22 namespace NetManagerStandard {
MDnsServiceStub()23 MDnsServiceStub::MDnsServiceStub()
24 {
25 memberFuncMap_[static_cast<uint32_t>(MdnsServiceInterfaceCode::CMD_DISCOVER)] =
26 &MDnsServiceStub::OnStartDiscoverService;
27 memberFuncMap_[static_cast<uint32_t>(MdnsServiceInterfaceCode::CMD_STOP_DISCOVER)] =
28 &MDnsServiceStub::OnStopDiscoverService;
29 memberFuncMap_[static_cast<uint32_t>(MdnsServiceInterfaceCode::CMD_REGISTER)] = &MDnsServiceStub::OnRegisterService;
30 memberFuncMap_[static_cast<uint32_t>(MdnsServiceInterfaceCode::CMD_STOP_REGISTER)] =
31 &MDnsServiceStub::OnUnRegisterService;
32 memberFuncMap_[static_cast<uint32_t>(MdnsServiceInterfaceCode::CMD_RESOLVE)] = &MDnsServiceStub::OnResolveService;
33 }
34
OnRemoteRequest(uint32_t code,MessageParcel & data,MessageParcel & reply,MessageOption & option)35 int32_t MDnsServiceStub::OnRemoteRequest(uint32_t code, MessageParcel &data, MessageParcel &reply,
36 MessageOption &option)
37 {
38 NETMGR_EXT_LOG_D("stub call start, code = [%{public}d]", code);
39
40 if (GetDescriptor() != data.ReadInterfaceToken()) {
41 NETMGR_EXT_LOG_E("descriptor checked fail");
42 return NETMANAGER_EXT_ERR_DESCRIPTOR_MISMATCH;
43 }
44
45 auto itFunc = memberFuncMap_.find(code);
46 if (itFunc != memberFuncMap_.end()) {
47 auto requestFunc = itFunc->second;
48 if (requestFunc != nullptr) {
49 return (this->*requestFunc)(data, reply);
50 }
51 }
52
53 NETMGR_EXT_LOG_D("stub default case, need check");
54 return IPCObjectStub::OnRemoteRequest(code, data, reply, option);
55 }
56
OnRegisterService(MessageParcel & data,MessageParcel & reply)57 int32_t MDnsServiceStub::OnRegisterService(MessageParcel &data, MessageParcel &reply)
58 {
59 sptr<MDnsServiceInfo> serviceInfo = MDnsServiceInfo::Unmarshalling(data);
60 if (!serviceInfo) {
61 NETMGR_EXT_LOG_E("serviceInfo is nullptr");
62 return NETMANAGER_EXT_ERR_READ_DATA_FAIL;
63 }
64
65 NETMGR_EXT_LOG_D("MDnsServiceProxy [%{public}s][%{public}s][%{public}d]", serviceInfo->name.c_str(),
66 serviceInfo->type.c_str(), serviceInfo->port);
67
68 sptr<IRemoteObject> remote = data.ReadRemoteObject();
69 if (remote == nullptr) {
70 NETMGR_EXT_LOG_E("remote is nullptr.");
71 return NETMANAGER_EXT_ERR_READ_DATA_FAIL;
72 }
73
74 sptr<IRegistrationCallback> callback = iface_cast<IRegistrationCallback>(remote);
75 if (callback == nullptr) {
76 NETMGR_EXT_LOG_E("iface_cast callback is nullptr.");
77 return NETMANAGER_EXT_ERR_LOCAL_PTR_NULL;
78 }
79
80 int32_t err = RegisterService(*serviceInfo, callback);
81 NETMGR_EXT_LOG_D("MDnsService::RegisterService return:[%{public}d]", err);
82 if (!reply.WriteInt32(err)) {
83 return NETMANAGER_EXT_ERR_WRITE_REPLY_FAIL;
84 }
85 return ERR_NONE;
86 }
87
OnUnRegisterService(MessageParcel & data,MessageParcel & reply)88 int32_t MDnsServiceStub::OnUnRegisterService(MessageParcel &data, MessageParcel &reply)
89 {
90 sptr<IRemoteObject> remote = data.ReadRemoteObject();
91 if (remote == nullptr) {
92 NETMGR_EXT_LOG_E("remote ptr is nullptr.");
93 return NETMANAGER_EXT_ERR_READ_DATA_FAIL;
94 }
95
96 sptr<IRegistrationCallback> callback = iface_cast<IRegistrationCallback>(remote);
97 if (callback == nullptr) {
98 NETMGR_EXT_LOG_E("iface_cast callback is nullptr.");
99 return NETMANAGER_EXT_ERR_LOCAL_PTR_NULL;
100 }
101
102 int32_t err = UnRegisterService(callback);
103 NETMGR_EXT_LOG_D("MDnsService::UnRegisterService return:[%{public}d]", err);
104 if (!reply.WriteInt32(err)) {
105 return NETMANAGER_EXT_ERR_WRITE_REPLY_FAIL;
106 }
107 return ERR_NONE;
108 }
109
OnStartDiscoverService(MessageParcel & data,MessageParcel & reply)110 int32_t MDnsServiceStub::OnStartDiscoverService(MessageParcel &data, MessageParcel &reply)
111 {
112 std::string type;
113 if (!data.ReadString(type)) {
114 return NETMANAGER_EXT_ERR_READ_DATA_FAIL;
115 }
116
117 sptr<IRemoteObject> remote = data.ReadRemoteObject();
118 if (remote == nullptr) {
119 NETMGR_EXT_LOG_E("remote ptr is nullptr.");
120 return NETMANAGER_EXT_ERR_READ_DATA_FAIL;
121 }
122
123 sptr<IDiscoveryCallback> callback = iface_cast<IDiscoveryCallback>(remote);
124 if (callback == nullptr) {
125 NETMGR_EXT_LOG_E("iface_cast callback is nullptr.");
126 return NETMANAGER_EXT_ERR_LOCAL_PTR_NULL;
127 }
128
129 int32_t err = StartDiscoverService(type, callback);
130 NETMGR_EXT_LOG_D("MDnsService::StartDiscoverService :[%{public}d]", err);
131 if (!reply.WriteInt32(err)) {
132 return NETMANAGER_EXT_ERR_WRITE_REPLY_FAIL;
133 }
134 return ERR_NONE;
135 }
136
OnStopDiscoverService(MessageParcel & data,MessageParcel & reply)137 int32_t MDnsServiceStub::OnStopDiscoverService(MessageParcel &data, MessageParcel &reply)
138 {
139 sptr<IRemoteObject> remote = data.ReadRemoteObject();
140 if (remote == nullptr) {
141 NETMGR_EXT_LOG_E("remote ptr is nullptr.");
142 return NETMANAGER_EXT_ERR_READ_DATA_FAIL;
143 }
144
145 sptr<IDiscoveryCallback> callback = iface_cast<IDiscoveryCallback>(remote);
146 if (callback == nullptr) {
147 NETMGR_EXT_LOG_E("iface_cast callback is nullptr.");
148 return NETMANAGER_EXT_ERR_LOCAL_PTR_NULL;
149 }
150
151 int32_t err = StopDiscoverService(callback);
152 NETMGR_EXT_LOG_D("MDnsService::StopDiscoverService :[%{public}d]", err);
153 if (!reply.WriteInt32(err)) {
154 return NETMANAGER_EXT_ERR_WRITE_REPLY_FAIL;
155 }
156 return ERR_NONE;
157 }
158
OnResolveService(MessageParcel & data,MessageParcel & reply)159 int32_t MDnsServiceStub::OnResolveService(MessageParcel &data, MessageParcel &reply)
160 {
161 NETMGR_EXT_LOG_D("MDnsServiceStub::OnResolveService In");
162 sptr<MDnsServiceInfo> serviceInfo = MDnsServiceInfo::Unmarshalling(data);
163 if (!serviceInfo) {
164 NETMGR_EXT_LOG_E("serviceInfo is nullptr");
165 return NETMANAGER_EXT_ERR_READ_DATA_FAIL;
166 }
167
168 sptr<IRemoteObject> remote = data.ReadRemoteObject();
169 if (remote == nullptr) {
170 NETMGR_EXT_LOG_E("remote ptr is nullptr.");
171 return NETMANAGER_EXT_ERR_READ_DATA_FAIL;
172 }
173
174 sptr<IResolveCallback> callback = iface_cast<IResolveCallback>(remote);
175 if (callback == nullptr) {
176 NETMGR_EXT_LOG_E("iface_cast callback is nullptr.");
177 return NETMANAGER_EXT_ERR_LOCAL_PTR_NULL;
178 }
179
180 int32_t err = ResolveService(*serviceInfo, callback);
181 NETMGR_EXT_LOG_D("MDnsService::ResolveService :[%{public}d]", err);
182 if (!reply.WriteInt32(err)) {
183 return NETMANAGER_EXT_ERR_WRITE_REPLY_FAIL;
184 }
185 return ERR_NONE;
186 }
187 } // namespace NetManagerStandard
188 } // namespace OHOS