#ifndef UUID_H #define UUID_H #include #include #include #include #include "rtemp.h" typedef struct { unsigned char bytes[16]; } UUID; void generate_random_bytes(unsigned char *bytes, size_t len) { for (size_t i = 0; i < len; i++) { bytes[i] = rand() % 256; } } UUID generate_uuid4(void) { UUID uuid; generate_random_bytes(uuid.bytes, 16); uuid.bytes[6] &= 0x0f; uuid.bytes[6] |= 0x40; uuid.bytes[8] &= 0x3f; uuid.bytes[8] |= 0x80; return uuid; } void uuid_to_string(UUID uuid, char *str) { sprintf(str, "%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x", uuid.bytes[0], uuid.bytes[1], uuid.bytes[2], uuid.bytes[3], uuid.bytes[4], uuid.bytes[5], uuid.bytes[6], uuid.bytes[7], uuid.bytes[8], uuid.bytes[9], uuid.bytes[10], uuid.bytes[11], uuid.bytes[12], uuid.bytes[13], uuid.bytes[14], uuid.bytes[15]); } char *uuid4() { srand(time(NULL)); UUID uuid = generate_uuid4(); char str[37]; uuid_to_string(uuid, str); return sbuf(str); } #endif