| 814 | } |
| 815 | |
| 816 | void BaseRunner::get_private_keys_from_key_manager() { |
| 817 | if (!is_initialized()) { |
| 818 | return; |
| 819 | } |
| 820 | |
| 821 | if (role_ != RunnerRole::Worker && role_ != RunnerRole::Proxy) { |
| 822 | return; |
| 823 | } |
| 824 | |
| 825 | auto conf = runner_config_; |
| 826 | if (!conf || !conf->root_contract_config) { |
| 827 | return; |
| 828 | } |
| 829 | |
| 830 | auto fail = [&]() { |
| 831 | if (key_manager_socket_id_ > 0) { |
| 832 | td::actor::send_closure(client_, &TcpClient::del_outbound_address, key_manager_socket_id_); |
| 833 | key_manager_socket_id_ = 0; |
| 834 | key_manager_addr_ = td::IPAddress(); |
| 835 | if (key_manager_connection_id_ > 0) { |
| 836 | fail_connection(key_manager_connection_id_, td::Status::Error("closing key manager")); |
| 837 | key_manager_connection_id_ = 0; |
| 838 | } |
| 839 | } |
| 840 | }; |
| 841 | |
| 842 | auto key_manager_addr = conf->root_contract_config->key_manager_address(); |
| 843 | if (!key_manager_addr.is_valid()) { |
| 844 | return fail(); |
| 845 | } |
| 846 | if (key_manager_addr != key_manager_addr_) { |
| 847 | fail(); |
| 848 | key_manager_addr_ = key_manager_addr; |
| 849 | key_manager_socket_id_ = generate_unique_uint64(); |
| 850 | |
| 851 | td::actor::send_closure(client_, &TcpClient::add_outbound_address, key_manager_socket_id_, key_manager_addr, |
| 852 | remote_app_type_key_manager()); |
| 853 | } |
| 854 | |
| 855 | if (key_manager_connection_id_ > 0) { |
| 856 | td::BufferSlice req; |
| 857 | if (role_ == RunnerRole::Proxy) { |
| 858 | req = cocoon::create_serialize_tl_object<cocoon_api::keyManager_getProxyPrivateKeys>(0); |
| 859 | } else if (role_ == RunnerRole::Worker) { |
| 860 | req = cocoon::create_serialize_tl_object<cocoon_api::keyManager_getWorkerPrivateKeys>(0); |
| 861 | } else { |
| 862 | return; |
| 863 | } |
| 864 | |
| 865 | send_query_to_connection(key_manager_connection_id_, "get_private_keys", std::move(req), td::Timestamp::in(60.0), |
| 866 | [runner = this](td::Result<td::BufferSlice> R) mutable { |
| 867 | if (R.is_ok()) { |
| 868 | runner->got_private_keys_from_key_manager(R.move_as_ok()); |
| 869 | } |
| 870 | }); |
| 871 | } |
| 872 | } |
| 873 |
nothing calls this directly
no test coverage detected