package org.limewire.xmpp.client.impl;
import java.util.List;
import org.jivesoftware.smack.ConnectionConfiguration;
import org.limewire.friend.api.FriendConnectionConfiguration;
import org.limewire.io.UnresolvedIpPort;
/**
* Uses the list of default servers in the XMPPConnectionConfiguration to return
* a ConnectionConfiguration.
*/
public class FallbackConnectionConfigurationFactory implements ConnectionConfigurationFactory {
@Override
public boolean hasMore(FriendConnectionConfiguration connectionConfiguration, RequestContext requestContext) {
return requestContext.getNumRequests() < connectionConfiguration.getDefaultServers().size();
}
@Override
public ConnectionConfiguration getConnectionConfiguration(FriendConnectionConfiguration connectionConfiguration,
RequestContext requestContext) {
checkHasMore(connectionConfiguration, requestContext);
List<UnresolvedIpPort> defaultServers = connectionConfiguration.getDefaultServers();
UnresolvedIpPort defaultServer = defaultServers.get(requestContext.getNumRequests());
return new ConnectionConfiguration(defaultServer.getAddress(),
defaultServer.getPort(), connectionConfiguration.getServiceName());
}
private void checkHasMore(FriendConnectionConfiguration connectionConfiguration, RequestContext requestContext) {
if(!hasMore(connectionConfiguration, requestContext)) {
throw new IllegalStateException("no more ConnectionConfigurations");
}
}
}