# HG changeset patch # User Marcus Lundblad # Date 1255472037 0 # Node ID ecd2136ff8181200ea5309c55bae3b5a48f7250b # Parent 739886e6dac26fb16d5a798295b6552dedb0f6d6 Broke out the generation of random UUIDs to its own function Adapted the Google group chat functionallity to use the new function diff -r 739886e6dac2 -r ecd2136ff818 ChangeLog.API --- a/ChangeLog.API Mon Oct 12 22:40:37 2009 +0000 +++ b/ChangeLog.API Tue Oct 13 22:13:57 2009 +0000 @@ -5,6 +5,7 @@ Added: * purple_account_get_name_for_display * purple_network_get_all_local_system_ips + * purple_uuid_random Pidgin: Added: diff -r 739886e6dac2 -r ecd2136ff818 libpurple/protocols/jabber/google.c --- a/libpurple/protocols/jabber/google.c Mon Oct 12 22:40:37 2009 +0000 +++ b/libpurple/protocols/jabber/google.c Tue Oct 13 22:13:57 2009 +0000 @@ -1434,7 +1434,7 @@ JabberStream *js; JabberChat *chat; gchar *room; - guint32 tmp, a, b; + gchar *uuid = purple_uuid_random(); g_return_if_fail(PURPLE_BLIST_NODE_IS_BUDDY(node)); @@ -1443,20 +1443,7 @@ g_return_if_fail(gc != NULL); js = purple_connection_get_protocol_data(gc); - /* Generate a version 4 UUID */ - tmp = g_random_int(); - a = 0x4000 | (tmp & 0xFFF); /* 0x4000 to 0x4FFF */ - tmp >>= 12; - b = ((1 << 3) << 12) | (tmp & 0x3FFF); /* 0x8000 to 0xBFFF */ - - tmp = g_random_int(); - room = g_strdup_printf("private-chat-%08x-%04x-%04x-%04x-%04x%08x", - g_random_int(), - tmp & 0xFFFF, - a, - b, - (tmp >> 16) & 0xFFFF, g_random_int()); - + room = g_strdup_printf("private-chat-%s", uuid); chat = jabber_join_chat(js, room, GOOGLE_GROUPCHAT_SERVER, js->user->node, NULL, NULL); if (chat) { @@ -1465,4 +1452,5 @@ } g_free(room); + g_free(uuid); } diff -r 739886e6dac2 -r ecd2136ff818 libpurple/util.c --- a/libpurple/util.c Mon Oct 12 22:40:37 2009 +0000 +++ b/libpurple/util.c Tue Oct 13 22:13:57 2009 +0000 @@ -4973,3 +4973,23 @@ { return g_get_host_name(); } + +gchar * +purple_uuid_random(void) +{ + guint32 tmp, a, b; + + tmp = g_random_int(); + a = 0x4000 | (tmp & 0xFFF); /* 0x4000 to 0x4FFF */ + tmp >>= 12; + b = ((1 << 3) << 12) | (tmp & 0x3FFF); /* 0x8000 to 0xBFFF */ + + tmp = g_random_int(); + + return g_strdup_printf("%08x-%04x-%04x-%04x-%04x%08x", + g_random_int(), + tmp & 0xFFFF, + a, + b, + (tmp >> 16) & 0xFFFF, g_random_int()); +} diff -r 739886e6dac2 -r ecd2136ff818 libpurple/util.h --- a/libpurple/util.h Mon Oct 12 22:40:37 2009 +0000 +++ b/libpurple/util.h Tue Oct 13 22:13:57 2009 +0000 @@ -1427,6 +1427,14 @@ */ const gchar *purple_get_host_name(void); +/** + * Returns a type 4 (random) UUID + * + * @return A UUID, caller is responsible for freeing it + * @since 2.7.0 + */ +gchar *purple_uuid_random(void); + #ifdef __cplusplus } #endif