print ("*********** Unit test Start *************")
build_options = {
'RELEASE':'false',
+ 'LOGGING':'true'
}
extra_option_str = "resource -c"
call_scons(build_options, extra_option_str)
build_options = {
- 'LOGGING':'false',
+ 'LOGGING':'true',
'RELEASE':'false',
}
extra_option_str = "resource"
build_options = {
'TEST':1,
'RELEASE':'false',
+ 'LOGGING':'true',
}
call_scons(build_options, extra_option_str)
build_options = {
'TEST':1,
'SECURED':1,
'RELEASE':'false',
+ 'LOGGING':'true',
}
call_scons(build_options, extra_option_str)
# Use the generated file internally
env.AppendUnique(CPPPATH = [os.path.join(src_dir, 'resource', 'c_common')])
+if not env.get('RELEASE'):
+ env.PrependUnique(LIBS = ['gcov'])
+ env.AppendUnique(CCFLAGS = ['--coverage'])
+
######################################################################
######################################################################
liboctbstack_src.append(OCTBSTACK_SRC + 'oickeepalive.c')
liboctbstack_env.UserInstallTargetHeader('stack/include/oickeepalive.h', 'resource', 'oickeepalive.h')
+if not env.get('RELEASE'):
+ liboctbstack_env.PrependUnique(LIBS = ['gcov'])
+ liboctbstack_env.AppendUnique(CCFLAGS = ['--coverage'])
+
if 'SERVER' in rd_mode:
liboctbstack_src.append(OCTBSTACK_SRC + 'oicresourcedirectory.c')
if target_os not in ['tizen']:
#if defined(__TIZEN__)
CAResult_t CAGetTCPIPHeader(CATransportAdapter_t adapter, int flag, TCPHeaderInfo* info);
+#ifdef TCP_ADAPTER
/**
* Enables keep-alive on the given endpoint & configures it with user defined values.
*
* @return - Direct 'errno' value from kernel
*/
int CAGetTCPLastErrorCode();
+#endif
/**
* Set the interface to be used for outgoing TCP packets.
/* error in queue, free the allocated memory*/
OICFree(element);
- return CA_STATUS_FAILED;
+ element = NULL;
+ return CA_STATUS_FAILED;
}
queue->element = element;
if ca_os in ['darwin','ios']:
env.AppendUnique(CPPDEFINES = ['_DARWIN_C_SOURCE'])
+if not env.get('RELEASE'):
+ env.PrependUnique(LIBS = ['gcov'])
+ env.AppendUnique(CCFLAGS = ['--coverage'])
+
# Getting common source files
env.SConscript(os.path.join(root_dir, 'common', 'SConscript'))
static int retry_flag = 0;
uint64_t const TIMEOUT = 30 * MICROSECS_PER_SEC;
-#ifndef TIZEN_VD
/**
* Mutex to call connect only after disconnect during retry
*/
* Condition for calling connect during connection retry
*/
static oc_cond g_LEDisconnectedCond = NULL;
-#endif
/**
* Flag to check if scanning is in progress
return CA_STATUS_FAILED;
}
g_isConnectionInProgress = true;
-#ifndef TIZEN_VD
// Set gatt connect retry count
g_retrycount = RETRY_COUNT;
-#endif
oc_mutex_unlock(g_isConnectionInProgressMutex);
// Pause the scanning
if (!connected)
{
OIC_LOG_V(DEBUG, TAG, "DisConnected from [%s] ", remoteAddress);
-#ifdef TIZEN_VD
- oc_mutex_lock(g_LEServerListMutex);
- CARemoveLEServerInfoFromList(&g_LEServerList, remoteAddress);
- oc_mutex_unlock(g_LEServerListMutex);
-#else
if(!retry_flag)
{
oc_mutex_lock(g_LEServerListMutex);
oc_mutex_unlock(g_isDisconnectedMutex);
}
retry_flag = 0;
-#endif
}
else
{
oc_mutex_unlock(g_LEServerListMutex);
}
-
OIC_LOG(DEBUG, TAG, "OUT");
}
}
}
-#ifndef TIZEN_VD
if (NULL == g_isDisconnectedMutex)
{
g_isDisconnectedMutex = oc_mutex_new();
return CA_STATUS_FAILED;
}
}
-#endif
if (NULL == g_startTimerCond)
{
oc_mutex_free(g_threadMTUChangedMutex);
g_threadMTUChangedMutex = NULL;
-#ifndef TIZEN_VD
oc_mutex_free(g_isDisconnectedMutex);
g_isDisconnectedMutex = NULL;
oc_cond_free(g_LEDisconnectedCond);
g_LEDisconnectedCond = NULL;
-#endif
oc_cond_free(g_startTimerCond);
g_startTimerCond = NULL;
OIC_LOG(DEBUG, TAG, "OUT");
}
-#ifndef TIZEN_VD
static int CALEWaittillDisconnect(oc_mutex mutex, oc_cond cv, int wait_seconds)
{
OIC_LOG(DEBUG, TAG, "Waiting for server to be disconnected...");
OIC_LOG(DEBUG, TAG, "OUT");
return result;
}
-#endif
CAResult_t CALEGattDiscoverServices(const char *remoteAddress)
{
{
OIC_LOG_V(ERROR, TAG,
"bt_gatt_client_get_service Failed with ret value [%s] ", CALEGetErrorMsg(ret));
-#ifdef TIZEN_VD
- goto error_exit;
-#else
+
if(g_retrycount)
{
OIC_LOG(DEBUG, TAG, "Retry will be attempted to connect Gatt Server");
else
{
oc_mutex_unlock(g_LEServerListMutex);
- OIC_LOG(ERROR, TAG, "Previous connection attempt failed, attempting to retry again");
- OIC_LOG_V(DEBUG, TAG, "Retry count left %d time(s)", g_retrycount);
+ OIC_LOG(ERROR, TAG, "Previous connection attempt failed, attempting to retry again");
+ OIC_LOG_V(DEBUG, TAG, "Retry count left %d time(s)", g_retrycount);
return CA_STATUS_FAILED;
}
}
-#endif
}
retry_flag = 0;
}
LEServerInfo *serverInfo = NULL;
+ bool isConnected = false;
oc_mutex_lock(g_LEServerListMutex);
if (LE_UNICAST == type)
{
if(serverInfo->status == LE_STATUS_UNICAST_PENDING)
{
- oc_mutex_lock(g_scanMutex);
- if (!g_isMulticastInProgress && !g_isUnicastScanInProgress)
+
+ int ret = bt_device_is_profile_connected(remoteAddress, BT_PROFILE_GATT, &isConnected);
+ if (BT_ERROR_NONE != ret)
{
- CAResult_t result = CALEGattStartDeviceScanning();
- if (CA_STATUS_OK != result)
+ OIC_LOG_V(ERROR, TAG, "bt_device_is_profile_connected Failed with ret value [%s] ",
+ CALEGetErrorMsg(ret));
+ oc_mutex_unlock(g_LEServerListMutex);
+ return CA_STATUS_FAILED;
+ }
+
+ if (isConnected){
+ OIC_LOG_V(DEBUG, TAG, "Already connected to address [%s]", remoteAddress);
+ serverInfo->status = LE_STATUS_CONNECTED;
+ } else {
+ oc_mutex_lock(g_scanMutex);
+ if (!g_isMulticastInProgress && !g_isUnicastScanInProgress)
{
- oc_mutex_unlock(g_scanMutex);
- OIC_LOG(ERROR, TAG, "CALEGattStartDeviceScanning failed");
- return CA_STATUS_FAILED;
+ CAResult_t result = CALEGattStartDeviceScanning();
+ if (CA_STATUS_OK != result)
+ {
+ oc_mutex_unlock(g_scanMutex);
+ OIC_LOG(ERROR, TAG, "CALEGattStartDeviceScanning failed");
+ oc_mutex_unlock(g_LEServerListMutex);
+ return CA_STATUS_FAILED;
+ }
+ g_isUnicastScanInProgress = true;
+ // Start Timer
+ oc_cond_signal(g_startTimerCond);
}
- g_isUnicastScanInProgress = true;
- // Start Timer
- oc_cond_signal(g_startTimerCond);
+ else
+ {
+ g_isUnicastScanInProgress = true;
+ // Reset Timer
+ oc_cond_signal(g_scanningTimeCond);
+ }
+ oc_mutex_unlock(g_scanMutex);
+ }
+
+ }
+
+ if (serverInfo->status == LE_STATUS_CONNECTED)
+ {
+ oc_mutex_lock(g_LEClientThreadPoolMutex);
+ if (NULL == g_LEClientThreadPool)
+ {
+ oc_mutex_unlock(g_LEClientThreadPoolMutex);
+ OIC_LOG(ERROR, TAG, "g_LEClientThreadPool is NULL");
+ oc_mutex_unlock(g_LEServerListMutex);
+ return CA_STATUS_FAILED;
}
- else
+ char *addr = OICStrdup(remoteAddress);
+ if (NULL == addr)
{
- g_isUnicastScanInProgress = true;
- // Reset Timer
- oc_cond_signal(g_scanningTimeCond);
+ oc_mutex_unlock(g_LEClientThreadPoolMutex);
+ OIC_LOG(ERROR, TAG, "addr is NULL");
+ oc_mutex_unlock(g_LEServerListMutex);
+ return CA_STATUS_FAILED;
+ }
+ CAResult_t ret = ca_thread_pool_add_task(g_LEClientThreadPool, CADiscoverLEServicesThread,
+ addr, NULL);
+ oc_mutex_unlock(g_LEClientThreadPoolMutex);
+ if (CA_STATUS_OK != ret)
+ {
+ OIC_LOG_V(ERROR, TAG, "ca_thread_pool_add_task failed with ret [%d]", ret);
+ OICFree(addr);
}
- oc_mutex_unlock(g_scanMutex);
-
}
if (serverInfo->status == LE_STATUS_DISCOVERED)
OIC_LOG_V(ERROR, TAG,
"bt_gatt_client_create Failed with ret value [%s] ", CALEGetErrorMsg(ret));
CALEGattDisConnect(serverInfo->remoteAddress);
+ oc_mutex_unlock(g_LEServerListMutex);
return CA_STATUS_FAILED;
}
serverInfo->clientHandle = clientHandle;
{
OIC_LOG_V(ERROR, TAG,
"bt_gatt_server_get_device_mtu failed with return [%s]", CALEGetErrorMsg(ret));
+ oc_mutex_unlock(g_LEClientListMutex);
return CA_DEFAULT_BLE_MTU_SIZE;
}
#else
{
OIC_LOG_V(ERROR, TAG,
"bt_device_get_att_mtu failed with return [%s]", CALEGetErrorMsg(ret));
+ oc_mutex_unlock(g_LEClientListMutex);
return CA_DEFAULT_BLE_MTU_SIZE;
}
#endif // BLE_TIZEN_40
CAResult_t CAIPSetNetworkMonitorCallback(CAIPAdapterStateChangeCallback callback,
CATransportAdapter_t adapter)
{
- return CAIPSetNetworkMonitorCallbackInternal(callback, adapter, g_adapterCallbackList);
+ return CAIPSetNetworkMonitorCallbackInternal(callback, adapter, &g_adapterCallbackList);
}
CAResult_t CAIPUnSetNetworkMonitorCallback(CATransportAdapter_t adapter)
{
- return CAIPUnSetNetworkMonitorCallbackInternal(adapter, g_adapterCallbackList);
+ return CAIPUnSetNetworkMonitorCallbackInternal(adapter, &g_adapterCallbackList);
}
u_arraylist_t *CAFindInterfaceChange()
}
CAResult_t CAIPSetNetworkMonitorCallbackInternal(CAIPAdapterStateChangeCallback callback,
- CATransportAdapter_t adapter, CAIPCBData_t *adapterCallbackList)
+ CATransportAdapter_t adapter, CAIPCBData_t **adapterCallbackList)
{
if (!callback)
{
}
CAIPCBData_t *cbitem = NULL;
- LL_FOREACH(adapterCallbackList, cbitem)
+ CAIPCBData_t *list = *adapterCallbackList;
+ LL_FOREACH(list, cbitem)
{
if (cbitem && adapter == cbitem->adapter && callback == cbitem->callback)
{
cbitem->adapter = adapter;
cbitem->callback = callback;
- LL_APPEND(adapterCallbackList, cbitem);
+ LL_APPEND(list, cbitem);
+ *adapterCallbackList = list;
return CA_STATUS_OK;
}
CAResult_t CAIPUnSetNetworkMonitorCallbackInternal(CATransportAdapter_t adapter,
- CAIPCBData_t *adapterCallbackList)
+ CAIPCBData_t **adapterCallbackList)
{
CAIPCBData_t *cbitem = NULL;
CAIPCBData_t *tmpCbitem = NULL;
- LL_FOREACH_SAFE(adapterCallbackList, cbitem, tmpCbitem)
+ CAIPCBData_t *list = *adapterCallbackList;
+ LL_FOREACH_SAFE(list, cbitem, tmpCbitem)
{
if (cbitem && adapter == cbitem->adapter)
{
OIC_LOG(DEBUG, TAG, "remove specific callback");
- LL_DELETE(adapterCallbackList, cbitem);
+ LL_DELETE(list, cbitem);
+ *adapterCallbackList = list;
OICFree(cbitem);
return CA_STATUS_OK;
}
CAIPCBData_t *adapterCallbackList, CAIPAdapterPlatform_t platform);
CAResult_t CAIPSetNetworkMonitorCallbackInternal(CAIPAdapterStateChangeCallback callback,
- CATransportAdapter_t adapter, CAIPCBData_t *adapterCallbackList);
+ CATransportAdapter_t adapter, CAIPCBData_t **adapterCallbackList);
CAResult_t CAIPUnSetNetworkMonitorCallbackInternal(CATransportAdapter_t adapter,
- CAIPCBData_t *adapterCallbackList);
+ CAIPCBData_t **adapterCallbackList);
#ifdef __cplusplus
}
CAResult_t CAIPSetNetworkMonitorCallback(CAIPAdapterStateChangeCallback callback,
CATransportAdapter_t adapter)
{
- return CAIPSetNetworkMonitorCallbackInternal(callback, adapter, g_adapterCallbackList);
+ return CAIPSetNetworkMonitorCallbackInternal(callback, adapter, &g_adapterCallbackList);
}
CAResult_t CAIPUnSetNetworkMonitorCallback(CATransportAdapter_t adapter)
{
- return CAIPUnSetNetworkMonitorCallbackInternal(adapter, g_adapterCallbackList);
+ return CAIPUnSetNetworkMonitorCallbackInternal(adapter, &g_adapterCallbackList);
}
static CAInterface_t *CANewInterfaceItem(int index, const char *name, int family,
CAResult_t CAIPSetNetworkMonitorCallback(CAIPAdapterStateChangeCallback callback,
CATransportAdapter_t adapter)
{
- return CAIPSetNetworkMonitorCallbackInternal(callback, adapter, g_adapterCallbackList);
+ return CAIPSetNetworkMonitorCallbackInternal(callback, adapter, &g_adapterCallbackList);
}
CAResult_t CAIPUnSetNetworkMonitorCallback(CATransportAdapter_t adapter)
{
- return CAIPUnSetNetworkMonitorCallbackInternal(adapter, g_adapterCallbackList);
+ return CAIPUnSetNetworkMonitorCallbackInternal(adapter, &g_adapterCallbackList);
}
u_arraylist_t *CAFindInterfaceChange()
CAResult_t CADisconnectTCPSession(size_t index)
{
+ oc_mutex_lock(g_mutexObjectList);
CATCPSessionInfo_t *removedData = u_arraylist_remove(caglobals.tcp.svrlist, index);
if (!removedData)
{
OIC_LOG(DEBUG, TAG, "there is no data to be removed");
+ oc_mutex_unlock(g_mutexObjectList);
return CA_STATUS_OK;
}
-
+ oc_mutex_unlock(g_mutexObjectList);
// close the socket and remove session info in list.
if (removedData->fd >= 0)
{
g_connectionCallback(&(removedData->sep.endpoint), false, removedData->isClient);
}
}
- OICFree(removedData->data);
- removedData->data = NULL;
-
- OICFree(removedData->tlsdata);
- removedData->tlsdata = NULL;
+ if (removedData->data)
+ {
+ OICFree(removedData->data);
+ removedData->data = NULL;
+ }
- OICFree(removedData);
- removedData = NULL;
+ if (removedData->tlsdata)
+ {
+ OICFree(removedData->tlsdata);
+ removedData->tlsdata = NULL;
+ }
+ if (removedData)
+ {
+ OICFree(removedData);
+ removedData = NULL;
+ }
OIC_LOG(DEBUG, TAG, "data is removed from session list");
#ifndef DISABLE_TCP_SERVER
return res;
}
+#ifdef TCP_ADAPTER
CAResult_t CASetTCPKeepAlive(const CAEndpoint_t *endpoint, int time, int cnt, int intvl)
{
OIC_LOG(DEBUG, TAG, "CASetTCPKeepAlive");
OIC_LOG(DEBUG, TAG, "CAGetTCPLastErrorCode");
return CATCPGetLastErrorCode();
}
-
+#endif
#endif
if env.get('OIC_SUPPORT_TIZEN_TRACE') == 'True':
env.AppendUnique(CPPDEFINES = ['OIC_SUPPORT_TIZEN_TRACE'])
+if not env.get('RELEASE'):
+ env.PrependUnique(LIBS = ['gcov'])
+ env.AppendUnique(CCFLAGS = ['--coverage'])
+
env.PrependUnique(LIBS = ['logger'])
local_env = env.Clone()
*/
OCStackResult CheckSecurityACEPermission(uint16_t permission);
+/**
+ * This method add new ACE to ACL
+ *
+ * @param subject of the ACE
+ * @param href resource string
+ * @param rel resource string
+ * @param types string array
+ * @param typeLen string array size
+ * @param interfaces string array
+ * @param interfaceLen string array size
+ * @param permission value
+ *
+ * @return ::OC_STACK_OK for Success, otherwise some error value.
+ */
+OCStackResult AddACE(const OicUuid_t *subject, const char *href, const char *rel,
+ const char **types, size_t typeLen,
+ const char **interfaces, size_t interfaceLen,
+ uint16_t permission);
+
#ifdef __cplusplus
}
#endif
#include "byte_array.h"
#endif /* __WITH_DTLS__ or __WITH_TLS__*/
+#include "octypes.h"
+
#ifdef __cplusplus
extern "C" {
#endif
typedef char *OicUrn_t; //TODO is URN type defined elsewhere?
-typedef struct OicUuid OicUuid_t; //TODO is UUID type defined elsewhere?
-
#ifdef MULTIPLE_OWNER
typedef struct OicSecSubOwner OicSecSubOwner_t;
typedef struct OicSecMom OicSecMom_t;
typedef void OicSecCert_t;
#endif /* __WITH_DTLS__ or __WITH_TLS__*/
-/**
- * /oic/uuid (Universal Unique Identifier) data type.
- */
-#define UUID_LENGTH 128/8 // 128-bit GUID length
//TODO: Confirm the length and type of ROLEID.
#define ROLEID_LENGTH 128/8 // 128-bit ROLEID length
#define OWNER_PSK_LENGTH_128 128/8 //byte size of 128-bit key size
#define OWNER_PSK_LENGTH_256 256/8 //byte size of 256-bit key size
-struct OicUuid
-{
- // <Attribute ID>:<Read/Write>:<Multiple/Single>:<Mandatory?>:<Type>
- //TODO fill in unless this is defined elsewhere?
- uint8_t id[UUID_LENGTH];
-};
-
/**
* /oic/sec/jwk (JSON Web Key) data type.
* See JSON Web Key (JWK) draft-ietf-jose-json-web-key-41
VERIFY_CBOR_SUCCESS(TAG, cborFindResult, "Failed Finding RT array length.");
}
- VERIFY_SUCCESS(TAG, (0 != rsrc->typeLen), ERROR);
-
- rsrc->types = (char**)OICCalloc(rsrc->typeLen, sizeof(char*));
- VERIFY_NON_NULL(TAG, rsrc->types, ERROR);
+ if (0 != rsrc->typeLen)
+ {
+ rsrc->types = (char**)OICCalloc(rsrc->typeLen, sizeof(char*));
+ VERIFY_NON_NULL(TAG, rsrc->types, ERROR);
- cborFindResult = cbor_value_enter_container(&rMap, &resourceTypes);
- VERIFY_CBOR_SUCCESS(TAG, cborFindResult, "Failed Entering RT Array.");
+ cborFindResult = cbor_value_enter_container(&rMap, &resourceTypes);
+ VERIFY_CBOR_SUCCESS(TAG, cborFindResult, "Failed Entering RT Array.");
- for(size_t i = 0; cbor_value_is_valid(&resourceTypes) && cbor_value_is_text_string(&resourceTypes); i++)
- {
- cborFindResult = cbor_value_dup_text_string(&resourceTypes, &(rsrc->types[i]), &readLen, NULL);
- VERIFY_CBOR_SUCCESS(TAG, cborFindResult, "Failed Finding resource type.");
- cborFindResult = cbor_value_advance(&resourceTypes);
- VERIFY_CBOR_SUCCESS(TAG, cborFindResult, "Failed Advancing resource type.");
+ for(size_t i = 0; cbor_value_is_valid(&resourceTypes) && cbor_value_is_text_string(&resourceTypes); i++)
+ {
+ cborFindResult = cbor_value_dup_text_string(&resourceTypes, &(rsrc->types[i]), &readLen, NULL);
+ VERIFY_CBOR_SUCCESS(TAG, cborFindResult, "Failed Finding resource type.");
+ cborFindResult = cbor_value_advance(&resourceTypes);
+ VERIFY_CBOR_SUCCESS(TAG, cborFindResult, "Failed Advancing resource type.");
+ }
}
}
VERIFY_CBOR_SUCCESS(TAG, cborFindResult, "Failed Finding IF array length.");
}
- VERIFY_SUCCESS(TAG, (0 != rsrc->interfaceLen), ERROR);
-
- rsrc->interfaces = (char**)OICCalloc(rsrc->interfaceLen, sizeof(char*));
- VERIFY_NON_NULL(TAG, rsrc->interfaces, ERROR);
+ if (0 != rsrc->interfaceLen)
+ {
+ rsrc->interfaces = (char**)OICCalloc(rsrc->interfaceLen, sizeof(char*));
+ VERIFY_NON_NULL(TAG, rsrc->interfaces, ERROR);
- cborFindResult = cbor_value_enter_container(&rMap, &interfaces);
- VERIFY_CBOR_SUCCESS(TAG, cborFindResult, "Failed Entering IF Array.");
+ cborFindResult = cbor_value_enter_container(&rMap, &interfaces);
+ VERIFY_CBOR_SUCCESS(TAG, cborFindResult, "Failed Entering IF Array.");
- for(size_t i = 0; cbor_value_is_valid(&interfaces) && cbor_value_is_text_string(&interfaces); i++)
- {
- cborFindResult = cbor_value_dup_text_string(&interfaces, &(rsrc->interfaces[i]), &readLen, NULL);
- VERIFY_CBOR_SUCCESS(TAG, cborFindResult, "Failed Finding IF type.");
- cborFindResult = cbor_value_advance(&interfaces);
- VERIFY_CBOR_SUCCESS(TAG, cborFindResult, "Failed Advancing IF type.");
+ for(size_t i = 0; cbor_value_is_valid(&interfaces) && cbor_value_is_text_string(&interfaces); i++)
+ {
+ cborFindResult = cbor_value_dup_text_string(&interfaces, &(rsrc->interfaces[i]), &readLen, NULL);
+ VERIFY_CBOR_SUCCESS(TAG, cborFindResult, "Failed Finding IF type.");
+ cborFindResult = cbor_value_advance(&interfaces);
+ VERIFY_CBOR_SUCCESS(TAG, cborFindResult, "Failed Advancing IF type.");
+ }
}
}
for (size_t i = 0; i < res->typeLen; i++)
{
- OIC_LOG_V(INFO, TAG, "if[%zu] = %s", i, res->types[i]);
+ OIC_LOG_V(INFO, TAG, "rt[%zu] = %s", i, res->types[i]);
}
for (size_t i = 0; i < res->interfaceLen; i++)
{
{
OIC_LOG_V(INFO, TAG, "recurrences[%zu] = %s", i, vals->recurrences[i]);
}
+
+ vals = vals->next;
}
ace = ace->next;
OIC_LOG_V(DEBUG, TAG, "OUT: %s", __func__);
return ret;
}
+
+/**
+ * This method add new ACE to ACL
+ *
+ * @param subject of the ACE
+ * @param href resource string
+ * @param rel resource string
+ * @param types string array
+ * @param typeLen string array size
+ * @param interfaces string array
+ * @param interfaceLen string array size
+ * @param permission value
+ *
+ * @return ::OC_STACK_OK for Success, otherwise some error value.
+ */
+OCStackResult AddACE(const OicUuid_t *subject, const char *href, const char *rel,
+ const char **types, size_t typeLen,
+ const char **interfaces, size_t interfaceLen,
+ uint16_t permission)
+{
+ OCStackResult ret = OC_EH_ERROR;
+
+ OIC_LOG_V(DEBUG, TAG, "IN: %s", __func__);
+
+ if (!gAcl)
+ {
+ OIC_LOG_V(ERROR, TAG, "%s: gAcl is NULL", __func__);
+ return OC_STACK_INVALID_PARAM;
+ }
+
+ if (!subject)
+ {
+ OIC_LOG_V(ERROR, TAG, "%s: Invalid Parameter", __func__);
+ return OC_STACK_INVALID_PARAM;
+ }
+
+ OicSecAce_t newAce;
+ OicSecRsrc_t resources;
+ memcpy(&newAce.subjectuuid, subject, sizeof(OicUuid_t));
+ resources.href = href;
+ resources.rel = rel;
+ resources.types = types;
+ resources.typeLen = typeLen;
+ resources.interfaces = interfaces;
+ resources.interfaceLen = interfaceLen;
+ resources.next = NULL;
+ newAce.resources = &resources;
+ newAce.permission = permission;
+ newAce.validities = NULL;
+#ifdef MULTIPLE_OWNER
+ newAce.eownerID = NULL;
+#endif
+ newAce.next = NULL;
+
+ //Check existing ACE's
+ OicSecAce_t *existAce = NULL;
+ OicSecAce_t *tempAce = NULL;
+ LL_FOREACH_SAFE(gAcl->aces, existAce, tempAce)
+ {
+ if (IsSameACE(&newAce, existAce))
+ {
+ OIC_LOG(DEBUG, TAG, "Duplicated ACE dectected.");
+ return OC_STACK_DUPLICATE_REQUEST;
+ }
+ }
+
+ // Add new ACE to ACL
+ OIC_LOG(DEBUG, TAG, "NEW ACE dectected.");
+ OicSecAce_t *insertAce = DuplicateACE(&newAce);
+ if (insertAce)
+ {
+ OIC_LOG(DEBUG, TAG, "Appending new ACE..");
+ LL_APPEND(gAcl->aces, insertAce);
+
+ // Update persistant storage
+ uint8_t *payload = NULL;
+ size_t size = 0;
+ if (OC_STACK_OK == AclToCBORPayload(gAcl, &payload, &size))
+ {
+ if (OC_STACK_OK == UpdateSecureResourceInPS(OIC_JSON_ACL_NAME, payload, size))
+ {
+ ret = OC_STACK_OK;
+ }
+ else
+ {
+ OIC_LOG(ERROR, TAG, "UpdateSecureResourceInPS failed");
+ }
+ OICFree(payload);
+ }
+ else
+ {
+ OIC_LOG(ERROR, TAG, "AclToCBORPayload failed");
+ }
+ }
+ else
+ {
+ OIC_LOG(ERROR, TAG, "Failed to duplicate ACE.");
+ }
+
+ OIC_LOG_V(DEBUG, TAG, "OUT: %s", __func__);
+
+ return ret;
+}
OCStackResult OCGetDeviceOperationalState(bool* isOp);
+/**
+ * Helper method to add a new ACE to the ACL
+ *
+ * @param subjectuuid of the ACE
+ * @param href resource string
+ * @param rel resource string
+ * @param types string array
+ * @param typeLen string array size
+ * @param interfaces string array
+ * @param interfaceLen string array size
+ * @param permission value
+ *
+ * @return ::OC_STACK_OK for Success, otherwise some error value.
+ */
+OCStackResult AddACEToACL(const OicUuid_t *subjectuuid, const char *href, const char *rel,
+ const char **types, size_t typeLen,
+ const char **interfaces, size_t interfaceLen,
+ uint16_t permission);
+
#ifdef __cplusplus
}
#endif // __cplusplus
ResetSVRDBCB callback;
} resetSVRDBCB_t;
+/**
+ * Universal Unique Identifier data type.
+ */
+#define UUID_LENGTH (128/8) // 128-bit GUID length
+typedef struct OicUuid
+{
+ uint8_t id[UUID_LENGTH];
+} OicUuid_t;
+
#ifdef __cplusplus
}
#endif // __cplusplus
case OC_EH_PROXY_NOT_SUPPORTED:
result = OC_STACK_PROXY_NOT_SUPPORTED;
break;
+ case OC_EH_BAD_REQ:
+ result = OC_STACK_INVALID_QUERY;
+ break;
+ case OC_EH_UNAUTHORIZED_REQ:
+ result = OC_STACK_UNAUTHORIZED_REQ;
+ break;
+ case OC_EH_BAD_OPT:
+ result = OC_STACK_INVALID_OPTION;
+ break;
+ case OC_EH_TOO_LARGE:
+ result = OC_STACK_TOO_LARGE_REQ;
+ break;
+ case OC_EH_NOT_ACCEPTABLE:
+ result = OC_STACK_NOT_ACCEPTABLE;
+ break;
+ case OC_EH_METHOD_NOT_ALLOWED:
+ result = OC_STACK_METHOD_NOT_ALLOWED;
+ break;
default:
result = OC_STACK_ERROR;
}
#include "oicgroup.h"
#include "pstatresource.h"
#include "srmutility.h"
+#include "aclresource.h"
#if defined (ROUTING_GATEWAY) || defined (ROUTING_EP)
#include "routingutility.h"
#endif
return OC_STACK_OK;
}
+
+/**
+ * Helper method to add a new ACE to the ACL
+ *
+ * @param subjectuuid of the ACE
+ * @param href resource string
+ * @param rel resource string
+ * @param types string array
+ * @param typeLen string array size
+ * @param interfaces string array
+ * @param interfaceLen string array size
+ * @param permission value
+ *
+ * @return ::OC_STACK_OK for Success, otherwise some error value.
+ */
+OCStackResult AddACEToACL(const OicUuid_t *subjectuuid, const char *href, const char *rel,
+ const char **types, size_t typeLen,
+ const char **interfaces, size_t interfaceLen,
+ uint16_t permission)
+{
+ return AddACE(subjectuuid, href, rel, types, typeLen,
+ interfaces, interfaceLen, permission);
+}
{
static const char COAP[] = "coap://";
static const char COAPS[] = "coaps://";
- static const int UUID_LENGTH = (128/8); //UUID length
OCDirectPairing::OCDirectPairing(OCDPDev_t *ptr):m_devPtr(ptr)
{
oclib_env.AppendUnique(LIBS = ['oc_logger'])
oclib_env.PrependUnique(LIBS = ['octbstack', 'connectivity_abstraction', 'ocsrm'])
+if not oclib_env.get('RELEASE'):
+ oclib_env.PrependUnique(LIBS = ['gcov'])
+ oclib_env.AppendUnique(CCFLAGS = ['--coverage'])
+
if 'g++' in oclib_env.get('CXX'):
oclib_env.AppendUnique(CXXFLAGS = ['-std=c++0x'])
oclib_env.AppendUnique(CXXFLAGS = ['-Wall'])
tests_list=(
"${IOTIVITY_BASE}/out/${IOTIVITY_TARGET_OS}/${IOTIVITY_TARGET_ARCH}/debug/resource/csdk/connectivity/test/catests"
+ "${IOTIVITY_BASE}/out/${IOTIVITY_TARGET_OS}/${IOTIVITY_TARGET_ARCH}/debug/resource/csdk/stack/test/stacktests"
+ "${IOTIVITY_BASE}/out/${IOTIVITY_TARGET_OS}/${IOTIVITY_TARGET_ARCH}/debug/resource/csdk/stack/test/cbortests"
+ "${IOTIVITY_BASE}/out/${IOTIVITY_TARGET_OS}/${IOTIVITY_TARGET_ARCH}/debug/resource/unittests/unittests"
+ "${IOTIVITY_BASE}/out/${IOTIVITY_TARGET_OS}/${IOTIVITY_TARGET_ARCH}/debug/resource/c_common/ocrandom/test/randomtests"
+ "${IOTIVITY_BASE}/out/${IOTIVITY_TARGET_OS}/${IOTIVITY_TARGET_ARCH}/debug/resource/c_common/oic_malloc/test/malloctests"
+ "${IOTIVITY_BASE}/out/${IOTIVITY_TARGET_OS}/${IOTIVITY_TARGET_ARCH}/debug/resource/c_common/oic_string/test/stringtests"
+ "${IOTIVITY_BASE}/out/${IOTIVITY_TARGET_OS}/${IOTIVITY_TARGET_ARCH}/debug/resource/c_common/oic_time/test/timetests"
);
for exe in ${tests_list[@]}; do
tests_list=(
"${IOTIVITY_BASE}/out/${IOTIVITY_TARGET_OS}/${IOTIVITY_TARGET_ARCH}/debug/service/resource-encapsulation/src/serverBuilder/rcs_server_test"
- "${IOTIVITY_BASE}/out/${IOTIVITY_TARGET_OS}/${IOTIVITY_TARGET_ARCH}/debug/service/resource-encapsulation/unittests/rcs_client_test"
- "${IOTIVITY_BASE}/out/${IOTIVITY_TARGET_OS}/${IOTIVITY_TARGET_ARCH}/debug/service/resource-encapsulation/src/common/primitiveResource/unittests/rcs_common_test"
+ "${IOTIVITY_BASE}/out/${IOTIVITY_TARGET_OS}/${IOTIVITY_TARGET_ARCH}/debug/service/resource-encapsulation/src/common/rcs_common_test"
"${IOTIVITY_BASE}/out/${IOTIVITY_TARGET_OS}/${IOTIVITY_TARGET_ARCH}/debug/service/resource-encapsulation/src/resourceCache/unittests/cache_test"
"${IOTIVITY_BASE}/out/${IOTIVITY_TARGET_OS}/${IOTIVITY_TARGET_ARCH}/debug/service/resource-encapsulation/src/resourceBroker/unittest/broker_test"
);