Software /
code /
prosody
Comparison
doc/net.server.lua @ 8532:17c754b81234
doc: Add template / API specification for net.server (thanks Daurnimator)
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Fri, 23 Feb 2018 17:10:21 +0100 |
child | 8728:41c959c5c84b |
comparison
equal
deleted
inserted
replaced
8531:601681acea73 | 8532:17c754b81234 |
---|---|
1 -- Prosody IM | |
2 -- Copyright (C) 2014,2016 Daurnimator | |
3 -- | |
4 -- This project is MIT/X11 licensed. Please see the | |
5 -- COPYING file in the source package for more information. | |
6 | |
7 --[[ | |
8 This file is a template for writing a net.server compatible backend. | |
9 ]] | |
10 | |
11 --[[ | |
12 Read patterns (also called modes) can be one of: | |
13 - "*a": Read as much as possible | |
14 - "*l": Read until end of line | |
15 ]] | |
16 | |
17 --- Handle API | |
18 local handle_mt = {}; | |
19 local handle_methods = {}; | |
20 handle_mt.__index = handle_methods; | |
21 | |
22 function handle_methods:set_mode(new_pattern) | |
23 end | |
24 | |
25 function handle_methods:setlistener(listeners) | |
26 end | |
27 | |
28 function handle_methods:setoption(option, value) | |
29 end | |
30 | |
31 function handle_methods:ip() | |
32 end | |
33 | |
34 function handle_methods:starttls(sslctx) | |
35 end | |
36 | |
37 function handle_methods:write(data) | |
38 end | |
39 | |
40 function handle_methods:close() | |
41 end | |
42 | |
43 function handle_methods:pause() | |
44 end | |
45 | |
46 function handle_methods:resume() | |
47 end | |
48 | |
49 --[[ | |
50 Returns | |
51 - socket: the socket object underlying this handle | |
52 ]] | |
53 function handle_methods:socket() | |
54 end | |
55 | |
56 --[[ | |
57 Returns | |
58 - boolean: if an ssl context has been set on this handle | |
59 ]] | |
60 function handle_methods:ssl() | |
61 end | |
62 | |
63 | |
64 --- Listeners API | |
65 local listeners = {} | |
66 | |
67 --[[ connect | |
68 Called when a client socket has established a connection with it's peer | |
69 ]] | |
70 function listeners.onconnect(handle) | |
71 end | |
72 | |
73 --[[ incoming | |
74 Called when data is received | |
75 If reading data failed this will be called with `nil, "error message"` | |
76 ]] | |
77 function listeners.onincoming(handle, buff, err) | |
78 end | |
79 | |
80 --[[ status | |
81 Known statuses: | |
82 - "ssl-handshake-complete" | |
83 ]] | |
84 function listeners.onstatus(handle, status) | |
85 end | |
86 | |
87 --[[ disconnect | |
88 Called when the peer has closed the connection | |
89 ]] | |
90 function listeners.ondisconnect(handle) | |
91 end | |
92 | |
93 --[[ drain | |
94 Called when the handle's write buffer is empty | |
95 ]] | |
96 function listeners.ondrain(handle) | |
97 end | |
98 | |
99 --[[ readtimeout | |
100 Called when a socket inactivity timeout occurs | |
101 ]] | |
102 function listeners.onreadtimeout(handle) | |
103 end | |
104 | |
105 --[[ detach: Called when other listeners are going to be removed | |
106 Allows for clean-up | |
107 ]] | |
108 function listeners.ondetach(handle) | |
109 end | |
110 | |
111 --- Top level functions | |
112 | |
113 --[[ Returns the syscall level event mechanism in use. | |
114 | |
115 Returns: | |
116 - backend: e.g. "select", "epoll" | |
117 ]] | |
118 local function get_backend() | |
119 end | |
120 | |
121 --[[ Starts the event loop. | |
122 | |
123 Returns: | |
124 - "quitting" | |
125 ]] | |
126 local function loop() | |
127 end | |
128 | |
129 --[[ Stop a running loop() | |
130 ]] | |
131 local function setquitting(quit) | |
132 end | |
133 | |
134 | |
135 --[[ Links to two handles together, so anything written to one is piped to the other | |
136 | |
137 Arguments: | |
138 - sender, reciever: handles to link | |
139 - buffersize: maximum #bytes until sender will be locked | |
140 ]] | |
141 local function link(sender, receiver, buffersize) | |
142 end | |
143 | |
144 --[[ Binds and listens on the given address and port | |
145 If `sslctx` is given, the connecting clients will have to negotiate an SSL session | |
146 | |
147 Arguments: | |
148 - address: address to bind to, may be "*" to bind all addresses. will be resolved if it is a string. | |
149 - port: port to bind (as number) | |
150 - listeners: a table of listeners | |
151 - pattern: the read pattern | |
152 - sslctx: is a valid luasec constructor | |
153 | |
154 Returns: | |
155 - handle | |
156 - nil, "an error message": on failure (e.g. out of file descriptors) | |
157 ]] | |
158 local function addserver(address, port, listeners, pattern, sslctx) | |
159 end | |
160 | |
161 --[[ Wraps a lua-socket socket client socket in a handle. | |
162 The socket must be already connected to the remote end. | |
163 If `sslctx` is given, a SSL session will be negotiated before listeners are called. | |
164 | |
165 Arguments: | |
166 - socket: the lua-socket object to wrap | |
167 - ip: returned by `handle:ip()` | |
168 - port: | |
169 - listeners: a table of listeners | |
170 - pattern: the read pattern | |
171 - sslctx: is a valid luasec constructor | |
172 - typ: the socket type, one of: | |
173 - "tcp" | |
174 - "tcp6" | |
175 - "udp" | |
176 | |
177 Returns: | |
178 - handle, socket | |
179 - nil, "an error message": on failure (e.g. ) | |
180 ]] | |
181 local function wrapclient(socket, ip, serverport, listeners, pattern, sslctx) | |
182 end | |
183 | |
184 --[[ Connects to the given address and port | |
185 If `sslctx` is given, a SSL session will be negotiated before listeners are called. | |
186 | |
187 Arguments: | |
188 - address: address to connect to. will be resolved if it is a string. | |
189 - port: port to connect to (as number) | |
190 - listeners: a table of listeners | |
191 - pattern: the read pattern | |
192 - sslctx: is a valid luasec constructor | |
193 - typ: the socket type, one of: | |
194 - "tcp" | |
195 - "tcp6" | |
196 - "udp" | |
197 | |
198 Returns: | |
199 - handle | |
200 - nil, "an error message": on failure (e.g. out of file descriptors) | |
201 ]] | |
202 local function addclient(address, port, listeners, pattern, sslctx, typ) | |
203 end | |
204 | |
205 --[[ Close all handles | |
206 ]] | |
207 local function closeall() | |
208 end | |
209 | |
210 --[[ The callback should be called after `delay` seconds. | |
211 The callback should be called with the time at the point of firing. | |
212 If the callback returns a number, it should be called again after that many seconds. | |
213 | |
214 Arguments: | |
215 - delay: number of seconds to wait | |
216 - callback: function to call. | |
217 ]] | |
218 local function add_task(delay, callback) | |
219 end | |
220 | |
221 --[[ Adds a handler for when a signal is fired. | |
222 Optional to implement | |
223 callback does not take any arguments | |
224 | |
225 Arguments: | |
226 - signal_id: the signal id (as number) to listen for | |
227 - handler: callback | |
228 ]] | |
229 local function hook_signal(signal_id, handler) | |
230 end | |
231 | |
232 | |
233 return { | |
234 get_backend = get_backend; | |
235 loop = loop; | |
236 setquitting = setquitting; | |
237 link = link; | |
238 addserver = addserver; | |
239 wrapclient = wrapclient; | |
240 addclient = addclient; | |
241 closeall = closeall; | |
242 hook_signal = hook_signal; | |
243 } |