Mercurial > prosody-hg
comparison net/server.lua @ 6480:37b12475f648
net/server: Split up different backends in a nicer way. Add global config option 'server'
| author | daurnimator <quae@daurnimator.com> |
|---|---|
| date | Fri, 17 Oct 2014 17:30:21 -0400 |
| parents | bd0ff8ae98a8 |
| children | 410067cdeb2f |
comparison
equal
deleted
inserted
replaced
| 6479:d016437e01bf | 6480:37b12475f648 |
|---|---|
| 4 -- | 4 -- |
| 5 -- This project is MIT/X11 licensed. Please see the | 5 -- This project is MIT/X11 licensed. Please see the |
| 6 -- COPYING file in the source package for more information. | 6 -- COPYING file in the source package for more information. |
| 7 -- | 7 -- |
| 8 | 8 |
| 9 local use_luaevent = prosody and require "core.configmanager".get("*", "use_libevent"); | 9 local server_type = prosody and require "core.configmanager".get("*", "server") or "select"; |
| 10 if prosody and require "core.configmanager".get("*", "use_libevent") then | |
| 11 server_type = "event"; | |
| 12 end | |
| 10 | 13 |
| 11 if use_luaevent then | 14 if server_type == "event" then |
| 12 use_luaevent = pcall(require, "luaevent.core"); | 15 if not pcall(require, "luaevent.core") then |
| 13 if not use_luaevent then | 16 print(log) |
| 14 log("error", "libevent not found, falling back to select()"); | 17 log("error", "libevent not found, falling back to select()"); |
| 18 server_type = "select" | |
| 15 end | 19 end |
| 16 end | 20 end |
| 17 | 21 |
| 18 local server; | 22 local server; |
| 19 | 23 local set_config; |
| 20 if use_luaevent then | 24 if server_type == "event" then |
| 21 server = require "net.server_event"; | 25 server = require "net.server_event"; |
| 22 | 26 |
| 23 -- Overwrite signal.signal() because we need to ask libevent to | 27 -- Overwrite signal.signal() because we need to ask libevent to |
| 24 -- handle them instead | 28 -- handle them instead |
| 25 local ok, signal = pcall(require, "util.signal"); | 29 local ok, signal = pcall(require, "util.signal"); |
| 33 return false, "invalid-signal"; | 37 return false, "invalid-signal"; |
| 34 end | 38 end |
| 35 return server.hook_signal(signal_id, handler); | 39 return server.hook_signal(signal_id, handler); |
| 36 end | 40 end |
| 37 end | 41 end |
| 42 | |
| 43 local defaults = {}; | |
| 44 for k,v in pairs(server.cfg) do | |
| 45 defaults[k] = v; | |
| 46 end | |
| 47 function set_config(settings) | |
| 48 local event_settings = { | |
| 49 ACCEPT_DELAY = settings.event_accept_retry_interval; | |
| 50 ACCEPT_QUEUE = settings.tcp_backlog; | |
| 51 CLEAR_DELAY = settings.event_clear_interval; | |
| 52 CONNECT_TIMEOUT = settings.connect_timeout; | |
| 53 DEBUG = settings.debug; | |
| 54 HANDSHAKE_TIMEOUT = settings.ssl_handshake_timeout; | |
| 55 MAX_CONNECTIONS = settings.max_connections; | |
| 56 MAX_HANDSHAKE_ATTEMPTS = settings.max_ssl_handshake_roundtrips; | |
| 57 MAX_READ_LENGTH = settings.max_receive_buffer_size; | |
| 58 MAX_SEND_LENGTH = settings.max_send_buffer_size; | |
| 59 READ_TIMEOUT = settings.read_timeout; | |
| 60 WRITE_TIMEOUT = settings.send_timeout; | |
| 61 }; | |
| 62 | |
| 63 for k,default in pairs(defaults) do | |
| 64 server.cfg[k] = event_settings[k] or default; | |
| 65 end | |
| 66 end | |
| 67 elseif server_type == "select" then | |
| 68 server = require "net.server_select"; | |
| 69 | |
| 70 local defaults = {}; | |
| 71 for k,v in pairs(server.getsettings()) do | |
| 72 defaults[k] = v; | |
| 73 end | |
| 74 function set_config(settings) | |
| 75 local select_settings = {}; | |
| 76 for k,default in pairs(defaults) do | |
| 77 select_settings[k] = settings[k] or default; | |
| 78 end | |
| 79 server.changesettings(select_settings); | |
| 80 end | |
| 38 else | 81 else |
| 39 use_luaevent = false; | 82 error("Unsupported server type") |
| 40 server = require "net.server_select"; | |
| 41 end | 83 end |
| 42 | 84 |
| 43 if prosody then | 85 if prosody then |
| 44 local config_get = require "core.configmanager".get; | 86 local config_get = require "core.configmanager".get; |
| 45 local defaults = {}; | |
| 46 for k,v in pairs(server.cfg or server.getsettings()) do | |
| 47 defaults[k] = v; | |
| 48 end | |
| 49 local function load_config() | 87 local function load_config() |
| 50 local settings = config_get("*", "network_settings") or {}; | 88 local settings = config_get("*", "network_settings") or {}; |
| 51 if use_luaevent then | 89 return set_config(settings); |
| 52 local event_settings = { | |
| 53 ACCEPT_DELAY = settings.event_accept_retry_interval; | |
| 54 ACCEPT_QUEUE = settings.tcp_backlog; | |
| 55 CLEAR_DELAY = settings.event_clear_interval; | |
| 56 CONNECT_TIMEOUT = settings.connect_timeout; | |
| 57 DEBUG = settings.debug; | |
| 58 HANDSHAKE_TIMEOUT = settings.ssl_handshake_timeout; | |
| 59 MAX_CONNECTIONS = settings.max_connections; | |
| 60 MAX_HANDSHAKE_ATTEMPTS = settings.max_ssl_handshake_roundtrips; | |
| 61 MAX_READ_LENGTH = settings.max_receive_buffer_size; | |
| 62 MAX_SEND_LENGTH = settings.max_send_buffer_size; | |
| 63 READ_TIMEOUT = settings.read_timeout; | |
| 64 WRITE_TIMEOUT = settings.send_timeout; | |
| 65 }; | |
| 66 | |
| 67 for k,default in pairs(defaults) do | |
| 68 server.cfg[k] = event_settings[k] or default; | |
| 69 end | |
| 70 else | |
| 71 local select_settings = {}; | |
| 72 for k,default in pairs(defaults) do | |
| 73 select_settings[k] = settings[k] or default; | |
| 74 end | |
| 75 server.changesettings(select_settings); | |
| 76 end | |
| 77 end | 90 end |
| 78 load_config(); | 91 load_config(); |
| 79 prosody.events.add_handler("config-reloaded", load_config); | 92 prosody.events.add_handler("config-reloaded", load_config); |
| 80 end | 93 end |
| 81 | 94 |
