aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWaqas Hussain <waqas20@gmail.com>2009-06-04 18:04:26 +0500
committerWaqas Hussain <waqas20@gmail.com>2009-06-04 18:04:26 +0500
commit4ee16e78eb4e74bd20062a19c331d70c87323712 (patch)
tree288723a08288650d8de59c1e48efc7cb59318a25
parent27379bb148766adbfda904a5d786862141060fb7 (diff)
downloadprosody-4ee16e78eb4e74bd20062a19c331d70c87323712.tar.gz
prosody-4ee16e78eb4e74bd20062a19c331d70c87323712.zip
util.uuid: Now generates RFC 4122 complaint UUIDs (version 4 - random)
-rw-r--r--util/uuid.lua16
1 files changed, 15 insertions, 1 deletions
diff --git a/util/uuid.lua b/util/uuid.lua
index e928259d..a6dc0a1e 100644
--- a/util/uuid.lua
+++ b/util/uuid.lua
@@ -27,8 +27,22 @@ local function new_random(x)
return sha1(x..os_clock()..tostring({}), true);
end
+local buffer = new_random(uniq_time());
+local function get_nibbles(n)
+ if #buffer < n then
+ buffer = new_random(buffer..uniq_time());
+ end
+ local r = buffer:sub(0, n);
+ buffer = buffer:sub(n+1);
+ return r;
+end
+local function get_twobits()
+ return ("%x"):format(get_nibbles(1):byte() % 4 + 8);
+end
+
function generate()
- return new_random(uniq_time());
+ -- generate RFC 4122 complaint UUIDs (version 4 - random)
+ return get_nibbles(8).."-"..get_nibbles(4).."-4"..get_nibbles(3).."-"..(get_twobits())..get_nibbles(3).."-"..get_nibbles(12);
end
return _M;