Software /
code /
prosody
Annotate
util/xmppstream.lua @ 8555:4f0f5b49bb03
vairious: Add annotation when an empty environment is set [luacheck]
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Wed, 28 Feb 2018 20:06:26 +0100 |
parent | 8382:e5d00bf4a4d5 |
child | 9020:19e51d8f8947 |
rev | line source |
---|---|
1523
841d61be198f
Remove version number from copyright headers
Matthew Wild <mwild1@gmail.com>
parents:
1414
diff
changeset
|
1 -- Prosody IM |
2923
b7049746bd29
Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents:
2261
diff
changeset
|
2 -- Copyright (C) 2008-2010 Matthew Wild |
b7049746bd29
Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents:
2261
diff
changeset
|
3 -- Copyright (C) 2008-2010 Waqas Hussain |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5311
diff
changeset
|
4 -- |
758 | 5 -- This project is MIT/X11 licensed. Please see the |
6 -- COPYING file in the source package for more information. | |
519
cccd610a0ef9
Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents:
355
diff
changeset
|
7 -- |
cccd610a0ef9
Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents:
355
diff
changeset
|
8 |
2921
f0ddfd7739ea
util.xmppstream: new() now returns a parser object
Matthew Wild <mwild1@gmail.com>
parents:
2920
diff
changeset
|
9 local lxp = require "lxp"; |
f0ddfd7739ea
util.xmppstream: new() now returns a parser object
Matthew Wild <mwild1@gmail.com>
parents:
2920
diff
changeset
|
10 local st = require "util.stanza"; |
3987
8fbf57722368
util.xmppstream: Optimized stanza building by bypassing the stanza API.
Waqas Hussain <waqas20@gmail.com>
parents:
3927
diff
changeset
|
11 local stanza_mt = st.stanza_mt; |
1
b8787e859fd2
Switched to new connection framework, courtesy of the luadch project
matthew
parents:
diff
changeset
|
12 |
4425
6f5ed0f4a3e6
util.xmppstream: A little cleanup.
Waqas Hussain <waqas20@gmail.com>
parents:
4306
diff
changeset
|
13 local error = error; |
1
b8787e859fd2
Switched to new connection framework, courtesy of the luadch project
matthew
parents:
diff
changeset
|
14 local tostring = tostring; |
b8787e859fd2
Switched to new connection framework, courtesy of the luadch project
matthew
parents:
diff
changeset
|
15 local t_insert = table.insert; |
b8787e859fd2
Switched to new connection framework, courtesy of the luadch project
matthew
parents:
diff
changeset
|
16 local t_concat = table.concat; |
3987
8fbf57722368
util.xmppstream: Optimized stanza building by bypassing the stanza API.
Waqas Hussain <waqas20@gmail.com>
parents:
3927
diff
changeset
|
17 local t_remove = table.remove; |
8fbf57722368
util.xmppstream: Optimized stanza building by bypassing the stanza API.
Waqas Hussain <waqas20@gmail.com>
parents:
3927
diff
changeset
|
18 local setmetatable = setmetatable; |
1
b8787e859fd2
Switched to new connection framework, courtesy of the luadch project
matthew
parents:
diff
changeset
|
19 |
4275
5305a665bdd4
util.xmppstream: Reject XML comments, processing instructions and (if supported by LuaExpat) DTDs. If not supported, log a warning.
Matthew Wild <mwild1@gmail.com>
parents:
3927
diff
changeset
|
20 -- COMPAT: w/LuaExpat 1.1.0 |
5305a665bdd4
util.xmppstream: Reject XML comments, processing instructions and (if supported by LuaExpat) DTDs. If not supported, log a warning.
Matthew Wild <mwild1@gmail.com>
parents:
3927
diff
changeset
|
21 local lxp_supports_doctype = pcall(lxp.new, { StartDoctypeDecl = false }); |
6042
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
22 local lxp_supports_xmldecl = pcall(lxp.new, { XmlDecl = false }); |
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
23 local lxp_supports_bytecount = not not lxp.new({}).getcurrentbytecount; |
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
24 |
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
25 local default_stanza_size_limit = 1024*1024*10; -- 10MB |
4275
5305a665bdd4
util.xmppstream: Reject XML comments, processing instructions and (if supported by LuaExpat) DTDs. If not supported, log a warning.
Matthew Wild <mwild1@gmail.com>
parents:
3927
diff
changeset
|
26 |
6777
5de6b93d0190
util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents:
6367
diff
changeset
|
27 local _ENV = nil; |
8555
4f0f5b49bb03
vairious: Add annotation when an empty environment is set [luacheck]
Kim Alvefur <zash@zash.se>
parents:
8382
diff
changeset
|
28 -- luacheck: std none |
1
b8787e859fd2
Switched to new connection framework, courtesy of the luadch project
matthew
parents:
diff
changeset
|
29 |
2921
f0ddfd7739ea
util.xmppstream: new() now returns a parser object
Matthew Wild <mwild1@gmail.com>
parents:
2920
diff
changeset
|
30 local new_parser = lxp.new; |
f0ddfd7739ea
util.xmppstream: new() now returns a parser object
Matthew Wild <mwild1@gmail.com>
parents:
2920
diff
changeset
|
31 |
4484
0da4e0f0f0ef
util.xmppstream: Optimize attribute processing.
Waqas Hussain <waqas20@gmail.com>
parents:
4483
diff
changeset
|
32 local xml_namespace = { |
0da4e0f0f0ef
util.xmppstream: Optimize attribute processing.
Waqas Hussain <waqas20@gmail.com>
parents:
4483
diff
changeset
|
33 ["http://www.w3.org/XML/1998/namespace\1lang"] = "xml:lang"; |
0da4e0f0f0ef
util.xmppstream: Optimize attribute processing.
Waqas Hussain <waqas20@gmail.com>
parents:
4483
diff
changeset
|
34 ["http://www.w3.org/XML/1998/namespace\1space"] = "xml:space"; |
0da4e0f0f0ef
util.xmppstream: Optimize attribute processing.
Waqas Hussain <waqas20@gmail.com>
parents:
4483
diff
changeset
|
35 ["http://www.w3.org/XML/1998/namespace\1base"] = "xml:base"; |
0da4e0f0f0ef
util.xmppstream: Optimize attribute processing.
Waqas Hussain <waqas20@gmail.com>
parents:
4483
diff
changeset
|
36 ["http://www.w3.org/XML/1998/namespace\1id"] = "xml:id"; |
2492
b5e2d1919ec3
xmlhandlers: Fixed indentation and added some semicolons.
Waqas Hussain <waqas20@gmail.com>
parents:
2468
diff
changeset
|
37 }; |
2464
0b5f0ae7a6b1
xmlhandlers: More refactoring, split up stream_ns and stream_tag, add stream_error_tag so that callers don't need to be so worried about the separator we use
Matthew Wild <mwild1@gmail.com>
parents:
2463
diff
changeset
|
38 |
0b5f0ae7a6b1
xmlhandlers: More refactoring, split up stream_ns and stream_tag, add stream_error_tag so that callers don't need to be so worried about the separator we use
Matthew Wild <mwild1@gmail.com>
parents:
2463
diff
changeset
|
39 local xmlns_streams = "http://etherx.jabber.org/streams"; |
0b5f0ae7a6b1
xmlhandlers: More refactoring, split up stream_ns and stream_tag, add stream_error_tag so that callers don't need to be so worried about the separator we use
Matthew Wild <mwild1@gmail.com>
parents:
2463
diff
changeset
|
40 |
2463
d9ff0190eb4a
xmlhandlers: Define ns_separator and ns_pattern to save repeating it in literal form throughout the file
Matthew Wild <mwild1@gmail.com>
parents:
2261
diff
changeset
|
41 local ns_separator = "\1"; |
d9ff0190eb4a
xmlhandlers: Define ns_separator and ns_pattern to save repeating it in literal form throughout the file
Matthew Wild <mwild1@gmail.com>
parents:
2261
diff
changeset
|
42 local ns_pattern = "^([^"..ns_separator.."]*)"..ns_separator.."?(.*)$"; |
148 | 43 |
6042
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
44 local function dummy_cb() end |
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
45 |
6777
5de6b93d0190
util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents:
6367
diff
changeset
|
46 local function new_sax_handlers(session, stream_callbacks, cb_handleprogress) |
2492
b5e2d1919ec3
xmlhandlers: Fixed indentation and added some semicolons.
Waqas Hussain <waqas20@gmail.com>
parents:
2468
diff
changeset
|
47 local xml_handlers = {}; |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5311
diff
changeset
|
48 |
2492
b5e2d1919ec3
xmlhandlers: Fixed indentation and added some semicolons.
Waqas Hussain <waqas20@gmail.com>
parents:
2468
diff
changeset
|
49 local cb_streamopened = stream_callbacks.streamopened; |
b5e2d1919ec3
xmlhandlers: Fixed indentation and added some semicolons.
Waqas Hussain <waqas20@gmail.com>
parents:
2468
diff
changeset
|
50 local cb_streamclosed = stream_callbacks.streamclosed; |
8382
e5d00bf4a4d5
util: Various minor changes to please [luacheck]
Kim Alvefur <zash@zash.se>
parents:
7240
diff
changeset
|
51 local cb_error = stream_callbacks.error or |
e5d00bf4a4d5
util: Various minor changes to please [luacheck]
Kim Alvefur <zash@zash.se>
parents:
7240
diff
changeset
|
52 function(_, e, stanza) |
e5d00bf4a4d5
util: Various minor changes to please [luacheck]
Kim Alvefur <zash@zash.se>
parents:
7240
diff
changeset
|
53 error("XML stream error: "..tostring(e)..(stanza and ": "..tostring(stanza) or ""),2); |
e5d00bf4a4d5
util: Various minor changes to please [luacheck]
Kim Alvefur <zash@zash.se>
parents:
7240
diff
changeset
|
54 end; |
2492
b5e2d1919ec3
xmlhandlers: Fixed indentation and added some semicolons.
Waqas Hussain <waqas20@gmail.com>
parents:
2468
diff
changeset
|
55 local cb_handlestanza = stream_callbacks.handlestanza; |
6042
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
56 cb_handleprogress = cb_handleprogress or dummy_cb; |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5311
diff
changeset
|
57 |
2492
b5e2d1919ec3
xmlhandlers: Fixed indentation and added some semicolons.
Waqas Hussain <waqas20@gmail.com>
parents:
2468
diff
changeset
|
58 local stream_ns = stream_callbacks.stream_ns or xmlns_streams; |
3927
1b57e83266f0
util.xmppstream: Allow stream_ns = "" for parsing streams with no xmlns
Matthew Wild <mwild1@gmail.com>
parents:
3708
diff
changeset
|
59 local stream_tag = stream_callbacks.stream_tag or "stream"; |
1b57e83266f0
util.xmppstream: Allow stream_ns = "" for parsing streams with no xmlns
Matthew Wild <mwild1@gmail.com>
parents:
3708
diff
changeset
|
60 if stream_ns ~= "" then |
1b57e83266f0
util.xmppstream: Allow stream_ns = "" for parsing streams with no xmlns
Matthew Wild <mwild1@gmail.com>
parents:
3708
diff
changeset
|
61 stream_tag = stream_ns..ns_separator..stream_tag; |
1b57e83266f0
util.xmppstream: Allow stream_ns = "" for parsing streams with no xmlns
Matthew Wild <mwild1@gmail.com>
parents:
3708
diff
changeset
|
62 end |
2492
b5e2d1919ec3
xmlhandlers: Fixed indentation and added some semicolons.
Waqas Hussain <waqas20@gmail.com>
parents:
2468
diff
changeset
|
63 local stream_error_tag = stream_ns..ns_separator..(stream_callbacks.error_tag or "error"); |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5311
diff
changeset
|
64 |
2492
b5e2d1919ec3
xmlhandlers: Fixed indentation and added some semicolons.
Waqas Hussain <waqas20@gmail.com>
parents:
2468
diff
changeset
|
65 local stream_default_ns = stream_callbacks.default_ns; |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5311
diff
changeset
|
66 |
3987
8fbf57722368
util.xmppstream: Optimized stanza building by bypassing the stanza API.
Waqas Hussain <waqas20@gmail.com>
parents:
3927
diff
changeset
|
67 local stack = {}; |
3032
38459cffaf67
util.xmppstream: Stream objects now just have feed/reset methods
Matthew Wild <mwild1@gmail.com>
parents:
2926
diff
changeset
|
68 local chardata, stanza = {}; |
6042
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
69 local stanza_size = 0; |
3633
4069c37c54bc
util.xmppstream: Preserve the stream content namespace on descendents of elements which are in another namespace.
Waqas Hussain <waqas20@gmail.com>
parents:
3540
diff
changeset
|
70 local non_streamns_depth = 0; |
2492
b5e2d1919ec3
xmlhandlers: Fixed indentation and added some semicolons.
Waqas Hussain <waqas20@gmail.com>
parents:
2468
diff
changeset
|
71 function xml_handlers:StartElement(tagname, attr) |
b5e2d1919ec3
xmlhandlers: Fixed indentation and added some semicolons.
Waqas Hussain <waqas20@gmail.com>
parents:
2468
diff
changeset
|
72 if stanza and #chardata > 0 then |
b5e2d1919ec3
xmlhandlers: Fixed indentation and added some semicolons.
Waqas Hussain <waqas20@gmail.com>
parents:
2468
diff
changeset
|
73 -- We have some character data in the buffer |
3987
8fbf57722368
util.xmppstream: Optimized stanza building by bypassing the stanza API.
Waqas Hussain <waqas20@gmail.com>
parents:
3927
diff
changeset
|
74 t_insert(stanza, t_concat(chardata)); |
2492
b5e2d1919ec3
xmlhandlers: Fixed indentation and added some semicolons.
Waqas Hussain <waqas20@gmail.com>
parents:
2468
diff
changeset
|
75 chardata = {}; |
b5e2d1919ec3
xmlhandlers: Fixed indentation and added some semicolons.
Waqas Hussain <waqas20@gmail.com>
parents:
2468
diff
changeset
|
76 end |
b5e2d1919ec3
xmlhandlers: Fixed indentation and added some semicolons.
Waqas Hussain <waqas20@gmail.com>
parents:
2468
diff
changeset
|
77 local curr_ns,name = tagname:match(ns_pattern); |
b5e2d1919ec3
xmlhandlers: Fixed indentation and added some semicolons.
Waqas Hussain <waqas20@gmail.com>
parents:
2468
diff
changeset
|
78 if name == "" then |
b5e2d1919ec3
xmlhandlers: Fixed indentation and added some semicolons.
Waqas Hussain <waqas20@gmail.com>
parents:
2468
diff
changeset
|
79 curr_ns, name = "", curr_ns; |
b5e2d1919ec3
xmlhandlers: Fixed indentation and added some semicolons.
Waqas Hussain <waqas20@gmail.com>
parents:
2468
diff
changeset
|
80 end |
b5e2d1919ec3
xmlhandlers: Fixed indentation and added some semicolons.
Waqas Hussain <waqas20@gmail.com>
parents:
2468
diff
changeset
|
81 |
3633
4069c37c54bc
util.xmppstream: Preserve the stream content namespace on descendents of elements which are in another namespace.
Waqas Hussain <waqas20@gmail.com>
parents:
3540
diff
changeset
|
82 if curr_ns ~= stream_default_ns or non_streamns_depth > 0 then |
2492
b5e2d1919ec3
xmlhandlers: Fixed indentation and added some semicolons.
Waqas Hussain <waqas20@gmail.com>
parents:
2468
diff
changeset
|
83 attr.xmlns = curr_ns; |
3633
4069c37c54bc
util.xmppstream: Preserve the stream content namespace on descendents of elements which are in another namespace.
Waqas Hussain <waqas20@gmail.com>
parents:
3540
diff
changeset
|
84 non_streamns_depth = non_streamns_depth + 1; |
2492
b5e2d1919ec3
xmlhandlers: Fixed indentation and added some semicolons.
Waqas Hussain <waqas20@gmail.com>
parents:
2468
diff
changeset
|
85 end |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5311
diff
changeset
|
86 |
2492
b5e2d1919ec3
xmlhandlers: Fixed indentation and added some semicolons.
Waqas Hussain <waqas20@gmail.com>
parents:
2468
diff
changeset
|
87 for i=1,#attr do |
b5e2d1919ec3
xmlhandlers: Fixed indentation and added some semicolons.
Waqas Hussain <waqas20@gmail.com>
parents:
2468
diff
changeset
|
88 local k = attr[i]; |
b5e2d1919ec3
xmlhandlers: Fixed indentation and added some semicolons.
Waqas Hussain <waqas20@gmail.com>
parents:
2468
diff
changeset
|
89 attr[i] = nil; |
4484
0da4e0f0f0ef
util.xmppstream: Optimize attribute processing.
Waqas Hussain <waqas20@gmail.com>
parents:
4483
diff
changeset
|
90 local xmlk = xml_namespace[k]; |
0da4e0f0f0ef
util.xmppstream: Optimize attribute processing.
Waqas Hussain <waqas20@gmail.com>
parents:
4483
diff
changeset
|
91 if xmlk then |
0da4e0f0f0ef
util.xmppstream: Optimize attribute processing.
Waqas Hussain <waqas20@gmail.com>
parents:
4483
diff
changeset
|
92 attr[xmlk] = attr[k]; |
0da4e0f0f0ef
util.xmppstream: Optimize attribute processing.
Waqas Hussain <waqas20@gmail.com>
parents:
4483
diff
changeset
|
93 attr[k] = nil; |
2492
b5e2d1919ec3
xmlhandlers: Fixed indentation and added some semicolons.
Waqas Hussain <waqas20@gmail.com>
parents:
2468
diff
changeset
|
94 end |
b5e2d1919ec3
xmlhandlers: Fixed indentation and added some semicolons.
Waqas Hussain <waqas20@gmail.com>
parents:
2468
diff
changeset
|
95 end |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5311
diff
changeset
|
96 |
2492
b5e2d1919ec3
xmlhandlers: Fixed indentation and added some semicolons.
Waqas Hussain <waqas20@gmail.com>
parents:
2468
diff
changeset
|
97 if not stanza then --if we are not currently inside a stanza |
6042
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
98 if lxp_supports_bytecount then |
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
99 stanza_size = self:getcurrentbytecount(); |
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
100 end |
2492
b5e2d1919ec3
xmlhandlers: Fixed indentation and added some semicolons.
Waqas Hussain <waqas20@gmail.com>
parents:
2468
diff
changeset
|
101 if session.notopen then |
b5e2d1919ec3
xmlhandlers: Fixed indentation and added some semicolons.
Waqas Hussain <waqas20@gmail.com>
parents:
2468
diff
changeset
|
102 if tagname == stream_tag then |
3633
4069c37c54bc
util.xmppstream: Preserve the stream content namespace on descendents of elements which are in another namespace.
Waqas Hussain <waqas20@gmail.com>
parents:
3540
diff
changeset
|
103 non_streamns_depth = 0; |
2492
b5e2d1919ec3
xmlhandlers: Fixed indentation and added some semicolons.
Waqas Hussain <waqas20@gmail.com>
parents:
2468
diff
changeset
|
104 if cb_streamopened then |
6042
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
105 if lxp_supports_bytecount then |
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
106 cb_handleprogress(stanza_size); |
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
107 stanza_size = 0; |
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
108 end |
2492
b5e2d1919ec3
xmlhandlers: Fixed indentation and added some semicolons.
Waqas Hussain <waqas20@gmail.com>
parents:
2468
diff
changeset
|
109 cb_streamopened(session, attr); |
b5e2d1919ec3
xmlhandlers: Fixed indentation and added some semicolons.
Waqas Hussain <waqas20@gmail.com>
parents:
2468
diff
changeset
|
110 end |
b5e2d1919ec3
xmlhandlers: Fixed indentation and added some semicolons.
Waqas Hussain <waqas20@gmail.com>
parents:
2468
diff
changeset
|
111 else |
b5e2d1919ec3
xmlhandlers: Fixed indentation and added some semicolons.
Waqas Hussain <waqas20@gmail.com>
parents:
2468
diff
changeset
|
112 -- Garbage before stream? |
6363
ec446efc15e1
util.xmppstream: When error is 'no-stream', pass the received tagname to the error handler
Matthew Wild <mwild1@gmail.com>
parents:
6053
diff
changeset
|
113 cb_error(session, "no-stream", tagname); |
2492
b5e2d1919ec3
xmlhandlers: Fixed indentation and added some semicolons.
Waqas Hussain <waqas20@gmail.com>
parents:
2468
diff
changeset
|
114 end |
b5e2d1919ec3
xmlhandlers: Fixed indentation and added some semicolons.
Waqas Hussain <waqas20@gmail.com>
parents:
2468
diff
changeset
|
115 return; |
1
b8787e859fd2
Switched to new connection framework, courtesy of the luadch project
matthew
parents:
diff
changeset
|
116 end |
2492
b5e2d1919ec3
xmlhandlers: Fixed indentation and added some semicolons.
Waqas Hussain <waqas20@gmail.com>
parents:
2468
diff
changeset
|
117 if curr_ns == "jabber:client" and name ~= "iq" and name ~= "presence" and name ~= "message" then |
b5e2d1919ec3
xmlhandlers: Fixed indentation and added some semicolons.
Waqas Hussain <waqas20@gmail.com>
parents:
2468
diff
changeset
|
118 cb_error(session, "invalid-top-level-element"); |
1051
0327c569eb1a
xmlhandlers: Fix tag pattern again for the default namespace
Matthew Wild <mwild1@gmail.com>
parents:
1003
diff
changeset
|
119 end |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5311
diff
changeset
|
120 |
3987
8fbf57722368
util.xmppstream: Optimized stanza building by bypassing the stanza API.
Waqas Hussain <waqas20@gmail.com>
parents:
3927
diff
changeset
|
121 stanza = setmetatable({ name = name, attr = attr, tags = {} }, stanza_mt); |
2492
b5e2d1919ec3
xmlhandlers: Fixed indentation and added some semicolons.
Waqas Hussain <waqas20@gmail.com>
parents:
2468
diff
changeset
|
122 else -- we are inside a stanza, so add a tag |
6042
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
123 if lxp_supports_bytecount then |
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
124 stanza_size = stanza_size + self:getcurrentbytecount(); |
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
125 end |
3987
8fbf57722368
util.xmppstream: Optimized stanza building by bypassing the stanza API.
Waqas Hussain <waqas20@gmail.com>
parents:
3927
diff
changeset
|
126 t_insert(stack, stanza); |
8fbf57722368
util.xmppstream: Optimized stanza building by bypassing the stanza API.
Waqas Hussain <waqas20@gmail.com>
parents:
3927
diff
changeset
|
127 local oldstanza = stanza; |
8fbf57722368
util.xmppstream: Optimized stanza building by bypassing the stanza API.
Waqas Hussain <waqas20@gmail.com>
parents:
3927
diff
changeset
|
128 stanza = setmetatable({ name = name, attr = attr, tags = {} }, stanza_mt); |
8fbf57722368
util.xmppstream: Optimized stanza building by bypassing the stanza API.
Waqas Hussain <waqas20@gmail.com>
parents:
3927
diff
changeset
|
129 t_insert(oldstanza, stanza); |
8fbf57722368
util.xmppstream: Optimized stanza building by bypassing the stanza API.
Waqas Hussain <waqas20@gmail.com>
parents:
3927
diff
changeset
|
130 t_insert(oldstanza.tags, stanza); |
2492
b5e2d1919ec3
xmlhandlers: Fixed indentation and added some semicolons.
Waqas Hussain <waqas20@gmail.com>
parents:
2468
diff
changeset
|
131 end |
b5e2d1919ec3
xmlhandlers: Fixed indentation and added some semicolons.
Waqas Hussain <waqas20@gmail.com>
parents:
2468
diff
changeset
|
132 end |
6042
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
133 if lxp_supports_xmldecl then |
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
134 function xml_handlers:XmlDecl(version, encoding, standalone) |
8382
e5d00bf4a4d5
util: Various minor changes to please [luacheck]
Kim Alvefur <zash@zash.se>
parents:
7240
diff
changeset
|
135 session.xml_version = version; |
e5d00bf4a4d5
util: Various minor changes to please [luacheck]
Kim Alvefur <zash@zash.se>
parents:
7240
diff
changeset
|
136 session.xml_encoding = encoding; |
e5d00bf4a4d5
util: Various minor changes to please [luacheck]
Kim Alvefur <zash@zash.se>
parents:
7240
diff
changeset
|
137 session.xml_standalone = standalone; |
6042
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
138 if lxp_supports_bytecount then |
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
139 cb_handleprogress(self:getcurrentbytecount()); |
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
140 end |
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
141 end |
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
142 end |
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
143 function xml_handlers:StartCdataSection() |
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
144 if lxp_supports_bytecount then |
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
145 if stanza then |
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
146 stanza_size = stanza_size + self:getcurrentbytecount(); |
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
147 else |
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
148 cb_handleprogress(self:getcurrentbytecount()); |
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
149 end |
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
150 end |
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
151 end |
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
152 function xml_handlers:EndCdataSection() |
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
153 if lxp_supports_bytecount then |
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
154 if stanza then |
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
155 stanza_size = stanza_size + self:getcurrentbytecount(); |
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
156 else |
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
157 cb_handleprogress(self:getcurrentbytecount()); |
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
158 end |
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
159 end |
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
160 end |
2492
b5e2d1919ec3
xmlhandlers: Fixed indentation and added some semicolons.
Waqas Hussain <waqas20@gmail.com>
parents:
2468
diff
changeset
|
161 function xml_handlers:CharacterData(data) |
b5e2d1919ec3
xmlhandlers: Fixed indentation and added some semicolons.
Waqas Hussain <waqas20@gmail.com>
parents:
2468
diff
changeset
|
162 if stanza then |
6042
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
163 if lxp_supports_bytecount then |
6052
ce3244c084f9
util.xmppstream: Disable LuaExpat's buffering (if possible)
Matthew Wild <mwild1@gmail.com>
parents:
6042
diff
changeset
|
164 stanza_size = stanza_size + self:getcurrentbytecount(); |
6042
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
165 end |
2492
b5e2d1919ec3
xmlhandlers: Fixed indentation and added some semicolons.
Waqas Hussain <waqas20@gmail.com>
parents:
2468
diff
changeset
|
166 t_insert(chardata, data); |
6042
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
167 elseif lxp_supports_bytecount then |
6052
ce3244c084f9
util.xmppstream: Disable LuaExpat's buffering (if possible)
Matthew Wild <mwild1@gmail.com>
parents:
6042
diff
changeset
|
168 cb_handleprogress(self:getcurrentbytecount()); |
2492
b5e2d1919ec3
xmlhandlers: Fixed indentation and added some semicolons.
Waqas Hussain <waqas20@gmail.com>
parents:
2468
diff
changeset
|
169 end |
b5e2d1919ec3
xmlhandlers: Fixed indentation and added some semicolons.
Waqas Hussain <waqas20@gmail.com>
parents:
2468
diff
changeset
|
170 end |
b5e2d1919ec3
xmlhandlers: Fixed indentation and added some semicolons.
Waqas Hussain <waqas20@gmail.com>
parents:
2468
diff
changeset
|
171 function xml_handlers:EndElement(tagname) |
6042
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
172 if lxp_supports_bytecount then |
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
173 stanza_size = stanza_size + self:getcurrentbytecount() |
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
174 end |
3633
4069c37c54bc
util.xmppstream: Preserve the stream content namespace on descendents of elements which are in another namespace.
Waqas Hussain <waqas20@gmail.com>
parents:
3540
diff
changeset
|
175 if non_streamns_depth > 0 then |
4069c37c54bc
util.xmppstream: Preserve the stream content namespace on descendents of elements which are in another namespace.
Waqas Hussain <waqas20@gmail.com>
parents:
3540
diff
changeset
|
176 non_streamns_depth = non_streamns_depth - 1; |
4069c37c54bc
util.xmppstream: Preserve the stream content namespace on descendents of elements which are in another namespace.
Waqas Hussain <waqas20@gmail.com>
parents:
3540
diff
changeset
|
177 end |
2493
ec09d16a51e1
xmlhandlers: Rearranged a little code.
Waqas Hussain <waqas20@gmail.com>
parents:
2492
diff
changeset
|
178 if stanza then |
ec09d16a51e1
xmlhandlers: Rearranged a little code.
Waqas Hussain <waqas20@gmail.com>
parents:
2492
diff
changeset
|
179 if #chardata > 0 then |
ec09d16a51e1
xmlhandlers: Rearranged a little code.
Waqas Hussain <waqas20@gmail.com>
parents:
2492
diff
changeset
|
180 -- We have some character data in the buffer |
3987
8fbf57722368
util.xmppstream: Optimized stanza building by bypassing the stanza API.
Waqas Hussain <waqas20@gmail.com>
parents:
3927
diff
changeset
|
181 t_insert(stanza, t_concat(chardata)); |
2493
ec09d16a51e1
xmlhandlers: Rearranged a little code.
Waqas Hussain <waqas20@gmail.com>
parents:
2492
diff
changeset
|
182 chardata = {}; |
ec09d16a51e1
xmlhandlers: Rearranged a little code.
Waqas Hussain <waqas20@gmail.com>
parents:
2492
diff
changeset
|
183 end |
ec09d16a51e1
xmlhandlers: Rearranged a little code.
Waqas Hussain <waqas20@gmail.com>
parents:
2492
diff
changeset
|
184 -- Complete stanza |
3987
8fbf57722368
util.xmppstream: Optimized stanza building by bypassing the stanza API.
Waqas Hussain <waqas20@gmail.com>
parents:
3927
diff
changeset
|
185 if #stack == 0 then |
6042
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
186 if lxp_supports_bytecount then |
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
187 cb_handleprogress(stanza_size); |
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
188 end |
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
189 stanza_size = 0; |
2493
ec09d16a51e1
xmlhandlers: Rearranged a little code.
Waqas Hussain <waqas20@gmail.com>
parents:
2492
diff
changeset
|
190 if tagname ~= stream_error_tag then |
ec09d16a51e1
xmlhandlers: Rearranged a little code.
Waqas Hussain <waqas20@gmail.com>
parents:
2492
diff
changeset
|
191 cb_handlestanza(session, stanza); |
ec09d16a51e1
xmlhandlers: Rearranged a little code.
Waqas Hussain <waqas20@gmail.com>
parents:
2492
diff
changeset
|
192 else |
ec09d16a51e1
xmlhandlers: Rearranged a little code.
Waqas Hussain <waqas20@gmail.com>
parents:
2492
diff
changeset
|
193 cb_error(session, "stream-error", stanza); |
ec09d16a51e1
xmlhandlers: Rearranged a little code.
Waqas Hussain <waqas20@gmail.com>
parents:
2492
diff
changeset
|
194 end |
ec09d16a51e1
xmlhandlers: Rearranged a little code.
Waqas Hussain <waqas20@gmail.com>
parents:
2492
diff
changeset
|
195 stanza = nil; |
ec09d16a51e1
xmlhandlers: Rearranged a little code.
Waqas Hussain <waqas20@gmail.com>
parents:
2492
diff
changeset
|
196 else |
3987
8fbf57722368
util.xmppstream: Optimized stanza building by bypassing the stanza API.
Waqas Hussain <waqas20@gmail.com>
parents:
3927
diff
changeset
|
197 stanza = t_remove(stack); |
2493
ec09d16a51e1
xmlhandlers: Rearranged a little code.
Waqas Hussain <waqas20@gmail.com>
parents:
2492
diff
changeset
|
198 end |
ec09d16a51e1
xmlhandlers: Rearranged a little code.
Waqas Hussain <waqas20@gmail.com>
parents:
2492
diff
changeset
|
199 else |
4483
1dbd06eedaa4
util.xmppstream: Have faith in the XML parser matching start and end tags.
Waqas Hussain <waqas20@gmail.com>
parents:
4482
diff
changeset
|
200 if cb_streamclosed then |
1dbd06eedaa4
util.xmppstream: Have faith in the XML parser matching start and end tags.
Waqas Hussain <waqas20@gmail.com>
parents:
4482
diff
changeset
|
201 cb_streamclosed(session); |
1
b8787e859fd2
Switched to new connection framework, courtesy of the luadch project
matthew
parents:
diff
changeset
|
202 end |
b8787e859fd2
Switched to new connection framework, courtesy of the luadch project
matthew
parents:
diff
changeset
|
203 end |
2492
b5e2d1919ec3
xmlhandlers: Fixed indentation and added some semicolons.
Waqas Hussain <waqas20@gmail.com>
parents:
2468
diff
changeset
|
204 end |
4277 | 205 |
4288 | 206 local function restricted_handler(parser) |
4275
5305a665bdd4
util.xmppstream: Reject XML comments, processing instructions and (if supported by LuaExpat) DTDs. If not supported, log a warning.
Matthew Wild <mwild1@gmail.com>
parents:
3927
diff
changeset
|
207 cb_error(session, "parse-error", "restricted-xml", "Restricted XML, see RFC 6120 section 11.1."); |
4305
e3ffa91517cc
util.xmppstream: Check to make sure parser.stop is present before calling it.
Waqas Hussain <waqas20@gmail.com>
parents:
4289
diff
changeset
|
208 if not parser.stop or not parser:stop() then |
4288 | 209 error("Failed to abort parsing"); |
4276
a37522bf6b1b
xmlhandlers: Reject XML comments, processing instructions and (if supported by LuaExpat) DTDs. If not supported, log a warning. [Backport of 7cc426988bcc in trunk]
Matthew Wild <mwild1@gmail.com>
parents:
2923
diff
changeset
|
210 end |
4275
5305a665bdd4
util.xmppstream: Reject XML comments, processing instructions and (if supported by LuaExpat) DTDs. If not supported, log a warning.
Matthew Wild <mwild1@gmail.com>
parents:
3927
diff
changeset
|
211 end |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5311
diff
changeset
|
212 |
4275
5305a665bdd4
util.xmppstream: Reject XML comments, processing instructions and (if supported by LuaExpat) DTDs. If not supported, log a warning.
Matthew Wild <mwild1@gmail.com>
parents:
3927
diff
changeset
|
213 if lxp_supports_doctype then |
5305a665bdd4
util.xmppstream: Reject XML comments, processing instructions and (if supported by LuaExpat) DTDs. If not supported, log a warning.
Matthew Wild <mwild1@gmail.com>
parents:
3927
diff
changeset
|
214 xml_handlers.StartDoctypeDecl = restricted_handler; |
5305a665bdd4
util.xmppstream: Reject XML comments, processing instructions and (if supported by LuaExpat) DTDs. If not supported, log a warning.
Matthew Wild <mwild1@gmail.com>
parents:
3927
diff
changeset
|
215 end |
5305a665bdd4
util.xmppstream: Reject XML comments, processing instructions and (if supported by LuaExpat) DTDs. If not supported, log a warning.
Matthew Wild <mwild1@gmail.com>
parents:
3927
diff
changeset
|
216 xml_handlers.Comment = restricted_handler; |
5305a665bdd4
util.xmppstream: Reject XML comments, processing instructions and (if supported by LuaExpat) DTDs. If not supported, log a warning.
Matthew Wild <mwild1@gmail.com>
parents:
3927
diff
changeset
|
217 xml_handlers.ProcessingInstruction = restricted_handler; |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5311
diff
changeset
|
218 |
3032
38459cffaf67
util.xmppstream: Stream objects now just have feed/reset methods
Matthew Wild <mwild1@gmail.com>
parents:
2926
diff
changeset
|
219 local function reset() |
6042
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
220 stanza, chardata, stanza_size = nil, {}, 0; |
3987
8fbf57722368
util.xmppstream: Optimized stanza building by bypassing the stanza API.
Waqas Hussain <waqas20@gmail.com>
parents:
3927
diff
changeset
|
221 stack = {}; |
3032
38459cffaf67
util.xmppstream: Stream objects now just have feed/reset methods
Matthew Wild <mwild1@gmail.com>
parents:
2926
diff
changeset
|
222 end |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5311
diff
changeset
|
223 |
8382
e5d00bf4a4d5
util: Various minor changes to please [luacheck]
Kim Alvefur <zash@zash.se>
parents:
7240
diff
changeset
|
224 local function set_session(stream, new_session) -- luacheck: ignore 212/stream |
3424
9e0df614e5d0
util.xmppstream: Add set_session() method to change the session that a stream is associated with
Matthew Wild <mwild1@gmail.com>
parents:
3032
diff
changeset
|
225 session = new_session; |
9e0df614e5d0
util.xmppstream: Add set_session() method to change the session that a stream is associated with
Matthew Wild <mwild1@gmail.com>
parents:
3032
diff
changeset
|
226 end |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5311
diff
changeset
|
227 |
3424
9e0df614e5d0
util.xmppstream: Add set_session() method to change the session that a stream is associated with
Matthew Wild <mwild1@gmail.com>
parents:
3032
diff
changeset
|
228 return xml_handlers, { reset = reset, set_session = set_session }; |
1
b8787e859fd2
Switched to new connection framework, courtesy of the luadch project
matthew
parents:
diff
changeset
|
229 end |
b8787e859fd2
Switched to new connection framework, courtesy of the luadch project
matthew
parents:
diff
changeset
|
230 |
6777
5de6b93d0190
util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents:
6367
diff
changeset
|
231 local function new(session, stream_callbacks, stanza_size_limit) |
6042
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
232 -- Used to track parser progress (e.g. to enforce size limits) |
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
233 local n_outstanding_bytes = 0; |
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
234 local handle_progress; |
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
235 if lxp_supports_bytecount then |
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
236 function handle_progress(n_parsed_bytes) |
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
237 n_outstanding_bytes = n_outstanding_bytes - n_parsed_bytes; |
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
238 end |
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
239 stanza_size_limit = stanza_size_limit or default_stanza_size_limit; |
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
240 elseif stanza_size_limit then |
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
241 error("Stanza size limits are not supported on this version of LuaExpat") |
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
242 end |
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
243 |
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
244 local handlers, meta = new_sax_handlers(session, stream_callbacks, handle_progress); |
6052
ce3244c084f9
util.xmppstream: Disable LuaExpat's buffering (if possible)
Matthew Wild <mwild1@gmail.com>
parents:
6042
diff
changeset
|
245 local parser = new_parser(handlers, ns_separator, false); |
3032
38459cffaf67
util.xmppstream: Stream objects now just have feed/reset methods
Matthew Wild <mwild1@gmail.com>
parents:
2926
diff
changeset
|
246 local parse = parser.parse; |
38459cffaf67
util.xmppstream: Stream objects now just have feed/reset methods
Matthew Wild <mwild1@gmail.com>
parents:
2926
diff
changeset
|
247 |
8382
e5d00bf4a4d5
util: Various minor changes to please [luacheck]
Kim Alvefur <zash@zash.se>
parents:
7240
diff
changeset
|
248 function session.open_stream(session, from, to) -- luacheck: ignore 432/session |
6063
e626ee2fe106
mod_c2s, mod_s2s, mod_component, util.xmppstream: Move all session:open_stream() functions to util.xmppstream
Kim Alvefur <zash@zash.se>
parents:
6054
diff
changeset
|
249 local send = session.sends2s or session.send; |
e626ee2fe106
mod_c2s, mod_s2s, mod_component, util.xmppstream: Move all session:open_stream() functions to util.xmppstream
Kim Alvefur <zash@zash.se>
parents:
6054
diff
changeset
|
250 |
e626ee2fe106
mod_c2s, mod_s2s, mod_component, util.xmppstream: Move all session:open_stream() functions to util.xmppstream
Kim Alvefur <zash@zash.se>
parents:
6054
diff
changeset
|
251 local attr = { |
e626ee2fe106
mod_c2s, mod_s2s, mod_component, util.xmppstream: Move all session:open_stream() functions to util.xmppstream
Kim Alvefur <zash@zash.se>
parents:
6054
diff
changeset
|
252 ["xmlns:stream"] = "http://etherx.jabber.org/streams", |
e626ee2fe106
mod_c2s, mod_s2s, mod_component, util.xmppstream: Move all session:open_stream() functions to util.xmppstream
Kim Alvefur <zash@zash.se>
parents:
6054
diff
changeset
|
253 ["xml:lang"] = "en", |
e626ee2fe106
mod_c2s, mod_s2s, mod_component, util.xmppstream: Move all session:open_stream() functions to util.xmppstream
Kim Alvefur <zash@zash.se>
parents:
6054
diff
changeset
|
254 xmlns = stream_callbacks.default_ns, |
e626ee2fe106
mod_c2s, mod_s2s, mod_component, util.xmppstream: Move all session:open_stream() functions to util.xmppstream
Kim Alvefur <zash@zash.se>
parents:
6054
diff
changeset
|
255 version = session.version and (session.version > 0 and "1.0" or nil), |
6355
c2d144d3f8dd
util.xmppstream: Don't include empty stream ID in stream header (got here from mod_c2s)
Kim Alvefur <zash@zash.se>
parents:
6084
diff
changeset
|
256 id = session.streamid, |
6063
e626ee2fe106
mod_c2s, mod_s2s, mod_component, util.xmppstream: Move all session:open_stream() functions to util.xmppstream
Kim Alvefur <zash@zash.se>
parents:
6054
diff
changeset
|
257 from = from or session.host, to = to, |
e626ee2fe106
mod_c2s, mod_s2s, mod_component, util.xmppstream: Move all session:open_stream() functions to util.xmppstream
Kim Alvefur <zash@zash.se>
parents:
6054
diff
changeset
|
258 }; |
6084
3c02a9ed399e
util.xmppstream: Check for callback that may add stream header attributes
Kim Alvefur <zash@zash.se>
parents:
6063
diff
changeset
|
259 if session.stream_attrs then |
3c02a9ed399e
util.xmppstream: Check for callback that may add stream header attributes
Kim Alvefur <zash@zash.se>
parents:
6063
diff
changeset
|
260 session:stream_attrs(from, to, attr) |
3c02a9ed399e
util.xmppstream: Check for callback that may add stream header attributes
Kim Alvefur <zash@zash.se>
parents:
6063
diff
changeset
|
261 end |
6063
e626ee2fe106
mod_c2s, mod_s2s, mod_component, util.xmppstream: Move all session:open_stream() functions to util.xmppstream
Kim Alvefur <zash@zash.se>
parents:
6054
diff
changeset
|
262 send("<?xml version='1.0'?>"); |
e626ee2fe106
mod_c2s, mod_s2s, mod_component, util.xmppstream: Move all session:open_stream() functions to util.xmppstream
Kim Alvefur <zash@zash.se>
parents:
6054
diff
changeset
|
263 send(st.stanza("stream:stream", attr):top_tag()); |
e626ee2fe106
mod_c2s, mod_s2s, mod_component, util.xmppstream: Move all session:open_stream() functions to util.xmppstream
Kim Alvefur <zash@zash.se>
parents:
6054
diff
changeset
|
264 return true; |
e626ee2fe106
mod_c2s, mod_s2s, mod_component, util.xmppstream: Move all session:open_stream() functions to util.xmppstream
Kim Alvefur <zash@zash.se>
parents:
6054
diff
changeset
|
265 end |
e626ee2fe106
mod_c2s, mod_s2s, mod_component, util.xmppstream: Move all session:open_stream() functions to util.xmppstream
Kim Alvefur <zash@zash.se>
parents:
6054
diff
changeset
|
266 |
3032
38459cffaf67
util.xmppstream: Stream objects now just have feed/reset methods
Matthew Wild <mwild1@gmail.com>
parents:
2926
diff
changeset
|
267 return { |
38459cffaf67
util.xmppstream: Stream objects now just have feed/reset methods
Matthew Wild <mwild1@gmail.com>
parents:
2926
diff
changeset
|
268 reset = function () |
6053
2f93a04564b2
util.xmppstream: Also disable CharacterData merging after stream restarts
Matthew Wild <mwild1@gmail.com>
parents:
6052
diff
changeset
|
269 parser = new_parser(handlers, ns_separator, false); |
3032
38459cffaf67
util.xmppstream: Stream objects now just have feed/reset methods
Matthew Wild <mwild1@gmail.com>
parents:
2926
diff
changeset
|
270 parse = parser.parse; |
6042
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
271 n_outstanding_bytes = 0; |
3032
38459cffaf67
util.xmppstream: Stream objects now just have feed/reset methods
Matthew Wild <mwild1@gmail.com>
parents:
2926
diff
changeset
|
272 meta.reset(); |
38459cffaf67
util.xmppstream: Stream objects now just have feed/reset methods
Matthew Wild <mwild1@gmail.com>
parents:
2926
diff
changeset
|
273 end, |
8382
e5d00bf4a4d5
util: Various minor changes to please [luacheck]
Kim Alvefur <zash@zash.se>
parents:
7240
diff
changeset
|
274 feed = function (self, data) -- luacheck: ignore 212/self |
6042
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
275 if lxp_supports_bytecount then |
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
276 n_outstanding_bytes = n_outstanding_bytes + #data; |
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
277 end |
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
278 local ok, err = parse(parser, data); |
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
279 if lxp_supports_bytecount and n_outstanding_bytes > stanza_size_limit then |
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
280 return nil, "stanza-too-large"; |
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
281 end |
1107d66d2ab2
util.xmppstream: Implement stanza size limiting, default limit 10MB
Matthew Wild <mwild1@gmail.com>
parents:
5311
diff
changeset
|
282 return ok, err; |
3424
9e0df614e5d0
util.xmppstream: Add set_session() method to change the session that a stream is associated with
Matthew Wild <mwild1@gmail.com>
parents:
3032
diff
changeset
|
283 end, |
9e0df614e5d0
util.xmppstream: Add set_session() method to change the session that a stream is associated with
Matthew Wild <mwild1@gmail.com>
parents:
3032
diff
changeset
|
284 set_session = meta.set_session; |
3032
38459cffaf67
util.xmppstream: Stream objects now just have feed/reset methods
Matthew Wild <mwild1@gmail.com>
parents:
2926
diff
changeset
|
285 }; |
2921
f0ddfd7739ea
util.xmppstream: new() now returns a parser object
Matthew Wild <mwild1@gmail.com>
parents:
2920
diff
changeset
|
286 end |
f0ddfd7739ea
util.xmppstream: new() now returns a parser object
Matthew Wild <mwild1@gmail.com>
parents:
2920
diff
changeset
|
287 |
6777
5de6b93d0190
util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents:
6367
diff
changeset
|
288 return { |
5de6b93d0190
util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents:
6367
diff
changeset
|
289 ns_separator = ns_separator; |
5de6b93d0190
util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents:
6367
diff
changeset
|
290 ns_pattern = ns_pattern; |
5de6b93d0190
util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents:
6367
diff
changeset
|
291 new_sax_handlers = new_sax_handlers; |
5de6b93d0190
util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents:
6367
diff
changeset
|
292 new = new; |
5de6b93d0190
util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents:
6367
diff
changeset
|
293 }; |