My effort to connect two copies of sip-communicator failed. I traced it down to one side registering with address 127.0.0.1. The problem comes
NetworkAddressManager.getPublicAddressFor(int) line: 424
InetAddress localHost = null;
localHost = InetAddress.getLocalHost();
result = new InetSocketAddress(localHost, port);
However, the method getLocalHost() does not give public address values,
it just reads what /etc/hosts says.
See for example: http://www.jguru.com/faq/view.jsp?EID=790132.
Moveover, the concept of a host IP address isn't meaningful when machines have multiple network interfaces. DNS maps a name to an IP address, but a machine can have more than one name/address pair.
On the other hand, the overwhelming majority of sip-communicator users will have one IP address. Fixes shouldn't make it harder for most users.
One workaround is to hope that users can edit /etc/hosts when the code above is triggered. This will be mostly Linux I guess.
One code workaround is to scan all the network interfaces and pick one that isn't 127.0.0.1.
A fix would pick one address as above but set it as the default during config, allow users to override it then, and use the configured value in getPublicAddressFor().
A better fix would bind a socket to the configured sip-proxy and read the local address off the bound socket with getLocalAddress(). This would cover both the normal case of sip-communicator and the extra normal case where the sip-communicator is on 127.0.0.1. Well assuming that getLocalAddress() works...
Hope this helps,