Added configurable connection timeout for Netconf Server connection.

Change-Id: I40fd1737529e5e864f16119293e46340243118cb
diff --git a/providers/netconf/device/src/main/java/org/onosproject/provider/netconf/device/impl/NetconfDevice.java b/providers/netconf/device/src/main/java/org/onosproject/provider/netconf/device/impl/NetconfDevice.java
index 7b56b88..440c045 100644
--- a/providers/netconf/device/src/main/java/org/onosproject/provider/netconf/device/impl/NetconfDevice.java
+++ b/providers/netconf/device/src/main/java/org/onosproject/provider/netconf/device/impl/NetconfDevice.java
@@ -58,6 +58,7 @@
     }
 
     private static final int DEFAULT_SSH_PORT = 22;
+    private static final int DEFAULT_CON_TIMEOUT = 0;
     private static final String XML_CAPABILITY_KEY = "capability";
     private static final int EVENTINTERVAL = 2000;
     private static final int CONNECTION_CHECK_INTERVAL = 3;
@@ -69,6 +70,7 @@
 
     private String sshHost;
     private int sshPort = DEFAULT_SSH_PORT;
+    private int connectTimeout = DEFAULT_CON_TIMEOUT;
     private String username;
     private String password;
     private boolean reachable = false;
@@ -97,7 +99,7 @@
     public void init() throws Exception {
         try {
             if (sshConnection == null) {
-                sshConnection = new SSHConnection(sshHost, sshPort);
+                sshConnection = new SSHConnection(sshHost, sshPort, connectTimeout);
                 sshConnection.authenticateWithPassword(username, password);
             }
             // Send hello message to retrieve capabilities.
@@ -293,4 +295,8 @@
     public boolean isActive() {
         return deviceState == DeviceState.ACTIVE ? true : false;
     }
+
+    public void setConnectTimeout(int connectTimeout) {
+        this.connectTimeout = connectTimeout;
+    }
 }
diff --git a/providers/netconf/device/src/main/java/org/onosproject/provider/netconf/device/impl/NetconfDeviceProvider.java b/providers/netconf/device/src/main/java/org/onosproject/provider/netconf/device/impl/NetconfDeviceProvider.java
index e3399f6..9a8c1bd 100644
--- a/providers/netconf/device/src/main/java/org/onosproject/provider/netconf/device/impl/NetconfDeviceProvider.java
+++ b/providers/netconf/device/src/main/java/org/onosproject/provider/netconf/device/impl/NetconfDeviceProvider.java
@@ -21,6 +21,8 @@
 import static org.onlab.util.Tools.groupedThreads;
 import static org.slf4j.LoggerFactory.getLogger;
 
+import java.io.IOException;
+import java.net.SocketTimeoutException;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.util.Dictionary;
@@ -329,6 +331,12 @@
                 log.error("Syntax Error while creating URI for the device: "
                         + device.deviceInfo()
                         + " couldn't persist the device onto the store", e);
+            } catch (SocketTimeoutException e) {
+                log.error("Error while setting connection for the device: "
+                        + device.deviceInfo(), e);
+            } catch (IOException e) {
+                log.error("Error while setting connection for the device: "
+                        + device.deviceInfo(), e);
             } catch (Exception e) {
                 log.error("Error while initializing session for the device: "
                         + device.deviceInfo(), e);