From 0390dae08dc47d41712cce43c806864d32b02a70 Mon Sep 17 00:00:00 2001
From: Terry Wilson <twilson@digium.com>
Date: Mon, 24 May 2010 22:21:58 +0000
Subject: [PATCH] Merge the rest of the FullyBooted patch

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@265467 65c4cc65-6c06-0410-ace0-fbb531ad65f3
---
 doc/manager_1_1.txt | 16 ++++++++++++++++
 main/asterisk.c     |  1 +
 main/manager.c      |  3 +++
 3 files changed, 20 insertions(+)

diff --git a/doc/manager_1_1.txt b/doc/manager_1_1.txt
index a9b47def52..30ba876ca5 100644
--- a/doc/manager_1_1.txt
+++ b/doc/manager_1_1.txt
@@ -314,6 +314,22 @@ Changes to manager version 1.1:
 * NEW EVENTS
 ------------
 
+- Event: FullyBooted
+	Modules: loader.c
+	Purpose:
+		It is handy to have a single event notification for when all Asterisk
+		modules have been loaded--especially for situations like running
+		automated tests. This event will fire 1) immediately upon all modules
+		loading or 2) upon connection to the AMI interface if the modules have
+		already finished loading before the connection was made. This ensures
+		that a user will never miss getting a FullyBooted event. In vary rare
+		circumstances, it might be possible to get two copies of the message
+		if the AMI connection is made right as the modules finish loading.
+	Example:
+		Event: FullyBooted
+		Privilege: system,all
+		Status: Fully Booted
+
 - Event: Transfer
 	Modules: res_features, chan_sip
 	Purpose:
diff --git a/main/asterisk.c b/main/asterisk.c
index fd29a6f64b..a9844de969 100644
--- a/main/asterisk.c
+++ b/main/asterisk.c
@@ -3723,6 +3723,7 @@ int main(int argc, char *argv[])
 		sig_alert_pipe[0] = sig_alert_pipe[1] = -1;
 
 	ast_set_flag(&ast_options, AST_OPT_FLAG_FULLY_BOOTED);
+	manager_event(EVENT_FLAG_SYSTEM, "FullyBooted", "Status: Fully Booted\r\n");
 
 	ast_process_pending_reloads();
 
diff --git a/main/manager.c b/main/manager.c
index 297e94f5f2..f23cec8a23 100644
--- a/main/manager.c
+++ b/main/manager.c
@@ -2740,6 +2740,9 @@ static int action_login(struct mansession *s, const struct message *m)
 		ast_verb(2, "%sManager '%s' logged on from %s\n", (s->session->managerid ? "HTTP " : ""), s->session->username, ast_inet_ntoa(s->session->sin.sin_addr));
 	}
 	astman_send_ack(s, m, "Authentication accepted");
+	if (ast_test_flag(&ast_options, AST_OPT_FLAG_FULLY_BOOTED)) {
+		manager_event(EVENT_FLAG_SYSTEM, "FullyBooted", "Status: Fully Booted\r\n");
+	}
 	return 0;
 }
 
-- 
GitLab