Software / code / verse
Comparison
client.lua @ 70:36d113fb0f3c
verse.client: Add stream:reset(), keep self.data static between resets
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Fri, 28 May 2010 23:26:31 +0100 |
| parent | 62:d4b6f9e33c6e |
| child | 76:927167321283 |
comparison
equal
deleted
inserted
replaced
| 69:a2a888aec7f3 | 70:36d113fb0f3c |
|---|---|
| 37 end | 37 end |
| 38 | 38 |
| 39 return stream:event("stanza", stanza); | 39 return stream:event("stanza", stanza); |
| 40 end | 40 end |
| 41 | 41 |
| 42 local function reset_stream(stream) | 42 function stream:reset() |
| 43 -- Reset stream | 43 -- Reset stream |
| 44 local parser = lxp.new(init_xmlhandlers(stream, stream_callbacks), "\1"); | 44 local parser = lxp.new(init_xmlhandlers(self, stream_callbacks), "\1"); |
| 45 stream.parser = parser; | 45 self.parser = parser; |
| 46 | 46 |
| 47 stream.notopen = true; | 47 self.notopen = true; |
| 48 | |
| 49 function stream.data(conn, data) | |
| 50 local ok, err = parser:parse(data); | |
| 51 if ok then return; end | |
| 52 stream:debug("debug", "Received invalid XML (%s) %d bytes: %s", tostring(err), #data, data:sub(1, 300):gsub("[\r\n]+", " ")); | |
| 53 stream:close("xml-not-well-formed"); | |
| 54 end | |
| 55 | 48 |
| 56 return true; | 49 return true; |
| 57 end | 50 end |
| 58 | 51 |
| 59 function stream:connect_client(jid, pass) | 52 function stream:connect_client(jid, pass) |
| 63 -- Required XMPP features | 56 -- Required XMPP features |
| 64 self:add_plugin("tls"); | 57 self:add_plugin("tls"); |
| 65 self:add_plugin("sasl"); | 58 self:add_plugin("sasl"); |
| 66 self:add_plugin("bind"); | 59 self:add_plugin("bind"); |
| 67 self:add_plugin("session"); | 60 self:add_plugin("session"); |
| 61 | |
| 62 function self.data(conn, data) | |
| 63 local ok, err = self.parser:parse(data); | |
| 64 if ok then return; end | |
| 65 stream:debug("debug", "Received invalid XML (%s) %d bytes: %s", tostring(err), #data, data:sub(1, 300):gsub("[\r\n]+", " ")); | |
| 66 stream:close("xml-not-well-formed"); | |
| 67 end | |
| 68 | 68 |
| 69 self:hook("incoming-raw", function (data) return self.data(self.conn, data); end); | 69 self:hook("incoming-raw", function (data) return self.data(self.conn, data); end); |
| 70 | 70 |
| 71 self.curr_id = 0; | 71 self.curr_id = 0; |
| 72 | 72 |
| 97 return ret; | 97 return ret; |
| 98 end, -1); | 98 end, -1); |
| 99 | 99 |
| 100 -- Initialise connection | 100 -- Initialise connection |
| 101 self:connect(self.connect_host or self.host, self.connect_port or 5222); | 101 self:connect(self.connect_host or self.host, self.connect_port or 5222); |
| 102 --reset_stream(self); | |
| 103 self:reopen(); | 102 self:reopen(); |
| 104 end | 103 end |
| 105 | 104 |
| 106 function stream:reopen() | 105 function stream:reopen() |
| 107 reset_stream(self); | 106 self:reset(); |
| 108 self:send(st.stanza("stream:stream", { to = self.host, ["xmlns:stream"]='http://etherx.jabber.org/streams', | 107 self:send(st.stanza("stream:stream", { to = self.host, ["xmlns:stream"]='http://etherx.jabber.org/streams', |
| 109 xmlns = "jabber:client", version = "1.0" }):top_tag()); | 108 xmlns = "jabber:client", version = "1.0" }):top_tag()); |
| 110 end | 109 end |
| 111 | 110 |
| 112 function stream:close(reason) | 111 function stream:close(reason) |