Volume.h 2.57 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 44 45 46
    static const char *SECDIR;
    static const char *SEC_STGDIR;
    static const char *SEC_STG_SECIMGDIR;
    static const char *SEC_ASECDIR;
    static const char *ASECDIR;

47 48 49
protected:
    char *mLabel;
    char *mMountpoint;
50
    VolumeManager *mVm;
San Mehat's avatar
San Mehat committed
51
    bool mDebug;
52 53 54 55 56

    /*
     * The major/minor tuple of the currently mounted filesystem.
     */
    dev_t mCurrentlyMountedKdev;
57 58

public:
59
    Volume(VolumeManager *vm, const char *label, const char *mount_point);
60 61
    virtual ~Volume();

62
    int mountVol();
63
    int unmountVol(bool force);
64
    int formatVol();
65

66 67 68 69
    const char *getLabel() { return mLabel; }
    const char *getMountpoint() { return mMountpoint; }
    int getState() { return mState; }

70
    virtual int handleBlockEvent(NetlinkEvent *evt);
71 72 73
    virtual dev_t getDiskDevice();
    virtual void handleVolumeShared();
    virtual void handleVolumeUnshared();
74

San Mehat's avatar
San Mehat committed
75 76
    void setDebug(bool enable);

77 78
protected:
    void setState(int state);
79

80
    virtual int getDeviceNodes(dev_t *devs, int max) = 0;
81

82 83
    int createDeviceNode(const char *path, int major, int minor);

84
private:
85 86
    int initializeMbr(const char *deviceNode);
    bool isMountpointMounted(const char *path);
87 88 89
    int createBindMounts();
    int doUnmount(const char *path, bool force);
    int doMoveMount(const char *src, const char *dst, bool force);
90
    void protectFromAutorunStupidity();
91 92 93 94 95
};

typedef android::List<Volume *> VolumeCollection;

#endif