Annotate

net/server_select.lua @ 5004:047f6621e709

mod_pep: Allow configurable service discovery identity (Fix)
author IRON <iron.udjin@gmail.com>
date Wed, 25 Jul 2012 19:04:42 +0300
parent 4983:4fd6a020d0d8
child 5197:beffe931b3b6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
1 --
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
2 -- server.lua by blastbeat of the luadch project
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
3 -- Re-used here under the MIT/X Consortium License
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
4 --
2925
692b3c6c5bd2 Merge 0.6->0.7
Matthew Wild <mwild1@gmail.com>
parents: 2923 2740
diff changeset
5 -- Modifications (C) 2008-2010 Matthew Wild, Waqas Hussain
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
6 --
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
7
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
8 -- // wrapping luadch stuff // --
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
9
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
10 local use = function( what )
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
11 return _G[ what ]
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
12 end
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
13 local clean = function( tbl )
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
14 for i, k in pairs( tbl ) do
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
15 tbl[ i ] = nil
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
16 end
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
17 end
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
18
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
19 local log, table_concat = require ("util.logger").init("socket"), table.concat;
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
20 local out_put = function (...) return log("debug", table_concat{...}); end
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
21 local out_error = function (...) return log("warn", table_concat{...}); end
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
22
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
23 ----------------------------------// DECLARATION //--
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
24
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
25 --// constants //--
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
26
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
27 local STAT_UNIT = 1 -- byte
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
28
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
29 --// lua functions //--
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
30
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
31 local type = use "type"
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
32 local pairs = use "pairs"
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
33 local ipairs = use "ipairs"
3685
63efe4eefa07 net.server_select: Made some globals local.
Waqas Hussain <waqas20@gmail.com>
parents: 3682
diff changeset
34 local tonumber = use "tonumber"
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
35 local tostring = use "tostring"
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
36
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
37 --// lua libs //--
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
38
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
39 local os = use "os"
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
40 local table = use "table"
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
41 local string = use "string"
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
42 local coroutine = use "coroutine"
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
43
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
44 --// lua lib methods //--
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
45
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
46 local os_difftime = os.difftime
3682
d12141cbbaa0 net.server_select: Make changes required for sub-second timer precision.
Waqas Hussain <waqas20@gmail.com>
parents: 3543
diff changeset
47 local math_min = math.min
d12141cbbaa0 net.server_select: Make changes required for sub-second timer precision.
Waqas Hussain <waqas20@gmail.com>
parents: 3543
diff changeset
48 local math_huge = math.huge
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
49 local table_concat = table.concat
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
50 local string_len = string.len
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
51 local string_sub = string.sub
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
52 local coroutine_wrap = coroutine.wrap
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
53 local coroutine_yield = coroutine.yield
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
54
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
55 --// extern libs //--
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
56
2597
40a174e8cdf6 net.server_select: Fix traceback with no LuaSec available (thanks Nolan)
Matthew Wild <mwild1@gmail.com>
parents: 2582
diff changeset
57 local luasec = use "ssl"
40a174e8cdf6 net.server_select: Fix traceback with no LuaSec available (thanks Nolan)
Matthew Wild <mwild1@gmail.com>
parents: 2582
diff changeset
58 local luasocket = use "socket" or require "socket"
3682
d12141cbbaa0 net.server_select: Make changes required for sub-second timer precision.
Waqas Hussain <waqas20@gmail.com>
parents: 3543
diff changeset
59 local luasocket_gettime = luasocket.gettime
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
60
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
61 --// extern lib methods //--
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
62
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
63 local ssl_wrap = ( luasec and luasec.wrap )
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
64 local socket_bind = luasocket.bind
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
65 local socket_sleep = luasocket.sleep
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
66 local socket_select = luasocket.select
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
67
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
68 --// functions //--
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
69
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
70 local id
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
71 local loop
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
72 local stats
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
73 local idfalse
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
74 local closeall
3686
27d3e2a2a248 net.server_select: Made another global local.
Waqas Hussain <waqas20@gmail.com>
parents: 3685
diff changeset
75 local addsocket
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
76 local addserver
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
77 local getserver
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
78 local wrapserver
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
79 local getsettings
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
80 local closesocket
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
81 local removesocket
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
82 local removeserver
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
83 local wrapconnection
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
84 local changesettings
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
85
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
86 --// tables //--
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
87
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
88 local _server
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
89 local _readlist
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
90 local _timerlist
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
91 local _sendlist
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
92 local _socketlist
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
93 local _closelist
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
94 local _readtimes
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
95 local _writetimes
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
96
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
97 --// simple data types //--
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
98
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
99 local _
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
100 local _readlistlen
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
101 local _sendlistlen
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
102 local _timerlistlen
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
103
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
104 local _sendtraffic
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
105 local _readtraffic
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
106
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
107 local _selecttimeout
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
108 local _sleeptime
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
109
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
110 local _starttime
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
111 local _currenttime
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
112
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
113 local _maxsendlen
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
114 local _maxreadlen
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
115
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
116 local _checkinterval
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
117 local _sendtimeout
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
118 local _readtimeout
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
119
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
120 local _cleanqueue
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
121
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
122 local _timer
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
123
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
124 local _maxclientsperserver
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
125
3685
63efe4eefa07 net.server_select: Made some globals local.
Waqas Hussain <waqas20@gmail.com>
parents: 3682
diff changeset
126 local _maxsslhandshake
63efe4eefa07 net.server_select: Made some globals local.
Waqas Hussain <waqas20@gmail.com>
parents: 3682
diff changeset
127
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
128 ----------------------------------// DEFINITION //--
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
129
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
130 _server = { } -- key = port, value = table; list of listening servers
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
131 _readlist = { } -- array with sockets to read from
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
132 _sendlist = { } -- arrary with sockets to write to
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
133 _timerlist = { } -- array of timer functions
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
134 _socketlist = { } -- key = socket, value = wrapped socket (handlers)
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
135 _readtimes = { } -- key = handler, value = timestamp of last data reading
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
136 _writetimes = { } -- key = handler, value = timestamp of last data writing/sending
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
137 _closelist = { } -- handlers to close
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
138
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
139 _readlistlen = 0 -- length of readlist
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
140 _sendlistlen = 0 -- length of sendlist
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
141 _timerlistlen = 0 -- lenght of timerlist
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
142
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
143 _sendtraffic = 0 -- some stats
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
144 _readtraffic = 0
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
145
3775
f3f2a7810108 net/server_select.lua: Reduce select() timeout back to 1s
Matthew Wild <mwild1@gmail.com>
parents: 3687
diff changeset
146 _selecttimeout = 1 -- timeout of socket.select
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
147 _sleeptime = 0 -- time to wait at the end of every loop
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
148
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
149 _maxsendlen = 51000 * 1024 -- max len of send buffer
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
150 _maxreadlen = 25000 * 1024 -- max len of read buffer
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
151
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
152 _checkinterval = 1200000 -- interval in secs to check idle clients
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
153 _sendtimeout = 60000 -- allowed send idle time in secs
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
154 _readtimeout = 6 * 60 * 60 -- allowed read idle time in secs
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
155
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
156 _cleanqueue = false -- clean bufferqueue after using
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
157
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
158 _maxclientsperserver = 1000
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
159
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
160 _maxsslhandshake = 30 -- max handshake round-trips
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
161
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
162 ----------------------------------// PRIVATE //--
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
163
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
164 wrapserver = function( listeners, socket, ip, serverport, pattern, sslctx, maxconnections ) -- this function wraps a server
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
165
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
166 maxconnections = maxconnections or _maxclientsperserver
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
167
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
168 local connections = 0
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
169
4388
eded80beab58 net.server_select: Never call onincoming with nil data when a listener doesn't have an onconnect handler
Matthew Wild <mwild1@gmail.com>
parents: 4353
diff changeset
170 local dispatch, disconnect = listeners.onconnect, listeners.ondisconnect
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
171
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
172 local accept = socket.accept
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
173
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
174 --// public methods of the object //--
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
175
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
176 local handler = { }
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
177
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
178 handler.shutdown = function( ) end
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
179
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
180 handler.ssl = function( )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
181 return sslctx ~= nil
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
182 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
183 handler.sslctx = function( )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
184 return sslctx
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
185 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
186 handler.remove = function( )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
187 connections = connections - 1
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
188 end
4904
5d2ff4627b72 net.server_select: Don't close client connections when closing a server (it wasn't working anyway)
Matthew Wild <mwild1@gmail.com>
parents: 4903
diff changeset
189 handler.close = function()
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
190 socket:close( )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
191 _sendlistlen = removesocket( _sendlist, socket, _sendlistlen )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
192 _readlistlen = removesocket( _readlist, socket, _readlistlen )
4675
80f2d952d4c5 net.server_select: Remove server from _server table when closing
Matthew Wild <mwild1@gmail.com>
parents: 4429
diff changeset
193 _server[ip..":"..serverport] = nil;
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
194 _socketlist[ socket ] = nil
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
195 handler = nil
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
196 socket = nil
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
197 --mem_free( )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
198 out_put "server.lua: closed server handler and removed sockets from list"
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
199 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
200 handler.ip = function( )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
201 return ip
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
202 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
203 handler.serverport = function( )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
204 return serverport
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
205 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
206 handler.socket = function( )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
207 return socket
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
208 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
209 handler.readbuffer = function( )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
210 if connections > maxconnections then
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
211 out_put( "server.lua: refused new client connection: server full" )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
212 return false
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
213 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
214 local client, err = accept( socket ) -- try to accept
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
215 if client then
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
216 local ip, clientport = client:getpeername( )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
217 client:settimeout( 0 )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
218 local handler, client, err = wrapconnection( handler, listeners, client, ip, serverport, clientport, pattern, sslctx ) -- wrap new client socket
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
219 if err then -- error while wrapping ssl socket
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
220 return false
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
221 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
222 connections = connections + 1
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
223 out_put( "server.lua: accepted new client connection from ", tostring(ip), ":", tostring(clientport), " to ", tostring(serverport))
4388
eded80beab58 net.server_select: Never call onincoming with nil data when a listener doesn't have an onconnect handler
Matthew Wild <mwild1@gmail.com>
parents: 4353
diff changeset
224 if dispatch then
eded80beab58 net.server_select: Never call onincoming with nil data when a listener doesn't have an onconnect handler
Matthew Wild <mwild1@gmail.com>
parents: 4353
diff changeset
225 return dispatch( handler );
eded80beab58 net.server_select: Never call onincoming with nil data when a listener doesn't have an onconnect handler
Matthew Wild <mwild1@gmail.com>
parents: 4353
diff changeset
226 end
eded80beab58 net.server_select: Never call onincoming with nil data when a listener doesn't have an onconnect handler
Matthew Wild <mwild1@gmail.com>
parents: 4353
diff changeset
227 return;
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
228 elseif err then -- maybe timeout or something else
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
229 out_put( "server.lua: error with new client connection: ", tostring(err) )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
230 return false
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
231 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
232 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
233 return handler
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
234 end
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
235
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
236 wrapconnection = function( server, listeners, socket, ip, serverport, clientport, pattern, sslctx ) -- this function wraps a client to a handler object
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
237
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
238 socket:settimeout( 0 )
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
239
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
240 --// local import of socket methods //--
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
241
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
242 local send
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
243 local receive
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
244 local shutdown
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
245
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
246 --// private closures of the object //--
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
247
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
248 local ssl
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
249
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
250 local dispatch = listeners.onincoming
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
251 local status = listeners.onstatus
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
252 local disconnect = listeners.ondisconnect
3002
d1f864ed44c0 net.server_select, net.server_event: Support for ondrain listener callback for when send buffer is empty
Matthew Wild <mwild1@gmail.com>
parents: 3001
diff changeset
253 local drain = listeners.ondrain
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
254
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
255 local bufferqueue = { } -- buffer array
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
256 local bufferqueuelen = 0 -- end of buffer array
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
257
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
258 local toclose
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
259 local fatalerror
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
260 local needtls
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
261
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
262 local bufferlen = 0
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
263
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
264 local noread = false
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
265 local nosend = false
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
266
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
267 local sendtraffic, readtraffic = 0, 0
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
268
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
269 local maxsendlen = _maxsendlen
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
270 local maxreadlen = _maxreadlen
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
271
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
272 --// public methods of the object //--
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
273
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
274 local handler = bufferqueue -- saves a table ^_^
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
275
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
276 handler.dispatch = function( )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
277 return dispatch
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
278 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
279 handler.disconnect = function( )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
280 return disconnect
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
281 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
282 handler.setlistener = function( self, listeners )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
283 dispatch = listeners.onincoming
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
284 disconnect = listeners.ondisconnect
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
285 status = listeners.onstatus
3002
d1f864ed44c0 net.server_select, net.server_event: Support for ondrain listener callback for when send buffer is empty
Matthew Wild <mwild1@gmail.com>
parents: 3001
diff changeset
286 drain = listeners.ondrain
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
287 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
288 handler.getstats = function( )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
289 return readtraffic, sendtraffic
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
290 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
291 handler.ssl = function( )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
292 return ssl
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
293 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
294 handler.sslctx = function ( )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
295 return sslctx
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
296 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
297 handler.send = function( _, data, i, j )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
298 return send( socket, data, i, j )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
299 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
300 handler.receive = function( pattern, prefix )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
301 return receive( socket, pattern, prefix )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
302 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
303 handler.shutdown = function( pattern )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
304 return shutdown( socket, pattern )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
305 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
306 handler.setoption = function (self, option, value)
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
307 if socket.setoption then
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
308 return socket:setoption(option, value);
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
309 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
310 return false, "setoption not implemented";
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
311 end
4980
2e35cfe11835 net.server_select: Never call ondisconnect() directly, go via handler:close() or handler:force_close() - fixes cases where ondisconnect() could be called multiple times for the same connection, leading to issues with s2sout retry logic.
Matthew Wild <mwild1@gmail.com>
parents: 4962
diff changeset
312 handler.force_close = function ( self, err )
4962
1d8fb12a9b2d net.server_select, net.server_event: Change semantics of conn:close() - always call ondisconnect (with err == nil), and never close with data in send buffer (i.e. 'now' parameter removed)
Matthew Wild <mwild1@gmail.com>
parents: 4904
diff changeset
313 if bufferqueuelen ~= 0 then
4980
2e35cfe11835 net.server_select: Never call ondisconnect() directly, go via handler:close() or handler:force_close() - fixes cases where ondisconnect() could be called multiple times for the same connection, leading to issues with s2sout retry logic.
Matthew Wild <mwild1@gmail.com>
parents: 4962
diff changeset
314 out_put("server.lua: discarding unwritten data for ", tostring(ip), ":", tostring(clientport))
4962
1d8fb12a9b2d net.server_select, net.server_event: Change semantics of conn:close() - always call ondisconnect (with err == nil), and never close with data in send buffer (i.e. 'now' parameter removed)
Matthew Wild <mwild1@gmail.com>
parents: 4904
diff changeset
315 for i = bufferqueuelen, 1, -1 do
1d8fb12a9b2d net.server_select, net.server_event: Change semantics of conn:close() - always call ondisconnect (with err == nil), and never close with data in send buffer (i.e. 'now' parameter removed)
Matthew Wild <mwild1@gmail.com>
parents: 4904
diff changeset
316 bufferqueue[i] = nil;
1d8fb12a9b2d net.server_select, net.server_event: Change semantics of conn:close() - always call ondisconnect (with err == nil), and never close with data in send buffer (i.e. 'now' parameter removed)
Matthew Wild <mwild1@gmail.com>
parents: 4904
diff changeset
317 end
1d8fb12a9b2d net.server_select, net.server_event: Change semantics of conn:close() - always call ondisconnect (with err == nil), and never close with data in send buffer (i.e. 'now' parameter removed)
Matthew Wild <mwild1@gmail.com>
parents: 4904
diff changeset
318 bufferqueuelen = 0;
1d8fb12a9b2d net.server_select, net.server_event: Change semantics of conn:close() - always call ondisconnect (with err == nil), and never close with data in send buffer (i.e. 'now' parameter removed)
Matthew Wild <mwild1@gmail.com>
parents: 4904
diff changeset
319 end
4980
2e35cfe11835 net.server_select: Never call ondisconnect() directly, go via handler:close() or handler:force_close() - fixes cases where ondisconnect() could be called multiple times for the same connection, leading to issues with s2sout retry logic.
Matthew Wild <mwild1@gmail.com>
parents: 4962
diff changeset
320 return self:close(err);
4962
1d8fb12a9b2d net.server_select, net.server_event: Change semantics of conn:close() - always call ondisconnect (with err == nil), and never close with data in send buffer (i.e. 'now' parameter removed)
Matthew Wild <mwild1@gmail.com>
parents: 4904
diff changeset
321 end
4980
2e35cfe11835 net.server_select: Never call ondisconnect() directly, go via handler:close() or handler:force_close() - fixes cases where ondisconnect() could be called multiple times for the same connection, leading to issues with s2sout retry logic.
Matthew Wild <mwild1@gmail.com>
parents: 4962
diff changeset
322 handler.close = function( self, err )
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
323 if not handler then return true; end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
324 _readlistlen = removesocket( _readlist, socket, _readlistlen )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
325 _readtimes[ handler ] = nil
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
326 if bufferqueuelen ~= 0 then
4962
1d8fb12a9b2d net.server_select, net.server_event: Change semantics of conn:close() - always call ondisconnect (with err == nil), and never close with data in send buffer (i.e. 'now' parameter removed)
Matthew Wild <mwild1@gmail.com>
parents: 4904
diff changeset
327 handler.sendbuffer() -- Try now to send any outstanding data
1d8fb12a9b2d net.server_select, net.server_event: Change semantics of conn:close() - always call ondisconnect (with err == nil), and never close with data in send buffer (i.e. 'now' parameter removed)
Matthew Wild <mwild1@gmail.com>
parents: 4904
diff changeset
328 if bufferqueuelen ~= 0 then -- Still not empty, so we'll try again later
1d8fb12a9b2d net.server_select, net.server_event: Change semantics of conn:close() - always call ondisconnect (with err == nil), and never close with data in send buffer (i.e. 'now' parameter removed)
Matthew Wild <mwild1@gmail.com>
parents: 4904
diff changeset
329 if handler then
1d8fb12a9b2d net.server_select, net.server_event: Change semantics of conn:close() - always call ondisconnect (with err == nil), and never close with data in send buffer (i.e. 'now' parameter removed)
Matthew Wild <mwild1@gmail.com>
parents: 4904
diff changeset
330 handler.write = nil -- ... but no further writing allowed
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
331 end
4962
1d8fb12a9b2d net.server_select, net.server_event: Change semantics of conn:close() - always call ondisconnect (with err == nil), and never close with data in send buffer (i.e. 'now' parameter removed)
Matthew Wild <mwild1@gmail.com>
parents: 4904
diff changeset
332 toclose = true
1d8fb12a9b2d net.server_select, net.server_event: Change semantics of conn:close() - always call ondisconnect (with err == nil), and never close with data in send buffer (i.e. 'now' parameter removed)
Matthew Wild <mwild1@gmail.com>
parents: 4904
diff changeset
333 return false
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
334 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
335 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
336 if socket then
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
337 _ = shutdown and shutdown( socket )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
338 socket:close( )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
339 _sendlistlen = removesocket( _sendlist, socket, _sendlistlen )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
340 _socketlist[ socket ] = nil
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
341 socket = nil
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
342 else
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
343 out_put "server.lua: socket already closed"
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
344 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
345 if handler then
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
346 _writetimes[ handler ] = nil
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
347 _closelist[ handler ] = nil
4903
c576d2175fa4 net.server_select: Call ondisconnect handler, even if we closed the socket ourselves (fixes HTTP session hoarding, thanks Maranda)
Matthew Wild <mwild1@gmail.com>
parents: 4888
diff changeset
348 local _handler = handler;
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
349 handler = nil
4903
c576d2175fa4 net.server_select: Call ondisconnect handler, even if we closed the socket ourselves (fixes HTTP session hoarding, thanks Maranda)
Matthew Wild <mwild1@gmail.com>
parents: 4888
diff changeset
350 if disconnect then
4980
2e35cfe11835 net.server_select: Never call ondisconnect() directly, go via handler:close() or handler:force_close() - fixes cases where ondisconnect() could be called multiple times for the same connection, leading to issues with s2sout retry logic.
Matthew Wild <mwild1@gmail.com>
parents: 4962
diff changeset
351 disconnect(_handler, err or false);
2e35cfe11835 net.server_select: Never call ondisconnect() directly, go via handler:close() or handler:force_close() - fixes cases where ondisconnect() could be called multiple times for the same connection, leading to issues with s2sout retry logic.
Matthew Wild <mwild1@gmail.com>
parents: 4962
diff changeset
352 disconnect = nil
4903
c576d2175fa4 net.server_select: Call ondisconnect handler, even if we closed the socket ourselves (fixes HTTP session hoarding, thanks Maranda)
Matthew Wild <mwild1@gmail.com>
parents: 4888
diff changeset
353 end
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
354 end
3310
ddcab5be2a5e net.server_select: Fix a snippet of code that was living at the wrong indentation level
Matthew Wild <mwild1@gmail.com>
parents: 3008
diff changeset
355 if server then
ddcab5be2a5e net.server_select: Fix a snippet of code that was living at the wrong indentation level
Matthew Wild <mwild1@gmail.com>
parents: 3008
diff changeset
356 server.remove( )
ddcab5be2a5e net.server_select: Fix a snippet of code that was living at the wrong indentation level
Matthew Wild <mwild1@gmail.com>
parents: 3008
diff changeset
357 end
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
358 out_put "server.lua: closed client handler and removed socket from list"
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
359 return true
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
360 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
361 handler.ip = function( )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
362 return ip
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
363 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
364 handler.serverport = function( )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
365 return serverport
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
366 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
367 handler.clientport = function( )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
368 return clientport
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
369 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
370 local write = function( self, data )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
371 bufferlen = bufferlen + string_len( data )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
372 if bufferlen > maxsendlen then
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
373 _closelist[ handler ] = "send buffer exceeded" -- cannot close the client at the moment, have to wait to the end of the cycle
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
374 handler.write = idfalse -- dont write anymore
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
375 return false
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
376 elseif socket and not _sendlist[ socket ] then
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
377 _sendlistlen = addsocket(_sendlist, socket, _sendlistlen)
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
378 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
379 bufferqueuelen = bufferqueuelen + 1
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
380 bufferqueue[ bufferqueuelen ] = data
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
381 if handler then
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
382 _writetimes[ handler ] = _writetimes[ handler ] or _currenttime
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
383 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
384 return true
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
385 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
386 handler.write = write
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
387 handler.bufferqueue = function( self )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
388 return bufferqueue
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
389 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
390 handler.socket = function( self )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
391 return socket
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
392 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
393 handler.set_mode = function( self, new )
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
394 pattern = new or pattern
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
395 return pattern
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
396 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
397 handler.set_send = function ( self, newsend )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
398 send = newsend or send
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
399 return send
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
400 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
401 handler.bufferlen = function( self, readlen, sendlen )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
402 maxsendlen = sendlen or maxsendlen
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
403 maxreadlen = readlen or maxreadlen
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
404 return bufferlen, maxreadlen, maxsendlen
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
405 end
3000
43a4cb707fe4 net.server_select, net.server_event: Support for :pause() and :resume() on connections
Matthew Wild <mwild1@gmail.com>
parents: 2970
diff changeset
406 --TODO: Deprecate
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
407 handler.lock_read = function (self, switch)
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
408 if switch == true then
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
409 local tmp = _readlistlen
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
410 _readlistlen = removesocket( _readlist, socket, _readlistlen )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
411 _readtimes[ handler ] = nil
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
412 if _readlistlen ~= tmp then
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
413 noread = true
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
414 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
415 elseif switch == false then
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
416 if noread then
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
417 noread = false
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
418 _readlistlen = addsocket(_readlist, socket, _readlistlen)
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
419 _readtimes[ handler ] = _currenttime
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
420 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
421 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
422 return noread
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
423 end
3000
43a4cb707fe4 net.server_select, net.server_event: Support for :pause() and :resume() on connections
Matthew Wild <mwild1@gmail.com>
parents: 2970
diff changeset
424 handler.pause = function (self)
43a4cb707fe4 net.server_select, net.server_event: Support for :pause() and :resume() on connections
Matthew Wild <mwild1@gmail.com>
parents: 2970
diff changeset
425 return self:lock_read(true);
43a4cb707fe4 net.server_select, net.server_event: Support for :pause() and :resume() on connections
Matthew Wild <mwild1@gmail.com>
parents: 2970
diff changeset
426 end
43a4cb707fe4 net.server_select, net.server_event: Support for :pause() and :resume() on connections
Matthew Wild <mwild1@gmail.com>
parents: 2970
diff changeset
427 handler.resume = function (self)
43a4cb707fe4 net.server_select, net.server_event: Support for :pause() and :resume() on connections
Matthew Wild <mwild1@gmail.com>
parents: 2970
diff changeset
428 return self:lock_read(false);
43a4cb707fe4 net.server_select, net.server_event: Support for :pause() and :resume() on connections
Matthew Wild <mwild1@gmail.com>
parents: 2970
diff changeset
429 end
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
430 handler.lock = function( self, switch )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
431 handler.lock_read (switch)
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
432 if switch == true then
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
433 handler.write = idfalse
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
434 local tmp = _sendlistlen
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
435 _sendlistlen = removesocket( _sendlist, socket, _sendlistlen )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
436 _writetimes[ handler ] = nil
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
437 if _sendlistlen ~= tmp then
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
438 nosend = true
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
439 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
440 elseif switch == false then
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
441 handler.write = write
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
442 if nosend then
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
443 nosend = false
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
444 write( "" )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
445 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
446 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
447 return noread, nosend
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
448 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
449 local _readbuffer = function( ) -- this function reads data
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
450 local buffer, err, part = receive( socket, pattern ) -- receive buffer with "pattern"
3002
d1f864ed44c0 net.server_select, net.server_event: Support for ondrain listener callback for when send buffer is empty
Matthew Wild <mwild1@gmail.com>
parents: 3001
diff changeset
451 if not err or (err == "wantread" or err == "timeout") then -- received something
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
452 local buffer = buffer or part or ""
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
453 local len = string_len( buffer )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
454 if len > maxreadlen then
4980
2e35cfe11835 net.server_select: Never call ondisconnect() directly, go via handler:close() or handler:force_close() - fixes cases where ondisconnect() could be called multiple times for the same connection, leading to issues with s2sout retry logic.
Matthew Wild <mwild1@gmail.com>
parents: 4962
diff changeset
455 handler:close( "receive buffer exceeded" )
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
456 return false
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
457 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
458 local count = len * STAT_UNIT
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
459 readtraffic = readtraffic + count
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
460 _readtraffic = _readtraffic + count
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
461 _readtimes[ handler ] = _currenttime
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
462 --out_put( "server.lua: read data '", buffer:gsub("[^%w%p ]", "."), "', error: ", err )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
463 return dispatch( handler, buffer, err )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
464 else -- connections was closed or fatal error
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
465 out_put( "server.lua: client ", tostring(ip), ":", tostring(clientport), " read error: ", tostring(err) )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
466 fatalerror = true
4980
2e35cfe11835 net.server_select: Never call ondisconnect() directly, go via handler:close() or handler:force_close() - fixes cases where ondisconnect() could be called multiple times for the same connection, leading to issues with s2sout retry logic.
Matthew Wild <mwild1@gmail.com>
parents: 4962
diff changeset
467 _ = handler and handler:force_close( err )
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
468 return false
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
469 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
470 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
471 local _sendbuffer = function( ) -- this function sends data
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
472 local succ, err, byte, buffer, count;
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
473 if socket then
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
474 buffer = table_concat( bufferqueue, "", 1, bufferqueuelen )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
475 succ, err, byte = send( socket, buffer, 1, bufferlen )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
476 count = ( succ or byte or 0 ) * STAT_UNIT
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
477 sendtraffic = sendtraffic + count
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
478 _sendtraffic = _sendtraffic + count
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
479 _ = _cleanqueue and clean( bufferqueue )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
480 --out_put( "server.lua: sended '", buffer, "', bytes: ", tostring(succ), ", error: ", tostring(err), ", part: ", tostring(byte), ", to: ", tostring(ip), ":", tostring(clientport) )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
481 else
4962
1d8fb12a9b2d net.server_select, net.server_event: Change semantics of conn:close() - always call ondisconnect (with err == nil), and never close with data in send buffer (i.e. 'now' parameter removed)
Matthew Wild <mwild1@gmail.com>
parents: 4904
diff changeset
482 succ, err, count = false, "unexpected close", 0;
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
483 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
484 if succ then -- sending succesful
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
485 bufferqueuelen = 0
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
486 bufferlen = 0
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
487 _sendlistlen = removesocket( _sendlist, socket, _sendlistlen ) -- delete socket from writelist
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
488 _writetimes[ handler ] = nil
3002
d1f864ed44c0 net.server_select, net.server_event: Support for ondrain listener callback for when send buffer is empty
Matthew Wild <mwild1@gmail.com>
parents: 3001
diff changeset
489 if drain then
d1f864ed44c0 net.server_select, net.server_event: Support for ondrain listener callback for when send buffer is empty
Matthew Wild <mwild1@gmail.com>
parents: 3001
diff changeset
490 drain(handler)
d1f864ed44c0 net.server_select, net.server_event: Support for ondrain listener callback for when send buffer is empty
Matthew Wild <mwild1@gmail.com>
parents: 3001
diff changeset
491 end
3398
abc4a52aef02 net.server_select: Remove 'now' parameter from starttls(), and base it on whether the sendbuffer is empty instead
Matthew Wild <mwild1@gmail.com>
parents: 3382
diff changeset
492 _ = needtls and handler:starttls(nil)
4962
1d8fb12a9b2d net.server_select, net.server_event: Change semantics of conn:close() - always call ondisconnect (with err == nil), and never close with data in send buffer (i.e. 'now' parameter removed)
Matthew Wild <mwild1@gmail.com>
parents: 4904
diff changeset
493 _ = toclose and handler:force_close( )
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
494 return true
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
495 elseif byte and ( err == "timeout" or err == "wantwrite" ) then -- want write
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
496 buffer = string_sub( buffer, byte + 1, bufferlen ) -- new buffer
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
497 bufferqueue[ 1 ] = buffer -- insert new buffer in queue
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
498 bufferqueuelen = 1
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
499 bufferlen = bufferlen - byte
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
500 _writetimes[ handler ] = _currenttime
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
501 return true
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
502 else -- connection was closed during sending or fatal error
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
503 out_put( "server.lua: client ", tostring(ip), ":", tostring(clientport), " write error: ", tostring(err) )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
504 fatalerror = true
4980
2e35cfe11835 net.server_select: Never call ondisconnect() directly, go via handler:close() or handler:force_close() - fixes cases where ondisconnect() could be called multiple times for the same connection, leading to issues with s2sout retry logic.
Matthew Wild <mwild1@gmail.com>
parents: 4962
diff changeset
505 _ = handler and handler:force_close( err )
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
506 return false
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
507 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
508 end
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
509
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
510 -- Set the sslctx
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
511 local handshake;
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
512 function handler.set_sslctx(self, new_sslctx)
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
513 sslctx = new_sslctx;
4347
4b5290dd4e58 net.server_select: Small fix to SSL handshake logic, read/wrote were being checked despite it not being possible for them to be other than nil
Matthew Wild <mwild1@gmail.com>
parents: 4346
diff changeset
514 local read, wrote
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
515 handshake = coroutine_wrap( function( client ) -- create handshake coroutine
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
516 local err
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
517 for i = 1, _maxsslhandshake do
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
518 _sendlistlen = ( wrote and removesocket( _sendlist, client, _sendlistlen ) ) or _sendlistlen
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
519 _readlistlen = ( read and removesocket( _readlist, client, _readlistlen ) ) or _readlistlen
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
520 read, wrote = nil, nil
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
521 _, err = client:dohandshake( )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
522 if not err then
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
523 out_put( "server.lua: ssl handshake done" )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
524 handler.readbuffer = _readbuffer -- when handshake is done, replace the handshake function with regular functions
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
525 handler.sendbuffer = _sendbuffer
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
526 _ = status and status( handler, "ssl-handshake-complete" )
4349
16fd8061964e net.server_select: Merge straight-SSL and starttls code paths, also fixes onconnect being called before handshake completion for straight-SSL
Matthew Wild <mwild1@gmail.com>
parents: 4348
diff changeset
527 if self.autostart_ssl and listeners.onconnect then
16fd8061964e net.server_select: Merge straight-SSL and starttls code paths, also fixes onconnect being called before handshake completion for straight-SSL
Matthew Wild <mwild1@gmail.com>
parents: 4348
diff changeset
528 listeners.onconnect(self);
16fd8061964e net.server_select: Merge straight-SSL and starttls code paths, also fixes onconnect being called before handshake completion for straight-SSL
Matthew Wild <mwild1@gmail.com>
parents: 4348
diff changeset
529 end
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
530 _readlistlen = addsocket(_readlist, client, _readlistlen)
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
531 return true
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
532 else
4347
4b5290dd4e58 net.server_select: Small fix to SSL handshake logic, read/wrote were being checked despite it not being possible for them to be other than nil
Matthew Wild <mwild1@gmail.com>
parents: 4346
diff changeset
533 if err == "wantwrite" then
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
534 _sendlistlen = addsocket(_sendlist, client, _sendlistlen)
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
535 wrote = true
4347
4b5290dd4e58 net.server_select: Small fix to SSL handshake logic, read/wrote were being checked despite it not being possible for them to be other than nil
Matthew Wild <mwild1@gmail.com>
parents: 4346
diff changeset
536 elseif err == "wantread" then
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
537 _readlistlen = addsocket(_readlist, client, _readlistlen)
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
538 read = true
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
539 else
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
540 break;
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
541 end
4348
5b240c6b5334 net.server_select: Update error logging logic during SSL handshake (now shows correctly when a handshake exceeded max. allowed iterations)
Matthew Wild <mwild1@gmail.com>
parents: 4347
diff changeset
542 err = nil;
5b240c6b5334 net.server_select: Update error logging logic during SSL handshake (now shows correctly when a handshake exceeded max. allowed iterations)
Matthew Wild <mwild1@gmail.com>
parents: 4347
diff changeset
543 coroutine_yield( ) -- handshake not finished
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
544 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
545 end
4348
5b240c6b5334 net.server_select: Update error logging logic during SSL handshake (now shows correctly when a handshake exceeded max. allowed iterations)
Matthew Wild <mwild1@gmail.com>
parents: 4347
diff changeset
546 out_put( "server.lua: ssl handshake error: ", tostring(err or "handshake too long") )
4980
2e35cfe11835 net.server_select: Never call ondisconnect() directly, go via handler:close() or handler:force_close() - fixes cases where ondisconnect() could be called multiple times for the same connection, leading to issues with s2sout retry logic.
Matthew Wild <mwild1@gmail.com>
parents: 4962
diff changeset
547 _ = handler and handler:force_close("ssl handshake failed")
2e35cfe11835 net.server_select: Never call ondisconnect() directly, go via handler:close() or handler:force_close() - fixes cases where ondisconnect() could be called multiple times for the same connection, leading to issues with s2sout retry logic.
Matthew Wild <mwild1@gmail.com>
parents: 4962
diff changeset
548 return false, err -- handshake failed
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
549 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
550 )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
551 end
2582
d6afb6d919df net.server_select: Only allow starttls if luasec is available (thanks Nolan)
Matthew Wild <mwild1@gmail.com>
parents: 2581
diff changeset
552 if luasec then
4349
16fd8061964e net.server_select: Merge straight-SSL and starttls code paths, also fixes onconnect being called before handshake completion for straight-SSL
Matthew Wild <mwild1@gmail.com>
parents: 4348
diff changeset
553 handler.starttls = function( self, _sslctx)
16fd8061964e net.server_select: Merge straight-SSL and starttls code paths, also fixes onconnect being called before handshake completion for straight-SSL
Matthew Wild <mwild1@gmail.com>
parents: 4348
diff changeset
554 if _sslctx then
16fd8061964e net.server_select: Merge straight-SSL and starttls code paths, also fixes onconnect being called before handshake completion for straight-SSL
Matthew Wild <mwild1@gmail.com>
parents: 4348
diff changeset
555 handler:set_sslctx(_sslctx);
16fd8061964e net.server_select: Merge straight-SSL and starttls code paths, also fixes onconnect being called before handshake completion for straight-SSL
Matthew Wild <mwild1@gmail.com>
parents: 4348
diff changeset
556 end
16fd8061964e net.server_select: Merge straight-SSL and starttls code paths, also fixes onconnect being called before handshake completion for straight-SSL
Matthew Wild <mwild1@gmail.com>
parents: 4348
diff changeset
557 if bufferqueuelen > 0 then
16fd8061964e net.server_select: Merge straight-SSL and starttls code paths, also fixes onconnect being called before handshake completion for straight-SSL
Matthew Wild <mwild1@gmail.com>
parents: 4348
diff changeset
558 out_put "server.lua: we need to do tls, but delaying until send buffer empty"
16fd8061964e net.server_select: Merge straight-SSL and starttls code paths, also fixes onconnect being called before handshake completion for straight-SSL
Matthew Wild <mwild1@gmail.com>
parents: 4348
diff changeset
559 needtls = true
16fd8061964e net.server_select: Merge straight-SSL and starttls code paths, also fixes onconnect being called before handshake completion for straight-SSL
Matthew Wild <mwild1@gmail.com>
parents: 4348
diff changeset
560 return
16fd8061964e net.server_select: Merge straight-SSL and starttls code paths, also fixes onconnect being called before handshake completion for straight-SSL
Matthew Wild <mwild1@gmail.com>
parents: 4348
diff changeset
561 end
16fd8061964e net.server_select: Merge straight-SSL and starttls code paths, also fixes onconnect being called before handshake completion for straight-SSL
Matthew Wild <mwild1@gmail.com>
parents: 4348
diff changeset
562 out_put( "server.lua: attempting to start tls on " .. tostring( socket ) )
16fd8061964e net.server_select: Merge straight-SSL and starttls code paths, also fixes onconnect being called before handshake completion for straight-SSL
Matthew Wild <mwild1@gmail.com>
parents: 4348
diff changeset
563 local oldsocket, err = socket
2582
d6afb6d919df net.server_select: Only allow starttls if luasec is available (thanks Nolan)
Matthew Wild <mwild1@gmail.com>
parents: 2581
diff changeset
564 socket, err = ssl_wrap( socket, sslctx ) -- wrap socket
4349
16fd8061964e net.server_select: Merge straight-SSL and starttls code paths, also fixes onconnect being called before handshake completion for straight-SSL
Matthew Wild <mwild1@gmail.com>
parents: 4348
diff changeset
565 if not socket then
16fd8061964e net.server_select: Merge straight-SSL and starttls code paths, also fixes onconnect being called before handshake completion for straight-SSL
Matthew Wild <mwild1@gmail.com>
parents: 4348
diff changeset
566 out_put( "server.lua: error while starting tls on client: ", tostring(err or "unknown error") )
16fd8061964e net.server_select: Merge straight-SSL and starttls code paths, also fixes onconnect being called before handshake completion for straight-SSL
Matthew Wild <mwild1@gmail.com>
parents: 4348
diff changeset
567 return nil, err -- fatal error
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
568 end
4349
16fd8061964e net.server_select: Merge straight-SSL and starttls code paths, also fixes onconnect being called before handshake completion for straight-SSL
Matthew Wild <mwild1@gmail.com>
parents: 4348
diff changeset
569
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
570 socket:settimeout( 0 )
4349
16fd8061964e net.server_select: Merge straight-SSL and starttls code paths, also fixes onconnect being called before handshake completion for straight-SSL
Matthew Wild <mwild1@gmail.com>
parents: 4348
diff changeset
571
16fd8061964e net.server_select: Merge straight-SSL and starttls code paths, also fixes onconnect being called before handshake completion for straight-SSL
Matthew Wild <mwild1@gmail.com>
parents: 4348
diff changeset
572 -- add the new socket to our system
16fd8061964e net.server_select: Merge straight-SSL and starttls code paths, also fixes onconnect being called before handshake completion for straight-SSL
Matthew Wild <mwild1@gmail.com>
parents: 4348
diff changeset
573 send = socket.send
16fd8061964e net.server_select: Merge straight-SSL and starttls code paths, also fixes onconnect being called before handshake completion for straight-SSL
Matthew Wild <mwild1@gmail.com>
parents: 4348
diff changeset
574 receive = socket.receive
16fd8061964e net.server_select: Merge straight-SSL and starttls code paths, also fixes onconnect being called before handshake completion for straight-SSL
Matthew Wild <mwild1@gmail.com>
parents: 4348
diff changeset
575 shutdown = id
16fd8061964e net.server_select: Merge straight-SSL and starttls code paths, also fixes onconnect being called before handshake completion for straight-SSL
Matthew Wild <mwild1@gmail.com>
parents: 4348
diff changeset
576 _socketlist[ socket ] = handler
16fd8061964e net.server_select: Merge straight-SSL and starttls code paths, also fixes onconnect being called before handshake completion for straight-SSL
Matthew Wild <mwild1@gmail.com>
parents: 4348
diff changeset
577 _readlistlen = addsocket(_readlist, socket, _readlistlen)
16fd8061964e net.server_select: Merge straight-SSL and starttls code paths, also fixes onconnect being called before handshake completion for straight-SSL
Matthew Wild <mwild1@gmail.com>
parents: 4348
diff changeset
578
16fd8061964e net.server_select: Merge straight-SSL and starttls code paths, also fixes onconnect being called before handshake completion for straight-SSL
Matthew Wild <mwild1@gmail.com>
parents: 4348
diff changeset
579 -- remove traces of the old socket
16fd8061964e net.server_select: Merge straight-SSL and starttls code paths, also fixes onconnect being called before handshake completion for straight-SSL
Matthew Wild <mwild1@gmail.com>
parents: 4348
diff changeset
580 _readlistlen = removesocket( _readlist, oldsocket, _readlistlen )
16fd8061964e net.server_select: Merge straight-SSL and starttls code paths, also fixes onconnect being called before handshake completion for straight-SSL
Matthew Wild <mwild1@gmail.com>
parents: 4348
diff changeset
581 _sendlistlen = removesocket( _sendlist, oldsocket, _sendlistlen )
16fd8061964e net.server_select: Merge straight-SSL and starttls code paths, also fixes onconnect being called before handshake completion for straight-SSL
Matthew Wild <mwild1@gmail.com>
parents: 4348
diff changeset
582 _socketlist[ oldsocket ] = nil
16fd8061964e net.server_select: Merge straight-SSL and starttls code paths, also fixes onconnect being called before handshake completion for straight-SSL
Matthew Wild <mwild1@gmail.com>
parents: 4348
diff changeset
583
16fd8061964e net.server_select: Merge straight-SSL and starttls code paths, also fixes onconnect being called before handshake completion for straight-SSL
Matthew Wild <mwild1@gmail.com>
parents: 4348
diff changeset
584 handler.starttls = nil
16fd8061964e net.server_select: Merge straight-SSL and starttls code paths, also fixes onconnect being called before handshake completion for straight-SSL
Matthew Wild <mwild1@gmail.com>
parents: 4348
diff changeset
585 needtls = nil
16fd8061964e net.server_select: Merge straight-SSL and starttls code paths, also fixes onconnect being called before handshake completion for straight-SSL
Matthew Wild <mwild1@gmail.com>
parents: 4348
diff changeset
586
16fd8061964e net.server_select: Merge straight-SSL and starttls code paths, also fixes onconnect being called before handshake completion for straight-SSL
Matthew Wild <mwild1@gmail.com>
parents: 4348
diff changeset
587 -- Secure now (if handshake fails connection will close)
16fd8061964e net.server_select: Merge straight-SSL and starttls code paths, also fixes onconnect being called before handshake completion for straight-SSL
Matthew Wild <mwild1@gmail.com>
parents: 4348
diff changeset
588 ssl = true
16fd8061964e net.server_select: Merge straight-SSL and starttls code paths, also fixes onconnect being called before handshake completion for straight-SSL
Matthew Wild <mwild1@gmail.com>
parents: 4348
diff changeset
589
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
590 handler.readbuffer = handshake
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
591 handler.sendbuffer = handshake
4888
c3e17766aead net.server_select: Return error when SSL handshake fails immediately (thanks Zash)
Matthew Wild <mwild1@gmail.com>
parents: 4808
diff changeset
592 return handshake( socket ) -- do handshake
4349
16fd8061964e net.server_select: Merge straight-SSL and starttls code paths, also fixes onconnect being called before handshake completion for straight-SSL
Matthew Wild <mwild1@gmail.com>
parents: 4348
diff changeset
593 end
4429
8e02ba75ef06 net.server_select: Autostart SSL negotiation as the last part of socket setup to avoid a traceback (#262) (thanks Maranda)
Matthew Wild <mwild1@gmail.com>
parents: 4399
diff changeset
594 end
2582
d6afb6d919df net.server_select: Only allow starttls if luasec is available (thanks Nolan)
Matthew Wild <mwild1@gmail.com>
parents: 2581
diff changeset
595
4429
8e02ba75ef06 net.server_select: Autostart SSL negotiation as the last part of socket setup to avoid a traceback (#262) (thanks Maranda)
Matthew Wild <mwild1@gmail.com>
parents: 4399
diff changeset
596 handler.readbuffer = _readbuffer
8e02ba75ef06 net.server_select: Autostart SSL negotiation as the last part of socket setup to avoid a traceback (#262) (thanks Maranda)
Matthew Wild <mwild1@gmail.com>
parents: 4399
diff changeset
597 handler.sendbuffer = _sendbuffer
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
598 send = socket.send
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
599 receive = socket.receive
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
600 shutdown = ( ssl and id ) or socket.shutdown
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
601
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
602 _socketlist[ socket ] = handler
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
603 _readlistlen = addsocket(_readlist, socket, _readlistlen)
4429
8e02ba75ef06 net.server_select: Autostart SSL negotiation as the last part of socket setup to avoid a traceback (#262) (thanks Maranda)
Matthew Wild <mwild1@gmail.com>
parents: 4399
diff changeset
604
8e02ba75ef06 net.server_select: Autostart SSL negotiation as the last part of socket setup to avoid a traceback (#262) (thanks Maranda)
Matthew Wild <mwild1@gmail.com>
parents: 4399
diff changeset
605 if sslctx and luasec then
8e02ba75ef06 net.server_select: Autostart SSL negotiation as the last part of socket setup to avoid a traceback (#262) (thanks Maranda)
Matthew Wild <mwild1@gmail.com>
parents: 4399
diff changeset
606 out_put "server.lua: auto-starting ssl negotiation..."
8e02ba75ef06 net.server_select: Autostart SSL negotiation as the last part of socket setup to avoid a traceback (#262) (thanks Maranda)
Matthew Wild <mwild1@gmail.com>
parents: 4399
diff changeset
607 handler.autostart_ssl = true;
4888
c3e17766aead net.server_select: Return error when SSL handshake fails immediately (thanks Zash)
Matthew Wild <mwild1@gmail.com>
parents: 4808
diff changeset
608 local ok, err = handler:starttls(sslctx);
c3e17766aead net.server_select: Return error when SSL handshake fails immediately (thanks Zash)
Matthew Wild <mwild1@gmail.com>
parents: 4808
diff changeset
609 if ok == false then
c3e17766aead net.server_select: Return error when SSL handshake fails immediately (thanks Zash)
Matthew Wild <mwild1@gmail.com>
parents: 4808
diff changeset
610 return nil, nil, err
c3e17766aead net.server_select: Return error when SSL handshake fails immediately (thanks Zash)
Matthew Wild <mwild1@gmail.com>
parents: 4808
diff changeset
611 end
4429
8e02ba75ef06 net.server_select: Autostart SSL negotiation as the last part of socket setup to avoid a traceback (#262) (thanks Maranda)
Matthew Wild <mwild1@gmail.com>
parents: 4399
diff changeset
612 end
8e02ba75ef06 net.server_select: Autostart SSL negotiation as the last part of socket setup to avoid a traceback (#262) (thanks Maranda)
Matthew Wild <mwild1@gmail.com>
parents: 4399
diff changeset
613
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
614 return handler, socket
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
615 end
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
616
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
617 id = function( )
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
618 end
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
619
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
620 idfalse = function( )
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
621 return false
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
622 end
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
623
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
624 addsocket = function( list, socket, len )
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
625 if not list[ socket ] then
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
626 len = len + 1
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
627 list[ len ] = socket
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
628 list[ socket ] = len
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
629 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
630 return len;
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
631 end
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
632
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
633 removesocket = function( list, socket, len ) -- this function removes sockets from a list ( copied from copas )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
634 local pos = list[ socket ]
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
635 if pos then
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
636 list[ socket ] = nil
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
637 local last = list[ len ]
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
638 list[ len ] = nil
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
639 if last ~= socket then
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
640 list[ last ] = pos
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
641 list[ pos ] = last
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
642 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
643 return len - 1
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
644 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
645 return len
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
646 end
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
647
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
648 closesocket = function( socket )
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
649 _sendlistlen = removesocket( _sendlist, socket, _sendlistlen )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
650 _readlistlen = removesocket( _readlist, socket, _readlistlen )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
651 _socketlist[ socket ] = nil
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
652 socket:close( )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
653 --mem_free( )
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
654 end
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
655
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
656 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
657 local sender_locked;
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
658 local _sendbuffer = receiver.sendbuffer;
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
659 function receiver.sendbuffer()
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
660 _sendbuffer();
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
661 if sender_locked and receiver.bufferlen() < 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
662 sender:lock_read(false); -- Unlock now
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
663 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
664 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
665 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
666
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
667 local _readbuffer = sender.readbuffer;
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
668 function sender.readbuffer()
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
669 _readbuffer();
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
670 if not sender_locked and receiver.bufferlen() >= 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
671 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
672 sender:lock_read(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
673 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
674 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
675 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
676
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
677 ----------------------------------// PUBLIC //--
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
678
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
679 addserver = function( addr, port, listeners, pattern, sslctx ) -- this function provides a way for other scripts to reg a server
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
680 local err
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
681 if type( listeners ) ~= "table" then
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
682 err = "invalid listener table"
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
683 end
2968
fdd049a4e551 Merge 0.6->0.7
Matthew Wild <mwild1@gmail.com>
parents: 2967 2925
diff changeset
684 if type( port ) ~= "number" or not ( port >= 0 and port <= 65535 ) then
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
685 err = "invalid port"
4322
aff627b1ce95 connlistener, server_select, prosody: Add support for binding to multiple addresses
Florian Zeitz <florob@babelmonkeys.de>
parents: 4145
diff changeset
686 elseif _server[ addr..":"..port ] then
aff627b1ce95 connlistener, server_select, prosody: Add support for binding to multiple addresses
Florian Zeitz <florob@babelmonkeys.de>
parents: 4145
diff changeset
687 err = "listeners on '[" .. addr .. "]:" .. port .. "' already exist"
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
688 elseif sslctx and not luasec then
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
689 err = "luasec not found"
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
690 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
691 if err then
4322
aff627b1ce95 connlistener, server_select, prosody: Add support for binding to multiple addresses
Florian Zeitz <florob@babelmonkeys.de>
parents: 4145
diff changeset
692 out_error( "server.lua, [", addr, "]:", port, ": ", err )
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
693 return nil, err
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
694 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
695 addr = addr or "*"
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
696 local server, err = socket_bind( addr, port )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
697 if err then
4322
aff627b1ce95 connlistener, server_select, prosody: Add support for binding to multiple addresses
Florian Zeitz <florob@babelmonkeys.de>
parents: 4145
diff changeset
698 out_error( "server.lua, [", addr, "]:", port, ": ", err )
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
699 return nil, err
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
700 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
701 local handler, err = wrapserver( listeners, server, addr, port, pattern, sslctx, _maxclientsperserver ) -- wrap new server socket
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
702 if not handler then
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
703 server:close( )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
704 return nil, err
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
705 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
706 server:settimeout( 0 )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
707 _readlistlen = addsocket(_readlist, server, _readlistlen)
4322
aff627b1ce95 connlistener, server_select, prosody: Add support for binding to multiple addresses
Florian Zeitz <florob@babelmonkeys.de>
parents: 4145
diff changeset
708 _server[ addr..":"..port ] = handler
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
709 _socketlist[ server ] = handler
4322
aff627b1ce95 connlistener, server_select, prosody: Add support for binding to multiple addresses
Florian Zeitz <florob@babelmonkeys.de>
parents: 4145
diff changeset
710 out_put( "server.lua: new "..(sslctx and "ssl " or "").."server listener on '[", addr, "]:", port, "'" )
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
711 return handler
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
712 end
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
713
4322
aff627b1ce95 connlistener, server_select, prosody: Add support for binding to multiple addresses
Florian Zeitz <florob@babelmonkeys.de>
parents: 4145
diff changeset
714 getserver = function ( addr, port )
aff627b1ce95 connlistener, server_select, prosody: Add support for binding to multiple addresses
Florian Zeitz <florob@babelmonkeys.de>
parents: 4145
diff changeset
715 return _server[ addr..":"..port ];
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
716 end
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
717
4322
aff627b1ce95 connlistener, server_select, prosody: Add support for binding to multiple addresses
Florian Zeitz <florob@babelmonkeys.de>
parents: 4145
diff changeset
718 removeserver = function( addr, port )
aff627b1ce95 connlistener, server_select, prosody: Add support for binding to multiple addresses
Florian Zeitz <florob@babelmonkeys.de>
parents: 4145
diff changeset
719 local handler = _server[ addr..":"..port ]
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
720 if not handler then
4322
aff627b1ce95 connlistener, server_select, prosody: Add support for binding to multiple addresses
Florian Zeitz <florob@babelmonkeys.de>
parents: 4145
diff changeset
721 return nil, "no server found on '[" .. addr .. "]:" .. tostring( port ) .. "'"
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
722 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
723 handler:close( )
4322
aff627b1ce95 connlistener, server_select, prosody: Add support for binding to multiple addresses
Florian Zeitz <florob@babelmonkeys.de>
parents: 4145
diff changeset
724 _server[ addr..":"..port ] = nil
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
725 return true
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
726 end
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
727
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
728 closeall = function( )
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
729 for _, handler in pairs( _socketlist ) do
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
730 handler:close( )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
731 _socketlist[ _ ] = nil
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
732 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
733 _readlistlen = 0
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
734 _sendlistlen = 0
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
735 _timerlistlen = 0
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
736 _server = { }
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
737 _readlist = { }
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
738 _sendlist = { }
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
739 _timerlist = { }
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
740 _socketlist = { }
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
741 --mem_free( )
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
742 end
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
743
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
744 getsettings = function( )
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
745 return _selecttimeout, _sleeptime, _maxsendlen, _maxreadlen, _checkinterval, _sendtimeout, _readtimeout, _cleanqueue, _maxclientsperserver, _maxsslhandshake
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
746 end
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
747
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
748 changesettings = function( new )
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
749 if type( new ) ~= "table" then
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
750 return nil, "invalid settings table"
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
751 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
752 _selecttimeout = tonumber( new.timeout ) or _selecttimeout
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
753 _sleeptime = tonumber( new.sleeptime ) or _sleeptime
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
754 _maxsendlen = tonumber( new.maxsendlen ) or _maxsendlen
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
755 _maxreadlen = tonumber( new.maxreadlen ) or _maxreadlen
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
756 _checkinterval = tonumber( new.checkinterval ) or _checkinterval
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
757 _sendtimeout = tonumber( new.sendtimeout ) or _sendtimeout
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
758 _readtimeout = tonumber( new.readtimeout ) or _readtimeout
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
759 _cleanqueue = new.cleanqueue
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
760 _maxclientsperserver = new._maxclientsperserver or _maxclientsperserver
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
761 _maxsslhandshake = new._maxsslhandshake or _maxsslhandshake
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
762 return true
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
763 end
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
764
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
765 addtimer = function( listener )
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
766 if type( listener ) ~= "function" then
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
767 return nil, "invalid listener function"
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
768 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
769 _timerlistlen = _timerlistlen + 1
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
770 _timerlist[ _timerlistlen ] = listener
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
771 return true
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
772 end
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
773
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
774 stats = function( )
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
775 return _readtraffic, _sendtraffic, _readlistlen, _sendlistlen, _timerlistlen
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
776 end
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
777
3491
e8c06d20a18b net.server_select: Add server.step() to run through a single iteration of the event loop
Matthew Wild <mwild1@gmail.com>
parents: 3458
diff changeset
778 local quitting;
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
779
4399
1b4161970842 net.server_event, net.server_select: Fixed some global pollution.
Waqas Hussain <waqas20@gmail.com>
parents: 4393
diff changeset
780 local function setquitting(quit)
3491
e8c06d20a18b net.server_select: Add server.step() to run through a single iteration of the event loop
Matthew Wild <mwild1@gmail.com>
parents: 3458
diff changeset
781 quitting = not not quit;
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
782 end
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
783
3491
e8c06d20a18b net.server_select: Add server.step() to run through a single iteration of the event loop
Matthew Wild <mwild1@gmail.com>
parents: 3458
diff changeset
784 loop = function(once) -- this is the main loop of the program
e8c06d20a18b net.server_select: Add server.step() to run through a single iteration of the event loop
Matthew Wild <mwild1@gmail.com>
parents: 3458
diff changeset
785 if quitting then return "quitting"; end
e8c06d20a18b net.server_select: Add server.step() to run through a single iteration of the event loop
Matthew Wild <mwild1@gmail.com>
parents: 3458
diff changeset
786 if once then quitting = "once"; end
3682
d12141cbbaa0 net.server_select: Make changes required for sub-second timer precision.
Waqas Hussain <waqas20@gmail.com>
parents: 3543
diff changeset
787 local next_timer_time = math_huge;
3491
e8c06d20a18b net.server_select: Add server.step() to run through a single iteration of the event loop
Matthew Wild <mwild1@gmail.com>
parents: 3458
diff changeset
788 repeat
3682
d12141cbbaa0 net.server_select: Make changes required for sub-second timer precision.
Waqas Hussain <waqas20@gmail.com>
parents: 3543
diff changeset
789 local read, write, err = socket_select( _readlist, _sendlist, math_min(_selecttimeout, next_timer_time) )
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
790 for i, socket in ipairs( write ) do -- send data waiting in writequeues
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
791 local handler = _socketlist[ socket ]
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
792 if handler then
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
793 handler.sendbuffer( )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
794 else
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
795 closesocket( socket )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
796 out_put "server.lua: found no handler and closed socket (writelist)" -- this should not happen
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
797 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
798 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
799 for i, socket in ipairs( read ) do -- receive data
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
800 local handler = _socketlist[ socket ]
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
801 if handler then
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
802 handler.readbuffer( )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
803 else
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
804 closesocket( socket )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
805 out_put "server.lua: found no handler and closed socket (readlist)" -- this can happen
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
806 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
807 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
808 for handler, err in pairs( _closelist ) do
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
809 handler.disconnect( )( handler, err )
4962
1d8fb12a9b2d net.server_select, net.server_event: Change semantics of conn:close() - always call ondisconnect (with err == nil), and never close with data in send buffer (i.e. 'now' parameter removed)
Matthew Wild <mwild1@gmail.com>
parents: 4904
diff changeset
810 handler:force_close() -- forced disconnect
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
811 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
812 clean( _closelist )
3682
d12141cbbaa0 net.server_select: Make changes required for sub-second timer precision.
Waqas Hussain <waqas20@gmail.com>
parents: 3543
diff changeset
813 _currenttime = luasocket_gettime( )
d12141cbbaa0 net.server_select: Make changes required for sub-second timer precision.
Waqas Hussain <waqas20@gmail.com>
parents: 3543
diff changeset
814 if _currenttime - _timer >= math_min(next_timer_time, 1) then
d12141cbbaa0 net.server_select: Make changes required for sub-second timer precision.
Waqas Hussain <waqas20@gmail.com>
parents: 3543
diff changeset
815 next_timer_time = math_huge;
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
816 for i = 1, _timerlistlen do
3682
d12141cbbaa0 net.server_select: Make changes required for sub-second timer precision.
Waqas Hussain <waqas20@gmail.com>
parents: 3543
diff changeset
817 local t = _timerlist[ i ]( _currenttime ) -- fire timers
d12141cbbaa0 net.server_select: Make changes required for sub-second timer precision.
Waqas Hussain <waqas20@gmail.com>
parents: 3543
diff changeset
818 if t then next_timer_time = math_min(next_timer_time, t); end
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
819 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
820 _timer = _currenttime
3682
d12141cbbaa0 net.server_select: Make changes required for sub-second timer precision.
Waqas Hussain <waqas20@gmail.com>
parents: 3543
diff changeset
821 else
d12141cbbaa0 net.server_select: Make changes required for sub-second timer precision.
Waqas Hussain <waqas20@gmail.com>
parents: 3543
diff changeset
822 next_timer_time = next_timer_time - (_currenttime - _timer);
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
823 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
824 socket_sleep( _sleeptime ) -- wait some time
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
825 --collectgarbage( )
3491
e8c06d20a18b net.server_select: Add server.step() to run through a single iteration of the event loop
Matthew Wild <mwild1@gmail.com>
parents: 3458
diff changeset
826 until quitting;
e8c06d20a18b net.server_select: Add server.step() to run through a single iteration of the event loop
Matthew Wild <mwild1@gmail.com>
parents: 3458
diff changeset
827 if once and quitting == "once" then quitting = nil; return; end
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
828 return "quitting"
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
829 end
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
830
4399
1b4161970842 net.server_event, net.server_select: Fixed some global pollution.
Waqas Hussain <waqas20@gmail.com>
parents: 4393
diff changeset
831 local function step()
3491
e8c06d20a18b net.server_select: Add server.step() to run through a single iteration of the event loop
Matthew Wild <mwild1@gmail.com>
parents: 3458
diff changeset
832 return loop(true);
e8c06d20a18b net.server_select: Add server.step() to run through a single iteration of the event loop
Matthew Wild <mwild1@gmail.com>
parents: 3458
diff changeset
833 end
e8c06d20a18b net.server_select: Add server.step() to run through a single iteration of the event loop
Matthew Wild <mwild1@gmail.com>
parents: 3458
diff changeset
834
2339
b04014f42fce net.server_select: Add get_backend() method
Matthew Wild <mwild1@gmail.com>
parents: 2318
diff changeset
835 local function get_backend()
b04014f42fce net.server_select: Add get_backend() method
Matthew Wild <mwild1@gmail.com>
parents: 2318
diff changeset
836 return "select";
b04014f42fce net.server_select: Add get_backend() method
Matthew Wild <mwild1@gmail.com>
parents: 2318
diff changeset
837 end
b04014f42fce net.server_select: Add get_backend() method
Matthew Wild <mwild1@gmail.com>
parents: 2318
diff changeset
838
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
839 --// EXPERIMENTAL //--
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
840
2541
2febd008214e net.server_select: Remove startssl parameter to the client/server creation functions - passing a sslctx now indicates you want to use SSL from the start
Matthew Wild <mwild1@gmail.com>
parents: 2478
diff changeset
841 local wrapclient = function( socket, ip, serverport, listeners, pattern, sslctx )
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
842 local handler = wrapconnection( nil, listeners, socket, ip, serverport, "clientport", pattern, sslctx )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
843 _socketlist[ socket ] = handler
4349
16fd8061964e net.server_select: Merge straight-SSL and starttls code paths, also fixes onconnect being called before handshake completion for straight-SSL
Matthew Wild <mwild1@gmail.com>
parents: 4348
diff changeset
844 if not sslctx then
16fd8061964e net.server_select: Merge straight-SSL and starttls code paths, also fixes onconnect being called before handshake completion for straight-SSL
Matthew Wild <mwild1@gmail.com>
parents: 4348
diff changeset
845 _sendlistlen = addsocket(_sendlist, socket, _sendlistlen)
16fd8061964e net.server_select: Merge straight-SSL and starttls code paths, also fixes onconnect being called before handshake completion for straight-SSL
Matthew Wild <mwild1@gmail.com>
parents: 4348
diff changeset
846 if listeners.onconnect then
16fd8061964e net.server_select: Merge straight-SSL and starttls code paths, also fixes onconnect being called before handshake completion for straight-SSL
Matthew Wild <mwild1@gmail.com>
parents: 4348
diff changeset
847 -- When socket is writeable, call onconnect
16fd8061964e net.server_select: Merge straight-SSL and starttls code paths, also fixes onconnect being called before handshake completion for straight-SSL
Matthew Wild <mwild1@gmail.com>
parents: 4348
diff changeset
848 local _sendbuffer = handler.sendbuffer;
16fd8061964e net.server_select: Merge straight-SSL and starttls code paths, also fixes onconnect being called before handshake completion for straight-SSL
Matthew Wild <mwild1@gmail.com>
parents: 4348
diff changeset
849 handler.sendbuffer = function ()
4353
f600591c87fa net.server_select: Remove socket from sendlist before calling listener callbacks (thanks darkrain)
Matthew Wild <mwild1@gmail.com>
parents: 4349
diff changeset
850 _sendlistlen = removesocket( _sendlist, socket, _sendlistlen );
4349
16fd8061964e net.server_select: Merge straight-SSL and starttls code paths, also fixes onconnect being called before handshake completion for straight-SSL
Matthew Wild <mwild1@gmail.com>
parents: 4348
diff changeset
851 handler.sendbuffer = _sendbuffer;
16fd8061964e net.server_select: Merge straight-SSL and starttls code paths, also fixes onconnect being called before handshake completion for straight-SSL
Matthew Wild <mwild1@gmail.com>
parents: 4348
diff changeset
852 listeners.onconnect(handler);
16fd8061964e net.server_select: Merge straight-SSL and starttls code paths, also fixes onconnect being called before handshake completion for straight-SSL
Matthew Wild <mwild1@gmail.com>
parents: 4348
diff changeset
853 -- If there was data with the incoming packet, handle it now.
16fd8061964e net.server_select: Merge straight-SSL and starttls code paths, also fixes onconnect being called before handshake completion for straight-SSL
Matthew Wild <mwild1@gmail.com>
parents: 4348
diff changeset
854 if #handler:bufferqueue() > 0 then
16fd8061964e net.server_select: Merge straight-SSL and starttls code paths, also fixes onconnect being called before handshake completion for straight-SSL
Matthew Wild <mwild1@gmail.com>
parents: 4348
diff changeset
855 return _sendbuffer();
16fd8061964e net.server_select: Merge straight-SSL and starttls code paths, also fixes onconnect being called before handshake completion for straight-SSL
Matthew Wild <mwild1@gmail.com>
parents: 4348
diff changeset
856 end
3382
fea0f8e19e4c net.server_select: Ensure that onconnect is called for server sockets as well as clients, rather than onincoming. Fixes mod_console traceback, issue #197
Matthew Wild <mwild1@gmail.com>
parents: 3312
diff changeset
857 end
fea0f8e19e4c net.server_select: Ensure that onconnect is called for server sockets as well as clients, rather than onincoming. Fixes mod_console traceback, issue #197
Matthew Wild <mwild1@gmail.com>
parents: 3312
diff changeset
858 end
fea0f8e19e4c net.server_select: Ensure that onconnect is called for server sockets as well as clients, rather than onincoming. Fixes mod_console traceback, issue #197
Matthew Wild <mwild1@gmail.com>
parents: 3312
diff changeset
859 end
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
860 return handler, socket
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
861 end
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
862
2541
2febd008214e net.server_select: Remove startssl parameter to the client/server creation functions - passing a sslctx now indicates you want to use SSL from the start
Matthew Wild <mwild1@gmail.com>
parents: 2478
diff changeset
863 local addclient = function( address, port, listeners, pattern, sslctx )
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
864 local client, err = luasocket.tcp( )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
865 if err then
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
866 return nil, err
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
867 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
868 client:settimeout( 0 )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
869 _, err = client:connect( address, port )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
870 if err then -- try again
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
871 local handler = wrapclient( client, address, port, listeners )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
872 else
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
873 wrapconnection( nil, listeners, client, address, port, "clientport", pattern, sslctx )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
874 end
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
875 end
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
876
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
877 --// EXPERIMENTAL //--
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
878
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
879 ----------------------------------// BEGIN //--
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
880
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
881 use "setmetatable" ( _socketlist, { __mode = "k" } )
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
882 use "setmetatable" ( _readtimes, { __mode = "k" } )
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
883 use "setmetatable" ( _writetimes, { __mode = "k" } )
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
884
3682
d12141cbbaa0 net.server_select: Make changes required for sub-second timer precision.
Waqas Hussain <waqas20@gmail.com>
parents: 3543
diff changeset
885 _timer = luasocket_gettime( )
d12141cbbaa0 net.server_select: Make changes required for sub-second timer precision.
Waqas Hussain <waqas20@gmail.com>
parents: 3543
diff changeset
886 _starttime = luasocket_gettime( )
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
887
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
888 addtimer( function( )
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
889 local difftime = os_difftime( _currenttime - _starttime )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
890 if difftime > _checkinterval then
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
891 _starttime = _currenttime
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
892 for handler, timestamp in pairs( _writetimes ) do
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
893 if os_difftime( _currenttime - timestamp ) > _sendtimeout then
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
894 --_writetimes[ handler ] = nil
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
895 handler.disconnect( )( handler, "send timeout" )
4962
1d8fb12a9b2d net.server_select, net.server_event: Change semantics of conn:close() - always call ondisconnect (with err == nil), and never close with data in send buffer (i.e. 'now' parameter removed)
Matthew Wild <mwild1@gmail.com>
parents: 4904
diff changeset
896 handler:force_close() -- forced disconnect
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
897 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
898 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
899 for handler, timestamp in pairs( _readtimes ) do
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
900 if os_difftime( _currenttime - timestamp ) > _readtimeout then
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
901 --_readtimes[ handler ] = nil
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
902 handler.disconnect( )( handler, "read timeout" )
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
903 handler:close( ) -- forced disconnect?
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
904 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
905 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
906 end
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
907 end
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
908 )
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
909
2424
7d3b071e3b5b net.server_select: Fix oops in last commit
Matthew Wild <mwild1@gmail.com>
parents: 2423
diff changeset
910 local function setlogger(new_logger)
2423
0597c553acf2 net.server_select: Allow setting the logger using server.setlogger
Matthew Wild <mwild1@gmail.com>
parents: 2339
diff changeset
911 local old_logger = log;
0597c553acf2 net.server_select: Allow setting the logger using server.setlogger
Matthew Wild <mwild1@gmail.com>
parents: 2339
diff changeset
912 if new_logger then
0597c553acf2 net.server_select: Allow setting the logger using server.setlogger
Matthew Wild <mwild1@gmail.com>
parents: 2339
diff changeset
913 log = new_logger;
0597c553acf2 net.server_select: Allow setting the logger using server.setlogger
Matthew Wild <mwild1@gmail.com>
parents: 2339
diff changeset
914 end
0597c553acf2 net.server_select: Allow setting the logger using server.setlogger
Matthew Wild <mwild1@gmail.com>
parents: 2339
diff changeset
915 return old_logger;
0597c553acf2 net.server_select: Allow setting the logger using server.setlogger
Matthew Wild <mwild1@gmail.com>
parents: 2339
diff changeset
916 end
0597c553acf2 net.server_select: Allow setting the logger using server.setlogger
Matthew Wild <mwild1@gmail.com>
parents: 2339
diff changeset
917
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
918 ----------------------------------// PUBLIC INTERFACE //--
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
919
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
920 return {
4808
07d0a3a75c8a net.server, net.timer, net.server_select: Rearrange dependencies between these three modules. server.addtimer() is no longer a public function (renamed to _addtimer) and is not available at all from server_event (compat code removed to prevent traceback) (thanks Nulani)
Matthew Wild <mwild1@gmail.com>
parents: 4675
diff changeset
921 _addtimer = addtimer,
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
922
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
923 addclient = addclient,
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
924 wrapclient = wrapclient,
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
925
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
926 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
927 link = link,
4145
e992650185c8 net.server_select: Expose step() function (thanks Łukasz)
Matthew Wild <mwild1@gmail.com>
parents: 4111
diff changeset
928 step = step,
2581
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
929 stats = stats,
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
930 closeall = closeall,
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
931 addserver = addserver,
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
932 getserver = getserver,
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
933 setlogger = setlogger,
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
934 getsettings = getsettings,
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
935 setquitting = setquitting,
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
936 removeserver = removeserver,
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
937 get_backend = get_backend,
1b9f424e695e net.server_select: *Major* whitespace refactoring to meet Prosody's coding style guidelines, we now have tabs
Matthew Wild <mwild1@gmail.com>
parents: 2559
diff changeset
938 changesettings = changesettings,
2318
a831de056de3 net.server_select, net.server_event: Convert to unix line endings from Windows
Matthew Wild <mwild1@gmail.com>
parents: 2312
diff changeset
939 }