public class org.apache.http.impl.client.AIMDBackoffManager extends java.lang.Object implements org.apache.http.client.BackoffManager
{
private final org.apache.http.pool.ConnPoolControl connPerRoute;
private final org.apache.http.impl.client.Clock clock;
private final java.util.Map lastRouteProbes;
private final java.util.Map lastRouteBackoffs;
private long coolDown;
private double backoffFactor;
private int cap;
public void <init>(org.apache.http.pool.ConnPoolControl)
{
org.apache.http.impl.client.AIMDBackoffManager v;
org.apache.http.pool.ConnPoolControl v;
org.apache.http.impl.client.SystemClock v;
v := @this: org.apache.http.impl.client.AIMDBackoffManager;
v := @parameter: org.apache.http.pool.ConnPoolControl;
v = new org.apache.http.impl.client.SystemClock;
specialinvoke v.<org.apache.http.impl.client.SystemClock: void <init>()>();
specialinvoke v.<org.apache.http.impl.client.AIMDBackoffManager: void <init>(org.apache.http.pool.ConnPoolControl,org.apache.http.impl.client.Clock)>(v, v);
return;
}
void <init>(org.apache.http.pool.ConnPoolControl, org.apache.http.impl.client.Clock)
{
java.util.HashMap v, v;
org.apache.http.impl.client.AIMDBackoffManager v;
org.apache.http.pool.ConnPoolControl v;
org.apache.http.impl.client.Clock v;
v := @this: org.apache.http.impl.client.AIMDBackoffManager;
v := @parameter: org.apache.http.pool.ConnPoolControl;
v := @parameter: org.apache.http.impl.client.Clock;
specialinvoke v.<java.lang.Object: void <init>()>();
v.<org.apache.http.impl.client.AIMDBackoffManager: long coolDown> = 5000L;
v.<org.apache.http.impl.client.AIMDBackoffManager: double backoffFactor> = 0.5;
v.<org.apache.http.impl.client.AIMDBackoffManager: int cap> = 2;
v.<org.apache.http.impl.client.AIMDBackoffManager: org.apache.http.impl.client.Clock clock> = v;
v.<org.apache.http.impl.client.AIMDBackoffManager: org.apache.http.pool.ConnPoolControl connPerRoute> = v;
v = new java.util.HashMap;
specialinvoke v.<java.util.HashMap: void <init>()>();
v.<org.apache.http.impl.client.AIMDBackoffManager: java.util.Map lastRouteProbes> = v;
v = new java.util.HashMap;
specialinvoke v.<java.util.HashMap: void <init>()>();
v.<org.apache.http.impl.client.AIMDBackoffManager: java.util.Map lastRouteBackoffs> = v;
return;
}
public void backOff(org.apache.http.conn.routing.HttpRoute)
{
java.lang.Throwable v;
long v, v, v, v;
org.apache.http.conn.routing.HttpRoute v;
byte v;
java.lang.Long v, v;
java.util.Map v, v;
int v, v;
org.apache.http.pool.ConnPoolControl v, v, v;
org.apache.http.impl.client.AIMDBackoffManager v;
org.apache.http.impl.client.Clock v;
v := @this: org.apache.http.impl.client.AIMDBackoffManager;
v := @parameter: org.apache.http.conn.routing.HttpRoute;
v = v.<org.apache.http.impl.client.AIMDBackoffManager: org.apache.http.pool.ConnPoolControl connPerRoute>;
entermonitor v;
label:
v = v.<org.apache.http.impl.client.AIMDBackoffManager: org.apache.http.pool.ConnPoolControl connPerRoute>;
v = interfaceinvoke v.<org.apache.http.pool.ConnPoolControl: int getMaxPerRoute(java.lang.Object)>(v);
v = v.<org.apache.http.impl.client.AIMDBackoffManager: java.util.Map lastRouteBackoffs>;
v = specialinvoke v.<org.apache.http.impl.client.AIMDBackoffManager: java.lang.Long getLastUpdate(java.util.Map,org.apache.http.conn.routing.HttpRoute)>(v, v);
v = v.<org.apache.http.impl.client.AIMDBackoffManager: org.apache.http.impl.client.Clock clock>;
v = interfaceinvoke v.<org.apache.http.impl.client.Clock: long getCurrentTime()>();
v = virtualinvoke v.<java.lang.Long: long longValue()>();
v = v - v;
v = v.<org.apache.http.impl.client.AIMDBackoffManager: long coolDown>;
v = v cmp v;
if v >= 0 goto label;
exitmonitor v;
label:
return;
label:
v = v.<org.apache.http.impl.client.AIMDBackoffManager: org.apache.http.pool.ConnPoolControl connPerRoute>;
v = specialinvoke v.<org.apache.http.impl.client.AIMDBackoffManager: int getBackedOffPoolSize(int)>(v);
interfaceinvoke v.<org.apache.http.pool.ConnPoolControl: void setMaxPerRoute(java.lang.Object,int)>(v, v);
v = v.<org.apache.http.impl.client.AIMDBackoffManager: java.util.Map lastRouteBackoffs>;
v = staticinvoke <java.lang.Long: java.lang.Long valueOf(long)>(v);
interfaceinvoke v.<java.util.Map: java.lang.Object put(java.lang.Object,java.lang.Object)>(v, v);
exitmonitor v;
label:
goto label;
label:
v := @caughtexception;
exitmonitor v;
throw v;
label:
return;
catch java.lang.Throwable from label to label with label;
catch java.lang.Throwable from label to label with label;
}
private int getBackedOffPoolSize(int)
{
int v;
org.apache.http.impl.client.AIMDBackoffManager v;
double v, v, v;
v := @this: org.apache.http.impl.client.AIMDBackoffManager;
v := @parameter: int;
if v > 1 goto label;
return 1;
label:
v = v.<org.apache.http.impl.client.AIMDBackoffManager: double backoffFactor>;
v = v * v;
v = staticinvoke <java.lang.Math: double floor(double)>(v);
return v;
}
public void probe(org.apache.http.conn.routing.HttpRoute)
{
java.lang.Throwable v;
long v, v, v, v, v, v, v;
org.apache.http.conn.routing.HttpRoute v;
byte v, v;
java.lang.Long v, v, v;
java.util.Map v, v, v;
int v, v, v;
org.apache.http.pool.ConnPoolControl v, v, v;
org.apache.http.impl.client.AIMDBackoffManager v;
org.apache.http.impl.client.Clock v;
v := @this: org.apache.http.impl.client.AIMDBackoffManager;
v := @parameter: org.apache.http.conn.routing.HttpRoute;
v = v.<org.apache.http.impl.client.AIMDBackoffManager: org.apache.http.pool.ConnPoolControl connPerRoute>;
entermonitor v;
label:
v = v.<org.apache.http.impl.client.AIMDBackoffManager: org.apache.http.pool.ConnPoolControl connPerRoute>;
v = interfaceinvoke v.<org.apache.http.pool.ConnPoolControl: int getMaxPerRoute(java.lang.Object)>(v);
v = v.<org.apache.http.impl.client.AIMDBackoffManager: int cap>;
if v < v goto label;
v = v.<org.apache.http.impl.client.AIMDBackoffManager: int cap>;
goto label;
label:
v = v + 1;
label:
v = v.<org.apache.http.impl.client.AIMDBackoffManager: java.util.Map lastRouteProbes>;
v = specialinvoke v.<org.apache.http.impl.client.AIMDBackoffManager: java.lang.Long getLastUpdate(java.util.Map,org.apache.http.conn.routing.HttpRoute)>(v, v);
v = v.<org.apache.http.impl.client.AIMDBackoffManager: java.util.Map lastRouteBackoffs>;
v = specialinvoke v.<org.apache.http.impl.client.AIMDBackoffManager: java.lang.Long getLastUpdate(java.util.Map,org.apache.http.conn.routing.HttpRoute)>(v, v);
v = v.<org.apache.http.impl.client.AIMDBackoffManager: org.apache.http.impl.client.Clock clock>;
v = interfaceinvoke v.<org.apache.http.impl.client.Clock: long getCurrentTime()>();
v = virtualinvoke v.<java.lang.Long: long longValue()>();
v = v - v;
v = v.<org.apache.http.impl.client.AIMDBackoffManager: long coolDown>;
v = v cmp v;
if v < 0 goto label;
v = virtualinvoke v.<java.lang.Long: long longValue()>();
v = v - v;
v = v.<org.apache.http.impl.client.AIMDBackoffManager: long coolDown>;
v = v cmp v;
if v >= 0 goto label;
label:
exitmonitor v;
label:
return;
label:
v = v.<org.apache.http.impl.client.AIMDBackoffManager: org.apache.http.pool.ConnPoolControl connPerRoute>;
interfaceinvoke v.<org.apache.http.pool.ConnPoolControl: void setMaxPerRoute(java.lang.Object,int)>(v, v);
v = v.<org.apache.http.impl.client.AIMDBackoffManager: java.util.Map lastRouteProbes>;
v = staticinvoke <java.lang.Long: java.lang.Long valueOf(long)>(v);
interfaceinvoke v.<java.util.Map: java.lang.Object put(java.lang.Object,java.lang.Object)>(v, v);
exitmonitor v;
label:
goto label;
label:
v := @caughtexception;
exitmonitor v;
throw v;
label:
return;
catch java.lang.Throwable from label to label with label;
catch java.lang.Throwable from label to label with label;
}
private java.lang.Long getLastUpdate(java.util.Map, org.apache.http.conn.routing.HttpRoute)
{
java.util.Map v;
java.lang.Object v;
org.apache.http.impl.client.AIMDBackoffManager v;
org.apache.http.conn.routing.HttpRoute v;
v := @this: org.apache.http.impl.client.AIMDBackoffManager;
v := @parameter: java.util.Map;
v := @parameter: org.apache.http.conn.routing.HttpRoute;
v = interfaceinvoke v.<java.util.Map: java.lang.Object get(java.lang.Object)>(v);
if v != null goto label;
v = staticinvoke <java.lang.Long: java.lang.Long valueOf(long)>(0L);
label:
return v;
}
public void setBackoffFactor(double)
{
byte v, v;
org.apache.http.impl.client.AIMDBackoffManager v;
boolean v;
double v;
v := @this: org.apache.http.impl.client.AIMDBackoffManager;
v := @parameter: double;
v = v cmpl 0.0;
if v <= 0 goto label;
v = v cmpg 1.0;
if v >= 0 goto label;
v = 1;
goto label;
label:
v = 0;
label:
staticinvoke <org.apache.http.util.Args: void check(boolean,java.lang.String)>(v, "Backoff factor must be 0.0 < f < 1.0");
v.<org.apache.http.impl.client.AIMDBackoffManager: double backoffFactor> = v;
return;
}
public void setCooldownMillis(long)
{
long v, v;
org.apache.http.impl.client.AIMDBackoffManager v;
v := @this: org.apache.http.impl.client.AIMDBackoffManager;
v := @parameter: long;
v = v.<org.apache.http.impl.client.AIMDBackoffManager: long coolDown>;
staticinvoke <org.apache.http.util.Args: long positive(long,java.lang.String)>(v, "Cool down");
v.<org.apache.http.impl.client.AIMDBackoffManager: long coolDown> = v;
return;
}
public void setPerHostConnectionCap(int)
{
int v;
org.apache.http.impl.client.AIMDBackoffManager v;
v := @this: org.apache.http.impl.client.AIMDBackoffManager;
v := @parameter: int;
staticinvoke <org.apache.http.util.Args: int positive(int,java.lang.String)>(v, "Per host connection cap");
v.<org.apache.http.impl.client.AIMDBackoffManager: int cap> = v;
return;
}
}