1use crate::{
9 persistent_safety_storage::PersistentSafetyStorage,
10 remote_service::{self, RemoteService},
11 safety_rules_manager,
12};
13use diem_config::config::{SafetyRulesConfig, SafetyRulesService};
14
15use std::net::SocketAddr;
16
17pub struct Process {
18 data: Option<ProcessData>,
19}
20
21impl Process {
22 pub fn new(config: SafetyRulesConfig) -> Self {
23 let storage = safety_rules_manager::storage(&config);
24
25 let verify_vote_proposal_signature =
26 config.verify_vote_proposal_signature;
27 let export_consensus_key = config.export_consensus_key;
28 let service = match &config.service {
29 SafetyRulesService::Process(service) => service,
30 _ => panic!("Unexpected SafetyRules service: {:?}", config.service),
31 };
32 let server_addr = service.server_address();
33
34 Self {
35 data: Some(ProcessData {
36 server_addr,
37 storage,
38 verify_vote_proposal_signature,
39 export_consensus_key,
40 network_timeout: config.network_timeout_ms,
41 }),
42 }
43 }
44
45 pub fn start(&mut self) {
46 let data = self.data.take().expect("Unable to retrieve ProcessData");
47 remote_service::execute(
48 data.storage,
49 data.server_addr,
50 data.verify_vote_proposal_signature,
51 data.export_consensus_key,
52 data.network_timeout,
53 None,
55 );
56 }
57}
58
59struct ProcessData {
60 server_addr: SocketAddr,
61 storage: PersistentSafetyStorage,
62 verify_vote_proposal_signature: bool,
63 export_consensus_key: bool,
64 network_timeout: u64,
66}
67
68pub struct ProcessService {
69 server_addr: SocketAddr,
70 network_timeout_ms: u64,
71}
72
73impl ProcessService {
74 pub fn new(server_addr: SocketAddr, network_timeout: u64) -> Self {
75 Self {
76 server_addr,
77 network_timeout_ms: network_timeout,
78 }
79 }
80}
81
82impl RemoteService for ProcessService {
83 fn server_address(&self) -> SocketAddr { self.server_addr }
84
85 fn network_timeout_ms(&self) -> u64 { self.network_timeout_ms }
86}