blob: 9ed1c84486847fbdeef78ea0473b9fbedb36b55e [file] [log] [blame]
Mike Lockwood16864ba2010-05-11 17:16:59 -04001/*
2 * Copyright (C) 2010 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#ifndef _MTP_SERVER_H
18#define _MTP_SERVER_H
19
20#include "MtpRequestPacket.h"
21#include "MtpDataPacket.h"
22#include "MtpResponsePacket.h"
Mike Lockwood873871f2010-07-12 18:54:16 -040023#include "MtpEventPacket.h"
Mike Lockwood16864ba2010-05-11 17:16:59 -040024#include "mtp.h"
25
26#include "MtpUtils.h"
27
Mike Lockwood7850ef92010-05-14 10:10:36 -040028namespace android {
29
Mike Lockwood1865a5d2010-07-03 00:44:05 -040030class MtpDatabase;
Mike Lockwood21ef7d02010-06-30 17:00:35 -040031class MtpProperty;
Mike Lockwood1865a5d2010-07-03 00:44:05 -040032class MtpStorage;
Mike Lockwood16864ba2010-05-11 17:16:59 -040033
34class MtpServer {
35
36private:
37 // file descriptor for MTP kernel driver
38 int mFD;
39
Mike Lockwood1865a5d2010-07-03 00:44:05 -040040 MtpDatabase* mDatabase;
Mike Lockwood16864ba2010-05-11 17:16:59 -040041
Mike Lockwood8e2a2802010-07-02 15:15:07 -040042 // group to own new files and folders
43 int mFileGroup;
44 // permissions for new files and directories
45 int mFilePermission;
46 int mDirectoryPermission;
47
Mike Lockwood16864ba2010-05-11 17:16:59 -040048 // current session ID
49 MtpSessionID mSessionID;
50 // true if we have an open session and mSessionID is valid
51 bool mSessionOpen;
52
53 MtpRequestPacket mRequest;
54 MtpDataPacket mData;
55 MtpResponsePacket mResponse;
Mike Lockwood873871f2010-07-12 18:54:16 -040056 MtpEventPacket mEvent;
Mike Lockwood16864ba2010-05-11 17:16:59 -040057
58 MtpStorageList mStorages;
59
Mike Lockwood21ef7d02010-06-30 17:00:35 -040060 MtpPropertyList mObjectProperties;
61 MtpPropertyList mDeviceProperties;
62
Mike Lockwood16864ba2010-05-11 17:16:59 -040063 // handle for new object, set by SendObjectInfo and used by SendObject
64 MtpObjectHandle mSendObjectHandle;
Mike Lockwood4714b072010-07-12 08:49:01 -040065 MtpObjectFormat mSendObjectFormat;
Mike Lockwood16864ba2010-05-11 17:16:59 -040066 MtpString mSendObjectFilePath;
67 size_t mSendObjectFileSize;
68
69public:
Mike Lockwood1865a5d2010-07-03 00:44:05 -040070 MtpServer(int fd, MtpDatabase* database,
Mike Lockwood8e2a2802010-07-02 15:15:07 -040071 int fileGroup, int filePerm, int directoryPerm);
Mike Lockwood16864ba2010-05-11 17:16:59 -040072 virtual ~MtpServer();
73
74 void addStorage(const char* filePath);
75 inline void addStorage(MtpStorage* storage) { mStorages.push(storage); }
76 MtpStorage* getStorage(MtpStorageID id);
Mike Lockwood16864ba2010-05-11 17:16:59 -040077 void run();
78
Mike Lockwood21ef7d02010-06-30 17:00:35 -040079 MtpProperty* getObjectProperty(MtpPropertyCode propCode);
80 MtpProperty* getDeviceProperty(MtpPropertyCode propCode);
81
Mike Lockwood873871f2010-07-12 18:54:16 -040082 void sendObjectAdded(MtpObjectHandle handle);
83 void sendObjectRemoved(MtpObjectHandle handle);
84
Mike Lockwood16864ba2010-05-11 17:16:59 -040085private:
Mike Lockwood21ef7d02010-06-30 17:00:35 -040086 void initObjectProperties();
87
Mike Lockwood916076c2010-06-04 09:49:21 -040088 bool handleRequest();
Mike Lockwood16864ba2010-05-11 17:16:59 -040089
90 MtpResponseCode doGetDeviceInfo();
91 MtpResponseCode doOpenSession();
92 MtpResponseCode doCloseSession();
93 MtpResponseCode doGetStorageIDs();
94 MtpResponseCode doGetStorageInfo();
95 MtpResponseCode doGetObjectPropsSupported();
96 MtpResponseCode doGetObjectHandles();
Mike Lockwood343af4e2010-08-02 10:52:20 -040097 MtpResponseCode doGetNumObjects();
Mike Lockwood16864ba2010-05-11 17:16:59 -040098 MtpResponseCode doGetObjectPropValue();
99 MtpResponseCode doGetObjectInfo();
100 MtpResponseCode doGetObject();
101 MtpResponseCode doSendObjectInfo();
102 MtpResponseCode doSendObject();
103 MtpResponseCode doDeleteObject();
104 MtpResponseCode doGetObjectPropDesc();
105};
106
Mike Lockwood7850ef92010-05-14 10:10:36 -0400107}; // namespace android
108
Mike Lockwood16864ba2010-05-11 17:16:59 -0400109#endif // _MTP_SERVER_H