From 0a377fe6d1ca13161fc6ced1375b7926476fe44a Mon Sep 17 00:00:00 2001 From: Alexander Lantsev Date: Sun, 1 Feb 2015 17:15:02 +0000 Subject: Tox: file transfer is canceled when we going to offline git-svn-id: http://svn.miranda-ng.org/main/trunk@11976 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- protocols/Tox/src/tox_account.cpp | 12 ++++++++++++ protocols/Tox/src/tox_proto.cpp | 2 -- protocols/Tox/src/tox_transfer.cpp | 13 +++++++++---- protocols/Tox/src/tox_transfer.h | 2 +- 4 files changed, 22 insertions(+), 7 deletions(-) (limited to 'protocols/Tox') diff --git a/protocols/Tox/src/tox_account.cpp b/protocols/Tox/src/tox_account.cpp index 2aa3081442..49eb5fa146 100644 --- a/protocols/Tox/src/tox_account.cpp +++ b/protocols/Tox/src/tox_account.cpp @@ -115,6 +115,18 @@ bool CToxProto::InitToxCore() void CToxProto::UninitToxCore() { + for (size_t i = 0; i < transfers->Count(); i++) + { + FileTransferParam *transfer = transfers->GetAt(i); + { + mir_cslock(transfer->fileLock); + + transfer->Cancel(tox); + ProtoBroadcastAck(transfer->pfts.hContact, ACKTYPE_FILE, ACKRESULT_DENIED, (HANDLE)transfer, 0); + } + transfers->Remove(transfer); + } + ptrA nickname(mir_utf8encodeW(ptrT(getTStringA("Nick")))); tox_set_name(tox, (uint8_t*)(char*)nickname, mir_strlen(nickname)); diff --git a/protocols/Tox/src/tox_proto.cpp b/protocols/Tox/src/tox_proto.cpp index bf122b72e7..419dbb2814 100644 --- a/protocols/Tox/src/tox_proto.cpp +++ b/protocols/Tox/src/tox_proto.cpp @@ -260,8 +260,6 @@ int __cdecl CToxProto::SetAwayMsg(int iStatus, const PROTOCHAR *msg) { if (IsOnline()) { - //WaitForSingleObject(hToxEvent, INFINITE); - ptrA statusMessage(msg == NULL ? mir_strdup("") : mir_utf8encodeT(msg)); if (tox_set_status_message(tox, (uint8_t*)(char*)statusMessage, min(TOX_MAX_STATUSMESSAGE_LENGTH, mir_strlen(statusMessage))) == TOX_ERROR) { diff --git a/protocols/Tox/src/tox_transfer.cpp b/protocols/Tox/src/tox_transfer.cpp index a56799f971..fd244f5136 100644 --- a/protocols/Tox/src/tox_transfer.cpp +++ b/protocols/Tox/src/tox_transfer.cpp @@ -142,7 +142,13 @@ void CToxProto::OnFileData(Tox *tox, int32_t friendNumber, uint8_t fileNumber, c // outcoming file flow HANDLE __cdecl CToxProto::SendFile(MCONTACT hContact, const PROTOCHAR*, PROTOCHAR **ppszFiles) { - uint32_t friendNumber = 0;// getDword(hContact, TOX_SETTINGS_NUMBER, TOX_ERROR); + ToxBinAddress pubKey = ptrA(getStringA(hContact, TOX_SETTINGS_ID)); + int32_t friendNumber = tox_get_friend_number(tox, pubKey); + if (friendNumber == TOX_ERROR) + { + debugLogA("CToxProto::SendFilesAsync: cannot get friend number by public key"); + return NULL; + } TCHAR *fileName = _tcsrchr(ppszFiles[0], '\\') + 1; @@ -237,11 +243,10 @@ void CToxProto::SendFileAsync(void *arg) mir_free(data); - if (transfer->status != STARTED) + if (transfer->status == STARTED) { - transfer->Fail(tox); + transfer->Finish(tox); } - transfer->Finish(tox); } /* COMMON */ diff --git a/protocols/Tox/src/tox_transfer.h b/protocols/Tox/src/tox_transfer.h index 7cbbffe3ee..8bc1987bea 100644 --- a/protocols/Tox/src/tox_transfer.h +++ b/protocols/Tox/src/tox_transfer.h @@ -67,7 +67,7 @@ struct FileTransferParam int Cancel(Tox *tox) { - status = FINISHED; + status = CANCELED; return tox_file_send_control(tox, friendNumber, GetDirection(), fileNumber, TOX_FILECONTROL_KILL, NULL, 0); } -- cgit v1.2.3