mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-12 15:45:18 +00:00
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
This commit is contained in:
@@ -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)
|
||||
|
Reference in New Issue
Block a user