| #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_ |