summaryrefslogtreecommitdiff
path: root/modules/io-tls/examples/tls_client.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'modules/io-tls/examples/tls_client.cpp')
-rw-r--r--modules/io-tls/examples/tls_client.cpp49
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();
}