Use enum type for Bob status

This commit is contained in:
Alexander Krotov
2020-08-30 14:47:12 +03:00
committed by link2xt
parent 0f164861c7
commit 8f290530fd
4 changed files with 32 additions and 20 deletions

View File

@@ -205,8 +205,6 @@ pub const DC_LP_AUTH_FLAGS: i32 = DC_LP_AUTH_OAUTH2 | DC_LP_AUTH_NORMAL;
// QR code scanning (view from Bob, the joiner) // QR code scanning (view from Bob, the joiner)
pub const DC_VC_AUTH_REQUIRED: i32 = 2; pub const DC_VC_AUTH_REQUIRED: i32 = 2;
pub const DC_VC_CONTACT_CONFIRM: i32 = 6; pub const DC_VC_CONTACT_CONFIRM: i32 = 6;
pub const DC_BOB_ERROR: i32 = 0;
pub const DC_BOB_SUCCESS: i32 = 1;
// max. width/height of an avatar // max. width/height of an avatar
pub const AVATAR_SIZE: u32 = 192; pub const AVATAR_SIZE: u32 = 192;

View File

@@ -17,9 +17,9 @@ use crate::error::*;
use crate::events::{Event, EventEmitter, EventType, Events}; use crate::events::{Event, EventEmitter, EventType, Events};
use crate::key::{DcKey, SignedPublicKey}; use crate::key::{DcKey, SignedPublicKey};
use crate::login_param::LoginParam; use crate::login_param::LoginParam;
use crate::lot::Lot;
use crate::message::{self, MsgId}; use crate::message::{self, MsgId};
use crate::scheduler::Scheduler; use crate::scheduler::Scheduler;
use crate::securejoin::Bob;
use crate::sql::Sql; use crate::sql::Sql;
use std::time::SystemTime; use std::time::SystemTime;
@@ -44,7 +44,7 @@ pub struct InnerContext {
pub(crate) blobdir: PathBuf, pub(crate) blobdir: PathBuf,
pub(crate) sql: Sql, pub(crate) sql: Sql,
pub(crate) os_name: Option<String>, pub(crate) os_name: Option<String>,
pub(crate) bob: RwLock<BobStatus>, pub(crate) bob: RwLock<Bob>,
pub(crate) last_smeared_timestamp: RwLock<i64>, pub(crate) last_smeared_timestamp: RwLock<i64>,
pub(crate) running_state: RwLock<RunningState>, pub(crate) running_state: RwLock<RunningState>,
/// Mutex to avoid generating the key for the user more than once. /// Mutex to avoid generating the key for the user more than once.
@@ -508,13 +508,6 @@ impl Default for RunningState {
} }
} }
#[derive(Debug, Default)]
pub(crate) struct BobStatus {
pub expects: i32,
pub status: i32,
pub qr_scan: Option<Lot>,
}
pub fn get_version_str() -> &'static str { pub fn get_version_str() -> &'static str {
&DC_VERSION_STR &DC_VERSION_STR
} }

View File

@@ -19,7 +19,9 @@ use crate::message::{self, MessageState, MessengerMessage, MsgId};
use crate::mimeparser::*; use crate::mimeparser::*;
use crate::param::*; use crate::param::*;
use crate::peerstate::*; use crate::peerstate::*;
use crate::securejoin::{self, handle_securejoin_handshake, observe_securejoin_on_other_device}; use crate::securejoin::{
self, handle_securejoin_handshake, observe_securejoin_on_other_device, BobStatus,
};
use crate::stock::StockMessage; use crate::stock::StockMessage;
use crate::{contact, location}; use crate::{contact, location};
@@ -417,7 +419,7 @@ async fn add_parts(
Err(err) => { Err(err) => {
*hidden = true; *hidden = true;
context.bob.write().await.status = 0; // secure-join failed context.bob.write().await.status = BobStatus::Error; // secure-join failed
context.stop_ongoing().await; context.stop_ongoing().await;
warn!(context, "Error in Secure-Join message handling: {}", err); warn!(context, "Error in Secure-Join message handling: {}", err);
return Ok(()); return Ok(());

View File

@@ -15,7 +15,7 @@ use crate::error::{bail, Error};
use crate::events::EventType; use crate::events::EventType;
use crate::headerdef::HeaderDef; use crate::headerdef::HeaderDef;
use crate::key::{DcKey, Fingerprint, SignedPublicKey}; use crate::key::{DcKey, Fingerprint, SignedPublicKey};
use crate::lot::LotState; use crate::lot::{Lot, LotState};
use crate::message::Message; use crate::message::Message;
use crate::mimeparser::*; use crate::mimeparser::*;
use crate::param::*; use crate::param::*;
@@ -67,6 +67,25 @@ macro_rules! get_qr_attr {
}; };
} }
#[derive(Debug, PartialEq)]
pub(crate) enum BobStatus {
Error,
Success,
}
impl Default for BobStatus {
fn default() -> Self {
Self::Error
}
}
#[derive(Debug, Default)]
pub(crate) struct Bob {
pub expects: i32,
pub status: BobStatus,
pub qr_scan: Option<Lot>,
}
pub async fn dc_get_securejoin_qr(context: &Context, group_chat_id: ChatId) -> Option<String> { pub async fn dc_get_securejoin_qr(context: &Context, group_chat_id: ChatId) -> Option<String> {
/*======================================================= /*=======================================================
==== Alice - the inviter side ==== ==== Alice - the inviter side ====
@@ -160,7 +179,7 @@ async fn cleanup(
) -> ChatId { ) -> ChatId {
let mut bob = context.bob.write().await; let mut bob = context.bob.write().await;
bob.expects = 0; bob.expects = 0;
let ret_chat_id: ChatId = if bob.status == DC_BOB_SUCCESS { let ret_chat_id: ChatId = if bob.status == BobStatus::Success {
if join_vg { if join_vg {
chat::get_chat_id_by_grpid( chat::get_chat_id_by_grpid(
context, context,
@@ -223,7 +242,7 @@ async fn securejoin(context: &Context, qr: &str) -> ChatId {
join_vg = qr_scan.get_state() == LotState::QrAskVerifyGroup; join_vg = qr_scan.get_state() == LotState::QrAskVerifyGroup;
{ {
let mut bob = context.bob.write().await; let mut bob = context.bob.write().await;
bob.status = 0; bob.status = BobStatus::Error;
bob.qr_scan = Some(qr_scan); bob.qr_scan = Some(qr_scan);
} }
if fingerprint_equals_sender( if fingerprint_equals_sender(
@@ -545,7 +564,7 @@ pub(crate) async fn handle_securejoin_handshake(
}, },
) )
.await; .await;
context.bob.write().await.status = 0; // secure-join failed context.bob.write().await.status = BobStatus::Error; // secure-join failed
context.stop_ongoing().await; context.stop_ongoing().await;
return Ok(HandshakeMessage::Ignore); return Ok(HandshakeMessage::Ignore);
} }
@@ -558,7 +577,7 @@ pub(crate) async fn handle_securejoin_handshake(
"Fingerprint mismatch on joiner-side.", "Fingerprint mismatch on joiner-side.",
) )
.await; .await;
context.bob.write().await.status = 0; // secure-join failed context.bob.write().await.status = BobStatus::Error; // secure-join failed
context.stop_ongoing().await; context.stop_ongoing().await;
return Ok(HandshakeMessage::Ignore); return Ok(HandshakeMessage::Ignore);
} }
@@ -756,7 +775,7 @@ pub(crate) async fn handle_securejoin_handshake(
"Contact confirm message not encrypted.", "Contact confirm message not encrypted.",
) )
.await; .await;
context.bob.write().await.status = 0; context.bob.write().await.status = BobStatus::Error;
return Ok(abort_retval); return Ok(abort_retval);
} }
@@ -805,7 +824,7 @@ pub(crate) async fn handle_securejoin_handshake(
) )
.await?; .await?;
context.bob.write().await.status = 1; context.bob.write().await.status = BobStatus::Success;
context.stop_ongoing().await; context.stop_ongoing().await;
Ok(if join_vg { Ok(if join_vg {
HandshakeMessage::Propagate HandshakeMessage::Propagate