MtpServer.h revision 16864bae0f51c32c456da2c43adf7a057c0c4882
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"
2316864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood#include "mtp.h"
2416864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood
2516864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood#include "MtpUtils.h"
2616864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood
2716864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwoodclass MtpStorage;
2816864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwoodclass MtpDatabase;
2916864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood
3016864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwoodclass MtpServer {
3116864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood
3216864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwoodprivate:
3316864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood    // file descriptor for MTP kernel driver
3416864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood    int                 mFD;
3516864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood
3616864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood    // path to our sqlite3 database
3716864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood    const char*         mDatabasePath;
3816864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood
3916864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood    MtpDatabase*        mDatabase;
4016864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood
4116864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood    // current session ID
4216864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood    MtpSessionID        mSessionID;
4316864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood    // true if we have an open session and mSessionID is valid
4416864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood    bool                mSessionOpen;
4516864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood
4616864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood    MtpRequestPacket    mRequest;
4716864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood    MtpDataPacket       mData;
4816864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood    MtpResponsePacket   mResponse;
4916864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood
5016864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood    MtpStorageList      mStorages;
5116864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood
5216864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood    // handle for new object, set by SendObjectInfo and used by SendObject
5316864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood    MtpObjectHandle     mSendObjectHandle;
5416864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood    MtpString           mSendObjectFilePath;
5516864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood    size_t              mSendObjectFileSize;
5616864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood
5716864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwoodpublic:
5816864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood                        MtpServer(int fd, const char* databasePath);
5916864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood    virtual             ~MtpServer();
6016864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood
6116864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood    void                addStorage(const char* filePath);
6216864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood    inline void         addStorage(MtpStorage* storage) { mStorages.push(storage); }
6316864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood    MtpStorage*         getStorage(MtpStorageID id);
6416864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood    void                scanStorage();
6516864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood    void                run();
6616864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood
6716864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwoodprivate:
6816864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood    void                handleRequest();
6916864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood
7016864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood    MtpResponseCode     doGetDeviceInfo();
7116864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood    MtpResponseCode     doOpenSession();
7216864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood    MtpResponseCode     doCloseSession();
7316864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood    MtpResponseCode     doGetStorageIDs();
7416864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood    MtpResponseCode     doGetStorageInfo();
7516864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood    MtpResponseCode     doGetObjectPropsSupported();
7616864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood    MtpResponseCode     doGetObjectHandles();
7716864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood    MtpResponseCode     doGetObjectPropValue();
7816864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood    MtpResponseCode     doGetObjectInfo();
7916864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood    MtpResponseCode     doGetObject();
8016864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood    MtpResponseCode     doSendObjectInfo();
8116864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood    MtpResponseCode     doSendObject();
8216864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood    MtpResponseCode     doDeleteObject();
8316864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood    MtpResponseCode     doGetObjectPropDesc();
8416864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood};
8516864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood
8616864bae0f51c32c456da2c43adf7a057c0c4882Mike Lockwood#endif // _MTP_SERVER_H
87