Mercurial > prosody-hg
comparison net/server_epoll.lua @ 7597:cd34aa6b1632
net.server_epoll: Refactor to use common initialization
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Thu, 18 Aug 2016 16:59:31 +0200 |
| parents | 2c4ba55b616c |
| children | 335b5ce06062 |
comparison
equal
deleted
inserted
replaced
| 7596:2c4ba55b616c | 7597:cd34aa6b1632 |
|---|---|
| 451 self:pausefor(cfg.accept_retry_interval); | 451 self:pausefor(cfg.accept_retry_interval); |
| 452 return; | 452 return; |
| 453 end | 453 end |
| 454 local client = wrapsocket(conn, self, nil, self.listeners, self.tls); | 454 local client = wrapsocket(conn, self, nil, self.listeners, self.tls); |
| 455 log("debug", "New connection %s", tostring(client)); | 455 log("debug", "New connection %s", tostring(client)); |
| 456 if self.tls then | 456 client:init(); |
| 457 client._tls = false; | 457 end |
| 458 client:starttls(); | 458 |
| 459 else | 459 function interface:init() |
| 460 client:setflags(false, true); | 460 if self.tls and not self._tls then |
| 461 end | 461 self._tls = false; -- This means we should call onconnect when TLS is up |
| 462 client:setreadtimeout(); | 462 return self:starttls(); |
| 463 else | |
| 464 self:setflags(false, true); | |
| 465 end | |
| 466 self:setreadtimeout(); | |
| 463 end | 467 end |
| 464 | 468 |
| 465 function interface:pause() | 469 function interface:pause() |
| 466 self:setflags(false); | 470 self:setflags(false); |
| 467 end | 471 end |
| 511 return server; | 515 return server; |
| 512 end | 516 end |
| 513 | 517 |
| 514 -- COMPAT | 518 -- COMPAT |
| 515 local function wrapclient(conn, addr, port, listeners, pattern, tls) | 519 local function wrapclient(conn, addr, port, listeners, pattern, tls) |
| 516 local client = setmetatable({ | 520 local client = wrapsocket(conn, nil, pattern, listeners, tls); |
| 517 conn = conn; | 521 if not client.peername then |
| 518 created = gettime(); | 522 client.peername, client.peerport = addr, port; |
| 519 listeners = listeners; | 523 end |
| 520 _pattern = pattern; | 524 client:init(); |
| 521 writebuffer = {}; | |
| 522 tls = tls; | |
| 523 onwriteable = interface.onconnect; | |
| 524 peer = { addr, port }; | |
| 525 }, interface_mt); | |
| 526 fds[client:getfd()] = client; | |
| 527 client:setflags(false, true); | |
| 528 return client; | 525 return client; |
| 529 end | 526 end |
| 530 | 527 |
| 531 local function addclient(addr, port, listeners, pattern, tls) | 528 local function addclient(addr, port, listeners, pattern, tls) |
| 532 local conn, err = socket.tcp(); | 529 local conn, err = socket.tcp(); |
| 533 if not conn then return conn, err; end | 530 if not conn then return conn, err; end |
| 534 conn:settimeout(0); | 531 conn:settimeout(0); |
| 535 conn:connect(addr, port); | 532 conn:connect(addr, port); |
| 536 local client = wrapclient(conn, addr, port, listeners, pattern, tls); | 533 local client = wrapsocket(conn, nil, pattern, listeners, tls) |
| 537 if tls then | 534 client:init(); |
| 538 client._tls = false; | |
| 539 client:starttls(); | |
| 540 else | |
| 541 client:setflags(true, true); | |
| 542 end | |
| 543 return client, conn; | 535 return client, conn; |
| 544 end | 536 end |
| 545 | 537 |
| 546 local function link(from, to) | 538 local function link(from, to) |
| 547 from.listeners = setmetatable({ | 539 from.listeners = setmetatable({ |
