diff options
Diffstat (limited to 'utilities.cpp')
-rw-r--r-- | utilities.cpp | 55 |
1 files changed, 28 insertions, 27 deletions
diff --git a/utilities.cpp b/utilities.cpp index 115c2bf..0ba8e12 100644 --- a/utilities.cpp +++ b/utilities.cpp @@ -272,9 +272,12 @@ int OnPreBuildContactMenu(WPARAM w, LPARAM l) list<wstring> transfers; +extern bool bFileTransfers; int onProtoAck(WPARAM w, LPARAM l) { + if(!bFileTransfers) + return 0; ACKDATA *ack=(ACKDATA*)l; CCSDATA *ccs=(CCSDATA*)ack->lParam; if (ack->type!=ACKTYPE_FILE) @@ -292,19 +295,21 @@ int onProtoAck(WPARAM w, LPARAM l) case ACKRESULT_SUCCESS: { TCHAR *filename = NULL; -// if(f->szCurrentFile && f->szCurrentFile[0]) -// filename = mir_utf8decodeW(f->szCurrentFile); - if(f->tszCurrentFile && f->tszCurrentFile[0]) - filename = mir_wstrdup(f->tszCurrentFile); - if(!filename) - break; - TCHAR *temp = _wgetenv(_T("TEMP")); - if(_tcsstr(filename, temp)) + if(f->flags & PFTS_UNICODE) { - mir_free(filename); - break; + if(f->tszCurrentFile && f->tszCurrentFile[0]) + filename = mir_wstrdup(f->tszCurrentFile); + if(!filename) + return 0; + } + else + { + if(f->szCurrentFile && f->szCurrentFile[0]) + filename = mir_utf8decodeT(f->szCurrentFile); + if(!filename) + return 0; } - else if(_tcsstr(filename, _T(".gpg"))) //decrypt it + if(_tcsstr(filename, _T(".gpg"))) //decrypt it { //process encrypted file if(_waccess(f->tszCurrentFile, 0) == -1) { @@ -351,10 +356,11 @@ int onProtoAck(WPARAM w, LPARAM l) return 0; } - //from secureim partially int onSendFile(WPARAM w, LPARAM l) { + if(!bFileTransfers) + return CallService(MS_PROTO_CHAINSEND, w, l); CCSDATA *ccs=(CCSDATA*)l; if(isContactSecured(ccs->hContact)) { @@ -364,6 +370,9 @@ int onSendFile(WPARAM w, LPARAM l) { if (_tcsstr(file[i],_T(".gpg"))) continue; + if(_waccess(file[i], 0) == -1) + if(errno == ENOENT) + return 0; //we do not want to send file unencrypted (sometimes ack have wrong info) TCHAR *name = _tcsrchr(file[i],_T('\\')); if( !name ) name = file[i]; @@ -383,7 +392,7 @@ int onSendFile(WPARAM w, LPARAM l) mir_free(szKeyid); mir_free(keyid); cmd += _T(" -o \""); - TCHAR *temp = _wgetenv(_T("TEMP")); + TCHAR *temp = _tgetenv(_T("TEMP")); cmd += temp; cmd += _T("\\"); cmd += file_out; @@ -430,13 +439,15 @@ int onSendFile(WPARAM w, LPARAM l) } } } - mir_free(file[i]); - file[i]=mir_wstrdup(path_out.c_str()); +// mir_free(file[i]); +// file[i] = mir_tstrdup(path_out.c_str()); + mir_realloc(file[i], path_out.length()*sizeof(TCHAR)+1); + _tcscpy(file[i], path_out.c_str()); delete [] file_out; transfers.push_back(path_out); } } - return CallService(ccs->szProtoService, w, l); + return CallService(MS_PROTO_CHAINSEND, w, l); } void storeOutput(HANDLE ahandle, string *output) @@ -964,20 +975,10 @@ int returnNoError(HANDLE hContact) { string toUTF8(wstring str) { string ustr; - wstring tmpstr; - utf8::replace_invalid(str.begin(), str.end(), back_inserter(tmpstr)); - utf8::utf16to8(tmpstr.begin(), tmpstr.end(), back_inserter(ustr)); + utf8::utf16to8(str.begin(), str.end(), back_inserter(ustr)); return ustr; } -string toUTF8(string str) -{ - string ustr; - wstring tmpstr; - utf8::replace_invalid(str.begin(), str.end(), back_inserter(tmpstr)); - utf8::utf16to8(tmpstr.begin(), tmpstr.end(), back_inserter(ustr)); - return ustr; -} wstring toUTF16(string str) //convert as much as possible |