1 /+ dub.sdl: 2 name "t8" 3 dflags "-I../source" 4 #dflags "-debug" 5 lflags "-lcares" 6 buildRequirements "allowWarnings" 7 dependency "hio" version="*" 8 dependency "nbuff" version="*" 9 debugVersions "hiossl" 10 +/ 11 12 // test ssl connection 13 14 module tests.t8; 15 16 import std.experimental.logger; 17 import std.datetime; 18 import std.socket; 19 20 import hio.scheduler; 21 import hio.tls; 22 import hio.events; 23 import hio.loop; 24 import hio.socket; 25 26 import nbuff: Nbuff; 27 28 void main() 29 { 30 globalLogLevel = LogLevel.trace; 31 auto loop = getDefaultLoop(); 32 auto s = new AsyncSSLSocket(); 33 s.open(); 34 void server_callback(AsyncSocketLike c) @safe 35 { 36 IORequest iorq; 37 AsyncSSLSocket client = cast(AsyncSSLSocket)c; 38 bool done = false; 39 void io_callback(IOResult r) 40 { 41 infof("got result: %s", r); 42 if (r.error || r.timedout || done) 43 { 44 client.close(); 45 return; 46 } 47 iorq.to_read = 0; 48 iorq.output = Nbuff("ok\n"); 49 done = true; 50 client.io(loop, iorq, 15.seconds); 51 } 52 if ( client is null ) 53 { 54 // accept timed out, just restart acceppting 55 s.accept(loop, 15.seconds, &server_callback); 56 return; 57 } 58 if ( !client.connected ) 59 { 60 // something wrong 61 c.close(); 62 return; 63 } 64 info("client connected, reading request"); 65 iorq.to_read = 128; 66 iorq.callback = &io_callback; 67 client.io(loop, iorq, 15.seconds); 68 } 69 s.bind(new InternetAddress("127.0.0.1", 5555)); 70 s.listen(512); 71 s.cert_file("./cert.pem"); 72 s.key_file("./key.pem"); 73 s.accept(loop, 15.seconds, &server_callback); 74 loop.run(50.seconds); 75 }