Android-cuttlefish cvd tool
file_sync_protocol.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 2007 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#pragma once
18
19#include <stdint.h>
20
21#define MKID(a, b, c, d) ((a) | ((b) << 8) | ((c) << 16) | ((d) << 24))
22
23#define ID_LSTAT_V1 MKID('S', 'T', 'A', 'T')
24#define ID_STAT_V2 MKID('S', 'T', 'A', '2')
25#define ID_LSTAT_V2 MKID('L', 'S', 'T', '2')
26
27#define ID_LIST_V1 MKID('L', 'I', 'S', 'T')
28#define ID_LIST_V2 MKID('L', 'I', 'S', '2')
29#define ID_DENT_V1 MKID('D', 'E', 'N', 'T')
30#define ID_DENT_V2 MKID('D', 'N', 'T', '2')
31
32#define ID_SEND_V1 MKID('S', 'E', 'N', 'D')
33#define ID_SEND_V2 MKID('S', 'N', 'D', '2')
34#define ID_RECV_V1 MKID('R', 'E', 'C', 'V')
35#define ID_RECV_V2 MKID('R', 'C', 'V', '2')
36#define ID_DONE MKID('D', 'O', 'N', 'E')
37#define ID_DATA MKID('D', 'A', 'T', 'A')
38#define ID_OKAY MKID('O', 'K', 'A', 'Y')
39#define ID_FAIL MKID('F', 'A', 'I', 'L')
40#define ID_QUIT MKID('Q', 'U', 'I', 'T')
41
43 uint32_t id; // ID_STAT, et cetera.
44 uint32_t path_length; // <= 1024
45 // Followed by 'path_length' bytes of path (not NUL-terminated).
46} __attribute__((packed));
47
48struct __attribute__((packed)) sync_stat_v1 {
49 uint32_t id;
50 uint32_t mode;
51 uint32_t size;
52 uint32_t mtime;
53};
54
55struct __attribute__((packed)) sync_stat_v2 {
56 uint32_t id;
57 uint32_t error;
58 uint64_t dev;
59 uint64_t ino;
60 uint32_t mode;
61 uint32_t nlink;
62 uint32_t uid;
63 uint32_t gid;
64 uint64_t size;
65 int64_t atime;
66 int64_t mtime;
67 int64_t ctime;
68};
69
70struct __attribute__((packed)) sync_dent_v1 {
71 uint32_t id;
72 uint32_t mode;
73 uint32_t size;
74 uint32_t mtime;
75 uint32_t namelen;
76}; // followed by `namelen` bytes of the name.
77
78struct __attribute__((packed)) sync_dent_v2 {
79 uint32_t id;
80 uint32_t error;
81 uint64_t dev;
82 uint64_t ino;
83 uint32_t mode;
84 uint32_t nlink;
85 uint32_t uid;
86 uint32_t gid;
87 uint64_t size;
88 int64_t atime;
89 int64_t mtime;
90 int64_t ctime;
91 uint32_t namelen;
92}; // followed by `namelen` bytes of the name.
93
94enum SyncFlag : uint32_t {
99 kSyncFlagDryRun = 0x8000'0000U,
100};
101
102enum class CompressionType {
103 None,
104 Any,
105 Brotli,
106 LZ4,
107 Zstd,
108};
109
110// send_v1 sent the path in a buffer, followed by a comma and the mode as a string.
111// send_v2 sends just the path in the first request, and then sends another syncmsg (with the
112// same ID!) with details.
113struct __attribute__((packed)) sync_send_v2 {
114 uint32_t id;
115 uint32_t mode;
116 uint32_t flags;
117};
118
119// Likewise, recv_v1 just sent the path without any accompanying data.
120struct __attribute__((packed)) sync_recv_v2 {
121 uint32_t id;
122 uint32_t flags;
123};
124
125struct __attribute__((packed)) sync_data {
126 uint32_t id;
127 uint32_t size;
128}; // followed by `size` bytes of data.
129
130struct __attribute__((packed)) sync_status {
131 uint32_t id;
132 uint32_t msglen;
133}; // followed by `msglen` bytes of error message, if id == ID_FAIL.
134
135union syncmsg {
136 sync_stat_v1 stat_v1;
137 sync_stat_v2 stat_v2;
138 sync_dent_v1 dent_v1;
139 sync_dent_v2 dent_v2;
140 sync_data data;
141 sync_status status;
142 sync_send_v2 send_v2_setup;
144};
145
146#define SYNC_DATA_MAX (64 * 1024)
#define error(format, args...)
Definition: fec_private.h:201
static bool sync_recv_v2(SyncConnection &sc, const char *rpath, const char *lpath, const char *name, uint64_t expected_size, CompressionType compression)
Definition: file_sync_client.cpp:1157
enum SyncFlag __attribute__
Definition: file_sync_protocol.h:48
SyncFlag
Definition: file_sync_protocol.h:94
@ kSyncFlagLZ4
Definition: file_sync_protocol.h:97
@ kSyncFlagNone
Definition: file_sync_protocol.h:95
@ kSyncFlagDryRun
Definition: file_sync_protocol.h:99
@ kSyncFlagZstd
Definition: file_sync_protocol.h:98
@ kSyncFlagBrotli
Definition: file_sync_protocol.h:96
uint32_t id
Definition: file_sync_protocol.h:0
CompressionType
Definition: file_sync_protocol.h:102
uint32_t size
Definition: io.h:2
Definition: file_sync_protocol.h:42
uint32_t id
Definition: file_sync_protocol.h:43
uint32_t path_length
Definition: file_sync_protocol.h:44
Definition: file_sync_protocol.h:135
sync_dent_v2 dent_v2
Definition: file_sync_protocol.h:139
sync_send_v2 send_v2_setup
Definition: file_sync_protocol.h:142
sync_status status
Definition: file_sync_protocol.h:141
sync_stat_v1 stat_v1
Definition: file_sync_protocol.h:136
sync_recv_v2 recv_v2_setup
Definition: file_sync_protocol.h:143
sync_dent_v1 dent_v1
Definition: file_sync_protocol.h:138
sync_data data
Definition: file_sync_protocol.h:140
sync_stat_v2 stat_v2
Definition: file_sync_protocol.h:137