blob: 2d043df2f5adfe8f81b3a553437bce4ee97a1d46 [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.
virtual std::vector<std::string> EnumerateStorages(
DBus::Error& error) OVERRIDE;
virtual std::vector<uint8_t> GetStorageInfo(const std::string& storageName,
DBus::Error& error) OVERRIDE;
virtual std::string OpenStorage(const std::string& storageName,
const std::string& mode,
DBus::Error& error) OVERRIDE;
virtual void CloseStorage(const std::string& handle,
DBus::Error& error) OVERRIDE;
virtual std::vector<uint32_t> ReadDirectoryEntryIds(
const std::string& handle,
const uint32_t& fileId,
DBus::Error& error) OVERRIDE;
virtual std::vector<uint8_t> GetFileInfo(const std::string& handle,
const std::vector<uint32_t>& fileIds,
DBus::Error& error) OVERRIDE;
virtual 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;
virtual bool IsAlive(DBus::Error& error) OVERRIDE;
// DeviceEventDelegate implementation.
virtual void StorageAttached(const std::string& storage_name) OVERRIDE;
virtual 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:
// Handle to StorageName map.
typedef std::map<std::string, std::string> HandleMap;
// Returns the StorageName for a handle, or an empty string on failure.
std::string LookupHandle(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_