• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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