it is useless and possibly wrong to use ast_cli() to send the
authorLuigi Rizzo <rizzo@icir.org>
Sun, 22 Oct 2006 08:28:16 +0000 (08:28 +0000)
committerLuigi Rizzo <rizzo@icir.org>
Sun, 22 Oct 2006 08:28:16 +0000 (08:28 +0000)
reply back to http clients.
Use fprintf/fwrite instead, since we are already using a FILE *
to read the input.

If you wonder why, this is because it makes it trivial to
implement https support (as long as your system has funopen()).

And this is what i am going to put in with the next few commits...

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@45858 65c4cc65-6c06-0410-ace0-fbb531ad65f3

main/http.c

index 4a14cb1..5bb1df2 100644 (file)
@@ -469,21 +469,23 @@ static void *ast_httpd_helper_thread(void *data)
                char timebuf[256];
 
                strftime(timebuf, sizeof(timebuf), "%a, %d %b %Y %H:%M:%S GMT", gmtime(&t));
-               ast_cli(ser->fd, "HTTP/1.1 %d %s\r\n", status, title ? title : "OK");
-               ast_cli(ser->fd, "Server: Asterisk\r\n");
-               ast_cli(ser->fd, "Date: %s\r\n", timebuf);
-               ast_cli(ser->fd, "Connection: close\r\n");
-               if (contentlength) {
+               fprintf(ser->f, "HTTP/1.1 %d %s\r\n"
+                               "Server: Asterisk\r\n"
+                               "Date: %s\r\n"
+                               "Connection: close\r\n",
+                       status, title ? title : "OK", timebuf);
+               if (!contentlength) {   /* opaque body ? just dump it hoping it is properly formatted */
+                       fprintf(ser->f, "%s", c);
+               } else {
                        char *tmp = strstr(c, "\r\n\r\n");
 
                        if (tmp) {
-                               ast_cli(ser->fd, "Content-length: %d\r\n", contentlength);
+                               fprintf(ser->f, "Content-length: %d\r\n", contentlength);
                                /* first write the header, then the body */
-                               write(ser->fd, c, (tmp + 4 - c));
-                               write(ser->fd, tmp + 4, contentlength);
+                               fwrite(c, 1, (tmp + 4 - c), ser->f);
+                               fwrite(tmp + 4, 1, contentlength, ser->f);
                        }
-               } else
-                       ast_cli(ser->fd, "%s", c);
+               }
                free(c);
        }
        if (title)