IServiceManager.h revision c5b2c0bf8007562536b822eb060fc54a01f8e08b
1edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project/* 2edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Copyright (C) 2005 The Android Open Source Project 3edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * 4edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * you may not use this file except in compliance with the License. 6edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * You may obtain a copy of the License at 7edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * 8edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * 10edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * See the License for the specific language governing permissions and 14edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * limitations under the License. 15edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project */ 16edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 17edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// 18edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#ifndef ANDROID_ISERVICE_MANAGER_H 19edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#define ANDROID_ISERVICE_MANAGER_H 20edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 21c5b2c0bf8007562536b822eb060fc54a01f8e08bMathias Agopian#include <binder/IInterface.h> 22c5b2c0bf8007562536b822eb060fc54a01f8e08bMathias Agopian#include <binder/IPermissionController.h> 23edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <utils/Vector.h> 24edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <utils/String16.h> 25edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 26edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectnamespace android { 27edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 28edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------- 29edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 30edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass IServiceManager : public IInterface 31edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 32edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectpublic: 33edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project DECLARE_META_INTERFACE(ServiceManager); 34edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 35edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project /** 36edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Retrieve an existing service, blocking for a few seconds 37edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * if it doesn't yet exist. 38edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project */ 39edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project virtual sp<IBinder> getService( const String16& name) const = 0; 40edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 41edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project /** 42edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Retrieve an existing service, non-blocking. 43edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project */ 44edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project virtual sp<IBinder> checkService( const String16& name) const = 0; 45edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 46edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project /** 47edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Register a service. 48edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project */ 49edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project virtual status_t addService( const String16& name, 50edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project const sp<IBinder>& service) = 0; 51edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 52edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project /** 53edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Return list of all existing services. 54edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project */ 55edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project virtual Vector<String16> listServices() = 0; 56edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 57edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project enum { 58edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project GET_SERVICE_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION, 59edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project CHECK_SERVICE_TRANSACTION, 60edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ADD_SERVICE_TRANSACTION, 61edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project LIST_SERVICES_TRANSACTION, 62edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project }; 63edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; 64edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 65edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectsp<IServiceManager> defaultServiceManager(); 66edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 67edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<typename INTERFACE> 68edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstatus_t getService(const String16& name, sp<INTERFACE>* outService) 69edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 70edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project const sp<IServiceManager> sm = defaultServiceManager(); 71edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project if (sm != NULL) { 72edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project *outService = interface_cast<INTERFACE>(sm->getService(name)); 73edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project if ((*outService) != NULL) return NO_ERROR; 74edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 75edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return NAME_NOT_FOUND; 76edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 77edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 78edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectbool checkCallingPermission(const String16& permission); 79edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectbool checkCallingPermission(const String16& permission, 80edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project int32_t* outPid, int32_t* outUid); 81edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 82edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------- 83edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 84edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass BnServiceManager : public BnInterface<IServiceManager> 85edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 86edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectpublic: 87edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project virtual status_t onTransact( uint32_t code, 88edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project const Parcel& data, 89edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project Parcel* reply, 90edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint32_t flags = 0); 91edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; 92edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 93edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------- 94edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 95edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; // namespace android 96edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 97edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#endif // ANDROID_ISERVICE_MANAGER_H 98edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 99