mirror of
https://github.com/nestriness/cdc-file-transfer.git
synced 2026-01-30 12:25:35 +02:00
Adds support for local syncs of files and folders on the same Windows machine, e.g. cdc_rsync C:\source C:\dest. The two main changes are - Skip the check whether the port is available remotely with PortManager. - Do not deploy cdc_rsync_server. - Run cdc_rsync_server directly, not through an SSH tunnel. The current implementation is not optimal as it starts cdc_rsync_server as a separate process and communicates to it via a TCP port.
77 lines
2.6 KiB
C++
77 lines
2.6 KiB
C++
/*
|
|
* Copyright 2022 Google LLC
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
#ifndef CDC_RSYNC_SERVER_ARCH_H_
|
|
#define CDC_RSYNC_SERVER_ARCH_H_
|
|
|
|
#include <string>
|
|
|
|
namespace cdc_ft {
|
|
|
|
// Abstracts all architecture specifics of cdc_rsync_server deployment.
|
|
class ServerArch {
|
|
public:
|
|
enum class Type {
|
|
kLinux = 0,
|
|
kWindows = 1,
|
|
};
|
|
|
|
// Detects the arch type based on the destination path, e.g. path
|
|
// starting with C: indicate Windows.
|
|
static Type Detect(const std::string& destination);
|
|
|
|
// Returns the arch type that matches the current process's type.
|
|
static Type LocalType();
|
|
|
|
// Returns the (local!) arch specific filename of cdc_rsync[.exe].
|
|
static std::string CdcRsyncFilename();
|
|
|
|
ServerArch(Type type);
|
|
~ServerArch();
|
|
|
|
// Returns the arch-specific filename of cdc_rsync_server[.exe].
|
|
std::string CdcServerFilename() const;
|
|
|
|
// Returns the arch-specific directory where cdc_rsync_server is deployed.
|
|
std::string RemoteToolsBinDir() const;
|
|
|
|
// Returns an arch-specific SSH shell command that gets invoked in order to
|
|
// start cdc_rsync_server. The command
|
|
// - returns |exit_code_not_found| if cdc_rsync_server does not exist (to
|
|
// prevent the confusing bash output message
|
|
// "bash: .../cdc_rsync_server: No such file or directory"), and
|
|
// - runs the server with the provided |args|.
|
|
std::string GetStartServerCommand(int exit_code_not_found,
|
|
const std::string& args) const;
|
|
|
|
// Returns an arch-specific SFTP command sequence that deploys the server
|
|
// component on the target gets invoked after
|
|
// cdc_rsync_server has been copied to a temp location. The commands
|
|
// - create the cdc-file-transfer/bin folder if it doesn't exist yet,
|
|
// - make the old cdc_rsync_server writable if it exists,
|
|
// - copy cdc_rsync_server to a temp location,
|
|
// - make the new cdc_rsync_server executable (Linux only) and
|
|
// - replaces the existing cdc_rsync_server by the temp one.
|
|
std::string GetDeploySftpCommands() const;
|
|
|
|
private:
|
|
Type type_;
|
|
};
|
|
|
|
} // namespace cdc_ft
|
|
|
|
#endif // CDC_RSYNC_SERVER_ARCH_H_
|