Mercurial > prosody-hg
comparison net/server_epoll.lua @ 7598:335b5ce06062
net.server_epoll: TLS handshake timeout
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Thu, 18 Aug 2016 17:07:14 +0200 |
| parents | cd34aa6b1632 |
| children | afbda0bd9cfc |
comparison
equal
deleted
inserted
replaced
| 7597:cd34aa6b1632 | 7598:335b5ce06062 |
|---|---|
| 28 read_timeout = 900; | 28 read_timeout = 900; |
| 29 write_timeout = 7; | 29 write_timeout = 7; |
| 30 tcp_backlog = 128; | 30 tcp_backlog = 128; |
| 31 accept_retry_interval = 10; | 31 accept_retry_interval = 10; |
| 32 read_retry_delay = 1e-06; | 32 read_retry_delay = 1e-06; |
| 33 handshake_timeout = 60; | |
| 33 }; | 34 }; |
| 34 | 35 |
| 35 local fds = createtable(10, 0); -- FD -> conn | 36 local fds = createtable(10, 0); -- FD -> conn |
| 36 local timers = {}; | 37 local timers = {}; |
| 37 | 38 |
| 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(); |
