mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-03 11:25:35 +00:00
Use the UUID API to generate and validate UUIDs for res_calendar_exchange.
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
This commit is contained in:
@@ -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)
|
||||
|
Reference in New Issue
Block a user