Wed, 05 Jan 2011 05:14:02 +0000
util.xmllex, util.xmppstream: It runs
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 |
519
cccd610a0ef9
Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents:
355
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 | |
3995
7214dc7a5642
util.xmppstream, util.xmllex: Basic test passes
Daurnimator <quae@daurnimator.com>
parents:
3989
diff
changeset
|
9 | local tblinsert = table.insert |
1
b8787e859fd2
Switched to new connection framework, courtesy of the luadch project
matthew
parents:
diff
changeset
|
10 | |
3995
7214dc7a5642
util.xmppstream, util.xmllex: Basic test passes
Daurnimator <quae@daurnimator.com>
parents:
3989
diff
changeset
|
11 | local lex = require "util.xmllex"; |
7214dc7a5642
util.xmppstream, util.xmllex: Basic test passes
Daurnimator <quae@daurnimator.com>
parents:
3989
diff
changeset
|
12 | local index = lex.index |
4002
2b53b4b5d46e
util.xmllex, util.xmppstream: It runs
daurnimator <quae@daurnimator.com>
parents:
3995
diff
changeset
|
13 | local tagindex_to_tree = lex.tagindex_to_tree; |
2b53b4b5d46e
util.xmllex, util.xmppstream: It runs
daurnimator <quae@daurnimator.com>
parents:
3995
diff
changeset
|
14 | local get_name, get_attr = lex.get_name, lex.get_attr; |
1
b8787e859fd2
Switched to new connection framework, courtesy of the luadch project
matthew
parents:
diff
changeset
|
15 | |
3696
a96f275c42b5
util.xmppstream: Fix logger name.
Waqas Hussain <waqas20@gmail.com>
parents:
3638
diff
changeset
|
16 | local default_log = require "util.logger".init("xmppstream"); |
145 | 17 | |
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
|
18 | 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
|
19 | |
3995
7214dc7a5642
util.xmppstream, util.xmllex: Basic test passes
Daurnimator <quae@daurnimator.com>
parents:
3989
diff
changeset
|
20 | local function new(session, stream_callbacks) |
7214dc7a5642
util.xmppstream, util.xmllex: Basic test passes
Daurnimator <quae@daurnimator.com>
parents:
3989
diff
changeset
|
21 | local partial |
7214dc7a5642
util.xmppstream, util.xmllex: Basic test passes
Daurnimator <quae@daurnimator.com>
parents:
3989
diff
changeset
|
22 | local openindexes = { } |
7214dc7a5642
util.xmppstream, util.xmllex: Basic test passes
Daurnimator <quae@daurnimator.com>
parents:
3989
diff
changeset
|
23 | local lastindex = 0 |
2492
b5e2d1919ec3
xmlhandlers: Fixed indentation and added some semicolons.
Waqas Hussain <waqas20@gmail.com>
parents:
2468
diff
changeset
|
24 | |
3032
38459cffaf67
util.xmppstream: Stream objects now just have feed/reset methods
Matthew Wild <mwild1@gmail.com>
parents:
2926
diff
changeset
|
25 | return { |
3995
7214dc7a5642
util.xmppstream, util.xmllex: Basic test passes
Daurnimator <quae@daurnimator.com>
parents:
3989
diff
changeset
|
26 | reset = function ( ) |
7214dc7a5642
util.xmppstream, util.xmllex: Basic test passes
Daurnimator <quae@daurnimator.com>
parents:
3989
diff
changeset
|
27 | partial = nil |
7214dc7a5642
util.xmppstream, util.xmllex: Basic test passes
Daurnimator <quae@daurnimator.com>
parents:
3989
diff
changeset
|
28 | openindexes = { } |
4002
2b53b4b5d46e
util.xmllex, util.xmppstream: It runs
daurnimator <quae@daurnimator.com>
parents:
3995
diff
changeset
|
29 | lastindex = 0 |
3995
7214dc7a5642
util.xmppstream, util.xmllex: Basic test passes
Daurnimator <quae@daurnimator.com>
parents:
3989
diff
changeset
|
30 | end ; |
7214dc7a5642
util.xmppstream, util.xmllex: Basic test passes
Daurnimator <quae@daurnimator.com>
parents:
3989
diff
changeset
|
31 | feed = function ( stream , data ) |
4002
2b53b4b5d46e
util.xmllex, util.xmppstream: It runs
daurnimator <quae@daurnimator.com>
parents:
3995
diff
changeset
|
32 | --print("FFEED", data) |
2b53b4b5d46e
util.xmllex, util.xmppstream: It runs
daurnimator <quae@daurnimator.com>
parents:
3995
diff
changeset
|
33 | partial = index ( data , partial ) |
2b53b4b5d46e
util.xmllex, util.xmppstream: It runs
daurnimator <quae@daurnimator.com>
parents:
3995
diff
changeset
|
34 | local tmp = lastindex |
2b53b4b5d46e
util.xmllex, util.xmppstream: It runs
daurnimator <quae@daurnimator.com>
parents:
3995
diff
changeset
|
35 | lastindex = #partial - 1 |
2b53b4b5d46e
util.xmllex, util.xmppstream: It runs
daurnimator <quae@daurnimator.com>
parents:
3995
diff
changeset
|
36 | for i = tmp + 1 , #partial - 1 do |
2b53b4b5d46e
util.xmllex, util.xmppstream: It runs
daurnimator <quae@daurnimator.com>
parents:
3995
diff
changeset
|
37 | local v = partial [ i ] |
2b53b4b5d46e
util.xmllex, util.xmppstream: It runs
daurnimator <quae@daurnimator.com>
parents:
3995
diff
changeset
|
38 | |
2b53b4b5d46e
util.xmllex, util.xmppstream: It runs
daurnimator <quae@daurnimator.com>
parents:
3995
diff
changeset
|
39 | if v.finish then |
2b53b4b5d46e
util.xmllex, util.xmppstream: It runs
daurnimator <quae@daurnimator.com>
parents:
3995
diff
changeset
|
40 | if v.type == "open" or v.type == "selfclosing" then |
2b53b4b5d46e
util.xmllex, util.xmppstream: It runs
daurnimator <quae@daurnimator.com>
parents:
3995
diff
changeset
|
41 | tblinsert ( openindexes , i ) |
2b53b4b5d46e
util.xmllex, util.xmppstream: It runs
daurnimator <quae@daurnimator.com>
parents:
3995
diff
changeset
|
42 | if #openindexes == 1 then |
2b53b4b5d46e
util.xmllex, util.xmppstream: It runs
daurnimator <quae@daurnimator.com>
parents:
3995
diff
changeset
|
43 | local vstr = tostring(v); |
2b53b4b5d46e
util.xmllex, util.xmppstream: It runs
daurnimator <quae@daurnimator.com>
parents:
3995
diff
changeset
|
44 | local name = get_name ( vstr ) |
2b53b4b5d46e
util.xmllex, util.xmppstream: It runs
daurnimator <quae@daurnimator.com>
parents:
3995
diff
changeset
|
45 | if name == "stream:stream" then |
2b53b4b5d46e
util.xmllex, util.xmppstream: It runs
daurnimator <quae@daurnimator.com>
parents:
3995
diff
changeset
|
46 | local attr = get_attr ( vstr ); |
3995
7214dc7a5642
util.xmppstream, util.xmllex: Basic test passes
Daurnimator <quae@daurnimator.com>
parents:
3989
diff
changeset
|
47 | stream_callbacks.streamopened ( session , attr ) |
7214dc7a5642
util.xmppstream, util.xmllex: Basic test passes
Daurnimator <quae@daurnimator.com>
parents:
3989
diff
changeset
|
48 | end |
4002
2b53b4b5d46e
util.xmllex, util.xmppstream: It runs
daurnimator <quae@daurnimator.com>
parents:
3995
diff
changeset
|
49 | end |
2b53b4b5d46e
util.xmllex, util.xmppstream: It runs
daurnimator <quae@daurnimator.com>
parents:
3995
diff
changeset
|
50 | end |
2b53b4b5d46e
util.xmllex, util.xmppstream: It runs
daurnimator <quae@daurnimator.com>
parents:
3995
diff
changeset
|
51 | if v.type == "close" or v.type == "selfclosing" then |
2b53b4b5d46e
util.xmllex, util.xmppstream: It runs
daurnimator <quae@daurnimator.com>
parents:
3995
diff
changeset
|
52 | if #openindexes == 2 then -- If closing level 2... |
2b53b4b5d46e
util.xmllex, util.xmppstream: It runs
daurnimator <quae@daurnimator.com>
parents:
3995
diff
changeset
|
53 | local attr = get_attr ( tostring(partial[openindexes[1]]) ) |
2b53b4b5d46e
util.xmllex, util.xmppstream: It runs
daurnimator <quae@daurnimator.com>
parents:
3995
diff
changeset
|
54 | local stanza = tagindex_to_tree ( partial , openindexes [ #openindexes ] , i , { |
2b53b4b5d46e
util.xmllex, util.xmppstream: It runs
daurnimator <quae@daurnimator.com>
parents:
3995
diff
changeset
|
55 | attr = attr, |
2b53b4b5d46e
util.xmllex, util.xmppstream: It runs
daurnimator <quae@daurnimator.com>
parents:
3995
diff
changeset
|
56 | } ) |
2b53b4b5d46e
util.xmllex, util.xmppstream: It runs
daurnimator <quae@daurnimator.com>
parents:
3995
diff
changeset
|
57 | if stanza[1].attr.xmlns == attr.xmlns then |
2b53b4b5d46e
util.xmllex, util.xmppstream: It runs
daurnimator <quae@daurnimator.com>
parents:
3995
diff
changeset
|
58 | stanza[1].attr.xmlns = false; |
2b53b4b5d46e
util.xmllex, util.xmppstream: It runs
daurnimator <quae@daurnimator.com>
parents:
3995
diff
changeset
|
59 | end |
2b53b4b5d46e
util.xmllex, util.xmppstream: It runs
daurnimator <quae@daurnimator.com>
parents:
3995
diff
changeset
|
60 | stream_callbacks.handlestanza ( session , stanza[1] ) |
2b53b4b5d46e
util.xmllex, util.xmppstream: It runs
daurnimator <quae@daurnimator.com>
parents:
3995
diff
changeset
|
61 | elseif #openindexes == 1 then |
2b53b4b5d46e
util.xmllex, util.xmppstream: It runs
daurnimator <quae@daurnimator.com>
parents:
3995
diff
changeset
|
62 | local prefix, name = get_name ( tostring(v) ) |
2b53b4b5d46e
util.xmllex, util.xmppstream: It runs
daurnimator <quae@daurnimator.com>
parents:
3995
diff
changeset
|
63 | if name == "stream" then |
3995
7214dc7a5642
util.xmppstream, util.xmllex: Basic test passes
Daurnimator <quae@daurnimator.com>
parents:
3989
diff
changeset
|
64 | stream_callbacks.streamclosed ( session ) |
7214dc7a5642
util.xmppstream, util.xmllex: Basic test passes
Daurnimator <quae@daurnimator.com>
parents:
3989
diff
changeset
|
65 | end |
7214dc7a5642
util.xmppstream, util.xmllex: Basic test passes
Daurnimator <quae@daurnimator.com>
parents:
3989
diff
changeset
|
66 | end |
4002
2b53b4b5d46e
util.xmllex, util.xmppstream: It runs
daurnimator <quae@daurnimator.com>
parents:
3995
diff
changeset
|
67 | openindexes [ #openindexes ] = nil |
3995
7214dc7a5642
util.xmppstream, util.xmllex: Basic test passes
Daurnimator <quae@daurnimator.com>
parents:
3989
diff
changeset
|
68 | end |
7214dc7a5642
util.xmppstream, util.xmllex: Basic test passes
Daurnimator <quae@daurnimator.com>
parents:
3989
diff
changeset
|
69 | end |
7214dc7a5642
util.xmppstream, util.xmllex: Basic test passes
Daurnimator <quae@daurnimator.com>
parents:
3989
diff
changeset
|
70 | end |
4002
2b53b4b5d46e
util.xmllex, util.xmppstream: It runs
daurnimator <quae@daurnimator.com>
parents:
3995
diff
changeset
|
71 | return true |
3995
7214dc7a5642
util.xmppstream, util.xmllex: Basic test passes
Daurnimator <quae@daurnimator.com>
parents:
3989
diff
changeset
|
72 | end ; |
7214dc7a5642
util.xmppstream, util.xmllex: Basic test passes
Daurnimator <quae@daurnimator.com>
parents:
3989
diff
changeset
|
73 | set_session = function ( newsession ) session = newsession end |
3032
38459cffaf67
util.xmppstream: Stream objects now just have feed/reset methods
Matthew Wild <mwild1@gmail.com>
parents:
2926
diff
changeset
|
74 | }; |
2921
f0ddfd7739ea
util.xmppstream: new() now returns a parser object
Matthew Wild <mwild1@gmail.com>
parents:
2920
diff
changeset
|
75 | end |
f0ddfd7739ea
util.xmppstream: new() now returns a parser object
Matthew Wild <mwild1@gmail.com>
parents:
2920
diff
changeset
|
76 | |
3995
7214dc7a5642
util.xmppstream, util.xmllex: Basic test passes
Daurnimator <quae@daurnimator.com>
parents:
3989
diff
changeset
|
77 | return { |
7214dc7a5642
util.xmppstream, util.xmllex: Basic test passes
Daurnimator <quae@daurnimator.com>
parents:
3989
diff
changeset
|
78 | new = new ; |
7214dc7a5642
util.xmppstream, util.xmllex: Basic test passes
Daurnimator <quae@daurnimator.com>
parents:
3989
diff
changeset
|
79 | } |