asterisk.c: Add auto generation and persistence of UUID
authorGeorge Joseph <gjoseph@digium.com>
Sat, 23 Jul 2016 13:51:48 +0000 (07:51 -0600)
committerGeorge Joseph <gjoseph@digium.com>
Sat, 23 Jul 2016 14:05:48 +0000 (09:05 -0500)
Upcoming features will require the generation and persistence
of a UUID.

Change-Id: I3ec0062427e133217db6ef496a4216f427c3b92d

include/asterisk.h
main/asterisk.c

index ab2a3dd..e509fbc 100644 (file)
@@ -288,4 +288,11 @@ struct ast_module *AST_MODULE_SELF_SYM(void);
 
 #endif
 
+/*!
+ * \brief Retrieve the PBX UUID
+ * \param pbx_uuid A buffer of at least AST_UUID_STR_LEN (36 + 1) size to receive the UUID
+ * \param length The buffer length
+ */
+int ast_pbx_uuid_get(char *pbx_uuid, int length);
+
 #endif /* _ASTERISK_H */
index 95f1b3e..850003b 100644 (file)
@@ -249,6 +249,7 @@ int daemon(int, int);  /* defined in libresolv of all places */
 #include "asterisk/codec.h"
 #include "asterisk/format_cache.h"
 #include "asterisk/media_cache.h"
+#include "asterisk/astdb.h"
 
 #include "../defaults.h"
 
@@ -590,6 +591,11 @@ void ast_unregister_thread(void *id)
        }
 }
 
+int ast_pbx_uuid_get(char *pbx_uuid, int length)
+{
+       return ast_db_get("pbx", "UUID", pbx_uuid, length);
+}
+
 /*! \brief Give an overview of core settings */
 static char *handle_show_settings(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
 {
@@ -597,6 +603,7 @@ static char *handle_show_settings(struct ast_cli_entry *e, int cmd, struct ast_c
        struct ast_tm tm;
        char eid_str[128];
        struct rlimit limits;
+       char pbx_uuid[AST_UUID_STR_LEN];
 
        switch (cmd) {
        case CLI_INIT:
@@ -609,6 +616,7 @@ static char *handle_show_settings(struct ast_cli_entry *e, int cmd, struct ast_c
        }
 
        ast_eid_to_str(eid_str, sizeof(eid_str), &ast_eid_default);
+       ast_pbx_uuid_get(pbx_uuid, sizeof(pbx_uuid));
 
        ast_cli(a->fd, "\nPBX Core settings\n");
        ast_cli(a->fd, "-----------------\n");
@@ -647,6 +655,7 @@ static char *handle_show_settings(struct ast_cli_entry *e, int cmd, struct ast_c
        ast_cli(a->fd, "  System:                      %s/%s built by %s on %s %s\n", ast_build_os, ast_build_kernel, ast_build_user, ast_build_machine, ast_build_date);
        ast_cli(a->fd, "  System name:                 %s\n", ast_config_AST_SYSTEM_NAME);
        ast_cli(a->fd, "  Entity ID:                   %s\n", eid_str);
+       ast_cli(a->fd, "  PBX UUID:                    %s\n", pbx_uuid);
        ast_cli(a->fd, "  Default language:            %s\n", ast_defaultlanguage);
        ast_cli(a->fd, "  Language prefix:             %s\n", ast_language_is_prefix ? "Enabled" : "Disabled");
        ast_cli(a->fd, "  User name and group:         %s/%s\n", ast_config_AST_RUN_USER, ast_config_AST_RUN_GROUP);
@@ -4250,6 +4259,7 @@ static void asterisk_daemon(int isroot, const char *runuser, const char *rungrou
        int num;
        char *buf;
        int moduleresult;         /*!< Result from the module load subsystem */
+       char pbx_uuid[AST_UUID_STR_LEN];
 
        /* Set time as soon as possible */
        ast_lastreloadtime = ast_startuptime = ast_tvnow();
@@ -4358,6 +4368,24 @@ static void asterisk_daemon(int isroot, const char *runuser, const char *rungrou
                ast_el_read_default_histfile();
        }
 
+#ifdef AST_XML_DOCS
+       /* Load XML documentation. */
+       ast_xmldoc_load_documentation();
+#endif
+
+       if (astdb_init()) {
+               printf("Failed: astdb_init\n%s", term_quit());
+               exit(1);
+       }
+
+       ast_uuid_init();
+
+       if (ast_pbx_uuid_get(pbx_uuid, sizeof(pbx_uuid))) {
+               ast_uuid_generate_str(pbx_uuid, sizeof(pbx_uuid));
+               ast_db_put("pbx", "UUID", pbx_uuid);
+       }
+       ast_verb(0, "PBX UUID: %s\n", pbx_uuid);
+
        ast_json_init();
        ast_ulaw_init();
        ast_alaw_init();
@@ -4398,7 +4426,6 @@ static void asterisk_daemon(int isroot, const char *runuser, const char *rungrou
        }
 
        ast_aoc_cli_init();
-       ast_uuid_init();
 
        if (ast_sorcery_init()) {
                printf("Failed: ast_sorcery_init\n%s", term_quit());
@@ -4425,11 +4452,6 @@ static void asterisk_daemon(int isroot, const char *runuser, const char *rungrou
                exit(1);
        }
 
-#ifdef AST_XML_DOCS
-       /* Load XML documentation. */
-       ast_xmldoc_load_documentation();
-#endif
-
        aco_init();
 
        if (init_logger()) {            /* Start logging subsystem */
@@ -4513,11 +4535,6 @@ static void asterisk_daemon(int isroot, const char *runuser, const char *rungrou
                exit(1);
        }
 
-       if (astdb_init()) {
-               printf("Failed: astdb_init\n%s", term_quit());
-               exit(1);
-       }
-
        if (ast_msg_init()) {
                printf("Failed: ast_msg_init\n%s", term_quit());
                exit(1);