summaryrefslogtreecommitdiff
path: root/transport/manager/1.2/IServiceManager.hal
blob: d79403d0ea22815aaa80af0108f7a68bfbaf17d4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
/*
 * Copyright (C) 2018 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.
 */

package android.hidl.manager@1.2;

import @1.1::IServiceManager;

import IClientCallback;

interface IServiceManager extends @1.1::IServiceManager {
    /**
     * Adds a callback that must be called when the specified server has no clients.
     *
     * If the service has clients at the time of registration, the callback is called with
     * hasClients true. After that, it is called based on the changes in clientele.
     *
     * @param fqName Fully-qualified interface name (used to register)
     * @param name Instance name (of the registered service)
     * @param server non-null service waiting to have no clients (previously registered)
     * @param cb non-null callback to call when there are no clients
     * @return success
     *     true on success
     *     false if either
     *      - the server or cb parameters are null
     *      - this is called by a process other than the server process
     */
    registerClientCallback(string fqName,
                           string name,
                           interface server,
                           IClientCallback cb)
        generates (bool success);

    /**
     * Removes a callback previously registered with registerClientCallback.
     *
     * If server is null, then this must remove the cb from all matching services.
     *
     * @param server service registered with registerClientCallback
     * @param cb non-null callback to remove
     * @return success
     *     true if the server(s) have been removed
     *     false if cb is null or if the client callback or server could not be found
     */
    unregisterClientCallback(interface server, IClientCallback cb) generates (bool success);

    /**
     * Exactly the same as @1.0::IServiceManager.add, but the interfaceChain of the service is
     * provided in the same call.
     *
     * @param name Instance name. Must also be used to retrieve service.
     * @param service Handle to registering service.
     * @param chain service->interfaceChain
     *
     * @return success Whether or not the service was registered.
     */
    addWithChain(string name, interface service, vec<string> chain) generates (bool success);

    /**
     * List all instances of a particular service from the manifest. Must be sorted. These HALs
     * may not be started if they are lazy.
     *
     * See also @1.0::IServiceManager's listByInterface function.
     *
     * @param fqName Fully-qualified interface name.
     *
     * @return instanceNames List of instance names running the particular service.
     */
    listManifestByInterface(string fqName) generates (vec<string> instanceNames);

    /**
     * Unregisters a service if there are no clients for it. This must only unregister the
     * service if it is called from the same process that registered the service.
     *
     * This unregisters all instances of the service, even if they are under a different instance
     * name.
     *
     * Recommended usage is when creating a lazy process, try unregistering when IClientCallback's
     * onClients(*, false) is called. If this unregister is successful, then it is safe to exit. If
     * it is unsuccessful, then you can assume a client re-associated with the server. If a process
     * has multiple servers, and only some succeed in unregistration, then the unregistered services
     * can be re-registered.
     *
     * See also addWithChain and @1.0::IServiceManager's add.
     *
     * @param fqName Fully-qualified interface name.
     * @param name Instance name.
     * @param service Handle to registering service.
     *
     * @return success Whether the service was successfully unregistered.
     */
    tryUnregister(string fqName, string name, interface service) generates (bool success);
};