IMountService.cpp revision 4a99ed897796bec95039496a66ed1be066b6294c
1be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root/* 2be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Copyright (C) 2010 The Android Open Source Project 3be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * 4be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Licensed under the Apache License, Version 2.0 (the "License"); 5be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * you may not use this file except in compliance with the License. 6be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * You may obtain a copy of the License at 7be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * 8be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * http://www.apache.org/licenses/LICENSE-2.0 9be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * 10be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * Unless required by applicable law or agreed to in writing, software 11be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * distributed under the License is distributed on an "AS IS" BASIS, 12be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * See the License for the specific language governing permissions and 14be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root * limitations under the License. 15be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root */ 16be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 17be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root#define LOG_TAG "IMountService" 18be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 19be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root#include <storage/IMountService.h> 20be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root#include <binder/Parcel.h> 21be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 22be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Rootnamespace android { 23be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 24be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Rootenum { 25be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root TRANSACTION_registerListener = IBinder::FIRST_CALL_TRANSACTION, 26be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root TRANSACTION_unregisterListener, 27be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root TRANSACTION_isUsbMassStorageConnected, 28be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root TRANSACTION_setUsbMassStorageEnabled, 29be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root TRANSACTION_isUsbMassStorageEnabled, 30be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root TRANSACTION_mountVolume, 31be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root TRANSACTION_unmountVolume, 32be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root TRANSACTION_formatVolume, 33be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root TRANSACTION_getStorageUsers, 34be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root TRANSACTION_getVolumeState, 35be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root TRANSACTION_createSecureContainer, 36be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root TRANSACTION_finalizeSecureContainer, 37be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root TRANSACTION_destroySecureContainer, 38be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root TRANSACTION_mountSecureContainer, 39be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root TRANSACTION_unmountSecureContainer, 40be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root TRANSACTION_isSecureContainerMounted, 41be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root TRANSACTION_renameSecureContainer, 42be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root TRANSACTION_getSecureContainerPath, 43be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root TRANSACTION_getSecureContainerList, 44be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root TRANSACTION_shutdown, 45be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root TRANSACTION_finishMediaUpdate, 46be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root TRANSACTION_mountObb, 47be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root TRANSACTION_unmountObb, 48be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root TRANSACTION_isObbMounted, 49be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root TRANSACTION_getMountedObbPath, 50be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root}; 51be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 52be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Rootclass BpMountService: public BpInterface<IMountService> 53be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root{ 54be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Rootpublic: 55be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root BpMountService(const sp<IBinder>& impl) 56be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root : BpInterface<IMountService>(impl) 57be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root { 58be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 59be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 60be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root virtual void registerListener(const sp<IMountServiceListener>& listener) 61be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root { 62be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel data, reply; 63be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.writeInterfaceToken(IMountService::getInterfaceDescriptor()); 64be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.writeStrongBinder(listener->asBinder()); 65be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root if (remote()->transact(TRANSACTION_registerListener, data, &reply) != NO_ERROR) { 66be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root LOGD("registerListener could not contact remote\n"); 67be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return; 68be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 69be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int32_t err = reply.readExceptionCode(); 70be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root if (err < 0) { 71be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root LOGD("registerListener caught exception %d\n", err); 72be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return; 73be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 74be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 75be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 76be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root virtual void unregisterListener(const sp<IMountServiceListener>& listener) 77be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root { 78be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel data, reply; 79be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.writeInterfaceToken(IMountService::getInterfaceDescriptor()); 80be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.writeStrongBinder(listener->asBinder()); 81be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root if (remote()->transact(TRANSACTION_unregisterListener, data, &reply) != NO_ERROR) { 82be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root LOGD("unregisterListener could not contact remote\n"); 83be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return; 84be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 85be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int32_t err = reply.readExceptionCode(); 86be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root if (err < 0) { 87be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root LOGD("unregisterListener caught exception %d\n", err); 88be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return; 89be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 90be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 91be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 92be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root virtual bool isUsbMassStorageConnected() 93be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root { 94be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel data, reply; 95be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.writeInterfaceToken(IMountService::getInterfaceDescriptor()); 96be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root if (remote()->transact(TRANSACTION_isUsbMassStorageConnected, data, &reply) != NO_ERROR) { 97be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root LOGD("isUsbMassStorageConnected could not contact remote\n"); 98be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return false; 99be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 100be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int32_t err = reply.readExceptionCode(); 101be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root if (err < 0) { 102be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root LOGD("isUsbMassStorageConnected caught exception %d\n", err); 103be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return false; 104be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 105be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return reply.readInt32() != 0; 106be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 107be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 108be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root virtual void setUsbMassStorageEnabled(const bool enable) 109be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root { 110be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel data, reply; 111be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.writeInterfaceToken(IMountService::getInterfaceDescriptor()); 112be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.writeInt32(enable != 0); 113be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root if (remote()->transact(TRANSACTION_setUsbMassStorageEnabled, data, &reply) != NO_ERROR) { 114be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root LOGD("setUsbMassStorageEnabled could not contact remote\n"); 115be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return; 116be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 117be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int32_t err = reply.readExceptionCode(); 118be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root if (err < 0) { 119be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root LOGD("setUsbMassStorageEnabled caught exception %d\n", err); 120be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return; 121be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 122be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 123be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 124be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root virtual bool isUsbMassStorageEnabled() 125be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root { 126be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel data, reply; 127be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.writeInterfaceToken(IMountService::getInterfaceDescriptor()); 128be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root if (remote()->transact(TRANSACTION_isUsbMassStorageEnabled, data, &reply) != NO_ERROR) { 129be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root LOGD("isUsbMassStorageEnabled could not contact remote\n"); 130be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return false; 131be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 132be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int32_t err = reply.readExceptionCode(); 133be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root if (err < 0) { 134be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root LOGD("isUsbMassStorageEnabled caught exception %d\n", err); 135be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return false; 136be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 137be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return reply.readInt32() != 0; 138be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 139be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 140be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int32_t mountVolume(const String16& mountPoint) 141be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root { 142be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel data, reply; 143be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.writeInterfaceToken(IMountService::getInterfaceDescriptor()); 144be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.writeString16(mountPoint); 145be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root if (remote()->transact(TRANSACTION_mountVolume, data, &reply) != NO_ERROR) { 146be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root LOGD("mountVolume could not contact remote\n"); 147be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return -1; 148be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 149be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int32_t err = reply.readExceptionCode(); 150be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root if (err < 0) { 151be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root LOGD("mountVolume caught exception %d\n", err); 152be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return err; 153be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 154be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return reply.readInt32(); 155be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 156be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 157be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int32_t unmountVolume(const String16& mountPoint, const bool force) 158be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root { 159be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel data, reply; 160be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.writeInterfaceToken(IMountService::getInterfaceDescriptor()); 161be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.writeString16(mountPoint); 162be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.writeInt32(force ? 1 : 0); 163be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root if (remote()->transact(TRANSACTION_unmountVolume, data, &reply) != NO_ERROR) { 164be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root LOGD("unmountVolume could not contact remote\n"); 165be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return -1; 166be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 167be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int32_t err = reply.readExceptionCode(); 168be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root if (err < 0) { 169be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root LOGD("unmountVolume caught exception %d\n", err); 170be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return err; 171be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 172be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return reply.readInt32(); 173be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 174be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 175be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int32_t formatVolume(const String16& mountPoint) 176be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root { 177be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel data, reply; 178be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.writeInterfaceToken(IMountService::getInterfaceDescriptor()); 179be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.writeString16(mountPoint); 180be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root if (remote()->transact(TRANSACTION_formatVolume, data, &reply) != NO_ERROR) { 181be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root LOGD("formatVolume could not contact remote\n"); 182be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return -1; 183be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 184be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int32_t err = reply.readExceptionCode(); 185be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root if (err < 0) { 186be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root LOGD("formatVolume caught exception %d\n", err); 187be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return err; 188be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 189be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return reply.readInt32(); 190be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 191be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 192be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int32_t getStorageUsers(const String16& mountPoint, int32_t** users) 193be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root { 194be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel data, reply; 195be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.writeInterfaceToken(IMountService::getInterfaceDescriptor()); 196be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.writeString16(mountPoint); 197be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root if (remote()->transact(TRANSACTION_getStorageUsers, data, &reply) != NO_ERROR) { 198be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root LOGD("getStorageUsers could not contact remote\n"); 199be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return -1; 200be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 201be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int32_t err = reply.readExceptionCode(); 202be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root if (err < 0) { 203be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root LOGD("getStorageUsers caught exception %d\n", err); 204be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return err; 205be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 206be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root const int32_t numUsers = reply.readInt32(); 207be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root *users = (int32_t*)malloc(sizeof(int32_t)*numUsers); 208be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root for (int i = 0; i < numUsers; i++) { 209be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root **users++ = reply.readInt32(); 210be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 211be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return numUsers; 212be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 213be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 214be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int32_t getVolumeState(const String16& mountPoint) 215be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root { 216be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel data, reply; 217be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.writeInterfaceToken(IMountService::getInterfaceDescriptor()); 218be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.writeString16(mountPoint); 219be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root if (remote()->transact(TRANSACTION_getVolumeState, data, &reply) != NO_ERROR) { 220be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root LOGD("getVolumeState could not contact remote\n"); 221be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return -1; 222be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 223be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int32_t err = reply.readExceptionCode(); 224be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root if (err < 0) { 225be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root LOGD("getVolumeState caught exception %d\n", err); 226be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return err; 227be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 228be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return reply.readInt32(); 229be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 230be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 231be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int32_t createSecureContainer(const String16& id, const int32_t sizeMb, const String16& fstype, 232be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root const String16& key, const int32_t ownerUid) 233be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root { 234be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel data, reply; 235be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.writeInterfaceToken(IMountService::getInterfaceDescriptor()); 236be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.writeString16(id); 237be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.writeInt32(sizeMb); 238be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.writeString16(fstype); 239be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.writeString16(key); 240be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.writeInt32(ownerUid); 241be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root if (remote()->transact(TRANSACTION_createSecureContainer, data, &reply) != NO_ERROR) { 242be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root LOGD("createSecureContainer could not contact remote\n"); 243be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return -1; 244be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 245be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int32_t err = reply.readExceptionCode(); 246be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root if (err < 0) { 247be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root LOGD("createSecureContainer caught exception %d\n", err); 248be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return err; 249be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 250be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return reply.readInt32(); 251be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 252be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 253be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int32_t finalizeSecureContainer(const String16& id) 254be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root { 255be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel data, reply; 256be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.writeInterfaceToken(IMountService::getInterfaceDescriptor()); 257be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.writeString16(id); 258be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root if (remote()->transact(TRANSACTION_finalizeSecureContainer, data, &reply) != NO_ERROR) { 259be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root LOGD("finalizeSecureContainer couldn't call remote\n"); 260be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return -1; 261be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 262be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int32_t err = reply.readExceptionCode(); 263be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root if (err < 0) { 264be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root LOGD("finalizeSecureContainer caught exception %d\n", err); 265be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return err; 266be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 267be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return reply.readInt32(); 268be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 269be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 270be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int32_t destroySecureContainer(const String16& id) 271be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root { 272be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel data, reply; 273be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.writeInterfaceToken(IMountService::getInterfaceDescriptor()); 274be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.writeString16(id); 275be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root if (remote()->transact(TRANSACTION_destroySecureContainer, data, &reply) != NO_ERROR) { 276be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root LOGD("destroySecureContainer couldn't call remote"); 277be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return -1; 278be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 279be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int32_t err = reply.readExceptionCode(); 280be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root if (err < 0) { 281be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root LOGD("destroySecureContainer caught exception %d\n", err); 282be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return err; 283be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 284be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return reply.readInt32(); 285be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 286be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 287be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int32_t mountSecureContainer(const String16& id, const String16& key, const int32_t ownerUid) 288be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root { 289be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel data, reply; 290be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.writeInterfaceToken(IMountService::getInterfaceDescriptor()); 291be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.writeString16(id); 292be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.writeString16(key); 293be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.writeInt32(ownerUid); 294be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root if (remote()->transact(TRANSACTION_mountSecureContainer, data, &reply) != NO_ERROR) { 295be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root LOGD("mountSecureContainer couldn't call remote"); 296be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return -1; 297be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 298be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int32_t err = reply.readExceptionCode(); // What to do... 299be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root if (err < 0) { 300be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root LOGD("mountSecureContainer caught exception %d\n", err); 301be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return err; 302be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 303be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return reply.readInt32(); 304be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 305be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 306be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int32_t unmountSecureContainer(const String16& id, const bool force) 307be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root { 308be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel data, reply; 309be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.writeInterfaceToken(IMountService::getInterfaceDescriptor()); 310be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.writeString16(id); 311be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.writeInt32(force ? 1 : 0); 312be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root if (remote()->transact(TRANSACTION_getSecureContainerPath, data, &reply) != NO_ERROR) { 313be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root LOGD("unmountSecureContainer couldn't call remote"); 314be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return -1; 315be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 316be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int32_t err = reply.readExceptionCode(); // What to do... 317be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root if (err < 0) { 318be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root LOGD("unmountSecureContainer caught exception %d\n", err); 319be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return err; 320be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 321be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return reply.readInt32(); 322be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 323be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 324be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root bool isSecureContainerMounted(const String16& id) 325be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root { 326be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel data, reply; 327be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.writeInterfaceToken(IMountService::getInterfaceDescriptor()); 328be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.writeString16(id); 329be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root if (remote()->transact(TRANSACTION_isSecureContainerMounted, data, &reply) != NO_ERROR) { 330be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root LOGD("isSecureContainerMounted couldn't call remote"); 331be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return false; 332be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 333be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int32_t err = reply.readExceptionCode(); // What to do... 334be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root if (err < 0) { 335be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root LOGD("isSecureContainerMounted caught exception %d\n", err); 336be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return false; 337be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 338be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return reply.readInt32() != 0; 339be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 340be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 341be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int32_t renameSecureContainer(const String16& oldId, const String16& newId) 342be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root { 343be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel data, reply; 344be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.writeInterfaceToken(IMountService::getInterfaceDescriptor()); 345be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.writeString16(oldId); 346be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.writeString16(newId); 347be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root if (remote()->transact(TRANSACTION_renameSecureContainer, data, &reply) != NO_ERROR) { 348be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root LOGD("renameSecureContainer couldn't call remote"); 349be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return -1; 350be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 351be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int32_t err = reply.readExceptionCode(); // What to do... 352be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root if (err < 0) { 353be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root LOGD("renameSecureContainer caught exception %d\n", err); 354be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return err; 355be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 356be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return reply.readInt32(); 357be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 358be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 359be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root bool getSecureContainerPath(const String16& id, String16& path) 360be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root { 361be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel data, reply; 362be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.writeInterfaceToken(IMountService::getInterfaceDescriptor()); 363be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.writeString16(id); 364be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root if (remote()->transact(TRANSACTION_getSecureContainerPath, data, &reply) != NO_ERROR) { 365be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root LOGD("getSecureContainerPath couldn't call remote"); 366be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return false; 367be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 368be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int32_t err = reply.readExceptionCode(); // What to do... 369be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root if (err < 0) { 370be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root LOGD("getSecureContainerPath caught exception %d\n", err); 371be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return false; 372be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 373be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root path = reply.readString16(); 374be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 375be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 376be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 377be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int32_t getSecureContainerList(const String16& id, String16*& containers) 378be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root { 379be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel data, reply; 380be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.writeInterfaceToken(IMountService::getInterfaceDescriptor()); 381be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.writeString16(id); 382be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root if (remote()->transact(TRANSACTION_getSecureContainerList, data, &reply) != NO_ERROR) { 383be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root LOGD("getSecureContainerList couldn't call remote"); 384be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return -1; 385be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 386be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int32_t err = reply.readExceptionCode(); 387be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root if (err < 0) { 388be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root LOGD("getSecureContainerList caught exception %d\n", err); 389be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return err; 390be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 391be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root const int32_t numStrings = reply.readInt32(); 392be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root containers = new String16[numStrings]; 393be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root for (int i = 0; i < numStrings; i++) { 394be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root containers[i] = reply.readString16(); 395be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 396be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return numStrings; 397be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 398be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 399be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root void shutdown(const sp<IMountShutdownObserver>& observer) 400be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root { 401be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel data, reply; 402be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.writeInterfaceToken(IMountService::getInterfaceDescriptor()); 403be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.writeStrongBinder(observer->asBinder()); 404be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root if (remote()->transact(TRANSACTION_shutdown, data, &reply) != NO_ERROR) { 405be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root LOGD("shutdown could not contact remote\n"); 406be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return; 407be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 408be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int32_t err = reply.readExceptionCode(); 409be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root if (err < 0) { 410be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root LOGD("shutdown caught exception %d\n", err); 411be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return; 412be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 413be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.readExceptionCode(); 414be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 415be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 416be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root void finishMediaUpdate() 417be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root { 418be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel data, reply; 419be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.writeInterfaceToken(IMountService::getInterfaceDescriptor()); 420be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root if (remote()->transact(TRANSACTION_finishMediaUpdate, data, &reply) != NO_ERROR) { 421be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root LOGD("finishMediaUpdate could not contact remote\n"); 422be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return; 423be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 424be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int32_t err = reply.readExceptionCode(); 425be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root if (err < 0) { 426be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root LOGD("finishMediaUpdate caught exception %d\n", err); 427be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return; 428be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 429be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root reply.readExceptionCode(); 430be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 431be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 43205105f7abe02b2dff91d6260b3628c8b97816babKenny Root void mountObb(const String16& filename, const String16& key, 433af9d667ccf3e24058214cf4cc0a8aa8bc5100e3cKenny Root const sp<IObbActionListener>& token, int32_t nonce) 434be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root { 435be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel data, reply; 436be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.writeInterfaceToken(IMountService::getInterfaceDescriptor()); 437be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.writeString16(filename); 438be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.writeString16(key); 439be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.writeStrongBinder(token->asBinder()); 440af9d667ccf3e24058214cf4cc0a8aa8bc5100e3cKenny Root data.writeInt32(nonce); 441be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root if (remote()->transact(TRANSACTION_mountObb, data, &reply) != NO_ERROR) { 442be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root LOGD("mountObb could not contact remote\n"); 443be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return; 444be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 445be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int32_t err = reply.readExceptionCode(); 446be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root if (err < 0) { 447be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root LOGD("mountObb caught exception %d\n", err); 448be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return; 449be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 450be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 451be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 4524a99ed897796bec95039496a66ed1be066b6294cKenny Root void unmountObb(const String16& filename, const bool force, 4534a99ed897796bec95039496a66ed1be066b6294cKenny Root const sp<IObbActionListener>& token, const int32_t nonce) 454be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root { 455be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel data, reply; 456be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.writeInterfaceToken(IMountService::getInterfaceDescriptor()); 457be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.writeString16(filename); 458be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.writeInt32(force ? 1 : 0); 4594a99ed897796bec95039496a66ed1be066b6294cKenny Root data.writeStrongBinder(token->asBinder()); 4604a99ed897796bec95039496a66ed1be066b6294cKenny Root data.writeInt32(nonce); 461be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root if (remote()->transact(TRANSACTION_unmountObb, data, &reply) != NO_ERROR) { 462be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root LOGD("unmountObb could not contact remote\n"); 463be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return; 464be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 465be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int32_t err = reply.readExceptionCode(); 466be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root if (err < 0) { 467be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root LOGD("unmountObb caught exception %d\n", err); 468be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return; 469be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 470be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 471be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 472be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root bool isObbMounted(const String16& filename) 473be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root { 474be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel data, reply; 475be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.writeInterfaceToken(IMountService::getInterfaceDescriptor()); 476be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.writeString16(filename); 477be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root if (remote()->transact(TRANSACTION_isObbMounted, data, &reply) != NO_ERROR) { 478be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root LOGD("isObbMounted could not contact remote\n"); 479be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return false; 480be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 481be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int32_t err = reply.readExceptionCode(); 482be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root if (err < 0) { 483be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root LOGD("isObbMounted caught exception %d\n", err); 484be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return false; 485be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 486be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return reply.readInt32() != 0; 487be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 488be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 489be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root bool getMountedObbPath(const String16& filename, String16& path) 490be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root { 491be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root Parcel data, reply; 492be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.writeInterfaceToken(IMountService::getInterfaceDescriptor()); 493be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root data.writeString16(filename); 494be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root if (remote()->transact(TRANSACTION_getMountedObbPath, data, &reply) != NO_ERROR) { 495be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root LOGD("getMountedObbPath could not contact remote\n"); 496be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return false; 497be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 498be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root int32_t err = reply.readExceptionCode(); 499be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root if (err < 0) { 500be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root LOGD("getMountedObbPath caught exception %d\n", err); 501be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return false; 502be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 503be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root path = reply.readString16(); 504be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root return true; 505be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root } 506be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root}; 507be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 508be857d42849eaaa554d4772dbba7755f8a0f3547Kenny RootIMPLEMENT_META_INTERFACE(MountService, "IMountService"); 509be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 510be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root// ---------------------------------------------------------------------- 511be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root 512be857d42849eaaa554d4772dbba7755f8a0f3547Kenny Root}; 513