[Asterisk-code-review] [WIP] manager: Send fewer packets (...asterisk[13])

Sean Bright asteriskteam at digium.com
Wed Jul 24 16:13:50 CDT 2019


Sean Bright has uploaded this change for review. ( https://gerrit.asterisk.org/c/asterisk/+/11626


Change subject: [WIP] manager: Send fewer packets
......................................................................

[WIP] manager: Send fewer packets

Change-Id: I50128b0769060ca5272dbbb5e60242d131eaddf9
---
M main/manager.c
1 file changed, 70 insertions(+), 20 deletions(-)



  git pull ssh://gerrit.asterisk.org:29418/asterisk refs/changes/26/11626/1

diff --git a/main/manager.c b/main/manager.c
index 0efb030..35094fe 100644
--- a/main/manager.c
+++ b/main/manager.c
@@ -3042,6 +3042,15 @@
 /*! \brief initial allocated size for the astman_append_buf and astman_send_*_va */
 #define ASTMAN_APPEND_BUF_INITSIZE   256
 
+static void astman_flush(struct mansession *s, struct ast_str *buf)
+{
+	if (s->f || s->session->f) {
+		send_string(s, ast_str_buffer(buf));
+	} else {
+		ast_verbose("fd == -1 in astman_append, should not happen\n");
+	}
+}
+
 /*!
  * utility functions for creating AMI replies
  */
@@ -3091,21 +3100,33 @@
 static void astman_send_response_full(struct mansession *s, const struct message *m, char *resp, char *msg, char *listflag)
 {
 	const char *id = astman_get_header(m, "ActionID");
+	struct ast_str *buf;
 
-	astman_append(s, "Response: %s\r\n", resp);
-	if (!ast_strlen_zero(id)) {
-		astman_append(s, "ActionID: %s\r\n", id);
-	}
-	if (listflag) {
-		astman_append(s, "EventList: %s\r\n", listflag);	/* Start, complete, cancelled */
-	}
-	if (msg == MSG_MOREDATA) {
+	buf = ast_str_thread_get(&astman_append_buf, ASTMAN_APPEND_BUF_INITSIZE);
+	if (!buf) {
+		/* TODO: Log something? */
 		return;
-	} else if (msg) {
-		astman_append(s, "Message: %s\r\n\r\n", msg);
-	} else {
-		astman_append(s, "\r\n");
 	}
+
+	ast_str_set(&buf, 0, "Response: %s\r\n", resp);
+
+	if (!ast_strlen_zero(id)) {
+		ast_str_append(&buf, 0, "ActionID: %s\r\n", id);
+	}
+
+	if (listflag) {
+		/* Start, complete, cancelled */
+		ast_str_append(&buf, 0, "EventList: %s\r\n", listflag);
+	}
+
+	if (msg != MSG_MOREDATA) {
+		if (msg) {
+			ast_str_append(&buf, 0, "Message: %s\r\n", msg);
+		}
+		ast_str_append(&buf, 0, "\r\n");
+	}
+
+	astman_flush(s, buf);
 }
 
 void astman_send_response(struct mansession *s, const struct message *m, char *resp, char *msg)
@@ -3160,18 +3181,49 @@
 	astman_send_response_full(s, m, "Success", msg, listflag);
 }
 
+/* TODO: De-dupe */
+static void astman_send_list_complete(struct mansession *s, const struct message *m, const char *event_name, int count)
+{
+	const char *id = astman_get_header(m, "ActionID");
+	struct ast_str *buf;
+
+	buf = ast_str_thread_get(&astman_append_buf, ASTMAN_APPEND_BUF_INITSIZE);
+	if (!buf) {
+		/* TODO: Log something? */
+		return;
+	}
+
+	ast_str_set(&buf, 0, "Event: %s\r\n", event_name);
+	if (!ast_strlen_zero(id)) {
+		ast_str_append(&buf, 0, "ActionID: %s\r\n", id);
+	}
+	ast_str_append(&buf, 0,
+		"EventList: Complete\r\n"
+		"ListItems: %d\r\n\r\n",
+		count);
+	astman_flush(s, buf);
+}
+
 void astman_send_list_complete_start(struct mansession *s, const struct message *m, const char *event_name, int count)
 {
 	const char *id = astman_get_header(m, "ActionID");
+	struct ast_str *buf;
 
-	astman_append(s, "Event: %s\r\n", event_name);
-	if (!ast_strlen_zero(id)) {
-		astman_append(s, "ActionID: %s\r\n", id);
+	buf = ast_str_thread_get(&astman_append_buf, ASTMAN_APPEND_BUF_INITSIZE);
+	if (!buf) {
+		/* TODO: Log something? */
+		return;
 	}
-	astman_append(s,
+
+	ast_str_set(&buf, 0, "Event: %s\r\n", event_name);
+	if (!ast_strlen_zero(id)) {
+		ast_str_append(&buf, 0, "ActionID: %s\r\n", id);
+	}
+	ast_str_append(&buf, 0,
 		"EventList: Complete\r\n"
 		"ListItems: %d\r\n",
 		count);
+	astman_flush(s, buf);
 }
 
 void astman_send_list_complete_end(struct mansession *s)
@@ -4483,8 +4535,7 @@
 	regfree(&regexbuf);
 	ast_free(regex_string);
 
-	astman_send_list_complete_start(s, m, "ChannelsHungupListComplete", channels_matched);
-	astman_send_list_complete_end(s);
+	astman_send_list_complete(s, m, "ChannelsHungupListComplete", channels_matched);
 
 	return 0;
 }
@@ -6289,8 +6340,7 @@
 	}
 	ao2_iterator_destroy(&it_chans);
 
-	astman_send_list_complete_start(s, m, "CoreShowChannelsComplete", numchans);
-	astman_send_list_complete_end(s);
+	astman_send_list_complete(s, m, "CoreShowChannelsComplete", numchans);
 
 	ao2_ref(channels, -1);
 	return 0;

-- 
To view, visit https://gerrit.asterisk.org/c/asterisk/+/11626
To unsubscribe, or for help writing mail filters, visit https://gerrit.asterisk.org/settings

Gerrit-Project: asterisk
Gerrit-Branch: 13
Gerrit-Change-Id: I50128b0769060ca5272dbbb5e60242d131eaddf9
Gerrit-Change-Number: 11626
Gerrit-PatchSet: 1
Gerrit-Owner: Sean Bright <sean.bright at gmail.com>
Gerrit-MessageType: newchange
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-code-review/attachments/20190724/950de90e/attachment.html>


More information about the asterisk-code-review mailing list