a first start of cleaning up dc_qr

This commit is contained in:
holger krekel
2019-07-17 20:34:48 +02:00
parent 4febfa6bd8
commit a04bd73439

View File

@@ -21,7 +21,13 @@ use crate::x::*;
// text1=URL // text1=URL
// text1=error string // text1=error string
pub unsafe fn dc_check_qr(context: &Context, qr: *const libc::c_char) -> *mut dc_lot_t { pub unsafe fn dc_check_qr(context: &Context, qr: *const libc::c_char) -> *mut dc_lot_t {
let mut current_block: u64; let mut qr_parsed: *mut dc_lot_t = dc_lot_new();
(*qr_parsed).state = 0;
if qr.is_null() {
return qr_parsed;
}
let mut OK_TO_CONTINUE = true;
let mut payload: *mut libc::c_char = 0 as *mut libc::c_char; let mut payload: *mut libc::c_char = 0 as *mut libc::c_char;
// must be normalized, if set // must be normalized, if set
let mut addr: *mut libc::c_char = 0 as *mut libc::c_char; let mut addr: *mut libc::c_char = 0 as *mut libc::c_char;
@@ -30,13 +36,11 @@ pub unsafe fn dc_check_qr(context: &Context, qr: *const libc::c_char) -> *mut dc
let mut name: *mut libc::c_char = 0 as *mut libc::c_char; let mut name: *mut libc::c_char = 0 as *mut libc::c_char;
let mut invitenumber: *mut libc::c_char = 0 as *mut libc::c_char; let mut invitenumber: *mut libc::c_char = 0 as *mut libc::c_char;
let mut auth: *mut libc::c_char = 0 as *mut libc::c_char; let mut auth: *mut libc::c_char = 0 as *mut libc::c_char;
let mut qr_parsed: *mut dc_lot_t = dc_lot_new();
let mut chat_id: uint32_t = 0i32 as uint32_t; let mut chat_id: uint32_t = 0i32 as uint32_t;
let mut device_msg: *mut libc::c_char = 0 as *mut libc::c_char; let mut device_msg: *mut libc::c_char = 0 as *mut libc::c_char;
let mut grpid: *mut libc::c_char = 0 as *mut libc::c_char; let mut grpid: *mut libc::c_char = 0 as *mut libc::c_char;
let mut grpname: *mut libc::c_char = 0 as *mut libc::c_char; let mut grpname: *mut libc::c_char = 0 as *mut libc::c_char;
(*qr_parsed).state = 0i32; if OK_TO_CONTINUE {
if !qr.is_null() {
info!(context, 0, "Scanned QR code: {}", as_str(qr),); info!(context, 0, "Scanned QR code: {}", as_str(qr),);
/* split parameters from the qr code /* split parameters from the qr code
------------------------------------ */ ------------------------------------ */
@@ -79,7 +83,6 @@ pub unsafe fn dc_check_qr(context: &Context, qr: *const libc::c_char) -> *mut dc
dc_param_unref(param); dc_param_unref(param);
} }
fingerprint = dc_normalize_fingerprint_c(payload); fingerprint = dc_normalize_fingerprint_c(payload);
current_block = 5023038348526654800;
} else if strncasecmp( } else if strncasecmp(
qr, qr,
b"mailto:\x00" as *const u8 as *const libc::c_char, b"mailto:\x00" as *const u8 as *const libc::c_char,
@@ -94,7 +97,6 @@ pub unsafe fn dc_check_qr(context: &Context, qr: *const libc::c_char) -> *mut dc
*query = 0i32 as libc::c_char *query = 0i32 as libc::c_char
} }
addr = dc_strdup(payload); addr = dc_strdup(payload);
current_block = 5023038348526654800;
} else if strncasecmp( } else if strncasecmp(
qr, qr,
b"SMTP:\x00" as *const u8 as *const libc::c_char, b"SMTP:\x00" as *const u8 as *const libc::c_char,
@@ -109,7 +111,6 @@ pub unsafe fn dc_check_qr(context: &Context, qr: *const libc::c_char) -> *mut dc
*colon = 0i32 as libc::c_char *colon = 0i32 as libc::c_char
} }
addr = dc_strdup(payload); addr = dc_strdup(payload);
current_block = 5023038348526654800;
} else if strncasecmp( } else if strncasecmp(
qr, qr,
b"MATMSG:\x00" as *const u8 as *const libc::c_char, b"MATMSG:\x00" as *const u8 as *const libc::c_char,
@@ -125,12 +126,11 @@ pub unsafe fn dc_check_qr(context: &Context, qr: *const libc::c_char) -> *mut dc
if !semicolon.is_null() { if !semicolon.is_null() {
*semicolon = 0i32 as libc::c_char *semicolon = 0i32 as libc::c_char
} }
current_block = 5023038348526654800;
} else { } else {
(*qr_parsed).state = 400i32; (*qr_parsed).state = 400i32;
(*qr_parsed).text1 = (*qr_parsed).text1 =
dc_strdup(b"Bad e-mail address.\x00" as *const u8 as *const libc::c_char); dc_strdup(b"Bad e-mail address.\x00" as *const u8 as *const libc::c_char);
current_block = 16562876845594826114; OK_TO_CONTINUE = false;
} }
} else { } else {
if strncasecmp( if strncasecmp(
@@ -183,11 +183,9 @@ pub unsafe fn dc_check_qr(context: &Context, qr: *const libc::c_char) -> *mut dc
} }
dc_free_splitted_lines(lines); dc_free_splitted_lines(lines);
} }
current_block = 5023038348526654800;
} }
match current_block { }
16562876845594826114 => {} if OK_TO_CONTINUE {
_ => {
/* check the paramters /* check the paramters
---------------------- */ ---------------------- */
if !addr.is_null() { if !addr.is_null() {
@@ -200,50 +198,28 @@ pub unsafe fn dc_check_qr(context: &Context, qr: *const libc::c_char) -> *mut dc
addr = temp; addr = temp;
if !dc_may_be_valid_addr(addr) { if !dc_may_be_valid_addr(addr) {
(*qr_parsed).state = 400i32; (*qr_parsed).state = 400i32;
(*qr_parsed).text1 = dc_strdup( (*qr_parsed).text1 =
b"Bad e-mail address.\x00" as *const u8 as *const libc::c_char, dc_strdup(b"Bad e-mail address.\x00" as *const u8 as *const libc::c_char);
); OK_TO_CONTINUE = false;
current_block = 16562876845594826114;
} else {
current_block = 14116432890150942211;
} }
} else {
current_block = 14116432890150942211;
} }
match current_block { }
16562876845594826114 => {} if OK_TO_CONTINUE {
_ => { if fingerprint.is_null() || strlen(fingerprint) != 40 {
if !fingerprint.is_null() {
if strlen(fingerprint) != 40 {
(*qr_parsed).state = 400i32; (*qr_parsed).state = 400i32;
(*qr_parsed).text1 = dc_strdup( (*qr_parsed).text1 = dc_strdup(
b"Bad fingerprint length in QR code.\x00" as *const u8 b"Bad fingerprint length in QR code.\x00" as *const u8 as *const libc::c_char,
as *const libc::c_char,
); );
current_block = 16562876845594826114; OK_TO_CONTINUE = false;
} else {
current_block = 5409161009579131794;
} }
} else {
current_block = 5409161009579131794;
} }
match current_block { if OK_TO_CONTINUE {
16562876845594826114 => {}
_ => {
if !fingerprint.is_null() { if !fingerprint.is_null() {
let peerstate = Peerstate::from_fingerprint( let peerstate = Peerstate::from_fingerprint(context, &context.sql, as_str(fingerprint));
context,
&context.sql,
as_str(fingerprint),
);
if addr.is_null() || invitenumber.is_null() || auth.is_null() { if addr.is_null() || invitenumber.is_null() || auth.is_null() {
if let Some(peerstate) = peerstate { if let Some(peerstate) = peerstate {
(*qr_parsed).state = 210i32; (*qr_parsed).state = 210i32;
let c_addr = peerstate let c_addr = peerstate.addr.as_ref().map(to_cstring).unwrap_or_default();
.addr
.as_ref()
.map(to_cstring)
.unwrap_or_default();
let addr_ptr = if peerstate.addr.is_some() { let addr_ptr = if peerstate.addr.is_some() {
c_addr.as_ptr() c_addr.as_ptr()
} else { } else {
@@ -264,13 +240,11 @@ pub unsafe fn dc_check_qr(context: &Context, qr: *const libc::c_char) -> *mut dc
0 as *mut libc::c_int, 0 as *mut libc::c_int,
); );
device_msg = dc_mprintf( device_msg = dc_mprintf(
b"%s verified.\x00" as *const u8 b"%s verified.\x00" as *const u8 as *const libc::c_char,
as *const libc::c_char,
peerstate.addr, peerstate.addr,
) )
} else { } else {
(*qr_parsed).text1 = (*qr_parsed).text1 = dc_format_fingerprint_c(fingerprint);
dc_format_fingerprint_c(fingerprint);
(*qr_parsed).state = 230i32 (*qr_parsed).state = 230i32
} }
} else { } else {
@@ -281,34 +255,20 @@ pub unsafe fn dc_check_qr(context: &Context, qr: *const libc::c_char) -> *mut dc
} else { } else {
(*qr_parsed).state = 200i32 (*qr_parsed).state = 200i32
} }
(*qr_parsed).id = dc_add_or_lookup_contact( (*qr_parsed).id =
context, dc_add_or_lookup_contact(context, name, addr, 0x80i32, 0 as *mut libc::c_int);
name,
addr,
0x80i32,
0 as *mut libc::c_int,
);
(*qr_parsed).fingerprint = dc_strdup(fingerprint); (*qr_parsed).fingerprint = dc_strdup(fingerprint);
(*qr_parsed).invitenumber = dc_strdup(invitenumber); (*qr_parsed).invitenumber = dc_strdup(invitenumber);
(*qr_parsed).auth = dc_strdup(auth) (*qr_parsed).auth = dc_strdup(auth)
} }
} else if !addr.is_null() { } else if !addr.is_null() {
(*qr_parsed).state = 320i32; (*qr_parsed).state = 320i32;
(*qr_parsed).id = dc_add_or_lookup_contact( (*qr_parsed).id =
context, dc_add_or_lookup_contact(context, name, addr, 0x80i32, 0 as *mut libc::c_int)
name, } else if strstr(qr, b"http://\x00" as *const u8 as *const libc::c_char)
addr, == qr as *mut libc::c_char
0x80i32, || strstr(qr, b"https://\x00" as *const u8 as *const libc::c_char)
0 as *mut libc::c_int, == qr as *mut libc::c_char
)
} else if strstr(
qr,
b"http://\x00" as *const u8 as *const libc::c_char,
) == qr as *mut libc::c_char
|| strstr(
qr,
b"https://\x00" as *const u8 as *const libc::c_char,
) == qr as *mut libc::c_char
{ {
(*qr_parsed).state = 332i32; (*qr_parsed).state = 332i32;
(*qr_parsed).text1 = dc_strdup(qr) (*qr_parsed).text1 = dc_strdup(qr)
@@ -320,12 +280,6 @@ pub unsafe fn dc_check_qr(context: &Context, qr: *const libc::c_char) -> *mut dc
dc_add_device_msg(context, chat_id, device_msg); dc_add_device_msg(context, chat_id, device_msg);
} }
} }
}
}
}
}
}
}
free(addr as *mut libc::c_void); free(addr as *mut libc::c_void);
free(fingerprint as *mut libc::c_void); free(fingerprint as *mut libc::c_void);
free(payload as *mut libc::c_void); free(payload as *mut libc::c_void);