http: Send headers and body in one write.
authorMark Michelson <mmichelson@digium.com>
Thu, 1 Dec 2016 22:49:03 +0000 (16:49 -0600)
committerJoshua Colp <jcolp@digium.com>
Wed, 7 Dec 2016 11:10:32 +0000 (05:10 -0600)
commit503006123a9eecdaedf74295367af99578f021b7
tree287f92b250bab094a08523f101d53c46700c35f7
parentbf6423a33678d95896cfb6325572dab3a23e6d6a
http: Send headers and body in one write.

This is a semi-regression caused by the iostreams change. Prior to
iostreams, HTTP headers were written to a FILE handle using fprintf.
Then the body was written using a call to fwrite(). Because of internal
buffering, the result was that the HTTP headers and body would be sent
out in a single write to the socket.

With the change to iostreams, the HTTP headers are written using
ast_iostream_printf(), which under the hood calls write(). The HTTP body
calls ast_iostream_write(), which also calls write() under the hood.
This results in two separate writes to the socket.

Most HTTP client libraries out there will handle this change just fine.
However, a few of our testsuite tests started failing because of the
change. As a result, in order to reduce frustration for users, this
change alters the HTTP code to write the headers and body in a single
write operation.

ASTERISK-26629 #close
Reported by Joshua Colp

Change-Id: Idc2d2fb3d9b3db14b8631a1e302244fa18b0e518
main/http.c