blob: 00d186e8d40370d9319a39cc6205ceaa8188df6f [file] [log] [blame]
#ifndef THIRD_PARTY_MILOTIC_INTERNAL_CC_PROXY_SSH_CLIENT_H_
#define THIRD_PARTY_MILOTIC_INTERNAL_CC_PROXY_SSH_CLIENT_H_
#include <cstddef>
#include <cstdint>
#include <memory>
#include <optional>
#include <string>
#include <vector>
#include "absl/status/status.h"
#include "absl/status/statusor.h"
#include "absl/strings/string_view.h"
#include "absl/time/time.h"
#include "proxy_config.pb.h"
namespace milotic {
class ExecutionContext {
public:
virtual ~ExecutionContext() = default;
virtual absl::Status Write(std::string data) = 0;
virtual size_t WriteBytesPending() const = 0;
};
class ExecutionCallbacks {
public:
virtual ~ExecutionCallbacks() = default;
virtual absl::Status OnStdout(ExecutionContext* context,
absl::string_view data) = 0;
virtual absl::Status OnStderr(ExecutionContext* context,
absl::string_view data) = 0;
virtual void OnDone(ExecutionContext* context,
absl::StatusOr<int> result) = 0;
virtual absl::Status OnWritesDone(ExecutionContext* context,
size_t write_bytes_pending) {
return absl::OkStatus();
}
};
class SshClient {
public:
struct CreationOptions {
std::vector<std::string> credentials_filename;
std::string private_cache_path;
std::string host;
uint16_t port;
size_t max_connections;
absl::Duration connect_timeout = absl::InfiniteDuration();
absl::Duration connect_retry_interval = absl::ZeroDuration();
std::optional<milotic_grpc_proxy::GrpcAuth> grpc_auth;
uint16_t oauth_port = 2999;
absl::Duration token_timeout = absl::Minutes(10);
std::string user = "root";
};
struct CommandOptions {
absl::Duration timeout = absl::InfiniteDuration();
absl::Duration retry_interval = absl::ZeroDuration();
bool use_pty = false;
};
using CreateFn = absl::StatusOr<std::unique_ptr<SshClient>>(CreationOptions);
virtual ~SshClient() = default;
virtual absl::StatusOr<std::unique_ptr<ExecutionContext>> ExecuteCommand(
absl::string_view command, ExecutionCallbacks* callbacks,
const CommandOptions& options) = 0;
virtual bool IsConnected() const = 0;
};
} // namespace milotic
#endif // THIRD_PARTY_MILOTIC_INTERNAL_CC_PROXY_SSH_CLIENT_H_