Tue, 04 Jan 2011 00:23:51 +0000
util.xmppstream, util.xmllex: Basic test passes
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 |
7214dc7a5642
util.xmppstream, util.xmllex: Basic test passes
Daurnimator <quae@daurnimator.com>
parents:
3989
diff
changeset
|
13 | local tagindex_to_tree = lex.tagindex_to_tree |
7214dc7a5642
util.xmppstream, util.xmllex: Basic test passes
Daurnimator <quae@daurnimator.com>
parents:
3989
diff
changeset
|
14 | local process_starttag = lex.process_starttag |
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 = { } |
7214dc7a5642
util.xmppstream, util.xmllex: Basic test passes
Daurnimator <quae@daurnimator.com>
parents:
3989
diff
changeset
|
29 | end ; |
7214dc7a5642
util.xmppstream, util.xmllex: Basic test passes
Daurnimator <quae@daurnimator.com>
parents:
3989
diff
changeset
|
30 | feed = function ( stream , data ) |
7214dc7a5642
util.xmppstream, util.xmllex: Basic test passes
Daurnimator <quae@daurnimator.com>
parents:
3989
diff
changeset
|
31 | while true do |
7214dc7a5642
util.xmppstream, util.xmllex: Basic test passes
Daurnimator <quae@daurnimator.com>
parents:
3989
diff
changeset
|
32 | partial = index ( data , partial ) |
7214dc7a5642
util.xmppstream, util.xmllex: Basic test passes
Daurnimator <quae@daurnimator.com>
parents:
3989
diff
changeset
|
33 | for i = lastindex + 1 , #partial - 1 do |
7214dc7a5642
util.xmppstream, util.xmllex: Basic test passes
Daurnimator <quae@daurnimator.com>
parents:
3989
diff
changeset
|
34 | local v = partial [ i ] |
7214dc7a5642
util.xmppstream, util.xmllex: Basic test passes
Daurnimator <quae@daurnimator.com>
parents:
3989
diff
changeset
|
35 | |
7214dc7a5642
util.xmppstream, util.xmllex: Basic test passes
Daurnimator <quae@daurnimator.com>
parents:
3989
diff
changeset
|
36 | if v.finish then |
7214dc7a5642
util.xmppstream, util.xmllex: Basic test passes
Daurnimator <quae@daurnimator.com>
parents:
3989
diff
changeset
|
37 | if v.type == "open" then |
7214dc7a5642
util.xmppstream, util.xmllex: Basic test passes
Daurnimator <quae@daurnimator.com>
parents:
3989
diff
changeset
|
38 | tblinsert ( openindexes , i ) |
7214dc7a5642
util.xmppstream, util.xmllex: Basic test passes
Daurnimator <quae@daurnimator.com>
parents:
3989
diff
changeset
|
39 | if #openindexes == 1 then |
7214dc7a5642
util.xmppstream, util.xmllex: Basic test passes
Daurnimator <quae@daurnimator.com>
parents:
3989
diff
changeset
|
40 | local name , attr = process_starttag ( v ) |
7214dc7a5642
util.xmppstream, util.xmllex: Basic test passes
Daurnimator <quae@daurnimator.com>
parents:
3989
diff
changeset
|
41 | stream_callbacks.streamopened ( session , attr ) |
7214dc7a5642
util.xmppstream, util.xmllex: Basic test passes
Daurnimator <quae@daurnimator.com>
parents:
3989
diff
changeset
|
42 | end |
7214dc7a5642
util.xmppstream, util.xmllex: Basic test passes
Daurnimator <quae@daurnimator.com>
parents:
3989
diff
changeset
|
43 | elseif v.type == "close" then |
7214dc7a5642
util.xmppstream, util.xmllex: Basic test passes
Daurnimator <quae@daurnimator.com>
parents:
3989
diff
changeset
|
44 | if #openindexes == 2 then -- If closing level 2... |
7214dc7a5642
util.xmppstream, util.xmllex: Basic test passes
Daurnimator <quae@daurnimator.com>
parents:
3989
diff
changeset
|
45 | local stanza = tagindex_to_tree ( partial , openindexes [ #openindexes ] , i ) |
7214dc7a5642
util.xmppstream, util.xmllex: Basic test passes
Daurnimator <quae@daurnimator.com>
parents:
3989
diff
changeset
|
46 | stream_callbacks.handlestanza ( session , stanza ) |
7214dc7a5642
util.xmppstream, util.xmllex: Basic test passes
Daurnimator <quae@daurnimator.com>
parents:
3989
diff
changeset
|
47 | elseif #openindexes == 1 then |
7214dc7a5642
util.xmppstream, util.xmllex: Basic test passes
Daurnimator <quae@daurnimator.com>
parents:
3989
diff
changeset
|
48 | stream_callbacks.streamclosed ( session ) |
7214dc7a5642
util.xmppstream, util.xmllex: Basic test passes
Daurnimator <quae@daurnimator.com>
parents:
3989
diff
changeset
|
49 | end |
7214dc7a5642
util.xmppstream, util.xmllex: Basic test passes
Daurnimator <quae@daurnimator.com>
parents:
3989
diff
changeset
|
50 | --print ( "Closed level " .. #openindexes ) |
7214dc7a5642
util.xmppstream, util.xmllex: Basic test passes
Daurnimator <quae@daurnimator.com>
parents:
3989
diff
changeset
|
51 | openindexes [ #openindexes ] = nil |
7214dc7a5642
util.xmppstream, util.xmllex: Basic test passes
Daurnimator <quae@daurnimator.com>
parents:
3989
diff
changeset
|
52 | end |
7214dc7a5642
util.xmppstream, util.xmllex: Basic test passes
Daurnimator <quae@daurnimator.com>
parents:
3989
diff
changeset
|
53 | end |
7214dc7a5642
util.xmppstream, util.xmllex: Basic test passes
Daurnimator <quae@daurnimator.com>
parents:
3989
diff
changeset
|
54 | end |
7214dc7a5642
util.xmppstream, util.xmllex: Basic test passes
Daurnimator <quae@daurnimator.com>
parents:
3989
diff
changeset
|
55 | lastindex = #partial - 1 |
7214dc7a5642
util.xmppstream, util.xmllex: Basic test passes
Daurnimator <quae@daurnimator.com>
parents:
3989
diff
changeset
|
56 | break |
7214dc7a5642
util.xmppstream, util.xmllex: Basic test passes
Daurnimator <quae@daurnimator.com>
parents:
3989
diff
changeset
|
57 | end |
7214dc7a5642
util.xmppstream, util.xmllex: Basic test passes
Daurnimator <quae@daurnimator.com>
parents:
3989
diff
changeset
|
58 | end ; |
7214dc7a5642
util.xmppstream, util.xmllex: Basic test passes
Daurnimator <quae@daurnimator.com>
parents:
3989
diff
changeset
|
59 | 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
|
60 | }; |
2921
f0ddfd7739ea
util.xmppstream: new() now returns a parser object
Matthew Wild <mwild1@gmail.com>
parents:
2920
diff
changeset
|
61 | end |
f0ddfd7739ea
util.xmppstream: new() now returns a parser object
Matthew Wild <mwild1@gmail.com>
parents:
2920
diff
changeset
|
62 | |
3995
7214dc7a5642
util.xmppstream, util.xmllex: Basic test passes
Daurnimator <quae@daurnimator.com>
parents:
3989
diff
changeset
|
63 | return { |
7214dc7a5642
util.xmppstream, util.xmllex: Basic test passes
Daurnimator <quae@daurnimator.com>
parents:
3989
diff
changeset
|
64 | new = new ; |
7214dc7a5642
util.xmppstream, util.xmllex: Basic test passes
Daurnimator <quae@daurnimator.com>
parents:
3989
diff
changeset
|
65 | } |