From 6012fb7e42505a72259a3bef64e46c9efdf3b688 Mon Sep 17 00:00:00 2001 From: Daniel Ferguson Date: Thu, 5 May 2016 14:27:43 -0700 Subject: [PATCH] [Win32] Add secure provisioning and stack samples * Modified Linux secure stack samples to support an msys_nt target * Configured SCons scripts to build provisioning code in security Change-Id: I59442e937bf0df9b37894466b2c017f31f13dd9e Signed-off-by: Henry Beberman Signed-off-by: Daniel Ferguson Reviewed-on: https://gerrit.iotivity.org/gerrit/5519 Reviewed-by: David Antler Tested-by: jenkins-iotivity --- extlibs/sqlite3/SConscript | 6 +++--- resource/SConscript | 3 +++ resource/csdk/security/SConscript | 2 +- resource/csdk/security/provisioning/SConscript | 13 ++++++++----- resource/csdk/security/provisioning/sample/SConscript | 10 ++++++++-- .../provisioning/sample/sampleserver_justworks.cpp | 16 +++++++++++++++- .../provisioning/sample/sampleserver_randompin.cpp | 14 +++++++++++++- resource/csdk/security/src/directpairing.c | 4 ++++ resource/csdk/stack/samples/linux/secure/SConscript | 2 ++ .../csdk/stack/samples/linux/secure/ocamsservice.cpp | 14 +++++++++++++- .../csdk/stack/samples/linux/secure/occlientbasicops.cpp | 14 +++++++++++++- .../stack/samples/linux/secure/occlientdirectpairing.cpp | 12 ++++++++++++ .../csdk/stack/samples/linux/secure/ocserverbasicops.cpp | 13 ++++++++++++- 13 files changed, 107 insertions(+), 16 deletions(-) diff --git a/extlibs/sqlite3/SConscript b/extlibs/sqlite3/SConscript index 41c65df..c5dc9c8 100755 --- a/extlibs/sqlite3/SConscript +++ b/extlibs/sqlite3/SConscript @@ -11,11 +11,11 @@ sqlite_env = env.Clone() target_os = sqlite_env.get('TARGET_OS') src_dir = sqlite_env.get('SRC_DIR') -targets_need_sqlite = ['linux', 'android', 'tizen'] +targets_need_sqlite = ['linux', 'android', 'tizen', 'msys_nt'] sqlite_dir = src_dir + '/extlibs/sqlite3/' sqlite_build_dir = src_dir + '/extlibs/sqlite3/sqlite-amalgamation-3081101/' sqlite_zip_file = src_dir + '/extlibs/sqlite3/sqlite-amalgamation-3081101.zip' -sqlite_url = 'http://www.sqlite.org/2015/sqlite-amalgamation-3081101.zip' +sqlite_url = 'https://www.sqlite.org/2015/sqlite-amalgamation-3081101.zip' # Download if target_os in targets_need_sqlite: @@ -39,4 +39,4 @@ if target_os in targets_need_sqlite: os.remove(sqlite_zip_file) shutil.rmtree(sqlite_build_dir) -# Build will be done with provisioning manager module. \ No newline at end of file +# Build will be done with provisioning manager module. diff --git a/resource/SConscript b/resource/SConscript index 5c9eb1c..c552b1f 100644 --- a/resource/SConscript +++ b/resource/SConscript @@ -86,5 +86,8 @@ elif target_os == 'arduino': SConscript('csdk/stack/samples/arduino/SimpleClientServer/ocserver/SConscript') elif target_os == 'msys_nt': + # Build secure samples. Using linux samples for now. + SConscript('csdk/stack/samples/linux/secure/SConscript') + # Build C/C++ unit tests SConscript('unit_tests.scons') diff --git a/resource/csdk/security/SConscript b/resource/csdk/security/SConscript index 15a9a6c..65e2700 100644 --- a/resource/csdk/security/SConscript +++ b/resource/csdk/security/SConscript @@ -145,7 +145,7 @@ libocsrm = libocsrm_env.StaticLibrary('libocsrm', libocsrm_src) libocsrm_env.InstallTarget(libocsrm, 'libocsrm') -if target_os in ['linux', 'android', 'tizen'] and env.get('SECURED') == '1': +if target_os in ['linux', 'android', 'tizen', 'msys_nt'] and env.get('SECURED') == '1': SConscript('provisioning/SConscript') if target_os in ['linux'] and env.get('SECURED') == '1': diff --git a/resource/csdk/security/provisioning/SConscript b/resource/csdk/security/provisioning/SConscript index 329aaca..f909540 100644 --- a/resource/csdk/security/provisioning/SConscript +++ b/resource/csdk/security/provisioning/SConscript @@ -57,10 +57,10 @@ target_os = env.get('TARGET_OS') if target_os != 'tizen': provisioning_env.AppendUnique(CPPPATH = ['../../../../extlibs/sqlite3']) -provisioning_env.AppendUnique(CFLAGS = ['-D__WITH_DTLS__']) +provisioning_env.AppendUnique(CPPDEFINES= ['__WITH_DTLS__']) provisioning_env.AppendUnique(CFLAGS = ['-std=c99']) -if target_os not in ['windows', 'winrt']: - provisioning_env.AppendUnique(CXXFLAGS = ['-std=c++0x', '-Wall', '-pthread', '-D__WITH_DTLS__']) +if target_os not in ['windows', 'msys_nt']: + provisioning_env.AppendUnique(CXXFLAGS = ['-std=c++0x', '-Wall', '-pthread']) # Note: 'pthread' is in libc for android. On other platform, if use # new gcc(>4.9?) it isn't required, otherwise, it's required @@ -76,9 +76,12 @@ provisioning_env.AppendUnique(LIBS = ['tinydtls']) if env.get('DTLS_WITH_X509') == '1': provisioning_env.AppendUnique(LIBS = ['CKManager', 'asn1']) -if target_os != 'android': +if target_os not in ['msys_nt', 'windows', 'android']: provisioning_env.ParseConfig('pkg-config --libs glib-2.0') +if target_os in ['windows', 'msys_nt']: + provisioning_env.AppendUnique(LIBS = ['ws2_32', 'advapi32', 'iphlpapi', 'timer']) + if target_os == 'tizen': provisioning_env.ParseConfig('pkg-config --cflags --libs sqlite3') @@ -116,6 +119,6 @@ provisioning_env.UserInstallTargetLib(provisioningserver, 'libocpmapi') if env.get('DTLS_WITH_X509') == '1': SConscript('ck_manager/SConscript') -if target_os in ['linux']: +if target_os in ['linux', 'msys_nt']: SConscript('sample/SConscript') diff --git a/resource/csdk/security/provisioning/sample/SConscript b/resource/csdk/security/provisioning/sample/SConscript index a4f645d..4fe27ae 100644 --- a/resource/csdk/security/provisioning/sample/SConscript +++ b/resource/csdk/security/provisioning/sample/SConscript @@ -46,10 +46,17 @@ provisioning_env.AppendUnique(CPPPATH = [ '../../../connectivity/api' ]) +target_os = env.get('TARGET_OS') provisioning_env.AppendUnique(CFLAGS = ['-D__WITH_DTLS__','-std=c99']) provisioning_env.AppendUnique(CXXFLAGS = ['-std=c++0x', '-Wall', '-pthread', '-fpermissive']) provisioning_env.AppendUnique(RPATH = [env.get('BUILD_DIR')]) -provisioning_env.AppendUnique(LIBS = ['-lpthread','-ldl']) + +if target_os in ['msys_nt']: + provisioning_env.PrependUnique(LIBS = ['-lpthread', 'ws2_32', 'iphlpapi']) +else: + provisioning_env.AppendUnique(LIBS = ['-lpthread','-ldl']) + provisioning_env.ParseConfig('pkg-config --libs glib-2.0'); + provisioning_env.AppendUnique(LIBPATH = [env.get('BUILD_DIR')]) provisioning_env.PrependUnique(LIBS = ['ocpmapi','oc', 'oc_logger', 'ocsrm','m', 'octbstack', 'connectivity_abstraction', 'coap']) @@ -58,7 +65,6 @@ if env.get('SECURED') == '1': if env.get('DTLS_WITH_X509') == '1': provisioning_env.AppendUnique(LIBS = ['CKManager']) provisioning_env.AppendUnique(LIBS = ['asn1']) -provisioning_env.ParseConfig('pkg-config --libs glib-2.0'); provisioning_env.AppendUnique(CPPDEFINES = ['TB_LOG']) diff --git a/resource/csdk/security/provisioning/sample/sampleserver_justworks.cpp b/resource/csdk/security/provisioning/sample/sampleserver_justworks.cpp index 7047ae9..06fe6ec 100644 --- a/resource/csdk/security/provisioning/sample/sampleserver_justworks.cpp +++ b/resource/csdk/security/provisioning/sample/sampleserver_justworks.cpp @@ -27,9 +27,19 @@ #include #include #include "ocstack.h" -#include "logger.h" #include "ocpayload.h" +#include +#if defined(_WIN32) +#include +/** @todo stop-gap for naming issue. Windows.h does not like us to use ERROR */ +#ifdef ERROR +#undef ERROR +#endif //ERROR +#endif //_WIN32 +#include "logger.h" + + #define TAG "SAMPLE_JUSTWORKS" int gQuitFlag = 0; @@ -430,7 +440,11 @@ int main() OIC_LOG(ERROR, TAG, "OCStack process error"); return 0; } +#if defined(_WIN32) + Sleep(100); +#else nanosleep(&timeout, NULL); +#endif //defined(_WIN32) } OIC_LOG(INFO, TAG, "Exiting ocserver main loop..."); diff --git a/resource/csdk/security/provisioning/sample/sampleserver_randompin.cpp b/resource/csdk/security/provisioning/sample/sampleserver_randompin.cpp index 5ca0e7a..a1612df 100644 --- a/resource/csdk/security/provisioning/sample/sampleserver_randompin.cpp +++ b/resource/csdk/security/provisioning/sample/sampleserver_randompin.cpp @@ -27,10 +27,18 @@ #include #include #include "ocstack.h" -#include "logger.h" #include "ocpayload.h" #include "pinoxmcommon.h" +#if defined(_WIN32) +#include +/** @todo stop-gap for naming issue. Windows.h does not like us to use ERROR */ +#ifdef ERROR +#undef ERROR +#endif +#endif // defined(_WIN32) +#include "logger.h" + #define TAG "SAMPLE_RANDOMPIN" int gQuitFlag = 0; @@ -449,7 +457,11 @@ int main() OIC_LOG(ERROR, TAG, "OCStack process error"); return 0; } +#if defined(_WIN32) + Sleep(100); +#else nanosleep(&timeout, NULL); +#endif //!defined(_WIN32) } OIC_LOG(INFO, TAG, "Exiting ocserver main loop..."); diff --git a/resource/csdk/security/src/directpairing.c b/resource/csdk/security/src/directpairing.c index 5606598..6d592be 100644 --- a/resource/csdk/security/src/directpairing.c +++ b/resource/csdk/security/src/directpairing.c @@ -1008,7 +1008,11 @@ OCStackResult DPDeviceDiscovery(unsigned short waittime) } else { +#if defined(_WIN32) + Sleep(100); +#else nanosleep(&timeout, NULL); +#endif // defined (_WIN32) } } diff --git a/resource/csdk/stack/samples/linux/secure/SConscript b/resource/csdk/stack/samples/linux/secure/SConscript index e15ae78..230b4da 100644 --- a/resource/csdk/stack/samples/linux/secure/SConscript +++ b/resource/csdk/stack/samples/linux/secure/SConscript @@ -41,6 +41,8 @@ if target_os not in ['windows', 'winrt']: samples_env.AppendUnique(LIBS = ['-lpthread']) samples_env.AppendUnique(LIBPATH = [env.get('BUILD_DIR')]) +if target_os == 'msys_nt': + samples_env.PrependUnique(LIBS = ['ocsrm', 'ws2_32', 'iphlpapi']) samples_env.PrependUnique(LIBS = ['octbstack', 'm', 'connectivity_abstraction', 'coap']) if env.get('SECURED') == '1': samples_env.AppendUnique(LIBS = ['tinydtls']) diff --git a/resource/csdk/stack/samples/linux/secure/ocamsservice.cpp b/resource/csdk/stack/samples/linux/secure/ocamsservice.cpp index 4a6b14e..cfad060 100644 --- a/resource/csdk/stack/samples/linux/secure/ocamsservice.cpp +++ b/resource/csdk/stack/samples/linux/secure/ocamsservice.cpp @@ -7,9 +7,17 @@ #include #include #include "ocstack.h" -#include "logger.h" #include "common.h" +#if defined(_WIN32) +#include +/** @todo stop-gap for naming issue. Windows.h does not like us to use ERROR */ +#ifdef ERROR +#undef ERROR +#endif +#endif // defined(_WIN32) +#include "logger.h" + #define TAG PCF("SRM-AMSS") int gQuitFlag = 0; @@ -62,7 +70,11 @@ int main(int /*argc*/, char* /*argv*/[]) OIC_LOG(ERROR, TAG, "OCStack process error"); return 0; } +#if defined(_WIN32) + Sleep(100); +#else nanosleep(&timeout, NULL); +#endif // defined(_WIN32) } OIC_LOG(INFO, TAG, "Exiting ocamsservice main loop..."); diff --git a/resource/csdk/stack/samples/linux/secure/occlientbasicops.cpp b/resource/csdk/stack/samples/linux/secure/occlientbasicops.cpp index 0f5d93b..202f020 100644 --- a/resource/csdk/stack/samples/linux/secure/occlientbasicops.cpp +++ b/resource/csdk/stack/samples/linux/secure/occlientbasicops.cpp @@ -26,13 +26,21 @@ #include #include #include "ocstack.h" -#include "logger.h" #include "occlientbasicops.h" #include "ocpayload.h" #include "payload_logging.h" #include "oic_string.h" #include "common.h" +#if defined(_WIN32) +#include +/** @todo stop-gap for naming issue. Windows.h does not like us to use ERROR */ +#ifdef ERROR +#undef ERROR +#endif +#endif // defined(_WIN32) +#include "logger.h" + #define TAG "occlientbasicops" static int UnicastDiscovery = 0; static int TestCase = 0; @@ -376,7 +384,11 @@ int main(int argc, char* argv[]) return 0; } +#if defined(_WIN32) + Sleep(100); +#else nanosleep(&timeout, NULL); +#endif //defined(_WIN32) } OIC_LOG(INFO, TAG, "Exiting occlient main loop..."); diff --git a/resource/csdk/stack/samples/linux/secure/occlientdirectpairing.cpp b/resource/csdk/stack/samples/linux/secure/occlientdirectpairing.cpp index fd7d8ee..cebc7af 100644 --- a/resource/csdk/stack/samples/linux/secure/occlientdirectpairing.cpp +++ b/resource/csdk/stack/samples/linux/secure/occlientdirectpairing.cpp @@ -26,6 +26,13 @@ #include #include #include +#if defined(_WIN32) +#include +/** @todo stop-gap for naming issue. Windows.h does not like us to use ERROR */ +#ifdef ERROR +#undef ERROR +#endif +#endif // defined(_WIN32) #include "ocstack.h" #include "logger.h" #include "ocpayload.h" @@ -625,7 +632,12 @@ int main(void) return 0; } +#if defined(_WIN32) + Sleep(100); +#else nanosleep(&timeout, NULL); +#endif // defined(_WIN32) + } OIC_LOG(INFO, TAG, "Exiting occlient main loop..."); diff --git a/resource/csdk/stack/samples/linux/secure/ocserverbasicops.cpp b/resource/csdk/stack/samples/linux/secure/ocserverbasicops.cpp index 22bc674..3a2ad7b 100644 --- a/resource/csdk/stack/samples/linux/secure/ocserverbasicops.cpp +++ b/resource/csdk/stack/samples/linux/secure/ocserverbasicops.cpp @@ -25,11 +25,18 @@ #include #include #include "ocstack.h" -#include "logger.h" #include "ocpayload.h" #include "ocserverbasicops.h" #include "common.h" +#if defined(_WIN32) +#include +/** @todo stop-gap for naming issue. Windows.h does not like us to use ERROR */ +#ifdef ERROR +#undef ERROR +#endif +#endif // defined(_WIN32) +#include "logger.h" int gQuitFlag = 0; @@ -345,7 +352,11 @@ int main(int /*argc*/, char* /*argv*/[]) OIC_LOG(ERROR, TAG, "OCStack process error"); return 0; } +#if defined(_WIN32) + Sleep(100); +#else nanosleep(&timeout, NULL); +#endif //defined(_WIN32) } OIC_LOG(INFO, TAG, "Exiting ocserver main loop..."); -- 2.7.4