Sat, 24 Jul 2010 13:40:16 +0100
Initial commit (LuaSec 0.4)
0 | 1 | -- |
2 | -- Public domain | |
3 | -- | |
4 | require("socket") | |
5 | require("ssl") | |
6 | ||
7 | local params = { | |
8 | mode = "client", | |
9 | protocol = "sslv3", | |
10 | key = "../certs/clientAkey.pem", | |
11 | certificate = "../certs/clientA.pem", | |
12 | cafile = "../certs/rootA.pem", | |
13 | verify = {"peer", "fail_if_no_peer_cert"}, | |
14 | options = {"all", "no_sslv2"}, | |
15 | } | |
16 | ||
17 | ||
18 | local function wait(peer, err) | |
19 | if err == "timeout" or err == "wantread" then | |
20 | socket.select({peer}, nil) | |
21 | elseif err == "wantwrite" then | |
22 | socket.select(nil, {peer}) | |
23 | else | |
24 | peer:close() | |
25 | os.exit(1) | |
26 | end | |
27 | end | |
28 | ||
29 | ||
30 | local peer = socket.tcp() | |
31 | assert( peer:connect("127.0.0.1", 8888) ) | |
32 | ||
33 | -- [[ SSL wrapper | |
34 | peer = assert( ssl.wrap(peer, params) ) | |
35 | peer:settimeout(0.3) | |
36 | local succ, err = peer:dohandshake() | |
37 | while not succ do | |
38 | print("handshake", err) | |
39 | wait(peer, err) | |
40 | succ, err = peer:dohandshake() | |
41 | end | |
42 | print("** Handshake done") | |
43 | --]] | |
44 | ||
45 | -- If the section above is commented, the timeout is not set. | |
46 | -- We set it again for safetiness. | |
47 | peer:settimeout(0.3) | |
48 | ||
49 | local str, err, part = peer:receive("*l") | |
50 | while not str do | |
51 | print(part, err) | |
52 | wait(peer, err) | |
53 | str, err, part = peer:receive("*l") | |
54 | end | |
55 | peer:close() |