From f2d12f4d065852bb6a1082c1418f03742bec92ba Mon Sep 17 00:00:00 2001 From: Luigi Rizzo <rizzo@icir.org> Date: Tue, 17 Oct 2006 17:41:59 +0000 Subject: [PATCH] open a temporary file to receive the output from cli commands invoked through the http interface. It is not terribly efficient but better than no output at all. Todo: use a configurable /tmp directory instead of a hardwired one. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@45330 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- main/manager.c | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/main/manager.c b/main/manager.c index 45cdd6e6b2..85210cc76e 100644 --- a/main/manager.c +++ b/main/manager.c @@ -1172,7 +1172,7 @@ static int action_waitevent(struct mansession *s, struct message *m) ast_mutex_unlock(&s->__lock); if (needexit) break; - if (s->fd > 0) { + if (!s->inuse && s->fd > 0) { if (ast_wait_for_input(s->fd, 1000)) break; } else { @@ -2445,6 +2445,11 @@ static char *generic_http_callback(int format, struct sockaddr_in *requestor, co ast_build_string(&c, &len, "<body bgcolor=\"#ffffff\"><table align=center bgcolor=\"#f1f1f1\" width=\"500\">\r\n"); ast_build_string(&c, &len, "<tr><td colspan=\"2\" bgcolor=\"#f1f1ff\"><h1> Manager Tester</h1></td></tr>\r\n"); } + { + char template[32]; + ast_copy_string(template, "/tmp/ast-http-XXXXXX", sizeof(template)); + s->fd = mkstemp(template); + } if (process_message(s, &m)) { if (s->authenticated) { if (option_verbose > 1) { @@ -2461,6 +2466,25 @@ static char *generic_http_callback(int format, struct sockaddr_in *requestor, co } s->needdestroy = 1; } + if (s->fd > -1) { /* have temporary output */ + char *buf; + off_t len = lseek(s->fd, 0, SEEK_END); /* how many chars available */ + + if (len > 0 && (buf = ast_calloc(1, len+1))) { + if (!s->outputstr) + s->outputstr = ast_calloc(1, sizeof(*s->outputstr)); + if (s->outputstr) { + lseek(s->fd, 0, SEEK_SET); + read(s->fd, buf, len); + ast_verbose("--- fd %d has %d bytes ---\n%s\n---\n", s->fd, (int)len, buf); + ast_dynamic_str_append(&s->outputstr, 0, "%s", buf); + } + free(buf); + } + close(s->fd); + s->fd = -1; + } + if (s->outputstr) { char *tmp; if (format == FORMAT_XML) -- GitLab