Comparison

core/s2smanager.lua @ 4443:7456ddcc0b14

s2smanager: Store port specified by SRV records
author Florian Zeitz <florob@babelmonkeys.de>
date Wed, 07 Dec 2011 23:37:56 +0100
parent 4431:bbede0141f7e
child 4455:447234173e9e
comparison
equal deleted inserted replaced
4442:bc0a68cae236 4443:7456ddcc0b14
293 end 293 end
294 294
295 return try_connect(host_session, connect_host, connect_port); 295 return try_connect(host_session, connect_host, connect_port);
296 end 296 end
297 297
298 function try_next_ip(host_session, connect_port) 298 function try_next_ip(host_session)
299 host_session.connecting = nil; 299 host_session.connecting = nil;
300 host_session.ip_choice = host_session.ip_choice + 1; 300 host_session.ip_choice = host_session.ip_choice + 1;
301 local ip = host_session.ip_hosts[host_session.ip_choice]; 301 local ip = host_session.ip_hosts[host_session.ip_choice];
302 local ok, err= make_connect(host_session, ip, connect_port); 302 local ok, err= make_connect(host_session, ip.ip, ip.port);
303 if not ok then 303 if not ok then
304 if not attempt_connection(host_session, err or "closed") then 304 if not attempt_connection(host_session, err or "closed") then
305 err = err and (": "..err) or ""; 305 err = err and (": "..err) or "";
306 destroy_session(host_session, "Connection failed"..err); 306 destroy_session(host_session, "Connection failed"..err);
307 end 307 end
352 end 352 end
353 353
354 if has_other then 354 if has_other then
355 if #IPs > 0 then 355 if #IPs > 0 then
356 rfc3484_dest(host_session.ip_hosts, sources); 356 rfc3484_dest(host_session.ip_hosts, sources);
357 for i = 1, #IPs do
358 IPs[i] = {ip = IPs[i], port = connect_port};
359 end
357 host_session.ip_choice = 0; 360 host_session.ip_choice = 0;
358 try_next_ip(host_session, connect_port); 361 try_next_ip(host_session);
359 else 362 else
360 log("debug", "DNS lookup failed to get a response for %s", connect_host); 363 log("debug", "DNS lookup failed to get a response for %s", connect_host);
361 host_session.ip_hosts = nil; 364 host_session.ip_hosts = nil;
362 if not attempt_connection(host_session, "name resolution failed") then -- Retry if we can 365 if not attempt_connection(host_session, "name resolution failed") then -- Retry if we can
363 log("debug", "No other records to try for %s - destroying", host_session.to_host); 366 log("debug", "No other records to try for %s - destroying", host_session.to_host);
381 end 384 end
382 385
383 if has_other then 386 if has_other then
384 if #IPs > 0 then 387 if #IPs > 0 then
385 rfc3484_dest(host_session.ip_hosts, sources); 388 rfc3484_dest(host_session.ip_hosts, sources);
389 for i = 1, #IPs do
390 IPs[i] = {ip = IPs[i], port = connect_port};
391 end
386 host_session.ip_choice = 0; 392 host_session.ip_choice = 0;
387 try_next_ip(host_session, connect_port); 393 try_next_ip(host_session);
388 else 394 else
389 log("debug", "DNS lookup failed to get a response for %s", connect_host); 395 log("debug", "DNS lookup failed to get a response for %s", connect_host);
390 host_session.ip_hosts = nil; 396 host_session.ip_hosts = nil;
391 if not attempt_connection(host_session, "name resolution failed") then -- Retry if we can 397 if not attempt_connection(host_session, "name resolution failed") then -- Retry if we can
392 log("debug", "No other records to try for %s - destroying", host_session.to_host); 398 log("debug", "No other records to try for %s - destroying", host_session.to_host);
399 end 405 end
400 end, connect_host, "AAAA", "IN"); 406 end, connect_host, "AAAA", "IN");
401 407
402 return true; 408 return true;
403 elseif host_session.ip_hosts and #host_session.ip_hosts > host_session.ip_choice then -- Not our first attempt, and we also have IPs left to try 409 elseif host_session.ip_hosts and #host_session.ip_hosts > host_session.ip_choice then -- Not our first attempt, and we also have IPs left to try
404 try_next_ip(host_session, connect_port); 410 try_next_ip(host_session);
405 else 411 else
406 host_session.ip_hosts = nil; 412 host_session.ip_hosts = nil;
407 if not attempt_connection(host_session, "out of IP addresses") then -- Retry if we can 413 if not attempt_connection(host_session, "out of IP addresses") then -- Retry if we can
408 log("debug", "No other records to try for %s - destroying", host_session.to_host); 414 log("debug", "No other records to try for %s - destroying", host_session.to_host);
409 err = err and (": "..err) or ""; 415 err = err and (": "..err) or "";