qhttpclientrequest.cpp 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. #include "private/qhttpclientrequest_private.hpp"
  2. #include "qhttpclient.hpp"
  3. ///////////////////////////////////////////////////////////////////////////////
  4. namespace qhttp {
  5. namespace client {
  6. ///////////////////////////////////////////////////////////////////////////////
  7. QHttpRequest::QHttpRequest(QHttpClient* cli)
  8. : QHttpAbstractOutput(cli) , d_ptr(new QHttpRequestPrivate(cli, this)) {
  9. d_ptr->initialize();
  10. QHTTP_LINE_LOG
  11. }
  12. QHttpRequest::QHttpRequest(QHttpRequestPrivate& dd, QHttpClient* cli)
  13. : QHttpAbstractOutput(cli) , d_ptr(&dd) {
  14. d_ptr->initialize();
  15. QHTTP_LINE_LOG
  16. }
  17. QHttpRequest::~QHttpRequest() {
  18. QHTTP_LINE_LOG
  19. }
  20. void
  21. QHttpRequest::setVersion(const QString &versionString) {
  22. d_func()->iversion = versionString;
  23. }
  24. void
  25. QHttpRequest::addHeader(const QByteArray &field, const QByteArray &value) {
  26. d_func()->addHeader(field, value);
  27. }
  28. THeaderHash&
  29. QHttpRequest::headers() {
  30. return d_func()->iheaders;
  31. }
  32. void
  33. QHttpRequest::write(const QByteArray &data) {
  34. d_func()->writeData(data);
  35. }
  36. void
  37. QHttpRequest::end(const QByteArray &data) {
  38. Q_D(QHttpRequest);
  39. if ( d->endPacket(data) )
  40. emit done(!d->ikeepAlive);
  41. }
  42. QHttpClient*
  43. QHttpRequest::connection() const {
  44. return d_func()->iclient;
  45. }
  46. ///////////////////////////////////////////////////////////////////////////////
  47. QByteArray
  48. QHttpRequestPrivate::makeTitle() {
  49. QByteArray title;
  50. title.reserve(512);
  51. title.append(qhttp::Stringify::toString(imethod))
  52. .append(" ");
  53. QByteArray path = iurl.path(QUrl::FullyEncoded).toLatin1();
  54. if ( path.size() == 0 )
  55. path = "/";
  56. title.append(path);
  57. if ( iurl.hasQuery() )
  58. title.append("?").append(iurl.query(QUrl::FullyEncoded).toLatin1());
  59. title.append(" HTTP/")
  60. .append(iversion.toLatin1())
  61. .append("\r\n");
  62. return title;
  63. }
  64. void
  65. QHttpRequestPrivate::prepareHeadersToWrite() {
  66. if ( !iheaders.contains("host") ) {
  67. quint16 port = iurl.port();
  68. if ( port == 0 )
  69. port = 80;
  70. iheaders.insert("host",
  71. QString("%1:%2").arg(iurl.host()).arg(port).toLatin1()
  72. );
  73. }
  74. }
  75. ///////////////////////////////////////////////////////////////////////////////
  76. } // namespace client
  77. } // namespace qhttp
  78. ///////////////////////////////////////////////////////////////////////////////