package org.limewire.rudp.messages;
/**
* Defines an interface to begin a reliable UDP connection.
*/
public interface SynMessage extends RUDPMessage {
/**
* Enum that defines the role the connection plays from which this
* SynMessage stems.
*/
public static enum Role {
/**
* Requestor of a UDP connection after having send a request to open a
* connection to the acceptor.
*/
REQUESTOR(0x01),
/**
* Acceptor of a UDP connection after having received a request for
* opening a connection from the requestor.
*/
ACCEPTOR(0x02),
/**
* Undefined role, used for messages with protocol version < 1.
*/
UNDEFINED(0x00);
private static final Role[] ROLES;
private final int value;
static {
Role[] roles = values();
ROLES = new Role[roles.length];
for (Role role : roles) {
int index = (role.value & 0xFF) % ROLES.length;
assert (ROLES[index] == null);
ROLES[index] = role;
}
}
Role(int value) {
this.value = value;
}
/**
* Returns byte value.
*/
public byte byteValue() {
return (byte) (value & 0xFF);
}
/**
* Returns the Role with <code>value</code> or null if not found.
*/
public static Role valueOf(int value) {
int index = (value & 0xFF) % ROLES.length;
Role role = ROLES[index];
if (role.value == value) {
return role;
}
return null;
}
/**
* Returns true if a connection with this role can connect accept
* an incoming {@link SynMessage} with role <code>role</code>.
*/
public boolean canConnectTo(Role role) {
return role != this || role == UNDEFINED;
}
}
public byte getSenderConnectionID();
public int getProtocolVersionNumber();
/**
* Returns the role of the sender of the syn message.
*/
public Role getRole();
}