Handle the expected untagged IMAP BYE status on LOGOUT
This commit is contained in:
parent
fced79bfd2
commit
76190409fd
1 changed files with 31 additions and 2 deletions
|
|
@ -452,7 +452,7 @@ public class Geary.Imap.ClientSession : BaseObject {
|
|||
new Geary.State.Mapping(State.LOGGING_OUT, Event.CLOSE_MAILBOX, on_late_command),
|
||||
new Geary.State.Mapping(State.LOGGING_OUT, Event.LOGOUT, Geary.State.nop),
|
||||
new Geary.State.Mapping(State.LOGGING_OUT, Event.DISCONNECT, on_disconnect),
|
||||
new Geary.State.Mapping(State.LOGGING_OUT, Event.RECV_STATUS, on_dropped_response),
|
||||
new Geary.State.Mapping(State.LOGGING_OUT, Event.RECV_STATUS, on_logging_out_recv_status),
|
||||
new Geary.State.Mapping(State.LOGGING_OUT, Event.RECV_COMPLETION, on_logging_out_recv_completion),
|
||||
new Geary.State.Mapping(State.LOGGING_OUT, Event.RECV_ERROR, on_recv_error),
|
||||
new Geary.State.Mapping(State.LOGGING_OUT, Event.SEND_ERROR, on_send_error),
|
||||
|
|
@ -1352,7 +1352,8 @@ public class Geary.Imap.ClientSession : BaseObject {
|
|||
break;
|
||||
|
||||
case Status.BYE:
|
||||
debug("[%s] Received BYE from server: %s", to_string(), status_response.to_string());
|
||||
debug("[%s] Received unilateral BYE from server: %s",
|
||||
to_string(), status_response.to_string());
|
||||
|
||||
// nothing more we can do; drop connection and report disconnect to user
|
||||
cx.disconnect_async.begin(null, on_bye_disconnect_completed);
|
||||
|
|
@ -1556,6 +1557,34 @@ public class Geary.Imap.ClientSession : BaseObject {
|
|||
return State.LOGGING_OUT;
|
||||
}
|
||||
|
||||
private uint on_logging_out_recv_status(uint state,
|
||||
uint event,
|
||||
void *user,
|
||||
Object? object) {
|
||||
StatusResponse status_response = (StatusResponse) object;
|
||||
|
||||
switch (status_response.status) {
|
||||
case Status.OK:
|
||||
// some good-feeling text that doesn't need to be
|
||||
// handled when in this state
|
||||
break;
|
||||
|
||||
case Status.BYE:
|
||||
// We're expecting this bye, but don't disconnect yet
|
||||
// since we'll do that when the command is complete
|
||||
debug("[%s] Received bye from server on logout: %s",
|
||||
to_string(), status_response.to_string());
|
||||
break;
|
||||
|
||||
default:
|
||||
debug("[%s] Received error from server on logout: %s",
|
||||
to_string(), status_response.to_string());
|
||||
break;
|
||||
}
|
||||
|
||||
return state;
|
||||
}
|
||||
|
||||
private uint on_logging_out_recv_completion(uint state, uint event, void *user, Object? object) {
|
||||
StatusResponse completion_response = (StatusResponse) object;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue