Problem with Aux Data error recovery (Windows)

Larry Chace (RLC1@cornell.edu)
Fri, 8 May 1998 10:07:26 -0400


As the original author of the "Auxiliary Data Transporter", the mechanism
in CU-SeeMe that handles the transmission, reception, and error recovery
for data streams such as Chat or Talk that are _other_ than audio, video,
or conference control, I am embarrassed to report a bug that has been
present for nearly 3 years.

The code was orignally written for use with the Mac version of CU-SeeMe,
since that is all we had back then. When I re-wrote it so that it could
also be compiled for use with Windows (16-bit, back then), I introduced a
small error ("HTONS" instead of "HTONL" in one place) in the routine that
reports back to the original sender than an entire Aux Data "item" has been
lost.

It is _possible_ (I hope!) that this coding error did _not_ actually result
in incorrect operation back with the 16-bit version, but it certainly
_does_ result in an error now with 32-bit versions.

The effect is that a Windows recipient of an Aux Data item (such as a line
of Chat) might fail to receive the item. Short items like Chat lines are
actually sent 3 times, and so if the recipient fails to receive all 3
copies but does manage to later recieve a report that the item had been
sent, then the recipient will construct an invalid request for
re-transmission of the item.

Since the error report is invalid, the original sender will ignore it and
will not re-send the missed item.

Note that for this to happen, the recipient must have missed all 3 original
copies but still got the later "availability" report. The likelihood of
this happening is "small" (for some values of "small")! ;-)

(By the way, if you are using the "GeekPC" chatting program, then you will
also _never_ have the benefit of error recovery since that program runs
entirely "out of band" and does not actually use the Aux Data Transporter.)

After almost 3 years, it was wierd to open up the code and find this error.
Many thanks to Brian Godette for sending us a packet trace and raising a
question about the (in)validity of a particular field.

And I was _sure_ that the Aux Data Transporter was correct! Sigh! ;-)

Larry Chace (RLC1@cornell.edu)