net/connlisteners.lua

Sat, 22 May 2010 01:48:31 +0200

author
Tobias Markmann <tm@ayena.de>
date
Sat, 22 May 2010 01:48:31 +0200
changeset 3074
7bd0dae5c84f
parent 2925
692b3c6c5bd2
child 3540
bc139431830b
permissions
-rw-r--r--

util.sasl.scram: Check nonce in client final message. Check channel binding flag in client first message. Adding some TODOs on more strict parsing. (thanks Marc Santamaria)

1523
841d61be198f Remove version number from copyright headers
Matthew Wild <mwild1@gmail.com>
parents: 1099
diff changeset
1 -- Prosody IM
2923
b7049746bd29 Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents: 2076
diff changeset
2 -- Copyright (C) 2008-2010 Matthew Wild
b7049746bd29 Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents: 2076
diff changeset
3 -- Copyright (C) 2008-2010 Waqas Hussain
519
cccd610a0ef9 Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents: 471
diff changeset
4 --
758
b1885732e979 GPL->MIT!
Matthew Wild <mwild1@gmail.com>
parents: 739
diff changeset
5 -- This project is MIT/X11 licensed. Please see the
b1885732e979 GPL->MIT!
Matthew Wild <mwild1@gmail.com>
parents: 739
diff changeset
6 -- COPYING file in the source package for more information.
519
cccd610a0ef9 Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents: 471
diff changeset
7 --
cccd610a0ef9 Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents: 471
diff changeset
8
cccd610a0ef9 Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents: 471
diff changeset
9
99
ba08b8a4eeef Abstract connections with "connection listeners"
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10
471
727d7bd97cd2 Fix for loading connlisteners when running without CFG_SOURCEDIR
Matthew Wild <mwild1@gmail.com>
parents: 467
diff changeset
11 local listeners_dir = (CFG_SOURCEDIR or ".").."/net/";
658
1952fdcf1017 Fix specifying ports in config, and SSL support
Matthew Wild <mwild1@gmail.com>
parents: 624
diff changeset
12 local server = require "net.server";
99
ba08b8a4eeef Abstract connections with "connection listeners"
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
13 local log = require "util.logger".init("connlisteners");
2036
0f9c121713e1 connlisteners: Localize tostring, fixes possible traceback when LuaSec not installed
Matthew Wild <mwild1@gmail.com>
parents: 1523
diff changeset
14 local tostring = tostring;
99
ba08b8a4eeef Abstract connections with "connection listeners"
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
15
ba08b8a4eeef Abstract connections with "connection listeners"
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
16 local dofile, pcall, error =
ba08b8a4eeef Abstract connections with "connection listeners"
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
17 dofile, pcall, error
ba08b8a4eeef Abstract connections with "connection listeners"
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
18
ba08b8a4eeef Abstract connections with "connection listeners"
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
19 module "connlisteners"
ba08b8a4eeef Abstract connections with "connection listeners"
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
20
ba08b8a4eeef Abstract connections with "connection listeners"
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
21 local listeners = {};
ba08b8a4eeef Abstract connections with "connection listeners"
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
22
ba08b8a4eeef Abstract connections with "connection listeners"
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
23 function register(name, listener)
ba08b8a4eeef Abstract connections with "connection listeners"
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
24 if listeners[name] and listeners[name] ~= listener then
1099
127e6ae089f8 net.connlisteners: Lower log level of multiple listeners warning (not interesting to end-users)
Matthew Wild <mwild1@gmail.com>
parents: 908
diff changeset
25 log("debug", "Listener %s is already registered, not registering any more", name);
99
ba08b8a4eeef Abstract connections with "connection listeners"
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
26 return false;
ba08b8a4eeef Abstract connections with "connection listeners"
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
27 end
ba08b8a4eeef Abstract connections with "connection listeners"
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
28 listeners[name] = listener;
1099
127e6ae089f8 net.connlisteners: Lower log level of multiple listeners warning (not interesting to end-users)
Matthew Wild <mwild1@gmail.com>
parents: 908
diff changeset
29 log("debug", "Registered connection listener %s", name);
99
ba08b8a4eeef Abstract connections with "connection listeners"
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
30 return true;
ba08b8a4eeef Abstract connections with "connection listeners"
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
31 end
ba08b8a4eeef Abstract connections with "connection listeners"
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
32
ba08b8a4eeef Abstract connections with "connection listeners"
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
33 function deregister(name)
ba08b8a4eeef Abstract connections with "connection listeners"
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
34 listeners[name] = nil;
ba08b8a4eeef Abstract connections with "connection listeners"
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
35 end
ba08b8a4eeef Abstract connections with "connection listeners"
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
36
127
93f3c6b94c75 Initial s2s stuff
Matthew Wild <mwild1@gmail.com>
parents: 99
diff changeset
37 function get(name)
93f3c6b94c75 Initial s2s stuff
Matthew Wild <mwild1@gmail.com>
parents: 99
diff changeset
38 local h = listeners[name];
99
ba08b8a4eeef Abstract connections with "connection listeners"
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
39 if not h then
624
04fe1a00aa16 Protect loading of connlisteners, to catch errors
Matthew Wild <mwild1@gmail.com>
parents: 615
diff changeset
40 local ok, ret = pcall(dofile, listeners_dir..name:gsub("[^%w%-]", "_").."_listener.lua");
2076
de2ae849b0b3 net.connlisteners: Log an error when a listener fails to load.
Waqas Hussain <waqas20@gmail.com>
parents: 2036
diff changeset
41 if not ok then
de2ae849b0b3 net.connlisteners: Log an error when a listener fails to load.
Waqas Hussain <waqas20@gmail.com>
parents: 2036
diff changeset
42 log("error", "Error while loading listener '%s': %s", tostring(name), tostring(ret));
de2ae849b0b3 net.connlisteners: Log an error when a listener fails to load.
Waqas Hussain <waqas20@gmail.com>
parents: 2036
diff changeset
43 return nil, ret;
de2ae849b0b3 net.connlisteners: Log an error when a listener fails to load.
Waqas Hussain <waqas20@gmail.com>
parents: 2036
diff changeset
44 end
99
ba08b8a4eeef Abstract connections with "connection listeners"
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
45 h = listeners[name];
127
93f3c6b94c75 Initial s2s stuff
Matthew Wild <mwild1@gmail.com>
parents: 99
diff changeset
46 end
93f3c6b94c75 Initial s2s stuff
Matthew Wild <mwild1@gmail.com>
parents: 99
diff changeset
47 return h;
93f3c6b94c75 Initial s2s stuff
Matthew Wild <mwild1@gmail.com>
parents: 99
diff changeset
48 end
93f3c6b94c75 Initial s2s stuff
Matthew Wild <mwild1@gmail.com>
parents: 99
diff changeset
49
93f3c6b94c75 Initial s2s stuff
Matthew Wild <mwild1@gmail.com>
parents: 99
diff changeset
50 function start(name, udata)
721
51233a8ae3d4 net.connlisteners: Fix to report errors loading connlisteners
Matthew Wild <mwild1@gmail.com>
parents: 661
diff changeset
51 local h, err = get(name);
127
93f3c6b94c75 Initial s2s stuff
Matthew Wild <mwild1@gmail.com>
parents: 99
diff changeset
52 if not h then
721
51233a8ae3d4 net.connlisteners: Fix to report errors loading connlisteners
Matthew Wild <mwild1@gmail.com>
parents: 661
diff changeset
53 error("No such connection module: "..name.. (err and (" ("..err..")") or ""), 0);
99
ba08b8a4eeef Abstract connections with "connection listeners"
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
54 end
658
1952fdcf1017 Fix specifying ports in config, and SSL support
Matthew Wild <mwild1@gmail.com>
parents: 624
diff changeset
55
2101
466bd2cac62a net.connlisteners: Standardise on new syntax for addserver(), and clean up a bit
Matthew Wild <mwild1@gmail.com>
parents: 2076
diff changeset
56 local interface = (udata and udata.interface) or h.default_interface or "*";
466bd2cac62a net.connlisteners: Standardise on new syntax for addserver(), and clean up a bit
Matthew Wild <mwild1@gmail.com>
parents: 2076
diff changeset
57 local port = (udata and udata.port) or h.default_port or error("Can't start listener "..name.." because no port was specified, and it has no default port", 0);
466bd2cac62a net.connlisteners: Standardise on new syntax for addserver(), and clean up a bit
Matthew Wild <mwild1@gmail.com>
parents: 2076
diff changeset
58 local mode = (udata and udata.mode) or h.default_mode or 1;
466bd2cac62a net.connlisteners: Standardise on new syntax for addserver(), and clean up a bit
Matthew Wild <mwild1@gmail.com>
parents: 2076
diff changeset
59 local ssl = (udata and udata.ssl) or nil;
466bd2cac62a net.connlisteners: Standardise on new syntax for addserver(), and clean up a bit
Matthew Wild <mwild1@gmail.com>
parents: 2076
diff changeset
60 local autossl = udata and udata.type == "ssl";
466bd2cac62a net.connlisteners: Standardise on new syntax for addserver(), and clean up a bit
Matthew Wild <mwild1@gmail.com>
parents: 2076
diff changeset
61
2551
5f15f21014c4 net.connlisteners: Return an error if no SSL context is supplied for a connection of type 'ssl'
Matthew Wild <mwild1@gmail.com>
parents: 2547
diff changeset
62 if autossl and not ssl then
5f15f21014c4 net.connlisteners: Return an error if no SSL context is supplied for a connection of type 'ssl'
Matthew Wild <mwild1@gmail.com>
parents: 2547
diff changeset
63 return nil, "no ssl context";
739
1def06cd9311 Port to new server.lua, quite some changes, but I believe everything to be working
Matthew Wild <mwild1@gmail.com>
parents: 721
diff changeset
64 end
658
1952fdcf1017 Fix specifying ports in config, and SSL support
Matthew Wild <mwild1@gmail.com>
parents: 624
diff changeset
65
2546
cadfb455a00c net.connlisteners: Update for new server API, type == 'tls' now means little - all connections support TLS
Matthew Wild <mwild1@gmail.com>
parents: 2101
diff changeset
66 return server.addserver(interface, port, h, mode, autossl and ssl or nil);
99
ba08b8a4eeef Abstract connections with "connection listeners"
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
67 end
ba08b8a4eeef Abstract connections with "connection listeners"
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
68
467
66f145f5c932 Update Makefile to now pass config paths to prosody. Update prosody, modulemanager and connectionlisteners to obey these paths.
Matthew Wild <mwild1@gmail.com>
parents: 380
diff changeset
69 return _M;

mercurial