From f4fb61b0c83b0eea20f7b60fa83bc116fd103a84 Mon Sep 17 00:00:00 2001 From: Michael Vetter Date: Tue, 14 Aug 2018 15:49:25 +0200 Subject: [PATCH] Use uuid in create_unique_id instead of counter Message IDs should be unique so they can be used by XEPs like delivery receipts, chat markers, message correction. So far it used a counter so restarting profanity will cause the counter to be 0 again. Let's rather use an UUID since we have such a function in the xmpp/xmpp.h already. Closes https://github.com/boothj5/profanity/issues/998 --- src/common.c | 18 +++++++----------- src/common.h | 1 - 2 files changed, 7 insertions(+), 12 deletions(-) diff --git a/src/common.c b/src/common.c index a3893c06..0e9585d6 100644 --- a/src/common.c +++ b/src/common.c @@ -56,6 +56,7 @@ #include "log.h" #include "common.h" #include "tools/p_sha1.h" +#include "xmpp/xmpp.h" struct curl_data_t { @@ -63,8 +64,6 @@ struct curl_data_t size_t size; }; -static unsigned long unique_id = 0; - static size_t _data_callback(void *ptr, size_t size, size_t nmemb, void *data); gboolean @@ -337,25 +336,22 @@ create_unique_id(char *prefix) { char *result = NULL; GString *result_str = g_string_new(""); + char *uuid = connection_create_uuid(); - unique_id++; if (prefix) { - g_string_printf(result_str, "prof_%s_%lu", prefix, unique_id); + g_string_printf(result_str, "prof_%s_%s", prefix, uuid); } else { - g_string_printf(result_str, "prof_%lu", unique_id); + g_string_printf(result_str, "prof_%s", uuid); } + + connection_free_uuid(uuid); + result = result_str->str; g_string_free(result_str, FALSE); return result; } -void -reset_unique_id(void) -{ - unique_id = 0; -} - char* p_sha1_hash(char *str) { diff --git a/src/common.h b/src/common.h index a53fdf9c..a2135288 100644 --- a/src/common.h +++ b/src/common.h @@ -94,7 +94,6 @@ gboolean release_is_new(char *found_version); char* p_sha1_hash(char *str); char* create_unique_id(char *prefix); -void reset_unique_id(void); char* get_file_or_linked(char *loc, char *basedir); char* strip_arg_quotes(const char *const input);