diff options
Diffstat (limited to 'modules/io-tls/examples/tls_client.cpp')
-rw-r--r-- | modules/io-tls/examples/tls_client.cpp | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/modules/io-tls/examples/tls_client.cpp b/modules/io-tls/examples/tls_client.cpp index e2ce4a5..d01e2bf 100644 --- a/modules/io-tls/examples/tls_client.cpp +++ b/modules/io-tls/examples/tls_client.cpp @@ -2,6 +2,8 @@ #include <iostream> +#include <forstio/buffer.hpp> + saw::error_or<void> real_main(){ using namespace saw; auto eo_aio = setup_async_io(); @@ -9,6 +11,7 @@ saw::error_or<void> real_main(){ return std::move(eo_aio.get_error()); } auto& aio = eo_aio.get_value(); + wait_scope wait{aio.event_loop}; auto eo_tls_net = setup_tls_network(aio.io->get_network()); if(eo_tls_net.is_error()){ @@ -16,6 +19,52 @@ saw::error_or<void> real_main(){ } auto& tls_net = eo_tls_net.get_value(); + auto eo_tls_addr = tls_net->resolve_address("keldu.de", 443).take(); + if(eo_tls_addr.is_error()){ + return std::move(eo_tls_addr.get_error()); + } + auto& tls_addr = eo_tls_addr.get_value(); + + ring_buffer buff{4096u * 4096u}; + + own<io_stream<net::Tls<net::Os>>> tls_io = nullptr; + + std::cout<<"Preparing to connect"<<std::endl; + tls_net->connect(*tls_addr).then([&](auto tls_io_str){ + tls_io = std::move(tls_io_str); + std::cout<<"Connected"<<std::endl; + std::string_view get_req{"GET / HTTP/1.1"}; + auto write_res = tls_io->write(&get_req[0], get_req.size()); + + std::cout<<"Sending: "<<get_req<<std::endl; + + }).detach(); + + wait.wait_for(1000u*1000u); + wait.wait_for(1000u*1000u); + wait.wait_for(1000u*1000u); + if(!tls_io){ + return make_error<invalid_state>("Never managed to connect"); + } + { + auto read_res = tls_io->read(&buff.write(), buff.write_segment_length()); + if(read_res.is_error()){ + std::cerr<<":("<<std::endl; + return; + } + auto& read_res_val = read_res.get_value(); + buff.write_advance(read_res_val); + + for(uint64_t i = 0u; i < buff.read_segment_length(); ++i){ + std::cout<<buff.read(i); + } + std::cout<<std::endl; + + } + wait.wait_for(1000u*1000u); + wait.wait_for(1000u*1000u); + wait.wait_for(1000u*1000u); + return make_void(); } |