As I mentioned in another post my task for GSoC 2012 will be to
implement PseudoTCP for ICE4J library.
It's already implemented in Google's Libjingle library. Main
protocol's logic is located in class:
I've examined it's code and I was able to run some tests of
communication in this protocol. Because target Java implementation
must be fully compatible with google's implementation I'm going to use
existing code during implementaion and testing(I have already some
code in c++ based on Libjingle's unit tests).
In my GSoC proposal I've posted class diagram, but I'm posting it here
again so that everyone can see it.
It describes how I plan to implement PseudoTCP in Java. As a starting
point I'll "copy paste" pseudoTcp logic class to java and I'm going to
make each method working the same way as in Libjingle's
implementation. Maybe some kind of unittests. Later I'll adopt it to
java reality and make some necessary optimizations.
After it's implemented it must be integrated with ICE4J library. At
first I was thinking about adding new transport type, but now I think
that is not the right way. Probably this should be resolved at some
higher application level. Maybe provide some wrapper class for
DatagramSocket. I mean that when application wants to use pseudoTcp it
asks agent about candidates using different harvesters for UDP
transport type. When ice discovery is finished it should wrap
datagramSocket into pseudoTCP socket and make use of reliable data
transfer over UDP.
Regards eventual new transport type in ICE4j I'm not sure how
connectivity checks are performed in ICE discovery. Is UDP
connectivity enough to make pseudoTCP connection ? Or maybe there have
to be established both ways UDP connectivity ? Or maybe it should test
if on another "UDP side" there is pseudoTCP implementation running
(handshake should be performed)?
As to the schedule I plan to make it before the official schedule and
deadlines - starting tomorrow (in case there won't be any nasty
problems as usual)
Looking forward for some comments.