package org.limewire.xmpp.client.impl.messages.connectrequest; import org.jivesoftware.smack.PacketListener; import org.jivesoftware.smack.filter.PacketFilter; import org.jivesoftware.smack.packet.Packet; import org.limewire.friend.api.FriendException; import org.limewire.friend.api.FriendPresence; import org.limewire.friend.api.feature.ConnectBackRequestFeature; import org.limewire.friend.api.feature.FeatureInitializer; import org.limewire.friend.api.feature.FeatureRegistry; import org.limewire.friend.api.feature.FeatureTransport; import org.limewire.logging.Log; import org.limewire.logging.LogFactory; import org.limewire.net.ConnectBackRequest; import org.limewire.net.ConnectBackRequestedEvent; import org.limewire.xmpp.client.impl.XMPPFriendConnectionImpl; import com.google.inject.Inject; import com.google.inject.assistedinject.Assisted; /** * Listens for {@link ConnectBackRequestIQ connect back request iqs} and fires * a {@link ConnectBackRequestedEvent}. */ public class ConnectBackRequestIQListener implements PacketListener, FeatureTransport<ConnectBackRequest> { private static final Log LOG = LogFactory.getLog(ConnectBackRequestIQListener.class); private final XMPPFriendConnectionImpl connection; private final Handler<ConnectBackRequest> connectBackRequestHandler; @Inject public ConnectBackRequestIQListener(@Assisted XMPPFriendConnectionImpl connection, FeatureTransport.Handler<ConnectBackRequest> connectBackRequestHandler, FeatureRegistry featureRegistry) { this.connection = connection; this.connectBackRequestHandler = connectBackRequestHandler; new ConnectBackRequestIQFeatureInitializer().register(featureRegistry); } @Override public void processPacket(Packet packet) { ConnectBackRequestIQ connectRequest = (ConnectBackRequestIQ)packet; LOG.debugf("processing connect request: {0}", connectRequest); connectBackRequestHandler.featureReceived(packet.getFrom(), connectRequest.getConnectBackRequest()); } @Override public void sendFeature(FriendPresence presence, ConnectBackRequest connectBackRequest) throws FriendException { ConnectBackRequestIQ connectRequest = new ConnectBackRequestIQ(connectBackRequest); connectRequest.setTo(presence.getPresenceId()); connectRequest.setFrom(connection.getLocalJid()); LOG.debugf("sending request: {0}", connectRequest); connection.sendPacket(connectRequest); } public PacketFilter getPacketFilter() { return new PacketFilter() { @Override public boolean accept(Packet packet) { return packet instanceof ConnectBackRequestIQ; } }; } private static class ConnectBackRequestIQFeatureInitializer implements FeatureInitializer { @Override public void register(FeatureRegistry registry) { registry.registerPublicInitializer(ConnectBackRequestFeature.ID, this); } @Override public void initializeFeature(FriendPresence friendPresence) { friendPresence.addFeature(new ConnectBackRequestFeature()); } @Override public void removeFeature(FriendPresence friendPresence) { friendPresence.removeFeature(ConnectBackRequestFeature.ID); } } }