void MediaUpload::uploadMedia() { QList<FormData*> formData; FormDataString *str = new FormDataString(); str->name = "from"; str->content = Client::myJid; formData.append(str); FormDataString *str2 = new FormDataString(); str2->name = "to"; str2->content = msg.remote_resource; formData.append(str2); FormDataFile *file = new FormDataFile(); file->name = "file"; file->fileName = msg.media_name; file->uri = msg.local_file_uri; file->contentType = msg.media_mime_type; formData.append(file); MultiPartUploader *uploader = new MultiPartUploader(this); connect(uploader,SIGNAL(finished(MultiPartUploader*,QVariantMap)), this,SLOT(finished(MultiPartUploader*,QVariantMap))); connect(uploader,SIGNAL(socketError(QAbstractSocket::SocketError)), this,SLOT(errorHandler(QAbstractSocket::SocketError))); connect(uploader,SIGNAL(progress(float)), this,SLOT(updateProgress(float))); connect(uploader,SIGNAL(headersReceived(qint64)), this,SLOT(headersReceivedHandler(qint64))); connect(uploader,SIGNAL(requestSent(qint64)), this,SLOT(requestSentHandler(qint64))); // uploader->open("https://mms.whatsapp.net/client/iphone/upload.php", formData); uploader->open(msg.media_url, formData); }
void HttpRequestv2::readResponse() { Utilities::logData("HttpRequest(): Got response"); // This function is only called once disconnect(socket,SIGNAL(readyRead()),this,SLOT(readResponse())); // Prepare the buffer QByteArray buffer; buffer.resize(MAX_BUFFER); // Read response qint64 length = socket->readLine(buffer.data(), MAX_BUFFER); qint64 totalLength = length; QString response = QString::fromUtf8(buffer.data()); Utilities::logData(response.trimmed()); errorCode = 0; if (response.left(8) != "HTTP/1.1") { emit headersReceived(totalLength); emit finished(); return; } int space = response.indexOf(' ', 9); if (space < 0) { emit headersReceived(totalLength); emit finished(); return; } errorCode = response.mid(9,(space-9)).toInt(); if (errorCode != 200) { emit headersReceived(totalLength); emit finished(); return; } // Read all headers headers.clear(); bool end = false; while (socket->bytesAvailable() >= 0 && end == false) { if (socket->bytesAvailable() == 0) socket->waitForReadyRead(); if (socket->bytesAvailable() > 0) { length = socket->readLine(buffer.data(), MAX_BUFFER); totalLength += length; QString header = QString::fromUtf8(buffer.data()); Utilities::logData(header.trimmed()); // A blank line means the end of headers and beginning of data if (header == "\r\n") { Utilities::logData("HttpRequest(): All headers read. Available: " + QString::number(socket->bytesAvailable())); end = true; } else { QStringList list = header.trimmed().split(": "); setHeader(list[0],list[1]); } } } if (end) { emit headersReceived(totalLength); emit finished(); } }
void MediaUpload::headersReceivedHandler(qint64 bytes) { emit headersReceived(bytes); }