qhttpserverresponse.cpp 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. #include "private/qhttpserverresponse_private.hpp"
  2. ///////////////////////////////////////////////////////////////////////////////
  3. namespace qhttp {
  4. namespace server {
  5. ///////////////////////////////////////////////////////////////////////////////
  6. QHttpResponse::QHttpResponse(QHttpConnection* conn)
  7. : QHttpAbstractOutput(conn) , d_ptr(new QHttpResponsePrivate(conn, this)) {
  8. d_ptr->initialize();
  9. QHTTP_LINE_LOG
  10. }
  11. QHttpResponse::QHttpResponse(QHttpResponsePrivate& dd, QHttpConnection* conn)
  12. : QHttpAbstractOutput(conn) , d_ptr(&dd) {
  13. d_ptr->initialize();
  14. QHTTP_LINE_LOG
  15. }
  16. QHttpResponse::~QHttpResponse() {
  17. QHTTP_LINE_LOG
  18. }
  19. void
  20. QHttpResponse::setStatusCode(TStatusCode code) {
  21. d_func()->istatus = code;
  22. }
  23. void
  24. QHttpResponse::setVersion(const QString &versionString) {
  25. d_func()->iversion = versionString;
  26. }
  27. void
  28. QHttpResponse::addHeader(const QByteArray &field, const QByteArray &value) {
  29. d_func()->addHeader(field, value);
  30. }
  31. THeaderHash&
  32. QHttpResponse::headers() {
  33. return d_func()->iheaders;
  34. }
  35. void
  36. QHttpResponse::write(const QByteArray &data) {
  37. d_func()->writeData(data);
  38. }
  39. void
  40. QHttpResponse::end(const QByteArray &data) {
  41. Q_D(QHttpResponse);
  42. if ( d->endPacket(data) )
  43. emit done(!d->ikeepAlive);
  44. }
  45. QHttpConnection*
  46. QHttpResponse::connection() const {
  47. return d_func()->iconnection;
  48. }
  49. ///////////////////////////////////////////////////////////////////////////////
  50. QByteArray
  51. QHttpResponsePrivate::makeTitle() {
  52. QString title = QString("HTTP/%1 %2 %3\r\n")
  53. .arg(iversion)
  54. .arg(istatus)
  55. .arg(Stringify::toString(istatus));
  56. return title.toLatin1();
  57. }
  58. void
  59. QHttpResponsePrivate::prepareHeadersToWrite() {
  60. if ( !iheaders.contains("date") ) {
  61. // Sun, 06 Nov 1994 08:49:37 GMT - RFC 822. Use QLocale::c() so english is used for month and
  62. // day.
  63. QString dateString = QLocale::c().
  64. toString(QDateTime::currentDateTimeUtc(),
  65. "ddd, dd MMM yyyy hh:mm:ss")
  66. .append(" GMT");
  67. addHeader("date", dateString.toLatin1());
  68. }
  69. }
  70. ///////////////////////////////////////////////////////////////////////////////
  71. } // namespace server
  72. } // namespace qhttp
  73. ///////////////////////////////////////////////////////////////////////////////