class ConnectionOptions extends I2PSocketOptionsImpl
DEFAULT_BUFFER_SIZE, DEFAULT_CONNECT_TIMEOUT, DEFAULT_READ_TIMEOUT, DEFAULT_WRITE_TIMEOUT
PROP_BUFFER_SIZE, PROP_CONNECT_TIMEOUT, PROP_READ_TIMEOUT, PROP_WRITE_TIMEOUT
Constructor and Description |
---|
ConnectionOptions()
Sets max buffer size, connect timeout, read timeout, and write timeout
from System properties.
|
ConnectionOptions(ConnectionOptions opts)
Initializes from System properties then copies over all options.
|
ConnectionOptions(I2PSocketOptions opts)
Initializes from System properties then copies over all options.
|
ConnectionOptions(Properties opts)
Sets max buffer size, connect timeout, read timeout, and write timeout
from properties.
|
Modifier and Type | Method and Description |
---|---|
(package private) void |
doubleRTO()
Double the RTO (after congestion).
|
Set<Hash> |
getAccessList() |
boolean |
getAnswerPings()
Do we respond to a ping?
|
Set<Hash> |
getBlacklist() |
int |
getCongestionAvoidanceGrowthRateFactor()
When we're in congestion avoidance, we grow the window size at the rate
of 1/(windowSize*factor).
|
int |
getConnectDelay()
how long will we wait after instantiating a new con
before actually attempting to connect.
|
boolean |
getDisableRejectLogging()
Do we disable connection rejected logging? Default false.
|
boolean |
getEnforceProtocol()
Do we receive all traffic, or only traffic marked with I2PSession.PROTO_STREAMING (6) ?
Default true.
|
int |
getInactivityAction() |
int |
getInactivityTimeout()
What period of inactivity qualifies as "too long"?
|
int |
getInboundBufferSize()
how much data are we willing to accept in our buffer?
|
String |
getLimitAction()
"reset", "drop", "http", or custom string.
|
int |
getMaxConns() |
int |
getMaxConnsPerDay() |
int |
getMaxConnsPerHour() |
int |
getMaxConnsPerMinute()
all of these are @since 0.7.14; no public setters
|
int |
getMaxMessageSize()
What is the largest message we want to send or receive?
|
int |
getMaxResends()
How many times will we try to send a message before giving up?
|
int |
getMaxTotalConnsPerDay() |
int |
getMaxTotalConnsPerHour() |
int |
getMaxTotalConnsPerMinute() |
int |
getMaxWindowSize() |
int |
getProfile()
What profile do we want to use for this connection?
TODO: Only bulk is supported so far.
|
int |
getReceiveWindow()
Deprecated.
This doesn't appear to be used.
|
boolean |
getRequireFullySigned()
Do we want all packets in both directions to be signed,
or can we deal with signatures on the SYN and FIN packets
only?
There is no property name defined for this, so it's safe to
say this is unused and always false.
|
int |
getResendDelay()
How long after sending a packet will we wait before resending?
|
int |
getRTO() |
int |
getRTT()
What to set the round trip time estimate to (in milliseconds)
|
(package private) int |
getRTTDev()
used in TCB @since 0.9.8
|
int |
getRTTTrend()
If we have 3 consecutive rtt increases, we are trending upwards (1), or if we have
3 consecutive rtt decreases, we are trending downwards (-1), else we're stable.
|
int |
getSendAckDelay()
if there are packets we haven't ACKed yet and we don't
receive _receiveWindow messages before
(_lastSendTime+_sendAckDelay), send an ACK of what
we have received so far.
|
int |
getSlowStartGrowthRateFactor()
When we're in slow start, we grow the window size at the rate
of 1/(factor).
|
int |
getTagsToSend()
This option is mostly handled on the router side,
but PacketQueue also needs to know, so that when
it overrides, it doesn't exceed the setting.
|
int |
getTagThreshold()
This option is mostly handled on the router side,
but PacketQueue also needs to know, so that when
it overrides, it doesn't exceed the setting.
|
int |
getWindowSize()
How many messages will we send before waiting for an ACK?
|
boolean |
isAccessListEnabled() |
boolean |
isBlacklistEnabled() |
(package private) void |
loadFromCache(int rtt,
int rttDev,
int wdw)
Loads options from TCB cache.
|
boolean |
receivedAck() |
void |
setAnswerPings(boolean yes) |
void |
setCongestionAvoidanceGrowthRateFactor(int factor) |
void |
setConnectDelay(int delayMs) |
void |
setDisableRejectLogging(boolean yes) |
void |
setEnforceProtocol(boolean yes) |
void |
setInactivityAction(int action) |
void |
setInactivityTimeout(int timeout) |
void |
setInboundBufferSize(int bytes) |
void |
setMaxMessageSize(int bytes) |
void |
setMaxResends(int numSends) |
void |
setMaxWindowSize(int msgs) |
void |
setProfile(int profile) |
void |
setProperties(Properties opts)
Note: NOT part of the interface
As of 0.9.19, defaults in opts are honored.
|
void |
setReceiveWindow(int numMsgs) |
void |
setRequireFullySigned(boolean sign)
unused, see above
|
void |
setResendDelay(int ms) |
void |
setSendAckDelay(int delayMs)
Unused except here, so expect the default initial delay of 2000 ms unless set by the user
to remain constant.
|
void |
setSlowStartGrowthRateFactor(int factor) |
void |
setWindowSize(int numMsgs) |
String |
toString()
doesn't include everything
|
void |
updateAll(ConnectionOptions opts)
Update everything by copying over from opts
|
void |
updateRTT(int measuredValue) |
getConnectTimeout, getDouble, getInt, getLocalPort, getMaxBufferSize, getPort, getReadTimeout, getWriteTimeout, init, setConnectTimeout, setLocalPort, setMaxBufferSize, setPort, setReadTimeout, setWriteTimeout
public static final int PROFILE_BULK
public static final int PROFILE_INTERACTIVE
public static final int INACTIVITY_ACTION_NOOP
public static final int INACTIVITY_ACTION_DISCONNECT
public static final int INACTIVITY_ACTION_SEND
public static final String PROP_CONNECT_DELAY
public static final String PROP_PROFILE
public static final String PROP_MAX_MESSAGE_SIZE
public static final String PROP_MAX_RESENDS
public static final String PROP_INITIAL_RESEND_DELAY
public static final String PROP_INITIAL_ACK_DELAY
public static final String PROP_INITIAL_WINDOW_SIZE
public static final String PROP_INITIAL_RECEIVE_WINDOW
public static final String PROP_INACTIVITY_TIMEOUT
public static final String PROP_INACTIVITY_ACTION
public static final String PROP_MAX_WINDOW_SIZE
public static final String PROP_CONGESTION_AVOIDANCE_GROWTH_RATE_FACTOR
public static final String PROP_SLOW_START_GROWTH_RATE_FACTOR
public static final String PROP_ANSWER_PINGS
public static final String PROP_ENABLE_ACCESS_LIST
public static final String PROP_ENABLE_BLACKLIST
public static final String PROP_ACCESS_LIST
public static final String PROP_MAX_CONNS_MIN
public static final String PROP_MAX_CONNS_HOUR
public static final String PROP_MAX_CONNS_DAY
public static final String PROP_MAX_TOTAL_CONNS_MIN
public static final String PROP_MAX_TOTAL_CONNS_HOUR
public static final String PROP_MAX_TOTAL_CONNS_DAY
public static final String PROP_ENFORCE_PROTO
public static final String PROP_MAX_STREAMS
public static final String PROP_DISABLE_REJ_LOG
public static final String PROP_LIMIT_ACTION
public static final String PROP_TAGS_TO_SEND
public static final String PROP_TAG_THRESHOLD
static final int INITIAL_WINDOW_SIZE
static final int DEFAULT_MAX_SENDS
public static final int DEFAULT_INITIAL_RTT
static final int MIN_WINDOW_SIZE
public static final int DEFAULT_TAGS_TO_SEND
public static final int DEFAULT_TAG_THRESHOLD
public static final int DEFAULT_MAX_MESSAGE_SIZE
1024 Tunnel Message - 21 Header (see router/tunnel/BatchedPreprocessor.java) ----- 1003 Tunnel Payload - 39 Unfragmented instructions (see router/tunnel/TrivialPreprocessor.java) ----- 964 Unfragmented I2NP Message - 20 ?? ----- 944 Garlic Message padded to 16 bytes - 0 Pad to 16 bytes (why?) ----- 944 Garlic Message (assumes no bundled leaseSet or keys) - 71 Garlic overhead ----- 873 Tunnel Data Message - 84 ?? ----- 789 Gzipped I2NP message - 23 Gzip 10 byte header, 5 byte block header, 8 byte trailer (yes we always use gzip, but it probably isn't really compressing, just adding the headers and trailer, since HTTP Server already compresses, and most P2P files aren't compressible. (see client/I2PSessionImpl2.java, util/ReusableGZipOutputStream.java, and the gzip and deflate specs) ----- 766 - 28 Streaming header (24 min, but leave room for a nack or other optional things) (See Packet.java) ----- 738 Streaming message size FOR TWO TUNNEL MESSAGES: 2048 2 Tunnel Messages - 42 2 Headers ----- 2006 Tunnel Payload - 50 Fragmented instructions (43 for first + 7 for second) ----- 1956 Unfragmented I2NP Message - 20 ?? ----- 1936 Garlic Message padded to 16 bytes 1936 - 0 Pad to 16 bytes ----- 1936 Garlic Message - 71 Garlic overhead ----- 1865 Tunnel Data Message - 84 ?? ----- 1781 Gzipped I2NP message - 23 Gzip header ----- 1758 - 28 Streaming header ----- 1730 Streaming message size to fit in 2 tunnel messages Similarly: 3 msgs: 2722 4 msgs: 3714Before release 0.6.1.14 this was 4096. From release 0.6.1.14 through release 0.6.4, this was 960. It was claimed in the comment that this fit in a single tunnel message (and the checkin comment says the goal was to increase reliability at the expense of throughput), clearly from the math above that was not correct. (Before 0.6.2, the reply leaseSet was bundled with every message, so it didn't even fit in TWO tunnel messages - more like 2 1/3)
Now, it's not clear how often we will get the ideal situation (no reply leaseSet bundling, no key bundling, and especially not having a small message ahead of you, which will then cause fragmentation for all subsequent messages until the queue is emptied - BatchedPreprocessor doesn't do reordering, and it isn't clear to me if it could). In particular the initial messages in a new stream are much larger due to the leaseSet and key bundling. But for long-lived streams (like with i2psnark) this should pay dividends. The tunnel.batch* stats should provide some data for test comparisons.
As MTU and MRU are identical and are negotiated to the lowest value for the two ends, you can't do widespread testing of a higher value. Unless we change to allow MTU and MRU to be different, which would be a pain because it would mess up our buffer scheme. Both 738 and 1730 have been tested to verify that the math above is correct. So let's try 1730 for release 0.6.5. This will allow for 738 testing as well, with i2p.streaming.maxMessageSize=738 (in configadvanced.jsp, or in i2ptunnel, or i2psnark, for example).
Not that an isolated single packet is very common, but in this case, 960 was 113.3% total overhead. Compared to 738 (38.8% overhead) and 1730 (18.4%).
public static final int MIN_MESSAGE_SIZE
public ConnectionOptions()
public ConnectionOptions(Properties opts)
opts
- may be nullpublic ConnectionOptions(I2PSocketOptions opts)
opts
- may be nullpublic ConnectionOptions(ConnectionOptions opts)
opts
- may be nullpublic void updateAll(ConnectionOptions opts)
opts
- non-nullpublic void setProperties(Properties opts)
setProperties
in class I2PSocketOptionsImpl
opts
- may be nullpublic int getConnectDelay()
public void setConnectDelay(int delayMs)
public boolean getRequireFullySigned()
public void setRequireFullySigned(boolean sign)
public boolean getAnswerPings()
public void setAnswerPings(boolean yes)
public boolean getEnforceProtocol()
public void setEnforceProtocol(boolean yes)
public boolean getDisableRejectLogging()
public void setDisableRejectLogging(boolean yes)
public int getWindowSize()
public void setWindowSize(int numMsgs)
@Deprecated public int getReceiveWindow()
public void setReceiveWindow(int numMsgs)
public int getRTT()
public int getRTO()
int getRTTDev()
void loadFromCache(int rtt, int rttDev, int wdw)
void doubleRTO()
public int getRTTTrend()
public void updateRTT(int measuredValue)
measuredValue
- must be positivepublic boolean receivedAck()
public int getResendDelay()
public void setResendDelay(int ms)
public int getSendAckDelay()
public void setSendAckDelay(int delayMs)
public int getMaxMessageSize()
public void setMaxMessageSize(int bytes)
public int getProfile()
public void setProfile(int profile)
public int getMaxResends()
public void setMaxResends(int numSends)
public int getInactivityTimeout()
public void setInactivityTimeout(int timeout)
public int getInactivityAction()
public void setInactivityAction(int action)
public int getMaxWindowSize()
public void setMaxWindowSize(int msgs)
public int getInboundBufferSize()
public void setInboundBufferSize(int bytes)
public int getCongestionAvoidanceGrowthRateFactor()
public void setCongestionAvoidanceGrowthRateFactor(int factor)
public int getSlowStartGrowthRateFactor()
public void setSlowStartGrowthRateFactor(int factor)
public int getMaxConnsPerMinute()
public int getMaxConnsPerHour()
public int getMaxConnsPerDay()
public int getMaxTotalConnsPerMinute()
public int getMaxTotalConnsPerHour()
public int getMaxTotalConnsPerDay()
public int getMaxConns()
public boolean isAccessListEnabled()
public boolean isBlacklistEnabled()
public String getLimitAction()
public int getTagsToSend()
public int getTagThreshold()