*/
package org.opendaylight.protocol.pcep;
-import java.io.Closeable;
+import io.netty.util.concurrent.Future;
+import java.net.InetAddress;
+import javax.annotation.Nonnull;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.Message;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.open.object.open.Tlvs;
/**
- * PCEP Session represents the finite state machine in PCEP,
- * including timers and its purpose is to create a PCEP connection
- * between PCE/PCC. Session is automatically started, when TCP
- * connection is created, but can be stopped manually.
- * If the session is up, it has to redirect messages to/from user.
- * Handles also malformed messages and unknown requests.
+ * PCEP Session represents the finite state machine in PCEP, including timers and its purpose is to create a PCEP
+ * connection between PCE/PCC. Session is automatically started, when TCP connection is created, but can be stopped
+ * manually. If the session is up, it has to redirect messages to/from user. Handles also malformed messages and unknown
+ * requests.
*/
-public interface PCEPSession extends Closeable {
-
- /**
- * Sends message from user to PCE/PCC. If the user sends an Open
- * Message, the session returns an error (open message is only
- * allowed, when a PCEP handshake is in progress). Close message
- * will close the session and free all the resources.
- * @param message message to be sent
- */
- public void sendMessage(PCEPMessage message);
+public interface PCEPSession extends PCEPSessionState, AutoCloseable {
+
+ /**
+ * Sends message from user to PCE/PCC. If the user sends an Open Message, the session returns an error (open message
+ * is only allowed, when a PCEP handshake is in progress). Close message will close the session and free all the
+ * resources.
+ *
+ * @param message message to be sent
+ * @return Future promise which will be succeed when the message is enqueued in the socket.
+ */
+ Future<Void> sendMessage(Message message);
+
+ void close(TerminationReason reason);
+
+ /**
+ * Returns session characteristics of the remote PCEP Speaker.
+ *
+ * @return Open message TLVs
+ */
+ Tlvs getRemoteTlvs();
+
+ /**
+ * Returns remote address.
+ *
+ * @return inet address
+ */
+ @Nonnull
+ InetAddress getRemoteAddress();
+
+ /**
+ * Returns session characteristics of the local PCEP Speaker.
+ *
+ * @return Open message TLVs
+ */
+ Tlvs getLocalTlvs();
+
+ /**
+ * Returns session characteristics of the local PCEP Speaker.
+ *
+ * @return Open message TLVs
+ */
+ @Deprecated
+ default Tlvs localSessionCharacteristics() {
+ return getLocalTlvs();
+ }
}