The initial implementation will include the URL of the relevant ICMS,
however I'd like to make the location of the ICMS discoverable using
lookup so the ICMS location can change over time.
Peter Firmstone wrote:
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.