Add Public IP Disco for STUN Services

git-svn-id: http://svn.igniterealtime.org/svn/repos/smack/trunk@7681 b35dd754-fafc-0310-a699-88a17e54d16e
This commit is contained in:
Thiago Camargo 2007-03-23 03:54:46 +00:00 committed by thiago
parent f19bedac1f
commit 2e06fdad64
2 changed files with 36 additions and 1 deletions

View File

@ -35,6 +35,10 @@ import org.xmlpull.v1.XmlPullParser;
import java.util.Iterator;
import java.util.List;
import java.util.ArrayList;
import java.util.Enumeration;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.net.InetAddress;
/**
* STUN IQ Packet used to request and retrieve a STUN server and port to make p2p connections easier. STUN is usually used by Jingle Media Transmission between two parties that are behind NAT.
@ -49,6 +53,8 @@ public class STUN extends IQ {
private List<StunServerAddress> servers = new ArrayList<StunServerAddress>();
private String publicIp = null;
/**
* Element name of the packet extension.
*/
@ -83,6 +89,24 @@ public class STUN extends IQ {
return servers;
}
/**
* Get Public Ip returned from the XMPP server
*
* @return
*/
public String getPublicIp() {
return publicIp;
}
/**
* Set Public Ip returned from the XMPP server
*
* @param publicIp
*/
private void setPublicIp(String publicIp) {
this.publicIp = publicIp;
}
/**
* Get the Child Element XML of the Packet
*
@ -138,6 +162,15 @@ public class STUN extends IQ {
if (host != null && port != null)
iq.servers.add(new StunServerAddress(host, port));
}
else if (elementName.equals("publicip")) {
String host = null;
for (int i = 0; i < parser.getAttributeCount(); i++) {
if (parser.getAttributeName(i).equals("ip"))
host = parser.getAttributeValue(i);
}
if (host != null && !host.equals(""))
iq.setPublicIp(host);
}
}
else if (eventType == XmlPullParser.END_TAG) {
if (parser.getName().equals(ELEMENT_NAME)) {

View File

@ -171,7 +171,9 @@ public class STUNResolverTest extends SmackTestCase {
STUN stun = STUN.getSTUNServer(getConnection(0));
for (STUN.StunServerAddress stunServerAddress : stun.getServers())
System.out.println(stunServerAddress.getServer() + ":" + stunServerAddress.getPort());
System.out.println(stun.getPublicIp());
}
/**