ONOS-3605 Create thread Session input stream mechanism, adding listener for events from the device
Change-Id: Ib323487f61d9e595f7ccdc1957a92e58b7002d2a
diff --git a/protocols/netconf/api/src/main/java/org/onosproject/netconf/NetconfSession.java b/protocols/netconf/api/src/main/java/org/onosproject/netconf/NetconfSession.java
index 2f02125..bb5e996 100644
--- a/protocols/netconf/api/src/main/java/org/onosproject/netconf/NetconfSession.java
+++ b/protocols/netconf/api/src/main/java/org/onosproject/netconf/NetconfSession.java
@@ -16,8 +16,8 @@
package org.onosproject.netconf;
-import java.io.IOException;
import java.util.List;
+import java.util.concurrent.CompletableFuture;
/**
* NETCONF session object that allows NETCONF operations on top with the physical
@@ -27,28 +27,45 @@
public interface NetconfSession {
/**
+ * Executes an asynchronous RPC to the server and obtains a future to be completed.
+ *
+ * @param request the XML containing the RPC for the server.
+ * @return Server response or ERROR
+ * @throws NetconfException when there is a problem in the communication process on
+ * the underlying connection
+ */
+ CompletableFuture<String> request(String request) throws NetconfException;
+
+
+ /**
* Retrives the requested configuration, different from get-config.
*
* @param request the XML containing the request to the server.
* @return device running configuration
+ * @throws NetconfException when there is a problem in the communication process on
+ * the underlying connection
*/
- String get(String request) throws IOException;
+ String get(String request) throws NetconfException;
/**
- * Executes an RPC to the server.
+ * Executes an synchronous RPC to the server.
*
* @param request the XML containing the RPC for the server.
* @return Server response or ERROR
+ * @throws NetconfException when there is a problem in the communication process on
+ * the underlying connection
*/
- String doRPC(String request) throws IOException;
+ String requestSync(String request) throws NetconfException;
/**
* Retrives the specified configuration.
*
* @param targetConfiguration the type of configuration to retrieve.
* @return specified configuration.
+ * @throws NetconfException when there is a problem in the communication process on
+ * the underlying connection
*/
- String getConfig(String targetConfiguration) throws IOException;
+ String getConfig(String targetConfiguration) throws NetconfException;
/**
* Retrives part of the specivied configuration based on the filterSchema.
@@ -57,28 +74,35 @@
* @param configurationFilterSchema XML schema to filter the configuration
* elements we are interested in
* @return device running configuration.
+ * @throws NetconfException when there is a problem in the communication process on
+ * the underlying connection
*/
String getConfig(String targetConfiguration, String configurationFilterSchema)
- throws IOException;
+ throws NetconfException;
/**
* Retrives part of the specified configuration based on the filterSchema.
*
* @param newConfiguration configuration to set
* @return true if the configuration was edited correctly
+ * @throws NetconfException when there is a problem in the communication process on
+ * the underlying connection
*/
- boolean editConfig(String newConfiguration) throws IOException;
+ boolean editConfig(String newConfiguration) throws NetconfException;
/**
* Retrives part of the specified configuration based on the filterSchema.
+ *
* @param targetConfiguration the targetConfiguration to change
- * @param mode selected mode to change the configuration
- * @param newConfiguration configuration to set
+ * @param mode selected mode to change the configuration
+ * @param newConfiguration configuration to set
* @return true if the configuration was edited correctly
+ * @throws NetconfException when there is a problem in the communication process on
+ * the underlying connection
*/
boolean editConfig(String targetConfiguration, String mode, String newConfiguration)
- throws IOException;
+ throws NetconfException;
/**
* Copies the new configuration, an Url or a complete configuration xml tree
@@ -88,39 +112,49 @@
* @param targetConfiguration the type of configuration to retrieve.
* @param newConfiguration configuration to set
* @return true if the configuration was copied correctly
+ * @throws NetconfException when there is a problem in the communication process on
+ * the underlying connection
*/
boolean copyConfig(String targetConfiguration, String newConfiguration)
- throws IOException;
+ throws NetconfException;
/**
* Deletes part of the specified configuration based on the filterSchema.
*
* @param targetConfiguration the name of the configuration to delete
* @return true if the configuration was copied correctly
+ * @throws NetconfException when there is a problem in the communication process on
+ * the underlying connection
*/
- boolean deleteConfig(String targetConfiguration) throws IOException;
+ boolean deleteConfig(String targetConfiguration) throws NetconfException;
/**
* Locks the candidate configuration.
*
* @return true if successful.
+ * @throws NetconfException when there is a problem in the communication process on
+ * the underlying connection
*/
- boolean lock() throws IOException;
+ boolean lock() throws NetconfException;
/**
* Unlocks the candidate configuration.
*
* @return true if successful.
+ * @throws NetconfException when there is a problem in the communication process on
+ * the underlying connection
*/
- boolean unlock() throws IOException;
+ boolean unlock() throws NetconfException;
/**
* Closes the Netconf session with the device.
* the first time it tries gracefully, then kills it forcefully
*
* @return true if closed
+ * @throws NetconfException when there is a problem in the communication process on
+ * the underlying connection
*/
- boolean close() throws IOException;
+ boolean close() throws NetconfException;
/**
* Gets the session ID of the Netconf session.
@@ -137,10 +171,24 @@
String getServerCapabilities();
/**
- * Sets the device capabilities.
+ * Sets the ONOS side capabilities.
*
* @param capabilities list of capabilities the device has.
*/
void setDeviceCapabilities(List<String> capabilities);
+ /**
+ * Remove a listener from the underlying stream handler implementation.
+ *
+ * @param listener event listener.
+ */
+ void addDeviceOutputListener(NetconfDeviceOutputEventListener listener);
+
+ /**
+ * Remove a listener from the underlying stream handler implementation.
+ *
+ * @param listener event listener.
+ */
+ void removeDeviceOutputListener(NetconfDeviceOutputEventListener listener);
+
}