Hi Sim & Gregg,

I just wanted to break this issue out of the original thread and summarise our findings to provide a way forward, for solving one of the original questions posed.

I want the implementation to be invisible to existing client and service implementation and to just work.

I would like to start by implementing the Natblaster technique of traversing NAT's with TCP, using JAVA. I'm not 100% how to fit this in with JERI, however the following classes appear relevant.

   * net.jini.jeri.connection.ServerConnectionManager
   * net.jini.jeri.connection.ConnectionManager


I will need new ServerEndpoint and Endpoint implementations, some observations:

   * The Server will need to be aware of the Client's Public NAT IP
     Address and recieve port.
   * The Client will need to be aware of the Server's Public NAT IP
     Address and recieve port.
   * A public service will need to be provided - Initial Connection
     Mediator Service (ICMS)?
   * The Client will need to contact the Initial Connection Mediator
     Service and request a connection to a Nat-ed Service.  This would
     need to be performed as an implementation detail of the
     Endpoint.newRequest() method.
   * The NAT-ed Service would need to be listening using the
     ServerEndpoint implementation, which would be polling the ICMS to
     maintain a connection.
   * The ServerEndpoint implementation would listen for and intercept
     connection negotiation requests.
   * The ServerEndpoint implementation would pass the communication
     through to the callback object once the connection is established.
   * Once a connection session was negotiated successfully, the client
     Endpoint.newRequest() method would return.
   * TLS will need to be utilised.


Any helpful advise would be much appreciated, this should allow the marshalled object to find it's way home.

BR,

Peter.

Resources:

   * http://netresearch.ics.uci.edu/kfujii/jpcap/doc/index.html --
     Multi Platform Java library for reading and writing packets, java
equivalent of libpcap and libnet. * http://natblaster.sourceforge.net/paper/natblaster.pdf --
     Techniques for traversing NAT with TCP peer to peer, includes a
     implementation in C.



Reply via email to