1 /*
2 * Copyright (C) 2005 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 //
18 #ifndef ANDROID_ISERVICE_MANAGER_H
19 #define ANDROID_ISERVICE_MANAGER_H
20
21 #include <binder/IInterface.h>
22 #include <utils/Vector.h>
23 #include <utils/String16.h>
24
25 namespace android {
26
27 // ----------------------------------------------------------------------
28
29 class IServiceManager : public IInterface
30 {
31 public:
32 DECLARE_META_INTERFACE(ServiceManager)
33 /**
34 * Must match values in IServiceManager.java
35 */
36 /* Allows services to dump sections according to priorities. */
37 static const int DUMP_FLAG_PRIORITY_CRITICAL = 1 << 0;
38 static const int DUMP_FLAG_PRIORITY_HIGH = 1 << 1;
39 static const int DUMP_FLAG_PRIORITY_NORMAL = 1 << 2;
40 /**
41 * Services are by default registered with a DEFAULT dump priority. DEFAULT priority has the
42 * same priority as NORMAL priority but the services are not called with dump priority
43 * arguments.
44 */
45 static const int DUMP_FLAG_PRIORITY_DEFAULT = 1 << 3;
46 static const int DUMP_FLAG_PRIORITY_ALL = DUMP_FLAG_PRIORITY_CRITICAL |
47 DUMP_FLAG_PRIORITY_HIGH | DUMP_FLAG_PRIORITY_NORMAL | DUMP_FLAG_PRIORITY_DEFAULT;
48 static const int DUMP_FLAG_PROTO = 1 << 4;
49
50 /**
51 * Retrieve an existing service, blocking for a few seconds
52 * if it doesn't yet exist.
53 */
54 virtual sp<IBinder> getService( const String16& name) const = 0;
55
56 /**
57 * Retrieve an existing service, non-blocking.
58 */
59 virtual sp<IBinder> checkService( const String16& name) const = 0;
60
61 /**
62 * Register a service.
63 */
64 // NOLINTNEXTLINE(google-default-arguments)
65 virtual status_t addService(const String16& name, const sp<IBinder>& service,
66 bool allowIsolated = false,
67 int dumpsysFlags = DUMP_FLAG_PRIORITY_DEFAULT) = 0;
68
69 /**
70 * Return list of all existing services.
71 */
72 // NOLINTNEXTLINE(google-default-arguments)
73 virtual Vector<String16> listServices(int dumpsysFlags = DUMP_FLAG_PRIORITY_ALL) = 0;
74
75 enum {
76 GET_SERVICE_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION,
77 CHECK_SERVICE_TRANSACTION,
78 ADD_SERVICE_TRANSACTION,
79 LIST_SERVICES_TRANSACTION,
80 };
81 };
82
83 sp<IServiceManager> defaultServiceManager();
84
85 template<typename INTERFACE>
getService(const String16 & name,sp<INTERFACE> * outService)86 status_t getService(const String16& name, sp<INTERFACE>* outService)
87 {
88 const sp<IServiceManager> sm = defaultServiceManager();
89 if (sm != nullptr) {
90 *outService = interface_cast<INTERFACE>(sm->getService(name));
91 if ((*outService) != nullptr) return NO_ERROR;
92 }
93 return NAME_NOT_FOUND;
94 }
95
96 bool checkCallingPermission(const String16& permission);
97 bool checkCallingPermission(const String16& permission,
98 int32_t* outPid, int32_t* outUid);
99 bool checkPermission(const String16& permission, pid_t pid, uid_t uid);
100
101 }; // namespace android
102
103 #endif // ANDROID_ISERVICE_MANAGER_H
104
105