blob: 67a8a04875c0f0f2ce330001dd5954400354b200 [file] [log] [blame]
Lei Zhang91af91d2012-08-03 11:02:20 -07001// Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef MTPD_SERVER_IMPL_H_
6#define MTPD_SERVER_IMPL_H_
7
8#include <string>
9#include <vector>
10
Lei Zhang91af91d2012-08-03 11:02:20 -070011#include <base/compiler_specific.h>
Alex Vakulenkof695ea02016-01-22 19:20:14 -080012#include <base/macros.h>
Lei Zhang91af91d2012-08-03 11:02:20 -070013
Eric Caruso0076fa72017-08-21 15:31:19 -070014#include "mtpd/dbus_adaptors/org.chromium.Mtpd.h"
Eric Caruso721d82e2017-08-21 15:57:30 -070015#include "mtpd/device_event_delegate.h"
16#include "mtpd/device_manager.h"
17#include "mtpd/file_entry.h"
Lei Zhang91af91d2012-08-03 11:02:20 -070018
19namespace mtpd {
20
21class DeviceManager;
22
23// The D-bus server for the mtpd daemon.
Lei Zhang91af91d2012-08-03 11:02:20 -070024class MtpdServer : public org::chromium::Mtpd_adaptor,
Lei Zhang63e89bd2012-08-06 17:05:33 -070025 public DBus::ObjectAdaptor,
26 public DeviceEventDelegate {
Lei Zhang91af91d2012-08-03 11:02:20 -070027 public:
28 explicit MtpdServer(DBus::Connection& connection);
29 virtual ~MtpdServer();
30
31 // org::chromium::Mtpd_adaptor implementation.
Alex Vakulenko3a09a2b2014-12-11 07:53:44 -080032 std::vector<std::string> EnumerateStorages(DBus::Error& error) override;
33 std::vector<uint8_t> GetStorageInfo(const std::string& storageName,
34 DBus::Error& error) override;
Yuki Awano82560282015-05-19 16:41:20 +090035 std::vector<uint8_t> GetStorageInfoFromDevice(const std::string& storageName,
36 DBus::Error& error) override;
Alex Vakulenko3a09a2b2014-12-11 07:53:44 -080037 std::string OpenStorage(const std::string& storageName,
38 const std::string& mode,
39 DBus::Error& error) override;
Lei Zhang1c82c532017-04-17 22:09:12 -070040 void CloseStorage(const std::string& handle, DBus::Error& error) override;
41 std::vector<uint32_t> ReadDirectoryEntryIds(const std::string& handle,
42 const uint32_t& fileId,
43 DBus::Error& error) override;
Alex Vakulenko3a09a2b2014-12-11 07:53:44 -080044 std::vector<uint8_t> GetFileInfo(const std::string& handle,
45 const std::vector<uint32_t>& fileIds,
46 DBus::Error& error) override;
47 std::vector<uint8_t> ReadFileChunk(const std::string& handle,
48 const uint32_t& fileId,
49 const uint32_t& offset,
50 const uint32_t& count,
51 DBus::Error& error) override;
Yuki Awanod814ec12015-02-13 13:17:18 +090052 void CopyFileFromLocal(const std::string& handle,
53 const DBus::FileDescriptor& fileDescriptor,
54 const uint32_t& parentId,
55 const std::string& fileName,
56 DBus::Error& error) override;
Yuki Awano3a9c4192015-02-24 13:37:40 +090057 void DeleteObject(const std::string& handle,
58 const uint32_t& objectId,
59 DBus::Error& error) override;
Yuki Awano595a8e22015-03-09 15:58:18 +090060 void RenameObject(const std::string& handle,
61 const uint32_t& objectId,
62 const std::string& newName,
63 DBus::Error& error) override;
Yuki Awanob8062c02015-03-12 20:09:25 +090064 void CreateDirectory(const std::string& handle,
65 const uint32_t& parentId,
66 const std::string& directoryName,
67 DBus::Error& error) override;
Alex Vakulenko3a09a2b2014-12-11 07:53:44 -080068 bool IsAlive(DBus::Error& error) override;
Lei Zhang91af91d2012-08-03 11:02:20 -070069
Lei Zhang63e89bd2012-08-06 17:05:33 -070070 // DeviceEventDelegate implementation.
Alex Vakulenko3a09a2b2014-12-11 07:53:44 -080071 void StorageAttached(const std::string& storage_name) override;
72 void StorageDetached(const std::string& storage_name) override;
Lei Zhang63e89bd2012-08-06 17:05:33 -070073
Lei Zhang91af91d2012-08-03 11:02:20 -070074 // Returns a file descriptor for monitoring device events.
75 int GetDeviceEventDescriptor() const;
76
77 // Processes the available device events.
78 void ProcessDeviceEvents();
79
80 private:
Yuki Awano3a9c4192015-02-24 13:37:40 +090081 // StorageHandleInfo is a pair of StorageName and Mode.
Lei Zhanga50737f2017-04-27 13:50:30 -070082 using StorageHandleInfo = std::pair<std::string, std::string>;
Yuki Awano3a9c4192015-02-24 13:37:40 +090083
84 // Handle to StorageHandleInfo map.
Lei Zhanga50737f2017-04-27 13:50:30 -070085 using HandleMap = std::map<std::string, StorageHandleInfo>;
Lei Zhang0d66f922012-08-07 15:22:05 -070086
Lei Zhanga3264132012-08-16 22:52:49 -070087 // Returns the StorageName for a handle, or an empty string on failure.
88 std::string LookupHandle(const std::string& handle);
89
Yuki Awano3a9c4192015-02-24 13:37:40 +090090 // Returns true if the storage is opened with write access.
91 bool IsOpenedWithWrite(const std::string& handle);
92
Lei Zhang0d66f922012-08-07 15:22:05 -070093 HandleMap handle_map_;
94
95 // Device manager needs to be last, so it is the first to be destroyed.
Lei Zhang63e89bd2012-08-06 17:05:33 -070096 DeviceManager device_manager_;
97
Lei Zhang91af91d2012-08-03 11:02:20 -070098 DISALLOW_COPY_AND_ASSIGN(MtpdServer);
99};
100
101} // namespace mtpd
102
103#endif // MTPD_SERVER_IMPL_H_