1a34a8711Sopenharmony_ci/*
2a34a8711Sopenharmony_ci * Copyright (C) 2022 Huawei Device Co., Ltd.
3a34a8711Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4a34a8711Sopenharmony_ci * you may not use this file except in compliance with the License.
5a34a8711Sopenharmony_ci * You may obtain a copy of the License at
6a34a8711Sopenharmony_ci *
7a34a8711Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8a34a8711Sopenharmony_ci *
9a34a8711Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10a34a8711Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11a34a8711Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12a34a8711Sopenharmony_ci * See the License for the specific language governing permissions and
13a34a8711Sopenharmony_ci * limitations under the License.
14a34a8711Sopenharmony_ci */
15a34a8711Sopenharmony_ci
16a34a8711Sopenharmony_ci#ifndef OHOS_RPC_FOO_TEST_H
17a34a8711Sopenharmony_ci#define OHOS_RPC_FOO_TEST_H
18a34a8711Sopenharmony_ci
19a34a8711Sopenharmony_ci#include "iremote_broker.h"
20a34a8711Sopenharmony_ci#include "iremote_object.h"
21a34a8711Sopenharmony_ci#include "iremote_proxy.h"
22a34a8711Sopenharmony_ci#include "iremote_stub.h"
23a34a8711Sopenharmony_ci#include "message_parcel.h"
24a34a8711Sopenharmony_ci
25a34a8711Sopenharmony_cinamespace OHOS {
26a34a8711Sopenharmony_ci#define RPC_ACCESS_TOKEN_FLAG 0x1
27a34a8711Sopenharmony_ci#define INVAL_TOKEN_ID 0x0
28a34a8711Sopenharmony_ciclass IRpcFooTest : public IRemoteBroker {
29a34a8711Sopenharmony_cipublic:
30a34a8711Sopenharmony_ci    enum FooInterFaceId {
31a34a8711Sopenharmony_ci        GET_FOO_NAME = 0,
32a34a8711Sopenharmony_ci        SEND_ASYNC_REPLY = 1,
33a34a8711Sopenharmony_ci        SEND_WRONG_REPLY = 2,
34a34a8711Sopenharmony_ci        GET_TOKENID = 3,
35a34a8711Sopenharmony_ci        TEST_REMOTE_OBJECT = 4,
36a34a8711Sopenharmony_ci        TEST_ADD = 5,
37a34a8711Sopenharmony_ci    };
38a34a8711Sopenharmony_ci    std::string GetFooName(void);
39a34a8711Sopenharmony_ci    virtual std::string TestGetFooName(void) = 0;
40a34a8711Sopenharmony_ci    virtual int32_t TestAccessToken(MessageParcel &data, MessageParcel &reply) = 0;
41a34a8711Sopenharmony_ci    virtual int32_t TestRemoteObject(MessageParcel &data, MessageParcel &reply) = 0;
42a34a8711Sopenharmony_ci    virtual int32_t TestAdd(MessageParcel &data, MessageParcel &reply) = 0;
43a34a8711Sopenharmony_cipublic:
44a34a8711Sopenharmony_ci    DECLARE_INTERFACE_DESCRIPTOR(u"test.rpc.IRpcFooTest");
45a34a8711Sopenharmony_ciprivate:
46a34a8711Sopenharmony_ci    std::string fooName_ = "IRpcFooTest";
47a34a8711Sopenharmony_ci};
48a34a8711Sopenharmony_ci
49a34a8711Sopenharmony_ciclass RpcFooStub : public IRemoteStub<IRpcFooTest> {
50a34a8711Sopenharmony_cipublic:
51a34a8711Sopenharmony_ci    int OnRemoteRequest(uint32_t code,
52a34a8711Sopenharmony_ci        MessageParcel &data, MessageParcel &reply, MessageOption &option) override;
53a34a8711Sopenharmony_ci    std::string TestGetFooName(void) override;
54a34a8711Sopenharmony_ci    int32_t TestAccessToken(MessageParcel &data, MessageParcel &reply) override;
55a34a8711Sopenharmony_ci    int32_t TestRemoteObject(MessageParcel &data, MessageParcel &reply) override;
56a34a8711Sopenharmony_ci    int32_t TestAdd(MessageParcel &data, MessageParcel &reply) override;
57a34a8711Sopenharmony_ci};
58a34a8711Sopenharmony_ci
59a34a8711Sopenharmony_ciclass RpcFooProxy : public IRemoteProxy<IRpcFooTest> {
60a34a8711Sopenharmony_cipublic:
61a34a8711Sopenharmony_ci    explicit RpcFooProxy(const sptr<IRemoteObject> &impl);
62a34a8711Sopenharmony_ci    ~RpcFooProxy() = default;
63a34a8711Sopenharmony_ci    std::string TestGetFooName(void) override;
64a34a8711Sopenharmony_ci    int32_t TestAccessToken(MessageParcel &data, MessageParcel &reply) override;
65a34a8711Sopenharmony_ci    int32_t TestRemoteObject(MessageParcel &data, MessageParcel &reply) override;
66a34a8711Sopenharmony_ci    int32_t TestAdd(MessageParcel &data, MessageParcel &reply) override;
67a34a8711Sopenharmony_ciprivate:
68a34a8711Sopenharmony_ci    static inline BrokerDelegator<RpcFooProxy> delegator_;
69a34a8711Sopenharmony_ci};
70a34a8711Sopenharmony_ci
71a34a8711Sopenharmony_ciclass RpcDeathRecipient : public IRemoteObject::DeathRecipient {
72a34a8711Sopenharmony_cipublic:
73a34a8711Sopenharmony_ci    virtual void OnRemoteDied(const wptr<IRemoteObject> &remote);
74a34a8711Sopenharmony_ci    RpcDeathRecipient();
75a34a8711Sopenharmony_ci    virtual ~RpcDeathRecipient();
76a34a8711Sopenharmony_ci};
77a34a8711Sopenharmony_ci} // namespace OHOS
78a34a8711Sopenharmony_ci#endif // OHOS_RPC_FOO_TEST_H
79a34a8711Sopenharmony_ci
80