/*
* Copyright 2009 Thomas Bocek
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package net.tomp2p.p2p;
/**
* This name was chosen over P2PConfiguration, as it already exists.
*
* @author Thomas Bocek
*/
public class RequestP2PConfiguration {
final private int minimumResults;
final private int maxFailure;
final private int parallelDiff;
// set to force either UDP or TCP
final private boolean forceUPD;
final private boolean forceTCP;
public RequestP2PConfiguration(int minimumResults, int maxFailure, int parallelDiff) {
this(minimumResults, maxFailure, parallelDiff, false, false);
}
/**
* Sets the P2P/DHT configuration and its stop conditions. Based on the message size, either UDP or TCP is used.
*
* @param minimumResults
* Stops the direct calls if m peers have been contacted
* @param maxFailure
* Stops the direct calls if f peers have failed
* @param parallelDiff
* Use parallelDiff + minimumResults parallel connections for the P2P/DHT operation
* @param forceUPD
* Flag to indicate that routing should be done with UDP instead of TCP
* @param forceTCP
* Flag to indicate that routing should be done with TCP instead of UDP
* @param senderCacheStrategy
* Merge DHT/P2P messages to reuse existing connections
*/
public RequestP2PConfiguration(final int minimumResults, final int maxFailure, final int parallelDiff,
final boolean forceUPD, final boolean forceTCP) {
if (minimumResults < 0 || maxFailure < 0 || parallelDiff < 0) {
throw new IllegalArgumentException("need to be larger or equals zero");
}
this.minimumResults = minimumResults;
this.maxFailure = maxFailure;
this.parallelDiff = parallelDiff;
this.forceUPD = forceUPD;
this.forceTCP = forceTCP;
}
public RequestP2PConfiguration adjustMinimumResult(int minimumResultsLow) {
return new RequestP2PConfiguration(Math.min(minimumResultsLow, minimumResults), maxFailure, parallelDiff,
forceUPD, forceTCP);
}
public int getMinimumResults() {
return minimumResults;
}
public int getMaxFailure() {
return maxFailure;
}
public int getParallelDiff() {
return parallelDiff;
}
public int getParallel() {
return minimumResults + parallelDiff;
}
public boolean isForceUPD() {
return forceUPD;
}
public boolean isForceTCP() {
return forceTCP;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("minRes=");
sb.append(minimumResults);
sb.append("maxFail=");
sb.append(maxFailure);
sb.append("pDiff=");
sb.append(parallelDiff);
return sb.toString();
}
}