bosh.lua

changeset 89
1752a9097e6b
parent 87
d59073722924
child 93
2442e751f3cb
equal deleted inserted replaced
88:e204ef45bdd6 89:1752a9097e6b
1 1
2 local init_xmlhandlers = require "core.xmlhandlers"; 2 local init_xmlhandlers = require "core.xmlhandlers";
3 local st = require "util.stanza"; 3 local st = require "util.stanza";
4 require "net.httpclient_listener"; -- Required for net.http to work
5 local http = require "net.http";
4 6
5 local stream_mt = setmetatable({}, { __index = verse.stream_mt }); 7 local stream_mt = setmetatable({}, { __index = verse.stream_mt });
6 stream_mt.__index = stream_mt; 8 stream_mt.__index = stream_mt;
7 9
8 local xmlns_stream = "http://etherx.jabber.org/streams"; 10 local xmlns_stream = "http://etherx.jabber.org/streams";
23 end 25 end
24 function stream.bosh_response_handler(response, code, request) 26 function stream.bosh_response_handler(response, code, request)
25 return stream:_handle_response(response, code, request); 27 return stream:_handle_response(response, code, request);
26 end 28 end
27 local conn = verse.new(logger, stream); 29 local conn = verse.new(logger, stream);
28 conn:add_plugin("http");
29 return setmetatable(conn, stream_mt); 30 return setmetatable(conn, stream_mt);
30 end 31 end
31 32
32 function stream_mt:connect() 33 function stream_mt:connect()
33 self:_send_session_request(); 34 self:_send_session_request();
48 local buffer = self.bosh_outgoing_buffer; 49 local buffer = self.bosh_outgoing_buffer;
49 for i, stanza in ipairs(buffer) do 50 for i, stanza in ipairs(buffer) do
50 payload:add_child(stanza); 51 payload:add_child(stanza);
51 buffer[i] = nil; 52 buffer[i] = nil;
52 end 53 end
53 local request = self.http.request(self.bosh_url, { body = tostring(payload) }, self.bosh_response_handler); 54 local request = http.request(self.bosh_url, { body = tostring(payload) }, self.bosh_response_handler);
54 table.insert(self.bosh_waiting_requests, request); 55 table.insert(self.bosh_waiting_requests, request);
55 else 56 else
56 self:debug("Decided not to flush."); 57 self:debug("Decided not to flush.");
57 end 58 end
58 end 59 end
69 -- XEP-0206 70 -- XEP-0206
70 body.attr.from = self.jid; 71 body.attr.from = self.jid;
71 body.attr.to = self.host; 72 body.attr.to = self.host;
72 body.attr.secure = 'true'; 73 body.attr.secure = 'true';
73 74
74 self.http.request(self.bosh_url, { body = tostring(body) }, function (response) 75 http.request(self.bosh_url, { body = tostring(body) }, function (response)
75 -- Handle session creation response 76 -- Handle session creation response
76 local payload = self:_parse_response(response) 77 local payload = self:_parse_response(response)
77 if not payload then 78 if not payload then
78 self:warn("Invalid session creation response"); 79 self:warn("Invalid session creation response");
79 self:event("disconnected"); 80 self:event("disconnected");

mercurial