mirror of
https://github.com/chatmail/core.git
synced 2026-04-26 09:56:35 +03:00
make smtp/imap connect() return bool instead of c-int
This commit is contained in:
@@ -806,7 +806,7 @@ pub unsafe fn dc_job_do_DC_JOB_CONFIGURE_IMAP(context: &Context, _job: *mut dc_j
|
|||||||
r_0,
|
r_0,
|
||||||
);
|
);
|
||||||
free(r_0 as *mut libc::c_void);
|
free(r_0 as *mut libc::c_void);
|
||||||
if 0 != context
|
if context
|
||||||
.inbox
|
.inbox
|
||||||
.read()
|
.read()
|
||||||
.unwrap()
|
.unwrap()
|
||||||
@@ -854,7 +854,7 @@ pub unsafe fn dc_job_do_DC_JOB_CONFIGURE_IMAP(context: &Context, _job: *mut dc_j
|
|||||||
r_1,
|
r_1,
|
||||||
);
|
);
|
||||||
free(r_1 as *mut libc::c_void);
|
free(r_1 as *mut libc::c_void);
|
||||||
if 0 != context
|
if context
|
||||||
.inbox
|
.inbox
|
||||||
.read()
|
.read()
|
||||||
.unwrap()
|
.unwrap()
|
||||||
@@ -896,7 +896,7 @@ pub unsafe fn dc_job_do_DC_JOB_CONFIGURE_IMAP(context: &Context, _job: *mut dc_j
|
|||||||
r_2,
|
r_2,
|
||||||
);
|
);
|
||||||
free(r_2 as *mut libc::c_void);
|
free(r_2 as *mut libc::c_void);
|
||||||
if 0 != context
|
if context
|
||||||
.inbox
|
.inbox
|
||||||
.read()
|
.read()
|
||||||
.unwrap()
|
.unwrap()
|
||||||
@@ -964,7 +964,7 @@ pub unsafe fn dc_job_do_DC_JOB_CONFIGURE_IMAP(context: &Context, _job: *mut dc_j
|
|||||||
0i32 as uintptr_t,
|
0i32 as uintptr_t,
|
||||||
);
|
);
|
||||||
/* try to connect to SMTP - if we did not got an autoconfig, the first try was SSL-465 and we do a second try with STARTTLS-587 */
|
/* try to connect to SMTP - if we did not got an autoconfig, the first try was SSL-465 and we do a second try with STARTTLS-587 */
|
||||||
if 0 == context
|
if context
|
||||||
.smtp
|
.smtp
|
||||||
.clone()
|
.clone()
|
||||||
.lock()
|
.lock()
|
||||||
@@ -1010,7 +1010,7 @@ pub unsafe fn dc_job_do_DC_JOB_CONFIGURE_IMAP(context: &Context, _job: *mut dc_j
|
|||||||
r_3,
|
r_3,
|
||||||
);
|
);
|
||||||
free(r_3 as *mut libc::c_void);
|
free(r_3 as *mut libc::c_void);
|
||||||
if 0 == context
|
if context
|
||||||
.smtp
|
.smtp
|
||||||
.clone()
|
.clone()
|
||||||
.lock()
|
.lock()
|
||||||
@@ -1064,7 +1064,7 @@ pub unsafe fn dc_job_do_DC_JOB_CONFIGURE_IMAP(context: &Context, _job: *mut dc_j
|
|||||||
free(r_4
|
free(r_4
|
||||||
as
|
as
|
||||||
*mut libc::c_void);
|
*mut libc::c_void);
|
||||||
if 0 == context
|
if context
|
||||||
.smtp
|
.smtp
|
||||||
.clone()
|
.clone()
|
||||||
.lock()
|
.lock()
|
||||||
@@ -1735,8 +1735,8 @@ pub unsafe fn dc_connect_to_configured_imap(context: &Context, imap: &Imap) -> l
|
|||||||
b"configured_\x00" as *const u8 as *const libc::c_char,
|
b"configured_\x00" as *const u8 as *const libc::c_char,
|
||||||
);
|
);
|
||||||
/*the trailing underscore is correct*/
|
/*the trailing underscore is correct*/
|
||||||
if !(0 == imap.connect(context, param)) {
|
if imap.connect(context, param) {
|
||||||
ret_connected = 2i32;
|
ret_connected = 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dc_loginparam_unref(param);
|
dc_loginparam_unref(param);
|
||||||
|
|||||||
@@ -317,7 +317,7 @@ unsafe fn dc_job_do_DC_JOB_SEND(context: &Context, job: &mut dc_job_t) {
|
|||||||
);
|
);
|
||||||
let connected = context.smtp.lock().unwrap().connect(context, loginparam);
|
let connected = context.smtp.lock().unwrap().connect(context, loginparam);
|
||||||
dc_loginparam_unref(loginparam);
|
dc_loginparam_unref(loginparam);
|
||||||
if 0 == connected {
|
if !connected {
|
||||||
dc_job_try_again_later(job, 3i32, 0 as *const libc::c_char);
|
dc_job_try_again_later(job, 3i32, 0 as *const libc::c_char);
|
||||||
current_block = 14216916617354591294;
|
current_block = 14216916617354591294;
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
36
src/imap.rs
36
src/imap.rs
@@ -372,9 +372,9 @@ impl Imap {
|
|||||||
self.config.read().unwrap().should_reconnect
|
self.config.read().unwrap().should_reconnect
|
||||||
}
|
}
|
||||||
|
|
||||||
fn setup_handle_if_needed(&self, context: &Context) -> libc::c_int {
|
fn setup_handle_if_needed(&self, context: &Context) -> bool {
|
||||||
if self.config.read().unwrap().imap_server.is_empty() {
|
if self.config.read().unwrap().imap_server.is_empty() {
|
||||||
return 0;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if self.should_reconnect() {
|
if self.should_reconnect() {
|
||||||
@@ -383,7 +383,7 @@ impl Imap {
|
|||||||
|
|
||||||
if self.is_connected() && self.stream.read().unwrap().is_some() {
|
if self.is_connected() && self.stream.read().unwrap().is_some() {
|
||||||
self.config.write().unwrap().should_reconnect = false;
|
self.config.write().unwrap().should_reconnect = false;
|
||||||
return 1;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
let server_flags = self.config.read().unwrap().server_flags;
|
let server_flags = self.config.read().unwrap().server_flags;
|
||||||
@@ -427,7 +427,7 @@ impl Imap {
|
|||||||
};
|
};
|
||||||
client.authenticate("XOAUTH2", &auth)
|
client.authenticate("XOAUTH2", &auth)
|
||||||
} else {
|
} else {
|
||||||
return 0;
|
return false;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
client.login(imap_user, imap_pw)
|
client.login(imap_user, imap_pw)
|
||||||
@@ -448,7 +448,7 @@ impl Imap {
|
|||||||
err
|
err
|
||||||
);
|
);
|
||||||
|
|
||||||
return 0;
|
return false;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -458,13 +458,13 @@ impl Imap {
|
|||||||
Ok((session, stream)) => {
|
Ok((session, stream)) => {
|
||||||
*self.session.lock().unwrap() = Some(session);
|
*self.session.lock().unwrap() = Some(session);
|
||||||
*self.stream.write().unwrap() = Some(stream);
|
*self.stream.write().unwrap() = Some(stream);
|
||||||
1
|
true
|
||||||
}
|
}
|
||||||
Err((err, _)) => {
|
Err((err, _)) => {
|
||||||
log_event!(context, Event::ERROR_NETWORK, 0, "Cannot login ({})", err);
|
log_event!(context, Event::ERROR_NETWORK, 0, "Cannot login ({})", err);
|
||||||
self.unsetup_handle(context);
|
self.unsetup_handle(context);
|
||||||
|
|
||||||
0
|
false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -522,17 +522,17 @@ impl Imap {
|
|||||||
cfg.watch_folder = None;
|
cfg.watch_folder = None;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn connect(&self, context: &Context, lp: *const dc_loginparam_t) -> libc::c_int {
|
pub fn connect(&self, context: &Context, lp: *const dc_loginparam_t) -> bool {
|
||||||
if lp.is_null() {
|
if lp.is_null() {
|
||||||
return 0;
|
return false;
|
||||||
}
|
}
|
||||||
let lp = unsafe { *lp };
|
let lp = unsafe { *lp };
|
||||||
if lp.mail_server.is_null() || lp.mail_user.is_null() || lp.mail_pw.is_null() {
|
if lp.mail_server.is_null() || lp.mail_user.is_null() || lp.mail_pw.is_null() {
|
||||||
return 0;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if self.is_connected() {
|
if self.is_connected() {
|
||||||
return 1;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
@@ -552,9 +552,9 @@ impl Imap {
|
|||||||
config.server_flags = server_flags;
|
config.server_flags = server_flags;
|
||||||
}
|
}
|
||||||
|
|
||||||
if self.setup_handle_if_needed(context) == 0 {
|
if self.setup_handle_if_needed(context) {
|
||||||
self.free_connect_params();
|
self.free_connect_params();
|
||||||
return 0;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
let teardown: bool;
|
let teardown: bool;
|
||||||
@@ -584,10 +584,10 @@ impl Imap {
|
|||||||
context,
|
context,
|
||||||
Event::IMAP_CONNECTED,
|
Event::IMAP_CONNECTED,
|
||||||
0,
|
0,
|
||||||
"IMAP-LOGIN as {} ok",
|
"IMAP-LOGIN as {}, capabilities: {}",
|
||||||
as_str(lp.mail_user),
|
as_str(lp.mail_user),
|
||||||
|
caps_list,
|
||||||
);
|
);
|
||||||
info!(context, 0, "IMAP-capabilities:{}", caps_list);
|
|
||||||
|
|
||||||
self.config.write().unwrap().can_idle = can_idle;
|
self.config.write().unwrap().can_idle = can_idle;
|
||||||
self.config.write().unwrap().has_xlist = has_xlist;
|
self.config.write().unwrap().has_xlist = has_xlist;
|
||||||
@@ -605,9 +605,9 @@ impl Imap {
|
|||||||
if teardown {
|
if teardown {
|
||||||
self.unsetup_handle(context);
|
self.unsetup_handle(context);
|
||||||
self.free_connect_params();
|
self.free_connect_params();
|
||||||
0
|
false
|
||||||
} else {
|
} else {
|
||||||
1
|
true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1175,7 +1175,7 @@ impl Imap {
|
|||||||
// check for new messages. fetch_from_single_folder() has the side-effect that messages
|
// check for new messages. fetch_from_single_folder() has the side-effect that messages
|
||||||
// are also downloaded, however, typically this would take place in the FETCH command
|
// are also downloaded, however, typically this would take place in the FETCH command
|
||||||
// following IDLE otherwise, so this seems okay here.
|
// following IDLE otherwise, so this seems okay here.
|
||||||
if self.setup_handle_if_needed(context) != 0 {
|
if self.setup_handle_if_needed(context) {
|
||||||
if let Some(ref watch_folder) = self.config.read().unwrap().watch_folder {
|
if let Some(ref watch_folder) = self.config.read().unwrap().watch_folder {
|
||||||
if 0 != self.fetch_from_single_folder(context, watch_folder) {
|
if 0 != self.fetch_from_single_folder(context, watch_folder) {
|
||||||
do_fake_idle = false;
|
do_fake_idle = false;
|
||||||
|
|||||||
14
src/smtp.rs
14
src/smtp.rs
@@ -47,14 +47,14 @@ impl Smtp {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Connect using the provided login params
|
/// Connect using the provided login params
|
||||||
pub fn connect(&mut self, context: &Context, lp: *const dc_loginparam_t) -> usize {
|
pub fn connect(&mut self, context: &Context, lp: *const dc_loginparam_t) -> bool {
|
||||||
if lp.is_null() {
|
if lp.is_null() {
|
||||||
return 0;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if self.is_connected() {
|
if self.is_connected() {
|
||||||
warn!(context, 0, "SMTP already connected.");
|
warn!(context, 0, "SMTP already connected.");
|
||||||
return 1;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Safe because we checked for null pointer above.
|
// Safe because we checked for null pointer above.
|
||||||
@@ -78,7 +78,7 @@ impl Smtp {
|
|||||||
|
|
||||||
if self.from.is_none() {
|
if self.from.is_none() {
|
||||||
// TODO: print error
|
// TODO: print error
|
||||||
return 0;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
let domain = unsafe {
|
let domain = unsafe {
|
||||||
@@ -103,7 +103,7 @@ impl Smtp {
|
|||||||
let send_pw = as_str(lp.send_pw);
|
let send_pw = as_str(lp.send_pw);
|
||||||
let access_token = dc_get_oauth2_access_token(context, addr, send_pw, 0);
|
let access_token = dc_get_oauth2_access_token(context, addr, send_pw, 0);
|
||||||
if access_token.is_none() {
|
if access_token.is_none() {
|
||||||
return 0;
|
return false;
|
||||||
}
|
}
|
||||||
let user = as_str(lp.send_user);
|
let user = as_str(lp.send_user);
|
||||||
|
|
||||||
@@ -137,11 +137,11 @@ impl Smtp {
|
|||||||
"SMTP-LOGIN as {} ok",
|
"SMTP-LOGIN as {} ok",
|
||||||
as_str(lp.send_user),
|
as_str(lp.send_user),
|
||||||
);
|
);
|
||||||
1
|
true
|
||||||
}
|
}
|
||||||
Err(err) => {
|
Err(err) => {
|
||||||
warn!(context, 0, "SMTP: failed to establish connection {:?}", err);
|
warn!(context, 0, "SMTP: failed to establish connection {:?}", err);
|
||||||
0
|
false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user