00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 #include <boost/asio.hpp>
00011 #include <pion/http/writer.hpp>
00012 #include <pion/http/message.hpp>
00013 
00014 
00015 namespace pion {    
00016 namespace http {    
00017 
00018 
00019 
00020 
00021 void writer::prepare_write_buffers(http::message::write_buffers_t& write_buffers,
00022                                      const bool send_final_chunk)
00023 {
00024     
00025     if (! m_sent_headers) {
00026         
00027         prepare_buffers_for_send(write_buffers);
00028 
00029         
00030         m_sent_headers = true;
00031     }
00032 
00033     
00034     
00035     
00036     
00037     
00038     if (m_content_length > 0) {
00039         if (supports_chunked_messages() && sending_chunked_message()) {
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(http::types::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(http::types::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 && supports_chunked_messages() && sending_chunked_message()) {
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(http::types::STRING_CRLF));
00072         write_buffers.push_back(boost::asio::buffer(http::types::STRING_CRLF));
00073     }
00074 }
00075 
00076     
00077 }   
00078 }