util/xmppstream.lua

Tue, 04 Jan 2011 00:23:51 +0000

author
Daurnimator <quae@daurnimator.com>
date
Tue, 04 Jan 2011 00:23:51 +0000
changeset 3995
7214dc7a5642
parent 3989
692d221ef9bd
child 4002
2b53b4b5d46e
permissions
-rw-r--r--

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
b1885732e979 GPL->MIT!
Matthew Wild <mwild1@gmail.com>
parents: 625
diff changeset
5 -- This project is MIT/X11 licensed. Please see the
b1885732e979 GPL->MIT!
Matthew Wild <mwild1@gmail.com>
parents: 625
diff changeset
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
fbb3a4ff9cf1 dialback keys now verified
Matthew Wild <mwild1@gmail.com>
parents: 99
diff changeset
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 }

mercurial