190 lines
5.9 KiB
C
190 lines
5.9 KiB
C
/*
|
|
* Copyright (C) 2008 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.
|
|
*/
|
|
|
|
#ifndef MOUNTD_H__
|
|
#define MOUNTD_H__
|
|
|
|
#define LOG_TAG "mountd"
|
|
#include "cutils/log.h"
|
|
|
|
#include "ASEC.h"
|
|
|
|
typedef int boolean;
|
|
enum {
|
|
false = 0,
|
|
true = 1
|
|
};
|
|
|
|
#define WEXITSTATUS(status) (((status) & 0xff00) >> 8)
|
|
|
|
// Set this for logging error messages
|
|
#define ENABLE_LOG_ERROR
|
|
|
|
// set this to log automounter events
|
|
#define ENABLE_LOG_MOUNT
|
|
|
|
// set this to log server events
|
|
//#define ENABLE_LOG_SERVER
|
|
|
|
// set this to log ASEC events
|
|
#define ENABLE_LOG_ASEC
|
|
|
|
#ifdef ENABLE_LOG_ERROR
|
|
#define LOG_ERROR(fmt, args...) \
|
|
{ LOGE(fmt , ## args); }
|
|
#else
|
|
#define LOG_ERROR(fmt, args...) \
|
|
do { } while (0)
|
|
#endif /* ENABLE_LOG_ERROR */
|
|
|
|
#ifdef ENABLE_LOG_MOUNT
|
|
#define LOG_MOUNT(fmt, args...) \
|
|
{ LOGD(fmt , ## args); }
|
|
#else
|
|
#define LOG_MOUNT(fmt, args...) \
|
|
do { } while (0)
|
|
#endif /* ENABLE_LOG_MOUNT */
|
|
|
|
#ifdef ENABLE_LOG_SERVER
|
|
#define LOG_SERVER(fmt, args...) \
|
|
{ LOGD(fmt , ## args); }
|
|
#else
|
|
#define LOG_SERVER(fmt, args...) \
|
|
do { } while (0)
|
|
#endif /* ENABLE_LOG_SERVER */
|
|
|
|
#ifdef ENABLE_LOG_ASEC
|
|
#define LOG_ASEC(fmt, args...) \
|
|
{ LOGD(fmt , ## args); }
|
|
#else
|
|
#define LOG_ASEC(fmt, args...) \
|
|
do { } while (0)
|
|
#endif /* ENABLE_LOG_ASEC */
|
|
|
|
|
|
typedef enum MediaState {
|
|
// no media in SD card slot
|
|
MEDIA_REMOVED,
|
|
|
|
// media in SD card slot, but not mounted
|
|
MEDIA_UNMOUNTED,
|
|
|
|
// media in SD card slot and mounted at its mount point
|
|
MEDIA_MOUNTED,
|
|
|
|
// media in SD card slot, unmounted, and shared as a mass storage device
|
|
MEDIA_SHARED,
|
|
|
|
// media was removed from SD card slot, but mount point was not unmounted
|
|
// this state is cleared after the mount point is unmounted
|
|
MEDIA_BAD_REMOVAL,
|
|
|
|
// media in SD card slot could not be mounted (corrupt file system?)
|
|
MEDIA_UNMOUNTABLE,
|
|
} MediaState;
|
|
|
|
// socket name for connecting to mountd
|
|
#define MOUNTD_SOCKET "mountd"
|
|
|
|
// mountd commands
|
|
// these must match the corresponding strings in //device/java/android/android/os/UsbListener.java
|
|
#define MOUNTD_ENABLE_UMS "enable_ums"
|
|
#define MOUNTD_DISABLE_UMS "disable_ums"
|
|
#define MOUNTD_SEND_STATUS "send_status"
|
|
|
|
// these commands should contain a mount point following the colon
|
|
#define MOUNTD_MOUNT_MEDIA "mount_media:"
|
|
#define MOUNTD_EJECT_MEDIA "eject_media:"
|
|
|
|
// mountd events
|
|
// these must match the corresponding strings in //device/java/android/android/os/UsbListener.java
|
|
#define MOUNTD_UMS_ENABLED "ums_enabled"
|
|
#define MOUNTD_UMS_DISABLED "ums_disabled"
|
|
#define MOUNTD_UMS_CONNECTED "ums_connected"
|
|
#define MOUNTD_UMS_DISCONNECTED "ums_disconnected"
|
|
|
|
// these events correspond to the states in the MediaState enum.
|
|
// a path to the mount point follows the colon.
|
|
#define MOUNTD_MEDIA_REMOVED "media_removed:"
|
|
#define MOUNTD_MEDIA_UNMOUNTED "media_unmounted:"
|
|
#define MOUNTD_MEDIA_MOUNTED "media_mounted:"
|
|
#define MOUNTD_MEDIA_MOUNTED_READ_ONLY "media_mounted_ro:"
|
|
#define MOUNTD_MEDIA_SHARED "media_shared:"
|
|
#define MOUNTD_MEDIA_BAD_REMOVAL "media_bad_removal:"
|
|
#define MOUNTD_MEDIA_UNMOUNTABLE "media_unmountable:"
|
|
|
|
// this event sent to request unmount for media mount point
|
|
#define MOUNTD_REQUEST_EJECT "request_eject:"
|
|
|
|
// system properties
|
|
// these must match the corresponding strings in //device/java/android/android/os/Environment.java
|
|
#define EXTERNAL_STORAGE_STATE "EXTERNAL_STORAGE_STATE"
|
|
#define EXTERNAL_STORAGE_REMOVED "removed"
|
|
#define EXTERNAL_STORAGE_UNMOUNTED "unmounted"
|
|
#define EXTERNAL_STORAGE_MOUNTED "mounted"
|
|
#define EXTERNAL_STORAGE_MOUNTED_READ_ONLY "mounted_ro"
|
|
#define EXTERNAL_STORAGE_SHARED "shared"
|
|
#define EXTERNAL_STORAGE_BAD_REMOVAL "bad_removal"
|
|
#define EXTERNAL_STORAGE_UNMOUNTABLE "unmountable"
|
|
|
|
// AutoMount.c
|
|
|
|
boolean IsMassStorageEnabled();
|
|
boolean IsMassStorageConnected();
|
|
|
|
void MountMedia(const char* mountPoint);
|
|
void UnmountMedia(const char* mountPoint);
|
|
void EnableMassStorage(boolean enable);
|
|
|
|
// call this before StartAutoMounter() to add a mount point to monitor
|
|
void *AddMountPoint(const char* device, const char* mountPoint, const char* driverStorePath,
|
|
boolean enableUms);
|
|
|
|
int AddAsecToMountPoint(void *Mp, const char *name, const char *backing_file,
|
|
const char *size, const char *mount_point, const char *crypt);
|
|
|
|
// start automounter thread
|
|
void StartAutoMounter();
|
|
|
|
// check /proc/mounts for mounted file systems, and notify mount or unmount for any that are in our automount list
|
|
void NotifyExistingMounts();
|
|
|
|
|
|
// ASEC.c
|
|
|
|
void *AsecInit(const char *Name, const char *SrcPath, const char *BackingFile,
|
|
const char *Size, const char *DstPath, const char *Crypt);
|
|
int AsecStart(void *Handle);
|
|
int AsecStop(void *Handle);
|
|
void AsecDeinit(void *Handle);
|
|
boolean AsecIsStarted(void *Handle);
|
|
const char *AsecMountPoint(void *Handle);
|
|
|
|
// ProcessKiller.c
|
|
|
|
void KillProcessesWithOpenFiles(const char* mountPoint, boolean sigkill, pid_t *excluded, int num_excluded);
|
|
|
|
// logwrapper.c
|
|
int logwrap(int argc, char* argv[]);
|
|
|
|
// Server.c
|
|
|
|
int RunServer();
|
|
void SendMassStorageConnected(boolean connected);
|
|
void SendUnmountRequest(const char* path);
|
|
void NotifyMediaState(const char* path, MediaState state, boolean readOnly);
|
|
void NotifyAsecState(AsecState state, const char *argument);
|
|
#endif // MOUNTD_H__
|