util/xmppstream.lua

Wed, 05 Jan 2011 05:14:02 +0000

author
daurnimator <quae@daurnimator.com>
date
Wed, 05 Jan 2011 05:14:02 +0000
changeset 4002
2b53b4b5d46e
parent 3995
7214dc7a5642
permissions
-rw-r--r--

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
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
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
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 = { }
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 }

mercurial