-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathpayload.cpp
More file actions
78 lines (66 loc) · 2.41 KB
/
Copy pathpayload.cpp
File metadata and controls
78 lines (66 loc) · 2.41 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#include "payload.h"
QString Payload::cont_disp_str = "Content-Disposition: form-data; ";
QString Payload::boundary = "RghostUploadBoundaryabcdef0123456789";
QString Payload::endline = "\r\n";
QString Payload::start_delim = "--" + Payload::boundary + Payload::endline;
QString Payload::stop_delim = Payload::endline + "--" + Payload::boundary + "--" + Payload::endline;
Payload::Payload(QFile * file, QJsonDocument & json_document) : upload_file(file), upload_file_info(QFileInfo(*file))
{
position = 0;
const QString file_str = start_delim + cont_disp_str + "name=" + "\"file\"" + "; filename=" + "\"" +
upload_file_info.fileName() + "\""
+ endline + "Content-Transfer-Encoding: binary" + endline + endline;
addFormParam("authenticity_token", json_document["authtnticity_token"].toString().toLatin1());
payload_start.append(file_str.toUtf8());
open(QIODevice::ReadOnly);
}
qint64 Payload::size() const{
return payload_start.size() + upload_file->size() + stop_delim.size();
}
qint64 Payload::bytesAvailable() const{
return size() - position;
}
bool Payload::open(QIODevice::OpenMode mode){
setOpenMode(mode);
return true;
}
void Payload::close(){
upload_file->close();
QIODevice::close();
return;
}
bool Payload::atEnd () const {
return bytesAvailable() == 0;
}
bool Payload::isSequential() const {
return false;
}
bool Payload::canReadLine() const {
return false;
}
qint64 Payload::pos() const {
return position;
}
qint64 Payload::readData ( char * data, qint64 maxSize ) {
QByteArray chunk;
if (position < payload_start.size())
chunk.append(payload_start.mid(position, maxSize));
while(chunk.size() < maxSize && !upload_file->atEnd())
chunk.append(upload_file->read(maxSize - chunk.size()));
if (chunk.size() < maxSize)
chunk.append(stop_delim.mid(stop_delim.size() - (size() - position - chunk.size()), maxSize - chunk.size()));
position += chunk.size();
memcpy(data, chunk.data(), chunk.size());
return chunk.size();
}
qint64 Payload::writeData ( const char * data, qint64 len ) {
return 0;
}
void Payload::addFormParam(const char * name, const char * value) {
QString param = start_delim + cont_disp_str + "name=" + "\"" + name + "\"" + endline + endline + value + endline;
payload_start.append(param);
}
Payload::~Payload() {
close();
delete upload_file;
}