1 /* 2 * Copyright (C) 2020 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 interface IBinderRpcTest { sendString(@tf8InCpp String str)18 oneway void sendString(@utf8InCpp String str); doubleString(@tf8InCpp String str)19 @utf8InCpp String doubleString(@utf8InCpp String str); 20 21 // get the port that a client used to connect to this object getClientPort()22 int getClientPort(); 23 24 // number of known RPC binders to process, RpcState::countBinders by session countBinders()25 int[] countBinders(); 26 27 // Return a null binder with a non-nullable return type. getNullBinder()28 IBinder getNullBinder(); 29 30 // Caller sends server, callee pings caller's server and returns error code. pingMe(IBinder binder)31 int pingMe(IBinder binder); repeatBinder(@ullable IBinder binder)32 @nullable IBinder repeatBinder(@nullable IBinder binder); 33 holdBinder(@ullable IBinder binder)34 void holdBinder(@nullable IBinder binder); getHeldBinder()35 @nullable IBinder getHeldBinder(); 36 37 // Idea is client creates its own instance of IBinderRpcTest and calls this, 38 // and the server calls 'binder' with (calls - 1) passing itself as 'binder', 39 // going back and forth until calls = 0 nestMe(IBinderRpcTest binder, int calls)40 void nestMe(IBinderRpcTest binder, int calls); 41 42 // should always return the same binder alwaysGiveMeTheSameBinder()43 IBinder alwaysGiveMeTheSameBinder(); 44 45 // Idea is that the server will not hold onto the session, the remote session 46 // object must. This is to test lifetimes of binder objects, and consequently, also 47 // identity (since by assigning sessions names, we can make sure a section always 48 // references the session it was originally opened with). openSession(@tf8InCpp String name)49 IBinderRpcSession openSession(@utf8InCpp String name); 50 51 // Decremented in ~IBinderRpcSession getNumOpenSessions()52 int getNumOpenSessions(); 53 54 // primitives to test threading behavior lock()55 void lock(); unlockInMsAsync(int ms)56 oneway void unlockInMsAsync(int ms); lockUnlock()57 void lockUnlock(); // locks and unlocks a mutex 58 59 // take up binder thread for some time sleepMs(int ms)60 void sleepMs(int ms); sleepMsAsync(int ms)61 oneway void sleepMsAsync(int ms); 62 doCallback(IBinderRpcCallback callback, boolean isOneway, boolean delayed, @utf8InCpp String value)63 void doCallback(IBinderRpcCallback callback, boolean isOneway, boolean delayed, @utf8InCpp String value); doCallbackAsync(IBinderRpcCallback callback, boolean isOneway, boolean delayed, @utf8InCpp String value)64 oneway void doCallbackAsync(IBinderRpcCallback callback, boolean isOneway, boolean delayed, @utf8InCpp String value); 65 die(boolean cleanup)66 void die(boolean cleanup); scheduleShutdown()67 void scheduleShutdown(); 68 useKernelBinderCallingId()69 void useKernelBinderCallingId(); 70 echoAsFile(@tf8InCpp String content)71 ParcelFileDescriptor echoAsFile(@utf8InCpp String content); 72 concatFiles(in List<ParcelFileDescriptor> files)73 ParcelFileDescriptor concatFiles(in List<ParcelFileDescriptor> files); 74 75 // FDs sent via `blockingSendFdOneway` can be received via 76 // `blockingRecvFd`. The handler for `blockingSendFdOneway` will block 77 // until the next `blockingRecvFd` call. 78 // 79 // This is useful for carefully controlling how/when oneway transactions 80 // get queued. blockingSendFdOneway(in ParcelFileDescriptor fd)81 oneway void blockingSendFdOneway(in ParcelFileDescriptor fd); blockingRecvFd()82 ParcelFileDescriptor blockingRecvFd(); 83 84 // Same as blockingSendFdOneway, but with integers. blockingSendIntOneway(int n)85 oneway void blockingSendIntOneway(int n); blockingRecvInt()86 int blockingRecvInt(); 87 } 88