version 0.5.0_alpha
git-svn-id: svn://db.shs.com.ru/pip@8 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5
This commit is contained in:
@@ -8,7 +8,7 @@ PIFileTransfer::PIFileTransfer(): crc(standardCRC_16()) {
|
||||
header.version = PIFILETRANSFER_VERSION;
|
||||
header.session_id = 0;
|
||||
dir = PIDir::current();
|
||||
fileinfo_size = sizeof(EntryInfo) + sizeof(PIByteArray) + 100;
|
||||
fileinfo_size = sizeof(EntryInfo) + sizeof(FilePart) + 100;
|
||||
min_packet_size = sizeof(PacketHeader) + sizeof(uint) + fileinfo_size;
|
||||
is_sending = is_receiving = false;
|
||||
bytes_file_all = bytes_file_cur = bytes_total_all = bytes_total_cur = 0;
|
||||
@@ -26,16 +26,33 @@ PIFileTransfer::~PIFileTransfer() {
|
||||
|
||||
|
||||
bool PIFileTransfer::send(const PIString & file) {
|
||||
return sendFiles(PIVector<PIFile::FileInfo>() << PIFile::fileInfo(file));
|
||||
PIVector<PIFile::FileInfo> ce = dir.entries();
|
||||
PIFile::FileInfo e;
|
||||
e.path = "";
|
||||
for (int i = 0; i < ce.size_s(); i++) {
|
||||
if (ce[i].path == file) e = ce[i];
|
||||
}
|
||||
if (e.path != "") return sendFiles(PIVector<PIFile::FileInfo>() << e);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
bool PIFileTransfer::send(PIVector<PIFile::FileInfo> entries) {
|
||||
PIVector<PIFile::FileInfo> allEntries;
|
||||
PIVector<PIFile::FileInfo> ce;
|
||||
PISet<PIString> names;
|
||||
for (int i = 0; i < entries.size_s(); i++) {
|
||||
allEntries << entries[i];
|
||||
ce.clear();
|
||||
if (entries[i].isDir())
|
||||
allEntries << PIDir::allEntries(dir.absolutePath() + dir.separator + entries[i].path);
|
||||
ce = PIDir::allEntries(dir.absolutePath() + dir.separator + entries[i].path);
|
||||
for (int k = 0; k < ce.size_s(); k++) ce[k].path = entries[i].path + dir.separator + ce[k].path;
|
||||
ce.push_front(entries[i]);
|
||||
for (int j = 0; j < ce.size_s(); j++) {
|
||||
if (names.contains(ce[j].path)) continue;
|
||||
allEntries << ce[j];
|
||||
//piCout << ce[j].path;
|
||||
names << ce[j].path;
|
||||
}
|
||||
}
|
||||
return sendFiles(allEntries);
|
||||
}
|
||||
@@ -146,12 +163,6 @@ void PIFileTransfer::received(PIByteArray & ba) {
|
||||
|
||||
|
||||
bool PIFileTransfer::sendFiles(PIVector<PIFile::FileInfo> files) {
|
||||
PIStringList names;
|
||||
for(int i=0; i<files.size_s(); i++) {
|
||||
files[i].path = dir.relative(files[i].path);
|
||||
if (names.contains(files[i].path)) {files.remove(i); i--;}
|
||||
else names << files[i].path;
|
||||
}
|
||||
// piCoutObj << "prepare to send" << files.size() << "files";
|
||||
break_ = false;
|
||||
is_sending = true;
|
||||
@@ -247,7 +258,7 @@ void PIFileTransfer::buildSession(PIVector<PIFile::FileInfo> files) {
|
||||
fi.fstart = fs;
|
||||
fi.fsize = piMinll(fi.entry.size - fs, max_packet_size - min_packet_size);
|
||||
lfi << fi;
|
||||
cur_size += fi.fsize + sizeof(PIByteArray);
|
||||
cur_size += fi.fsize + sizeof(FilePart);
|
||||
if (fi.part_index != fi.parts) {
|
||||
session << lfi;
|
||||
lfi.clear();
|
||||
|
||||
Reference in New Issue
Block a user