libsshpp v0.1.7
Modern C++17 wrapper for libssh
Loading...
Searching...
No Matches
session_options.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: LGPL-2.1-or-later
2#pragma once
3
4#include <sshpp/config.hpp>
5
6#include <sshpp/export.hpp>
7#include <sshpp/library.hpp>
8#include <sshpp/result.hpp>
9
10#include <chrono>
11#include <cstdint>
12#include <filesystem>
13#include <optional>
14#include <string>
15#include <vector>
16
17namespace sshpp {
18
20enum class Locking { none, internal };
22
25struct SSHPP_API SessionOptions {
26 // --- connection ------------------------------------------------------
27 std::string host;
28 std::optional<std::uint16_t> port;
29 std::optional<std::string> user;
30 std::optional<std::string> bind_address;
31 std::optional<int> fd;
32 std::optional<std::string> proxy_command;
33 std::optional<std::string> proxy_jump;
34
35 // --- timing -----------------------------------------------------------
36 std::optional<std::chrono::microseconds> timeout;
37 std::optional<bool> tcp_nodelay;
38
39 // --- files / config ----------------------------------------------------
40 std::optional<std::filesystem::path> ssh_dir;
41 std::optional<std::filesystem::path> known_hosts;
42 std::optional<std::filesystem::path> global_known_hosts;
43 std::vector<std::filesystem::path> identities;
44 std::optional<std::filesystem::path> config_file;
45 bool process_config = true;
46
47 // --- crypto negotiation -------------------------------------------------
48 std::optional<std::string> ciphers_client_to_server;
49 std::optional<std::string> ciphers_server_to_client;
50 std::optional<std::string> key_exchange;
51 std::optional<std::string> hmac_client_to_server;
52 std::optional<std::string> hmac_server_to_client;
53 std::optional<std::string> host_key_algorithms;
54 std::optional<std::string> public_key_accepted_types;
55 std::optional<Compression> compression;
56 std::optional<int> compression_level;
57
58 // --- rekeying ------------------------------------------------------------
59 std::optional<std::uint64_t> rekey_data_bytes;
60 std::optional<std::chrono::seconds> rekey_time;
61
62 // --- host key policy ------------------------------------------------------
63 std::optional<StrictHostKeyChecking> strict_host_key_checking;
64
65 // --- GSSAPI -----------------------------------------------------------------
66 std::optional<std::string> gssapi_server_identity;
67 std::optional<std::string> gssapi_client_identity;
68 std::optional<bool> gssapi_delegate_credentials;
69
70 // --- wrapper behaviour --------------------------------------------------------
71 Locking locking = Locking::none;
72 LogLevel log_level = LogLevel::none;
73
75 static Result<SessionOptions> parse_target(std::string_view target);
76
77 Result<void> validate() const;
78
79 class Builder;
80 static Builder builder();
81};
82
86public:
87 Builder& host(std::string v) { opts_.host = std::move(v); return *this; }
88 Builder& port(std::uint16_t v) { opts_.port = v; return *this; }
89 Builder& user(std::string v) { opts_.user = std::move(v); return *this; }
90 Builder& timeout(std::chrono::microseconds v) { opts_.timeout = v; return *this; }
91 Builder& identity(std::filesystem::path v) { opts_.identities.push_back(std::move(v)); return *this; }
93 auto r = opts_.validate();
94 if (!r) return r.error();
95 return opts_;
96 }
97private:
98 SessionOptions opts_;
99};
100
102
103} // namespace sshpp
104
105#if SSHPP_HEADER_ONLY
107#endif
const ErrorInfo & error() const &noexcept
Definition result.hpp:104
Definition result.hpp:16
Definition session_options.hpp:85
Result< SessionOptions > build()
Definition session_options.hpp:92
Builder & port(std::uint16_t v)
Definition session_options.hpp:88
Builder & user(std::string v)
Definition session_options.hpp:89
Builder & host(std::string v)
Definition session_options.hpp:87
Builder & identity(std::filesystem::path v)
Definition session_options.hpp:91
Builder & timeout(std::chrono::microseconds v)
Definition session_options.hpp:90
Definition auth.hpp:18
Locking
Definition session_options.hpp:20
LogLevel
Definition library.hpp:15
StrictHostKeyChecking
Definition session_options.hpp:19
Compression
Definition session_options.hpp:21
Definition session_options.hpp:25
std::vector< std::filesystem::path > identities
Definition session_options.hpp:43
std::optional< std::string > proxy_command
Definition session_options.hpp:32
std::optional< std::string > hmac_server_to_client
Definition session_options.hpp:52
std::optional< std::string > ciphers_server_to_client
Definition session_options.hpp:49
std::optional< std::uint16_t > port
Definition session_options.hpp:28
std::string host
Definition session_options.hpp:27
std::optional< std::string > bind_address
Definition session_options.hpp:30
std::optional< std::string > public_key_accepted_types
Definition session_options.hpp:54
std::optional< std::string > proxy_jump
Definition session_options.hpp:33
std::optional< std::string > host_key_algorithms
Definition session_options.hpp:53
std::optional< std::chrono::microseconds > timeout
Definition session_options.hpp:36
std::optional< std::filesystem::path > global_known_hosts
Definition session_options.hpp:42
std::optional< int > fd
Definition session_options.hpp:31
std::optional< std::filesystem::path > ssh_dir
Definition session_options.hpp:40
std::optional< Compression > compression
Definition session_options.hpp:55
static Builder builder()
Definition session_options.hpp:101
std::optional< std::uint64_t > rekey_data_bytes
Definition session_options.hpp:59
std::optional< std::string > gssapi_client_identity
Definition session_options.hpp:67
std::optional< std::string > user
Definition session_options.hpp:29
std::optional< std::filesystem::path > known_hosts
Definition session_options.hpp:41
std::optional< bool > tcp_nodelay
Definition session_options.hpp:37
std::optional< std::string > key_exchange
Definition session_options.hpp:50
std::optional< std::filesystem::path > config_file
Definition session_options.hpp:44
std::optional< int > compression_level
Definition session_options.hpp:56
std::optional< std::chrono::seconds > rekey_time
Definition session_options.hpp:60
std::optional< bool > gssapi_delegate_credentials
Definition session_options.hpp:68
std::optional< std::string > ciphers_client_to_server
Definition session_options.hpp:48
Result< void > validate() const
Definition session_options.ipp:11
std::optional< std::string > hmac_client_to_server
Definition session_options.hpp:51
std::optional< std::string > gssapi_server_identity
Definition session_options.hpp:66
std::optional< StrictHostKeyChecking > strict_host_key_checking
Definition session_options.hpp:63