1dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project/*
2dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project
3dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project *
4dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
5dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * you may not use this file except in compliance with the License.
6dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * You may obtain a copy of the License at
7dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project *
8dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
9dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project *
10dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
11dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
12dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * See the License for the specific language governing permissions and
14dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * limitations under the License.
15dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project */
16dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
17dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#ifndef _FILE_SYNC_SERVICE_H_
18dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define _FILE_SYNC_SERVICE_H_
19dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
20d236d071b960a387f536712f0314b99696167178Elliott Hughes#include <string>
2105786779f390b23cc8611b101458cd174cf4e938Josh Gao#include <vector>
22d236d071b960a387f536712f0314b99696167178Elliott Hughes
23dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define MKID(a,b,c,d) ((a) | ((b) << 8) | ((c) << 16) | ((d) << 24))
24dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
25dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define ID_STAT MKID('S','T','A','T')
26dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define ID_LIST MKID('L','I','S','T')
27dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define ID_SEND MKID('S','E','N','D')
28dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define ID_RECV MKID('R','E','C','V')
29dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define ID_DENT MKID('D','E','N','T')
30dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define ID_DONE MKID('D','O','N','E')
31dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define ID_DATA MKID('D','A','T','A')
32dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define ID_OKAY MKID('O','K','A','Y')
33dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define ID_FAIL MKID('F','A','I','L')
34dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define ID_QUIT MKID('Q','U','I','T')
35dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
36aa2454919098ee14cd232669f1e7dbb33ed07ccfElliott Hughesstruct SyncRequest {
37aa2454919098ee14cd232669f1e7dbb33ed07ccfElliott Hughes    uint32_t id;  // ID_STAT, et cetera.
38aa2454919098ee14cd232669f1e7dbb33ed07ccfElliott Hughes    uint32_t path_length;  // <= 1024
39aa2454919098ee14cd232669f1e7dbb33ed07ccfElliott Hughes    // Followed by 'path_length' bytes of path (not NUL-terminated).
40aa2454919098ee14cd232669f1e7dbb33ed07ccfElliott Hughes} __attribute__((packed)) ;
41aa2454919098ee14cd232669f1e7dbb33ed07ccfElliott Hughes
422d4121c0dcc93382bcd7ea6476f433d8254919ddElliott Hughesunion syncmsg {
43aa2454919098ee14cd232669f1e7dbb33ed07ccfElliott Hughes    struct __attribute__((packed)) {
448d68591c46716a855cca4c8af6c36656310f55dcJosh Gao        uint32_t id;
458d68591c46716a855cca4c8af6c36656310f55dcJosh Gao        uint32_t mode;
468d68591c46716a855cca4c8af6c36656310f55dcJosh Gao        uint32_t size;
478d68591c46716a855cca4c8af6c36656310f55dcJosh Gao        uint32_t time;
48dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    } stat;
49aa2454919098ee14cd232669f1e7dbb33ed07ccfElliott Hughes    struct __attribute__((packed)) {
508d68591c46716a855cca4c8af6c36656310f55dcJosh Gao        uint32_t id;
518d68591c46716a855cca4c8af6c36656310f55dcJosh Gao        uint32_t mode;
528d68591c46716a855cca4c8af6c36656310f55dcJosh Gao        uint32_t size;
538d68591c46716a855cca4c8af6c36656310f55dcJosh Gao        uint32_t time;
548d68591c46716a855cca4c8af6c36656310f55dcJosh Gao        uint32_t namelen;
55dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    } dent;
56aa2454919098ee14cd232669f1e7dbb33ed07ccfElliott Hughes    struct __attribute__((packed)) {
578d68591c46716a855cca4c8af6c36656310f55dcJosh Gao        uint32_t id;
588d68591c46716a855cca4c8af6c36656310f55dcJosh Gao        uint32_t size;
59dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    } data;
60aa2454919098ee14cd232669f1e7dbb33ed07ccfElliott Hughes    struct __attribute__((packed)) {
618d68591c46716a855cca4c8af6c36656310f55dcJosh Gao        uint32_t id;
628d68591c46716a855cca4c8af6c36656310f55dcJosh Gao        uint32_t msglen;
6376f2a93b18e0d321d527cb64c2b2c4281e1cf70fMark Lindner    } status;
64aa2454919098ee14cd232669f1e7dbb33ed07ccfElliott Hughes};
65dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
66aa2454919098ee14cd232669f1e7dbb33ed07ccfElliott Hughesvoid file_sync_service(int fd, void* cookie);
67aa2454919098ee14cd232669f1e7dbb33ed07ccfElliott Hughesbool do_sync_ls(const char* path);
6805786779f390b23cc8611b101458cd174cf4e938Josh Gaobool do_sync_push(const std::vector<const char*>& srcs, const char* dst);
6905786779f390b23cc8611b101458cd174cf4e938Josh Gaobool do_sync_pull(const std::vector<const char*>& srcs, const char* dst,
7044a42677cfde5f1ae6d0be67dcd07659d9c0f265Felipe Leme                  bool copy_attrs, const char* name=nullptr);
7105786779f390b23cc8611b101458cd174cf4e938Josh Gao
72aa2454919098ee14cd232669f1e7dbb33ed07ccfElliott Hughesbool do_sync_sync(const std::string& lpath, const std::string& rpath, bool list_only);
73dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
74dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define SYNC_DATA_MAX (64*1024)
75dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
76dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#endif
77