blob: 9f568026535cd1866080e2f96c93d1628e052716 [file] [log] [blame]
/*
* Copyright (C) 2016 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.os;
import android.system.ErrnoException;
import android.system.OsConstants;
/**
* Callback that handles file system requests from ProxyFileDescriptor.
*
* All callback methods except for onRelease should throw {@link android.system.ErrnoException}
* with proper errno on errors. See
* <a href="http://man7.org/linux/man-pages/man3/errno.3.html">errno(3)</a> and
* {@link android.system.OsConstants}.
*
* Typical errnos are
*
* <ul>
* <li>{@link android.system.OsConstants#EIO} for general I/O issues
* <li>{@link android.system.OsConstants#ENOENT} when the file is not found
* <li>{@link android.system.OsConstants#EBADF} if the file doesn't allow read/write operations
* based on how it was opened. (For example, trying to write a file that was opened read-only.)
* <li>{@link android.system.OsConstants#ENOSPC} if you cannot handle a write operation to
* space/quota limitations.
* </ul>
* @see android.os.storage.StorageManager#openProxyFileDescriptor(int, ProxyFileDescriptorCallback,
* Handler)
*/
public abstract class ProxyFileDescriptorCallback {
/**
* Returns size of bytes provided by the file descriptor.
* @return Size of bytes.
* @throws ErrnoException ErrnoException containing E constants in OsConstants.
*/
public long onGetSize() throws ErrnoException {
throw new ErrnoException("onGetSize", OsConstants.EBADF);
}
/**
* Provides bytes read from file descriptor.
* It needs to return exact requested size of bytes unless it reaches file end.
* @param offset Offset in bytes from the file head specifying where to read bytes. If a seek
* operation is conducted on the file descriptor, then a read operation is requested, the
* offset refrects the proper position of requested bytes.
* @param size Size for read bytes.
* @param data Byte array to store read bytes.
* @return Size of bytes returned by the function.
* @throws ErrnoException ErrnoException containing E constants in OsConstants.
*/
public int onRead(long offset, int size, byte[] data) throws ErrnoException {
throw new ErrnoException("onRead", OsConstants.EBADF);
}
/**
* Handles bytes written to file descriptor.
* @param offset Offset in bytes from the file head specifying where to write bytes. If a seek
* operation is conducted on the file descriptor, then a write operation is requested, the
* offset refrects the proper position of requested bytes.
* @param size Size for write bytes.
* @param data Byte array to be written to somewhere.
* @return Size of bytes processed by the function.
* @throws ErrnoException ErrnoException containing E constants in OsConstants.
*/
public int onWrite(long offset, int size, byte[] data) throws ErrnoException {
throw new ErrnoException("onWrite", OsConstants.EBADF);
}
/**
* Ensures all the written data are stored in permanent storage device.
* For example, if it has data stored in on memory cache, it needs to flush data to storage
* device.
* @throws ErrnoException ErrnoException containing E constants in OsConstants.
*/
public void onFsync() throws ErrnoException {
throw new ErrnoException("onFsync", OsConstants.EINVAL);
}
/**
* Invoked after the file is closed.
*/
abstract public void onRelease();
}