4 local t_concat = table.concat;
5 local t_insert = table.insert;
6 local setmetatable = setmetatable;
11 local finalisers = { };
12 local id = function (v) return v end
14 function handlers.options(a, k, b)
15 local o = a[k] or { };
16 if type(b) ~= "table" then b = { b } end
17 for key, value in pairs(b) do
18 if value == true or value == false then
27 handlers.verify = handlers.options;
28 handlers.verifyext = handlers.options;
30 function finalisers.options(a)
32 for opt, enable in pairs(a) do
40 finalisers.verify = finalisers.options;
41 finalisers.verifyext = finalisers.options;
43 function finalisers.ciphers(a)
44 if type(a) == "table" then
45 return t_concat(a, ":");
50 local protocols = { "sslv2", "sslv3", "tlsv1", "tlsv1_1", "tlsv1_2" };
51 for i = 1, #protocols do protocols[protocols[i] .. "+"] = i - 1; end
53 local function protocol(a)
54 local min_protocol = protocols[a.protocol];
56 a.protocol = "sslv23";
57 for i = 1, min_protocol do
58 t_insert(a.options, "no_"..protocols[i]);
63 local function apply(a, b)
64 if type(b) == "table" then
65 for k,v in pairs(b) do
66 (handlers[k] or rawset)(a, k, v);
71 local function final(a)
73 for k,v in pairs(a) do
74 f[k] = (finalisers[k] or id)(v);
88 return setmetatable({options={}}, sslopts_mt);