blob: bc9cdd4e7367fd2b0308f85d5927ea241e0e9c51 [file] [log] [blame]
// 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.
#include "smbprovider/proto.h"
#include <base/check.h>
#include <base/logging.h>
#include <dbus/smbprovider/dbus-constants.h>
#include "smbprovider/constants.h"
#include "smbprovider/proto_bindings/directory_entry.pb.h"
namespace smbprovider {
ErrorType SerializeProtoToBlob(const google::protobuf::MessageLite& proto,
ProtoBlob* proto_blob) {
DCHECK(proto_blob);
proto_blob->resize(proto.ByteSizeLong());
bool success =
proto.SerializeToArray(proto_blob->data(), proto.ByteSizeLong());
if (!success) {
LOG(ERROR) << "Unable to serialise proto " << proto.GetTypeName()
<< " size " << proto.GetCachedSize();
}
return success ? ERROR_OK : ERROR_FAILED;
}
bool IsValidOptions(const GetSharesOptionsProto& options) {
return options.has_server_url();
}
std::string GetEntryPath(const GetSharesOptionsProto& options) {
return options.server_url();
}
const char* GetMethodName(const GetSharesOptionsProto& unused) {
return kGetSharesMethod;
}
template <>
int32_t GetMountId(const GetSharesOptionsProto& unused) {
return kInternalMountId;
}
void SerializeDirEntryVectorToProto(
const std::vector<DirectoryEntry>& entries_vector,
DirectoryEntryListProto* entries_proto) {
for (const auto& e : entries_vector) {
AddDirectoryEntry(e, entries_proto);
}
}
void AddDirectoryEntry(const DirectoryEntry& entry,
DirectoryEntryListProto* proto) {
DCHECK(proto);
DirectoryEntryProto* new_entry_proto = proto->add_entries();
ConvertToProto(entry, new_entry_proto);
}
void ConvertToProto(const DirectoryEntry& entry, DirectoryEntryProto* proto) {
DCHECK(proto);
proto->set_is_directory(entry.is_directory);
proto->set_name(entry.name);
proto->set_size(entry.size);
proto->set_last_modified_time(entry.last_modified_time);
}
void AddToHostnamesProto(const std::string& hostname, HostnamesProto* proto) {
DCHECK(proto);
proto->add_hostnames(hostname);
}
} // namespace smbprovider