Software /
code /
prosody
Annotate
plugins/mod_server_contact_info.lua @ 13552:f0b2c026e542
net.server_epoll: Improve efficiency of sending much buffered data
Problem: The string slice operations when a lot of data gets buffered
ends up being expensive and memory-consuming. We have util.dbuffer for
precisely this kind of thing.
I want to keep the behavior of writebuffer being upgraded from nil to a
string to full buffer since the last step involves three table
allocations, where the previous buffer method only used one. Avoiding
those allocations for simple writes like white space keep alive feels
like it would keep memory churn down.
This work was started in 2020
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sat, 09 Nov 2024 00:37:15 +0100 |
parent | 13475:c14659710747 |
rev | line source |
---|---|
8257
c24837f57259
mod_server_contact_info: Import from prosody-modules 2c59f2f0c37d (fixes #778)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1 -- XEP-0157: Contact Addresses for XMPP Services for Prosody |
c24837f57259
mod_server_contact_info: Import from prosody-modules 2c59f2f0c37d (fixes #778)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2 -- |
9334
a86736e0163c
mod_server_contact_info: Update copyright header
Kim Alvefur <zash@zash.se>
parents:
9333
diff
changeset
|
3 -- Copyright (C) 2011-2018 Kim Alvefur |
8257
c24837f57259
mod_server_contact_info: Import from prosody-modules 2c59f2f0c37d (fixes #778)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
4 -- |
9334
a86736e0163c
mod_server_contact_info: Update copyright header
Kim Alvefur <zash@zash.se>
parents:
9333
diff
changeset
|
5 -- This project is MIT/X11 licensed. Please see the |
a86736e0163c
mod_server_contact_info: Update copyright header
Kim Alvefur <zash@zash.se>
parents:
9333
diff
changeset
|
6 -- COPYING file in the source package for more information. |
8257
c24837f57259
mod_server_contact_info: Import from prosody-modules 2c59f2f0c37d (fixes #778)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
7 -- |
c24837f57259
mod_server_contact_info: Import from prosody-modules 2c59f2f0c37d (fixes #778)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
8 |
12977
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
11584
diff
changeset
|
9 local array = require "prosody.util.array"; |
13475
c14659710747
mod_server_contact_info: Sort form fields to please scansion
Kim Alvefur <zash@zash.se>
parents:
13437
diff
changeset
|
10 local it = require "prosody.util.iterators"; |
12977
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
11584
diff
changeset
|
11 local jid = require "prosody.util.jid"; |
11584
8bea29d1f82d
mod_server_contact_info: Generate properly escaped URIs from 'admins'
Kim Alvefur <zash@zash.se>
parents:
11583
diff
changeset
|
12 local url = require "socket.url"; |
8257
c24837f57259
mod_server_contact_info: Import from prosody-modules 2c59f2f0c37d (fixes #778)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
13 |
13437
1ba323d6f35c
mod_server_contact_info: Update to publish fields via new mod_server_info
Matthew Wild <mwild1@gmail.com>
parents:
12981
diff
changeset
|
14 module:depends("server_info"); |
1ba323d6f35c
mod_server_contact_info: Update to publish fields via new mod_server_info
Matthew Wild <mwild1@gmail.com>
parents:
12981
diff
changeset
|
15 |
8257
c24837f57259
mod_server_contact_info: Import from prosody-modules 2c59f2f0c37d (fixes #778)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
16 -- Source: http://xmpp.org/registrar/formtypes.html#http:--jabber.org-network-serverinfo |
13437
1ba323d6f35c
mod_server_contact_info: Update to publish fields via new mod_server_info
Matthew Wild <mwild1@gmail.com>
parents:
12981
diff
changeset
|
17 local address_types = { |
1ba323d6f35c
mod_server_contact_info: Update to publish fields via new mod_server_info
Matthew Wild <mwild1@gmail.com>
parents:
12981
diff
changeset
|
18 abuse = "abuse-addresses"; |
1ba323d6f35c
mod_server_contact_info: Update to publish fields via new mod_server_info
Matthew Wild <mwild1@gmail.com>
parents:
12981
diff
changeset
|
19 admin = "admin-addresses"; |
1ba323d6f35c
mod_server_contact_info: Update to publish fields via new mod_server_info
Matthew Wild <mwild1@gmail.com>
parents:
12981
diff
changeset
|
20 feedback = "feedback-addresses"; |
1ba323d6f35c
mod_server_contact_info: Update to publish fields via new mod_server_info
Matthew Wild <mwild1@gmail.com>
parents:
12981
diff
changeset
|
21 sales = "sales-addresses"; |
1ba323d6f35c
mod_server_contact_info: Update to publish fields via new mod_server_info
Matthew Wild <mwild1@gmail.com>
parents:
12981
diff
changeset
|
22 security = "security-addresses"; |
1ba323d6f35c
mod_server_contact_info: Update to publish fields via new mod_server_info
Matthew Wild <mwild1@gmail.com>
parents:
12981
diff
changeset
|
23 status = "status-addresses"; |
1ba323d6f35c
mod_server_contact_info: Update to publish fields via new mod_server_info
Matthew Wild <mwild1@gmail.com>
parents:
12981
diff
changeset
|
24 support = "support-addresses"; |
1ba323d6f35c
mod_server_contact_info: Update to publish fields via new mod_server_info
Matthew Wild <mwild1@gmail.com>
parents:
12981
diff
changeset
|
25 }; |
8257
c24837f57259
mod_server_contact_info: Import from prosody-modules 2c59f2f0c37d (fixes #778)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
26 |
9428
8e7feec95e8d
mod_server_contact_info: Comment on fallback to using 'admins'
Kim Alvefur <zash@zash.se>
parents:
9334
diff
changeset
|
27 -- JIDs of configured service admins are used as fallback |
9333
fd704adc62e1
mod_server_contact_info: Simplify
Kim Alvefur <zash@zash.se>
parents:
8257
diff
changeset
|
28 local admins = module:get_option_inherited_set("admins", {}); |
8257
c24837f57259
mod_server_contact_info: Import from prosody-modules 2c59f2f0c37d (fixes #778)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
29 |
9333
fd704adc62e1
mod_server_contact_info: Simplify
Kim Alvefur <zash@zash.se>
parents:
8257
diff
changeset
|
30 local contact_config = module:get_option("contact_info", { |
11584
8bea29d1f82d
mod_server_contact_info: Generate properly escaped URIs from 'admins'
Kim Alvefur <zash@zash.se>
parents:
11583
diff
changeset
|
31 admin = array.collect(admins / jid.prep / function(admin) return url.build({scheme = "xmpp"; path = admin}); end); |
9333
fd704adc62e1
mod_server_contact_info: Simplify
Kim Alvefur <zash@zash.se>
parents:
8257
diff
changeset
|
32 }); |
8257
c24837f57259
mod_server_contact_info: Import from prosody-modules 2c59f2f0c37d (fixes #778)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
33 |
13437
1ba323d6f35c
mod_server_contact_info: Update to publish fields via new mod_server_info
Matthew Wild <mwild1@gmail.com>
parents:
12981
diff
changeset
|
34 local fields = {}; |
1ba323d6f35c
mod_server_contact_info: Update to publish fields via new mod_server_info
Matthew Wild <mwild1@gmail.com>
parents:
12981
diff
changeset
|
35 |
13475
c14659710747
mod_server_contact_info: Sort form fields to please scansion
Kim Alvefur <zash@zash.se>
parents:
13437
diff
changeset
|
36 for key, field_var in it.sorted_pairs(address_types) do |
13437
1ba323d6f35c
mod_server_contact_info: Update to publish fields via new mod_server_info
Matthew Wild <mwild1@gmail.com>
parents:
12981
diff
changeset
|
37 if contact_config[key] then |
1ba323d6f35c
mod_server_contact_info: Update to publish fields via new mod_server_info
Matthew Wild <mwild1@gmail.com>
parents:
12981
diff
changeset
|
38 table.insert(fields, { |
1ba323d6f35c
mod_server_contact_info: Update to publish fields via new mod_server_info
Matthew Wild <mwild1@gmail.com>
parents:
12981
diff
changeset
|
39 type = "list-multi"; |
1ba323d6f35c
mod_server_contact_info: Update to publish fields via new mod_server_info
Matthew Wild <mwild1@gmail.com>
parents:
12981
diff
changeset
|
40 name = key; |
1ba323d6f35c
mod_server_contact_info: Update to publish fields via new mod_server_info
Matthew Wild <mwild1@gmail.com>
parents:
12981
diff
changeset
|
41 var = field_var; |
1ba323d6f35c
mod_server_contact_info: Update to publish fields via new mod_server_info
Matthew Wild <mwild1@gmail.com>
parents:
12981
diff
changeset
|
42 value = contact_config[key]; |
1ba323d6f35c
mod_server_contact_info: Update to publish fields via new mod_server_info
Matthew Wild <mwild1@gmail.com>
parents:
12981
diff
changeset
|
43 }); |
1ba323d6f35c
mod_server_contact_info: Update to publish fields via new mod_server_info
Matthew Wild <mwild1@gmail.com>
parents:
12981
diff
changeset
|
44 end |
1ba323d6f35c
mod_server_contact_info: Update to publish fields via new mod_server_info
Matthew Wild <mwild1@gmail.com>
parents:
12981
diff
changeset
|
45 end |
1ba323d6f35c
mod_server_contact_info: Update to publish fields via new mod_server_info
Matthew Wild <mwild1@gmail.com>
parents:
12981
diff
changeset
|
46 |
1ba323d6f35c
mod_server_contact_info: Update to publish fields via new mod_server_info
Matthew Wild <mwild1@gmail.com>
parents:
12981
diff
changeset
|
47 module:add_item("server-info-fields", fields); |