Comparison

plugins/mod_bosh.lua @ 7506:8cca24bea3e0

mod_bosh: Fix merge mistakes from c8923f882274
author Kim Alvefur <zash@zash.se>
date Thu, 14 Jul 2016 18:57:30 +0200
parent 7391:c381106173d0
child 7654:b40776ee2aef
comparison
equal deleted inserted replaced
7505:3d950ee0de35 7506:8cca24bea3e0
61 61
62 local t_insert, t_remove, t_concat = table.insert, table.remove, table.concat; 62 local t_insert, t_remove, t_concat = table.insert, table.remove, table.concat;
63 local os_time = os.time; 63 local os_time = os.time;
64 64
65 -- All sessions, and sessions that have no requests open 65 -- All sessions, and sessions that have no requests open
66 local sessions, inactive_sessions = module:shared("sessions", "inactive_sessions"); 66 local sessions = module:shared("sessions");
67 67
68 -- Used to respond to idle sessions (those with waiting requests) 68 -- Used to respond to idle sessions (those with waiting requests)
69 local waiting_requests = module:shared("waiting_requests");
70 function on_destroy_request(request) 69 function on_destroy_request(request)
71 log("debug", "Request destroyed: %s", tostring(request)); 70 log("debug", "Request destroyed: %s", tostring(request));
72 waiting_requests[request] = nil;
73 local session = sessions[request.context.sid]; 71 local session = sessions[request.context.sid];
74 if session then 72 if session then
75 local requests = session.requests; 73 local requests = session.requests;
76 for i, r in ipairs(requests) do 74 for i, r in ipairs(requests) do
77 if r == request then 75 if r == request then
81 end 79 end
82 80
83 -- If this session now has no requests open, mark it as inactive 81 -- If this session now has no requests open, mark it as inactive
84 local max_inactive = session.bosh_max_inactive; 82 local max_inactive = session.bosh_max_inactive;
85 if max_inactive and #requests == 0 then 83 if max_inactive and #requests == 0 then
86 inactive_sessions[session] = os_time() + max_inactive; 84 if session.inactive_timer then
85 session.inactive_timer:stop();
86 end
87 session.inactive_timer = module:add_timer(max_inactive, check_inactive, session, request.context,
88 "BOSH client silent for over "..max_inactive.." seconds");
87 (session.log or log)("debug", "BOSH session marked as inactive (for %ds)", max_inactive); 89 (session.log or log)("debug", "BOSH session marked as inactive (for %ds)", max_inactive);
88 end 90 end
91 if session.bosh_wait_timer then
92 session.bosh_wait_timer:stop();
93 session.bosh_wait_timer = nil;
94 end
95 end
96 end
97
98 function check_inactive(now, session, context, reason)
99 if not sessions.destroyed then
100 sessions[context.sid] = nil;
101 sm_destroy_session(session, reason);
89 end 102 end
90 end 103 end
91 104
92 local function set_cross_domain_headers(response) 105 local function set_cross_domain_headers(response)
93 local headers = response.headers; 106 local headers = response.headers;
117 response.context = context; 130 response.context = context;
118 131
119 local headers = response.headers; 132 local headers = response.headers;
120 headers.content_type = "text/xml; charset=utf-8"; 133 headers.content_type = "text/xml; charset=utf-8";
121 134
122 if cross_domain and event.request.headers.origin then 135 if cross_domain and request.headers.origin then
123 set_cross_domain_headers(response); 136 set_cross_domain_headers(response);
124 end 137 end
125 138
126 -- stream:feed() calls the stream_callbacks, so all stanzas in 139 -- stream:feed() calls the stream_callbacks, so all stanzas in
127 -- the body are processed in this next line before it returns. 140 -- the body are processed in this next line before it returns.