mirror of
https://github.com/chatmail/core.git
synced 2026-05-08 09:26:29 +03:00
Return Option<String> from read_autoconf_file
This commit is contained in:
@@ -1,10 +1,8 @@
|
|||||||
use libc::free;
|
|
||||||
use quick_xml;
|
use quick_xml;
|
||||||
use quick_xml::events::{BytesEnd, BytesStart, BytesText};
|
use quick_xml::events::{BytesEnd, BytesStart, BytesText};
|
||||||
|
|
||||||
use crate::constants::*;
|
use crate::constants::*;
|
||||||
use crate::context::Context;
|
use crate::context::Context;
|
||||||
use crate::dc_tools::*;
|
|
||||||
use crate::login_param::LoginParam;
|
use crate::login_param::LoginParam;
|
||||||
|
|
||||||
use super::read_autoconf_file;
|
use super::read_autoconf_file;
|
||||||
@@ -29,21 +27,17 @@ pub unsafe fn moz_autoconfigure(
|
|||||||
url: &str,
|
url: &str,
|
||||||
param_in: &LoginParam,
|
param_in: &LoginParam,
|
||||||
) -> Option<LoginParam> {
|
) -> Option<LoginParam> {
|
||||||
let xml_raw = read_autoconf_file(context, url);
|
let xml_raw = read_autoconf_file(context, url)?;
|
||||||
if xml_raw.is_null() {
|
|
||||||
return None;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Split address into local part and domain part.
|
// Split address into local part and domain part.
|
||||||
let p = param_in.addr.find("@");
|
let p = param_in.addr.find("@");
|
||||||
if p.is_none() {
|
if p.is_none() {
|
||||||
free(xml_raw as *mut libc::c_void);
|
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
let (in_emaillocalpart, in_emaildomain) = param_in.addr.split_at(p.unwrap());
|
let (in_emaillocalpart, in_emaildomain) = param_in.addr.split_at(p.unwrap());
|
||||||
let in_emaildomain = &in_emaildomain[1..];
|
let in_emaildomain = &in_emaildomain[1..];
|
||||||
|
|
||||||
let mut reader = quick_xml::Reader::from_str(as_str(xml_raw));
|
let mut reader = quick_xml::Reader::from_str(&xml_raw);
|
||||||
reader.trim_text(true);
|
reader.trim_text(true);
|
||||||
|
|
||||||
let mut buf = Vec::new();
|
let mut buf = Vec::new();
|
||||||
@@ -88,11 +82,9 @@ pub unsafe fn moz_autoconfigure(
|
|||||||
{
|
{
|
||||||
let r = moz_ac.out.to_string();
|
let r = moz_ac.out.to_string();
|
||||||
warn!(context, "Bad or incomplete autoconfig: {}", r,);
|
warn!(context, "Bad or incomplete autoconfig: {}", r,);
|
||||||
free(xml_raw as *mut libc::c_void);
|
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
|
|
||||||
free(xml_raw as *mut libc::c_void);
|
|
||||||
Some(moz_ac.out)
|
Some(moz_ac.out)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -28,7 +28,6 @@ pub unsafe fn outlk_autodiscover(
|
|||||||
url__: &str,
|
url__: &str,
|
||||||
param_in: &LoginParam,
|
param_in: &LoginParam,
|
||||||
) -> Option<LoginParam> {
|
) -> Option<LoginParam> {
|
||||||
let mut xml_raw: *mut libc::c_char = ptr::null_mut();
|
|
||||||
let mut url = url__.to_string();
|
let mut url = url__.to_string();
|
||||||
let mut outlk_ad = outlk_autodiscover_t {
|
let mut outlk_ad = outlk_autodiscover_t {
|
||||||
in_0: param_in,
|
in_0: param_in,
|
||||||
@@ -54,13 +53,8 @@ pub unsafe fn outlk_autodiscover(
|
|||||||
::std::mem::size_of::<outlk_autodiscover_t>(),
|
::std::mem::size_of::<outlk_autodiscover_t>(),
|
||||||
);
|
);
|
||||||
|
|
||||||
xml_raw = read_autoconf_file(context, &url);
|
if let Some(xml_raw) = read_autoconf_file(context, &url) {
|
||||||
if xml_raw.is_null() {
|
let mut reader = quick_xml::Reader::from_str(&xml_raw);
|
||||||
ok_to_continue = false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
let mut reader = quick_xml::Reader::from_str(as_str(xml_raw));
|
|
||||||
reader.trim_text(true);
|
reader.trim_text(true);
|
||||||
|
|
||||||
let mut buf = Vec::new();
|
let mut buf = Vec::new();
|
||||||
@@ -101,9 +95,11 @@ pub unsafe fn outlk_autodiscover(
|
|||||||
url = as_str(outlk_ad.config[5usize]).to_string();
|
url = as_str(outlk_ad.config[5usize]).to_string();
|
||||||
|
|
||||||
outlk_clean_config(&mut outlk_ad);
|
outlk_clean_config(&mut outlk_ad);
|
||||||
free(xml_raw as *mut libc::c_void);
|
|
||||||
xml_raw = ptr::null_mut();
|
|
||||||
i += 1;
|
i += 1;
|
||||||
|
} else {
|
||||||
|
ok_to_continue = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ok_to_continue {
|
if ok_to_continue {
|
||||||
@@ -114,13 +110,11 @@ pub unsafe fn outlk_autodiscover(
|
|||||||
{
|
{
|
||||||
let r = outlk_ad.out.to_string();
|
let r = outlk_ad.out.to_string();
|
||||||
warn!(context, "Bad or incomplete autoconfig: {}", r,);
|
warn!(context, "Bad or incomplete autoconfig: {}", r,);
|
||||||
free(xml_raw as *mut libc::c_void);
|
|
||||||
outlk_clean_config(&mut outlk_ad);
|
outlk_clean_config(&mut outlk_ad);
|
||||||
|
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
free(xml_raw as *mut libc::c_void);
|
|
||||||
outlk_clean_config(&mut outlk_ad);
|
outlk_clean_config(&mut outlk_ad);
|
||||||
if out_null {
|
if out_null {
|
||||||
None
|
None
|
||||||
|
|||||||
@@ -633,7 +633,7 @@ pub fn dc_stop_ongoing_process(context: &Context) {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn read_autoconf_file(context: &Context, url: &str) -> *mut libc::c_char {
|
pub fn read_autoconf_file(context: &Context, url: &str) -> Option<String> {
|
||||||
info!(context, "Testing {} ...", url);
|
info!(context, "Testing {} ...", url);
|
||||||
|
|
||||||
match reqwest::Client::new()
|
match reqwest::Client::new()
|
||||||
@@ -641,11 +641,11 @@ pub fn read_autoconf_file(context: &Context, url: &str) -> *mut libc::c_char {
|
|||||||
.send()
|
.send()
|
||||||
.and_then(|mut res| res.text())
|
.and_then(|mut res| res.text())
|
||||||
{
|
{
|
||||||
Ok(res) => unsafe { res.strdup() },
|
Ok(res) => Some(res),
|
||||||
Err(_err) => {
|
Err(_err) => {
|
||||||
info!(context, "Can\'t read file.",);
|
info!(context, "Can\'t read file.",);
|
||||||
|
|
||||||
std::ptr::null_mut()
|
None
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user