Add enabled_proxy_id option.

GitOrigin-RevId: 3153f71d13740429a9153205e96329e49e82b91f
This commit is contained in:
levlam 2018-09-17 21:15:11 +03:00
parent 144b46ec3b
commit 7c447551fb
2 changed files with 22 additions and 9 deletions

View File

@ -592,6 +592,22 @@ void ConnectionCreator::ping_proxy_socket_fd(SocketFd socket_fd, mtproto::Transp
create_reference(token))}; create_reference(token))};
} }
void ConnectionCreator::set_active_proxy_id(int32 proxy_id, bool from_binlog) {
active_proxy_id_ = proxy_id;
if (proxy_id == 0) {
G()->shared_config().set_option_empty("enabled_proxy_id");
} else {
G()->shared_config().set_option_string("enabled_proxy_id", to_string(proxy_id));
}
if (!from_binlog) {
if (proxy_id == 0) {
G()->td_db()->get_binlog_pmc()->erase("proxy_active_id");
} else {
G()->td_db()->get_binlog_pmc()->set("proxy_active_id", to_string(proxy_id));
}
}
}
void ConnectionCreator::enable_proxy_impl(int32 proxy_id) { void ConnectionCreator::enable_proxy_impl(int32 proxy_id) {
CHECK(proxies_.count(proxy_id) == 1); CHECK(proxies_.count(proxy_id) == 1);
if (proxy_id == active_proxy_id_) { if (proxy_id == active_proxy_id_) {
@ -604,8 +620,7 @@ void ConnectionCreator::enable_proxy_impl(int32 proxy_id) {
} }
save_proxy_last_used_date(0); save_proxy_last_used_date(0);
active_proxy_id_ = proxy_id; set_active_proxy_id(proxy_id);
G()->td_db()->get_binlog_pmc()->set("proxy_active_id", to_string(proxy_id));
on_proxy_changed(false); on_proxy_changed(false);
} }
@ -621,8 +636,7 @@ void ConnectionCreator::disable_proxy_impl() {
update_mtproto_header(Proxy()); update_mtproto_header(Proxy());
} }
active_proxy_id_ = 0; set_active_proxy_id(0);
G()->td_db()->get_binlog_pmc()->erase("proxy_active_id");
on_proxy_changed(false); on_proxy_changed(false);
} }
@ -1180,7 +1194,7 @@ void ConnectionCreator::start_up() {
} }
it = proxy_info.find("proxy_active_id"); it = proxy_info.find("proxy_active_id");
if (it != proxy_info.end()) { if (it != proxy_info.end()) {
active_proxy_id_ = to_integer<int32>(it->second); set_active_proxy_id(to_integer<int32>(it->second), true);
proxy_info.erase(it); proxy_info.erase(it);
} }
@ -1198,8 +1212,7 @@ void ConnectionCreator::start_up() {
LOG_IF(ERROR, proxy_id != 1) << "Have empty proxy " << proxy_id; LOG_IF(ERROR, proxy_id != 1) << "Have empty proxy " << proxy_id;
proxies_.erase(proxy_id); proxies_.erase(proxy_id);
if (active_proxy_id_ == proxy_id) { if (active_proxy_id_ == proxy_id) {
active_proxy_id_ = 0; set_active_proxy_id(0);
G()->td_db()->get_binlog_pmc()->erase("proxy_active_id");
} }
} }
} }
@ -1210,8 +1223,7 @@ void ConnectionCreator::start_up() {
max_proxy_id_ = 2; max_proxy_id_ = 2;
if (!proxies_.empty()) { if (!proxies_.empty()) {
CHECK(proxies_.begin()->first == 1); CHECK(proxies_.begin()->first == 1);
active_proxy_id_ = 1; set_active_proxy_id(1);
G()->td_db()->get_binlog_pmc()->set("proxy_active_id", "1");
} }
G()->td_db()->get_binlog_pmc()->set("proxy_max_id", "2"); G()->td_db()->get_binlog_pmc()->set("proxy_max_id", "2");
} else if (max_proxy_id_ < 2) { } else if (max_proxy_id_ < 2) {

View File

@ -256,6 +256,7 @@ class ConnectionCreator : public NetQueryCallback {
return ++current_token_; return ++current_token_;
} }
void set_active_proxy_id(int32 proxy_id, bool from_binlog = false);
void enable_proxy_impl(int32 proxy_id); void enable_proxy_impl(int32 proxy_id);
void disable_proxy_impl(); void disable_proxy_impl();
void on_proxy_changed(bool from_db); void on_proxy_changed(bool from_db);