… | |
… | |
745 | && conf != THISNODE |
745 | && conf != THISNODE |
746 | && connectmode != conf_node::C_NEVER |
746 | && connectmode != conf_node::C_NEVER |
747 | && connectmode != conf_node::C_DISABLED |
747 | && connectmode != conf_node::C_DISABLED |
748 | && NOW > w.at) |
748 | && NOW > w.at) |
749 | { |
749 | { |
750 | double retry_int = double (retry_cnt & 3 ? (retry_cnt & 3) : 1 << (retry_cnt >> 2)) * 0.6; |
750 | w.at = TSTAMP_MAX; // first disable this watcher in case of recursion |
751 | |
751 | |
752 | if (retry_int < conf->max_retry) |
752 | double retry_int = double (retry_cnt & 3 |
753 | retry_cnt++; |
753 | ? (retry_cnt & 3) + 1 |
754 | else |
754 | : 1 << (retry_cnt >> 2)); |
755 | retry_int = conf->max_retry; |
|
|
756 | |
|
|
757 | w.start (NOW + retry_int); |
|
|
758 | |
755 | |
759 | reset_si (); |
756 | reset_si (); |
|
|
757 | |
|
|
758 | bool slow = si.prot & PROT_SLOW; |
760 | |
759 | |
761 | if (si.prot && !si.host) |
760 | if (si.prot && !si.host) |
762 | vpn->send_connect_request (conf->id); |
761 | vpn->send_connect_request (conf->id); |
763 | else |
762 | else |
764 | { |
763 | { |
765 | const sockinfo &dsi = forward_si (si); |
764 | const sockinfo &dsi = forward_si (si); |
|
|
765 | |
|
|
766 | slow = slow || (dsi.prot & PROT_SLOW); |
766 | |
767 | |
767 | if (dsi.valid () && auth_rate_limiter.can (dsi)) |
768 | if (dsi.valid () && auth_rate_limiter.can (dsi)) |
768 | { |
769 | { |
769 | if (retry_cnt < 4) |
770 | if (retry_cnt < 4) |
770 | send_auth_request (dsi, true); |
771 | send_auth_request (dsi, true); |
771 | else |
772 | else |
772 | send_ping (dsi, 0); |
773 | send_ping (dsi, 0); |
773 | } |
774 | } |
774 | } |
775 | } |
|
|
776 | |
|
|
777 | retry_int *= slow ? 3. : 0.7; |
|
|
778 | |
|
|
779 | if (retry_int < conf->max_retry) |
|
|
780 | retry_cnt++; |
|
|
781 | else |
|
|
782 | retry_int = conf->max_retry; |
|
|
783 | |
|
|
784 | w.start (NOW + retry_int); |
775 | } |
785 | } |
776 | } |
786 | } |
777 | |
787 | |
778 | void |
788 | void |
779 | connection::reset_connection () |
789 | connection::reset_connection () |