blob: 116476765af193c3703c9af39d7e6be9285062b4 [file] [log] [blame]
Steven Moreland5553ac42020-11-11 02:14:45 +00001/*
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
17interface IBinderRpcTest {
18 oneway void sendString(@utf8InCpp String str);
19 @utf8InCpp String doubleString(@utf8InCpp String str);
20
Steven Moreland51c44a92021-10-14 16:50:35 -070021 // get the port that a client used to connect to this object
22 int getClientPort();
23
Steven Morelandbdb53ab2021-05-05 17:57:41 +000024 // number of known RPC binders to process, RpcState::countBinders by session
Steven Moreland736664b2021-05-01 04:27:25 +000025 int[] countBinders();
Steven Moreland5553ac42020-11-11 02:14:45 +000026
Frederick Mayleae9deeb2022-06-23 23:42:08 +000027 // Return a null binder with a non-nullable return type.
28 IBinder getNullBinder();
29
Steven Moreland5553ac42020-11-11 02:14:45 +000030 // Caller sends server, callee pings caller's server and returns error code.
31 int pingMe(IBinder binder);
32 @nullable IBinder repeatBinder(@nullable IBinder binder);
33
34 void holdBinder(@nullable IBinder binder);
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
40 void nestMe(IBinderRpcTest binder, int calls);
41
42 // should always return the same binder
43 IBinder alwaysGiveMeTheSameBinder();
44
Steven Morelandbdb53ab2021-05-05 17:57:41 +000045 // Idea is that the server will not hold onto the session, the remote session
Steven Moreland5553ac42020-11-11 02:14:45 +000046 // 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).
49 IBinderRpcSession openSession(@utf8InCpp String name);
50
51 // Decremented in ~IBinderRpcSession
52 int getNumOpenSessions();
53
54 // primitives to test threading behavior
55 void lock();
56 oneway void unlockInMsAsync(int ms);
57 void lockUnlock(); // locks and unlocks a mutex
58
59 // take up binder thread for some time
60 void sleepMs(int ms);
61 oneway void sleepMsAsync(int ms);
62
Steven Moreland659416d2021-05-11 00:47:50 +000063 void doCallback(IBinderRpcCallback callback, boolean isOneway, boolean delayed, @utf8InCpp String value);
Steven Morelandc7d40132021-06-10 03:42:11 +000064 oneway void doCallbackAsync(IBinderRpcCallback callback, boolean isOneway, boolean delayed, @utf8InCpp String value);
Steven Moreland659416d2021-05-11 00:47:50 +000065
Steven Moreland5553ac42020-11-11 02:14:45 +000066 void die(boolean cleanup);
Steven Morelandaf4ca712021-05-24 23:22:08 +000067 void scheduleShutdown();
Steven Morelandd7302072021-05-15 01:32:04 +000068
69 void useKernelBinderCallingId();
Frederick Mayle69a0c992022-05-26 20:38:39 +000070
71 ParcelFileDescriptor echoAsFile(@utf8InCpp String content);
72
73 ParcelFileDescriptor concatFiles(in List<ParcelFileDescriptor> files);
Frederick Mayleb0221d12022-10-03 23:10:53 +000074
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.
81 oneway void blockingSendFdOneway(in ParcelFileDescriptor fd);
82 ParcelFileDescriptor blockingRecvFd();
Frederick Mayle96872592023-03-07 14:56:15 -080083
84 // Same as blockingSendFdOneway, but with integers.
85 oneway void blockingSendIntOneway(int n);
86 int blockingRecvInt();
Steven Moreland5553ac42020-11-11 02:14:45 +000087}