author | Kim Alvefur <zash@zash.se> |
Mon, 23 Dec 2019 21:52:28 +0100 | |
changeset 10551 | c77471c180ea |
parent 10411 | bd8fbee04a2f |
child 11072 | 988ddd57e851 |
permissions | -rw-r--r-- |
2318
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
1 |
--[[ |
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
2 |
|
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
3 |
|
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
4 |
server.lua based on lua/libevent by blastbeat |
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
5 |
|
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
6 |
notes: |
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
7 |
-- when using luaevent, never register 2 or more EV_READ at one socket, same for EV_WRITE |
8731
41c959c5c84b
Fix spelling throughout the codebase [codespell]
Kim Alvefur <zash@zash.se>
parents:
8533
diff
changeset
|
8 |
-- you can't even register a new EV_READ/EV_WRITE callback inside another one |
2318
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
9 |
-- to do some of the above, use timeout events or something what will called from outside |
8731
41c959c5c84b
Fix spelling throughout the codebase [codespell]
Kim Alvefur <zash@zash.se>
parents:
8533
diff
changeset
|
10 |
-- don't let garbagecollect eventcallbacks, as long they are running |
2318
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
11 |
-- when using luasec, there are 4 cases of timeout errors: wantread or wantwrite during reading or writing |
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
12 |
|
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
13 |
--]] |
6855
626d8152b1ad
server_event: Add luacheck annotations
Kim Alvefur <zash@zash.se>
parents:
6854
diff
changeset
|
14 |
-- luacheck: ignore 212/self 431/err 211/ret |
2318
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
15 |
|
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
16 |
local SCRIPT_NAME = "server_event.lua" |
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
17 |
local SCRIPT_VERSION = "0.05" |
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
18 |
local SCRIPT_AUTHOR = "blastbeat" |
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
19 |
local LAST_MODIFIED = "2009/11/20" |
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
20 |
|
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
21 |
local cfg = { |
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
22 |
MAX_CONNECTIONS = 100000, -- max per server connections (use "ulimit -n" on *nix) |
3237
721a83a3beb9
net.server_event: attemp to fix more spelling fail.
Waqas Hussain <waqas20@gmail.com>
parents:
3149
diff
changeset
|
23 |
MAX_HANDSHAKE_ATTEMPTS= 1000, -- attempts to finish ssl handshake |
721a83a3beb9
net.server_event: attemp to fix more spelling fail.
Waqas Hussain <waqas20@gmail.com>
parents:
3149
diff
changeset
|
24 |
HANDSHAKE_TIMEOUT = 60, -- timeout in seconds per handshake attempt |
2318
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
25 |
MAX_READ_LENGTH = 1024 * 1024 * 1024 * 1024, -- max bytes allowed to read from sockets |
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
26 |
MAX_SEND_LENGTH = 1024 * 1024 * 1024 * 1024, -- max bytes size of write buffer (for writing on sockets) |
5531
483f795f6f99
net.server*: Allow the TCP backlog parameter to be set in the config
Kim Alvefur <zash@zash.se>
parents:
5339
diff
changeset
|
27 |
ACCEPT_QUEUE = 128, -- might influence the length of the pending sockets queue |
2952
5069534f7f36
net.server_event: Fixed spelling fail.
Waqas Hussain <waqas20@gmail.com>
parents:
2941
diff
changeset
|
28 |
ACCEPT_DELAY = 10, -- seconds to wait until the next attempt of a full server to accept |
8986
23f66f04e216
net.server: Set default read timeout to 14 minutes (fixes #971)
Kim Alvefur <zash@zash.se>
parents:
8784
diff
changeset
|
29 |
READ_TIMEOUT = 14 * 60, -- timeout in seconds for read data from socket |
2939
dc73cbc69bd5
net.server_event: Bump timeout values up somewhat
Matthew Wild <mwild1@gmail.com>
parents:
2731
diff
changeset
|
30 |
WRITE_TIMEOUT = 180, -- timeout in seconds for write data on socket |
2952
5069534f7f36
net.server_event: Fixed spelling fail.
Waqas Hussain <waqas20@gmail.com>
parents:
2941
diff
changeset
|
31 |
CONNECT_TIMEOUT = 20, -- timeout in seconds for connection attempts |
2535
75bb31b6c53f
net.server_event: Trailing whitespace
Matthew Wild <mwild1@gmail.com>
parents:
2534
diff
changeset
|
32 |
CLEAR_DELAY = 5, -- seconds to wait for clearing interface list (and calling ondisconnect listeners) |
7423
3fc5560557a5
net.server_event: Schedule another read callback if there is still data left in buffer after reading (fixes #583 for real)
Kim Alvefur <zash@zash.se>
parents:
7422
diff
changeset
|
33 |
READ_RETRY_DELAY = 1e-06, -- if, after reading, there is still data in buffer, wait this long and continue reading |
2318
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
34 |
DEBUG = true, -- show debug messages |
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
35 |
} |
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
36 |
|
6853
41de00647ad3
server_event: Move local references to various functions to top of file
Kim Alvefur <zash@zash.se>
parents:
6852
diff
changeset
|
37 |
local pairs = pairs |
41de00647ad3
server_event: Move local references to various functions to top of file
Kim Alvefur <zash@zash.se>
parents:
6852
diff
changeset
|
38 |
local select = select |
41de00647ad3
server_event: Move local references to various functions to top of file
Kim Alvefur <zash@zash.se>
parents:
6852
diff
changeset
|
39 |
local require = require |
41de00647ad3
server_event: Move local references to various functions to top of file
Kim Alvefur <zash@zash.se>
parents:
6852
diff
changeset
|
40 |
local tostring = tostring |
41de00647ad3
server_event: Move local references to various functions to top of file
Kim Alvefur <zash@zash.se>
parents:
6852
diff
changeset
|
41 |
local setmetatable = setmetatable |
2318
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
42 |
|
5286
0cbe57fbe2cd
net.server_event: Optimize socket write buffers (don't do buf=buf..newdata).
Waqas Hussain <waqas20@gmail.com>
parents:
5277
diff
changeset
|
43 |
local t_insert = table.insert |
0cbe57fbe2cd
net.server_event: Optimize socket write buffers (don't do buf=buf..newdata).
Waqas Hussain <waqas20@gmail.com>
parents:
5277
diff
changeset
|
44 |
local t_concat = table.concat |
6853
41de00647ad3
server_event: Move local references to various functions to top of file
Kim Alvefur <zash@zash.se>
parents:
6852
diff
changeset
|
45 |
local s_sub = string.sub |
5286
0cbe57fbe2cd
net.server_event: Optimize socket write buffers (don't do buf=buf..newdata).
Waqas Hussain <waqas20@gmail.com>
parents:
5277
diff
changeset
|
46 |
|
6853
41de00647ad3
server_event: Move local references to various functions to top of file
Kim Alvefur <zash@zash.se>
parents:
6852
diff
changeset
|
47 |
local coroutine_wrap = coroutine.wrap |
41de00647ad3
server_event: Move local references to various functions to top of file
Kim Alvefur <zash@zash.se>
parents:
6852
diff
changeset
|
48 |
local coroutine_yield = coroutine.yield |
5286
0cbe57fbe2cd
net.server_event: Optimize socket write buffers (don't do buf=buf..newdata).
Waqas Hussain <waqas20@gmail.com>
parents:
5277
diff
changeset
|
49 |
|
6785
ec172dbe9d14
net.server_{select,event}: Don't rely on LuaSocket and LuaSec being present in the globals table
Kim Alvefur <zash@zash.se>
parents:
6382
diff
changeset
|
50 |
local has_luasec, ssl = pcall ( require , "ssl" ) |
6853
41de00647ad3
server_event: Move local references to various functions to top of file
Kim Alvefur <zash@zash.se>
parents:
6852
diff
changeset
|
51 |
local socket = require "socket" |
6856
a2cc477eb19b
server_event: Rename luaevent module variable to avoid name clash [luacheck]
Kim Alvefur <zash@zash.se>
parents:
6855
diff
changeset
|
52 |
local levent = require "luaevent.core" |
9476
5fdda751333a
net.server: Require IP address as argument to addclient (no DNS names)
Kim Alvefur <zash@zash.se>
parents:
9390
diff
changeset
|
53 |
local inet = require "util.net"; |
5fdda751333a
net.server: Require IP address as argument to addclient (no DNS names)
Kim Alvefur <zash@zash.se>
parents:
9390
diff
changeset
|
54 |
local inet_pton = inet.pton; |
6853
41de00647ad3
server_event: Move local references to various functions to top of file
Kim Alvefur <zash@zash.se>
parents:
6852
diff
changeset
|
55 |
|
41de00647ad3
server_event: Move local references to various functions to top of file
Kim Alvefur <zash@zash.se>
parents:
6852
diff
changeset
|
56 |
local socket_gettime = socket.gettime |
2318
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
57 |
|
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
58 |
local log = require ("util.logger").init("socket") |
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
59 |
|
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
60 |
local function debug(...) |
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
61 |
return log("debug", ("%s "):rep(select('#', ...)), ...) |
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
62 |
end |
6858
40236602ab5b
server_event: Comment out the unused vdebug function [luacheck]
Kim Alvefur <zash@zash.se>
parents:
6857
diff
changeset
|
63 |
-- local vdebug = debug; |
2318
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
64 |
|
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
65 |
local bitor = ( function( ) -- thx Rici Lake |
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
66 |
local hasbit = function( x, p ) |
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
67 |
return x % ( p + p ) >= p |
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
68 |
end |
2535
75bb31b6c53f
net.server_event: Trailing whitespace
Matthew Wild <mwild1@gmail.com>
parents:
2534
diff
changeset
|
69 |
return function( x, y ) |
2318
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
70 |
local p = 1 |
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
71 |
local z = 0 |
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
72 |
local limit = x > y and x or y |
2535
75bb31b6c53f
net.server_event: Trailing whitespace
Matthew Wild <mwild1@gmail.com>
parents:
2534
diff
changeset
|
73 |
while p <= limit do |
2318
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
74 |
if hasbit( x, p ) or hasbit( y, p ) then |
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
75 |
z = z + p |
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
76 |
end |
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
77 |
p = p + p |
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
78 |
end |
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
79 |
return z |
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
80 |
end |
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
81 |
end )( ) |
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
82 |
|
6856
a2cc477eb19b
server_event: Rename luaevent module variable to avoid name clash [luacheck]
Kim Alvefur <zash@zash.se>
parents:
6855
diff
changeset
|
83 |
local base = levent.new( ) |
6853
41de00647ad3
server_event: Move local references to various functions to top of file
Kim Alvefur <zash@zash.se>
parents:
6852
diff
changeset
|
84 |
local addevent = base.addevent |
6856
a2cc477eb19b
server_event: Rename luaevent module variable to avoid name clash [luacheck]
Kim Alvefur <zash@zash.se>
parents:
6855
diff
changeset
|
85 |
local EV_READ = levent.EV_READ |
a2cc477eb19b
server_event: Rename luaevent module variable to avoid name clash [luacheck]
Kim Alvefur <zash@zash.se>
parents:
6855
diff
changeset
|
86 |
local EV_WRITE = levent.EV_WRITE |
a2cc477eb19b
server_event: Rename luaevent module variable to avoid name clash [luacheck]
Kim Alvefur <zash@zash.se>
parents:
6855
diff
changeset
|
87 |
local EV_TIMEOUT = levent.EV_TIMEOUT |
a2cc477eb19b
server_event: Rename luaevent module variable to avoid name clash [luacheck]
Kim Alvefur <zash@zash.se>
parents:
6855
diff
changeset
|
88 |
local EV_SIGNAL = levent.EV_SIGNAL |
2318
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
89 |
|
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
90 |
local EV_READWRITE = bitor( EV_READ, EV_WRITE ) |
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
91 |
|
6852
0455b9686e16
server_event: Replace implementation of ordered set with a simple table set
Kim Alvefur <zash@zash.se>
parents:
6822
diff
changeset
|
92 |
local interfacelist = { } |
2318
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
93 |
|
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
94 |
-- Client interface methods |
6854
1f1bed8ebc41
server_event: Remove needless scoping and indentation
Kim Alvefur <zash@zash.se>
parents:
6853
diff
changeset
|
95 |
local interface_mt = {}; interface_mt.__index = interface_mt; |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5756
diff
changeset
|
96 |
|
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
97 |
-- Private methods |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
98 |
function interface_mt:_close() |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
99 |
return self:_destroy(); |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
100 |
end |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5756
diff
changeset
|
101 |
|
7342
b5565715fce8
server_event: addclient: wrapclient already calls startconnection for us [backported from trunk]
daurnimator <quae@daurnimator.com>
parents:
7340
diff
changeset
|
102 |
function interface_mt:_start_connection(plainssl) -- called from wrapclient |
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
103 |
local callback = function( event ) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
104 |
if EV_TIMEOUT == event then -- timeout during connection |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
105 |
self.fatalerror = "connection timeout" |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
106 |
self:ontimeout() -- call timeout listener |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
107 |
self:_close() |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
108 |
debug( "new connection failed. id:", self.id, "error:", self.fatalerror ) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
109 |
else |
8533
075df839c110
net.server_event: Not every instantly-readable connection is an error, continue if possible
Matthew Wild <mwild1@gmail.com>
parents:
8532
diff
changeset
|
110 |
if EV_READWRITE == event then |
075df839c110
net.server_event: Not every instantly-readable connection is an error, continue if possible
Matthew Wild <mwild1@gmail.com>
parents:
8532
diff
changeset
|
111 |
if self.readcallback(event) == -1 then |
075df839c110
net.server_event: Not every instantly-readable connection is an error, continue if possible
Matthew Wild <mwild1@gmail.com>
parents:
8532
diff
changeset
|
112 |
-- Fatal error occurred |
075df839c110
net.server_event: Not every instantly-readable connection is an error, continue if possible
Matthew Wild <mwild1@gmail.com>
parents:
8532
diff
changeset
|
113 |
return -1; |
075df839c110
net.server_event: Not every instantly-readable connection is an error, continue if possible
Matthew Wild <mwild1@gmail.com>
parents:
8532
diff
changeset
|
114 |
end |
075df839c110
net.server_event: Not every instantly-readable connection is an error, continue if possible
Matthew Wild <mwild1@gmail.com>
parents:
8532
diff
changeset
|
115 |
end |
6861
d8f8c0b2fda8
server_event: Normalize indentation
Kim Alvefur <zash@zash.se>
parents:
6859
diff
changeset
|
116 |
if plainssl and has_luasec then -- start ssl session |
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
117 |
self:starttls(self._sslctx, true) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
118 |
else -- normal connection |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
119 |
self:_start_session(true) |
2318
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
120 |
end |
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
121 |
debug( "new connection established. id:", self.id ) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
122 |
end |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
123 |
self.eventconnect = nil |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
124 |
return -1 |
2318
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
125 |
end |
8532
257fd322fc9f
net.server_event: Better outgoing connection error handling
Matthew Wild <mwild1@gmail.com>
parents:
8387
diff
changeset
|
126 |
self.eventconnect = addevent( base, self.conn, EV_READWRITE, callback, cfg.CONNECT_TIMEOUT ) |
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
127 |
return true |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
128 |
end |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
129 |
function interface_mt:_start_session(call_onconnect) -- new session, for example after startssl |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
130 |
if self.type == "client" then |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
131 |
local callback = function( ) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
132 |
self:_lock( false, false, false ) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
133 |
--vdebug( "start listening on client socket with id:", self.id ) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
134 |
self.eventread = addevent( base, self.conn, EV_READ, self.readcallback, cfg.READ_TIMEOUT ); -- register callback |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
135 |
if call_onconnect then |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
136 |
self:onconnect() |
2318
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
137 |
end |
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
138 |
self.eventsession = nil |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
139 |
return -1 |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
140 |
end |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
141 |
self.eventsession = addevent( base, nil, EV_TIMEOUT, callback, 0 ) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
142 |
else |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
143 |
self:_lock( false ) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
144 |
--vdebug( "start listening on server socket with id:", self.id ) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
145 |
self.eventread = addevent( base, self.conn, EV_READ, self.readcallback ) -- register callback |
2318
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
146 |
end |
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
147 |
return true |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
148 |
end |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
149 |
function interface_mt:_start_ssl(call_onconnect) -- old socket will be destroyed, therefore we have to close read/write events first |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
150 |
--vdebug( "starting ssl session with client id:", self.id ) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
151 |
local _ |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
152 |
_ = self.eventread and self.eventread:close( ) -- close events; this must be called outside of the event callbacks! |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
153 |
_ = self.eventwrite and self.eventwrite:close( ) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
154 |
self.eventread, self.eventwrite = nil, nil |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
155 |
local err |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
156 |
self.conn, err = ssl.wrap( self.conn, self._sslctx ) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
157 |
if err then |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
158 |
self.fatalerror = err |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
159 |
self.conn = nil -- cannot be used anymore |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
160 |
if call_onconnect then |
8731
41c959c5c84b
Fix spelling throughout the codebase [codespell]
Kim Alvefur <zash@zash.se>
parents:
8533
diff
changeset
|
161 |
self.ondisconnect = nil -- don't call this when client isn't really connected |
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
162 |
end |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
163 |
self:_close() |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
164 |
debug( "fatal error while ssl wrapping:", err ) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
165 |
return false |
2318
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
166 |
end |
9854
9a905888b96c
net.server_event: Add SNI support (#409)
Kim Alvefur <zash@zash.se>
parents:
9839
diff
changeset
|
167 |
|
9a905888b96c
net.server_event: Add SNI support (#409)
Kim Alvefur <zash@zash.se>
parents:
9839
diff
changeset
|
168 |
if self.conn.sni then |
9a905888b96c
net.server_event: Add SNI support (#409)
Kim Alvefur <zash@zash.se>
parents:
9839
diff
changeset
|
169 |
if self.servername then |
9a905888b96c
net.server_event: Add SNI support (#409)
Kim Alvefur <zash@zash.se>
parents:
9839
diff
changeset
|
170 |
self.conn:sni(self.servername); |
9857
9aea8dbb105d
net.server: Only add alternate SNI contexts if at least one is provided
Kim Alvefur <zash@zash.se>
parents:
9854
diff
changeset
|
171 |
elseif self._server and type(self._server.hosts) == "table" and next(self._server.hosts) ~= nil then |
9854
9a905888b96c
net.server_event: Add SNI support (#409)
Kim Alvefur <zash@zash.se>
parents:
9839
diff
changeset
|
172 |
self.conn:sni(self._server.hosts, true); |
9a905888b96c
net.server_event: Add SNI support (#409)
Kim Alvefur <zash@zash.se>
parents:
9839
diff
changeset
|
173 |
end |
9a905888b96c
net.server_event: Add SNI support (#409)
Kim Alvefur <zash@zash.se>
parents:
9839
diff
changeset
|
174 |
end |
9a905888b96c
net.server_event: Add SNI support (#409)
Kim Alvefur <zash@zash.se>
parents:
9839
diff
changeset
|
175 |
|
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
176 |
self.conn:settimeout( 0 ) -- set non blocking |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
177 |
local handshakecallback = coroutine_wrap(function( event ) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
178 |
local _, err |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
179 |
local attempt = 0 |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
180 |
local maxattempt = cfg.MAX_HANDSHAKE_ATTEMPTS |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
181 |
while attempt < maxattempt do -- no endless loop |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
182 |
attempt = attempt + 1 |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
183 |
debug( "ssl handshake of client with id:"..tostring(self)..", attempt:"..attempt ) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
184 |
if attempt > maxattempt then |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
185 |
self.fatalerror = "max handshake attempts exceeded" |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
186 |
elseif EV_TIMEOUT == event then |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
187 |
self.fatalerror = "timeout during handshake" |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
188 |
else |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
189 |
_, err = self.conn:dohandshake( ) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
190 |
if not err then |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
191 |
self:_lock( false, false, false ) -- unlock the interface; sending, closing etc allowed |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
192 |
self.send = self.conn.send -- caching table lookups with new client object |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
193 |
self.receive = self.conn.receive |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
194 |
if not call_onconnect then -- trigger listener |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
195 |
self:onstatus("ssl-handshake-complete"); |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
196 |
end |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
197 |
self:_start_session( call_onconnect ) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
198 |
debug( "ssl handshake done" ) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
199 |
self.eventhandshake = nil |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
200 |
return -1 |
3396
23cf369ed1c3
net.server_event: Fix to not call onconnect a second time after the SSL handshake for starttls connections (thanks Flo)
Matthew Wild <mwild1@gmail.com>
parents:
3387
diff
changeset
|
201 |
end |
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
202 |
if err == "wantwrite" then |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
203 |
event = EV_WRITE |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
204 |
elseif err == "wantread" then |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
205 |
event = EV_READ |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
206 |
else |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
207 |
debug( "ssl handshake error:", err ) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
208 |
self.fatalerror = err |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
209 |
end |
2318
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
210 |
end |
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
211 |
if self.fatalerror then |
3396
23cf369ed1c3
net.server_event: Fix to not call onconnect a second time after the SSL handshake for starttls connections (thanks Flo)
Matthew Wild <mwild1@gmail.com>
parents:
3387
diff
changeset
|
212 |
if call_onconnect then |
8731
41c959c5c84b
Fix spelling throughout the codebase [codespell]
Kim Alvefur <zash@zash.se>
parents:
8533
diff
changeset
|
213 |
self.ondisconnect = nil -- don't call this when client isn't really connected |
2318
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
214 |
end |
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
215 |
self:_close() |
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
216 |
debug( "handshake failed because:", self.fatalerror ) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
217 |
self.eventhandshake = nil |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
218 |
return -1 |
2318
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
219 |
end |
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
220 |
event = coroutine_yield( event, cfg.HANDSHAKE_TIMEOUT ) -- yield this monster... |
3000
43a4cb707fe4
net.server_select, net.server_event: Support for :pause() and :resume() on connections
Matthew Wild <mwild1@gmail.com>
parents:
2988
diff
changeset
|
221 |
end |
43a4cb707fe4
net.server_select, net.server_event: Support for :pause() and :resume() on connections
Matthew Wild <mwild1@gmail.com>
parents:
2988
diff
changeset
|
222 |
end |
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
223 |
) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
224 |
debug "starting handshake..." |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
225 |
self:_lock( false, true, true ) -- unlock read/write events, but keep interface locked |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
226 |
self.eventhandshake = addevent( base, self.conn, EV_READWRITE, handshakecallback, cfg.HANDSHAKE_TIMEOUT ) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
227 |
return true |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
228 |
end |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
229 |
function interface_mt:_destroy() -- close this interface + events and call last listener |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
230 |
debug( "closing client with id:", self.id, self.fatalerror ) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
231 |
self:_lock( true, true, true ) -- first of all, lock the interface to avoid further actions |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
232 |
local _ |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
233 |
_ = self.eventread and self.eventread:close( ) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
234 |
if self.type == "client" then |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
235 |
_ = self.eventwrite and self.eventwrite:close( ) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
236 |
_ = self.eventhandshake and self.eventhandshake:close( ) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
237 |
_ = self.eventstarthandshake and self.eventstarthandshake:close( ) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
238 |
_ = self.eventconnect and self.eventconnect:close( ) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
239 |
_ = self.eventsession and self.eventsession:close( ) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
240 |
_ = self.eventwritetimeout and self.eventwritetimeout:close( ) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
241 |
_ = self.eventreadtimeout and self.eventreadtimeout:close( ) |
8731
41c959c5c84b
Fix spelling throughout the codebase [codespell]
Kim Alvefur <zash@zash.se>
parents:
8533
diff
changeset
|
242 |
-- call ondisconnect listener (won't be the case if handshake failed on connect) |
8387
4a5c6f6214ee
net.server_event: Split long line [luacheck]
Kim Alvefur <zash@zash.se>
parents:
8317
diff
changeset
|
243 |
_ = self.ondisconnect and self:ondisconnect( self.fatalerror ~= "client to close" and self.fatalerror) |
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
244 |
_ = self.conn and self.conn:close( ) -- close connection |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
245 |
_ = self._server and self._server:counter(-1); |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
246 |
self.eventread, self.eventwrite = nil, nil |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
247 |
self.eventstarthandshake, self.eventhandshake, self.eventclose = nil, nil, nil |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
248 |
self.readcallback, self.writecallback = nil, nil |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
249 |
else |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
250 |
self.conn:close( ) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
251 |
self.eventread, self.eventclose = nil, nil |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
252 |
self.interface, self.readcallback = nil, nil |
3000
43a4cb707fe4
net.server_select, net.server_event: Support for :pause() and :resume() on connections
Matthew Wild <mwild1@gmail.com>
parents:
2988
diff
changeset
|
253 |
end |
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
254 |
interfacelist[ self ] = nil |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
255 |
return true |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
256 |
end |
3000
43a4cb707fe4
net.server_select, net.server_event: Support for :pause() and :resume() on connections
Matthew Wild <mwild1@gmail.com>
parents:
2988
diff
changeset
|
257 |
|
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
258 |
function interface_mt:_lock(nointerface, noreading, nowriting) -- lock or unlock this interface or events |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
259 |
self.nointerface, self.noreading, self.nowriting = nointerface, noreading, nowriting |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
260 |
return nointerface, noreading, nowriting |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
261 |
end |
2318
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
262 |
|
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
263 |
--TODO: Deprecate |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
264 |
function interface_mt:lock_read(switch) |
9578
1fb3e7c550bf
net.server_event: Deprecate :lock_read here too
Kim Alvefur <zash@zash.se>
parents:
9502
diff
changeset
|
265 |
log("warn", ":lock_read is deprecated, use :pasue() and :resume()"); |
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
266 |
if switch then |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
267 |
return self:pause(); |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
268 |
else |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
269 |
return self:resume(); |
2318
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
270 |
end |
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
271 |
end |
3000
43a4cb707fe4
net.server_select, net.server_event: Support for :pause() and :resume() on connections
Matthew Wild <mwild1@gmail.com>
parents:
2988
diff
changeset
|
272 |
|
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
273 |
function interface_mt:pause() |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
274 |
return self:_lock(self.nointerface, true, self.nowriting); |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
275 |
end |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
276 |
|
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
277 |
function interface_mt:resume() |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
278 |
self:_lock(self.nointerface, false, self.nowriting); |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
279 |
if self.readcallback and not self.eventread then |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
280 |
self.eventread = addevent( base, self.conn, EV_READ, self.readcallback, cfg.READ_TIMEOUT ); -- register callback |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
281 |
return true; |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
282 |
end |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
283 |
end |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
284 |
|
9584
1be99aedb0b3
net.server: Add an API for holding writes of outgoing data
Kim Alvefur <zash@zash.se>
parents:
9578
diff
changeset
|
285 |
function interface_mt:pause_writes() |
1be99aedb0b3
net.server: Add an API for holding writes of outgoing data
Kim Alvefur <zash@zash.se>
parents:
9578
diff
changeset
|
286 |
return self:_lock(self.nointerface, self.noreading, true); |
1be99aedb0b3
net.server: Add an API for holding writes of outgoing data
Kim Alvefur <zash@zash.se>
parents:
9578
diff
changeset
|
287 |
end |
1be99aedb0b3
net.server: Add an API for holding writes of outgoing data
Kim Alvefur <zash@zash.se>
parents:
9578
diff
changeset
|
288 |
|
1be99aedb0b3
net.server: Add an API for holding writes of outgoing data
Kim Alvefur <zash@zash.se>
parents:
9578
diff
changeset
|
289 |
function interface_mt:resume_writes() |
1be99aedb0b3
net.server: Add an API for holding writes of outgoing data
Kim Alvefur <zash@zash.se>
parents:
9578
diff
changeset
|
290 |
self:_lock(self.nointerface, self.noreading, false); |
1be99aedb0b3
net.server: Add an API for holding writes of outgoing data
Kim Alvefur <zash@zash.se>
parents:
9578
diff
changeset
|
291 |
if self.writecallback and not self.eventwrite then |
1be99aedb0b3
net.server: Add an API for holding writes of outgoing data
Kim Alvefur <zash@zash.se>
parents:
9578
diff
changeset
|
292 |
self.eventwrite = addevent( base, self.conn, EV_WRITE, self.writecallback, cfg.WRITE_TIMEOUT ); -- register callback |
1be99aedb0b3
net.server: Add an API for holding writes of outgoing data
Kim Alvefur <zash@zash.se>
parents:
9578
diff
changeset
|
293 |
return true; |
1be99aedb0b3
net.server: Add an API for holding writes of outgoing data
Kim Alvefur <zash@zash.se>
parents:
9578
diff
changeset
|
294 |
end |
1be99aedb0b3
net.server: Add an API for holding writes of outgoing data
Kim Alvefur <zash@zash.se>
parents:
9578
diff
changeset
|
295 |
end |
1be99aedb0b3
net.server: Add an API for holding writes of outgoing data
Kim Alvefur <zash@zash.se>
parents:
9578
diff
changeset
|
296 |
|
1be99aedb0b3
net.server: Add an API for holding writes of outgoing data
Kim Alvefur <zash@zash.se>
parents:
9578
diff
changeset
|
297 |
|
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
298 |
function interface_mt:counter(c) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
299 |
if c then |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
300 |
self._connections = self._connections + c |
2318
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
301 |
end |
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
302 |
return self._connections |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
303 |
end |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
304 |
|
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
305 |
-- Public methods |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
306 |
function interface_mt:write(data) |
9919
9fe7b18bca15
net.server_event: Allow writing into buffer of write-locked connections
Kim Alvefur <zash@zash.se>
parents:
9901
diff
changeset
|
307 |
if self.nointerface then return nil, "locked"; end |
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
308 |
--vdebug( "try to send data to client, id/data:", self.id, data ) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
309 |
data = tostring( data ) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
310 |
local len = #data |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
311 |
local total = len + self.writebufferlen |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
312 |
if total > cfg.MAX_SEND_LENGTH then -- check buffer length |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
313 |
local err = "send buffer exceeded" |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
314 |
debug( "error:", err ) -- to much, check your app |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
315 |
return nil, err |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
316 |
end |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
317 |
t_insert(self.writebuffer, data) -- new buffer |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
318 |
self.writebufferlen = total |
9919
9fe7b18bca15
net.server_event: Allow writing into buffer of write-locked connections
Kim Alvefur <zash@zash.se>
parents:
9901
diff
changeset
|
319 |
if not self.eventwrite and not self.nowriting then -- register new write event |
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
320 |
--vdebug( "register new write event" ) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
321 |
self.eventwrite = addevent( base, self.conn, EV_WRITE, self.writecallback, cfg.WRITE_TIMEOUT ) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
322 |
end |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
323 |
return true |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
324 |
end |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
325 |
function interface_mt:close() |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
326 |
if self.nointerface then return nil, "locked"; end |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
327 |
debug( "try to close client connection with id:", self.id ) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
328 |
if self.type == "client" then |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
329 |
self.fatalerror = "client to close" |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
330 |
if self.eventwrite then -- wait for incomplete write request |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
331 |
self:_lock( true, true, false ) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
332 |
debug "closing delayed until writebuffer is empty" |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
333 |
return nil, "writebuffer not empty, waiting" |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
334 |
else -- close now |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
335 |
self:_lock( true, true, true ) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
336 |
self:_close() |
4676
1ce2ff9ec313
net.server_event: Do not automatically close clients when closing a server port
Matthew Wild <mwild1@gmail.com>
parents:
4468
diff
changeset
|
337 |
return true |
2535
75bb31b6c53f
net.server_event: Trailing whitespace
Matthew Wild <mwild1@gmail.com>
parents:
2534
diff
changeset
|
338 |
end |
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
339 |
else |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
340 |
debug( "try to close server with id:", tostring(self.id)) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
341 |
self.fatalerror = "server to close" |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
342 |
self:_lock( true ) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
343 |
self:_close( 0 ) |
2318
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
344 |
return true |
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
345 |
end |
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
346 |
end |
7227 | 347 |
|
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
348 |
function interface_mt:socket() |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
349 |
return self.conn |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
350 |
end |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
351 |
|
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
352 |
function interface_mt:server() |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
353 |
return self._server or self; |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
354 |
end |
7227 | 355 |
|
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
356 |
function interface_mt:port() |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
357 |
return self._port |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
358 |
end |
7227 | 359 |
|
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
360 |
function interface_mt:serverport() |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
361 |
return self._serverport |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
362 |
end |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
363 |
|
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
364 |
function interface_mt:ip() |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
365 |
return self._ip |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
366 |
end |
2318
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
367 |
|
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
368 |
function interface_mt:ssl() |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
369 |
return self._usingssl |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
370 |
end |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
371 |
interface_mt.clientport = interface_mt.port -- COMPAT server_select |
7227 | 372 |
|
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
373 |
function interface_mt:type() |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
374 |
return self._type or "client" |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
375 |
end |
7227 | 376 |
|
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
377 |
function interface_mt:connections() |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
378 |
return self._connections |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
379 |
end |
7227 | 380 |
|
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
381 |
function interface_mt:address() |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
382 |
return self.addr |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
383 |
end |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
384 |
|
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
385 |
function interface_mt:set_sslctx(sslctx) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
386 |
self._sslctx = sslctx; |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
387 |
if sslctx then |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
388 |
self.starttls = nil; -- use starttls() of interface_mt |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
389 |
else |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
390 |
self.starttls = false; -- prevent starttls() |
2318
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
391 |
end |
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
392 |
end |
2318
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
393 |
|
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
394 |
function interface_mt:set_mode(pattern) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
395 |
if pattern then |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
396 |
self._pattern = pattern; |
2318
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
397 |
end |
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
398 |
return self._pattern; |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
399 |
end |
7227 | 400 |
|
401 |
function interface_mt:set_send(new_send) -- luacheck: ignore 212 |
|
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
402 |
-- No-op, we always use the underlying connection's send |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
403 |
end |
3001
fa00c6f563b4
net.server_select, net.server_event: Rename :pattern() method to :set_mode() for select backend, and add :set_mode() to event backend
Matthew Wild <mwild1@gmail.com>
parents:
3000
diff
changeset
|
404 |
|
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
405 |
function interface_mt:starttls(sslctx, call_onconnect) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
406 |
debug( "try to start ssl at client id:", self.id ) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
407 |
local err |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
408 |
self._sslctx = sslctx; |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
409 |
if self._usingssl then -- startssl was already called |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
410 |
err = "ssl already active" |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
411 |
end |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
412 |
if err then |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
413 |
debug( "error:", err ) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
414 |
return nil, err |
3001
fa00c6f563b4
net.server_select, net.server_event: Rename :pattern() method to :set_mode() for select backend, and add :set_mode() to event backend
Matthew Wild <mwild1@gmail.com>
parents:
3000
diff
changeset
|
415 |
end |
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
416 |
self._usingssl = true |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
417 |
self.startsslcallback = function( ) -- we have to start the handshake outside of a read/write event |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
418 |
self.startsslcallback = nil |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
419 |
self:_start_ssl(call_onconnect); |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
420 |
self.eventstarthandshake = nil |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
421 |
return -1 |
2318
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
422 |
end |
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
423 |
if not self.eventwrite then |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
424 |
self:_lock( true, true, true ) -- lock the interface, to not disturb the handshake |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
425 |
self.eventstarthandshake = addevent( base, nil, EV_TIMEOUT, self.startsslcallback, 0 ) -- add event to start handshake |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
426 |
else |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
427 |
-- wait until writebuffer is empty |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
428 |
self:_lock( true, true, false ) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
429 |
debug "ssl session delayed until writebuffer is empty..." |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
430 |
end |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
431 |
self.starttls = false; |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
432 |
return true |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
433 |
end |
5625
e67891ad18d6
net.server_event: Add support for listener.onreadtimeout(conn), which can return true to prevent the connection from being closed when a read timeout occurs
Matthew Wild <mwild1@gmail.com>
parents:
5531
diff
changeset
|
434 |
|
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
435 |
function interface_mt:setoption(option, value) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
436 |
if self.conn.setoption then |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
437 |
return self.conn:setoption(option, value); |
2318
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
438 |
end |
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
439 |
return false, "setoption not implemented"; |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
440 |
end |
6854
1f1bed8ebc41
server_event: Remove needless scoping and indentation
Kim Alvefur <zash@zash.se>
parents:
6853
diff
changeset
|
441 |
|
9390
33e52f727f0f
net.connect: Fix passing request table to new listener
Kim Alvefur <zash@zash.se>
parents:
9388
diff
changeset
|
442 |
function interface_mt:setlistener(listener, data) |
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
443 |
self:ondetach(); -- Notify listener that it is no longer responsible for this connection |
7340
8ec935687bae
server_event: Split long list of assignments into multiple lines for readability
Kim Alvefur <zash@zash.se>
parents:
7339
diff
changeset
|
444 |
self.onconnect = listener.onconnect; |
8ec935687bae
server_event: Split long list of assignments into multiple lines for readability
Kim Alvefur <zash@zash.se>
parents:
7339
diff
changeset
|
445 |
self.ondisconnect = listener.ondisconnect; |
8ec935687bae
server_event: Split long list of assignments into multiple lines for readability
Kim Alvefur <zash@zash.se>
parents:
7339
diff
changeset
|
446 |
self.onincoming = listener.onincoming; |
8ec935687bae
server_event: Split long list of assignments into multiple lines for readability
Kim Alvefur <zash@zash.se>
parents:
7339
diff
changeset
|
447 |
self.ontimeout = listener.ontimeout; |
8ec935687bae
server_event: Split long list of assignments into multiple lines for readability
Kim Alvefur <zash@zash.se>
parents:
7339
diff
changeset
|
448 |
self.onreadtimeout = listener.onreadtimeout; |
8ec935687bae
server_event: Split long list of assignments into multiple lines for readability
Kim Alvefur <zash@zash.se>
parents:
7339
diff
changeset
|
449 |
self.onstatus = listener.onstatus; |
8ec935687bae
server_event: Split long list of assignments into multiple lines for readability
Kim Alvefur <zash@zash.se>
parents:
7339
diff
changeset
|
450 |
self.ondetach = listener.ondetach; |
9388
58fe099043ed
net.server: Call a 'onattach' callback when replacing listeners
Kim Alvefur <zash@zash.se>
parents:
8986
diff
changeset
|
451 |
self.onattach = listener.onattach; |
7812
34ca48325ce7
net.server_event: Also replace 'ondrain' when setting new listeners (thanks Ge0rG)
Kim Alvefur <zash@zash.se>
parents:
7691
diff
changeset
|
452 |
self.ondrain = listener.ondrain; |
9390
33e52f727f0f
net.connect: Fix passing request table to new listener
Kim Alvefur <zash@zash.se>
parents:
9388
diff
changeset
|
453 |
self:onattach(data); |
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
454 |
end |
6854
1f1bed8ebc41
server_event: Remove needless scoping and indentation
Kim Alvefur <zash@zash.se>
parents:
6853
diff
changeset
|
455 |
|
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
456 |
-- Stub handlers |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
457 |
function interface_mt:onconnect() |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
458 |
end |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
459 |
function interface_mt:onincoming() |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
460 |
end |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
461 |
function interface_mt:ondisconnect() |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
462 |
end |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
463 |
function interface_mt:ontimeout() |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
464 |
end |
6854
1f1bed8ebc41
server_event: Remove needless scoping and indentation
Kim Alvefur <zash@zash.se>
parents:
6853
diff
changeset
|
465 |
function interface_mt:onreadtimeout() |
1f1bed8ebc41
server_event: Remove needless scoping and indentation
Kim Alvefur <zash@zash.se>
parents:
6853
diff
changeset
|
466 |
end |
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
467 |
function interface_mt:ondrain() |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
468 |
end |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
469 |
function interface_mt:ondetach() |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
470 |
end |
9388
58fe099043ed
net.server: Call a 'onattach' callback when replacing listeners
Kim Alvefur <zash@zash.se>
parents:
8986
diff
changeset
|
471 |
function interface_mt:onattach() |
58fe099043ed
net.server: Call a 'onattach' callback when replacing listeners
Kim Alvefur <zash@zash.se>
parents:
8986
diff
changeset
|
472 |
end |
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
473 |
function interface_mt:onstatus() |
2535
75bb31b6c53f
net.server_event: Trailing whitespace
Matthew Wild <mwild1@gmail.com>
parents:
2534
diff
changeset
|
474 |
end |
2318
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
475 |
|
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
476 |
-- End of client interface methods |
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
477 |
|
10237
600eee3c4752
net.server: Accept and save an 'extra' field for client connections
Kim Alvefur <zash@zash.se>
parents:
9919
diff
changeset
|
478 |
local function handleclient( client, ip, port, server, pattern, listener, sslctx, extra ) -- creates an client interface |
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
479 |
--vdebug("creating client interfacce...") |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
480 |
local interface = { |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
481 |
type = "client"; |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
482 |
conn = client; |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
483 |
currenttime = socket_gettime( ); -- safe the origin |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
484 |
writebuffer = {}; -- writebuffer |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
485 |
writebufferlen = 0; -- length of writebuffer |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
486 |
send = client.send; -- caching table lookups |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
487 |
receive = client.receive; |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
488 |
onconnect = listener.onconnect; -- will be called when client disconnects |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
489 |
ondisconnect = listener.ondisconnect; -- will be called when client disconnects |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
490 |
onincoming = listener.onincoming; -- will be called when client sends data |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
491 |
ontimeout = listener.ontimeout; -- called when fatal socket timeout occurs |
6854
1f1bed8ebc41
server_event: Remove needless scoping and indentation
Kim Alvefur <zash@zash.se>
parents:
6853
diff
changeset
|
492 |
onreadtimeout = listener.onreadtimeout; -- called when socket inactivity timeout occurs |
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
493 |
ondrain = listener.ondrain; -- called when writebuffer is empty |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
494 |
ondetach = listener.ondetach; -- called when disassociating this listener from this connection |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
495 |
onstatus = listener.onstatus; -- called for status changes (e.g. of SSL/TLS) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
496 |
eventread = false, eventwrite = false, eventclose = false, |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
497 |
eventhandshake = false, eventstarthandshake = false; -- event handler |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
498 |
eventconnect = false, eventsession = false; -- more event handler... |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
499 |
eventwritetimeout = false; -- even more event handler... |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
500 |
eventreadtimeout = false; |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
501 |
fatalerror = false; -- error message |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
502 |
writecallback = false; -- will be called on write events |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
503 |
readcallback = false; -- will be called on read events |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
504 |
nointerface = true; -- lock/unlock parameter of this interface |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
505 |
noreading = false, nowriting = false; -- locks of the read/writecallback |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
506 |
startsslcallback = false; -- starting handshake callback |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
507 |
position = false; -- position of client in interfacelist |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5756
diff
changeset
|
508 |
|
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
509 |
-- Properties |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
510 |
_ip = ip, _port = port, _server = server, _pattern = pattern, |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
511 |
_serverport = (server and server:port() or nil), |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
512 |
_sslctx = sslctx; -- parameters |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
513 |
_usingssl = false; -- client is using ssl; |
10237
600eee3c4752
net.server: Accept and save an 'extra' field for client connections
Kim Alvefur <zash@zash.se>
parents:
9919
diff
changeset
|
514 |
extra = extra; |
10238
d4390c427a66
net.server: Handle server name (SNI) as extra argument
Kim Alvefur <zash@zash.se>
parents:
10237
diff
changeset
|
515 |
servername = extra and extra.servername; |
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
516 |
} |
6854
1f1bed8ebc41
server_event: Remove needless scoping and indentation
Kim Alvefur <zash@zash.se>
parents:
6853
diff
changeset
|
517 |
if not has_luasec then interface.starttls = false; end |
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
518 |
interface.id = tostring(interface):match("%x+$"); |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
519 |
interface.writecallback = function( event ) -- called on write events |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
520 |
--vdebug( "new client write event, id/ip/port:", interface, ip, port ) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
521 |
if interface.nowriting or ( interface.fatalerror and ( "client to close" ~= interface.fatalerror ) ) then -- leave this event |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
522 |
--vdebug( "leaving this event because:", interface.nowriting or interface.fatalerror ) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
523 |
interface.eventwrite = false |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
524 |
return -1 |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
525 |
end |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
526 |
if EV_TIMEOUT == event then -- took too long to write some data to socket -> disconnect |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
527 |
interface.fatalerror = "timeout during writing" |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
528 |
debug( "writing failed:", interface.fatalerror ) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
529 |
interface:_close() |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
530 |
interface.eventwrite = false |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
531 |
return -1 |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
532 |
else -- can write :) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
533 |
if interface._usingssl then -- handle luasec |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
534 |
if interface.eventreadtimeout then -- we have to read first |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
535 |
local ret = interface.readcallback( ) -- call readcallback |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
536 |
--vdebug( "tried to read in writecallback, result:", ret ) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
537 |
end |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
538 |
if interface.eventwritetimeout then -- luasec only |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
539 |
interface.eventwritetimeout:close( ) -- first we have to close timeout event which where regged after a wantread error |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
540 |
interface.eventwritetimeout = false |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
541 |
end |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
542 |
end |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
543 |
interface.writebuffer = { t_concat(interface.writebuffer) } |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
544 |
local succ, err, byte = interface.conn:send( interface.writebuffer[1], 1, interface.writebufferlen ) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
545 |
--vdebug( "write data:", interface.writebuffer, "error:", err, "part:", byte ) |
8731
41c959c5c84b
Fix spelling throughout the codebase [codespell]
Kim Alvefur <zash@zash.se>
parents:
8533
diff
changeset
|
546 |
if succ then -- writing successful |
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
547 |
interface.writebuffer[1] = nil |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
548 |
interface.writebufferlen = 0 |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
549 |
interface:ondrain(); |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
550 |
if interface.fatalerror then |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
551 |
debug "closing client after writing" |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
552 |
interface:_close() -- close interface if needed |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
553 |
elseif interface.startsslcallback then -- start ssl connection if needed |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
554 |
debug "starting ssl handshake after writing" |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
555 |
interface.eventstarthandshake = addevent( base, nil, EV_TIMEOUT, interface.startsslcallback, 0 ) |
7402 | 556 |
elseif interface.writebufferlen ~= 0 then |
7397 | 557 |
-- data possibly written from ondrain |
558 |
return EV_WRITE, cfg.WRITE_TIMEOUT |
|
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
559 |
elseif interface.eventreadtimeout then |
7388 | 560 |
return EV_WRITE, cfg.WRITE_TIMEOUT |
561 |
end |
|
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
562 |
interface.eventwrite = nil |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
563 |
return -1 |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
564 |
elseif byte and (err == "timeout" or err == "wantwrite") then -- want write again |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
565 |
--vdebug( "writebuffer is not empty:", err ) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
566 |
interface.writebuffer[1] = s_sub( interface.writebuffer[1], byte + 1, interface.writebufferlen ) -- new buffer |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
567 |
interface.writebufferlen = interface.writebufferlen - byte |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
568 |
if "wantread" == err then -- happens only with luasec |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
569 |
local callback = function( ) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
570 |
interface:_close() |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
571 |
interface.eventwritetimeout = nil |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
572 |
return -1; |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
573 |
end |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
574 |
interface.eventwritetimeout = addevent( base, nil, EV_TIMEOUT, callback, cfg.WRITE_TIMEOUT ) -- reg a new timeout event |
8731
41c959c5c84b
Fix spelling throughout the codebase [codespell]
Kim Alvefur <zash@zash.se>
parents:
8533
diff
changeset
|
575 |
debug( "wantread during write attempt, reg it in readcallback but don't know what really happens next..." ) |
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
576 |
-- hopefully this works with luasec; its simply not possible to use 2 different write events on a socket in luaevent |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
577 |
return -1 |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
578 |
end |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
579 |
return EV_WRITE, cfg.WRITE_TIMEOUT |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
580 |
else -- connection was closed during writing or fatal error |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
581 |
interface.fatalerror = err or "fatal error" |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
582 |
debug( "connection failed in write event:", interface.fatalerror ) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
583 |
interface:_close() |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
584 |
interface.eventwrite = nil |
2318
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
585 |
return -1 |
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
586 |
end |
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
587 |
end |
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
588 |
end |
7227 | 589 |
|
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
590 |
interface.readcallback = function( event ) -- called on read events |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
591 |
--vdebug( "new client read event, id/ip/port:", tostring(interface.id), tostring(ip), tostring(port) ) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
592 |
if interface.noreading or interface.fatalerror then -- leave this event |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
593 |
--vdebug( "leaving this event because:", tostring(interface.noreading or interface.fatalerror) ) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
594 |
interface.eventread = nil |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
595 |
return -1 |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
596 |
end |
7423
3fc5560557a5
net.server_event: Schedule another read callback if there is still data left in buffer after reading (fixes #583 for real)
Kim Alvefur <zash@zash.se>
parents:
7422
diff
changeset
|
597 |
if EV_TIMEOUT == event and not interface.conn:dirty() and interface:onreadtimeout() ~= true then |
7691
88ad2d5bcf80
net.server_event: Restore destruction of socket on read timeout (lost since e67891ad18d6) (thanks Ge0rG)
Kim Alvefur <zash@zash.se>
parents:
7423
diff
changeset
|
598 |
interface.fatalerror = "timeout during receiving" |
88ad2d5bcf80
net.server_event: Restore destruction of socket on read timeout (lost since e67891ad18d6) (thanks Ge0rG)
Kim Alvefur <zash@zash.se>
parents:
7423
diff
changeset
|
599 |
debug( "connection failed:", interface.fatalerror ) |
88ad2d5bcf80
net.server_event: Restore destruction of socket on read timeout (lost since e67891ad18d6) (thanks Ge0rG)
Kim Alvefur <zash@zash.se>
parents:
7423
diff
changeset
|
600 |
interface:_close() |
88ad2d5bcf80
net.server_event: Restore destruction of socket on read timeout (lost since e67891ad18d6) (thanks Ge0rG)
Kim Alvefur <zash@zash.se>
parents:
7423
diff
changeset
|
601 |
interface.eventread = nil |
6854
1f1bed8ebc41
server_event: Remove needless scoping and indentation
Kim Alvefur <zash@zash.se>
parents:
6853
diff
changeset
|
602 |
return -1 -- took too long to get some data from client -> disconnect |
1f1bed8ebc41
server_event: Remove needless scoping and indentation
Kim Alvefur <zash@zash.se>
parents:
6853
diff
changeset
|
603 |
end |
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
604 |
if interface._usingssl then -- handle luasec |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
605 |
if interface.eventwritetimeout then -- ok, in the past writecallback was regged |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
606 |
local ret = interface.writecallback( ) -- call it |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
607 |
--vdebug( "tried to write in readcallback, result:", tostring(ret) ) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
608 |
end |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
609 |
if interface.eventreadtimeout then |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
610 |
interface.eventreadtimeout:close( ) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
611 |
interface.eventreadtimeout = nil |
2318
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
612 |
end |
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
613 |
end |
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
614 |
local buffer, err, part = interface.conn:receive( interface._pattern ) -- receive buffer with "pattern" |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
615 |
--vdebug( "read data:", tostring(buffer), "error:", tostring(err), "part:", tostring(part) ) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
616 |
buffer = buffer or part |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
617 |
if buffer and #buffer > cfg.MAX_READ_LENGTH then -- check buffer length |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
618 |
interface.fatalerror = "receive buffer exceeded" |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
619 |
debug( "fatal error:", interface.fatalerror ) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
620 |
interface:_close() |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
621 |
interface.eventread = nil |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
622 |
return -1 |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
623 |
end |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
624 |
if err and ( err ~= "timeout" and err ~= "wantread" ) then |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
625 |
if "wantwrite" == err then -- need to read on write event |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
626 |
if not interface.eventwrite then -- register new write event if needed |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
627 |
interface.eventwrite = addevent( base, interface.conn, EV_WRITE, interface.writecallback, cfg.WRITE_TIMEOUT ) |
2318
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
628 |
end |
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
629 |
interface.eventreadtimeout = addevent( base, nil, EV_TIMEOUT, |
7422
325c03f5481b
net.server_event: Collect entire one line function on one line
Kim Alvefur <zash@zash.se>
parents:
7402
diff
changeset
|
630 |
function( ) interface:_close() end, cfg.READ_TIMEOUT) |
8731
41c959c5c84b
Fix spelling throughout the codebase [codespell]
Kim Alvefur <zash@zash.se>
parents:
8533
diff
changeset
|
631 |
debug( "wantwrite during read attempt, reg it in writecallback but don't know what really happens next..." ) |
41c959c5c84b
Fix spelling throughout the codebase [codespell]
Kim Alvefur <zash@zash.se>
parents:
8533
diff
changeset
|
632 |
-- to be honest i don't know what happens next, if it is allowed to first read, the write etc... |
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
633 |
else -- connection was closed or fatal error |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
634 |
interface.fatalerror = err |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
635 |
debug( "connection failed in read event:", interface.fatalerror ) |
2318
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
636 |
interface:_close() |
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
637 |
interface.eventread = nil |
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
638 |
return -1 |
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
639 |
end |
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
640 |
else |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
641 |
interface.onincoming( interface, buffer, err ) -- send new data to listener |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
642 |
end |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
643 |
if interface.noreading then |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
644 |
interface.eventread = nil; |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
645 |
return -1; |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
646 |
end |
7423
3fc5560557a5
net.server_event: Schedule another read callback if there is still data left in buffer after reading (fixes #583 for real)
Kim Alvefur <zash@zash.se>
parents:
7422
diff
changeset
|
647 |
if interface.conn:dirty() then -- still data left in buffer |
3fc5560557a5
net.server_event: Schedule another read callback if there is still data left in buffer after reading (fixes #583 for real)
Kim Alvefur <zash@zash.se>
parents:
7422
diff
changeset
|
648 |
return EV_TIMEOUT, cfg.READ_RETRY_DELAY; |
3fc5560557a5
net.server_event: Schedule another read callback if there is still data left in buffer after reading (fixes #583 for real)
Kim Alvefur <zash@zash.se>
parents:
7422
diff
changeset
|
649 |
end |
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
650 |
return EV_READ, cfg.READ_TIMEOUT |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
651 |
end |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
652 |
|
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
653 |
client:settimeout( 0 ) -- set non blocking |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
654 |
setmetatable(interface, interface_mt) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
655 |
interfacelist[ interface ] = true -- add to interfacelist |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
656 |
return interface |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
657 |
end |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
658 |
|
9901
a471d4cfec5e
net/server_event: fix typo in comment
Maxime “pep” Buquet <pep@bouah.net>
parents:
9857
diff
changeset
|
659 |
local function handleserver( server, addr, port, pattern, listener, sslctx, startssl ) -- creates a server interface |
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
660 |
debug "creating server interface..." |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
661 |
local interface = { |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
662 |
_connections = 0; |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
663 |
|
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
664 |
type = "server"; |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
665 |
conn = server; |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
666 |
onconnect = listener.onconnect; -- will be called when new client connected |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
667 |
eventread = false; -- read event handler |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
668 |
eventclose = false; -- close event handler |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
669 |
readcallback = false; -- read event callback |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
670 |
fatalerror = false; -- error message |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
671 |
nointerface = true; -- lock/unlock parameter |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
672 |
|
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
673 |
_ip = addr, _port = port, _pattern = pattern, |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
674 |
_sslctx = sslctx; |
9854
9a905888b96c
net.server_event: Add SNI support (#409)
Kim Alvefur <zash@zash.se>
parents:
9839
diff
changeset
|
675 |
hosts = {}; |
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
676 |
} |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
677 |
interface.id = tostring(interface):match("%x+$"); |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
678 |
interface.readcallback = function( event ) -- server handler, called on incoming connections |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
679 |
--vdebug( "server can accept, id/addr/port:", interface, addr, port ) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
680 |
if interface.fatalerror then |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
681 |
--vdebug( "leaving this event because:", self.fatalerror ) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
682 |
interface.eventread = nil |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
683 |
return -1 |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
684 |
end |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
685 |
local delay = cfg.ACCEPT_DELAY |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
686 |
if EV_TIMEOUT == event then |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
687 |
if interface._connections >= cfg.MAX_CONNECTIONS then -- check connection count |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
688 |
debug( "to many connections, seconds to wait for next accept:", delay ) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
689 |
return EV_TIMEOUT, delay -- timeout... |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
690 |
else |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
691 |
return EV_READ -- accept again |
2318
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
692 |
end |
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
693 |
end |
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
694 |
--vdebug("max connection check ok, accepting...") |
10551
c77471c180ea
net.server_event: Silence luacheck warnings
Kim Alvefur <zash@zash.se>
parents:
10411
diff
changeset
|
695 |
-- luacheck: ignore 231/err |
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
696 |
local client, err = server:accept() -- try to accept; TODO: check err |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
697 |
while client do |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
698 |
if interface._connections >= cfg.MAX_CONNECTIONS then |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
699 |
client:close( ) -- refuse connection |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
700 |
debug( "maximal connections reached, refuse client connection; accept delay:", delay ) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
701 |
return EV_TIMEOUT, delay -- delay for next accept attempt |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
702 |
end |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
703 |
local client_ip, client_port = client:getpeername( ) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
704 |
interface._connections = interface._connections + 1 -- increase connection count |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
705 |
local clientinterface = handleclient( client, client_ip, client_port, interface, pattern, listener, sslctx ) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
706 |
--vdebug( "client id:", clientinterface, "startssl:", startssl ) |
9839
20bf5b47c1fb
net.server: New API for creating server listeners
Kim Alvefur <zash@zash.se>
parents:
9584
diff
changeset
|
707 |
if has_luasec and startssl then |
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
708 |
clientinterface:starttls(sslctx, true) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
709 |
else |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
710 |
clientinterface:_start_session( true ) |
2318
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
711 |
end |
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
712 |
debug( "accepted incoming client connection from:", client_ip or "<unknown IP>", client_port or "<unknown port>", "to", port or "<unknown port>"); |
2318
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
713 |
|
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
714 |
client, err = server:accept() -- try to accept again |
2318
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
715 |
end |
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
716 |
return EV_READ |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
717 |
end |
6854
1f1bed8ebc41
server_event: Remove needless scoping and indentation
Kim Alvefur <zash@zash.se>
parents:
6853
diff
changeset
|
718 |
|
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
719 |
server:settimeout( 0 ) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
720 |
setmetatable(interface, interface_mt) |
7227 | 721 |
interfacelist[ interface ] = true |
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
722 |
interface:_start_session() |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
723 |
return interface |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
724 |
end |
6854
1f1bed8ebc41
server_event: Remove needless scoping and indentation
Kim Alvefur <zash@zash.se>
parents:
6853
diff
changeset
|
725 |
|
9839
20bf5b47c1fb
net.server: New API for creating server listeners
Kim Alvefur <zash@zash.se>
parents:
9584
diff
changeset
|
726 |
local function listen(addr, port, listener, config) |
20bf5b47c1fb
net.server: New API for creating server listeners
Kim Alvefur <zash@zash.se>
parents:
9584
diff
changeset
|
727 |
config = config or {} |
20bf5b47c1fb
net.server: New API for creating server listeners
Kim Alvefur <zash@zash.se>
parents:
9584
diff
changeset
|
728 |
if config.sslctx and not has_luasec then |
6854
1f1bed8ebc41
server_event: Remove needless scoping and indentation
Kim Alvefur <zash@zash.se>
parents:
6853
diff
changeset
|
729 |
debug "fatal error: luasec not found" |
1f1bed8ebc41
server_event: Remove needless scoping and indentation
Kim Alvefur <zash@zash.se>
parents:
6853
diff
changeset
|
730 |
return nil, "luasec not found" |
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
731 |
end |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
732 |
local server, err = socket.bind( addr, port, cfg.ACCEPT_QUEUE ) -- create server socket |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
733 |
if not server then |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
734 |
debug( "creating server socket on "..addr.." port "..port.." failed:", err ) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
735 |
return nil, err |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
736 |
end |
9839
20bf5b47c1fb
net.server: New API for creating server listeners
Kim Alvefur <zash@zash.se>
parents:
9584
diff
changeset
|
737 |
local interface = handleserver( server, addr, port, config.read_size, listener, config.tls_ctx, config.tls_direct) -- new server handler |
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
738 |
debug( "new server created with id:", tostring(interface)) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
739 |
return interface |
2318
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
740 |
end |
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
741 |
|
9839
20bf5b47c1fb
net.server: New API for creating server listeners
Kim Alvefur <zash@zash.se>
parents:
9584
diff
changeset
|
742 |
local function addserver( addr, port, listener, pattern, sslctx ) -- TODO: check arguments |
20bf5b47c1fb
net.server: New API for creating server listeners
Kim Alvefur <zash@zash.se>
parents:
9584
diff
changeset
|
743 |
--vdebug( "creating new tcp server with following parameters:", addr or "nil", port or "nil", sslctx or "nil", startssl or "nil") |
20bf5b47c1fb
net.server: New API for creating server listeners
Kim Alvefur <zash@zash.se>
parents:
9584
diff
changeset
|
744 |
return listen( addr, port, listener, { |
20bf5b47c1fb
net.server: New API for creating server listeners
Kim Alvefur <zash@zash.se>
parents:
9584
diff
changeset
|
745 |
read_size = pattern, |
20bf5b47c1fb
net.server: New API for creating server listeners
Kim Alvefur <zash@zash.se>
parents:
9584
diff
changeset
|
746 |
tls_ctx = sslctx, |
20bf5b47c1fb
net.server: New API for creating server listeners
Kim Alvefur <zash@zash.se>
parents:
9584
diff
changeset
|
747 |
tls_direct = not not sslctx, |
20bf5b47c1fb
net.server: New API for creating server listeners
Kim Alvefur <zash@zash.se>
parents:
9584
diff
changeset
|
748 |
}); |
20bf5b47c1fb
net.server: New API for creating server listeners
Kim Alvefur <zash@zash.se>
parents:
9584
diff
changeset
|
749 |
end |
20bf5b47c1fb
net.server: New API for creating server listeners
Kim Alvefur <zash@zash.se>
parents:
9584
diff
changeset
|
750 |
|
10237
600eee3c4752
net.server: Accept and save an 'extra' field for client connections
Kim Alvefur <zash@zash.se>
parents:
9919
diff
changeset
|
751 |
local function wrapclient( client, ip, port, listeners, pattern, sslctx, extra ) |
600eee3c4752
net.server: Accept and save an 'extra' field for client connections
Kim Alvefur <zash@zash.se>
parents:
9919
diff
changeset
|
752 |
local interface = handleclient( client, ip, port, nil, pattern, listeners, sslctx, extra ) |
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
753 |
interface:_start_connection(sslctx) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
754 |
return interface, client |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
755 |
--function handleclient( client, ip, port, server, pattern, listener, _, sslctx ) -- creates an client interface |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
756 |
end |
6854
1f1bed8ebc41
server_event: Remove needless scoping and indentation
Kim Alvefur <zash@zash.se>
parents:
6853
diff
changeset
|
757 |
|
10237
600eee3c4752
net.server: Accept and save an 'extra' field for client connections
Kim Alvefur <zash@zash.se>
parents:
9919
diff
changeset
|
758 |
local function addclient( addr, serverport, listener, pattern, sslctx, typ, extra ) |
6854
1f1bed8ebc41
server_event: Remove needless scoping and indentation
Kim Alvefur <zash@zash.se>
parents:
6853
diff
changeset
|
759 |
if sslctx and not has_luasec then |
1f1bed8ebc41
server_event: Remove needless scoping and indentation
Kim Alvefur <zash@zash.se>
parents:
6853
diff
changeset
|
760 |
debug "need luasec, but not available" |
1f1bed8ebc41
server_event: Remove needless scoping and indentation
Kim Alvefur <zash@zash.se>
parents:
6853
diff
changeset
|
761 |
return nil, "luasec not found" |
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
762 |
end |
6854
1f1bed8ebc41
server_event: Remove needless scoping and indentation
Kim Alvefur <zash@zash.se>
parents:
6853
diff
changeset
|
763 |
if not typ then |
9476
5fdda751333a
net.server: Require IP address as argument to addclient (no DNS names)
Kim Alvefur <zash@zash.se>
parents:
9390
diff
changeset
|
764 |
local n = inet_pton(addr); |
5fdda751333a
net.server: Require IP address as argument to addclient (no DNS names)
Kim Alvefur <zash@zash.se>
parents:
9390
diff
changeset
|
765 |
if not n then return nil, "invalid-ip"; end |
5fdda751333a
net.server: Require IP address as argument to addclient (no DNS names)
Kim Alvefur <zash@zash.se>
parents:
9390
diff
changeset
|
766 |
if #n == 16 then |
5fdda751333a
net.server: Require IP address as argument to addclient (no DNS names)
Kim Alvefur <zash@zash.se>
parents:
9390
diff
changeset
|
767 |
typ = "tcp6"; |
5fdda751333a
net.server: Require IP address as argument to addclient (no DNS names)
Kim Alvefur <zash@zash.se>
parents:
9390
diff
changeset
|
768 |
elseif #n == 4 then |
5fdda751333a
net.server: Require IP address as argument to addclient (no DNS names)
Kim Alvefur <zash@zash.se>
parents:
9390
diff
changeset
|
769 |
typ = "tcp4"; |
6854
1f1bed8ebc41
server_event: Remove needless scoping and indentation
Kim Alvefur <zash@zash.se>
parents:
6853
diff
changeset
|
770 |
end |
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
771 |
end |
9498
89e05b118f6e
net.server: Remove socket constructor fallback
Kim Alvefur <zash@zash.se>
parents:
9476
diff
changeset
|
772 |
local create = socket[typ]; |
6854
1f1bed8ebc41
server_event: Remove needless scoping and indentation
Kim Alvefur <zash@zash.se>
parents:
6853
diff
changeset
|
773 |
if type( create ) ~= "function" then |
1f1bed8ebc41
server_event: Remove needless scoping and indentation
Kim Alvefur <zash@zash.se>
parents:
6853
diff
changeset
|
774 |
return nil, "invalid socket type" |
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
775 |
end |
6854
1f1bed8ebc41
server_event: Remove needless scoping and indentation
Kim Alvefur <zash@zash.se>
parents:
6853
diff
changeset
|
776 |
local client, err = create() -- creating new socket |
1f1bed8ebc41
server_event: Remove needless scoping and indentation
Kim Alvefur <zash@zash.se>
parents:
6853
diff
changeset
|
777 |
if not client then |
1f1bed8ebc41
server_event: Remove needless scoping and indentation
Kim Alvefur <zash@zash.se>
parents:
6853
diff
changeset
|
778 |
debug( "cannot create socket:", err ) |
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
779 |
return nil, err |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
780 |
end |
6854
1f1bed8ebc41
server_event: Remove needless scoping and indentation
Kim Alvefur <zash@zash.se>
parents:
6853
diff
changeset
|
781 |
client:settimeout( 0 ) -- set nonblocking |
9502
36e379f058c8
net.server: Swich method for connecting sockets with remotes
Kim Alvefur <zash@zash.se>
parents:
9498
diff
changeset
|
782 |
local res, err = client:setpeername( addr, serverport ) -- connect |
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
783 |
if res or ( err == "timeout" ) then |
10551
c77471c180ea
net.server_event: Silence luacheck warnings
Kim Alvefur <zash@zash.se>
parents:
10411
diff
changeset
|
784 |
-- luacheck: ignore 211/port |
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
785 |
local ip, port = client:getsockname( ) |
10237
600eee3c4752
net.server: Accept and save an 'extra' field for client connections
Kim Alvefur <zash@zash.se>
parents:
9919
diff
changeset
|
786 |
local interface = wrapclient( client, ip, serverport, listener, pattern, sslctx, extra ) |
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
787 |
debug( "new connection id:", interface.id ) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
788 |
return interface, err |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
789 |
else |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
790 |
debug( "new connection failed:", err ) |
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
791 |
return nil, err |
2318
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
792 |
end |
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
793 |
end |
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
794 |
|
6854
1f1bed8ebc41
server_event: Remove needless scoping and indentation
Kim Alvefur <zash@zash.se>
parents:
6853
diff
changeset
|
795 |
local function loop( ) -- starts the event loop |
2333
ed824115becf
net.server_event: Return "quitting" on loop exit to be compatible with net.server_select, and give Prosody a way to know why the loop broke
Matthew Wild <mwild1@gmail.com>
parents:
2318
diff
changeset
|
796 |
base:loop( ) |
ed824115becf
net.server_event: Return "quitting" on loop exit to be compatible with net.server_select, and give Prosody a way to know why the loop broke
Matthew Wild <mwild1@gmail.com>
parents:
2318
diff
changeset
|
797 |
return "quitting"; |
2318
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
798 |
end |
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
799 |
|
6853
41de00647ad3
server_event: Move local references to various functions to top of file
Kim Alvefur <zash@zash.se>
parents:
6852
diff
changeset
|
800 |
local function newevent( ... ) |
41de00647ad3
server_event: Move local references to various functions to top of file
Kim Alvefur <zash@zash.se>
parents:
6852
diff
changeset
|
801 |
return addevent( base, ... ) |
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
802 |
end |
2318
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
803 |
|
6854
1f1bed8ebc41
server_event: Remove needless scoping and indentation
Kim Alvefur <zash@zash.se>
parents:
6853
diff
changeset
|
804 |
local function closeallservers ( arg ) |
6852
0455b9686e16
server_event: Replace implementation of ordered set with a simple table set
Kim Alvefur <zash@zash.se>
parents:
6822
diff
changeset
|
805 |
for item in pairs( interfacelist ) do |
2334
4cedfeeaaed4
net.server_event: Fix closeallservers() to work correctly after the giant refactorizification
Matthew Wild <mwild1@gmail.com>
parents:
2333
diff
changeset
|
806 |
if item.type == "server" then |
4cedfeeaaed4
net.server_event: Fix closeallservers() to work correctly after the giant refactorizification
Matthew Wild <mwild1@gmail.com>
parents:
2333
diff
changeset
|
807 |
item:close( arg ) |
2318
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
808 |
end |
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
809 |
end |
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
810 |
end |
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
811 |
|
2335
060fb67cefd5
net.server_event: Add setquitting() function to be compatible with net.server_select
Matthew Wild <mwild1@gmail.com>
parents:
2334
diff
changeset
|
812 |
local function setquitting(yes) |
060fb67cefd5
net.server_event: Add setquitting() function to be compatible with net.server_select
Matthew Wild <mwild1@gmail.com>
parents:
2334
diff
changeset
|
813 |
if yes then |
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
814 |
-- Quit now |
8754
469f78fe1c3e
net.server_event: Don't close servers if just quitting the loop once
Matthew Wild <mwild1@gmail.com>
parents:
8731
diff
changeset
|
815 |
if yes ~= "once" then |
469f78fe1c3e
net.server_event: Don't close servers if just quitting the loop once
Matthew Wild <mwild1@gmail.com>
parents:
8731
diff
changeset
|
816 |
closeallservers(); |
469f78fe1c3e
net.server_event: Don't close servers if just quitting the loop once
Matthew Wild <mwild1@gmail.com>
parents:
8731
diff
changeset
|
817 |
end |
7339
0d9ac472e58c
server_event: Fix indentation (again)
Kim Alvefur <zash@zash.se>
parents:
7227
diff
changeset
|
818 |
base:loopexit(); |
2335
060fb67cefd5
net.server_event: Add setquitting() function to be compatible with net.server_select
Matthew Wild <mwild1@gmail.com>
parents:
2334
diff
changeset
|
819 |
end |
060fb67cefd5
net.server_event: Add setquitting() function to be compatible with net.server_select
Matthew Wild <mwild1@gmail.com>
parents:
2334
diff
changeset
|
820 |
end |
060fb67cefd5
net.server_event: Add setquitting() function to be compatible with net.server_select
Matthew Wild <mwild1@gmail.com>
parents:
2334
diff
changeset
|
821 |
|
4399
1b4161970842
net.server_event, net.server_select: Fixed some global pollution.
Waqas Hussain <waqas20@gmail.com>
parents:
4377
diff
changeset
|
822 |
local function get_backend() |
8317
1d2149d84c72
net.server_event: Add "libevent" to backend description
Kim Alvefur <zash@zash.se>
parents:
7813
diff
changeset
|
823 |
return "libevent " .. base:method(); |
2340
b286d60cb4fc
net.server_event: Add get_backend() method
Matthew Wild <mwild1@gmail.com>
parents:
2336
diff
changeset
|
824 |
end |
b286d60cb4fc
net.server_event: Add get_backend() method
Matthew Wild <mwild1@gmail.com>
parents:
2336
diff
changeset
|
825 |
|
2434
4403d4473783
net.server_event: Add server.hook_signal(signal_num, handler) to wrap libevent's signal-catching interface
Matthew Wild <mwild1@gmail.com>
parents:
2375
diff
changeset
|
826 |
-- We need to hold onto the events to stop them |
4403d4473783
net.server_event: Add server.hook_signal(signal_num, handler) to wrap libevent's signal-catching interface
Matthew Wild <mwild1@gmail.com>
parents:
2375
diff
changeset
|
827 |
-- being garbage-collected |
4403d4473783
net.server_event: Add server.hook_signal(signal_num, handler) to wrap libevent's signal-catching interface
Matthew Wild <mwild1@gmail.com>
parents:
2375
diff
changeset
|
828 |
local signal_events = {}; -- [signal_num] -> event object |
4399
1b4161970842
net.server_event, net.server_select: Fixed some global pollution.
Waqas Hussain <waqas20@gmail.com>
parents:
4377
diff
changeset
|
829 |
local function hook_signal(signal_num, handler) |
6859
489f4ae291bf
server_event: Remove unused argument [luacheck]
Kim Alvefur <zash@zash.se>
parents:
6858
diff
changeset
|
830 |
local function _handler() |
2434
4403d4473783
net.server_event: Add server.hook_signal(signal_num, handler) to wrap libevent's signal-catching interface
Matthew Wild <mwild1@gmail.com>
parents:
2375
diff
changeset
|
831 |
local ret = handler(); |
4403d4473783
net.server_event: Add server.hook_signal(signal_num, handler) to wrap libevent's signal-catching interface
Matthew Wild <mwild1@gmail.com>
parents:
2375
diff
changeset
|
832 |
if ret ~= false then -- Continue handling this signal? |
4403d4473783
net.server_event: Add server.hook_signal(signal_num, handler) to wrap libevent's signal-catching interface
Matthew Wild <mwild1@gmail.com>
parents:
2375
diff
changeset
|
833 |
return EV_SIGNAL; -- Yes |
4403d4473783
net.server_event: Add server.hook_signal(signal_num, handler) to wrap libevent's signal-catching interface
Matthew Wild <mwild1@gmail.com>
parents:
2375
diff
changeset
|
834 |
end |
4403d4473783
net.server_event: Add server.hook_signal(signal_num, handler) to wrap libevent's signal-catching interface
Matthew Wild <mwild1@gmail.com>
parents:
2375
diff
changeset
|
835 |
return -1; -- Close this event |
4403d4473783
net.server_event: Add server.hook_signal(signal_num, handler) to wrap libevent's signal-catching interface
Matthew Wild <mwild1@gmail.com>
parents:
2375
diff
changeset
|
836 |
end |
4403d4473783
net.server_event: Add server.hook_signal(signal_num, handler) to wrap libevent's signal-catching interface
Matthew Wild <mwild1@gmail.com>
parents:
2375
diff
changeset
|
837 |
signal_events[signal_num] = base:addevent(signal_num, EV_SIGNAL, _handler); |
4403d4473783
net.server_event: Add server.hook_signal(signal_num, handler) to wrap libevent's signal-catching interface
Matthew Wild <mwild1@gmail.com>
parents:
2375
diff
changeset
|
838 |
return signal_events[signal_num]; |
4403d4473783
net.server_event: Add server.hook_signal(signal_num, handler) to wrap libevent's signal-catching interface
Matthew Wild <mwild1@gmail.com>
parents:
2375
diff
changeset
|
839 |
end |
4403d4473783
net.server_event: Add server.hook_signal(signal_num, handler) to wrap libevent's signal-catching interface
Matthew Wild <mwild1@gmail.com>
parents:
2375
diff
changeset
|
840 |
|
3003
48871a549b4c
net.server_select, net.server_event: Add server.link() to link 2 connections with an intermediate buffer of the specified size
Matthew Wild <mwild1@gmail.com>
parents:
3002
diff
changeset
|
841 |
local function link(sender, receiver, buffersize) |
48871a549b4c
net.server_select, net.server_event: Add server.link() to link 2 connections with an intermediate buffer of the specified size
Matthew Wild <mwild1@gmail.com>
parents:
3002
diff
changeset
|
842 |
local sender_locked; |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5756
diff
changeset
|
843 |
|
3003
48871a549b4c
net.server_select, net.server_event: Add server.link() to link 2 connections with an intermediate buffer of the specified size
Matthew Wild <mwild1@gmail.com>
parents:
3002
diff
changeset
|
844 |
function receiver:ondrain() |
48871a549b4c
net.server_select, net.server_event: Add server.link() to link 2 connections with an intermediate buffer of the specified size
Matthew Wild <mwild1@gmail.com>
parents:
3002
diff
changeset
|
845 |
if sender_locked then |
48871a549b4c
net.server_select, net.server_event: Add server.link() to link 2 connections with an intermediate buffer of the specified size
Matthew Wild <mwild1@gmail.com>
parents:
3002
diff
changeset
|
846 |
sender:resume(); |
48871a549b4c
net.server_select, net.server_event: Add server.link() to link 2 connections with an intermediate buffer of the specified size
Matthew Wild <mwild1@gmail.com>
parents:
3002
diff
changeset
|
847 |
sender_locked = nil; |
48871a549b4c
net.server_select, net.server_event: Add server.link() to link 2 connections with an intermediate buffer of the specified size
Matthew Wild <mwild1@gmail.com>
parents:
3002
diff
changeset
|
848 |
end |
48871a549b4c
net.server_select, net.server_event: Add server.link() to link 2 connections with an intermediate buffer of the specified size
Matthew Wild <mwild1@gmail.com>
parents:
3002
diff
changeset
|
849 |
end |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5756
diff
changeset
|
850 |
|
3003
48871a549b4c
net.server_select, net.server_event: Add server.link() to link 2 connections with an intermediate buffer of the specified size
Matthew Wild <mwild1@gmail.com>
parents:
3002
diff
changeset
|
851 |
function sender:onincoming(data) |
48871a549b4c
net.server_select, net.server_event: Add server.link() to link 2 connections with an intermediate buffer of the specified size
Matthew Wild <mwild1@gmail.com>
parents:
3002
diff
changeset
|
852 |
receiver:write(data); |
48871a549b4c
net.server_select, net.server_event: Add server.link() to link 2 connections with an intermediate buffer of the specified size
Matthew Wild <mwild1@gmail.com>
parents:
3002
diff
changeset
|
853 |
if receiver.writebufferlen >= buffersize then |
48871a549b4c
net.server_select, net.server_event: Add server.link() to link 2 connections with an intermediate buffer of the specified size
Matthew Wild <mwild1@gmail.com>
parents:
3002
diff
changeset
|
854 |
sender_locked = true; |
48871a549b4c
net.server_select, net.server_event: Add server.link() to link 2 connections with an intermediate buffer of the specified size
Matthew Wild <mwild1@gmail.com>
parents:
3002
diff
changeset
|
855 |
sender:pause(); |
48871a549b4c
net.server_select, net.server_event: Add server.link() to link 2 connections with an intermediate buffer of the specified size
Matthew Wild <mwild1@gmail.com>
parents:
3002
diff
changeset
|
856 |
end |
48871a549b4c
net.server_select, net.server_event: Add server.link() to link 2 connections with an intermediate buffer of the specified size
Matthew Wild <mwild1@gmail.com>
parents:
3002
diff
changeset
|
857 |
end |
6314
8029b8a5f37a
net.server_select/event: Switch sender mode to *a when reading, to make sure we get all available data
Matthew Wild <mwild1@gmail.com>
parents:
6047
diff
changeset
|
858 |
sender:set_mode("*a"); |
3003
48871a549b4c
net.server_select, net.server_event: Add server.link() to link 2 connections with an intermediate buffer of the specified size
Matthew Wild <mwild1@gmail.com>
parents:
3002
diff
changeset
|
859 |
end |
48871a549b4c
net.server_select, net.server_event: Add server.link() to link 2 connections with an intermediate buffer of the specified size
Matthew Wild <mwild1@gmail.com>
parents:
3002
diff
changeset
|
860 |
|
6865
7a81fb23de5d
server_event: Remove needless scoping around add_task
Kim Alvefur <zash@zash.se>
parents:
6864
diff
changeset
|
861 |
local function add_task(delay, callback) |
7a81fb23de5d
server_event: Remove needless scoping around add_task
Kim Alvefur <zash@zash.se>
parents:
6864
diff
changeset
|
862 |
local event_handle; |
7a81fb23de5d
server_event: Remove needless scoping around add_task
Kim Alvefur <zash@zash.se>
parents:
6864
diff
changeset
|
863 |
event_handle = base:addevent(nil, 0, function () |
7a81fb23de5d
server_event: Remove needless scoping around add_task
Kim Alvefur <zash@zash.se>
parents:
6864
diff
changeset
|
864 |
local ret = callback(socket_gettime()); |
7a81fb23de5d
server_event: Remove needless scoping around add_task
Kim Alvefur <zash@zash.se>
parents:
6864
diff
changeset
|
865 |
if ret then |
7a81fb23de5d
server_event: Remove needless scoping around add_task
Kim Alvefur <zash@zash.se>
parents:
6864
diff
changeset
|
866 |
return 0, ret; |
7a81fb23de5d
server_event: Remove needless scoping around add_task
Kim Alvefur <zash@zash.se>
parents:
6864
diff
changeset
|
867 |
elseif event_handle then |
7a81fb23de5d
server_event: Remove needless scoping around add_task
Kim Alvefur <zash@zash.se>
parents:
6864
diff
changeset
|
868 |
return -1; |
6484
dbc72cd1332e
Move timer code out of util.timer and into relevant net.server backends
daurnimator <quae@daurnimator.com>
parents:
6383
diff
changeset
|
869 |
end |
dbc72cd1332e
Move timer code out of util.timer and into relevant net.server backends
daurnimator <quae@daurnimator.com>
parents:
6383
diff
changeset
|
870 |
end |
6865
7a81fb23de5d
server_event: Remove needless scoping around add_task
Kim Alvefur <zash@zash.se>
parents:
6864
diff
changeset
|
871 |
, delay); |
6932
03bc9e197fcc
net.server_event: Return event handle from add_task so it can be closed by eg util.timer
Kim Alvefur <zash@zash.se>
parents:
6865
diff
changeset
|
872 |
return event_handle; |
6484
dbc72cd1332e
Move timer code out of util.timer and into relevant net.server backends
daurnimator <quae@daurnimator.com>
parents:
6383
diff
changeset
|
873 |
end |
dbc72cd1332e
Move timer code out of util.timer and into relevant net.server backends
daurnimator <quae@daurnimator.com>
parents:
6383
diff
changeset
|
874 |
|
8784
53178b6ba589
net.server: Add watchfd, a simple API for watching file descriptors
Kim Alvefur <zash@zash.se>
parents:
8754
diff
changeset
|
875 |
local function watchfd(fd, onreadable, onwriteable) |
53178b6ba589
net.server: Add watchfd, a simple API for watching file descriptors
Kim Alvefur <zash@zash.se>
parents:
8754
diff
changeset
|
876 |
local handle = {}; |
53178b6ba589
net.server: Add watchfd, a simple API for watching file descriptors
Kim Alvefur <zash@zash.se>
parents:
8754
diff
changeset
|
877 |
function handle:setflags(r,w) |
53178b6ba589
net.server: Add watchfd, a simple API for watching file descriptors
Kim Alvefur <zash@zash.se>
parents:
8754
diff
changeset
|
878 |
if r ~= nil then |
53178b6ba589
net.server: Add watchfd, a simple API for watching file descriptors
Kim Alvefur <zash@zash.se>
parents:
8754
diff
changeset
|
879 |
if r and not self.wantread then |
53178b6ba589
net.server: Add watchfd, a simple API for watching file descriptors
Kim Alvefur <zash@zash.se>
parents:
8754
diff
changeset
|
880 |
self.wantread = base:addevent(fd, EV_READ, function () |
53178b6ba589
net.server: Add watchfd, a simple API for watching file descriptors
Kim Alvefur <zash@zash.se>
parents:
8754
diff
changeset
|
881 |
onreadable(self); |
53178b6ba589
net.server: Add watchfd, a simple API for watching file descriptors
Kim Alvefur <zash@zash.se>
parents:
8754
diff
changeset
|
882 |
end); |
53178b6ba589
net.server: Add watchfd, a simple API for watching file descriptors
Kim Alvefur <zash@zash.se>
parents:
8754
diff
changeset
|
883 |
elseif not r and self.wantread then |
53178b6ba589
net.server: Add watchfd, a simple API for watching file descriptors
Kim Alvefur <zash@zash.se>
parents:
8754
diff
changeset
|
884 |
self.wantread:close(); |
53178b6ba589
net.server: Add watchfd, a simple API for watching file descriptors
Kim Alvefur <zash@zash.se>
parents:
8754
diff
changeset
|
885 |
self.wantread = nil; |
53178b6ba589
net.server: Add watchfd, a simple API for watching file descriptors
Kim Alvefur <zash@zash.se>
parents:
8754
diff
changeset
|
886 |
end |
53178b6ba589
net.server: Add watchfd, a simple API for watching file descriptors
Kim Alvefur <zash@zash.se>
parents:
8754
diff
changeset
|
887 |
end |
53178b6ba589
net.server: Add watchfd, a simple API for watching file descriptors
Kim Alvefur <zash@zash.se>
parents:
8754
diff
changeset
|
888 |
if w ~= nil then |
53178b6ba589
net.server: Add watchfd, a simple API for watching file descriptors
Kim Alvefur <zash@zash.se>
parents:
8754
diff
changeset
|
889 |
if w and not self.wantwrite then |
53178b6ba589
net.server: Add watchfd, a simple API for watching file descriptors
Kim Alvefur <zash@zash.se>
parents:
8754
diff
changeset
|
890 |
self.wantwrite = base:addevent(fd, EV_WRITE, function () |
53178b6ba589
net.server: Add watchfd, a simple API for watching file descriptors
Kim Alvefur <zash@zash.se>
parents:
8754
diff
changeset
|
891 |
onwriteable(self); |
53178b6ba589
net.server: Add watchfd, a simple API for watching file descriptors
Kim Alvefur <zash@zash.se>
parents:
8754
diff
changeset
|
892 |
end); |
53178b6ba589
net.server: Add watchfd, a simple API for watching file descriptors
Kim Alvefur <zash@zash.se>
parents:
8754
diff
changeset
|
893 |
elseif not r and self.wantread then |
53178b6ba589
net.server: Add watchfd, a simple API for watching file descriptors
Kim Alvefur <zash@zash.se>
parents:
8754
diff
changeset
|
894 |
self.wantwrite:close(); |
53178b6ba589
net.server: Add watchfd, a simple API for watching file descriptors
Kim Alvefur <zash@zash.se>
parents:
8754
diff
changeset
|
895 |
self.wantwrite = nil; |
53178b6ba589
net.server: Add watchfd, a simple API for watching file descriptors
Kim Alvefur <zash@zash.se>
parents:
8754
diff
changeset
|
896 |
end |
53178b6ba589
net.server: Add watchfd, a simple API for watching file descriptors
Kim Alvefur <zash@zash.se>
parents:
8754
diff
changeset
|
897 |
end |
53178b6ba589
net.server: Add watchfd, a simple API for watching file descriptors
Kim Alvefur <zash@zash.se>
parents:
8754
diff
changeset
|
898 |
end |
53178b6ba589
net.server: Add watchfd, a simple API for watching file descriptors
Kim Alvefur <zash@zash.se>
parents:
8754
diff
changeset
|
899 |
handle:setflags(onreadable, onwriteable); |
53178b6ba589
net.server: Add watchfd, a simple API for watching file descriptors
Kim Alvefur <zash@zash.se>
parents:
8754
diff
changeset
|
900 |
return handle; |
53178b6ba589
net.server: Add watchfd, a simple API for watching file descriptors
Kim Alvefur <zash@zash.se>
parents:
8754
diff
changeset
|
901 |
end |
53178b6ba589
net.server: Add watchfd, a simple API for watching file descriptors
Kim Alvefur <zash@zash.se>
parents:
8754
diff
changeset
|
902 |
|
2318
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
903 |
return { |
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
904 |
cfg = cfg, |
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
905 |
base = base, |
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
906 |
loop = loop, |
3003
48871a549b4c
net.server_select, net.server_event: Add server.link() to link 2 connections with an intermediate buffer of the specified size
Matthew Wild <mwild1@gmail.com>
parents:
3002
diff
changeset
|
907 |
link = link, |
6856
a2cc477eb19b
server_event: Rename luaevent module variable to avoid name clash [luacheck]
Kim Alvefur <zash@zash.se>
parents:
6855
diff
changeset
|
908 |
event = levent, |
2318
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
909 |
event_base = base, |
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
910 |
addevent = newevent, |
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
911 |
addserver = addserver, |
9839
20bf5b47c1fb
net.server: New API for creating server listeners
Kim Alvefur <zash@zash.se>
parents:
9584
diff
changeset
|
912 |
listen = listen, |
2318
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
913 |
addclient = addclient, |
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
914 |
wrapclient = wrapclient, |
2336
fb1d9d2444df
Rename closeallservers to closeall in the public API (same as net.server_select) and expose setquitting
Matthew Wild <mwild1@gmail.com>
parents:
2335
diff
changeset
|
915 |
setquitting = setquitting, |
fb1d9d2444df
Rename closeallservers to closeall in the public API (same as net.server_select) and expose setquitting
Matthew Wild <mwild1@gmail.com>
parents:
2335
diff
changeset
|
916 |
closeall = closeallservers, |
2340
b286d60cb4fc
net.server_event: Add get_backend() method
Matthew Wild <mwild1@gmail.com>
parents:
2336
diff
changeset
|
917 |
get_backend = get_backend, |
2434
4403d4473783
net.server_event: Add server.hook_signal(signal_num, handler) to wrap libevent's signal-catching interface
Matthew Wild <mwild1@gmail.com>
parents:
2375
diff
changeset
|
918 |
hook_signal = hook_signal, |
6484
dbc72cd1332e
Move timer code out of util.timer and into relevant net.server backends
daurnimator <quae@daurnimator.com>
parents:
6383
diff
changeset
|
919 |
add_task = add_task, |
8784
53178b6ba589
net.server: Add watchfd, a simple API for watching file descriptors
Kim Alvefur <zash@zash.se>
parents:
8754
diff
changeset
|
920 |
watchfd = watchfd, |
2318
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
921 |
|
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
922 |
__NAME = SCRIPT_NAME, |
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
923 |
__DATE = LAST_MODIFIED, |
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
924 |
__AUTHOR = SCRIPT_AUTHOR, |
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
925 |
__VERSION = SCRIPT_VERSION, |
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
926 |
|
a831de056de3
net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents:
2303
diff
changeset
|
927 |
} |