blob: 60f76e1bb2df219c91f17819dd7e539534a79fa6 [file] [log] [blame]
// Copyright 2017 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_SAMBA_INTERFACE_H_
#define SMBPROVIDER_SAMBA_INTERFACE_H_
#include <base/macros.h>
#include <libsmbclient.h>
#include <string>
namespace smbprovider {
// Interface for interacting with Samba. The actual implementation calls smbc_*
// methods 1:1, while the fake implementation deals with fake directories and
// fake entries. All paths that are passed to the methods in this interface are
// smb:// urls. The methods will return errno on failure.
class SambaInterface {
public:
SambaInterface() = default;
virtual ~SambaInterface() = default;
// Opens a file at a given |file_path|.
// |file_id| is the file id of the opened file. This will be -1 on failure.
// Flags should be either O_RDONLY or O_RDWR.
// Returns 0 on success, and errno on failure.
virtual int32_t OpenFile(const std::string& file_path,
int32_t flags,
int32_t* file_id) WARN_UNUSED_RESULT = 0;
// Closes file from a given |file_id|, which is from OpenFile().
// Returns 0 on success, and errno on failure.
virtual int32_t CloseFile(int32_t file_id) WARN_UNUSED_RESULT = 0;
// Opens directory in a given |directory_path|.
// |dir_id| is the directory id of the opened directory. This will be
// -1 on failure.
// Returns 0 on success, and errno on failure.
virtual int32_t OpenDirectory(const std::string& directory_path,
int32_t* dir_id) WARN_UNUSED_RESULT = 0;
// Closes directory from a given |dir_id|, which is from OpenDirectory().
// Returns 0 on success, and errno on failure.
virtual int32_t CloseDirectory(int32_t dir_id) WARN_UNUSED_RESULT = 0;
// Gets multiple directory entries.
// Returns 0 on success, and errno on failure.
// |dir_id| is the directory_id from OpenDirectory().
// |dirp| is the pointer to a buffer that will receive the directory entries.
// |dirp_buffer_size| is the size of the |dirp| buffer in bytes.
// |bytes_read| is the number of bytes read, this will be -1 on failure.
virtual int32_t GetDirectoryEntries(int32_t dir_id,
smbc_dirent* dirp,
int32_t dirp_buffer_size,
int32_t* bytes_read)
WARN_UNUSED_RESULT = 0;
// Gets information about a file or directory.
// Returns 0 on success, and errno on failure.
// |full_path| is the smb url to get information for.
// |stat| is the pointer to a buffer that will be filled with standard Unix
// struct stat information.
virtual int32_t GetEntryStatus(const std::string& full_path,
struct stat* stat) WARN_UNUSED_RESULT = 0;
private:
static_assert(sizeof(int32_t) == sizeof(int),
"Ensure that int32_t is same as int, due to casting of int to "
"int32_t in samba interface");
DISALLOW_COPY_AND_ASSIGN(SambaInterface);
};
} // namespace smbprovider
#endif // SMBPROVIDER_SAMBA_INTERFACE_H_