MBOX-Line: From asuth at mozilla.com  Fri Mar  7 07:05:48 2014
To: imap-protocol@u.washington.edu
From: Andrew Sutherland <asuth@mozilla.com>
Date: Fri Jun  8 12:34:52 2018
Subject: [Imap-protocol] Is it okay/common for servers to ignore commands
 sent before the greeting? (gmail seems to?)
Message-ID: <5319E04C.3070105@mozilla.com>

We're seeing a problem in the Firefox OS Gaia e-mail app where if we 
manage to send our "A1 CAPABILITY" request to the gmail IMAP server 
(initial-TLS imaps/993) before it sends its greeting, it acts like it 
never hears the request.  Our not-so-clever state machine hangs until 
the connection times out.

There's more details and pcap dumps at https://bugzil.la/977867#c21 but 
basically we sometimes manage to get that request in the same TCP packet 
as the conclusion of TLS setup.  The TCP/TLS packet with the server 
greeting ACKs that packet, so it's quite conceivable our request is 
managing to fall into a very specific edge case/race.

The spec does not seem to have a final word on this, although the state 
flow diagram in http://tools.ietf.org/html/rfc3501#section-3 does seem 
to imply that it's bad form to not wait for the server greeting.  While 
I think it's clear that for gmail we need to wait for the server 
greeting, I am wondering if this is just an unusual complication/bug of 
gmail's likely more complicated server architecture.  I'd expect a 
server intentionally being pedantic to issue a NO or BAD request...

Thoughts / has anyone seen servers that intentionally or accidentally 
get upset in cases like this?

Thanks,
Andrew

PS: We do have a lot of round-trip fat in our connection establishment, 
so it's not the end of the world to explicitly wait for the server 
greeting in all cases, but if it's just gmail (and we appropriately add 
some improved timeout logic that triggers a persistent quirk for the 
server), I could see it make sense to continue not waiting for the greeting.

