mirror of
https://github.com/ChronosX88/psyced.git
synced 2024-11-09 20:11:00 +00:00
fippo says SRV works better with this
This commit is contained in:
parent
9645693f55
commit
1858839804
@ -55,6 +55,8 @@ volatile int issync;
|
|||||||
|
|
||||||
#ifndef ERQ_WITHOUT_SRV
|
#ifndef ERQ_WITHOUT_SRV
|
||||||
string hostname; // original hostname
|
string hostname; // original hostname
|
||||||
|
mixed *srv_hostlist;
|
||||||
|
int srv_index;
|
||||||
|
|
||||||
srv_choose(mixed *hostlist, string transport) {
|
srv_choose(mixed *hostlist, string transport) {
|
||||||
string srvhost;
|
string srvhost;
|
||||||
@ -74,6 +76,8 @@ srv_choose(mixed *hostlist, string transport) {
|
|||||||
return connect_failure("_failure_unavailable_service",
|
return connect_failure("_failure_unavailable_service",
|
||||||
"No service offered by domain " + hostname);
|
"No service offered by domain " + hostname);
|
||||||
}
|
}
|
||||||
|
srv_hostlist = hostlist;
|
||||||
|
srv_index = 0;
|
||||||
|
|
||||||
// we use other srv records for fallback..
|
// we use other srv records for fallback..
|
||||||
// saga thinks we can use quote and pass an array into the lambda,
|
// saga thinks we can use quote and pass an array into the lambda,
|
||||||
@ -90,6 +94,7 @@ srv_choose(mixed *hostlist, string transport) {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
void reconnect() {
|
void reconnect() {
|
||||||
|
P0(("reconnect %O:%d\n", host, port))
|
||||||
if (ISSYNC || retry++ < MAX_RETRY) {
|
if (ISSYNC || retry++ < MAX_RETRY) {
|
||||||
waitforme = waitforme * 2 + random(waitforme);
|
waitforme = waitforme * 2 + random(waitforme);
|
||||||
call_out(#'connect, waitforme);
|
call_out(#'connect, waitforme);
|
||||||
@ -174,7 +179,19 @@ void pushback(string failmc) {
|
|||||||
// wouldn't it be nicer to also pass real vars here?
|
// wouldn't it be nicer to also pass real vars here?
|
||||||
void connect_failure(string mc, string reason) {
|
void connect_failure(string mc, string reason) {
|
||||||
::connect_failure(mc, reason);
|
::connect_failure(mc, reason);
|
||||||
if (abbrev("_attempt", mc)) reconnect();
|
if (abbrev("_attempt", mc)) {
|
||||||
|
#ifndef ERQ_WITHOUT_SRV
|
||||||
|
if (pointerp(srv_hostlist) && srv_index < sizeof(srv_hostlist)) {
|
||||||
|
srv_index++;
|
||||||
|
host = srv_hostlist[srv_index][DNS_SRV_NAME];
|
||||||
|
port = srv_hostlist[srv_index][DNS_SRV_PORT];
|
||||||
|
retry = 0;
|
||||||
|
waitforme = 0;
|
||||||
|
P0(("changing to srv target #%d: %O:%d\n", srv_index, host, port))
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
reconnect();
|
||||||
|
}
|
||||||
else pushback(mc);
|
else pushback(mc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user