Changeset 646fe20


Ignore:
Timestamp:
Feb 19, 2018 2:31:51 PM (2 years ago)
Author:
zzz <zzz@…>
Branches:
master
Children:
ff81b42
Parents:
a5ca936
Message:

Streaming: Don't exceed configured tag settings when overriding

Location:
apps/streaming/java/src/net/i2p/client/streaming/impl
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • apps/streaming/java/src/net/i2p/client/streaming/impl/Connection.java

    ra5ca936 r646fe20  
    921921    /**
    922922     * Retrieve the current ConnectionOptions.
    923      * @return the current ConnectionOptions
     923     * @return the current ConnectionOptions, non-null
    924924     */
    925925    public ConnectionOptions getOptions() { return _options; }
    926926    /**
    927927     * Set the ConnectionOptions.
    928      * @param opts ConnectionOptions
     928     * @param opts ConnectionOptions non-null
    929929     */
    930930    public void setOptions(ConnectionOptions opts) { _options = opts; }
  • apps/streaming/java/src/net/i2p/client/streaming/impl/ConnectionOptions.java

    ra5ca936 r646fe20  
    5454    private boolean _disableRejectLog;
    5555    private String _limitAction;
     56    private int _tagsToSend;
     57    private int _tagThreshold;
    5658   
    5759    /** state of a connection */
     
    126128    /** @since 0.9.34 reset,drop,http, or custom string,  default reset */
    127129    public static final String PROP_LIMIT_ACTION = "i2p.streaming.limitAction";
     130    /** @since 0.9.34 */
     131    public static final String PROP_TAGS_TO_SEND = "crypto.tagsToSend";
     132    /** @since 0.9.34 */
     133    public static final String PROP_TAG_THRESHOLD = "crypto.lowTagThreshold";
    128134   
    129135   
     
    140146    private static final int DEFAULT_CONGESTION_AVOIDANCE_GROWTH_RATE_FACTOR = 1;
    141147    private static final int DEFAULT_SLOW_START_GROWTH_RATE_FACTOR = 1;
     148    /** @since 0.9.34 */
    142149    private static final String DEFAULT_LIMIT_ACTION = "reset";
     150    /** @since 0.9.34 */
     151    public static final int DEFAULT_TAGS_TO_SEND = 40;
     152    /** @since 0.9.34 */
     153    public static final int DEFAULT_TAG_THRESHOLD = 30;
    143154
    144155
     
    353364            _maxConns = opts.getMaxConns();
    354365            _limitAction = opts.getLimitAction();
     366            _tagsToSend = opts.getTagsToSend();
     367            _tagThreshold = opts.getTagThreshold();
    355368    }
    356369   
     
    396409       
    397410        _rto = getInt(opts, PROP_INITIAL_RTO, INITIAL_RTO);
     411        _tagsToSend = getInt(opts, PROP_TAGS_TO_SEND, DEFAULT_TAGS_TO_SEND);
     412        _tagsToSend = getInt(opts, PROP_TAG_THRESHOLD, DEFAULT_TAG_THRESHOLD);
    398413    }
    399414   
     
    465480        if (opts.getProperty(PROP_LIMIT_ACTION) != null)
    466481            _limitAction = opts.getProperty(PROP_LIMIT_ACTION);
     482        if (opts.getProperty(PROP_TAGS_TO_SEND) != null)
     483            _maxConns = getInt(opts, PROP_TAGS_TO_SEND, DEFAULT_TAGS_TO_SEND);
     484        if (opts.getProperty(PROP_TAG_THRESHOLD) != null)
     485            _maxConns = getInt(opts, PROP_TAG_THRESHOLD, DEFAULT_TAG_THRESHOLD);
    467486       
    468487        _rto = getInt(opts, PROP_INITIAL_RTO, INITIAL_RTO);
     
    791810     */
    792811    public String getLimitAction() { return _limitAction; }
     812
     813    /**
     814     * This option is mostly handled on the router side,
     815     * but PacketQueue also needs to know, so that when
     816     * it overrides, it doesn't exceed the setting.
     817     *
     818     * @since 0.9.34
     819     */
     820    public int getTagsToSend() { return _tagsToSend; }
     821
     822    /**
     823     * This option is mostly handled on the router side,
     824     * but PacketQueue also needs to know, so that when
     825     * it overrides, it doesn't exceed the setting.
     826     *
     827     * @since 0.9.34
     828     */
     829    public int getTagThreshold() { return _tagThreshold; }
    793830
    794831    private void initLists(ConnectionOptions opts) {
  • apps/streaming/java/src/net/i2p/client/streaming/impl/PacketQueue.java

    ra5ca936 r646fe20  
    126126                options.setDate(expires);
    127127            boolean listenForStatus = false;
    128             if (packet.isFlagSet(FLAGS_INITIAL_TAGS)) {
    129                 if (con != null) {
    130                     if (con.isInbound())
    131                         options.setSendLeaseSet(false);
    132                     else if (ENABLE_STATUS_LISTEN)
    133                         listenForStatus = true;
    134                 }
    135                 options.setTagsToSend(INITIAL_TAGS_TO_SEND);
    136                 options.setTagThreshold(MIN_TAG_THRESHOLD);
    137             } else if (packet.isFlagSet(FLAGS_FINAL_TAGS)) {
     128            // FINAL trumps INITIAL, in the case of SYN+CLOSE
     129            if (packet.isFlagSet(FLAGS_FINAL_TAGS)) {
    138130                if (packet.isFlagSet(Packet.FLAG_ECHO)) {
    139131                    // Send LS for PING, not for PONG
     
    143135                    options.setSendLeaseSet(false);
    144136                }
    145                 options.setTagsToSend(FINAL_TAGS_TO_SEND);
    146                 options.setTagThreshold(FINAL_TAG_THRESHOLD);
     137                int sendTags = FINAL_TAGS_TO_SEND;
     138                int tagThresh = FINAL_TAG_THRESHOLD;
     139                if (con != null) {
     140                    ConnectionOptions copts = con.getOptions();
     141                    int cSendTags = copts.getTagsToSend();
     142                    int cTagThresh = copts.getTagThreshold();
     143                    if (cSendTags < sendTags)
     144                        sendTags = cSendTags;
     145                    if (cTagThresh < tagThresh)
     146                        tagThresh = cTagThresh;
     147                }
     148                options.setTagsToSend(sendTags);
     149                options.setTagThreshold(tagThresh);
     150            } else if (packet.isFlagSet(FLAGS_INITIAL_TAGS)) {
     151                if (con != null) {
     152                    if (con.isInbound())
     153                        options.setSendLeaseSet(false);
     154                    else if (ENABLE_STATUS_LISTEN)
     155                        listenForStatus = true;
     156                }
     157                int sendTags = INITIAL_TAGS_TO_SEND;
     158                int tagThresh = MIN_TAG_THRESHOLD;
     159                if (con != null) {
     160                    ConnectionOptions copts = con.getOptions();
     161                    int cSendTags = copts.getTagsToSend();
     162                    int cTagThresh = copts.getTagThreshold();
     163                    if (cSendTags < sendTags)
     164                        sendTags = cSendTags;
     165                    if (cTagThresh < tagThresh)
     166                        tagThresh = cTagThresh;
     167                }
     168                options.setTagsToSend(sendTags);
     169                options.setTagThreshold(tagThresh);
    147170            } else {
    148171                if (con != null) {
     
    151174                    // increase threshold with higher window sizes to prevent stalls
    152175                    // after tag delivery failure
    153                     int wdw = con.getOptions().getWindowSize();
     176                    ConnectionOptions copts = con.getOptions();
     177                    int wdw = copts.getWindowSize();
    154178                    int thresh = Math.max(MIN_TAG_THRESHOLD, wdw * TAG_WINDOW_FACTOR);
     179                    int cTagThresh = copts.getTagThreshold();
     180                    if (cTagThresh < thresh)
     181                        thresh = cTagThresh;
    155182                    options.setTagThreshold(thresh);
    156183                }
Note: See TracChangeset for help on using the changeset viewer.