00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #include <boost/asio.hpp>
00011 #include <pion/net/HTTPWriter.hpp>
00012 #include <pion/net/HTTPMessage.hpp>
00013
00014
00015 namespace pion {
00016 namespace net {
00017
00018
00019
00020
00021 void HTTPWriter::prepareWriteBuffers(HTTPMessage::WriteBuffers& write_buffers,
00022 const bool send_final_chunk)
00023 {
00024
00025 if (! m_sent_headers) {
00026
00027 prepareBuffersForSend(write_buffers);
00028
00029
00030 m_sent_headers = true;
00031 }
00032
00033
00034
00035
00036
00037
00038 if (m_content_length > 0) {
00039 if (supportsChunkedMessages() && sendingChunkedMessage()) {
00040
00041
00042 char cast_buf[35];
00043 sprintf(cast_buf, "%lx", static_cast<long>(m_content_length));
00044
00045
00046 m_text_cache.push_back(cast_buf);
00047
00048 write_buffers.push_back(boost::asio::buffer(m_text_cache.back()));
00049
00050 write_buffers.push_back(boost::asio::buffer(HTTPTypes::STRING_CRLF));
00051
00052
00053 write_buffers.insert(write_buffers.end(), m_content_buffers.begin(),
00054 m_content_buffers.end());
00055
00056 write_buffers.push_back(boost::asio::buffer(HTTPTypes::STRING_CRLF));
00057 } else {
00058
00059 write_buffers.insert(write_buffers.end(), m_content_buffers.begin(),
00060 m_content_buffers.end());
00061 }
00062 }
00063
00064
00065 if (send_final_chunk && supportsChunkedMessages() && sendingChunkedMessage()) {
00066
00067 m_text_cache.push_back("0");
00068
00069 write_buffers.push_back(boost::asio::buffer(m_text_cache.back()));
00070
00071 write_buffers.push_back(boost::asio::buffer(HTTPTypes::STRING_CRLF));
00072 write_buffers.push_back(boost::asio::buffer(HTTPTypes::STRING_CRLF));
00073 }
00074 }
00075
00076 }
00077 }
00078