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 }