Changeset dbb7eb3


Ignore:
Timestamp:
May 14, 2014 12:15:57 PM (7 years ago)
Author:
zzz <zzz@…>
Branches:
master
Children:
a93666c
Parents:
39169f0
Message:
  • I2CP: Prep for per-message reliability settings (ticket #788)

Add bounds checks for flags

Location:
core/java/src/net/i2p
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • core/java/src/net/i2p/client/SendMessageOptions.java

    r39169f0 rdbb7eb3  
    4949                                           };
    5050
     51    /**
     52     *  Reliability bits 9-10
     53     *  @since 0.9.14
     54     */
     55    public enum Reliability { DEFAULT, BEST_EFFORT, GUARANTEED, UNDEFINED }
     56
     57    private static final int BEST_EFFORT_MASK = 0x0200;
     58    private static final int GUARANTEED_MASK = 0x0400;
     59    private static final int RELIABILITY_MASK = BEST_EFFORT_MASK | GUARANTEED_MASK;
     60
    5161    /** default true */
    5262    public void setSendLeaseSet(boolean yes) {
     
    142152        return codes[code];
    143153    }
     154
     155    /**
     156     *  default Reliability.DEFAULT
     157     *  @since 0.9.14
     158     */
     159    public void setReliability(Reliability r) {
     160        _flags &= ~RELIABILITY_MASK;
     161        switch (r) {
     162          case BEST_EFFORT:
     163            _flags |= BEST_EFFORT_MASK;
     164            break;
     165
     166          case GUARANTEED:
     167            _flags |= GUARANTEED_MASK;
     168            break;
     169
     170          case UNDEFINED:
     171            _flags |= RELIABILITY_MASK;
     172            break;
     173
     174          case DEFAULT:
     175          default:
     176            break;
     177        }
     178    }
     179
     180    /**
     181     *  default Reliability.DEFAULT
     182     *  @since 0.9.14
     183     */
     184    public Reliability getReliability() {
     185        return getReliability(_flags);
     186    }
     187
     188    /**
     189     *  default Reliability.DEFAULT
     190     *  @since 0.9.14
     191     */
     192    public static Reliability getReliability(int flags) {
     193        switch (flags & RELIABILITY_MASK) {
     194          case BEST_EFFORT_MASK:
     195            return Reliability.BEST_EFFORT;
     196
     197          case GUARANTEED_MASK:
     198            return Reliability.GUARANTEED;
     199
     200          default:
     201          case RELIABILITY_MASK:
     202            return Reliability.UNDEFINED;
     203
     204          case 0:
     205            return Reliability.DEFAULT;
     206        }
     207    }
    144208}
  • core/java/src/net/i2p/data/DateAndFlags.java

    r39169f0 rdbb7eb3  
    2222 * compatibility with an 8-byte Date.
    2323 *
     24 * See extending class net.i2p.client.SendMessageOptions for more info.
     25 *
    2426 * If we really need some more bits we could use the first few bits
    2527 * of the third byte.
     
    3840     */
    3941    public DateAndFlags(long date, int flags) {
     42        if (flags < 0 || flags > 65535)
     43            throw new IllegalArgumentException();
    4044        _flags = flags;
    4145        _date = date;
     
    4650     */
    4751    public DateAndFlags(Date date, int flags) {
     52        if (flags < 0 || flags > 65535)
     53            throw new IllegalArgumentException();
    4854        _flags = flags;
    4955        _date = date.getTime();
     
    5864     */
    5965    public void setFlags(int flags) {
     66        if (flags < 0 || flags > 65535)
     67            throw new IllegalArgumentException();
    6068        _flags = flags;
    6169    }
Note: See TracChangeset for help on using the changeset viewer.