24 module "xmlhandlers" |
24 module "xmlhandlers" |
25 |
25 |
26 local ns_prefixes = { |
26 local ns_prefixes = { |
27 ["http://www.w3.org/XML/1998/namespace"] = "xml"; |
27 ["http://www.w3.org/XML/1998/namespace"] = "xml"; |
28 } |
28 } |
|
29 |
|
30 local xmlns_streams = "http://etherx.jabber.org/streams"; |
|
31 |
29 local ns_separator = "\1"; |
32 local ns_separator = "\1"; |
30 local ns_pattern = "^([^"..ns_separator.."]*)"..ns_separator.."?(.*)$"; |
33 local ns_pattern = "^([^"..ns_separator.."]*)"..ns_separator.."?(.*)$"; |
31 |
34 |
32 function init_xmlhandlers(session, stream_callbacks) |
35 function init_xmlhandlers(session, stream_callbacks) |
33 local ns_stack = { "" }; |
36 local ns_stack = { "" }; |
39 local cb_streamopened = stream_callbacks.streamopened; |
42 local cb_streamopened = stream_callbacks.streamopened; |
40 local cb_streamclosed = stream_callbacks.streamclosed; |
43 local cb_streamclosed = stream_callbacks.streamclosed; |
41 local cb_error = stream_callbacks.error or function (session, e) error("XML stream error: "..tostring(e)); end; |
44 local cb_error = stream_callbacks.error or function (session, e) error("XML stream error: "..tostring(e)); end; |
42 local cb_handlestanza = stream_callbacks.handlestanza; |
45 local cb_handlestanza = stream_callbacks.handlestanza; |
43 |
46 |
44 local stream_tag = stream_callbacks.stream_tag; |
47 local stream_ns = stream_callbacks.stream_ns or xmlns_streams; |
|
48 local stream_tag = stream_ns..ns_separator..(stream_callbacks.stream_tag or "stream"); |
|
49 local stream_error_tag = stream_ns..ns_separator..(stream_callbacks.error_tag or "error"); |
|
50 |
45 local stream_default_ns = stream_callbacks.default_ns; |
51 local stream_default_ns = stream_callbacks.default_ns; |
46 |
52 |
47 local stanza |
53 local stanza |
48 function xml_handlers:StartElement(tagname, attr) |
54 function xml_handlers:StartElement(tagname, attr) |
49 if stanza and #chardata > 0 then |
55 if stanza and #chardata > 0 then |