• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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