mirror of
https://github.com/php/pecl-networking-uuid.git
synced 2026-03-23 23:22:17 +01:00
430 lines
9.2 KiB
XML
430 lines
9.2 KiB
XML
<?xml version="1.0" ?>
|
|
|
|
<extension name="uuid" version="1.0.0">
|
|
|
|
<summary>UUID extension</summary>
|
|
|
|
<description>
|
|
A wrapper around libuuid from the ext2utils project.
|
|
</description>
|
|
|
|
<license>LGPL</license>
|
|
|
|
<maintainers>
|
|
<maintainer>
|
|
<user>hholzgra</user>
|
|
<name>Hartmut Holzgraefe</name>
|
|
<email>hartmut@php.net</email>
|
|
<role>lead</role>
|
|
</maintainer>
|
|
</maintainers>
|
|
|
|
<release>
|
|
<version>1.0.2</version>
|
|
<date>2008-04-01</date>
|
|
<state>stable</state>
|
|
<notes>
|
|
- should now work on Solaris, too (although missing two functions)
|
|
- added uuid_parse() and uuid_unparse()
|
|
- now generated using PEAR::CodeGen_PECL
|
|
</notes>
|
|
</release>
|
|
|
|
<deps language="c" platform="unix">
|
|
<with>
|
|
<header name="uuid/uuid.h"/>
|
|
<lib name="uuid"/>
|
|
</with>
|
|
<configm4>
|
|
PHP_CHECK_FUNC_LIB(uuid_type, uuid)
|
|
PHP_CHECK_FUNC_LIB(uuid_variant, uuid)
|
|
</configm4>
|
|
</deps>
|
|
|
|
|
|
<constant name="UUID_VARIANT_NCS" if="UUID_VARIANT_NCS"/>
|
|
<constant name="UUID_VARIANT_DCE" if="UUID_VARIANT_DCE"/>
|
|
<constant name="UUID_VARIANT_MICROSOFT" if="UUID_VARIANT_MICROSOFT"/>
|
|
<constant name="UUID_VARIANT_OTHER" if="UUID_VARIANT_OTHER"/>
|
|
|
|
<constant name="UUID_TYPE_DEFAULT" define="yes" type="int" value="0"/>
|
|
<constant name="UUID_TYPE_TIME" define="yes" type="int" value="UUID_TYPE_DCE_TIME"/>
|
|
<constant name="UUID_TYPE_DCE" define="yes" type="int" value="UUID_TYPE_DCE_RANDOM"/>
|
|
<constant name="UUID_TYPE_NAME" define="yes" type="int" value="UUID_TYPE_DCE_TIME"/>
|
|
<constant name="UUID_TYPE_RANDOM" define="yes" type="int" value="UUID_TYPE_DCE_RANDOM"/>
|
|
<constant name="UUID_TYPE_NULL" define="yes" type="int" value="-1"/>
|
|
<constant name="UUID_TYPE_INVALID" define="yes" type="int" value="-42"/>
|
|
|
|
<function name="uuid_create">
|
|
<proto>string uuid_create([int uuid_type])</proto>
|
|
|
|
<summary>Generate a new UUID</summary>
|
|
|
|
<description>
|
|
...
|
|
</description>
|
|
|
|
<code>
|
|
uuid_t uuid;
|
|
char uuid_str[37];
|
|
|
|
switch(uuid_type) {
|
|
case UUID_TYPE_DCE_TIME:
|
|
uuid_generate_time(uuid);
|
|
break;
|
|
case UUID_TYPE_DCE_RANDOM:
|
|
uuid_generate_random(uuid);
|
|
break;
|
|
case UUID_TYPE_DEFAULT:
|
|
uuid_generate(uuid);
|
|
break;
|
|
default:
|
|
php_error_docref(NULL TSRMLS_CC,
|
|
E_WARNING,
|
|
"Unknown/invalid UUID type '%d' requested, using default type instead",
|
|
uuid_type);
|
|
uuid_generate(uuid);
|
|
break;
|
|
}
|
|
|
|
uuid_unparse(uuid, uuid_str);
|
|
|
|
RETURN_STRING(uuid_str, 1);
|
|
</code>
|
|
|
|
<test>
|
|
<code>
|
|
<![CDATA[
|
|
// check basic format of generated UUIDs
|
|
$uuid = uuid_create();
|
|
if (ereg("[[:xdigit:]]{8}-[[:xdigit:]]{4}-[[:xdigit:]]{4}-[[:xdigit:]]{4}-[[:xdigit:]]{12}", $uuid)) {
|
|
echo "basic format ok\n";
|
|
} else {
|
|
echo "basic UUID format check failed, generated UUID was $uuid\n";
|
|
}
|
|
]]>
|
|
</code>
|
|
<result>
|
|
basic format ok
|
|
</result>
|
|
</test>
|
|
|
|
</function>
|
|
|
|
<function name="uuid_is_valid">
|
|
<proto>bool uuid_is_valid(string uuid)</proto>
|
|
|
|
<summary>Check whether a given UUID string is a valid UUID</summary>
|
|
|
|
<description>
|
|
add some text here
|
|
</description>
|
|
|
|
<code>
|
|
uuid_t u;
|
|
RETURN_BOOL(0 == uuid_parse(uuid, u));
|
|
</code>
|
|
|
|
<test>
|
|
<code>
|
|
var_dump(uuid_is_valid("1b4e28ba-2fa1-11d2-883f-b9a761bde3fb"));
|
|
var_dump(uuid_is_valid("ffffffff-ffff-ffff-ffff-ffffffffffff"));
|
|
var_dump(uuid_is_valid("61616161-6161-6161-6161-616161616161"));
|
|
var_dump(uuid_is_valid("foobar"));
|
|
</code>
|
|
<result>
|
|
bool(true)
|
|
bool(true)
|
|
bool(true)
|
|
bool(false)
|
|
</result>
|
|
</test>
|
|
|
|
</function>
|
|
|
|
<function name="uuid_compare">
|
|
<proto>int uuid_compare(string uuid1, string uuid2)</proto>
|
|
|
|
<summary>Compare two UUIDs</summary>
|
|
|
|
<code>
|
|
uuid_t u1, u2;
|
|
|
|
if(uuid_parse(uuid1, u1)) RETURN_FALSE;
|
|
if(uuid_parse(uuid2, u2)) RETURN_FALSE;
|
|
|
|
RETURN_LONG(uuid_compare(u1, u2));
|
|
</code>
|
|
|
|
<test>
|
|
<code>
|
|
<?data
|
|
$uuids = array();
|
|
$uuids[0] = "00000000-0000-0000-0000-000000000000";
|
|
$uuids[1] = "878b258c-a9f1-467c-8e1d-47d79ca2c01b";
|
|
$uuids[2] = "b691c99c-7fc5-11d8-9fa8-00065b896488";
|
|
|
|
foreach ($uuids as $key1 => $uuid1) {
|
|
foreach ($uuids as $key2 => $uuid2) {
|
|
echo "uuid$key1";
|
|
|
|
switch (uuid_compare($uuid1, $uuid2)) {
|
|
case -1: echo " < "; break;
|
|
case 0: echo " = "; break;
|
|
case 1: echo " > "; break;
|
|
}
|
|
|
|
echo "uuid$key2\n";
|
|
}
|
|
echo "\n";
|
|
}
|
|
?>
|
|
</code>
|
|
<result>
|
|
<?data
|
|
uuid0 = uuid0
|
|
uuid0 < uuid1
|
|
uuid0 < uuid2
|
|
|
|
uuid1 > uuid0
|
|
uuid1 = uuid1
|
|
uuid1 < uuid2
|
|
|
|
uuid2 > uuid0
|
|
uuid2 > uuid1
|
|
uuid2 = uuid2
|
|
?>
|
|
</result>
|
|
</test>
|
|
|
|
</function>
|
|
|
|
<function name="uuid_is_null">
|
|
<proto>bool uuid_is_null(string uuid)</proto>
|
|
|
|
<summary>Check wheter an UUID is the NULL UUID 00000000-0000-0000-0000-000000000000</summary>
|
|
|
|
<description>
|
|
...
|
|
</description>
|
|
|
|
<code>
|
|
uuid_t u;
|
|
|
|
if(uuid_parse(uuid, u)) RETURN_FALSE;
|
|
|
|
RETURN_BOOL(uuid_is_null(u));
|
|
</code>
|
|
|
|
<test>
|
|
<code>
|
|
var_dump(uuid_is_null("00000000-0000-0000-0000-000000000000"));
|
|
var_dump(uuid_is_null("b691c99c-7fc5-11d8-9fa8-00065b896488"));
|
|
var_dump(uuid_is_null("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"));
|
|
</code>
|
|
<result>
|
|
bool(true)
|
|
bool(false)
|
|
bool(false)
|
|
</result>
|
|
</test>
|
|
</function>
|
|
|
|
|
|
<function name="uuid_type" if="HAVE_UUID_TYPE">
|
|
<proto>int uuid_type(string uuid)</proto>
|
|
|
|
<summary>Return the UUIDs type</summary>
|
|
|
|
<description>
|
|
...
|
|
</description>
|
|
|
|
<code>
|
|
uuid_t u;
|
|
|
|
if(uuid_parse(uuid, u)) RETURN_FALSE;
|
|
|
|
if (uuid_is_null(u)) RETURN_LONG(UUID_TYPE_NULL);
|
|
|
|
RETURN_LONG(uuid_type(u));
|
|
</code>
|
|
|
|
<test>
|
|
<code>
|
|
echo uuid_type("b691c99c-7fc5-11d8-9fa8-00065b896488") == UUID_TYPE_TIME ? "OK\n" : "Failure\n";
|
|
echo uuid_type("878b258c-a9f1-467c-8e1d-47d79ca2c01b") == UUID_TYPE_RANDOM ? "OK\n" : "Failure\n";
|
|
echo uuid_type("00000000-0000-0000-0000-000000000000") == UUID_TYPE_NULL ? "OK\n" : "Failure\n";
|
|
</code>
|
|
<result>
|
|
OK
|
|
OK
|
|
OK
|
|
</result>
|
|
</test>
|
|
|
|
</function>
|
|
|
|
<function name="uuid_variant" if="HAVE_UUID_VARIANT">
|
|
<proto>int uuid_variant(string uuid)</proto>
|
|
|
|
<summary>Return the UUIDs variant</summary>
|
|
|
|
<description>
|
|
...
|
|
</description>
|
|
|
|
<code>
|
|
uuid_t u;
|
|
|
|
if(uuid_parse(uuid, u)) RETURN_FALSE;
|
|
|
|
if (uuid_is_null(u)) RETURN_LONG(UUID_TYPE_NULL);
|
|
|
|
RETURN_LONG(uuid_variant(u));
|
|
</code>
|
|
|
|
<test>
|
|
<code>
|
|
echo uuid_variant("b691c99c-7fc5-11d8-9fa8-00065b896488")."\n";
|
|
echo uuid_variant("878b258c-a9f1-467c-8e1d-47d79ca2c01b")."\n";
|
|
echo uuid_variant("00000000-0000-0000-0000-000000000000")."\n";
|
|
</code>
|
|
<result>
|
|
1
|
|
1
|
|
-1
|
|
</result>
|
|
</test>
|
|
|
|
</function>
|
|
|
|
<function name="uuid_time">
|
|
<proto>int uuid_time(string uuid)</proto>
|
|
|
|
<summary>Extract creation time from a time based UUID as UNIX timestamp</summary>
|
|
|
|
<description>
|
|
...
|
|
</description>
|
|
|
|
<code>
|
|
uuid_t u;
|
|
|
|
if(uuid_parse(uuid, u)) RETURN_FALSE;
|
|
|
|
#if HAVE_UUID_VARIANT
|
|
if(uuid_variant(u) != 1) RETURN_FALSE;
|
|
#endif
|
|
#if HAVE_UUID_TYPE
|
|
if(uuid_type(u) != 1) RETURN_FALSE;
|
|
#endif
|
|
|
|
RETURN_LONG(uuid_time(u, NULL));
|
|
</code>
|
|
|
|
<test>
|
|
<code>
|
|
var_dump(uuid_time("b691c99c-7fc5-11d8-9fa8-00065b896488"));
|
|
var_dump(uuid_time("878b258c-a9f1-467c-8e1d-47d79ca2c01b"));
|
|
</code>
|
|
<result>
|
|
int(1080374815)
|
|
bool(false)
|
|
</result>
|
|
</test>
|
|
</function>
|
|
|
|
<function name="uuid_mac">
|
|
<proto>string uuid_mac(string uuid)</proto>
|
|
|
|
<summary>Get UUID creator network MAC address</summary>
|
|
|
|
<description>
|
|
...
|
|
</description>
|
|
|
|
<code>
|
|
<?data
|
|
uuid_t u;
|
|
char uuid_str[37];
|
|
|
|
if(uuid_parse(uuid, u)) RETURN_FALSE;
|
|
|
|
#if HAVE_UUID_VARIANT
|
|
if(uuid_variant(u) != 1) RETURN_FALSE;
|
|
#endif
|
|
#if HAVE_UUID_TYPE
|
|
if(uuid_type(u) != 1) RETURN_FALSE;
|
|
#endif
|
|
|
|
if(uuid[10] & 0x80) RETURN_FALSE; // invalid MAC
|
|
|
|
uuid_unparse(u, uuid_str);
|
|
RETURN_STRING((char *)(uuid_str + 24), 1);
|
|
?>
|
|
</code>
|
|
|
|
<test>
|
|
<code>
|
|
var_dump(uuid_mac("b691c99c-7fc5-11d8-9fa8-00065b896488"));
|
|
var_dump(uuid_mac("878b258c-a9f1-467c-8e1d-47d79ca2c01b"));
|
|
</code>
|
|
<result>
|
|
string(12) "00065b896488"
|
|
bool(false)
|
|
</result>
|
|
</test>
|
|
|
|
</function>
|
|
|
|
<function name="uuid_parse">
|
|
<proto>string uuid_parse(string uuid)</proto>
|
|
<code>
|
|
<?data
|
|
uuid_t uuid_bin;
|
|
|
|
if (uuid_parse(uuid, uuid_bin)) {
|
|
RETURN_FALSE;
|
|
}
|
|
|
|
RETURN_STRINGL((char *)uuid_bin, sizeof(uuid_t), 1);
|
|
?>
|
|
</code>
|
|
<test>
|
|
<code>
|
|
var_dump(uuid_parse("61616161-6161-6161-6161-616161616161"));
|
|
</code>
|
|
<result>
|
|
string(16) "aaaaaaaaaaaaaaaa"
|
|
</result>
|
|
</test>
|
|
</function>
|
|
|
|
<function name="uuid_unparse">
|
|
<proto>string uuid_unparse(string uuid)</proto>
|
|
<code>
|
|
<?data
|
|
char uuid_txt[37];
|
|
|
|
if (uuid_len != sizeof(uuid_t)) {
|
|
RETURN_FALSE;
|
|
}
|
|
|
|
uuid_unparse((unsigned char *)uuid, uuid_txt);
|
|
|
|
RETURN_STRINGL(uuid_txt, 36, 1);
|
|
?>
|
|
</code>
|
|
<test>
|
|
<code>
|
|
var_dump(uuid_unparse("aaaaaaaaaaaaaaaa"));
|
|
</code>
|
|
<result>
|
|
string(36) "61616161-6161-6161-6161-616161616161"
|
|
</result>
|
|
</test>
|
|
</function>
|
|
|
|
</extension>
|