Use the UUID API to generate and validate UUIDs for res_calendar_exchange.
authorSean Bright <sean@malleable.com>
Thu, 13 Dec 2012 15:37:55 +0000 (15:37 +0000)
committerSean Bright <sean@malleable.com>
Thu, 13 Dec 2012 15:37:55 +0000 (15:37 +0000)
Currently the res_calendar_exchange module uses its own method of generating
UUIDs using ast_random().  Now that we have a UUID API we should use that
instead.

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@377974 65c4cc65-6c06-0410-ace0-fbb531ad65f3

res/res_calendar_exchange.c

index e7beeaf..dda4414 100644 (file)
@@ -44,6 +44,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 #include "asterisk/lock.h"
 #include "asterisk/config.h"
 #include "asterisk/astobj2.h"
+#include "asterisk/uuid.h"
 
 static void *exchangecal_load_calendar(void *data);
 static void *unref_exchangecal(void *obj);
@@ -241,36 +242,30 @@ static void *unref_exchangecal(void *obj)
 /* It is very important to use the return value of this function as a realloc could occur */
 static struct ast_str *generate_exchange_uuid(struct ast_str *uid)
 {
-       unsigned short val[8];
-       int x;
+       char buffer[AST_UUID_STR_LEN];
+       struct ast_uuid *uuid = ast_uuid_generate();
 
-       for (x = 0; x < 8; x++) {
-               val[x] = ast_random();
+       if (!uuid) {
+               return NULL;
        }
-       ast_str_set(&uid, 0, "%04x%04x-%04x-%04x-%04x-%04x%04x%04x", val[0], val[1], val[2], val[3], val[4], val[5], val[6], val[7]);
+
+       ast_str_set(&uid, 0, "%s", ast_uuid_to_str(uuid, buffer, AST_UUID_STR_LEN));
+
+       ast_free(uuid);
 
        return uid;
 }
 
 static int is_valid_uuid(struct ast_str *uid)
 {
-       int i;
+       struct ast_uuid *uuid = ast_str_to_uuid(ast_str_buffer(uid));
 
-       if (ast_str_strlen(uid) != 36) {
-               return 0;
+       if (uuid) {
+               ast_free(uuid);
+               return 1;
        }
 
-       for (i = 0; i < ast_str_strlen(uid); i++) {
-               if (i == 8 || i == 13 || i == 18 || i == 23) {
-                       if (ast_str_buffer(uid)[i] != '-') {
-                               return 0;
-                       }
-               } else if (!((ast_str_buffer(uid)[i] > 47 && ast_str_buffer(uid)[i] < 58) || (ast_str_buffer(uid)[i] > 96 && ast_str_buffer(uid)[i] < 103))) {
-                       return 0;
-               }
-       }
-
-       return 1;
+       return 0;
 }
 
 static struct ast_str *xml_encode_str(struct ast_str *dst, const char *src)