Replace u32 with a PeerstateKeyType enum

This commit is contained in:
Alexander Krotov
2019-11-30 19:18:02 +01:00
parent 694d8fd6fb
commit 3a08c92433
3 changed files with 36 additions and 28 deletions

View File

@@ -1664,7 +1664,7 @@ fn check_verified_properties(
let fp = peerstate.gossip_key_fingerprint.clone(); let fp = peerstate.gossip_key_fingerprint.clone();
if let Some(fp) = fp { if let Some(fp) = fp {
peerstate.set_verified( peerstate.set_verified(
DC_PS_GOSSIP_KEY, PeerstateKeyType::GossipKey,
&fp, &fp,
PeerstateVerifiedStatus::BidirectVerified, PeerstateVerifiedStatus::BidirectVerified,
); );

View File

@@ -12,8 +12,11 @@ use crate::error::*;
use crate::key::*; use crate::key::*;
use crate::sql::{self, Sql}; use crate::sql::{self, Sql};
pub const DC_PS_GOSSIP_KEY: u32 = 0; #[derive(Debug)]
pub const DC_PS_PUBLIC_KEY: u32 = 1; pub enum PeerstateKeyType {
GossipKey,
PublicKey,
}
#[derive(Debug, PartialEq, Eq, Clone, Copy, FromPrimitive)] #[derive(Debug, PartialEq, Eq, Clone, Copy, FromPrimitive)]
#[repr(u8)] #[repr(u8)]
@@ -346,35 +349,40 @@ impl<'a> Peerstate<'a> {
pub fn set_verified( pub fn set_verified(
&mut self, &mut self,
which_key: u32, which_key: PeerstateKeyType,
fingerprint: &str, fingerprint: &str,
verified: PeerstateVerifiedStatus, verified: PeerstateVerifiedStatus,
) -> bool { ) -> bool {
let mut success = false; if verified == PeerstateVerifiedStatus::BidirectVerified {
if !(which_key != DC_PS_GOSSIP_KEY && which_key != DC_PS_PUBLIC_KEY match which_key {
|| verified != PeerstateVerifiedStatus::BidirectVerified) PeerstateKeyType::PublicKey => {
{ if self.public_key_fingerprint.is_some()
if which_key == DC_PS_PUBLIC_KEY && self.public_key_fingerprint.as_ref().unwrap() == fingerprint
&& self.public_key_fingerprint.is_some() {
&& self.public_key_fingerprint.as_ref().unwrap() == fingerprint self.to_save = Some(ToSave::All);
{ self.verified_key = self.public_key.clone();
self.to_save = Some(ToSave::All); self.verified_key_fingerprint = self.public_key_fingerprint.clone();
self.verified_key = self.public_key.clone(); true
self.verified_key_fingerprint = self.public_key_fingerprint.clone(); } else {
success = true; false
} }
if which_key == DC_PS_GOSSIP_KEY }
&& self.gossip_key_fingerprint.is_some() PeerstateKeyType::GossipKey => {
&& self.gossip_key_fingerprint.as_ref().unwrap() == fingerprint if self.gossip_key_fingerprint.is_some()
{ && self.gossip_key_fingerprint.as_ref().unwrap() == fingerprint
self.to_save = Some(ToSave::All); {
self.verified_key = self.gossip_key.clone(); self.to_save = Some(ToSave::All);
self.verified_key_fingerprint = self.gossip_key_fingerprint.clone(); self.verified_key = self.gossip_key.clone();
success = true; self.verified_key_fingerprint = self.gossip_key_fingerprint.clone();
true
} else {
false
}
}
} }
} else {
false
} }
success
} }
pub fn save_to_db(&self, sql: &Sql, create: bool) -> Result<()> { pub fn save_to_db(&self, sql: &Sql, create: bool) -> Result<()> {

View File

@@ -691,7 +691,7 @@ fn mark_peer_as_verified(context: &Context, fingerprint: impl AsRef<str>) -> Res
Peerstate::from_fingerprint(context, &context.sql, fingerprint.as_ref()) Peerstate::from_fingerprint(context, &context.sql, fingerprint.as_ref())
{ {
if peerstate.set_verified( if peerstate.set_verified(
DC_PS_PUBLIC_KEY, PeerstateKeyType::PublicKey,
fingerprint.as_ref(), fingerprint.as_ref(),
PeerstateVerifiedStatus::BidirectVerified, PeerstateVerifiedStatus::BidirectVerified,
) { ) {