package ibis.ipl; import java.io.DataInput; import java.io.IOException; /** * This class represents the type of a receive or send port. * A PortType is a capability set. The possible values in this set are * included here. Note that Ibis implementations may define additional * capabilities. */ public final class PortType extends CapabilitySet { /** Prefix for connection capabilities. */ final static String CONNECTION = "connection"; /** Prefix for receive capabilities. */ final static String RECEIVE = "receive"; /** Prefix for serialization capabilities. */ final static String SERIALIZATION = "serialization"; /** Prefix for communication capabilities. */ final static String COMMUNICATION = "communication"; /** * This capability describes that a sendport can have at most one * outgoing connection, and a receiveport can have at most one incoming * connection. */ public final static String CONNECTION_ONE_TO_ONE = CONNECTION + ".onetoone"; /** * This capability describes that a sendport can have more than one * outgoing connection, but receiveports can only have one * incoming connection. */ public final static String CONNECTION_ONE_TO_MANY = CONNECTION + ".onetomany"; /** * This capability describes that a sendport can have at most one * outgoing connection, but receiveports can have multiple incoming * connections. */ public final static String CONNECTION_MANY_TO_ONE = CONNECTION + ".manytoone"; /** * This capability describes that a sendport can have multiple outgoing * connections, and receiveports can have multiple incoming connections. */ public final static String CONNECTION_MANY_TO_MANY = CONNECTION + ".manytomany"; /** This capability describes that connection downcalls are supported. */ public final static String CONNECTION_DOWNCALLS = CONNECTION + ".downcalls"; /** This capability describes that connection upcalls are supported. */ public final static String CONNECTION_UPCALLS = CONNECTION + ".upcalls"; /** * This capability describes that timeouts on connection attempts are * supported. */ public final static String CONNECTION_TIMEOUT = CONNECTION + ".timeout"; /** * This capability describes that lightweight connection setup is used. * Lightweight connections are cheaper to create and often use less kernel * resources. On the downside, they are likely to have a higher latency and * lower throughput. * @ibis.experimental */ public final static String CONNECTION_LIGHT = CONNECTION + ".light"; /** * This capability describes that ultra-lightweight connection setup is used. * These connections are even cheaper to create and maintain than lightweight * connections. They are not reliable, however, and can not be combined with * connection up/downcalls. In addition, a maximum message size may be imposed. * @ibis.experimental */ public final static String CONNECTION_ULTRALIGHT = CONNECTION + ".ultralight"; /** * This capability describes that -only- direct connection setup is used. * This prevents ibis from using any connection setup scheme that does not * result in a direct connection between the two machines. Note that using * this option may severely restrict the connectivity of an ibis instance. * @ibis.experimental */ public final static String CONNECTION_DIRECT = CONNECTION + ".direct"; /** This capability describes that explicit receive is supported. */ public final static String RECEIVE_EXPLICIT = RECEIVE + ".explicit"; /** * This capability describes that explicit receive with a timeout is * supported. */ public final static String RECEIVE_TIMEOUT = RECEIVE + ".timeout"; /** This capability describes that polls are supported. */ public final static String RECEIVE_POLL = RECEIVE + ".poll"; /** * This capability describes that message upcalls are supported without * the need to poll for them. */ public final static String RECEIVE_AUTO_UPCALLS = RECEIVE + ".autoupcalls"; /** * This capability describes that message upcalls are supported but the * user must to poll for them. An implementation that claims that it * has this, may also do autoupcalls, but polling does no harm. * When an application asks for this (and not autoupcalls), it must poll. * For this to work, poll must be supported and requested! */ public final static String RECEIVE_POLL_UPCALLS = RECEIVE + ".pollupcalls"; /** * This capability describes that messages from a sendport are delivered * to the receiveport(s) in the order in which they were sent. */ public final static String COMMUNICATION_FIFO = COMMUNICATION + ".fifo"; /** * This capability describes that messages are given global sequence * numbers so that the application can order them. * The numbering is per send port name. */ public final static String COMMUNICATION_NUMBERED = COMMUNICATION + ".numbered"; /** This capability describes that communication is reliable. */ public final static String COMMUNICATION_RELIABLE = COMMUNICATION + ".reliable"; /** This capability describes that communication is unreliable. */ public final static String COMMUNICATION_UNRELIABLE = COMMUNICATION + ".unreliable"; /** This capability describes that communication is reliable but not * safe enough to use on open networks. */ public final static String COMMUNICATION_RELIABLE_UNSAFE = COMMUNICATION + ".reliable.unsafe"; /** * This capability describes that readByte/writeByte and * readArray/writeArray(byte[]) are supported. */ public final static String SERIALIZATION_BYTE = SERIALIZATION + ".byte"; /** * This capability describes that read/write and readArray/writeArray * of primitive types are supported. */ public final static String SERIALIZATION_DATA = SERIALIZATION + ".data"; /** * This capability describes that some sort of object serialization is * supported. Applications may ask for a specific implementation by * specifying, for instance, serialization.object.sun. */ public final static String SERIALIZATION_OBJECT = SERIALIZATION + ".object"; /** * This capability describes that ibis object serialization is supported. */ public final static String SERIALIZATION_OBJECT_IBIS = SERIALIZATION_OBJECT + ".ibis"; /** * This capability describes that sun object serialization is supported. */ public final static String SERIALIZATION_OBJECT_SUN = SERIALIZATION_OBJECT + ".sun"; /** * Constructor for a port type. * @param capabilities * the capabilities of this port type. */ public PortType(String... capabilities) { super(capabilities); } /** * Constructs a port type by reading it from the specified data * input stream. * @param dataInput * the data input stream. * @throws IOException * is thrown in case of trouble. */ public PortType(DataInput dataInput) throws IOException { super(dataInput); } }