// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

syntax = "proto2";

option optimize_for = LITE_RUNTIME;

package smbprovider;

// ErrorType matches 1:1 to FileSystemProvider#ProviderError in Chromium up
// until ERROR_PROVIDER_ERROR_COUNT. The ErrorTypes past that are specific to
// SmbProvider.
enum ErrorType {
  ERROR_NONE = 0;
  ERROR_OK = 1;
  ERROR_FAILED = 2;
  ERROR_IN_USE = 3;
  ERROR_EXISTS = 4;
  ERROR_NOT_FOUND = 5;
  ERROR_ACCESS_DENIED = 6;
  ERROR_TOO_MANY_OPENED = 7;
  ERROR_NO_MEMORY = 8;
  ERROR_NO_SPACE = 9;
  ERROR_NOT_A_DIRECTORY = 10;
  ERROR_INVALID_OPERATION = 11;
  ERROR_SECURITY = 12;
  ERROR_ABORT = 13;
  ERROR_NOT_A_FILE = 14;
  ERROR_NOT_EMPTY = 15;
  ERROR_INVALID_URL = 16;
  ERROR_IO = 17;
  // Count of ProviderError.
  ERROR_PROVIDER_ERROR_COUNT = 18;
  // The following errors are not ProviderErrors, instead they are specific to
  // SmbProvider. The jump in int value is to account for possible future
  // additions to ProviderError.
  ERROR_DBUS_PARSE_FAILED = 50;
  ERROR_COPY_PENDING = 51;
  ERROR_COPY_FAILED = 52;
  ERROR_SMB1_UNSUPPORTED = 53;
  ERROR_OPERATION_PENDING = 54;
  ERROR_OPERATION_FAILED = 55;
}

message DirectoryEntryProto {
  optional bool is_directory = 1;
  optional string name = 2;
  // Size in bytes.
  optional int64 size = 3;
  // Seconds since unix epoch.
  optional int64 last_modified_time = 4;
}

// DirectoryEntryListProto is included in responses to ReadDirectory D-Bus
// method calls.
message DirectoryEntryListProto { repeated DirectoryEntryProto entries = 1; }

// Used for passing inputs into SmbProvider.Mount().
message MountOptionsProto {
  // Path of the share to be mounted (e.g. "smb://qnap/testshare"). Must be of
  // the form "smb://hostname/sharename", and may have the hostname resolved to
  // an IP address (e.g. "smb://192.168.3.142/testshare").
  optional string path = 1;
  // Original path of the share to be mounted. Must be of the form
  // "smb://hostname/sharename", and must have the hostname as entered by the
  // user and not resolved to an IP address (unless the user entered an IP
  // address as the hostname).
  optional string original_path = 6;

  // Authentication parameters.
  optional string workgroup = 2;
  optional string username = 3;

  // Mount options set by the client.
  optional MountConfigProto mount_config = 4;

  // Skip attempting to connect to the share, and instead just register the
  // mount.
  optional bool skip_connect = 5;

  // Username hash of the mounting profile.
  optional string account_hash = 7;

  // Save the password on successful mount. Requires |skip_connect| = false.
  optional bool save_password = 8;

  // Use a saved password.
  optional bool restore_password = 9;
}

message MountConfigProto {
  // Boolean indication whether or not to enable NTLM protocol. False
  // disables the NTLM protocol.
  optional bool enable_ntlm = 1;
}

// Used for passing inputs into SmbProvider.Unmount().
message UnmountOptionsProto {
  // ID of the mount returned from Mount().
  optional int32 mount_id = 1;

  // Remove any saved password for the mount.
  optional bool remove_password = 2;
}

// Used for passing inputs into SmbProvider.ReadDirectory().
message ReadDirectoryOptionsProto {
  // ID of the mount returned from Mount().
  optional int32 mount_id = 1;
  // Path of the directory to be read. The paths are relative to the mount root.
  // (e.g. "/testfolder")
  optional string directory_path = 2;
}

// Used for passing inputs into SmbProvider.GetMetadataEntry().
message GetMetadataEntryOptionsProto {
  // ID of the mount returned from Mount().
  optional int32 mount_id = 1;
  // Path of the entry to be read. This can be a file or directory path.
  // The paths are relative to the mount root. (e.g. "/testfolder/dog.jpg")
  optional string entry_path = 2;
}

// Used for passing inputs into SmbProvider.OpenFile().
message OpenFileOptionsProto {
  // ID of the mount returned from Mount().
  optional int32 mount_id = 1;
  // Path of the file to be opened. This must be a file path.
  // Paths are relative to the mount root, e.g. "/animals/dog.jpg".
  optional string file_path = 2;
  // Boolean indicating write status. False indicates read only.
  optional bool writeable = 3;
}

// Used for passing inputs into SmbProvider.CloseFile().
message CloseFileOptionsProto {
  // ID of the mount returned from Mount().
  optional int32 mount_id = 1;
  // ID of the file returned from OpenFile().
  optional int32 file_id = 2;
}

// Used for passing inputs into SmbProvider.ReadFile().
message ReadFileOptionsProto {
  // ID of the mount returned from Mount().
  optional int32 mount_id = 1;
  // ID of the file returned from OpenFile().
  optional int32 file_id = 2;
  // Offset of the file to be read.
  optional int64 offset = 3;
  // Length in bytes to be read.
  optional int32 length = 4;
}

// Used for passing inputs into SmbProvider.DeleteEntry().
message DeleteEntryOptionsProto {
  // ID of the mount returned from Mount().
  optional int32 mount_id = 1;
  // Path of the entry to be deleted. This can be a file or directory path.
  // The paths are relative to the mount root. (e.g. "/testfolder/dog.jpg")
  optional string entry_path = 2;
  // Boolean indicating whether the delete should be recursive for directories.
  optional bool recursive = 3;
}

// Used for passing inputs into SmbProvider.CreateFile().
message CreateFileOptionsProto {
  // ID of the mount returned from Mount().
  optional int32 mount_id = 1;
  // Path of the file to be created. Paths are relative to the mount root,
  // e.g. "/animals/dog.jpg".
  optional string file_path = 2;
}

// Used for passing inputs into SmbProvider.Truncate().
message TruncateOptionsProto {
  // ID of the mount returned from Mount().
  optional int32 mount_id = 1;
  // Path of the file to be truncated. Paths are relative to the mount root,
  // e.g. "/animals/dog.jpg".
  optional string file_path = 2;
  // New desired length of the file.
  optional int64 length = 3;
}

// Used for passing inputs into SmbProvider.WriteFile().
message WriteFileOptionsProto {
  // ID of the mount returned from Mount().
  optional int32 mount_id = 1;
  // ID of the file returned from OpenFile().
  optional int32 file_id = 2;
  // Offset of the file for the write.
  optional int64 offset = 3;
  // Length of data being written.
  optional int32 length = 4;
}

// Used for passing inputs into SmbProvider.CreateDirectory().
message CreateDirectoryOptionsProto {
  // ID of the mount returned from Mount().
  optional int32 mount_id = 1;
  // Path of the directory to be created. Paths are relative to the mount root.
  // (e.g. "/testfolder/dogs")
  optional string directory_path = 2;
  // Boolean indicating whether the create should be recursive, meaning the
  // parent directories will also be created if they currently don't exist.
  optional bool recursive = 3;
}

// Used for passing inputs into SmbProvider.MoveEntry().
message MoveEntryOptionsProto {
  // ID of the mount returned from Mount().
  optional int32 mount_id = 1;
  // Source path of the entry to be moved. This can be a file or directory path.
  // Paths are relative to the mount root. (e.g. "/testfolder/dog.jpg")
  optional string source_path = 2;
  // Destination path for the entry to be moved to. This must be a non-existent
  // file or directory path. Paths are relative to the mount
  // root. (e.g. "/testfolder/dog.jpg")
  optional string target_path = 3;
}

// Used for passing inputs into SmbProvider.CopyEntry().
message CopyEntryOptionsProto {
  // ID of the mount returned from Mount().
  optional int32 mount_id = 1;
  // Source path of the entry to be copied. This can be a file or directory
  // path. Paths are relative to the mount root. (e.g. "/testfolder/dog.jpg")
  optional string source_path = 2;
  // Destination path for the entry to be copied to. This must be a non-existent
  // file or directory path. Paths are relative to the mount root.
  // (e.g. "/testfolder/dog.jpg")
  optional string target_path = 3;
}

message GetDeleteListOptionsProto {
  optional int32 mount_id = 1;
  optional string entry_path = 2;
}

message DeleteListProto {
  repeated string entries = 1;
}

// Used for passing inputs into SmbProvider.GetShares().
message GetSharesOptionsProto {
  // Url of the server containing the shares. (e.g. "smb://192.168.0.1")
  optional string server_url = 1;
}

// Used for returning a list of hostnames from a parsed NetBios response packet.
message HostnamesProto {
  repeated string hostnames = 1;
}

// Used for passing inputs into Smbprovider.UpdateMountCredentials().
message UpdateMountCredentialsOptionsProto {
  // Mount ID of the mount to be updated.
  optional int32 mount_id = 1;
  // Updated workgroup.
  optional string workgroup = 2;
  // Updated username.
  optional string username = 3;
}

// Used for passing inputs into Smbprovider.UpdateSharePath().
message UpdateSharePathOptionsProto {
  // Mount ID of the mount to be updated.
  optional int32 mount_id = 1;

  // Share path of the mount to be updated.
  optional string path = 2;
}
