From df5b24bf279865aac2bc5d947ad5bf0f701bff88 Mon Sep 17 00:00:00 2001 From: Sachin Agrawal Date: Tue, 13 Jan 2015 21:16:00 -0800 Subject: [PATCH] Updated Iotivity to compile DTLS modules using SCons Added Scons script for compiling security samples. Also, updated CA Scons script to compile connectivity_abstraction.so with DTLS when scons is invoked with WITH_DTLS=1. Also updated security samples to use updated OCDoResource API with connectivity_type argument. Change-Id: I1561266dda1c0ff88e1ad3684a1921b44f12839d Signed-off-by: Sachin Agrawal --- resource/SConscript | 3 ++ resource/csdk/connectivity/SConscript | 32 +++++++++++++ .../csdk/stack/samples/linux/secure/SConscript | 53 ++++++++++++++++++++++ .../samples/linux/secure/occlientbasicops.cpp | 9 +++- 4 files changed, 96 insertions(+), 1 deletion(-) create mode 100644 resource/csdk/stack/samples/linux/secure/SConscript diff --git a/resource/SConscript b/resource/SConscript index 6c969c2..bc498c0 100644 --- a/resource/SConscript +++ b/resource/SConscript @@ -28,5 +28,8 @@ if target_os != 'arduino': SConscript('examples/SConscript') SConscript('csdk/stack/samples/linux/SimpleClientServer/SConscript') + + # Build secure samples + SConscript('csdk/stack/samples/linux/secure/SConscript') else: SConscript('csdk/stack/samples/arduino/SimpleClientServer/ocserver/SConscript') diff --git a/resource/csdk/connectivity/SConscript b/resource/csdk/connectivity/SConscript index 7cb81e2..b6c06f5 100644 --- a/resource/csdk/connectivity/SConscript +++ b/resource/csdk/connectivity/SConscript @@ -8,6 +8,22 @@ lib_env = env.Clone() SConscript(env.get('SRC_DIR') + '/resource/third_party_libs.scons', 'lib_env') calib_env = lib_env.Clone() + +###################################################################### +# Add build options (WITH_DTLS) info for help command +###################################################################### +help_vars = Variables() +help_vars.Add(BoolVariable('WITH_DTLS', 'enable security support?', False)) +help_vars.Update(env) +Help(help_vars.GenerateHelpText(env)) + +###################################################################### +# Get build options (the options from command line) +###################################################################### +with_dtls = env.get('WITH_DTLS') +if (with_dtls): + print "Info: Building CA library with DTLS support" + ###################################################################### # Build flags ###################################################################### @@ -22,6 +38,12 @@ calib_env.AppendUnique(CPPPATH = [ './lib/libcoap-4.1.1' ]) +if (with_dtls): + calib_env.AppendUnique(CPPPATH = [ + './lib/extlibs/tinydtls', + '../stack/include' + ]) + target_os = env.get('TARGET_OS') if target_os not in ['windows', 'winrt']: @@ -32,6 +54,13 @@ if target_os not in ['windows', 'winrt']: 'WIFI_ADAPTER', 'ETHERNET_ADAPTER', #'TB_LOG' ]) + if (with_dtls): + calib_env.AppendUnique(CPPDEFINES = [ + '__WITH_DTLS__', + ]) + calib_env.AppendUnique(LIBPATH = ['./lib/extlibs/tinydtls']) + calib_env.PrependUnique(LIBS = ['tinydtls']) + calib_env.ParseConfig('pkg-config --cflags glib-2.0') @@ -72,6 +101,9 @@ calib_src = [ './src/ethernet_adapter/linux/caethernetnwmonitor.c' ] +if (with_dtls): + calib_src = calib_src + ['./src/adapter_util/caadapternetdtls.c'] + calib = calib_env.SharedLibrary('connectivity_abstraction', calib_src) calib_env.InstallTarget(calib, 'libconnectivity_abstraction') diff --git a/resource/csdk/stack/samples/linux/secure/SConscript b/resource/csdk/stack/samples/linux/secure/SConscript new file mode 100644 index 0000000..0132d3a --- /dev/null +++ b/resource/csdk/stack/samples/linux/secure/SConscript @@ -0,0 +1,53 @@ + +Import('env') + +samples_env = env.Clone() +###################################################################### +# Build flags +###################################################################### +samples_env.PrependUnique(CPPPATH = [ + '../../../../ocsocket/include', + '../../../../logger/include', + '../../../../stack/include', + '../../../../../../extlibs/cjson', + '../../../../../oc_logger/include' + ]) + +target_os = env.get('TARGET_OS') +if target_os not in ['windows', 'winrt']: + samples_env.AppendUnique(CXXFLAGS = ['-std=c++0x', '-Wall', '-pthread']) + + # Note: 'pthread' is in libc for android. + if target_os != 'android': + samples_env.AppendUnique(LIBS = ['-lpthread']) + +samples_env.AppendUnique(LIBPATH = [env.get('BUILD_DIR')]) +samples_env.PrependUnique(LIBS = ['oc', 'octbstack', 'm', 'coap', 'coap_csdk', 'oc_logger', 'connectivity_abstraction']) +samples_env.Append(LINKFLAGS = ['-Wl,--no-as-needed']) + +samples_env.ParseConfig('pkg-config --libs glib-2.0'); + +if target_os == 'android': + samples_env.AppendUnique(CXXFLAGS = ['-frtti', '-fexceptions']) + samples_env.AppendUnique(LIBS = ['gnustl_static']) + samples_env.AppendUnique(CPPDEFINES = ['_GLIBCXX_USE_C99=1', '_GLIBCXX_HAVE_WCSTOF=1']) + + if not env.get('RELEASE'): + samples_env.AppendUnique(LIBS = ['log']) + +if target_os in ['darwin', 'ios']: + samples_env.AppendUnique(CPPDEFINES = ['_DARWIN_C_SOURCE']) + +samples_env.AppendUnique(CPPDEFINES = ['CA_INT', 'CA_INT_DTLS', 'TB_LOG']) + +###################################################################### +# Source files and Targets +###################################################################### +ocserverbasicops = samples_env.Program('ocserverbasicops', ['common.cpp', 'ocserverbasicops.cpp']) +occlientbasicops = samples_env.Program('occlientbasicops', ['common.cpp', 'occlientbasicops.cpp']) +gen_sec_bin = samples_env.Program('gen_sec_bin', ['gen_sec_bin.cpp']) + + +Alias("samples", [ocserverbasicops, occlientbasicops]) + +env.AppendTarget('samples') diff --git a/resource/csdk/stack/samples/linux/secure/occlientbasicops.cpp b/resource/csdk/stack/samples/linux/secure/occlientbasicops.cpp index ce051d0..3cf8256 100644 --- a/resource/csdk/stack/samples/linux/secure/occlientbasicops.cpp +++ b/resource/csdk/stack/samples/linux/secure/occlientbasicops.cpp @@ -87,6 +87,9 @@ OCStackResult InvokeOCDoResource(std::ostringstream &query, ret = OCDoResource(&handle, method, query.str().c_str(), 0, (method == OC_REST_PUT || method == OC_REST_POST) ? putPayload.c_str() : NULL, +#ifdef CA_INT + (OC_WIFI), +#endif qos, &cbData, options, numOptions); if (ret != OC_STACK_OK) @@ -260,7 +263,11 @@ int InitDiscovery() cbData.cb = discoveryReqCB; cbData.context = NULL; cbData.cd = NULL; - ret = OCDoResource(&handle, OC_REST_GET, szQueryUri, 0, 0, OC_LOW_QOS, &cbData, NULL, 0); + ret = OCDoResource(&handle, OC_REST_GET, szQueryUri, 0, 0, +#ifdef CA_INT + (OC_WIFI), +#endif + OC_LOW_QOS, &cbData, NULL, 0); if (ret != OC_STACK_OK) { OC_LOG(ERROR, TAG, "OCStack resource error"); -- 2.7.4