syntax = "proto3"; package archive_control.v1; import "archive_control/v1/resource.proto"; import "google/protobuf/timestamp.proto"; enum MaterializationMethod { MATERIALIZATION_METHOD_UNSPECIFIED = 0; MATERIALIZATION_METHOD_HARD_LINK = 1; MATERIALIZATION_METHOD_REFLINK = 2; MATERIALIZATION_METHOD_COPY = 3; MATERIALIZATION_METHOD_PREEXISTING_REUSED = 4; } enum ArtifactKind { ARTIFACT_KIND_UNSPECIFIED = 0; ARTIFACT_KIND_TORRENT_FILE = 1; ARTIFACT_KIND_LIBTORRENT_PARTFILE = 2; ARTIFACT_KIND_OTHER_AUXILIARY = 3; } message ManifestFile { uint32 file_index = 1; string payload_relative_path = 2; string target_canonical_path = 3; uint64 logical_bytes = 4; uint64 allocated_bytes = 5; bool sparse = 6; MaterializationMethod source_staging_method = 7; MaterializationMethod target_method = 8; bool target_preexisted = 9; } message ManifestArtifact { ArtifactKind kind = 1; string payload_relative_path = 2; uint64 logical_bytes = 3; uint64 allocated_bytes = 4; bool sparse = 5; string format = 6; string sha256_hex = 7; } // TransferManifest is written as canonical protobuf JSON into the isolated // Syncthing job namespace. Paths are always relative to configured safe roots. message TransferManifest { uint32 manifest_version = 1; string job_id = 2; ResourceId resource_id = 3; string source_client_id = 4; string target_client_id = 5; string route_id = 6; SelectionSet requested_files = 7; SelectionSet target_baseline_files = 8; SelectionSet transfer_delta_files = 9; repeated ManifestFile files = 10; repeated ManifestArtifact artifacts = 11; ResourceStateFingerprint source_fingerprint = 12; ResourceStateFingerprint target_baseline_fingerprint = 13; google.protobuf.Timestamp created_at = 14; } // ReadyMarker is written last. A destination trusts no manifest until the // marker exists and its digest matches the manifest bytes. message ReadyMarker { string job_id = 1; string manifest_sha256_hex = 2; google.protobuf.Timestamp ready_at = 3; }