383 self.conn = conn; |
384 self.conn = conn; |
384 self._starttls = nil; |
385 self._starttls = nil; |
385 self.onwriteable = interface.tlshandskake; |
386 self.onwriteable = interface.tlshandskake; |
386 self.onreadable = interface.tlshandskake; |
387 self.onreadable = interface.tlshandskake; |
387 self:setflags(true, true); |
388 self:setflags(true, true); |
|
389 self:setwritetimeout(cfg.handshake_timeout); |
388 end |
390 end |
389 end |
391 end |
390 |
392 |
391 function interface:tlshandskake() |
393 function interface:tlshandskake() |
|
394 self:setwritetimeout(false); |
|
395 self:setreadtimeout(false); |
392 local ok, err = self.conn:dohandshake(); |
396 local ok, err = self.conn:dohandshake(); |
393 if ok then |
397 if ok then |
394 log("debug", "TLS handshake on %s complete", tostring(self)); |
398 log("debug", "TLS handshake on %s complete", tostring(self)); |
395 self.onwriteable = nil; |
399 self.onwriteable = nil; |
396 self.onreadable = nil; |
400 self.onreadable = nil; |
404 self:on("status", "ssl-handshake-complete"); |
408 self:on("status", "ssl-handshake-complete"); |
405 end |
409 end |
406 elseif err == "wantread" then |
410 elseif err == "wantread" then |
407 log("debug", "TLS handshake on %s to wait until readable", tostring(self)); |
411 log("debug", "TLS handshake on %s to wait until readable", tostring(self)); |
408 self:setflags(true, false); |
412 self:setflags(true, false); |
409 self:setwritetimeout(false); |
|
410 self:setreadtimeout(cfg.handshake_timeout); |
413 self:setreadtimeout(cfg.handshake_timeout); |
411 elseif err == "wantwrite" then |
414 elseif err == "wantwrite" then |
412 log("debug", "TLS handshake on %s to wait until writable", tostring(self)); |
415 log("debug", "TLS handshake on %s to wait until writable", tostring(self)); |
413 self:setflags(false, true); |
416 self:setflags(false, true); |
414 self:setreadtimeout(false); |
|
415 self:setwritetimeout(cfg.handshake_timeout); |
417 self:setwritetimeout(cfg.handshake_timeout); |
416 else |
418 else |
417 log("debug", "TLS handshake error on %s: %s", tostring(self), err); |
419 log("debug", "TLS handshake error on %s: %s", tostring(self), err); |
418 self:on("disconnect", err); |
420 self:on("disconnect", err); |
419 self:destroy(); |
421 self:destroy(); |