// 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_CONSTANTS_H_
#define SMBPROVIDER_CONSTANTS_H_

#include <fcntl.h>    /* for file flags */
#include <stddef.h>   /* for size_t */
#include <sys/stat.h> /* for mode_t */

#include <cstdint>

namespace smbprovider {

// Buffer size used for reading a directory.
constexpr size_t kDirEntBufferSize = 1024 * 32;

// Number of microseconds to keep metadata in the cache.
constexpr uint64_t kMetadataCacheLifetimeMicroseconds = 30 * 1000 * 1000;

// Default number of entries at a time to buffer in directory iterators.
constexpr size_t kDefaultMetadataBatchSize = 512;

// Default flags for created files.
constexpr int kCreateFileFlags = O_CREAT | O_WRONLY | O_TRUNC | O_EXCL;

// Default permissions for created entries.
constexpr mode_t kCreateEntryPermissions = 0755;

// Windows/DOS file attribute for a directory.
constexpr uint16_t kFileAttributeDirectory = 0x10;

// Windows/DOS file attribute for a symlink.
constexpr uint16_t kFileAttributeReparsePoint = 0x400;

// SMB Url scheme
constexpr char kSmbUrlScheme[] = "smb://";

// MountId used to differentiate between an error case and a method that
// operates without a mount.
constexpr int32_t kInternalMountId = -2;

// Initial number of entries to send during read directory. This number is
// smaller than kReadDirectoryMaxBatchSize since we want the initial page to
// load as quickly as possible.
constexpr uint32_t kReadDirectoryInitialBatchSize = 64;

// Maximum number of entries to send at a time for read directory.
constexpr uint32_t kReadDirectoryMaxBatchSize = 2048;

// Initial ID value for the IdMap of file descriptors.
constexpr uint32_t kInitialFileDescriptorId = 1;

// Initial ID value for the IdMap of mount IDs.
constexpr uint32_t kInitialMountId = 0;

// Entries returned by smbc_getdents() that we ignore.
extern const char kEntryParent[];
extern const char kEntrySelf[];

// $HOME environment variable.
extern const char kHomeEnvironmentVariable[];
// Set as $HOME in order for libsmbclient to read smb.conf file.
extern const char kSmbProviderHome[];

// Location and file name for smb configuration file.
extern const char kSmbConfLocation[];
extern const char kSmbConfFile[];

// Data for smb config file.
extern const char kSmbConfData[];

// Environment variables for Kerberos.
extern const char kKrb5ConfigEnvironmentVariable[];
extern const char kKrb5CCNameEnvironmentVariable[];
extern const char kKrb5TraceEnvironmentVariable[];

// Location and file name for krb5 configuration file.
extern const char kKrb5ConfLocation[];
extern const char kKrb5ConfFile[];

// Location and file name for credential cache file.
extern const char kCCacheLocation[];
extern const char kCCacheFile[];

// Location and file name for the Kerberos trace file.
extern const char kKrbTraceLocation[];
extern const char kKrbTraceFile[];

}  // namespace smbprovider

#endif  // SMBPROVIDER_CONSTANTS_H_
