| /* |
| * 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__ |