MtpServer.h revision 7d77dcfadd7fb637ed2c3aef5bb3990dd0a67dc0
116864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood/* 216864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood * Copyright (C) 2010 The Android Open Source Project 316864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood * 416864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood * Licensed under the Apache License, Version 2.0 (the "License"); 516864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood * you may not use this file except in compliance with the License. 616864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood * You may obtain a copy of the License at 716864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood * 816864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood * http://www.apache.org/licenses/LICENSE-2.0 916864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood * 1016864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood * Unless required by applicable law or agreed to in writing, software 1116864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood * distributed under the License is distributed on an "AS IS" BASIS, 1216864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1316864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood * See the License for the specific language governing permissions and 1416864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood * limitations under the License. 1516864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood */ 1616864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood 1716864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood#ifndef _MTP_SERVER_H 1816864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood#define _MTP_SERVER_H 1916864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood 2016864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood#include "MtpRequestPacket.h" 2116864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood#include "MtpDataPacket.h" 2216864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood#include "MtpResponsePacket.h" 23873871f3e75831bcda6c3f75bb4d53355ca5c53aMike Lockwood#include "MtpEventPacket.h" 2416864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood#include "mtp.h" 2516864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood#include "MtpUtils.h" 2616864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood 27a849440ca96e93f700d62c6e41d48905b4d405b6Mike Lockwood#include <utils/threads.h> 28a849440ca96e93f700d62c6e41d48905b4d405b6Mike Lockwood 297850ef999740f214a1990a9c090d3f3865d435aaMike Lockwoodnamespace android { 307850ef999740f214a1990a9c090d3f3865d435aaMike Lockwood 311865a5ddcfe7b0e8dc211419aea1094b1491a5fdMike Lockwoodclass MtpDatabase; 321865a5ddcfe7b0e8dc211419aea1094b1491a5fdMike Lockwoodclass MtpStorage; 3316864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood 3416864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwoodclass MtpServer { 3516864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood 3616864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwoodprivate: 3716864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood // file descriptor for MTP kernel driver 3816864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood int mFD; 3916864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood 401865a5ddcfe7b0e8dc211419aea1094b1491a5fdMike Lockwood MtpDatabase* mDatabase; 4116864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood 428e2a280ab7f98bf00ff2651f1f93c8f8bd46c08dMike Lockwood // group to own new files and folders 438e2a280ab7f98bf00ff2651f1f93c8f8bd46c08dMike Lockwood int mFileGroup; 448e2a280ab7f98bf00ff2651f1f93c8f8bd46c08dMike Lockwood // permissions for new files and directories 458e2a280ab7f98bf00ff2651f1f93c8f8bd46c08dMike Lockwood int mFilePermission; 468e2a280ab7f98bf00ff2651f1f93c8f8bd46c08dMike Lockwood int mDirectoryPermission; 478e2a280ab7f98bf00ff2651f1f93c8f8bd46c08dMike Lockwood 4816864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood // current session ID 4916864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood MtpSessionID mSessionID; 5016864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood // true if we have an open session and mSessionID is valid 5116864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood bool mSessionOpen; 5216864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood 5316864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood MtpRequestPacket mRequest; 5416864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood MtpDataPacket mData; 5516864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood MtpResponsePacket mResponse; 56873871f3e75831bcda6c3f75bb4d53355ca5c53aMike Lockwood MtpEventPacket mEvent; 5716864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood 5816864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood MtpStorageList mStorages; 5916864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood 6016864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood // handle for new object, set by SendObjectInfo and used by SendObject 6116864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood MtpObjectHandle mSendObjectHandle; 624714b0766ecf48f09f39b4781a5c4deafc092d49Mike Lockwood MtpObjectFormat mSendObjectFormat; 6316864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood MtpString mSendObjectFilePath; 6416864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood size_t mSendObjectFileSize; 6516864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood 66a849440ca96e93f700d62c6e41d48905b4d405b6Mike Lockwood Mutex mMutex; 67a849440ca96e93f700d62c6e41d48905b4d405b6Mike Lockwood 687d77dcfadd7fb637ed2c3aef5bb3990dd0a67dc0Mike Lockwood // represents an MTP object that is being edited using the android extensions 697d77dcfadd7fb637ed2c3aef5bb3990dd0a67dc0Mike Lockwood // for direct editing (BeginEditObject, SendPartialObject, TruncateObject and EndEditObject) 707d77dcfadd7fb637ed2c3aef5bb3990dd0a67dc0Mike Lockwood struct ObjectEdit { 717d77dcfadd7fb637ed2c3aef5bb3990dd0a67dc0Mike Lockwood MtpObjectHandle handle; 727d77dcfadd7fb637ed2c3aef5bb3990dd0a67dc0Mike Lockwood MtpString path; 737d77dcfadd7fb637ed2c3aef5bb3990dd0a67dc0Mike Lockwood uint64_t size; 747d77dcfadd7fb637ed2c3aef5bb3990dd0a67dc0Mike Lockwood MtpObjectFormat format; 757d77dcfadd7fb637ed2c3aef5bb3990dd0a67dc0Mike Lockwood int fd; 767d77dcfadd7fb637ed2c3aef5bb3990dd0a67dc0Mike Lockwood }; 777d77dcfadd7fb637ed2c3aef5bb3990dd0a67dc0Mike Lockwood Vector<ObjectEdit*> mObjectEditList; 787d77dcfadd7fb637ed2c3aef5bb3990dd0a67dc0Mike Lockwood 7916864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwoodpublic: 801865a5ddcfe7b0e8dc211419aea1094b1491a5fdMike Lockwood MtpServer(int fd, MtpDatabase* database, 818e2a280ab7f98bf00ff2651f1f93c8f8bd46c08dMike Lockwood int fileGroup, int filePerm, int directoryPerm); 8216864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood virtual ~MtpServer(); 8316864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood 8430adaaf9d6fd944c8f6a2c7a06774b019878c368Mike Lockwood MtpStorage* getStorage(MtpStorageID id); 8530adaaf9d6fd944c8f6a2c7a06774b019878c368Mike Lockwood inline bool hasStorage() { return mStorages.size() > 0; } 8630adaaf9d6fd944c8f6a2c7a06774b019878c368Mike Lockwood bool hasStorage(MtpStorageID id); 87a849440ca96e93f700d62c6e41d48905b4d405b6Mike Lockwood void addStorage(MtpStorage* storage); 88a849440ca96e93f700d62c6e41d48905b4d405b6Mike Lockwood void removeStorage(MtpStorage* storage); 89a849440ca96e93f700d62c6e41d48905b4d405b6Mike Lockwood 9016864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood void run(); 9116864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood 92873871f3e75831bcda6c3f75bb4d53355ca5c53aMike Lockwood void sendObjectAdded(MtpObjectHandle handle); 93873871f3e75831bcda6c3f75bb4d53355ca5c53aMike Lockwood void sendObjectRemoved(MtpObjectHandle handle); 94873871f3e75831bcda6c3f75bb4d53355ca5c53aMike Lockwood 9516864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwoodprivate: 96a849440ca96e93f700d62c6e41d48905b4d405b6Mike Lockwood void sendStoreAdded(MtpStorageID id); 97a849440ca96e93f700d62c6e41d48905b4d405b6Mike Lockwood void sendStoreRemoved(MtpStorageID id); 98a849440ca96e93f700d62c6e41d48905b4d405b6Mike Lockwood void sendEvent(MtpEventCode code, uint32_t param1); 99a849440ca96e93f700d62c6e41d48905b4d405b6Mike Lockwood 1007d77dcfadd7fb637ed2c3aef5bb3990dd0a67dc0Mike Lockwood void addEditObject(MtpObjectHandle handle, MtpString& path, 1017d77dcfadd7fb637ed2c3aef5bb3990dd0a67dc0Mike Lockwood uint64_t size, MtpObjectFormat format, int fd); 1027d77dcfadd7fb637ed2c3aef5bb3990dd0a67dc0Mike Lockwood ObjectEdit* getEditObject(MtpObjectHandle handle); 1037d77dcfadd7fb637ed2c3aef5bb3990dd0a67dc0Mike Lockwood void removeEditObject(MtpObjectHandle handle); 1047d77dcfadd7fb637ed2c3aef5bb3990dd0a67dc0Mike Lockwood void commitEdit(ObjectEdit* edit); 1057d77dcfadd7fb637ed2c3aef5bb3990dd0a67dc0Mike Lockwood 106916076c6d84dac9b104fbdf94af5dcd7bce669fdMike Lockwood bool handleRequest(); 10716864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood 10816864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood MtpResponseCode doGetDeviceInfo(); 10916864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood MtpResponseCode doOpenSession(); 11016864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood MtpResponseCode doCloseSession(); 11116864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood MtpResponseCode doGetStorageIDs(); 11216864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood MtpResponseCode doGetStorageInfo(); 11316864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood MtpResponseCode doGetObjectPropsSupported(); 11416864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood MtpResponseCode doGetObjectHandles(); 115343af4ef512869695456a91519e73ed3c3d82101Mike Lockwood MtpResponseCode doGetNumObjects(); 116438344fba74ddd6b931ac733fa48643f27b63de3Mike Lockwood MtpResponseCode doGetObjectReferences(); 117438344fba74ddd6b931ac733fa48643f27b63de3Mike Lockwood MtpResponseCode doSetObjectReferences(); 11816864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood MtpResponseCode doGetObjectPropValue(); 1198277cec96ffa55082962591bca1c55abbeec8c26Mike Lockwood MtpResponseCode doSetObjectPropValue(); 1208277cec96ffa55082962591bca1c55abbeec8c26Mike Lockwood MtpResponseCode doGetDevicePropValue(); 1218277cec96ffa55082962591bca1c55abbeec8c26Mike Lockwood MtpResponseCode doSetDevicePropValue(); 1228277cec96ffa55082962591bca1c55abbeec8c26Mike Lockwood MtpResponseCode doResetDevicePropValue(); 123b6da06e9dfb916da4b88e09e8a83e22ddae445b5Mike Lockwood MtpResponseCode doGetObjectPropList(); 12416864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood MtpResponseCode doGetObjectInfo(); 12516864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood MtpResponseCode doGetObject(); 1267d77dcfadd7fb637ed2c3aef5bb3990dd0a67dc0Mike Lockwood MtpResponseCode doGetPartialObject(MtpOperationCode operation); 12716864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood MtpResponseCode doSendObjectInfo(); 12816864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood MtpResponseCode doSendObject(); 12916864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood MtpResponseCode doDeleteObject(); 13016864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood MtpResponseCode doGetObjectPropDesc(); 1318277cec96ffa55082962591bca1c55abbeec8c26Mike Lockwood MtpResponseCode doGetDevicePropDesc(); 1327d77dcfadd7fb637ed2c3aef5bb3990dd0a67dc0Mike Lockwood MtpResponseCode doSendPartialObject(); 1337d77dcfadd7fb637ed2c3aef5bb3990dd0a67dc0Mike Lockwood MtpResponseCode doTruncateObject(); 1347d77dcfadd7fb637ed2c3aef5bb3990dd0a67dc0Mike Lockwood MtpResponseCode doBeginEditObject(); 1357d77dcfadd7fb637ed2c3aef5bb3990dd0a67dc0Mike Lockwood MtpResponseCode doEndEditObject(); 13616864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood}; 13716864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood 1387850ef999740f214a1990a9c090d3f3865d435aaMike Lockwood}; // namespace android 1397850ef999740f214a1990a9c090d3f3865d435aaMike Lockwood 14016864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood#endif // _MTP_SERVER_H 141