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