162cb372279f0237f759d3fe8a7e03d8272ba327fynwang/*
262cb372279f0237f759d3fe8a7e03d8272ba327fynwang * Copyright (C) 2016 The Android Open Source Project
362cb372279f0237f759d3fe8a7e03d8272ba327fynwang *
462cb372279f0237f759d3fe8a7e03d8272ba327fynwang * Licensed under the Apache License, Version 2.0 (the "License");
562cb372279f0237f759d3fe8a7e03d8272ba327fynwang * you may not use this file except in compliance with the License.
662cb372279f0237f759d3fe8a7e03d8272ba327fynwang * You may obtain a copy of the License at
762cb372279f0237f759d3fe8a7e03d8272ba327fynwang *
862cb372279f0237f759d3fe8a7e03d8272ba327fynwang *      http://www.apache.org/licenses/LICENSE-2.0
962cb372279f0237f759d3fe8a7e03d8272ba327fynwang *
1062cb372279f0237f759d3fe8a7e03d8272ba327fynwang * Unless required by applicable law or agreed to in writing, software
1162cb372279f0237f759d3fe8a7e03d8272ba327fynwang * distributed under the License is distributed on an "AS IS" BASIS,
1262cb372279f0237f759d3fe8a7e03d8272ba327fynwang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1362cb372279f0237f759d3fe8a7e03d8272ba327fynwang * See the License for the specific language governing permissions and
1462cb372279f0237f759d3fe8a7e03d8272ba327fynwang * limitations under the License.
1562cb372279f0237f759d3fe8a7e03d8272ba327fynwang */
1662cb372279f0237f759d3fe8a7e03d8272ba327fynwang
1762cb372279f0237f759d3fe8a7e03d8272ba327fynwang#ifndef _STORAGED_SERVICE_H_
1862cb372279f0237f759d3fe8a7e03d8272ba327fynwang#define _STORAGED_SERVICE_H_
1962cb372279f0237f759d3fe8a7e03d8272ba327fynwang
2062cb372279f0237f759d3fe8a7e03d8272ba327fynwang#include <vector>
2162cb372279f0237f759d3fe8a7e03d8272ba327fynwang
2262cb372279f0237f759d3fe8a7e03d8272ba327fynwang#include <binder/IInterface.h>
2362cb372279f0237f759d3fe8a7e03d8272ba327fynwang#include <binder/IBinder.h>
2462cb372279f0237f759d3fe8a7e03d8272ba327fynwang
2562cb372279f0237f759d3fe8a7e03d8272ba327fynwang#include "storaged.h"
2662cb372279f0237f759d3fe8a7e03d8272ba327fynwang
2762cb372279f0237f759d3fe8a7e03d8272ba327fynwangusing namespace android;
2862cb372279f0237f759d3fe8a7e03d8272ba327fynwang
2962cb372279f0237f759d3fe8a7e03d8272ba327fynwang// Interface
3062cb372279f0237f759d3fe8a7e03d8272ba327fynwangclass IStoraged : public IInterface {
3162cb372279f0237f759d3fe8a7e03d8272ba327fynwangpublic:
3262cb372279f0237f759d3fe8a7e03d8272ba327fynwang    enum {
3388ad33eff1fd70d276f9be70164afeb0dc639e58Jin Qian        DUMPUIDS  = IBinder::FIRST_CALL_TRANSACTION,
3462cb372279f0237f759d3fe8a7e03d8272ba327fynwang    };
3562cb372279f0237f759d3fe8a7e03d8272ba327fynwang    // Request the service to run the test function
36bcd6e3b9d92b2eea3b054372c9adf00a1e6235bcJin Qian    virtual std::vector<struct uid_info> dump_uids(const char* option) = 0;
3762cb372279f0237f759d3fe8a7e03d8272ba327fynwang
3862cb372279f0237f759d3fe8a7e03d8272ba327fynwang    DECLARE_META_INTERFACE(Storaged);
3962cb372279f0237f759d3fe8a7e03d8272ba327fynwang};
4062cb372279f0237f759d3fe8a7e03d8272ba327fynwang
4162cb372279f0237f759d3fe8a7e03d8272ba327fynwang// Client
4262cb372279f0237f759d3fe8a7e03d8272ba327fynwangclass BpStoraged : public BpInterface<IStoraged> {
4362cb372279f0237f759d3fe8a7e03d8272ba327fynwangpublic:
4462cb372279f0237f759d3fe8a7e03d8272ba327fynwang    BpStoraged(const sp<IBinder>& impl) : BpInterface<IStoraged>(impl){};
45bcd6e3b9d92b2eea3b054372c9adf00a1e6235bcJin Qian    virtual std::vector<struct uid_info> dump_uids(const char* option);
4662cb372279f0237f759d3fe8a7e03d8272ba327fynwang};
4762cb372279f0237f759d3fe8a7e03d8272ba327fynwang
4862cb372279f0237f759d3fe8a7e03d8272ba327fynwang// Server
4962cb372279f0237f759d3fe8a7e03d8272ba327fynwangclass BnStoraged : public BnInterface<IStoraged> {
5062cb372279f0237f759d3fe8a7e03d8272ba327fynwang    virtual status_t onTransact(uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags = 0);
5162cb372279f0237f759d3fe8a7e03d8272ba327fynwang};
5262cb372279f0237f759d3fe8a7e03d8272ba327fynwang
5362cb372279f0237f759d3fe8a7e03d8272ba327fynwangclass Storaged : public BnStoraged {
54bcd6e3b9d92b2eea3b054372c9adf00a1e6235bcJin Qian    virtual std::vector<struct uid_info> dump_uids(const char* option);
55a2e5bd1347fe2e70d6eb0b54b5b077cdf14cabcfJin Qian    virtual status_t dump(int fd, const Vector<String16>& args);
5662cb372279f0237f759d3fe8a7e03d8272ba327fynwang};
5762cb372279f0237f759d3fe8a7e03d8272ba327fynwang
5862cb372279f0237f759d3fe8a7e03d8272ba327fynwangsp<IStoraged> get_storaged_service();
5962cb372279f0237f759d3fe8a7e03d8272ba327fynwang
6062cb372279f0237f759d3fe8a7e03d8272ba327fynwang#endif /* _STORAGED_SERVICE_H_ */