279 function interface_mt:sslctx() |
279 function interface_mt:sslctx() |
280 return self._sslctx |
280 return self._sslctx |
281 end |
281 end |
282 |
282 |
283 function interface_mt:ssl_info() |
283 function interface_mt:ssl_info() |
284 return self.conn.info and self.conn:info() |
284 local sock = self.conn; |
|
285 if not sock.info then return nil, "not-implemented"; end |
|
286 return sock:info(); |
285 end |
287 end |
286 |
288 |
287 function interface_mt:ssl_peercertificate() |
289 function interface_mt:ssl_peercertificate() |
288 return self.conn.getpeercertificate and self.conn:getpeercertificate() |
290 local sock = self.conn; |
|
291 if not sock.getpeercertificate then return nil, "not-implemented"; end |
|
292 return sock:getpeercertificate(); |
289 end |
293 end |
290 |
294 |
291 function interface_mt:ssl_peerverification() |
295 function interface_mt:ssl_peerverification() |
292 return self.conn.getpeerverification and self.conn:getpeerverification() |
296 local sock = self.conn; |
|
297 if not sock.getpeerverification then return nil, { { "Chain verification not supported" } }; end |
|
298 return sock:getpeerverification(); |
293 end |
299 end |
294 |
300 |
295 function interface_mt:ssl_peerfinished() |
301 function interface_mt:ssl_peerfinished() |
296 return self.conn.getpeerfinished and self.conn:getpeerfinished() |
302 local sock = self.conn; |
|
303 if not sock.getpeerfinished then return nil, "not-implemented"; end |
|
304 return sock:getpeerfinished(); |
297 end |
305 end |
298 |
306 |
299 function interface_mt:resume() |
307 function interface_mt:resume() |
300 self:_lock(self.nointerface, false, self.nowriting); |
308 self:_lock(self.nointerface, false, self.nowriting); |
301 if self.readcallback and not self.eventread then |
309 if self.readcallback and not self.eventread then |