cli: connecting over a UNIX socket

I need this as an on-device shell.

Change-Id: Ia96142850a6242537912bf13566d829eb3f1ddfb
diff --git a/src/cli.cpp b/src/cli.cpp
index 3018607..3805dbc 100644
--- a/src/cli.cpp
+++ b/src/cli.cpp
@@ -55,6 +55,7 @@
 
 Usage:
   netconf-cli [-v] [-p <port>] <host>
+  netconf-cli [-v] --socket <path>
   netconf-cli (-h | --help)
   netconf-cli --version
 
@@ -162,22 +163,31 @@
     PoorMansJThread processWatcher;
     std::shared_ptr<NetconfAccess> datastore;
 
-    try {
-        process = sshProcess(args.at("<host>").asString(), args.at("-p").asString());
-        processWatcher.thread = std::thread([&process, &lineEditor, &backendReturnCode] () {
-            process.process.wait();
-            backendReturnCode = process.process.exit_code();
-            // CTRL-U clears from the cursor to the start of the line
-            // CTRL-K clears from the cursor to the end of the line
-            // CTRL-D send EOF
-            lineEditor.emulate_key_press(replxx::Replxx::KEY::control('U'));
-            lineEditor.emulate_key_press(replxx::Replxx::KEY::control('K'));
-            lineEditor.emulate_key_press(replxx::Replxx::KEY::control('D'));
-        });
-        datastore = std::make_shared<NetconfAccess>(process.std_out.native_source(), process.std_in.native_sink());
-    } catch (std::runtime_error& ex) {
-        std::cerr << "SSH connection failed: " << ex.what() << "\n";
-        return 1;
+    if (args.at("--socket").asBool()) {
+        try {
+            datastore = std::make_shared<NetconfAccess>(args.at("<path>").asString());
+        } catch (std::runtime_error& ex) {
+            std::cerr << "UNIX socket connection failed: " << ex.what() << std::endl;
+            return 1;
+        }
+    } else {
+        try {
+            process = sshProcess(args.at("<host>").asString(), args.at("-p").asString());
+            processWatcher.thread = std::thread{std::thread{[&process, &lineEditor, &backendReturnCode] () {
+                process.process.wait();
+                backendReturnCode = process.process.exit_code();
+                // CTRL-U clears from the cursor to the start of the line
+                // CTRL-K clears from the cursor to the end of the line
+                // CTRL-D send EOF
+                lineEditor.emulate_key_press(replxx::Replxx::KEY::control('U'));
+                lineEditor.emulate_key_press(replxx::Replxx::KEY::control('K'));
+                lineEditor.emulate_key_press(replxx::Replxx::KEY::control('D'));
+            }}};
+            datastore = std::make_shared<NetconfAccess>(process.std_out.native_source(), process.std_in.native_sink());
+        } catch (std::runtime_error& ex) {
+            std::cerr << "SSH connection failed: " << ex.what() << std::endl;
+            return 1;
+        }
     }
 #else
 #error "Unknown CLI backend"