// 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 #include #include #include #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. // // Example Usage: // // DBus::Connection server_conn = DBus::Connection::SystemBus(); // server_conn.request_name("org.chromium.Mtpd"); // MtpdServer* server = new(std::nothrow) MtpdServer(server_conn, &manager); // // At this point the server should be attached to the main loop. 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 EnumerateStorages( DBus::Error& error) OVERRIDE; virtual std::vector 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 ReadDirectoryByPath(const std::string& handle, const std::string& filePath, DBus::Error& error) OVERRIDE; virtual std::vector ReadDirectoryById(const std::string& handle, const uint32_t& fileId, DBus::Error& error) OVERRIDE; virtual std::vector ReadFileChunkByPath(const std::string& handle, const std::string& filePath, const uint32_t& offset, const uint32_t& count, DBus::Error& error) OVERRIDE; virtual std::vector ReadFileChunkById(const std::string& handle, const uint32_t& fileId, const uint32_t& offset, const uint32_t& count, DBus::Error& error) OVERRIDE; virtual std::vector GetFileInfoByPath(const std::string& handle, const std::string& filePath, DBus::Error& error) OVERRIDE; virtual std::vector GetFileInfoById(const std::string& handle, const uint32_t& fileId, 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 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_