HTTPRequest::HTTPRequest(HTTPURL url, HTTPMethod m, HTTPVersion v) :url(url) ,method(m) ,version(v) ,form_encoding(HTTP_FORM_ENCODING_NONE) { generateBoundary(); }
QByteArray & QMultipartHttpRequest::requestStream() { generateBoundary(); QVector<requestElement>::iterator el; const char *endl = "\r\n"; buffer.clear(); for(el = elements.begin(); el != elements.end(); el++) { switch((*el).type) { case requestElement::ET_CONTENT_DISPOSITION: buffer += QString("Content-Disposition: form-data; ") + (*el).elementData + endl; break; case requestElement::ET_CONTENT_TYPE: buffer += QString("Content-Type: ") + (*el).elementData + endl; break; case requestElement::ET_BOUNDARY: buffer += QString("--") + boundary + endl; break; case requestElement::ET_ENDING_BOUNDARY: buffer += endl + QString("--") + boundary + QString("--") + endl; break; case requestElement::ET_DATA: buffer += endl + (*el).elementData + endl; break; } } return buffer; }
/** * Format a mailmessage in a RFC2822 string */ char * MailMessage::format() { // If the message is empty, return null if ( empty() ) { LOG.debug("MailMessage::format: empty message."); return 0; } StringBuffer ret; LOG.debug("MailMessage::format START"); if ( contentType.empty() ) { if ( attachments.size() ) { contentType = "multipart/mixed"; } else { contentType = body.getMimeType(); if (headers.size() > 0) { StringBuffer *line; int j = 0; for (line=(StringBuffer *)headers.front(); line; line=(StringBuffer *)headers.next() ) { if (strstr(line->c_str(), "format=") != 0 || strstr(line->c_str(),"reply-type=") != 0 ) { contentType.append("; "); line->replaceAll(";", " "); contentType.append(line->c_str()); headers.removeElementAt(j); j--; } j++; } } } } if ( mimeVersion.empty() ) { mimeVersion = "1.0"; } // Add generics headers ret.join((ArrayList &)headers, NL); // Add parsed headers ret += MIMEVERS; ret += mimeVersion; ret += NL; ret += MESSAGEID; ret += messageId; ret += NL; LOG.debug("MailMessage: From: %s\n", from.c_str()); ret += FROM; ret += from; ret += NL; ret += TO; ret += to; ret += NL; if (cc.length() ) { ret += CC; ret += cc; ret += NL; } if (bcc.length() ) { ret += BCC; ret += bcc; ret += NL; } ret += DATE; ret += date.formatRfc822(); ret += NL; ret += SUBJECT; ret += encodeHeader(subject); ret += NL; // add priority ret += IMPORTANCE; ret += convertForImportance(importance); ret += NL; ret += X_PRIORITY; ret += convertForXPriority(importance); ret += NL; ret += MIMETYPE; ret += contentType; ret+= "; "; if (contentType.ifind(MULTIPART) != StringBuffer::npos ){ if ( boundary.empty() ) { generateBoundary(boundary); } ret += "\n boundary=\""; ret += boundary; ret += "\"\n\nThis is a multi-part message in MIME format.\n"; // Prepare a string with the boundary on a line alone StringBuffer bound = "\n--"; bound += boundary; // Body ret += bound; ret += NL; ret += formatBodyPart(body); ret += bound; // Attachments const BodyPart *part; for ( part=(const BodyPart *)attachments.front(); part; part=(BodyPart *)attachments.next() ) { ret += NL; ret += formatBodyPart(*part); ret += bound; } ret += "--\n"; } else { // Body if(body.getCharset()) ret += CT_CHARSET; ret += body.getCharset(); ret += NL; if( body.getEncoding() ) ret += ENCODING; ret += body.getEncoding(); // end of headers ret += NL; ret += NL; ret += body.getContent(); ret += NL; } LOG.debug("MailMessage::format END"); return stringdup(ret.c_str()); }
int FlickrPrivate::upload(const FlickrPhoto &photo, const FlickrRequest &request, void* userData) { QByteArray boundary = generateBoundary(); QByteArray payload; QDataStream dataStream(&payload, QIODevice::WriteOnly); QMap<QString,QString> map = photo.args; map.insert("api_key", _apiKey); if(!_token.isEmpty()) { map.insert("auth_token", _token); } bool uploading = photo.photoId.isEmpty(); if(!uploading){ map.insert("photo_id", photo.photoId); } QMapIterator<QString, QString> i(map); QStringList keyList; while(i.hasNext()) { i.next(); keyList << i.key(); } qSort(keyList.begin(), keyList.end()); QString apiSig(_apiSecret); for(int i = 0; i < keyList.size(); ++i) { apiSig.append(keyList.at(i) + map.value(keyList.at(i))); QByteArray field = constructField(keyList.at(i),map.value(keyList.at(i)),boundary); dataStream.writeRawData(field.data(), field.length()); } apiSig = md5(apiSig); QByteArray sigField = constructField("api_sig", apiSig, boundary); dataStream.writeRawData(sigField.data(), sigField.length()); QByteArray fileField = constructField("photo", "", boundary, photo.file); dataStream.writeRawData(fileField.data(), fileField.length()); QFile file(photo.file); file.open(QIODevice::ReadOnly); while(!file.atEnd()) { QByteArray line = file.readLine(); dataStream.writeRawData(line.data(),line.length()); } file.close(); QByteArray endField; endField.append("\r\n--"); endField.append(boundary); endField.append("--\r\n\r\n"); dataStream.writeRawData(endField.data(), endField.length()); QString urlTmp("http://api.flickr.com/services/"); urlTmp.append((uploading)?"upload/":"replace/"); QNetworkRequest uploadRequest(urlTmp); uploadRequest.setRawHeader("Content-Type","multipart/form-data; boundary="+boundary); uploadRequest.setRawHeader("Host","ww.api.flickr.com"); _requestCounter++; RequestData requestData; requestData.request = request.requests; requestData.userData = userData; requestData.requestId = _requestCounter; QNetworkReply *reply = _networkAccessManager->post(uploadRequest,payload); connect(reply,SIGNAL(uploadProgress(qint64, qint64)), this, SLOT(uploadProgress(qint64, qint64))); requestDataMap.insert(reply,requestData); return requestData.requestId; }
const KisBoundary* KisBrush::boundary() const { if (!d->boundary) generateBoundary(); return d->boundary; }