void Pillow::HttpRequestWriter::write(const QByteArray &method, const QByteArray &path, const Pillow::HttpHeaderCollection &headers, const QByteArray &data) { if (_device == 0) { qWarning() << "Pillow::HttpRequestWriter::write: called while device is not set. Not proceeding."; return; } if (_builder.capacity() < 8192) _builder.reserve(8192); _builder.append(method).append(' ').append(path).append(Pillow::HttpClientTokens::httpOneOneCrlfToken); for (const Pillow::HttpHeader *h = headers.constBegin(), *hE = headers.constEnd(); h < hE; ++h) _builder.append(h->first).append(Pillow::HttpClientTokens::colonSpaceToken).append(h->second).append(Pillow::HttpClientTokens::crlfToken); if (!data.isEmpty()) { _builder.append(Pillow::HttpClientTokens::contentLengthColonSpaceToken); Pillow::ByteArrayHelpers::appendNumber<int, 10>(_builder, data.size()); _builder.append(Pillow::HttpClientTokens::crlfToken); } _builder.append(Pillow::HttpClientTokens::crlfToken); if (data.isEmpty()) { _device->write(_builder); } else { if (data.size() < 4096) { _builder.append(data); _device->write(_builder); } else { _device->write(_builder); _device->write(data); } } if (_builder.size() > 16384) _builder.clear(); else _builder.data_ptr()->size = 0; }