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"); |