/* * Copyright (C) 2020 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ interface IBinderRpcTest { oneway void sendString(@utf8InCpp String str); @utf8InCpp String doubleString(@utf8InCpp String str); // get the port that a client used to connect to this object int getClientPort(); // number of known RPC binders to process, RpcState::countBinders by session int[] countBinders(); // Return a null binder with a non-nullable return type. IBinder getNullBinder(); // Caller sends server, callee pings caller's server and returns error code. int pingMe(IBinder binder); @nullable IBinder repeatBinder(@nullable IBinder binder); void holdBinder(@nullable IBinder binder); @nullable IBinder getHeldBinder(); // Idea is client creates its own instance of IBinderRpcTest and calls this, // and the server calls 'binder' with (calls - 1) passing itself as 'binder', // going back and forth until calls = 0 void nestMe(IBinderRpcTest binder, int calls); // should always return the same binder IBinder alwaysGiveMeTheSameBinder(); // Idea is that the server will not hold onto the session, the remote session // object must. This is to test lifetimes of binder objects, and consequently, also // identity (since by assigning sessions names, we can make sure a section always // references the session it was originally opened with). IBinderRpcSession openSession(@utf8InCpp String name); // Decremented in ~IBinderRpcSession int getNumOpenSessions(); // primitives to test threading behavior void lock(); oneway void unlockInMsAsync(int ms); void lockUnlock(); // locks and unlocks a mutex // take up binder thread for some time void sleepMs(int ms); oneway void sleepMsAsync(int ms); void doCallback(IBinderRpcCallback callback, boolean isOneway, boolean delayed, @utf8InCpp String value); oneway void doCallbackAsync(IBinderRpcCallback callback, boolean isOneway, boolean delayed, @utf8InCpp String value); void die(boolean cleanup); void scheduleShutdown(); void useKernelBinderCallingId(); ParcelFileDescriptor echoAsFile(@utf8InCpp String content); ParcelFileDescriptor concatFiles(in List files); // FDs sent via `blockingSendFdOneway` can be received via // `blockingRecvFd`. The handler for `blockingSendFdOneway` will block // until the next `blockingRecvFd` call. // // This is useful for carefully controlling how/when oneway transactions // get queued. oneway void blockingSendFdOneway(in ParcelFileDescriptor fd); ParcelFileDescriptor blockingRecvFd(); // Same as blockingSendFdOneway, but with integers. oneway void blockingSendIntOneway(int n); int blockingRecvInt(); }