Comparison

core/s2smanager.lua @ 1007:c500d4cb7855

core.s2smanager: Buffer data sent before connection
author Matthew Wild <mwild1@gmail.com>
date Mon, 20 Apr 2009 22:14:31 +0100
parent 1006:9166d7a8c3c0
child 1075:831c84cbf5fa
comparison
equal deleted inserted replaced
1006:9166d7a8c3c0 1007:c500d4cb7855
139 host_session.log = log; 139 host_session.log = log;
140 end 140 end
141 141
142 attempt_connection(host_session); 142 attempt_connection(host_session);
143 143
144 if not host_session.sends2s then
145 -- A sends2s which buffers data (until the stream is opened)
146 -- note that data in this buffer will be sent before the stream is authed
147 -- and will not be ack'd in any way, successful or otherwise
148 local buffer;
149 function host_session.sends2s(data)
150 if not buffer then
151 buffer = {};
152 host_session.send_buffer = buffer;
153 end
154 log("debug", "Buffering data on unconnected s2sout to %s", to_host);
155 buffer[#buffer+1] = data;
156 log("debug", "Buffered item %d: %s", #buffer, tostring(data));
157 end
158
159 end
160
144 return host_session; 161 return host_session;
145 end 162 end
146 163
147 164
148 function attempt_connection(host_session, err) 165 function attempt_connection(host_session, err)
261 elseif session.direction == "outgoing" then 278 elseif session.direction == "outgoing" then
262 -- If we are just using the connection for verifying dialback keys, we won't try and auth it 279 -- If we are just using the connection for verifying dialback keys, we won't try and auth it
263 if not attr.id then error("stream response did not give us a streamid!!!"); end 280 if not attr.id then error("stream response did not give us a streamid!!!"); end
264 session.streamid = attr.id; 281 session.streamid = attr.id;
265 282
283 -- Send unauthed buffer
284 -- (stanzas which are fine to send before dialback)
285 -- Note that this is *not* the stanza queue (which
286 -- we can only send if auth succeeds) :)
287 local send_buffer = session.send_buffer;
288 if send_buffer and #send_buffer > 0 then
289 log("debug", "Sending s2s send_buffer now...");
290 for i, data in ipairs(send_buffer) do
291 session.sends2s(tostring(data));
292 send_buffer[i] = nil;
293 end
294 end
295 session.send_buffer = nil;
296
266 if not session.dialback_verifying then 297 if not session.dialback_verifying then
267 initiate_dialback(session); 298 initiate_dialback(session);
268 else 299 else
269 mark_connected(session); 300 mark_connected(session);
270 end 301 end