mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2025-03-11 05:48:41 +00:00
MINOR: Add ha_generate_uuid_v7
This function generates a version 7 UUID as per draft-ietf-uuidrev-rfc4122bis-14.
This commit is contained in:
parent
c6cea750a9
commit
aab6477b67
@ -1057,6 +1057,7 @@ int parse_dotted_uints(const char *s, unsigned int **nums, size_t *sz);
|
||||
|
||||
/* PRNG */
|
||||
void ha_generate_uuid_v4(struct buffer *output);
|
||||
void ha_generate_uuid_v7(struct buffer *output);
|
||||
void ha_random_seed(const unsigned char *seed, size_t len);
|
||||
void ha_random_jump96(uint32_t dist);
|
||||
uint64_t ha_random64(void);
|
||||
|
25
src/tools.c
25
src/tools.c
@ -5605,6 +5605,31 @@ void ha_generate_uuid_v4(struct buffer *output)
|
||||
(long long)((rnd[2] >> 14u) | ((uint64_t) rnd[3] << 18u)) & 0xFFFFFFFFFFFFull);
|
||||
}
|
||||
|
||||
/* Generates a draft-ietf-uuidrev-rfc4122bis-14 version 7 UUID into chunk
|
||||
* <output> which must be at least 37 bytes large.
|
||||
*/
|
||||
void ha_generate_uuid_v7(struct buffer *output)
|
||||
{
|
||||
uint32_t rnd[3];
|
||||
uint64_t last;
|
||||
uint64_t time;
|
||||
|
||||
time = (date.tv_sec * 1000) + (date.tv_usec / 1000);
|
||||
last = ha_random64();
|
||||
rnd[0] = last;
|
||||
rnd[1] = last >> 32;
|
||||
|
||||
last = ha_random64();
|
||||
rnd[2] = last;
|
||||
|
||||
chunk_printf(output, "%8.8x-%4.4x-%4.4x-%4.4x-%12.12llx",
|
||||
(uint)(time >> 16u),
|
||||
(uint)(time & 0xFFFF),
|
||||
((rnd[0] >> 16u) & 0xFFF) | 0x7000, // highest 4 bits indicate the uuid version
|
||||
(rnd[1] & 0x3FFF) | 0x8000, // the highest 2 bits indicate the UUID variant (10),
|
||||
(long long)((rnd[1] >> 14u) | ((uint64_t) rnd[2] << 18u)) & 0xFFFFFFFFFFFFull);
|
||||
}
|
||||
|
||||
|
||||
/* only used by parse_line() below. It supports writing in place provided that
|
||||
* <in> is updated to the next location before calling it. In that case, the
|
||||
|
Loading…
Reference in New Issue
Block a user