* I2CP: Prep for per-message reliability settings (ticket #788)

Add bounds checks for flags
This commit is contained in:
zzz
2014-05-14 12:15:57 +00:00
parent 39169f0450
commit dbb7eb3d88
2 changed files with 72 additions and 0 deletions

View File

@@ -48,6 +48,16 @@ public class SendMessageOptions extends DateAndFlags {
35, 45, 57, 72, 92, 117, 147, 192
};
/**
* Reliability bits 9-10
* @since 0.9.14
*/
public enum Reliability { DEFAULT, BEST_EFFORT, GUARANTEED, UNDEFINED }
private static final int BEST_EFFORT_MASK = 0x0200;
private static final int GUARANTEED_MASK = 0x0400;
private static final int RELIABILITY_MASK = BEST_EFFORT_MASK | GUARANTEED_MASK;
/** default true */
public void setSendLeaseSet(boolean yes) {
if (yes)
@@ -141,4 +151,58 @@ public class SendMessageOptions extends DateAndFlags {
private static int codeToVal(int code, int[] codes) {
return codes[code];
}
/**
* default Reliability.DEFAULT
* @since 0.9.14
*/
public void setReliability(Reliability r) {
_flags &= ~RELIABILITY_MASK;
switch (r) {
case BEST_EFFORT:
_flags |= BEST_EFFORT_MASK;
break;
case GUARANTEED:
_flags |= GUARANTEED_MASK;
break;
case UNDEFINED:
_flags |= RELIABILITY_MASK;
break;
case DEFAULT:
default:
break;
}
}
/**
* default Reliability.DEFAULT
* @since 0.9.14
*/
public Reliability getReliability() {
return getReliability(_flags);
}
/**
* default Reliability.DEFAULT
* @since 0.9.14
*/
public static Reliability getReliability(int flags) {
switch (flags & RELIABILITY_MASK) {
case BEST_EFFORT_MASK:
return Reliability.BEST_EFFORT;
case GUARANTEED_MASK:
return Reliability.GUARANTEED;
default:
case RELIABILITY_MASK:
return Reliability.UNDEFINED;
case 0:
return Reliability.DEFAULT;
}
}
}

View File

@@ -21,6 +21,8 @@ import java.util.Date;
* be designed so that a flags value of 0 is the default, for
* compatibility with an 8-byte Date.
*
* See extending class net.i2p.client.SendMessageOptions for more info.
*
* If we really need some more bits we could use the first few bits
* of the third byte.
*
@@ -37,6 +39,8 @@ public class DateAndFlags extends DataStructureImpl {
* @param flags 0 - 65535
*/
public DateAndFlags(long date, int flags) {
if (flags < 0 || flags > 65535)
throw new IllegalArgumentException();
_flags = flags;
_date = date;
}
@@ -45,6 +49,8 @@ public class DateAndFlags extends DataStructureImpl {
* @param flags 0 - 65535
*/
public DateAndFlags(Date date, int flags) {
if (flags < 0 || flags > 65535)
throw new IllegalArgumentException();
_flags = flags;
_date = date.getTime();
}
@@ -57,6 +63,8 @@ public class DateAndFlags extends DataStructureImpl {
* @param flags 0 - 65535
*/
public void setFlags(int flags) {
if (flags < 0 || flags > 65535)
throw new IllegalArgumentException();
_flags = flags;
}