62 local request, err = http.request(self.bosh_url, { body = tostring(payload) }, function (response, code, request) |
62 local request, err = http.request(self.bosh_url, { body = tostring(payload) }, function (response, code, request) |
63 if code ~= 0 then |
63 if code ~= 0 then |
64 self.inactive_since = nil; |
64 self.inactive_since = nil; |
65 return self:_handle_response(response, code, request); |
65 return self:_handle_response(response, code, request); |
66 end |
66 end |
67 |
67 |
68 -- Connection issues, we need to retry this request |
68 -- Connection issues, we need to retry this request |
69 local time = os.time(); |
69 local time = os.time(); |
70 if not self.inactive_since then |
70 if not self.inactive_since then |
71 self.inactive_since = time; -- So we know when it is time to give up |
71 self.inactive_since = time; -- So we know when it is time to give up |
72 elseif time - self.inactive_since > self.bosh_max_inactivity then |
72 elseif time - self.inactive_since > self.bosh_max_inactivity then |
73 return self:_disconnected(); |
73 return self:_disconnected(); |
74 else |
74 else |
75 self:debug("%d seconds left to reconnect, retrying in %d seconds...", |
75 self:debug("%d seconds left to reconnect, retrying in %d seconds...", |
76 self.bosh_max_inactivity - (time - self.inactive_since), reconnect_timeout); |
76 self.bosh_max_inactivity - (time - self.inactive_since), reconnect_timeout); |
77 end |
77 end |
78 |
78 |
79 -- Set up reconnect timer |
79 -- Set up reconnect timer |
80 timer.add_task(reconnect_timeout, function () |
80 timer.add_task(reconnect_timeout, function () |
81 self:debug("Retrying request..."); |
81 self:debug("Retrying request..."); |
82 -- Remove old request |
82 -- Remove old request |
83 for i, waiting_request in ipairs(self.bosh_waiting_requests) do |
83 for i, waiting_request in ipairs(self.bosh_waiting_requests) do |
101 self:event("disconnected"); |
101 self:event("disconnected"); |
102 end |
102 end |
103 |
103 |
104 function stream_mt:_send_session_request() |
104 function stream_mt:_send_session_request() |
105 local body = self:_make_body(); |
105 local body = self:_make_body(); |
106 |
106 |
107 -- XEP-0124 |
107 -- XEP-0124 |
108 body.attr.hold = "1"; |
108 body.attr.hold = "1"; |
109 body.attr.wait = "60"; |
109 body.attr.wait = "60"; |
110 body.attr["xml:lang"] = "en"; |
110 body.attr["xml:lang"] = "en"; |
111 body.attr.ver = "1.6"; |
111 body.attr.ver = "1.6"; |
112 |
112 |
113 -- XEP-0206 |
113 -- XEP-0206 |
114 body.attr.from = self.jid; |
114 body.attr.from = self.jid; |
115 body.attr.to = self.host; |
115 body.attr.to = self.host; |
116 body.attr.secure = 'true'; |
116 body.attr.secure = 'true'; |
117 |
117 |
118 http.request(self.bosh_url, { body = tostring(body) }, function (response, code) |
118 http.request(self.bosh_url, { body = tostring(body) }, function (response, code) |
119 if code == 0 then |
119 if code == 0 then |
120 -- Failed to connect |
120 -- Failed to connect |
121 return self:_disconnected(); |
121 return self:_disconnected(); |
122 end |
122 end |