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.