RAML v1.1 sync-up in SVR DB
[platform/upstream/iotivity.git] / resource / csdk / security / src / srmutility.c
index f81b511..8c9e991 100644 (file)
@@ -137,3 +137,62 @@ const char* GetOxmString(OicSecOxm_t oxmType)
             return NULL;
     }
 }
+
+OCStackResult ConvertUuidToStr(const OicUuid_t* uuid, char** strUuid)
+{
+    if(NULL == uuid || NULL == strUuid || NULL != *strUuid)
+    {
+        OIC_LOG(ERROR, TAG, "ConvertUuidToStr : Invalid param");
+        return OC_STACK_INVALID_PARAM;
+    }
+
+    size_t uuidIdx = 0;
+    size_t urnIdx = 0;
+    const size_t urnBufSize = (UUID_LENGTH * 2) + 4 + 1;
+    char* convertedUrn = (char*)OICCalloc(urnBufSize, sizeof(char));
+    VERIFY_NON_NULL(TAG, convertedUrn, ERROR);
+
+    for(uuidIdx=0, urnIdx=0;  uuidIdx < UUID_LENGTH && urnIdx < urnBufSize; uuidIdx++, urnIdx+=2)
+    {
+        // canonical format for UUID has '8-4-4-4-12'
+        if(uuidIdx==4 || uuidIdx==6 || uuidIdx==8 || uuidIdx==10)
+        {
+            snprintf(convertedUrn + urnIdx, 2, "%c", '-');
+            urnIdx++;
+        }
+        snprintf(convertedUrn + urnIdx, 3, "%02x", (uint8_t)(uuid->id[uuidIdx]));
+    }
+    convertedUrn[urnBufSize - 1] = '\0';
+
+    *strUuid = convertedUrn;
+    return OC_STACK_OK;
+
+exit:
+    return OC_STACK_NO_MEMORY;
+}
+
+OCStackResult ConvertStrToUuid(const char* strUuid, OicUuid_t* uuid)
+{
+    if(NULL == strUuid || NULL == uuid)
+    {
+        OIC_LOG(ERROR, TAG, "ConvertStrToUuid : Invalid param");
+        return OC_STACK_INVALID_PARAM;
+    }
+
+    size_t urnIdx = 0;
+    size_t uuidIdx = 0;
+    char convertedUuid[UUID_LENGTH * 2] = {0};
+
+    for(uuidIdx=0, urnIdx=0; uuidIdx < UUID_LENGTH ; uuidIdx++, urnIdx+=2)
+    {
+        if(*(strUuid + urnIdx) == '-')
+        {
+            urnIdx++;
+        }
+        sscanf(strUuid + urnIdx, "%2hhx", &convertedUuid[uuidIdx]);
+    }
+
+    memcpy(uuid->id, convertedUuid, UUID_LENGTH);
+
+    return OC_STACK_OK;
+}