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] =
44 &PrintServiceStub::OnUpdatePrintJobStateOnlyForSystemApp;
45 cmdMap_[OHOS::Print::IPrintInterfaceCode::CMD_UPDATEEXTENSIONINFO] = &PrintServiceStub::OnUpdateExtensionInfo;
46 cmdMap_[OHOS::Print::IPrintInterfaceCode::CMD_REQUESTPREVIEW] = &PrintServiceStub::OnRequestPreview;
47 cmdMap_[OHOS::Print::IPrintInterfaceCode::CMD_QUERYPRINTERCAPABILITY] =
48 &PrintServiceStub::OnQueryPrinterCapability;
49 cmdMap_[OHOS::Print::IPrintInterfaceCode::CMD_ON] = &PrintServiceStub::OnEventOn;
50 cmdMap_[OHOS::Print::IPrintInterfaceCode::CMD_OFF] = &PrintServiceStub::OnEventOff;
51 cmdMap_[OHOS::Print::IPrintInterfaceCode::CMD_REG_EXT_CB] = &PrintServiceStub::OnRegisterExtCallback;
52 cmdMap_[OHOS::Print::IPrintInterfaceCode::CMD_UNREG_EXT_CB] = &PrintServiceStub::OnUnregisterAllExtCallback;
53 cmdMap_[OHOS::Print::IPrintInterfaceCode::CMD_LOAD_EXT] = &PrintServiceStub::OnLoadExtSuccess;
54 cmdMap_[OHOS::Print::IPrintInterfaceCode::CMD_QUERYALLPRINTJOB] = &PrintServiceStub::OnQueryAllPrintJob;
55 cmdMap_[OHOS::Print::IPrintInterfaceCode::CMD_QUERYPRINTJOBBYID] = &PrintServiceStub::OnQueryPrintJobById;
56 cmdMap_[OHOS::Print::IPrintInterfaceCode::CMD_ADDPRINTERTOCUPS] = &PrintServiceStub::OnAddPrinterToCups;
57 cmdMap_[OHOS::Print::IPrintInterfaceCode::CMD_QUERYPRINTERCAPABILITYBYURI] =
58 &PrintServiceStub::OnQueryPrinterCapabilityByUri;
59 cmdMap_[OHOS::Print::IPrintInterfaceCode::CMD_STARTPRINTJOB_BY_ADAPTER] = &PrintServiceStub::OnPrintByAdapter;
60 cmdMap_[OHOS::Print::IPrintInterfaceCode::CMD_START_GET_FILE] = &PrintServiceStub::OnStartGetPrintFile;
61 cmdMap_[OHOS::Print::IPrintInterfaceCode::CMD_NOTIFY_PRINT_SERVICE] = &PrintServiceStub::OnNotifyPrintService;
62 cmdMap_[OHOS::Print::IPrintInterfaceCode::CMD_START_SERVICE] = &PrintServiceStub::OnStartService;
63 cmdMap_[OHOS::Print::IPrintInterfaceCode::CMD_REG_PRINTER_CB] = &PrintServiceStub::OnRegisterPrinterCallback;
64 cmdMap_[OHOS::Print::IPrintInterfaceCode::CMD_UNREG_PRINTER_CB] = &PrintServiceStub::OnUnregisterPrinterCallback;
65 cmdMap_[OHOS::Print::IPrintInterfaceCode::CMD_QUERYPRINTERINFOBYPRINTERID] =
66 &PrintServiceStub::OnQueryPrinterInfoByPrinterId;
67 cmdMap_[OHOS::Print::IPrintInterfaceCode::CMD_QUERYADDEDPRINTER] = &PrintServiceStub::OnQueryAddedPrinter;
68 cmdMap_[OHOS::Print::IPrintInterfaceCode::CMD_QUERYPRINTERPROPERTIES] =
69 &PrintServiceStub::OnQueryPrinterProperties;
70 cmdMap_[OHOS::Print::IPrintInterfaceCode::CMD_STARTNATIVEPRINTJOB] = &PrintServiceStub::OnStartNativePrintJob;
71 cmdMap_[OHOS::Print::IPrintInterfaceCode::CMD_NOTIFY_PRINT_SERVICE_EVENT] =
72 &PrintServiceStub::OnNotifyPrintServiceEvent;
73 cmdMap_[OHOS::Print::IPrintInterfaceCode::CMD_GET_PRINTER_PREFERENCE] =
74 &PrintServiceStub::OnGetPrinterPreference;
75 cmdMap_[OHOS::Print::IPrintInterfaceCode::CMD_SET_PRINTER_PREFERENCE] =
76 &PrintServiceStub::OnSetPrinterPreference;
77 cmdMap_[OHOS::Print::IPrintInterfaceCode::CMD_SET_DEFAULT_PRINTERID] = &PrintServiceStub::OnSetDefaultPrinter;
78 cmdMap_[OHOS::Print::IPrintInterfaceCode::CMD_DELETE_PRINTER_FROM_CUPS] =
79 &PrintServiceStub::OnDeletePrinterFromCups;
80 cmdMap_[OHOS::Print::IPrintInterfaceCode::CMD_DISCOVER_USB_PRINTERS] = &PrintServiceStub::OnDiscoverUsbPrinters;
81 cmdMap_[OHOS::Print::IPrintInterfaceCode::CMD_ADDPRINTERTODISCOVERY] = &PrintServiceStub::OnAddPrinterToDiscovery;
82 cmdMap_[OHOS::Print::IPrintInterfaceCode::CMD_UPDATEPRINTERINDISCOVERY] =
83 &PrintServiceStub::OnUpdatePrinterInDiscovery;
84 cmdMap_[OHOS::Print::IPrintInterfaceCode::CMD_REMOVEPRINTERFROMDISCOVERY] =
85 &PrintServiceStub::OnRemovePrinterFromDiscovery;
86 }
87
OnRemoteRequest( uint32_t code, MessageParcel &data, MessageParcel &reply, MessageOption &option)88 int32_t PrintServiceStub::OnRemoteRequest(
89 uint32_t code, MessageParcel &data, MessageParcel &reply, MessageOption &option)
90 {
91 PRINT_HILOGD("OnRemoteRequest started, code = %{public}d", code);
92 auto descriptorToken = data.ReadInterfaceToken();
93 if (descriptorToken != GetDescriptor()) {
94 PRINT_HILOGE("Remote descriptor not the same as local descriptor.");
95 return E_PRINT_RPC_FAILURE;
96 }
97
98 auto itFunc = cmdMap_.find(code);
99 if (itFunc != cmdMap_.end()) {
100 auto requestFunc = itFunc->second;
101 if (requestFunc != nullptr) {
102 bool result = (this->*requestFunc)(data, reply);
103 return result ? E_PRINT_NONE : E_PRINT_GENERIC_FAILURE;
104 }
105 }
106 PRINT_HILOGW("default case, need check.");
107 return IPCObjectStub::OnRemoteRequest(code, data, reply, option);
108 }
109
OnStartService(MessageParcel &data, MessageParcel &reply)110 bool PrintServiceStub::OnStartService(MessageParcel &data, MessageParcel &reply)
111 {
112 PRINT_HILOGD("nativePrint PrintServiceStub::OnStartService in");
113 int32_t ret = E_PRINT_INVALID_PARAMETER;
114 if (data.ReadString() == "nativePrint") {
115 ret = StartService();
116 reply.WriteInt32(ret);
117 PRINT_HILOGI("nativePrint PrintServiceStub::OnStartService out:%{public}d", ret);
118 }
119 return ret == E_PRINT_NONE;
120 }
121
OnStartPrint(MessageParcel &data, MessageParcel &reply)122 bool PrintServiceStub::OnStartPrint(MessageParcel &data, MessageParcel &reply)
123 {
124 PRINT_HILOGI("PrintServiceStub::OnStartPrint in");
125 std::vector<std::string> fileList;
126 std::vector<uint32_t> fdList;
127
128 if (data.ReadBool()) {
129 data.ReadStringVector(&fileList);
130 PRINT_HILOGD("Current file is %{public}zd", fileList.size());
131 if (fileList.size() > PRINT_MAX_PRINT_COUNT) {
132 PRINT_HILOGE("fileList'size is out of range.");
133 reply.WriteInt32(E_PRINT_INVALID_PARAMETER);
134 return false;
135 }
136 }
137
138 if (data.ReadBool()) {
139 int32_t len = data.ReadInt32();
140 if (len > PRINT_MAX_PRINT_COUNT) {
141 PRINT_HILOGE("len is out of range.");
142 reply.WriteInt32(E_PRINT_INVALID_PARAMETER);
143 return false;
144 }
145 for (int32_t index = 0; index < len; index++) {
146 uint32_t fd = static_cast<uint32_t>(data.ReadFileDescriptor());
147 PRINT_HILOGD("fdList[%{public}d] = %{public}d", index, fd);
148 fdList.emplace_back(fd);
149 }
150 }
151 std::string taskId = data.ReadString();
152 int32_t ret = StartPrint(fileList, fdList, taskId);
153 reply.WriteInt32(ret);
154 PRINT_HILOGD("PrintServiceStub::OnStartPrint out");
155 return ret == E_PRINT_NONE;
156 }
157
OnStopPrint(MessageParcel &data, MessageParcel &reply)158 bool PrintServiceStub::OnStopPrint(MessageParcel &data, MessageParcel &reply)
159 {
160 PRINT_HILOGI("PrintServiceStub::OnStopPrint in");
161 std::string taskId = data.ReadString();
162 int32_t ret = StopPrint(taskId);
163 reply.WriteInt32(ret);
164 PRINT_HILOGD("PrintServiceStub::OnStopPrint out");
165 return ret == E_PRINT_NONE;
166 }
167
OnConnectPrinter(MessageParcel &data, MessageParcel &reply)168 bool PrintServiceStub::OnConnectPrinter(MessageParcel &data, MessageParcel &reply)
169 {
170 PRINT_HILOGI("PrintServiceStub::OnConnectPrinter in");
171 int32_t ret = ConnectPrinter(data.ReadString());
172 reply.WriteInt32(ret);
173 PRINT_HILOGD("PrintServiceStub::OnConnectPrinter out");
174 return ret == E_PRINT_NONE;
175 }
176
OnDisconnectPrinter(MessageParcel &data, MessageParcel &reply)177 bool PrintServiceStub::OnDisconnectPrinter(MessageParcel &data, MessageParcel &reply)
178 {
179 PRINT_HILOGI("PrintServiceStub::OnDisconnectPrinter in");
180 int32_t ret = DisconnectPrinter(data.ReadString());
181 reply.WriteInt32(ret);
182 PRINT_HILOGD("PrintServiceStub::OnDisconnectPrinter out");
183 return ret == E_PRINT_NONE;
184 }
185
OnStartDiscoverPrinter(MessageParcel &data, MessageParcel &reply)186 bool PrintServiceStub::OnStartDiscoverPrinter(MessageParcel &data, MessageParcel &reply)
187 {
188 PRINT_HILOGI("PrintServiceStub::OnStartDiscoverPrinter in");
189 std::vector<std::string> extensionList;
190 data.ReadStringVector(&extensionList);
191 int32_t ret = StartDiscoverPrinter(extensionList);
192 reply.WriteInt32(ret);
193 PRINT_HILOGD("PrintServiceStub::OnStartDiscoverPrinter out");
194 return ret == E_PRINT_NONE;
195 }
196
OnStopDiscoverPrint(MessageParcel &data, MessageParcel &reply)197 bool PrintServiceStub::OnStopDiscoverPrint(MessageParcel &data, MessageParcel &reply)
198 {
199 PRINT_HILOGI("PrintServiceStub::OnStopDiscoverPrint in");
200 int32_t ret = StopDiscoverPrinter();
201 reply.WriteInt32(ret);
202 PRINT_HILOGD("PrintServiceStub::OnStopDiscoverPrint out");
203 return ret == E_PRINT_NONE;
204 }
205
OnQueryAllExtension(MessageParcel &data, MessageParcel &reply)206 bool PrintServiceStub::OnQueryAllExtension(MessageParcel &data, MessageParcel &reply)
207 {
208 PRINT_HILOGI("PrintServiceStub::OnQueryAllExtension in");
209 std::vector<PrintExtensionInfo> printerInfo;
210 int32_t ret = QueryAllExtension(printerInfo);
211 reply.WriteInt32(ret);
212 if (ret == E_PRINT_NONE) {
213 uint32_t size = static_cast<uint32_t>(printerInfo.size());
214 reply.WriteUint32(size);
215 for (uint32_t index = 0; index < size; index++) {
216 printerInfo[index].Marshalling(reply);
217 }
218 }
219 PRINT_HILOGD("PrintServiceStub::OnQueryAllExtension out");
220 return ret == E_PRINT_NONE;
221 }
222
OnStartPrintJob(MessageParcel &data, MessageParcel &reply)223 bool PrintServiceStub::OnStartPrintJob(MessageParcel &data, MessageParcel &reply)
224 {
225 PRINT_HILOGI("PrintServiceStub::OnStartPrintJob in");
226 int32_t ret = E_PRINT_RPC_FAILURE;
227 auto jobInfoPtr = PrintJob::Unmarshalling(data);
228 if (jobInfoPtr != nullptr) {
229 jobInfoPtr->Dump();
230 ret = StartPrintJob(*jobInfoPtr);
231 }
232 reply.WriteInt32(ret);
233 PRINT_HILOGD("PrintServiceStub::OnStartPrintJob out");
234 return ret == E_PRINT_NONE;
235 }
236
OnCancelPrintJob(MessageParcel &data, MessageParcel &reply)237 bool PrintServiceStub::OnCancelPrintJob(MessageParcel &data, MessageParcel &reply)
238 {
239 PRINT_HILOGI("PrintServiceStub::OnCancelPrintJob in");
240 int32_t ret = CancelPrintJob(data.ReadString());
241 reply.WriteInt32(ret);
242 PRINT_HILOGD("PrintServiceStub::OnStartPrintJob out");
243 return ret == E_PRINT_NONE;
244 }
245
OnAddPrinters(MessageParcel &data, MessageParcel &reply)246 bool PrintServiceStub::OnAddPrinters(MessageParcel &data, MessageParcel &reply)
247 {
248 PRINT_HILOGI("PrintServiceStub::OnAddPrinters in");
249 std::vector<PrinterInfo> printerInfos;
250 uint32_t len = 0;
251 if (!data.ReadUint32(len)) {
252 PRINT_HILOGE("read data len failed.");
253 return false;
254 }
255 PRINT_HILOGD("OnStartDiscoverPrinter len = %{public}d", len);
256
257 if (len > PRINT_MAX_PRINT_COUNT) {
258 PRINT_HILOGE("len is out of range.");
259 reply.WriteInt32(E_PRINT_INVALID_PARAMETER);
260 return false;
261 }
262 for (uint32_t i = 0; i < len; i++) {
263 auto infoPtr = PrinterInfo::Unmarshalling(data);
264 if (infoPtr == nullptr) {
265 PRINT_HILOGW("invalid printer object");
266 continue;
267 }
268 infoPtr->Dump();
269 printerInfos.emplace_back(*infoPtr);
270 }
271 int32_t ret = E_PRINT_RPC_FAILURE;
272 if (printerInfos.size() > 0) {
273 ret = AddPrinters(printerInfos);
274 }
275 reply.WriteInt32(ret);
276 PRINT_HILOGD("PrintServiceStub::OnAddPrinters out");
277 return ret == E_PRINT_NONE;
278 }
279
OnQueryPrinterInfoByPrinterId(MessageParcel &data, MessageParcel &reply)280 bool PrintServiceStub::OnQueryPrinterInfoByPrinterId(MessageParcel &data, MessageParcel &reply)
281 {
282 PRINT_HILOGI("PrintServiceStub::OnQueryPrinterInfoByPrinterId in");
283 std::string printerId = data.ReadString();
284 PrinterInfo info;
285 int32_t ret = QueryPrinterInfoByPrinterId(printerId, info);
286 reply.WriteInt32(ret);
287 PRINT_HILOGI("PrintServiceStub::OnQueryPrinterInfoByPrinterId out %{public}s", info.GetPrinterName().c_str());
288 info.Marshalling(reply);
289 PRINT_HILOGI("PrintServiceStub::OnQueryPrinterInfoByPrinterId out");
290 return ret == E_PRINT_NONE;
291 }
292
OnGetPrinterPreference(MessageParcel &data, MessageParcel &reply)293 bool PrintServiceStub::OnGetPrinterPreference(MessageParcel &data, MessageParcel &reply)
294 {
295 PRINT_HILOGI("PrintServiceStub::OnGetPrinterPreference in");
296 std::string printerId = data.ReadString();
297 std::string printPreference;
298 int32_t ret = GetPrinterPreference(printerId, printPreference);
299 reply.WriteInt32(ret);
300 reply.WriteString(printPreference);
301 return ret == E_PRINT_NONE;
302 }
303
OnSetPrinterPreference(MessageParcel &data, MessageParcel &reply)304 bool PrintServiceStub::OnSetPrinterPreference(MessageParcel &data, MessageParcel &reply)
305 {
306 PRINT_HILOGI("PrintServiceStub::OnSetPrinterPreference in");
307 std::string printerId = data.ReadString();
308 std::string printPreference = data.ReadString();
309 int32_t ret = SetPrinterPreference(printerId, printPreference);
310 reply.WriteInt32(ret);
311 return ret == E_PRINT_NONE;
312 }
313
OnQueryAddedPrinter(MessageParcel &data, MessageParcel &reply)314 bool PrintServiceStub::OnQueryAddedPrinter(MessageParcel &data, MessageParcel &reply)
315 {
316 PRINT_HILOGI("PrintServiceStub::OnQueryAddedPrinter in");
317 std::vector<std::string> printerNameList;
318
319 int32_t ret = QueryAddedPrinter(printerNameList);
320 reply.WriteInt32(ret);
321 reply.WriteStringVector(printerNameList);
322
323 PRINT_HILOGI("PrintServiceStub::OnQueryAddedPrinter out");
324 return ret == E_PRINT_NONE;
325 }
326
OnQueryPrinterProperties(MessageParcel &data, MessageParcel &reply)327 bool PrintServiceStub::OnQueryPrinterProperties(MessageParcel &data, MessageParcel &reply)
328 {
329 PRINT_HILOGI("PrintServiceStub::OnQueryAddedPrinter in");
330 std::string printerId = data.ReadString();
331 std::vector<std::string> keyList;
332 data.ReadStringVector(&keyList);
333 std::vector<std::string> valueList;
334 int32_t ret = QueryPrinterProperties(printerId, keyList, valueList);
335 reply.WriteInt32(ret);
336 reply.WriteStringVector(valueList);
337 PRINT_HILOGI("PrintServiceStub::OnQueryAddedPrinter out");
338 return ret == E_PRINT_NONE;
339 }
340
OnStartNativePrintJob(MessageParcel &data, MessageParcel &reply)341 bool PrintServiceStub::OnStartNativePrintJob(MessageParcel &data, MessageParcel &reply)
342 {
343 PRINT_HILOGI("PrintServiceStub::OnStartNativePrintJob in");
344 int32_t ret = E_PRINT_RPC_FAILURE;
345 auto printJobPtr = PrintJob::Unmarshalling(data);
346 if (printJobPtr != nullptr) {
347 printJobPtr->Dump();
348 ret = StartNativePrintJob(*printJobPtr);
349 }
350 reply.WriteInt32(ret);
351 PRINT_HILOGD("PrintServiceStub::OnStartPrintJob out");
352 return ret == E_PRINT_NONE;
353 }
354
OnRemovePrinters(MessageParcel &data, MessageParcel &reply)355 bool PrintServiceStub::OnRemovePrinters(MessageParcel &data, MessageParcel &reply)
356 {
357 PRINT_HILOGI("PrintServiceStub::OnRemovePrinters in");
358 std::vector<std::string> printerIds;
359 data.ReadStringVector(&printerIds);
360 PRINT_HILOGD("OnStartDiscoverPrinter len = %{public}zd", printerIds.size());
361
362 if (printerIds.size() > PRINT_MAX_PRINT_COUNT) {
363 PRINT_HILOGE("printerIds'size is out of range.");
364 reply.WriteInt32(E_PRINT_INVALID_PARAMETER);
365 return false;
366 }
367 int32_t ret = RemovePrinters(printerIds);
368 reply.WriteInt32(ret);
369
370 PRINT_HILOGD("PrintServiceStub::OnRemovePrinters out");
371 return ret == E_PRINT_NONE;
372 }
373
OnUpdatePrinters(MessageParcel &data, MessageParcel &reply)374 bool PrintServiceStub::OnUpdatePrinters(MessageParcel &data, MessageParcel &reply)
375 {
376 PRINT_HILOGI("PrintServiceStub::OnUpdatePrinters in");
377 std::vector<PrinterInfo> printerInfos;
378 uint32_t len = 0;
379 if (!data.ReadUint32(len)) {
380 PRINT_HILOGE("read data len failed.");
381 return false;
382 }
383 PRINT_HILOGD("OnUpdatePrinters len = %{public}d", len);
384
385 if (len > PRINT_MAX_PRINT_COUNT) {
386 PRINT_HILOGE("len is out of range.");
387 reply.WriteInt32(E_PRINT_INVALID_PARAMETER);
388 return false;
389 }
390 for (uint32_t i = 0; i < len; i++) {
391 auto infoPtr = PrinterInfo::Unmarshalling(data);
392 if (infoPtr == nullptr) {
393 PRINT_HILOGW("invalid printer object");
394 continue;
395 }
396 infoPtr->Dump();
397 printerInfos.emplace_back(*infoPtr);
398 }
399 int32_t ret = E_PRINT_RPC_FAILURE;
400 if (printerInfos.size() > 0) {
401 ret = UpdatePrinters(printerInfos);
402 }
403 reply.WriteInt32(ret);
404 PRINT_HILOGD("PrintServiceStub::OnUpdatePrinters out");
405 return ret == E_PRINT_NONE;
406 }
407
OnUpdatePrinterState(MessageParcel &data, MessageParcel &reply)408 bool PrintServiceStub::OnUpdatePrinterState(MessageParcel &data, MessageParcel &reply)
409 {
410 PRINT_HILOGI("PrintServiceStub::OnUpdatePrinterState in");
411 std::string printerId = data.ReadString();
412 uint32_t state = data.ReadUint32();
413 int32_t ret = UpdatePrinterState(printerId, state);
414 reply.WriteInt32(ret);
415 PRINT_HILOGD("PrintServiceStub::OnUpdatePrinterState out");
416 return ret == E_PRINT_NONE;
417 }
418
OnUpdatePrintJobStateOnlyForSystemApp(MessageParcel &data, MessageParcel &reply)419 bool PrintServiceStub::OnUpdatePrintJobStateOnlyForSystemApp(MessageParcel &data, MessageParcel &reply)
420 {
421 PRINT_HILOGI("PrintServiceStub::OnUpdatePrintJobStateOnlyForSystemApp in");
422 std::string jobId = data.ReadString();
423 uint32_t state = data.ReadUint32();
424 uint32_t subState = data.ReadUint32();
425 PRINT_HILOGD("OnUpdatePrintJobStateOnlyForSystemApp jobId = %{public}s", jobId.c_str());
426 PRINT_HILOGD("OnUpdatePrintJobStateOnlyForSystemApp state = %{public}d", state);
427 PRINT_HILOGD("OnUpdatePrintJobStateOnlyForSystemApp subState = %{public}d", subState);
428
429 int32_t ret = UpdatePrintJobStateOnlyForSystemApp(jobId, state, subState);
430 reply.WriteInt32(ret);
431 PRINT_HILOGD("PrintServiceStub::OnUpdatePrintJobStateOnlyForSystemApp out");
432 return ret == E_PRINT_NONE;
433 }
434
OnUpdateExtensionInfo(MessageParcel &data, MessageParcel &reply)435 bool PrintServiceStub::OnUpdateExtensionInfo(MessageParcel &data, MessageParcel &reply)
436 {
437 PRINT_HILOGI("PrintServiceStub::OnUpdateExtensionInfo in");
438 std::string extInfo = data.ReadString();
439 PRINT_HILOGD("OnUpdateExtensionInfo extInfo = %{public}s", extInfo.c_str());
440
441 int32_t ret = UpdateExtensionInfo(extInfo);
442 reply.WriteInt32(ret);
443 PRINT_HILOGD("PrintServiceStub::OnUpdateExtensionInfo out");
444 return ret == E_PRINT_NONE;
445 }
446
OnRequestPreview(MessageParcel &data, MessageParcel &reply)447 bool PrintServiceStub::OnRequestPreview(MessageParcel &data, MessageParcel &reply)
448 {
449 PRINT_HILOGI("PrintServiceStub::OnRequestPreview in");
450 int32_t ret = E_PRINT_RPC_FAILURE;
451 std::string previewResult = "";
452 auto jobInfoPtr = PrintJob::Unmarshalling(data);
453 if (jobInfoPtr != nullptr) {
454 jobInfoPtr->Dump();
455 ret = RequestPreview(*jobInfoPtr, previewResult);
456 }
457 reply.WriteInt32(ret);
458 reply.WriteString(previewResult);
459 PRINT_HILOGD("PrintServiceStub::OnRequestPreview out");
460 return ret == E_PRINT_NONE;
461 }
462
OnQueryPrinterCapability(MessageParcel &data, MessageParcel &reply)463 bool PrintServiceStub::OnQueryPrinterCapability(MessageParcel &data, MessageParcel &reply)
464 {
465 PRINT_HILOGI("PrintServiceStub::OnQueryPrinterCapability in");
466 std::string printerId = data.ReadString();
467 PRINT_HILOGD("printerId : %{private}s", printerId.c_str());
468 int32_t ret = QueryPrinterCapability(printerId);
469 reply.WriteInt32(ret);
470 PRINT_HILOGD("PrintServiceStub::OnQueryPrinterCapability out");
471 return ret == E_PRINT_NONE;
472 }
473
OnQueryAllPrintJob(MessageParcel &data, MessageParcel &reply)474 bool PrintServiceStub::OnQueryAllPrintJob(MessageParcel &data, MessageParcel &reply)
475 {
476 PRINT_HILOGI("PrintServiceStub::OnQueryAllPrintJob in");
477 std::vector<PrintJob> printJob;
478 printJob.clear();
479 int32_t ret = QueryAllPrintJob(printJob);
480 reply.WriteInt32(ret);
481 if (ret == E_PRINT_NONE) {
482 uint32_t size = static_cast<uint32_t>(printJob.size());
483 reply.WriteUint32(size);
484 for (uint32_t index = 0; index < size; index++) {
485 printJob[index].Marshalling(reply);
486 }
487 }
488 PRINT_HILOGD("PrintServiceStub::OnQueryAllPrintJob out");
489 return ret == E_PRINT_NONE;
490 }
491
OnQueryPrintJobById(MessageParcel &data, MessageParcel &reply)492 bool PrintServiceStub::OnQueryPrintJobById(MessageParcel &data, MessageParcel &reply)
493 {
494 PRINT_HILOGI("PrintServiceStub::OnQueryPrintJobById in");
495 PrintJob printJob;
496 std::string printJobId = data.ReadString();
497 int32_t ret = QueryPrintJobById(printJobId, printJob);
498 reply.WriteInt32(ret);
499 printJob.Marshalling(reply);
500 PRINT_HILOGD("PrintServiceStub::OnQueryPrintJobById out");
501 return ret == E_PRINT_NONE;
502 }
503
OnAddPrinterToCups(MessageParcel &data, MessageParcel &reply)504 bool PrintServiceStub::OnAddPrinterToCups(MessageParcel &data, MessageParcel &reply)
505 {
506 PRINT_HILOGI("PrintServiceStub::OnAddPrinterToCups in");
507 std::string printerUri = data.ReadString();
508 std::string printerName = data.ReadString();
509 std::string printerMake = data.ReadString();
510 int32_t ret = AddPrinterToCups(printerUri, printerName, printerMake);
511 reply.WriteInt32(ret);
512 PRINT_HILOGD("PrintServiceStub::OnAddPrinterToCups out");
513 return ret == E_PRINT_NONE;
514 }
515
OnQueryPrinterCapabilityByUri(MessageParcel &data, MessageParcel &reply)516 bool PrintServiceStub::OnQueryPrinterCapabilityByUri(MessageParcel &data, MessageParcel &reply)
517 {
518 PRINT_HILOGI("PrintServiceStub::OnQueryPrinterCapabilityByUri in");
519 PrinterCapability printerCaps;
520 std::string printerUri = data.ReadString();
521 std::string printerId = data.ReadString();
522 int32_t ret = QueryPrinterCapabilityByUri(printerUri, printerId, printerCaps);
523 reply.WriteInt32(ret);
524 printerCaps.Marshalling(reply);
525 PRINT_HILOGD("PrintServiceStub::OnQueryPrinterCapabilityByUri out");
526 return ret == E_PRINT_NONE;
527 }
528
OnNotifyPrintServiceEvent(MessageParcel &data, MessageParcel &reply)529 bool PrintServiceStub::OnNotifyPrintServiceEvent(MessageParcel &data, MessageParcel &reply)
530 {
531 PRINT_HILOGI("PrintServiceStub::OnNotifyPrintServiceEvent in");
532 std::string jobId = data.ReadString();
533 uint32_t event = data.ReadUint32();
534 PRINT_HILOGD("OnNotifyPrintServiceEvent jobId = %{public}s, event = %{public}d", jobId.c_str(), event);
535 int32_t ret = NotifyPrintServiceEvent(jobId, event);
536 reply.WriteInt32(ret);
537 PRINT_HILOGD("PrintServiceStub::OnNotifyPrintServiceEvent out");
538 return ret == E_PRINT_NONE;
539 }
540
OnSetDefaultPrinter(MessageParcel &data, MessageParcel &reply)541 bool PrintServiceStub::OnSetDefaultPrinter(MessageParcel &data, MessageParcel &reply)
542 {
543 PRINT_HILOGI("PrintServiceStub::OnSetDefaultPrinter in");
544 std::string printerId = data.ReadString();
545 uint32_t type = data.ReadUint32();
546 int32_t ret = SetDefaultPrinter(printerId, type);
547 reply.WriteInt32(ret);
548 PRINT_HILOGD("PrintServiceStub::OnSetDefaultPrinter out");
549 return ret == E_PRINT_NONE;
550 }
551
OnDeletePrinterFromCups(MessageParcel &data, MessageParcel &reply)552 bool PrintServiceStub::OnDeletePrinterFromCups(MessageParcel &data, MessageParcel &reply)
553 {
554 PRINT_HILOGI("PrintServiceStub::OnDeletePrinterFromCups in");
555 std::string printerUri = data.ReadString();
556 std::string printerName = data.ReadString();
557 std::string printerMake = data.ReadString();
558 int32_t ret = DeletePrinterFromCups(printerUri, printerName, printerMake);
559 reply.WriteInt32(ret);
560 PRINT_HILOGD("PrintServiceStub::OnDeletePrinterFromCups out");
561 return ret == E_PRINT_NONE;
562 }
563
OnDiscoverUsbPrinters(MessageParcel &data, MessageParcel &reply)564 bool PrintServiceStub::OnDiscoverUsbPrinters(MessageParcel &data, MessageParcel &reply)
565 {
566 PRINT_HILOGI("PrintServiceStub::OnDiscoverUsbPrinters in");
567 std::vector<PrinterInfo> printers;
568 int32_t ret = DiscoverUsbPrinters(printers);
569 reply.WriteInt32(ret);
570 if (ret == E_PRINT_NONE) {
571 uint32_t size = static_cast<uint32_t>(printers.size());
572 reply.WriteUint32(size);
573 for (uint32_t index = 0; index < size; index++) {
574 printers[index].Marshalling(reply);
575 }
576 }
577 PRINT_HILOGD("PrintServiceStub::OnDiscoverUsbPrinters out");
578 return ret == E_PRINT_NONE;
579 }
580
OnEventOn(MessageParcel &data, MessageParcel &reply)581 bool PrintServiceStub::OnEventOn(MessageParcel &data, MessageParcel &reply)
582 {
583 std::string taskId = data.ReadString();
584 std::string type = data.ReadString();
585 PRINT_HILOGI("PrintServiceStub::OnEventOn type=%{public}s ", type.c_str());
586 if (type.empty()) {
587 PRINT_HILOGE("PrintServiceStub::OnEventOn type is null.");
588 reply.WriteInt32(E_PRINT_RPC_FAILURE);
589 return false;
590 }
591 sptr<IRemoteObject> remote = data.ReadRemoteObject();
592 if (remote == nullptr) {
593 PRINT_HILOGE("PrintServiceStub::OnEventOn remote is nullptr");
594 reply.WriteInt32(E_PRINT_RPC_FAILURE);
595 return false;
596 }
597 sptr<IPrintCallback> listener = iface_cast<IPrintCallback>(remote);
598 if (listener.GetRefPtr() == nullptr) {
599 PRINT_HILOGE("PrintServiceStub::OnEventOn listener is null");
600 reply.WriteInt32(E_PRINT_RPC_FAILURE);
601 return false;
602 }
603 int32_t ret = On(taskId, type, listener);
604 reply.WriteInt32(ret);
605 PRINT_HILOGD("PrintServiceStub::OnEventOn out");
606 return ret == E_PRINT_NONE;
607 }
608
OnEventOff(MessageParcel &data, MessageParcel &reply)609 bool PrintServiceStub::OnEventOff(MessageParcel &data, MessageParcel &reply)
610 {
611 PRINT_HILOGD("PrintServiceStub::OnEventOff in");
612 std::string taskId = data.ReadString();
613 std::string type = data.ReadString();
614 PRINT_HILOGI("PrintServiceStub::OnEventOff type=%{public}s ", type.c_str());
615 int32_t ret = Off(taskId, type);
616 reply.WriteInt32(ret);
617 PRINT_HILOGD("PrintServiceStub::OnEventOff out");
618 return ret == E_PRINT_NONE;
619 }
620
OnRegisterPrinterCallback(MessageParcel &data, MessageParcel &reply)621 bool PrintServiceStub::OnRegisterPrinterCallback(MessageParcel &data, MessageParcel &reply)
622 {
623 std::string type = data.ReadString();
624 if (type.empty()) {
625 PRINT_HILOGE("PrintServiceStub::OnEventOn type is null.");
626 reply.WriteInt32(E_PRINT_RPC_FAILURE);
627 return false;
628 }
629 PRINT_HILOGI("PrintServiceStub::OnRegisterPrinterCallback type=%{public}s ", type.c_str());
630 sptr<IRemoteObject> remote = data.ReadRemoteObject();
631 if (remote == nullptr) {
632 PRINT_HILOGE("PrintServiceStub::OnEventOn remote is nullptr");
633 reply.WriteInt32(E_PRINT_RPC_FAILURE);
634 return false;
635 }
636 sptr<IPrintCallback> listener = iface_cast<IPrintCallback>(remote);
637 if (listener.GetRefPtr() == nullptr) {
638 PRINT_HILOGE("PrintServiceStub::OnEventOn listener is null");
639 reply.WriteInt32(E_PRINT_RPC_FAILURE);
640 return false;
641 }
642 int32_t ret = RegisterPrinterCallback(type, listener);
643 reply.WriteInt32(ret);
644 PRINT_HILOGD("PrintServiceStub::OnRegisterPrinterCallback out");
645 return ret == E_PRINT_NONE;
646 }
647
OnUnregisterPrinterCallback(MessageParcel &data, MessageParcel &reply)648 bool PrintServiceStub::OnUnregisterPrinterCallback(MessageParcel &data, MessageParcel &reply)
649 {
650 std::string type = data.ReadString();
651 if (type.empty()) {
652 reply.WriteInt32(E_PRINT_RPC_FAILURE);
653 return false;
654 }
655 PRINT_HILOGI("PrintServiceStub::OnUnregisterPrinterCallback type=%{public}s ", type.c_str());
656 int32_t ret = UnregisterPrinterCallback(type);
657 reply.WriteInt32(ret);
658 PRINT_HILOGD("PrintServiceStub::OnUnregisterPrinterCallback out");
659 return ret == E_PRINT_NONE;
660 }
661
OnRegisterExtCallback(MessageParcel &data, MessageParcel &reply)662 bool PrintServiceStub::OnRegisterExtCallback(MessageParcel &data, MessageParcel &reply)
663 {
664 PRINT_HILOGI("PrintServiceStub::OnRegisterExtCallback in");
665 std::string extensionCID = data.ReadString();
666 sptr<IRemoteObject> remote = data.ReadRemoteObject();
667 if (remote == nullptr) {
668 PRINT_HILOGD("PrintServiceStub::OnRegisterExtCallback remote is nullptr");
669 reply.WriteInt32(E_PRINT_RPC_FAILURE);
670 return false;
671 }
672 sptr<IPrintExtensionCallback> listener = iface_cast<IPrintExtensionCallback>(remote);
673 if (listener.GetRefPtr() == nullptr) {
674 PRINT_HILOGD("PrintServiceStub::OnRegisterExtCallback listener is null");
675 reply.WriteInt32(E_PRINT_RPC_FAILURE);
676 return false;
677 }
678
679 int32_t ret = RegisterExtCallback(extensionCID, listener);
680 reply.WriteInt32(ret);
681 PRINT_HILOGD("PrintServiceStub::OnRegisterExtCallback out");
682 return ret == E_PRINT_NONE;
683 }
684
OnUnregisterAllExtCallback(MessageParcel &data, MessageParcel &reply)685 bool PrintServiceStub::OnUnregisterAllExtCallback(MessageParcel &data, MessageParcel &reply)
686 {
687 PRINT_HILOGI("PrintServiceStub::OnUnregisterAllExtCallback in");
688 std::string extensionId = data.ReadString();
689 int32_t ret = UnregisterAllExtCallback(extensionId);
690 reply.WriteInt32(ret);
691 PRINT_HILOGD("PrintServiceStub::OnUnregisterAllExtCallback out");
692 return ret == E_PRINT_NONE;
693 }
694
OnLoadExtSuccess(MessageParcel &data, MessageParcel &reply)695 bool PrintServiceStub::OnLoadExtSuccess(MessageParcel &data, MessageParcel &reply)
696 {
697 PRINT_HILOGI("PrintServiceStub::OnLoadExtSuccess in");
698 std::string extensionId = data.ReadString();
699 int32_t ret = LoadExtSuccess(extensionId);
700 reply.WriteInt32(ret);
701 PRINT_HILOGD("PrintServiceStub::OnLoadExtSuccess out");
702 return ret == E_PRINT_NONE;
703 }
704
OnPrintByAdapter(MessageParcel &data, MessageParcel &reply)705 bool PrintServiceStub::OnPrintByAdapter(MessageParcel &data, MessageParcel &reply)
706 {
707 PRINT_HILOGI("PrintServiceStub::OnPrintByAdapter in");
708 int32_t ret = E_PRINT_RPC_FAILURE;
709 std::string jobName = data.ReadString();
710 auto attrs = PrintAttributes::Unmarshalling(data);
711 std::string taskId = data.ReadString();
712 if (attrs != nullptr) {
713 attrs->Dump();
714 ret = PrintByAdapter(jobName, *attrs, taskId);
715 }
716 reply.WriteInt32(ret);
717 PRINT_HILOGI("PrintServiceStub::OnPrintByAdapter out");
718 return ret == E_PRINT_NONE;
719 }
720
OnStartGetPrintFile(MessageParcel &data, MessageParcel &reply)721 bool PrintServiceStub::OnStartGetPrintFile(MessageParcel &data, MessageParcel &reply)
722 {
723 PRINT_HILOGI("PrintServiceStub::OnStartGetPrintFile in");
724 int32_t ret = E_PRINT_RPC_FAILURE;
725 std::string jobId = data.ReadString();
726 auto attrs = PrintAttributes::Unmarshalling(data);
727 uint32_t fd = static_cast<uint32_t>(data.ReadFileDescriptor());
728 if (attrs != nullptr) {
729 ret = StartGetPrintFile(jobId, *attrs, fd);
730 }
731 reply.WriteInt32(ret);
732 PRINT_HILOGI("PrintServiceStub::OnStartGetPrintFile out");
733 return ret == E_PRINT_NONE;
734 }
735
OnNotifyPrintService(MessageParcel &data, MessageParcel &reply)736 bool PrintServiceStub::OnNotifyPrintService(MessageParcel &data, MessageParcel &reply)
737 {
738 PRINT_HILOGI("PrintServiceStub::OnNotifyPrintService in");
739 std::string jobId = data.ReadString();
740 std::string type = data.ReadString();
741 PRINT_HILOGD(
742 "PrintServiceStub::OnNotifyPrintService jobId=%{public}s type=%{public}s ", jobId.c_str(), type.c_str());
743 int32_t ret = NotifyPrintService(jobId, type);
744 reply.WriteInt32(ret);
745 PRINT_HILOGD("PrintServiceStub::OnNotifyPrintService out");
746 return ret == E_PRINT_NONE;
747 }
748
749
OnAddPrinterToDiscovery(MessageParcel &data, MessageParcel &reply)750 bool PrintServiceStub::OnAddPrinterToDiscovery(MessageParcel &data, MessageParcel &reply)
751 {
752 PRINT_HILOGI("PrintServiceStub::OnAddPrinterToDiscovery in");
753 auto infoPtr = PrinterInfo::Unmarshalling(data);
754 if (infoPtr == nullptr) {
755 PRINT_HILOGW("invalid printer object");
756 reply.WriteInt32(E_PRINT_RPC_FAILURE);
757 PRINT_HILOGD("PrintServiceStub::OnAddPrinterToDiscovery out with failure");
758 return false;
759 }
760 infoPtr->Dump();
761 int32_t ret = AddPrinterToDiscovery(*infoPtr);
762 reply.WriteInt32(ret);
763 PRINT_HILOGD("PrintServiceStub::OnAddPrinterToDiscovery out with ret = %{public}d", ret);
764 return ret == E_PRINT_NONE;
765 }
766
OnUpdatePrinterInDiscovery(MessageParcel &data, MessageParcel &reply)767 bool PrintServiceStub::OnUpdatePrinterInDiscovery(MessageParcel &data, MessageParcel &reply)
768 {
769 PRINT_HILOGI("PrintServiceStub::OnUpdatePrinterInDiscovery in");
770
771 auto infoPtr = PrinterInfo::Unmarshalling(data);
772 if (infoPtr == nullptr) {
773 PRINT_HILOGE("Failed to unmarshall printer info");
774 reply.WriteInt32(E_PRINT_RPC_FAILURE);
775 return false;
776 }
777
778 infoPtr->Dump();
779 int32_t ret = UpdatePrinterInDiscovery(*infoPtr);
780 reply.WriteInt32(ret);
781
782 PRINT_HILOGD("PrintServiceStub::OnUpdatePrinterInDiscovery out");
783 return ret == E_PRINT_NONE;
784 }
785
OnRemovePrinterFromDiscovery(MessageParcel &data, MessageParcel &reply)786 bool PrintServiceStub::OnRemovePrinterFromDiscovery(MessageParcel &data, MessageParcel &reply)
787 {
788 PRINT_HILOGI("PrintServiceStub::OnRemovePrinterFromDiscovery in");
789
790 std::string printerId = data.ReadString();
791
792 int32_t ret = RemovePrinterFromDiscovery(printerId);
793 reply.WriteInt32(ret);
794
795 PRINT_HILOGD("PrintServiceStub::OnRemovePrinterFromDiscovery out");
796 return ret == E_PRINT_NONE;
797 }
798
799 } // namespace OHOS::Print
800