syntax = "proto3"; package dbproto; import "bep/bep.proto"; import "google/protobuf/timestamp.proto"; // Same as bep.FileInfo, but without blocks message FileInfoTruncated { string name = 1; int64 size = 3; int64 modified_s = 5; uint64 modified_by = 12; bep.Vector version = 9; int64 sequence = 10; reserved 16; // blocks string symlink_target = 17; bytes blocks_hash = 18; bytes encrypted = 19; bep.FileInfoType type = 2; uint32 permissions = 4; int32 modified_ns = 11; int32 block_size = 13; bep.PlatformData platform = 14; // The local_flags fields stores flags that are relevant to the local // host only. It is not part of the protocol, doesn't get sent or // received (we make sure to zero it), nonetheless we need it on our // struct and to be able to serialize it to/from the database. uint32 local_flags = 1000; // The version_hash is an implementation detail and not part of the wire // format. bytes version_hash = 1001; // The time when the inode was last changed (i.e., permissions, xattrs // etc changed). This is host-local, not sent over the wire. int64 inode_change_ns = 1002; // The size of the data appended to the encrypted file on disk. This is // host-local, not sent over the wire. int32 encryption_trailer_size = 1003; bool deleted = 6; bool invalid = 7; bool no_permissions = 8; } message FileVersion { bep.Vector version = 1; bool deleted = 2; repeated bytes devices = 3; repeated bytes invalid_devices = 4; } message VersionList { repeated FileVersion versions = 1; } // BlockList is the structure used to store block lists message BlockList { repeated bep.BlockInfo blocks = 1; } // IndirectionHashesOnly is used to only unmarshal the indirection hashes // from a FileInfo message IndirectionHashesOnly { bytes blocks_hash = 18; bytes version_hash = 1001; } // For each folder and device we keep one of these to track the current // counts and sequence. We also keep one for the global state of the folder. message Counts { int32 files = 1; int32 directories = 2; int32 symlinks = 3; int32 deleted = 4; int64 bytes = 5; int64 sequence = 6; // zero for the global state bytes device_id = 17; // device ID for remote devices, or special values for local/global uint32 local_flags = 18; // the local flag for this count bucket } message CountsSet { repeated Counts counts = 1; int64 created = 2; // unix nanos } message ObservedFolder { google.protobuf.Timestamp time = 1; string label = 2; bool receive_encrypted = 3; bool remote_encrypted = 4; } message ObservedDevice { google.protobuf.Timestamp time = 1; string name = 2; string address = 3; }