blob: 7e040bab9f192138c1624381a8f06a92dd5eff07 [file] [log] [blame]
/*
// Copyright (c) 2016 Intel Corporation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
*/
#include <ctype.h>
#include <stdint.h>
#include <stdio.h>
#include <string.h>
#include "os/mynewt.h"
#include <hal/hal_bsp.h>
#include "oic/oc_uuid.h"
void
oc_str_to_uuid(const char *str, oc_uuid_t *uuid)
{
int i, j = 0, k = 1;
uint8_t c = 0;
for (i = 0; i < strlen(str); i++) {
if (str[i] == '-')
continue;
else if (isalpha((int)str[i])) {
switch (str[i]) {
case 65:
case 97:
c |= 0x0a;
break;
case 66:
case 98:
c |= 0x0b;
break;
case 67:
case 99:
c |= 0x0c;
break;
case 68:
case 100:
c |= 0x0d;
break;
case 69:
case 101:
c |= 0x0e;
break;
case 70:
case 102:
c |= 0x0f;
break;
}
} else
c |= str[i] - 48;
if ((j + 1) * 2 == k) {
uuid->id[j++] = c;
c = 0;
} else
c = c << 4;
k++;
}
}
void
oc_uuid_to_str(const oc_uuid_t *uuid, char *buffer, int buflen)
{
int i, j = 0;
if (buflen < 37)
return;
for (i = 0; i < 16; i++) {
switch (i) {
case 4:
case 6:
case 8:
case 10:
snprintf(&buffer[j], 2, "-");
j++;
break;
}
snprintf(&buffer[j], 3, "%02x", uuid->id[i]);
j += 2;
}
}
void
oc_gen_uuid(oc_uuid_t *uuid)
{
hal_bsp_hw_id(&uuid->id[0], sizeof(uuid->id));
/* From RFC 4122
Set the two most significant bits of the
clock_seq_hi_and_reserved (8th octet) to
zero and one, respectively.
*/
uuid->id[8] &= 0x3f;
uuid->id[8] |= 0x40;
/* From RFC 4122
Set the four most significant bits of the
time_hi_and_version field (6th octect) to the
4-bit version number from (0 1 0 0 => type 4)
Section 4.1.3.
*/
uuid->id[6] &= 0x0f;
uuid->id[6] |= 0x40;
}