blob: 550805a6b39c8b25ca1f73437329ddb444135484 [file] [log] [blame]
// Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef MTPD_SERVER_IMPL_H_
#define MTPD_SERVER_IMPL_H_
#include <string>
#include <vector>
#include <base/basictypes.h>
#include <base/compiler_specific.h>
#include "device_event_delegate.h"
#include "device_manager.h"
#include "file_entry.h"
#include "mtpd_server/mtpd_server.h"
namespace mtpd {
class DeviceManager;
// The D-bus server for the mtpd daemon.
class MtpdServer : public org::chromium::Mtpd_adaptor,
public DBus::ObjectAdaptor,
public DeviceEventDelegate {
public:
explicit MtpdServer(DBus::Connection& connection);
virtual ~MtpdServer();
// org::chromium::Mtpd_adaptor implementation.
std::vector<std::string> EnumerateStorages(DBus::Error& error) override;
std::vector<uint8_t> GetStorageInfo(const std::string& storageName,
DBus::Error& error) override;
std::vector<uint8_t> GetStorageInfoFromDevice(const std::string& storageName,
DBus::Error& error) override;
std::string OpenStorage(const std::string& storageName,
const std::string& mode,
DBus::Error& error) override;
void CloseStorage(const std::string& handle,
DBus::Error& error) override;
std::vector<uint32_t> ReadDirectoryEntryIds(
const std::string& handle,
const uint32_t& fileId,
DBus::Error& error) override;
std::vector<uint8_t> GetFileInfo(const std::string& handle,
const std::vector<uint32_t>& fileIds,
DBus::Error& error) override;
std::vector<uint8_t> ReadFileChunk(const std::string& handle,
const uint32_t& fileId,
const uint32_t& offset,
const uint32_t& count,
DBus::Error& error) override;
void CopyFileFromLocal(const std::string& handle,
const DBus::FileDescriptor& fileDescriptor,
const uint32_t& parentId,
const std::string& fileName,
DBus::Error& error) override;
void DeleteObject(const std::string& handle,
const uint32_t& objectId,
DBus::Error& error) override;
void RenameObject(const std::string& handle,
const uint32_t& objectId,
const std::string& newName,
DBus::Error& error) override;
void CreateDirectory(const std::string& handle,
const uint32_t& parentId,
const std::string& directoryName,
DBus::Error& error) override;
bool IsAlive(DBus::Error& error) override;
// DeviceEventDelegate implementation.
void StorageAttached(const std::string& storage_name) override;
void StorageDetached(const std::string& storage_name) override;
// Returns a file descriptor for monitoring device events.
int GetDeviceEventDescriptor() const;
// Processes the available device events.
void ProcessDeviceEvents();
private:
// StorageHandleInfo is a pair of StorageName and Mode.
typedef std::pair<std::string, std::string> StorageHandleInfo;
// Handle to StorageHandleInfo map.
typedef std::map<std::string, StorageHandleInfo> HandleMap;
// Returns the StorageName for a handle, or an empty string on failure.
std::string LookupHandle(const std::string& handle);
// Returns true if the storage is opened with write access.
bool IsOpenedWithWrite(const std::string& handle);
HandleMap handle_map_;
// Device manager needs to be last, so it is the first to be destroyed.
DeviceManager device_manager_;
DISALLOW_COPY_AND_ASSIGN(MtpdServer);
};
} // namespace mtpd
#endif // MTPD_SERVER_IMPL_H_