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_extension_callback_stub.h"
17
18 #include "print_constant.h"
19 #include "print_log.h"
20 #include "print_resolution.h"
21
22 namespace OHOS::Print {
PrintExtensionCallbackStub()23 PrintExtensionCallbackStub::PrintExtensionCallbackStub() : extCb_(nullptr), jobCb_(nullptr),
24 cb_(nullptr), capability_(nullptr)
25 {
26 cmdMap_[PRINT_EXTCB] = &PrintExtensionCallbackStub::HandleExtCallback;
27 cmdMap_[PRINT_EXTCB_PRINTER] = &PrintExtensionCallbackStub::HandlePrinterCallback;
28 cmdMap_[PRINT_EXTCB_PRINTJOB] = &PrintExtensionCallbackStub::HandlePrintJobCallback;
29 cmdMap_[PRINT_EXTCB_PRINTCAPABILITY] = &PrintExtensionCallbackStub::HandleCapabilityCallback;
30 }
31
OnRemoteRequest(uint32_t code,MessageParcel & data,MessageParcel & reply,MessageOption & option)32 int32_t PrintExtensionCallbackStub::OnRemoteRequest(
33 uint32_t code, MessageParcel &data, MessageParcel &reply, MessageOption &option)
34 {
35 PRINT_HILOGD("OnRemoteRequest started, code = %{public}d", code);
36 auto descriptorToken = data.ReadInterfaceToken();
37 if (descriptorToken != GetDescriptor()) {
38 PRINT_HILOGE("Remote descriptor not the same as local descriptor.");
39 return E_PRINT_RPC_FAILURE;
40 }
41
42 auto itFunc = cmdMap_.find(code);
43 if (itFunc != cmdMap_.end()) {
44 auto requestFunc = itFunc->second;
45 if (requestFunc != nullptr) {
46 bool result = (this->*requestFunc)(data, reply);
47 return result ? E_PRINT_NONE : E_PRINT_SERVER_FAILURE;
48 }
49 }
50 PRINT_HILOGW("default case, need check.");
51 return IPCObjectStub::OnRemoteRequest(code, data, reply, option);
52 }
53
OnCallback()54 bool PrintExtensionCallbackStub::OnCallback()
55 {
56 if (extCb_ != nullptr) {
57 return extCb_();
58 }
59 return false;
60 }
61
OnCallback(const std::string & printerId)62 bool PrintExtensionCallbackStub::OnCallback(const std::string &printerId)
63 {
64 if (cb_ != nullptr) {
65 return cb_(printerId);
66 }
67 return false;
68 }
69
OnCallback(const PrintJob & job)70 bool PrintExtensionCallbackStub::OnCallback(const PrintJob &job)
71 {
72 if (jobCb_ != nullptr) {
73 return jobCb_(job);
74 }
75 return false;
76 }
77
OnCallback(const std::string & printerId,PrinterCapability & cap)78 bool PrintExtensionCallbackStub::OnCallback(const std::string &printerId, PrinterCapability &cap)
79 {
80 if (capability_ != nullptr) {
81 if (capability_(printerId, cap)) {
82 return true;
83 }
84 }
85 return false;
86 }
87
SetExtCallback(PrintExtCallback cb)88 void PrintExtensionCallbackStub::SetExtCallback(PrintExtCallback cb)
89 {
90 extCb_ = cb;
91 }
92
SetPrintJobCallback(PrintJobCallback cb)93 void PrintExtensionCallbackStub::SetPrintJobCallback(PrintJobCallback cb)
94 {
95 jobCb_ = cb;
96 }
97
SetPrinterCallback(PrinterCallback cb)98 void PrintExtensionCallbackStub::SetPrinterCallback(PrinterCallback cb)
99 {
100 cb_ = cb;
101 }
102
SetCapabilityCallback(PrinterCapabilityCallback cb)103 void PrintExtensionCallbackStub::SetCapabilityCallback(PrinterCapabilityCallback cb)
104 {
105 capability_ = cb;
106 }
107
HandleExtCallback(MessageParcel & data,MessageParcel & reply)108 bool PrintExtensionCallbackStub::HandleExtCallback(MessageParcel &data, MessageParcel &reply)
109 {
110 bool result = OnCallback();
111 PRINT_HILOGI("Handle Print Extension Callback ret[%{public}d]", result);
112 reply.WriteBool(result);
113 return result;
114 }
115
HandlePrinterCallback(MessageParcel & data,MessageParcel & reply)116 bool PrintExtensionCallbackStub::HandlePrinterCallback(MessageParcel &data, MessageParcel &reply)
117 {
118 std::string printerId = data.ReadString();
119 bool result = OnCallback(printerId);
120 PRINT_HILOGI("Handle Printer Extension Callback ret[%{public}d]", result);
121 reply.WriteBool(result);
122 return result;
123 }
124
HandlePrintJobCallback(MessageParcel & data,MessageParcel & reply)125 bool PrintExtensionCallbackStub::HandlePrintJobCallback(MessageParcel &data, MessageParcel &reply)
126 {
127 auto printJobPtr = PrintJob::Unmarshalling(data);
128 bool result = false;
129 if (printJobPtr != nullptr) {
130 result = OnCallback(*printJobPtr);
131 PRINT_HILOGI("Handle Print Job Extension Callback ret[%{public}d]", result);
132 reply.WriteBool(result);
133 }
134 return result;
135 }
136
HandleCapabilityCallback(MessageParcel & data,MessageParcel & reply)137 bool PrintExtensionCallbackStub::HandleCapabilityCallback(MessageParcel &data, MessageParcel &reply)
138 {
139 std::string printerId = data.ReadString();
140 PrinterCapability cap;
141 bool result = OnCallback(printerId, cap);
142 PRINT_HILOGI("Handle Printer Capability Extension Callback ret[%{public}d]", result);
143 reply.WriteBool(result);
144 cap.Marshalling(reply);
145 return result;
146 }
147 } // namespace OHOS::Print
148