[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(®exbuf);
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