1 /*
2 * Copyright (c) 2022 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 "print_service_stub.h"
17 #include "ipc_skeleton.h"
18 #include "iprint_service.h"
19 #include "message_parcel.h"
20 #include "print_constant.h"
21 #include "print_extension_info.h"
22 #include "print_job.h"
23 #include "print_log.h"
24
25 namespace OHOS::Print {
26 using namespace OHOS::HiviewDFX;
27
PrintServiceStub()28 PrintServiceStub::PrintServiceStub()
29 {
30 cmdMap_[OHOS::Print::IPrintInterfaceCode::CMD_START_PRINT] = &PrintServiceStub::OnStartPrint;
31 cmdMap_[OHOS::Print::IPrintInterfaceCode::CMD_STOP_PRINT] = &PrintServiceStub::OnStopPrint;
32 cmdMap_[OHOS::Print::IPrintInterfaceCode::CMD_CONNECTPRINTER] = &PrintServiceStub::OnConnectPrinter;
33 cmdMap_[OHOS::Print::IPrintInterfaceCode::CMD_DISCONNECTPRINTER] = &PrintServiceStub::OnDisconnectPrinter;
34 cmdMap_[OHOS::Print::IPrintInterfaceCode::CMD_STARTDISCOVERPRINTER] = &PrintServiceStub::OnStartDiscoverPrinter;
35 cmdMap_[OHOS::Print::IPrintInterfaceCode::CMD_STOPDISCOVERPRINTER] = &PrintServiceStub::OnStopDiscoverPrint;
36 cmdMap_[OHOS::Print::IPrintInterfaceCode::CMD_QUERYALLEXTENSION] = &PrintServiceStub::OnQueryAllExtension;
37 cmdMap_[OHOS::Print::IPrintInterfaceCode::CMD_STARTPRINTJOB] = &PrintServiceStub::OnStartPrintJob;
38 cmdMap_[OHOS::Print::IPrintInterfaceCode::CMD_CANCELPRINTJOB] = &PrintServiceStub::OnCancelPrintJob;
39 cmdMap_[OHOS::Print::IPrintInterfaceCode::CMD_ADDPRINTERS] = &PrintServiceStub::OnAddPrinters;
40 cmdMap_[OHOS::Print::IPrintInterfaceCode::CMD_REMOVEPRINTERS] = &PrintServiceStub::OnRemovePrinters;
41 cmdMap_[OHOS::Print::IPrintInterfaceCode::CMD_UPDATEPRINTERS] = &PrintServiceStub::OnUpdatePrinters;
42 cmdMap_[OHOS::Print::IPrintInterfaceCode::CMD_UPDATEPRINTERSTATE] = &PrintServiceStub::OnUpdatePrinterState;
43 cmdMap_[OHOS::Print::IPrintInterfaceCode::CMD_UPDATEPRINTJOBSTATE] = &PrintServiceStub::OnUpdatePrintJobState;
44 cmdMap_[OHOS::Print::IPrintInterfaceCode::CMD_UPDATEEXTENSIONINFO] = &PrintServiceStub::OnUpdateExtensionInfo;
45 cmdMap_[OHOS::Print::IPrintInterfaceCode::CMD_REQUESTPREVIEW] = &PrintServiceStub::OnRequestPreview;
46 cmdMap_[OHOS::Print::IPrintInterfaceCode::CMD_QUERYPRINTERCAPABILITY] = &PrintServiceStub::OnQueryPrinterCapability;
47 cmdMap_[OHOS::Print::IPrintInterfaceCode::CMD_ON] = &PrintServiceStub::OnEventOn;
48 cmdMap_[OHOS::Print::IPrintInterfaceCode::CMD_OFF] = &PrintServiceStub::OnEventOff;
49 cmdMap_[OHOS::Print::IPrintInterfaceCode::CMD_REG_EXT_CB] = &PrintServiceStub::OnRegisterExtCallback;
50 cmdMap_[OHOS::Print::IPrintInterfaceCode::CMD_UNREG_EXT_CB] = &PrintServiceStub::OnUnregisterAllExtCallback;
51 cmdMap_[OHOS::Print::IPrintInterfaceCode::CMD_LOAD_EXT] = &PrintServiceStub::OnLoadExtSuccess;
52 cmdMap_[OHOS::Print::IPrintInterfaceCode::CMD_QUERYALLPRINTJOB] = &PrintServiceStub::OnQueryAllPrintJob;
53 cmdMap_[OHOS::Print::IPrintInterfaceCode::CMD_QUERYPRINTJOBBYID] = &PrintServiceStub::OnQueryPrintJobById;
54 cmdMap_[OHOS::Print::IPrintInterfaceCode::CMD_ADDPRINTERTOCUPS] = &PrintServiceStub::OnAddPrinterToCups;
55 cmdMap_[OHOS::Print::IPrintInterfaceCode::CMD_QUERYPRINTERCAPABILITYBYURI] =
56 &PrintServiceStub::OnQueryPrinterCapabilityByUri;
57 cmdMap_[OHOS::Print::IPrintInterfaceCode::CMD_STARTPRINTJOB_BY_ADAPTER] = &PrintServiceStub::OnPrintByAdapter;
58 cmdMap_[OHOS::Print::IPrintInterfaceCode::CMD_START_GET_FILE] = &PrintServiceStub::OnStartGetPrintFile;
59 cmdMap_[OHOS::Print::IPrintInterfaceCode::CMD_NOTIFY_PRINT_SERVICE] = &PrintServiceStub::OnNotifyPrintService;
60 }
61
OnRemoteRequest(uint32_t code,MessageParcel & data,MessageParcel & reply,MessageOption & option)62 int32_t PrintServiceStub::OnRemoteRequest(
63 uint32_t code, MessageParcel &data, MessageParcel &reply, MessageOption &option)
64 {
65 PRINT_HILOGD("OnRemoteRequest started, code = %{public}d", code);
66 auto descriptorToken = data.ReadInterfaceToken();
67 if (descriptorToken != GetDescriptor()) {
68 PRINT_HILOGE("Remote descriptor not the same as local descriptor.");
69 return E_PRINT_RPC_FAILURE;
70 }
71
72 auto itFunc = cmdMap_.find(code);
73 if (itFunc != cmdMap_.end()) {
74 auto requestFunc = itFunc->second;
75 if (requestFunc != nullptr) {
76 return (this->*requestFunc)(data, reply);
77 }
78 }
79 PRINT_HILOGW("default case, need check.");
80 return IPCObjectStub::OnRemoteRequest(code, data, reply, option);
81 }
82
OnStartPrint(MessageParcel & data,MessageParcel & reply)83 bool PrintServiceStub::OnStartPrint(MessageParcel &data, MessageParcel &reply)
84 {
85 PRINT_HILOGD("PrintServiceStub::OnStartPrint in");
86 std::vector<std::string> fileList;
87 std::vector<uint32_t> fdList;
88 std::string result = "";
89
90 if (data.ReadBool()) {
91 data.ReadStringVector(&fileList);
92 PRINT_HILOGD("Current file is %{public}zd", fileList.size());
93 CHECK_IS_EXCEED_PRINT_RANGE_BOOL(fileList.size());
94 for (auto file : fileList) {
95 PRINT_HILOGD("file is %{private}s", file.c_str());
96 }
97 }
98
99 if (data.ReadBool()) {
100 int32_t len = data.ReadInt32();
101 CHECK_IS_EXCEED_PRINT_RANGE_BOOL(len);
102 for (int32_t index = 0; index < len; index++) {
103 uint32_t fd = static_cast<uint32_t>(data.ReadFileDescriptor());
104 PRINT_HILOGD("fdList[%{public}d] = %{public}d", index, fd);
105 fdList.emplace_back(fd);
106 }
107 }
108
109 sptr<IRemoteObject> token = data.ReadRemoteObject();
110 PRINT_HILOGI("OnStartPrint read token %{public}s", token != nullptr ? "success" : "failed");
111 int32_t ret = E_PRINT_NONE;
112 if (token == nullptr) {
113 ret = StartPrint(fileList, fdList, result);
114 } else {
115 ret = StartPrint(fileList, fdList, result, token);
116 }
117 reply.WriteInt32(ret);
118 reply.WriteString(result);
119 PRINT_HILOGD("PrintServiceStub::OnStartPrint out");
120 return ret == E_PRINT_NONE;
121 }
122
OnStopPrint(MessageParcel & data,MessageParcel & reply)123 bool PrintServiceStub::OnStopPrint(MessageParcel &data, MessageParcel &reply)
124 {
125 PRINT_HILOGD("PrintServiceStub::OnStopPrint in");
126 std::string taskId = data.ReadString();
127 int32_t ret = StopPrint(taskId);
128 reply.WriteInt32(ret);
129 PRINT_HILOGD("PrintServiceStub::OnStopPrint out");
130 return ret == E_PRINT_NONE;
131 }
132
OnConnectPrinter(MessageParcel & data,MessageParcel & reply)133 bool PrintServiceStub::OnConnectPrinter(MessageParcel &data, MessageParcel &reply)
134 {
135 PRINT_HILOGD("PrintServiceStub::OnConnectPrinter in");
136 int32_t ret = ConnectPrinter(data.ReadString());
137 reply.WriteInt32(ret);
138 PRINT_HILOGD("PrintServiceStub::OnConnectPrinter out");
139 return ret == E_PRINT_NONE;
140 }
141
OnDisconnectPrinter(MessageParcel & data,MessageParcel & reply)142 bool PrintServiceStub::OnDisconnectPrinter(MessageParcel &data, MessageParcel &reply)
143 {
144 PRINT_HILOGD("PrintServiceStub::OnDisconnectPrinter in");
145 int32_t ret = DisconnectPrinter(data.ReadString());
146 reply.WriteInt32(ret);
147 PRINT_HILOGD("PrintServiceStub::OnDisconnectPrinter out");
148 return ret == E_PRINT_NONE;
149 }
150
OnStartDiscoverPrinter(MessageParcel & data,MessageParcel & reply)151 bool PrintServiceStub::OnStartDiscoverPrinter(MessageParcel &data, MessageParcel &reply)
152 {
153 PRINT_HILOGD("PrintServiceStub::OnStartDiscoverPrinter in");
154 std::vector<std::string> extensionList;
155 data.ReadStringVector(&extensionList);
156 int32_t ret = StartDiscoverPrinter(extensionList);
157 reply.WriteInt32(ret);
158 PRINT_HILOGD("PrintServiceStub::OnStartDiscoverPrinter out");
159 return ret == E_PRINT_NONE;
160 }
161
OnStopDiscoverPrint(MessageParcel & data,MessageParcel & reply)162 bool PrintServiceStub::OnStopDiscoverPrint(MessageParcel &data, MessageParcel &reply)
163 {
164 PRINT_HILOGD("PrintServiceStub::OnStopDiscoverPrint in");
165 int32_t ret = StopDiscoverPrinter();
166 reply.WriteInt32(ret);
167 PRINT_HILOGD("PrintServiceStub::OnStopDiscoverPrint out");
168 return ret == E_PRINT_NONE;
169 }
170
OnQueryAllExtension(MessageParcel & data,MessageParcel & reply)171 bool PrintServiceStub::OnQueryAllExtension(MessageParcel &data, MessageParcel &reply)
172 {
173 PRINT_HILOGD("PrintServiceStub::OnQueryAllExtension in");
174 std::vector<PrintExtensionInfo> printerInfo;
175 int32_t ret = QueryAllExtension(printerInfo);
176 reply.WriteInt32(ret);
177 if (ret == E_PRINT_NONE) {
178 uint32_t size = static_cast<uint32_t>(printerInfo.size());
179 reply.WriteUint32(size);
180 for (uint32_t index = 0; index < size; index++) {
181 printerInfo[index].Marshalling(reply);
182 }
183 }
184 PRINT_HILOGD("PrintServiceStub::OnQueryAllExtension out");
185 return ret == E_PRINT_NONE;
186 }
187
OnStartPrintJob(MessageParcel & data,MessageParcel & reply)188 bool PrintServiceStub::OnStartPrintJob(MessageParcel &data, MessageParcel &reply)
189 {
190 PRINT_HILOGD("PrintServiceStub::OnStartPrintJob in");
191 int32_t ret = E_PRINT_RPC_FAILURE;
192 auto jobInfoPtr = PrintJob::Unmarshalling(data);
193 if (jobInfoPtr != nullptr) {
194 jobInfoPtr->Dump();
195 ret = StartPrintJob(*jobInfoPtr);
196 }
197 reply.WriteInt32(ret);
198 PRINT_HILOGD("PrintServiceStub::OnStartPrintJob out");
199 return ret == E_PRINT_NONE;
200 }
201
OnCancelPrintJob(MessageParcel & data,MessageParcel & reply)202 bool PrintServiceStub::OnCancelPrintJob(MessageParcel &data, MessageParcel &reply)
203 {
204 PRINT_HILOGD("PrintServiceStub::OnCancelPrintJob in");
205 int32_t ret = CancelPrintJob(data.ReadString());
206 reply.WriteInt32(ret);
207 PRINT_HILOGD("PrintServiceStub::OnStartPrintJob out");
208 return ret == E_PRINT_NONE;
209 }
210
OnAddPrinters(MessageParcel & data,MessageParcel & reply)211 bool PrintServiceStub::OnAddPrinters(MessageParcel &data, MessageParcel &reply)
212 {
213 PRINT_HILOGD("PrintServiceStub::OnAddPrinters in");
214 std::vector<PrinterInfo> printerInfos;
215 uint32_t len = data.ReadUint32();
216 PRINT_HILOGD("OnStartDiscoverPrinter len = %{public}d", len);
217
218 CHECK_IS_EXCEED_PRINT_RANGE_BOOL(len);
219 for (uint32_t i = 0; i < len; i++) {
220 auto infoPtr = PrinterInfo::Unmarshalling(data);
221 if (infoPtr == nullptr) {
222 PRINT_HILOGW("invalid printer object");
223 continue;
224 }
225 infoPtr->Dump();
226 printerInfos.emplace_back(*infoPtr);
227 }
228 int32_t ret = E_PRINT_RPC_FAILURE;
229 if (printerInfos.size() > 0) {
230 ret = AddPrinters(printerInfos);
231 }
232 reply.WriteInt32(ret);
233 PRINT_HILOGD("PrintServiceStub::OnAddPrinters out");
234 return ret == E_PRINT_NONE;
235 }
236
OnRemovePrinters(MessageParcel & data,MessageParcel & reply)237 bool PrintServiceStub::OnRemovePrinters(MessageParcel &data, MessageParcel &reply)
238 {
239 PRINT_HILOGD("PrintServiceStub::OnRemovePrinters in");
240 std::vector<std::string> printerIds;
241 data.ReadStringVector(&printerIds);
242 PRINT_HILOGD("OnStartDiscoverPrinter len = %{public}zd", printerIds.size());
243
244 CHECK_IS_EXCEED_PRINT_RANGE_BOOL(printerIds.size());
245 int32_t ret = RemovePrinters(printerIds);
246 reply.WriteInt32(ret);
247
248 PRINT_HILOGD("PrintServiceStub::OnRemovePrinters out");
249 return ret == E_PRINT_NONE;
250 }
251
OnUpdatePrinters(MessageParcel & data,MessageParcel & reply)252 bool PrintServiceStub::OnUpdatePrinters(MessageParcel &data, MessageParcel &reply)
253 {
254 PRINT_HILOGD("PrintServiceStub::OnUpdatePrinters in");
255 std::vector<PrinterInfo> printerInfos;
256 uint32_t len = data.ReadUint32();
257 PRINT_HILOGD("OnStartDiscoverPrinter len = %{public}d", len);
258
259 CHECK_IS_EXCEED_PRINT_RANGE_BOOL(len);
260 for (uint32_t i = 0; i < len; i++) {
261 auto infoPtr = PrinterInfo::Unmarshalling(data);
262 if (infoPtr == nullptr) {
263 PRINT_HILOGW("invalid printer object");
264 continue;
265 }
266 infoPtr->Dump();
267 printerInfos.emplace_back(*infoPtr);
268 }
269 int32_t ret = E_PRINT_RPC_FAILURE;
270 if (printerInfos.size() > 0) {
271 ret = UpdatePrinters(printerInfos);
272 }
273 reply.WriteInt32(ret);
274 PRINT_HILOGD("PrintServiceStub::OnUpdatePrinters out");
275 return ret == E_PRINT_NONE;
276 }
277
OnUpdatePrinterState(MessageParcel & data,MessageParcel & reply)278 bool PrintServiceStub::OnUpdatePrinterState(MessageParcel &data, MessageParcel &reply)
279 {
280 PRINT_HILOGD("PrintServiceStub::OnUpdatePrinterState in");
281 std::string printerId = data.ReadString();
282 uint32_t state = data.ReadUint32();
283 int32_t ret = UpdatePrinterState(printerId, state);
284 reply.WriteInt32(ret);
285 PRINT_HILOGD("PrintServiceStub::OnUpdatePrinterState out");
286 return ret == E_PRINT_NONE;
287 }
288
OnUpdatePrintJobState(MessageParcel & data,MessageParcel & reply)289 bool PrintServiceStub::OnUpdatePrintJobState(MessageParcel &data, MessageParcel &reply)
290 {
291 PRINT_HILOGD("PrintServiceStub::OnUpdatePrintJobState in");
292 std::string jobId = data.ReadString();
293 uint32_t state = data.ReadUint32();
294 uint32_t subState = data.ReadUint32();
295 PRINT_HILOGD("OnUpdatePrintJobState jobId = %{public}s", jobId.c_str());
296 PRINT_HILOGD("OnUpdatePrintJobState state = %{public}d", state);
297 PRINT_HILOGD("OnUpdatePrintJobState subState = %{public}d", subState);
298
299 int32_t ret = UpdatePrintJobState(jobId, state, subState);
300 reply.WriteInt32(ret);
301 PRINT_HILOGD("PrintServiceStub::OnUpdatePrintJobState out");
302 return ret == E_PRINT_NONE;
303 }
304
OnUpdateExtensionInfo(MessageParcel & data,MessageParcel & reply)305 bool PrintServiceStub::OnUpdateExtensionInfo(MessageParcel &data, MessageParcel &reply)
306 {
307 PRINT_HILOGD("PrintServiceStub::OnUpdateExtensionInfo in");
308 std::string extInfo = data.ReadString();
309 PRINT_HILOGD("OnUpdateExtensionInfo extInfo = %{public}s", extInfo.c_str());
310
311 int32_t ret = UpdateExtensionInfo(extInfo);
312 reply.WriteInt32(ret);
313 PRINT_HILOGD("PrintServiceStub::OnUpdateExtensionInfo out");
314 return ret == E_PRINT_NONE;
315 }
316
OnRequestPreview(MessageParcel & data,MessageParcel & reply)317 bool PrintServiceStub::OnRequestPreview(MessageParcel &data, MessageParcel &reply)
318 {
319 PRINT_HILOGD("PrintServiceStub::OnRequestPreview in");
320 int32_t ret = E_PRINT_RPC_FAILURE;
321 std::string previewResult = "";
322 auto jobInfoPtr = PrintJob::Unmarshalling(data);
323 if (jobInfoPtr != nullptr) {
324 jobInfoPtr->Dump();
325 ret = RequestPreview(*jobInfoPtr, previewResult);
326 }
327 reply.WriteInt32(ret);
328 reply.WriteString(previewResult);
329 PRINT_HILOGD("PrintServiceStub::OnRequestPreview out");
330 return ret == E_PRINT_NONE;
331 }
332
OnQueryPrinterCapability(MessageParcel & data,MessageParcel & reply)333 bool PrintServiceStub::OnQueryPrinterCapability(MessageParcel &data, MessageParcel &reply)
334 {
335 PRINT_HILOGD("PrintServiceStub::OnQueryPrinterCapability in");
336 std::string printerId = data.ReadString();
337 PRINT_HILOGD("printerId : %{private}s", printerId.c_str());
338 int32_t ret = QueryPrinterCapability(printerId);
339 reply.WriteInt32(ret);
340 PRINT_HILOGD("PrintServiceStub::OnQueryPrinterCapability out");
341 return ret == E_PRINT_NONE;
342 }
343
OnQueryAllPrintJob(MessageParcel & data,MessageParcel & reply)344 bool PrintServiceStub::OnQueryAllPrintJob(MessageParcel &data, MessageParcel &reply)
345 {
346 PRINT_HILOGD("PrintServiceStub::OnQueryAllPrintJob in");
347 std::vector<PrintJob> printJob;
348 printJob.clear();
349 int32_t ret = QueryAllPrintJob(printJob);
350 reply.WriteInt32(ret);
351 if (ret == E_PRINT_NONE) {
352 uint32_t size = static_cast<uint32_t>(printJob.size());
353 reply.WriteUint32(size);
354 for (uint32_t index = 0; index < size; index++) {
355 printJob[index].Marshalling(reply);
356 }
357 }
358 PRINT_HILOGD("PrintServiceStub::OnQueryAllPrintJob out");
359 return ret == E_PRINT_NONE;
360 }
361
OnQueryPrintJobById(MessageParcel & data,MessageParcel & reply)362 bool PrintServiceStub::OnQueryPrintJobById(MessageParcel &data, MessageParcel &reply)
363 {
364 PRINT_HILOGD("PrintServiceStub::OnQueryPrintJobById in");
365 PrintJob printJob;
366 std::string printJobId = data.ReadString();
367 int32_t ret = QueryPrintJobById(printJobId, printJob);
368 reply.WriteInt32(ret);
369 printJob.Marshalling(reply);
370 PRINT_HILOGD("PrintServiceStub::OnQueryPrintJobById out");
371 return ret == E_PRINT_NONE;
372 }
373
OnAddPrinterToCups(MessageParcel & data,MessageParcel & reply)374 bool PrintServiceStub::OnAddPrinterToCups(MessageParcel &data, MessageParcel &reply)
375 {
376 PRINT_HILOGD("PrintServiceStub::OnAddPrinterToCups in");
377 std::string printerUri = data.ReadString();
378 std::string printerName = data.ReadString();
379 std::string printerMake = data.ReadString();
380 int32_t ret = AddPrinterToCups(printerUri, printerName, printerMake);
381 reply.WriteInt32(ret);
382 PRINT_HILOGD("PrintServiceStub::OnAddPrinterToCups out");
383 return ret == E_PRINT_NONE;
384 }
385
OnQueryPrinterCapabilityByUri(MessageParcel & data,MessageParcel & reply)386 bool PrintServiceStub::OnQueryPrinterCapabilityByUri(MessageParcel &data, MessageParcel &reply)
387 {
388 PRINT_HILOGD("PrintServiceStub::OnQueryPrinterCapabilityByUri in");
389 PrinterCapability printerCaps;
390 std::string printerUri = data.ReadString();
391 std::string printerId = data.ReadString();
392 int32_t ret = QueryPrinterCapabilityByUri(printerUri, printerId, printerCaps);
393 reply.WriteInt32(ret);
394 printerCaps.Marshalling(reply);
395 PRINT_HILOGD("PrintServiceStub::OnQueryPrinterCapabilityByUri out");
396 return ret == E_PRINT_NONE;
397 }
398
OnEventOn(MessageParcel & data,MessageParcel & reply)399 bool PrintServiceStub::OnEventOn(MessageParcel &data, MessageParcel &reply)
400 {
401 std::string taskId = data.ReadString();
402 std::string type = data.ReadString();
403 PRINT_HILOGD("PrintServiceStub::OnEventOn type=%{public}s ", type.c_str());
404 if (type.empty()) {
405 PRINT_HILOGE("PrintServiceStub::OnEventOn type is null.");
406 reply.WriteInt32(E_PRINT_RPC_FAILURE);
407 return false;
408 }
409 sptr<IRemoteObject> remote = data.ReadRemoteObject();
410 if (remote == nullptr) {
411 PRINT_HILOGE("PrintServiceStub::OnEventOn remote is nullptr");
412 reply.WriteInt32(E_PRINT_RPC_FAILURE);
413 return false;
414 }
415 sptr<IPrintCallback> listener = iface_cast<IPrintCallback>(remote);
416 if (listener.GetRefPtr() == nullptr) {
417 PRINT_HILOGE("PrintServiceStub::OnEventOn listener is null");
418 reply.WriteInt32(E_PRINT_RPC_FAILURE);
419 return false;
420 }
421 int32_t ret = On(taskId, type, listener);
422 reply.WriteInt32(ret);
423 PRINT_HILOGD("PrintServiceStub::OnEventOn out");
424 return ret == E_PRINT_NONE;
425 }
426
OnEventOff(MessageParcel & data,MessageParcel & reply)427 bool PrintServiceStub::OnEventOff(MessageParcel &data, MessageParcel &reply)
428 {
429 PRINT_HILOGD("PrintServiceStub::OnEventOff in");
430 std::string taskId = data.ReadString();
431 std::string type = data.ReadString();
432 PRINT_HILOGD("PrintServiceStub::OnEventOff type=%{public}s ", type.c_str());
433 int32_t ret = Off(taskId, type);
434 reply.WriteInt32(ret);
435 PRINT_HILOGD("PrintServiceStub::OnEventOff out");
436 return ret == E_PRINT_NONE;
437 }
438
OnRegisterExtCallback(MessageParcel & data,MessageParcel & reply)439 bool PrintServiceStub::OnRegisterExtCallback(MessageParcel &data, MessageParcel &reply)
440 {
441 PRINT_HILOGD("PrintServiceStub::OnRegisterExtCallback in");
442 std::string extensionCID = data.ReadString();
443 sptr<IRemoteObject> remote = data.ReadRemoteObject();
444 if (remote == nullptr) {
445 PRINT_HILOGD("PrintServiceStub::OnRegisterExtCallback remote is nullptr");
446 reply.WriteInt32(E_PRINT_RPC_FAILURE);
447 return false;
448 }
449 sptr<IPrintExtensionCallback> listener = iface_cast<IPrintExtensionCallback>(remote);
450 if (listener.GetRefPtr() == nullptr) {
451 PRINT_HILOGD("PrintServiceStub::OnRegisterExtCallback listener is null");
452 reply.WriteInt32(E_PRINT_RPC_FAILURE);
453 return false;
454 }
455
456 int32_t ret = RegisterExtCallback(extensionCID, listener);
457 reply.WriteInt32(ret);
458 PRINT_HILOGD("PrintServiceStub::OnRegisterExtCallback out");
459 return ret == E_PRINT_NONE;
460 }
461
OnUnregisterAllExtCallback(MessageParcel & data,MessageParcel & reply)462 bool PrintServiceStub::OnUnregisterAllExtCallback(MessageParcel &data, MessageParcel &reply)
463 {
464 PRINT_HILOGD("PrintServiceStub::OnUnregisterAllExtCallback in");
465 std::string extensionId = data.ReadString();
466 int32_t ret = UnregisterAllExtCallback(extensionId);
467 reply.WriteInt32(ret);
468 PRINT_HILOGD("PrintServiceStub::OnUnregisterAllExtCallback out");
469 return ret == E_PRINT_NONE;
470 }
471
OnLoadExtSuccess(MessageParcel & data,MessageParcel & reply)472 bool PrintServiceStub::OnLoadExtSuccess(MessageParcel &data, MessageParcel &reply)
473 {
474 PRINT_HILOGD("PrintServiceStub::OnLoadExtSuccess in");
475 std::string extensionId = data.ReadString();
476 int32_t ret = LoadExtSuccess(extensionId);
477 reply.WriteInt32(ret);
478 PRINT_HILOGD("PrintServiceStub::OnLoadExtSuccess out");
479 return ret == E_PRINT_NONE;
480 }
481
OnPrintByAdapter(MessageParcel & data,MessageParcel & reply)482 bool PrintServiceStub::OnPrintByAdapter(MessageParcel &data, MessageParcel &reply)
483 {
484 PRINT_HILOGI("PrintServiceStub::OnPrintByAdapter in");
485 std::string resultTaskId = "";
486 int32_t ret = E_PRINT_RPC_FAILURE;
487 std::string jobName = data.ReadString();
488 auto attrs = PrintAttributes::Unmarshalling(data);
489 sptr<IRemoteObject> token = data.ReadRemoteObject();
490 if (attrs != nullptr) {
491 attrs->Dump();
492 ret = PrintByAdapter(jobName, *attrs, resultTaskId, token);
493 }
494 reply.WriteInt32(ret);
495 reply.WriteString(resultTaskId);
496 PRINT_HILOGI("PrintServiceStub::OnPrintByAdapter out");
497 return ret == E_PRINT_NONE;
498 }
499
OnStartGetPrintFile(MessageParcel & data,MessageParcel & reply)500 bool PrintServiceStub::OnStartGetPrintFile(MessageParcel &data, MessageParcel &reply)
501 {
502 PRINT_HILOGI("PrintServiceStub::OnStartGetPrintFile in");
503 int32_t ret = E_PRINT_RPC_FAILURE;
504 std::string jobId = data.ReadString();
505 auto attrs = PrintAttributes::Unmarshalling(data);
506 uint32_t fd = static_cast<uint32_t>(data.ReadFileDescriptor());
507 ret = StartGetPrintFile(jobId, *attrs, fd);
508 reply.WriteInt32(ret);
509 PRINT_HILOGI("PrintServiceStub::OnStartGetPrintFile out");
510 return ret == E_PRINT_NONE;
511 }
512
OnNotifyPrintService(MessageParcel & data,MessageParcel & reply)513 bool PrintServiceStub::OnNotifyPrintService(MessageParcel &data, MessageParcel &reply)
514 {
515 PRINT_HILOGD("PrintServiceStub::OnNotifyPrintService in");
516 std::string jobId = data.ReadString();
517 std::string type = data.ReadString();
518 PRINT_HILOGD(
519 "PrintServiceStub::OnNotifyPrintService jobId=%{public}s type=%{public}s ", jobId.c_str(), type.c_str());
520 int32_t ret = NotifyPrintService(jobId, type);
521 reply.WriteInt32(ret);
522 PRINT_HILOGD("PrintServiceStub::OnNotifyPrintService out");
523 return ret == E_PRINT_NONE;
524 }
525 } // namespace OHOS::Print
526