// 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;

// Initial ID value for the IdMap of CopyProgress trackers.
constexpr uint32_t kInitialCopyProgressTrackerId = 0;

// Initial ID value for the IdMap of ReadDirProgress trackers.
constexpr uint32_t kInitialReadDirProgressTrackerId = 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_
