In the absence of any Chrome debug, I have continue with some very detailed analyses of PCAP traces from both Chrome and from The TURN server, and have a theory as to what makes it work/fail.
When setting up a new Channel, Chrome appears to need to see a successful bind-user going both ways before it will accept a channel as being valid (quite reasonable).
When the sequence goes as follows, all is OK:
- Chrome receives Bind-User from remote via relay
- Chrome sends CreatePerm to relay
- Chrome sends Bind-OK to remote via relay
- Chrome receives CreatePerm-OK from relay
- Chrome sends Bind-User to remote via relay
- Chrome receives Bind-OK from remote via relay
- Chrome receives Bind-User from remote via relay
- Chrome sends Bind-OK to remote via relay
(The order of the last 2 binds/responses is unimportant.)
When the sequence goes as follows, all is UNHAPPY:
- Chrome receives Bind-User from remote via relay
- Chrome sends CreatePerm to relay
- Chrome sends Bind-OK to remote via relay
- Chrome receives CreatePerm-OK from relay
- Chrome sends Bind-User to remote via relay
- Chrome receives Bind-OK from remote via relay
(Note that the remote does not send a repeated Bind-User.)
The implication is the Chrome expects a Bind-User from the remote end AFTER the CreatePerm has completed, and that it is "forgetting" that is already received and acknowledged one. In fact, there is no reason for the far-end to send a 2nd Bind-User unless the first expires. In fact the only reason that the working example works is that the slow-Internet link causes the remote-end to retransmit the first Bind-User because the response is sufficiently late that it thinks it has gone missing!
Comments? Am I missing something? Is the above making any sense?
Thanks.
Steve