aboutsummaryrefslogtreecommitdiffstats
path: root/src/cmd/tls_client.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/tls_client.cpp')
-rw-r--r--src/cmd/tls_client.cpp28
1 files changed, 16 insertions, 12 deletions
diff --git a/src/cmd/tls_client.cpp b/src/cmd/tls_client.cpp
index 543119fb9..903824a78 100644
--- a/src/cmd/tls_client.cpp
+++ b/src/cmd/tls_client.cpp
@@ -39,7 +39,7 @@ using namespace std::placeholders;
namespace {
-int connect_to_host(const std::string& host, u16bit port, const std::string& transport)
+int connect_to_host(const std::string& host, u16bit port, bool tcp)
{
hostent* host_addr = ::gethostbyname(host.c_str());
@@ -49,7 +49,7 @@ int connect_to_host(const std::string& host, u16bit port, const std::string& tra
if(host_addr->h_addrtype != AF_INET) // FIXME
throw std::runtime_error(host + " has IPv6 address, not supported");
- int type = (transport == "tcp") ? SOCK_STREAM : SOCK_DGRAM;
+ int type = tcp ? SOCK_STREAM : SOCK_DGRAM;
int fd = ::socket(PF_INET, type, 0);
if(fd == -1)
@@ -130,13 +130,6 @@ void process_data(const byte buf[], size_t buf_size)
std::cout << buf[i];
}
-std::string protocol_chooser(const std::vector<std::string>& protocols)
- {
- for(size_t i = 0; i != protocols.size(); ++i)
- std::cout << "Protocol " << i << " = " << protocols[i] << "\n";
- return "http/1.1";
- }
-
int tls_client(int argc, char* argv[])
{
if(argc != 2 && argc != 3 && argc != 4)
@@ -145,6 +138,9 @@ int tls_client(int argc, char* argv[])
return 1;
}
+ const bool request_protocol = true;
+ const std::string use_protocol = "http/1.1";
+
try
{
AutoSeeded_RNG rng;
@@ -167,14 +163,22 @@ int tls_client(int argc, char* argv[])
u32bit port = argc >= 3 ? Botan::to_u32bit(argv[2]) : 443;
const std::string transport = argc >= 4 ? argv[3] : "tcp";
- int sockfd = connect_to_host(host, port, transport);
+ const bool use_tcp = (transport == "tcp");
+
+ int sockfd = connect_to_host(host, port, use_tcp);
+
+ auto protocol_chooser = [use_protocol](const std::vector<std::string>& protocols) -> std::string {
+ for(size_t i = 0; i != protocols.size(); ++i)
+ std::cout << "Server offered protocol " << i << " = " << protocols[i] << "\n";
+ return use_protocol;
+ };
auto socket_write =
- (transport == "tcp") ?
+ use_tcp ?
std::bind(stream_socket_write, sockfd, _1, _2) :
std::bind(dgram_socket_write, sockfd, _1, _2);
- auto version = policy.latest_supported_version(transport != "tcp");
+ auto version = policy.latest_supported_version(!use_tcp);
TLS::Client client(socket_write,
process_data,