package org.chartsy.chatsy.chatimpl.plugin.gateways;
import org.jivesoftware.smack.PacketCollector;
import org.jivesoftware.smack.SmackConfiguration;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.filter.PacketIDFilter;
import org.jivesoftware.smack.packet.IQ;
import org.jivesoftware.smack.provider.IQProvider;
import org.chartsy.chatsy.chat.ChatsyManager;
import org.xmlpull.v1.XmlPullParser;
public class Gateway extends IQ
{
private String jid;
private String username;
public String getJid()
{
return jid;
}
public void setJid(String jid)
{
this.jid = jid;
}
public String getUsername()
{
return username;
}
public void setUsername(String username)
{
this.username = username;
}
public static final String ELEMENT_NAME = "query";
public static final String NAMESPACE = "jabber:iq:gateway";
public String getChildElementXML()
{
StringBuilder buf = new StringBuilder();
buf.append("<query xmlns=\"").append(NAMESPACE).append("\">");
buf.append("<prompt>").append(username).append("</prompt>");
buf.append("</query>");
return buf.toString();
}
public static class Provider implements IQProvider
{
public Provider()
{
super();
}
public IQ parseIQ(XmlPullParser parser) throws Exception
{
Gateway version = new Gateway();
boolean done = false;
while (!done)
{
int eventType = parser.next();
if (eventType == XmlPullParser.START_TAG)
{
if (parser.getName().equals("jid"))
{
version.setJid(parser.nextText());
}
else if (parser.getName().equals("username"))
{
version.setUsername(parser.nextText());
}
}
else if (eventType == XmlPullParser.END_TAG)
{
if (parser.getName().equals(ELEMENT_NAME))
{
done = true;
}
}
}
return version;
}
}
public static String getJID(String serviceName, String username) throws XMPPException
{
Gateway registration = new Gateway();
registration.setType(IQ.Type.SET);
registration.setTo(serviceName);
registration.setUsername(username);
XMPPConnection con = ChatsyManager.getConnection();
PacketCollector collector = con.createPacketCollector(new PacketIDFilter(registration.getPacketID()));
con.sendPacket(registration);
Gateway response = (Gateway)collector.nextResult(SmackConfiguration.getPacketReplyTimeout());
collector.cancel();
if (response == null)
{
throw new XMPPException("Server timed out");
}
if (response.getType() == IQ.Type.ERROR)
{
throw new XMPPException("Error registering user", response.getError());
}
return response.getJid();
}
}