| // Copyright 2018 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 SMBPROVIDER_PROTO_H_ |
| #define SMBPROVIDER_PROTO_H_ |
| |
| #include <string> |
| #include <vector> |
| |
| #include "smbprovider/mount_config.h" |
| #include "smbprovider/proto_bindings/directory_entry.pb.h" |
| |
| #include <base/check.h> |
| |
| namespace smbprovider { |
| |
| // Used as buffer for serialized protobufs. |
| using ProtoBlob = std::vector<uint8_t>; |
| |
| // Serializes |proto| to the byte array |proto_blob|. Returns ERROR_OK on |
| // success and ERROR_FAILED on failure. |
| ErrorType SerializeProtoToBlob(const google::protobuf::MessageLite& proto, |
| ProtoBlob* proto_blob); |
| |
| // Helper method to check whether a Proto has valid fields. |
| bool IsValidOptions(const GetSharesOptionsProto& options); |
| |
| // Helper method to get the entry path from a proto. |
| std::string GetEntryPath(const GetSharesOptionsProto& options); |
| |
| // Helper method to get the corresponding method name for each proto. |
| const char* GetMethodName(const GetSharesOptionsProto& unused); |
| |
| template <typename Proto> |
| int32_t GetMountId(const Proto& options) { |
| return options.mount_id(); |
| } |
| |
| template <> |
| int32_t GetMountId(const GetSharesOptionsProto& unused); |
| |
| // Struct mapping to DirectoryEntryProto. |
| struct DirectoryEntry { |
| bool is_directory; |
| std::string name; |
| std::string full_path; |
| int64_t size; |
| int64_t last_modified_time; |
| |
| DirectoryEntry() = default; |
| |
| DirectoryEntry(bool is_directory, |
| const std::string& name, |
| const std::string& full_path, |
| int64_t size, |
| int64_t last_modified_time) |
| : is_directory(is_directory), |
| name(name), |
| full_path(full_path), |
| size(size), |
| last_modified_time(last_modified_time) {} |
| |
| DirectoryEntry(bool is_directory, |
| const std::string& name, |
| const std::string& full_path) |
| : DirectoryEntry(is_directory, |
| name, |
| full_path, |
| -1 /* size */, |
| -1 /* last_modified_time */) {} |
| }; |
| |
| // Converts a vector of DirectoryEnts into a DirectoryEntryListProto. |
| void SerializeDirEntryVectorToProto( |
| const std::vector<DirectoryEntry>& entries_vector, |
| DirectoryEntryListProto* entries_proto); |
| |
| void AddDirectoryEntry(const DirectoryEntry& entry, |
| DirectoryEntryListProto* proto); |
| |
| void ConvertToProto(const DirectoryEntry& entry, DirectoryEntryProto* proto); |
| |
| void AddToHostnamesProto(const std::string& hostname, HostnamesProto* proto); |
| |
| } // namespace smbprovider |
| |
| #endif // SMBPROVIDER_PROTO_H_ |