forked from I2P_Developers/i2p.i2p
* I2CP: Prep for per-message reliability settings (ticket #788)
Add bounds checks for flags
This commit is contained in:
@@ -48,6 +48,16 @@ public class SendMessageOptions extends DateAndFlags {
|
|||||||
35, 45, 57, 72, 92, 117, 147, 192
|
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 */
|
/** default true */
|
||||||
public void setSendLeaseSet(boolean yes) {
|
public void setSendLeaseSet(boolean yes) {
|
||||||
if (yes)
|
if (yes)
|
||||||
@@ -141,4 +151,58 @@ public class SendMessageOptions extends DateAndFlags {
|
|||||||
private static int codeToVal(int code, int[] codes) {
|
private static int codeToVal(int code, int[] codes) {
|
||||||
return codes[code];
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -21,6 +21,8 @@ import java.util.Date;
|
|||||||
* be designed so that a flags value of 0 is the default, for
|
* be designed so that a flags value of 0 is the default, for
|
||||||
* compatibility with an 8-byte Date.
|
* 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
|
* If we really need some more bits we could use the first few bits
|
||||||
* of the third byte.
|
* of the third byte.
|
||||||
*
|
*
|
||||||
@@ -37,6 +39,8 @@ public class DateAndFlags extends DataStructureImpl {
|
|||||||
* @param flags 0 - 65535
|
* @param flags 0 - 65535
|
||||||
*/
|
*/
|
||||||
public DateAndFlags(long date, int flags) {
|
public DateAndFlags(long date, int flags) {
|
||||||
|
if (flags < 0 || flags > 65535)
|
||||||
|
throw new IllegalArgumentException();
|
||||||
_flags = flags;
|
_flags = flags;
|
||||||
_date = date;
|
_date = date;
|
||||||
}
|
}
|
||||||
@@ -45,6 +49,8 @@ public class DateAndFlags extends DataStructureImpl {
|
|||||||
* @param flags 0 - 65535
|
* @param flags 0 - 65535
|
||||||
*/
|
*/
|
||||||
public DateAndFlags(Date date, int flags) {
|
public DateAndFlags(Date date, int flags) {
|
||||||
|
if (flags < 0 || flags > 65535)
|
||||||
|
throw new IllegalArgumentException();
|
||||||
_flags = flags;
|
_flags = flags;
|
||||||
_date = date.getTime();
|
_date = date.getTime();
|
||||||
}
|
}
|
||||||
@@ -57,6 +63,8 @@ public class DateAndFlags extends DataStructureImpl {
|
|||||||
* @param flags 0 - 65535
|
* @param flags 0 - 65535
|
||||||
*/
|
*/
|
||||||
public void setFlags(int flags) {
|
public void setFlags(int flags) {
|
||||||
|
if (flags < 0 || flags > 65535)
|
||||||
|
throw new IllegalArgumentException();
|
||||||
_flags = flags;
|
_flags = flags;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user