summaryrefslogtreecommitdiff
path: root/protocols/ICQ-WIM/src/server.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'protocols/ICQ-WIM/src/server.cpp')
-rw-r--r--protocols/ICQ-WIM/src/server.cpp23
1 files changed, 12 insertions, 11 deletions
diff --git a/protocols/ICQ-WIM/src/server.cpp b/protocols/ICQ-WIM/src/server.cpp
index 2f67f4b0d9..43b0112907 100644
--- a/protocols/ICQ-WIM/src/server.cpp
+++ b/protocols/ICQ-WIM/src/server.cpp
@@ -734,12 +734,6 @@ void CIcqProto::OnFileContinue(NETLIBHTTPREQUEST *pReply, AsyncHttpRequest *pOld
<< CHAR_PARAM("offlineIM", "true") << WCHAR_PARAM("parts", wszParts) << WCHAR_PARAM("t", GetUserId(pTransfer->pfts.hContact)) << INT_PARAM("ts", TS());
Push(pReq);
- T2Utf msgText(wszUrl);
- PROTORECVEVENT recv = {};
- recv.flags = PREF_CREATEREAD | PREF_SENT;
- recv.szMessage = msgText;
- recv.timestamp = time(0);
- ProtoChainRecvMsg(pTransfer->pfts.hContact, &recv);
}
else ProtoBroadcastAck(pTransfer->pfts.hContact, ACKTYPE_FILE, ACKRESULT_FAILED, pTransfer);
delete pTransfer;
@@ -799,14 +793,21 @@ void CIcqProto::OnFileInfo(NETLIBHTTPREQUEST *pReply, AsyncHttpRequest *pReq)
if (root.error() != 200)
return;
- auto &data = root.result();
- std::string szUrl(data["info"]["dlink"].as_string());
+ auto &data = root.result()["info"];
+ std::string szUrl(data["dlink"].as_string());
if (szUrl.empty())
return;
mir_urlDecode(&*szUrl.begin());
+ for (size_t i = 0; i < szUrl.length(); ++i)
+ if (szUrl[i] == '_' && isxdigit(szUrl[i+1]) && isxdigit(szUrl[i+2])) {
+ int c;
+ if (1 == sscanf(szUrl.c_str() + i + 1, "%02x", &c))
+ szUrl.replace(i, 3, 1, c);
+ }
+
auto *ft = new IcqFileTransfer(pReq->hContact, szUrl.c_str());
- ft->pfts.totalBytes = ft->pfts.currentFileSize = 100;
+ ft->pfts.totalBytes = ft->pfts.currentFileSize = data["file_size"].as_int();
ft->pfts.szCurrentFile.w = ft->m_wszFileName.GetBuffer();
PROTORECVFILE pre = { 0 };
@@ -828,8 +829,8 @@ LBL_Error:
return;
}
- ft->pfts.totalProgress += 100;
- ft->pfts.currentFileProgress += 100;
+ ft->pfts.totalProgress += pReply->dataLength;
+ ft->pfts.currentFileProgress += pReply->dataLength;
ProtoBroadcastAck(ft->pfts.hContact, ACKTYPE_FILE, ACKRESULT_DATA, ft, (LPARAM)&ft->pfts);
debugLogW(L"Saving to [%s]", ft->pfts.szCurrentFile.w);