Commit c91bb36337e4fb0b67f6e4d8d83be54116b6dcf8

Authored by Cédric RICARD
1 parent e413a2e0

Fix for smtp_client.anubis

Showing 1 changed file with 26 additions and 32 deletions   Show diff stats
calexium_lib/mail/smtp_client.anubis
@@ -406,9 +406,9 @@ define Maybe(One) @@ -406,9 +406,9 @@ define Maybe(One)
406 { 406 {
407 failure then failure, 407 failure then failure,
408 success(nb_write) then 408 success(nb_write) then
409 - if now - buffer_start_time > 3600 then 409 + if now - buffer_start_time > 120 then
410 // security to avoid queue blocking 410 // security to avoid queue blocking
411 - logger(logError, "sm_flush: TIMEOUT sending a 64kb buffer (taking more than 1 hour). SendMail canceled."); 411 + logger(logError, "sm_flush: TIMEOUT sending a " + length(buffer) + " byte-length buffer (taking more than 2 minutes). SendMail canceled.");
412 failure 412 failure
413 else 413 else
414 with buffer_size = length(buffer), 414 with buffer_size = length(buffer),
@@ -427,44 +427,38 @@ define SendContentResult @@ -427,44 +427,38 @@ define SendContentResult
427 SmtpClientSession session, 427 SmtpClientSession session,
428 Int start_time, 428 Int start_time,
429 Int so_far, 429 Int so_far,
  430 + Int last_reply_check,
430 (Int) -> One progress_report, 431 (Int) -> One progress_report,
431 (LogLevel, String) -> One logger 432 (LogLevel, String) -> One logger
432 ) = 433 ) =
433 - if receive_reply(weaken(target), [], session.enhanced_status, 0, logger) is  
434 - {  
435 - error then copy_error(so_far),  
436 - timeout then  
437 - if read_bytes(source, 65536) is 434 + if last_reply_check + 60 < now then
  435 + if receive_reply(weaken(target), [], session.enhanced_status, 0, logger) is
  436 + {
  437 + error then copy_error(so_far),
  438 + timeout then
  439 + sm_copy_Data_IO_to_Stream(source, target, session, start_time, so_far, now, progress_report, logger)
  440 + no_auth_method then copy_error(so_far), // impossible
  441 + bad_reply then copy_error(so_far),
  442 + reply(code, status, lines) then
  443 + smtp_reply(reply(code, status, lines))
  444 + }
  445 + else
  446 + if read_line(source, 1024) is
438 { 447 {
439 - failure then logger(logError, "send_content: failed to read input data_io"); copy_error(so_far),  
440 - time_out then logger(logError, "send_content: timeout reading input data_io"); copy_error(so_far),  
441 - success(buffer) then 448 + error then logger(logError, "send_content: failed to read input data_io"); copy_error(so_far),
  449 + timeout then logger(logError, "send_content: timeout reading input data_io"); copy_error(so_far),
  450 + eof then copy_ok(so_far),
  451 + ok(line) then
  452 + with buffer = to_byte_array((if nth(0, line) is success(char) then if char = '.' then "." + line else line else line)),
442 if sm_flush( buffer, weaken(target), now, logger ) is 453 if sm_flush( buffer, weaken(target), now, logger ) is
443 { 454 {
444 failure then copy_error(so_far), 455 failure then copy_error(so_far),
445 success(_) then 456 success(_) then
446 - progress_report(so_far + 65536);  
447 - sm_copy_Data_IO_to_Stream(source, target, session, start_time, so_far + 65536, progress_report, logger) 457 + with len = length(line) + 2, // 2 is for the CRLF
  458 + progress_report(so_far + len);
  459 + sm_copy_Data_IO_to_Stream(source, target, session, start_time, so_far + len, last_reply_check, progress_report, logger)
448 }, 460 },
449 -  
450 - truncated(buffer) then  
451 - with len = length(buffer),  
452 - if len = 0 then  
453 - copy_ok(so_far)  
454 - else  
455 - if sm_flush( buffer, weaken(target), now, logger ) is  
456 - {  
457 - failure then copy_error(so_far),  
458 - success(_) then  
459 - progress_report(so_far + len);  
460 - copy_ok(so_far + len)  
461 - }  
462 - },  
463 - no_auth_method then copy_error(so_far), // impossible  
464 - bad_reply then copy_error(so_far),  
465 - reply(code, status, lines) then  
466 - smtp_reply(reply(code, status, lines))  
467 - }. 461 + }.
468 462
469 define SendContentResult 463 define SendContentResult
470 sm_copy_Data_IO_List_to_Stream 464 sm_copy_Data_IO_List_to_Stream
@@ -482,7 +476,7 @@ define SendContentResult @@ -482,7 +476,7 @@ define SendContentResult
482 [] then copy_ok(so_far), 476 [] then copy_ok(so_far),
483 [ h . t ] then 477 [ h . t ] then
484 if rewind(h)(unique) then 478 if rewind(h)(unique) then
485 - with result = sm_copy_Data_IO_to_Stream(h, target, session, start_time, 0, progress_report, logger), 479 + with result = sm_copy_Data_IO_to_Stream(h, target, session, start_time, 0, now, progress_report, logger),
486 if result is copy_ok(written) then 480 if result is copy_ok(written) then
487 sm_copy_Data_IO_List_to_Stream(t, target, session, start_time, so_far + written, progress_report, logger) 481 sm_copy_Data_IO_List_to_Stream(t, target, session, start_time, so_far + written, progress_report, logger)
488 else 482 else