package org.limewire.xmpp.client.impl.messages.address; import org.jivesoftware.smack.PacketListener; import org.jivesoftware.smack.filter.PacketFilter; import org.jivesoftware.smack.packet.IQ; import org.jivesoftware.smack.packet.Packet; import org.limewire.friend.api.FriendException; import org.limewire.friend.api.FriendPresence; import org.limewire.friend.api.feature.FeatureTransport; import org.limewire.io.Address; import org.limewire.logging.Log; import org.limewire.logging.LogFactory; import org.limewire.net.address.AddressFactory; import org.limewire.xmpp.client.impl.XMPPFriendConnectionImpl; import com.google.inject.assistedinject.Assisted; import com.google.inject.Inject; public class AddressIQListener implements PacketListener, FeatureTransport<Address> { private static final Log LOG = LogFactory.getLog(AddressIQListener.class); private final XMPPFriendConnectionImpl connection; private final AddressFactory factory; private final Handler<Address> handler; @Inject public AddressIQListener(@Assisted XMPPFriendConnectionImpl connection, @Assisted AddressFactory factory, Handler<Address> handler) { this.connection = connection; this.factory = factory; this.handler = handler; } public void processPacket(Packet packet) { AddressIQ iq = (AddressIQ)packet; if(iq.getType().equals(IQ.Type.SET)) { handler.featureReceived(iq.getFrom(), iq.getAddress()); } } public PacketFilter getPacketFilter() { return new PacketFilter(){ public boolean accept(Packet packet) { return packet instanceof AddressIQ; } }; } public void sendFeature(FriendPresence presence, Address address) throws FriendException { LOG.debugf("sending new address to {0}", presence); AddressIQ queryResult = new AddressIQ(address, factory); queryResult.setTo(presence.getPresenceId()); queryResult.setFrom(connection.getLocalJid()); queryResult.setType(IQ.Type.SET); connection.sendPacket(queryResult); } }