[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: draft-nerenberg-imap-binary-00.txt



From:           	Lyndon Nerenberg <lyndon@xxxxxxxxxxxxxxxxxxx>
> > I believe therefore that this functionality belongs in a new command, e.g.
> > something like
> > 	tag XFETCH (BINARY) 1 BODY[x.y]
> > 	tag XFETCH (CHARSET=UTF-8) 1 BODY[x.y]
> > 	tag XFETCH (BINARY CHANNEL=[1.2.3.4]:432) 1 BODY[x.y]
> > etc.  These examples are to demonstrate the concept; the exact syntax to be
> > determined.
> 
> I hadn't realized that you and Steve had been discussing this, otherwise
> I would have held off with BINARY for a bit. I like the XFETCH architecture,
> however I'm not convinced (yet) that a server should have to implement
> external channel support just to get BINARY. At this point I think the

i would like to go on the record as one imap client implementor that 
would be very much interested in a BINARY FETCH. we have no 
use for CHANNEL at the moment... so i think these 2 concepts 
definitely should be separated.

i'd also like to enumerate some of the problems i see with 
CHANNEL as sketched out in the example above.

transport protocol
it isn't too clear from the example whether udp or tcp transport is 
envisioned. i think that the original impetus for this proposal within 
vpim was to enable the voice data to be delivered via voip (that is, 
rtp over udp.) in that context, tcp transport doesn't gain anything.

if udp is used for delivery, you then have to consider what happens 
when a packet gets dropped. voip uses fancy error-tolerant codecs 
to handle this case. the codec currently on the table for ivm (gsm) 
has no such abilities, so when a packet gets dropped, the rest of 
the file will be corrupted. 

of course, you could have the server translate the voice data into a 
fancy error-tolerant codec on the fly. probably a good use for the 
data-conversion feature of XFETCH?

nat
embedding ip addresses and port numbers within tcp payload is a 
sure way to break network address translators. it also makes imap 
dependant on ipv4, complicating the transition to ipv6. these are 
two reasons to avoid it altogether.

if ip addresses and ports must be embedded, you should at least 
try to avoid the minor disaster that ftp creates for nat by always 0-
padding the ip address octets and the port so that they always 
come out to exactly the same length. for example, instead of:

tag XFETCH (BINARY CHANNEL=[1.2.3.4]:432) 1 BODY[x.y]

you'd have:

tag XFETCH (BINARY CHANNEL=[001.002.003.004]:00432) 1 
BODY[x.y]

(sorry about the line wrap.)
this will still break nat, of course, but at least it will be easier to 
write a custom nat protocol handler for imap.

"The battle 
 for mental territory 
            is glory. 
            End of story."
                           --KRS-ONE