From 2758fba10c79a76e07f7cfb894f5cfcbaff85ff7 Mon Sep 17 00:00:00 2001
From: Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>
Date: Tue, 12 May 2015 00:52:50 +0900
Subject: [PATCH] sftp: Add SFTP and libssh2 to feature summary, and add tests

---
 src/FeatureConfig.cc      | 17 ++++++++++++++++-
 src/FeatureConfig.h       |  1 +
 test/FeatureConfigTest.cc | 11 +++++++++++
 3 files changed, 28 insertions(+), 1 deletion(-)

diff --git a/src/FeatureConfig.cc b/src/FeatureConfig.cc
index aa8cd8f2..1b5b183a 100644
--- a/src/FeatureConfig.cc
+++ b/src/FeatureConfig.cc
@@ -67,7 +67,9 @@
 #ifdef HAVE_SYS_UTSNAME_H
 # include <sys/utsname.h>
 #endif // HAVE_SYS_UTSNAME_H
-
+#ifdef HAVE_LIBSSH2
+# include <libssh2.h>
+#endif // HAVE_LIBSSH2
 #include "util.h"
 
 namespace aria2 {
@@ -168,6 +170,14 @@ const char* strSupportedFeature(int feature)
 #endif // !ENABLE_XML_RPC
     break;
 
+  case(FEATURE_SFTP):
+#ifdef HAVE_LIBSSH2
+    return "SFTP";
+#else // !HAVE_LIBSSH2
+    return nullptr;
+#endif // !HAVE_LIBSSH2
+    break;
+
   default:
     return nullptr;
   }
@@ -223,6 +233,11 @@ std::string usedLibs()
 #ifdef HAVE_LIBCARES
   res += "c-ares/" ARES_VERSION_STR " ";
 #endif // HAVE_LIBCARES
+
+#ifdef HAVE_LIBSSH2
+  res += "libssh2/" LIBSSH2_VERSION " ";
+#endif // HAVE_LIBSSH2
+
   if(!res.empty()) {
     res.erase(res.length()-1);
   }
diff --git a/src/FeatureConfig.h b/src/FeatureConfig.h
index 9c0a2798..214dca25 100644
--- a/src/FeatureConfig.h
+++ b/src/FeatureConfig.h
@@ -53,6 +53,7 @@ enum FeatureType {
   FEATURE_MESSAGE_DIGEST,
   FEATURE_METALINK,
   FEATURE_XML_RPC,
+  FEATURE_SFTP,
   MAX_FEATURE
 };
 
diff --git a/test/FeatureConfigTest.cc b/test/FeatureConfigTest.cc
index 3b8b8460..65de79f9 100644
--- a/test/FeatureConfigTest.cc
+++ b/test/FeatureConfigTest.cc
@@ -30,6 +30,7 @@ void FeatureConfigTest::testGetDefaultPort() {
   CPPUNIT_ASSERT_EQUAL((uint16_t)80, getDefaultPort("http"));
   CPPUNIT_ASSERT_EQUAL((uint16_t)443, getDefaultPort("https"));
   CPPUNIT_ASSERT_EQUAL((uint16_t)21, getDefaultPort("ftp"));
+  CPPUNIT_ASSERT_EQUAL((uint16_t)22, getDefaultPort("sftp"));
 }
 
 void FeatureConfigTest::testStrSupportedFeature() {
@@ -40,6 +41,13 @@ void FeatureConfigTest::testStrSupportedFeature() {
   CPPUNIT_ASSERT(!https);
 #endif // ENABLE_SSL
   CPPUNIT_ASSERT(!strSupportedFeature(MAX_FEATURE));
+
+  auto sftp = strSupportedFeature(FEATURE_SFTP);
+#ifdef HAVE_LIBSSH2
+  CPPUNIT_ASSERT(sftp);
+#else // !HAVE_LIBSSH2
+  CPPUNIT_ASSERT(!sftp);
+#endif // !HAVE_LIBSSH2
 }
 
 void FeatureConfigTest::testFeatureSummary() {
@@ -75,6 +83,9 @@ void FeatureConfigTest::testFeatureSummary() {
     "XML-RPC",
 #endif // ENABLE_XML_RPC
 
+#ifdef HAVE_LIBSSH2
+    "SFTP",
+#endif // HAVE_LIBSSH2
   };
 
   std::string featuresString = strjoin(std::begin(features),