Volume.h 3.02 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
/*
 * 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 _VOLUME_H
#define _VOLUME_H

#include <utils/List.h>

22
class NetlinkEvent;
23
class VolumeManager;
24

25 26 27 28 29 30
class Volume {
private:
    int mState;

public:
    static const int State_Init       = -1;
31
    static const int State_NoMedia    = 0;
32 33
    static const int State_Idle       = 1;
    static const int State_Pending    = 2;
34 35 36 37 38 39
    static const int State_Checking   = 3;
    static const int State_Mounted    = 4;
    static const int State_Unmounting = 5;
    static const int State_Formatting = 6;
    static const int State_Shared     = 7;
    static const int State_SharedMnt  = 8;
40

41 42 43
    static const char *SECDIR;
    static const char *SEC_STGDIR;
    static const char *SEC_STG_SECIMGDIR;
44 45
    static const char *SEC_ASECDIR_EXT;
    static const char *SEC_ASECDIR_INT;
46 47
    static const char *ASECDIR;

48 49
    static const char *LOOPDIR;

50 51 52
protected:
    char *mLabel;
    char *mMountpoint;
53
    VolumeManager *mVm;
San Mehat's avatar
San Mehat committed
54
    bool mDebug;
55
    int mPartIdx;
56
    int mOrigPartIdx;
Joseph Lehrer's avatar
Joseph Lehrer committed
57
    bool mRetryMount;
58 59 60 61 62

    /*
     * The major/minor tuple of the currently mounted filesystem.
     */
    dev_t mCurrentlyMountedKdev;
63 64

public:
65
    Volume(VolumeManager *vm, const char *label, const char *mount_point);
66 67
    virtual ~Volume();

68
    int mountVol();
69
    int unmountVol(bool force, bool revert);
70
    int formatVol(bool wipe);
71

72 73 74 75
    const char *getLabel() { return mLabel; }
    const char *getMountpoint() { return mMountpoint; }
    int getState() { return mState; }

76
    virtual int handleBlockEvent(NetlinkEvent *evt);
77
    virtual dev_t getDiskDevice();
78
    virtual dev_t getShareDevice();
79 80
    virtual void handleVolumeShared();
    virtual void handleVolumeUnshared();
81

San Mehat's avatar
San Mehat committed
82
    void setDebug(bool enable);
83
    virtual int getVolInfo(struct volume_info *v) = 0;
San Mehat's avatar
San Mehat committed
84

85 86
protected:
    void setState(int state);
87

88
    virtual int getDeviceNodes(dev_t *devs, int max) = 0;
89
    virtual int updateDeviceInfo(char *new_path, int new_major, int new_minor) = 0;
90
    virtual void revertDeviceInfo(void) = 0;
91 92
    virtual int isDecrypted(void) = 0;
    virtual int getFlags(void) = 0;
93

94 95
    int createDeviceNode(const char *path, int major, int minor);

96
private:
97 98
    int initializeMbr(const char *deviceNode);
    bool isMountpointMounted(const char *path);
99 100 101
    int createBindMounts();
    int doUnmount(const char *path, bool force);
    int doMoveMount(const char *src, const char *dst, bool force);
102
    void protectFromAutorunStupidity();
103 104 105 106 107
};

typedef android::List<Volume *> VolumeCollection;

#endif