Software /
code /
prosody
Annotate
util/uuid.lua @ 5877:615a0774e4cc
util.timer: Updated to use util.indexedbheap to provide a more complete API. Timers can now be stopped or rescheduled. Callbacks are now pcall'd. Adding/removing timers from within timer callbacks works better. Optional parameter can be passed when creating timer which gets passed to callback, eliminating the need for closures in various timer uses. Timers are now much more lightweight.
author | Waqas Hussain <waqas20@gmail.com> |
---|---|
date | Wed, 30 Oct 2013 17:44:42 -0400 |
parent | 5776:bd0ff8ae98a8 |
child | 6377:50e5aed4eeea |
rev | line source |
---|---|
1523
841d61be198f
Remove version number from copyright headers
Matthew Wild <mwild1@gmail.com>
parents:
1304
diff
changeset
|
1 -- Prosody IM |
2923
b7049746bd29
Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents:
1523
diff
changeset
|
2 -- Copyright (C) 2008-2010 Matthew Wild |
b7049746bd29
Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents:
1523
diff
changeset
|
3 -- Copyright (C) 2008-2010 Waqas Hussain |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
2957
diff
changeset
|
4 -- |
758 | 5 -- This project is MIT/X11 licensed. Please see the |
6 -- COPYING file in the source package for more information. | |
519
cccd610a0ef9
Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents:
145
diff
changeset
|
7 -- |
cccd610a0ef9
Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents:
145
diff
changeset
|
8 |
cccd610a0ef9
Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents:
145
diff
changeset
|
9 |
44
80d2ade0fd69
Add "uuid" library and make sessionmanager use this.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
10 local m_random = math.random; |
762
5ae018c016ba
util.uuid: Return a string, not a number. Looked so innocent.
Matthew Wild <mwild1@gmail.com>
parents:
760
diff
changeset
|
11 local tostring = tostring; |
1302
4561c6d95339
util.uuid: More uniqueness!
Waqas Hussain <waqas20@gmail.com>
parents:
896
diff
changeset
|
12 local os_time = os.time; |
4561c6d95339
util.uuid: More uniqueness!
Waqas Hussain <waqas20@gmail.com>
parents:
896
diff
changeset
|
13 local os_clock = os.clock; |
4561c6d95339
util.uuid: More uniqueness!
Waqas Hussain <waqas20@gmail.com>
parents:
896
diff
changeset
|
14 local sha1 = require "util.hashes".sha1; |
4561c6d95339
util.uuid: More uniqueness!
Waqas Hussain <waqas20@gmail.com>
parents:
896
diff
changeset
|
15 |
44
80d2ade0fd69
Add "uuid" library and make sessionmanager use this.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
16 module "uuid" |
80d2ade0fd69
Add "uuid" library and make sessionmanager use this.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
17 |
1302
4561c6d95339
util.uuid: More uniqueness!
Waqas Hussain <waqas20@gmail.com>
parents:
896
diff
changeset
|
18 local last_uniq_time = 0; |
4561c6d95339
util.uuid: More uniqueness!
Waqas Hussain <waqas20@gmail.com>
parents:
896
diff
changeset
|
19 local function uniq_time() |
4561c6d95339
util.uuid: More uniqueness!
Waqas Hussain <waqas20@gmail.com>
parents:
896
diff
changeset
|
20 local new_uniq_time = os_time(); |
4561c6d95339
util.uuid: More uniqueness!
Waqas Hussain <waqas20@gmail.com>
parents:
896
diff
changeset
|
21 if last_uniq_time >= new_uniq_time then new_uniq_time = last_uniq_time + 1; end |
4561c6d95339
util.uuid: More uniqueness!
Waqas Hussain <waqas20@gmail.com>
parents:
896
diff
changeset
|
22 last_uniq_time = new_uniq_time; |
4561c6d95339
util.uuid: More uniqueness!
Waqas Hussain <waqas20@gmail.com>
parents:
896
diff
changeset
|
23 return new_uniq_time; |
44
80d2ade0fd69
Add "uuid" library and make sessionmanager use this.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
24 end |
80d2ade0fd69
Add "uuid" library and make sessionmanager use this.
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
25 |
1302
4561c6d95339
util.uuid: More uniqueness!
Waqas Hussain <waqas20@gmail.com>
parents:
896
diff
changeset
|
26 local function new_random(x) |
4561c6d95339
util.uuid: More uniqueness!
Waqas Hussain <waqas20@gmail.com>
parents:
896
diff
changeset
|
27 return sha1(x..os_clock()..tostring({}), true); |
4561c6d95339
util.uuid: More uniqueness!
Waqas Hussain <waqas20@gmail.com>
parents:
896
diff
changeset
|
28 end |
4561c6d95339
util.uuid: More uniqueness!
Waqas Hussain <waqas20@gmail.com>
parents:
896
diff
changeset
|
29 |
1303
2170e2c0d57a
util.uuid: Now generates RFC 4122 complaint UUIDs (version 4 - random)
Waqas Hussain <waqas20@gmail.com>
parents:
1302
diff
changeset
|
30 local buffer = new_random(uniq_time()); |
1304
0a49759464e0
util.uuid: Added function seed(string) to allow further seeding of the PRNG
Waqas Hussain <waqas20@gmail.com>
parents:
1303
diff
changeset
|
31 local function _seed(x) |
0a49759464e0
util.uuid: Added function seed(string) to allow further seeding of the PRNG
Waqas Hussain <waqas20@gmail.com>
parents:
1303
diff
changeset
|
32 buffer = new_random(buffer..x); |
0a49759464e0
util.uuid: Added function seed(string) to allow further seeding of the PRNG
Waqas Hussain <waqas20@gmail.com>
parents:
1303
diff
changeset
|
33 end |
1303
2170e2c0d57a
util.uuid: Now generates RFC 4122 complaint UUIDs (version 4 - random)
Waqas Hussain <waqas20@gmail.com>
parents:
1302
diff
changeset
|
34 local function get_nibbles(n) |
2957
805b067cd13e
util.uuid: Use a local instead of a global.
Waqas Hussain <waqas20@gmail.com>
parents:
2923
diff
changeset
|
35 if #buffer < n then _seed(uniq_time()); end |
1303
2170e2c0d57a
util.uuid: Now generates RFC 4122 complaint UUIDs (version 4 - random)
Waqas Hussain <waqas20@gmail.com>
parents:
1302
diff
changeset
|
36 local r = buffer:sub(0, n); |
2170e2c0d57a
util.uuid: Now generates RFC 4122 complaint UUIDs (version 4 - random)
Waqas Hussain <waqas20@gmail.com>
parents:
1302
diff
changeset
|
37 buffer = buffer:sub(n+1); |
2170e2c0d57a
util.uuid: Now generates RFC 4122 complaint UUIDs (version 4 - random)
Waqas Hussain <waqas20@gmail.com>
parents:
1302
diff
changeset
|
38 return r; |
2170e2c0d57a
util.uuid: Now generates RFC 4122 complaint UUIDs (version 4 - random)
Waqas Hussain <waqas20@gmail.com>
parents:
1302
diff
changeset
|
39 end |
2170e2c0d57a
util.uuid: Now generates RFC 4122 complaint UUIDs (version 4 - random)
Waqas Hussain <waqas20@gmail.com>
parents:
1302
diff
changeset
|
40 local function get_twobits() |
2170e2c0d57a
util.uuid: Now generates RFC 4122 complaint UUIDs (version 4 - random)
Waqas Hussain <waqas20@gmail.com>
parents:
1302
diff
changeset
|
41 return ("%x"):format(get_nibbles(1):byte() % 4 + 8); |
2170e2c0d57a
util.uuid: Now generates RFC 4122 complaint UUIDs (version 4 - random)
Waqas Hussain <waqas20@gmail.com>
parents:
1302
diff
changeset
|
42 end |
2170e2c0d57a
util.uuid: Now generates RFC 4122 complaint UUIDs (version 4 - random)
Waqas Hussain <waqas20@gmail.com>
parents:
1302
diff
changeset
|
43 |
1302
4561c6d95339
util.uuid: More uniqueness!
Waqas Hussain <waqas20@gmail.com>
parents:
896
diff
changeset
|
44 function generate() |
1303
2170e2c0d57a
util.uuid: Now generates RFC 4122 complaint UUIDs (version 4 - random)
Waqas Hussain <waqas20@gmail.com>
parents:
1302
diff
changeset
|
45 -- generate RFC 4122 complaint UUIDs (version 4 - random) |
2170e2c0d57a
util.uuid: Now generates RFC 4122 complaint UUIDs (version 4 - random)
Waqas Hussain <waqas20@gmail.com>
parents:
1302
diff
changeset
|
46 return get_nibbles(8).."-"..get_nibbles(4).."-4"..get_nibbles(3).."-"..(get_twobits())..get_nibbles(3).."-"..get_nibbles(12); |
1302
4561c6d95339
util.uuid: More uniqueness!
Waqas Hussain <waqas20@gmail.com>
parents:
896
diff
changeset
|
47 end |
1304
0a49759464e0
util.uuid: Added function seed(string) to allow further seeding of the PRNG
Waqas Hussain <waqas20@gmail.com>
parents:
1303
diff
changeset
|
48 seed = _seed; |
1302
4561c6d95339
util.uuid: More uniqueness!
Waqas Hussain <waqas20@gmail.com>
parents:
896
diff
changeset
|
49 |
4561c6d95339
util.uuid: More uniqueness!
Waqas Hussain <waqas20@gmail.com>
parents:
896
diff
changeset
|
50 return _M; |