diff options
author | George Hazan <george.hazan@gmail.com> | 2015-08-27 15:15:33 +0000 |
---|---|---|
committer | George Hazan <george.hazan@gmail.com> | 2015-08-27 15:15:33 +0000 |
commit | d6eee2018898f2442883a0aa77ad095b75572cfb (patch) | |
tree | 8fbfe32690b9b32e5d47b1958a02f6f6a5fbf000 /plugins/MirOTR/src/dialogs.cpp | |
parent | 2d37d969153b5fad810984182f747755c1cbc616 (diff) |
fix for 64-bit issues & warnings
git-svn-id: http://svn.miranda-ng.org/main/trunk@15043 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
Diffstat (limited to 'plugins/MirOTR/src/dialogs.cpp')
-rw-r--r-- | plugins/MirOTR/src/dialogs.cpp | 656 |
1 files changed, 333 insertions, 323 deletions
diff --git a/plugins/MirOTR/src/dialogs.cpp b/plugins/MirOTR/src/dialogs.cpp index 76a690976e..898cffe408 100644 --- a/plugins/MirOTR/src/dialogs.cpp +++ b/plugins/MirOTR/src/dialogs.cpp @@ -1,6 +1,7 @@ #include "stdafx.h" -struct SmpData { +struct SmpData +{ HWND dialog; TrustLevel oldlevel; ConnContext *context; @@ -13,23 +14,23 @@ SmpForContactMap smp_for_contact; INT_PTR CALLBACK DlgSMPUpdateProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { - switch ( msg ) { - case WM_DESTROY:{ - ConnContext *context = (ConnContext*)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); - if(context) - otr_abort_smp(context); - break;} + switch (msg) { + case WM_DESTROY: { + ConnContext *context = (ConnContext*)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); + if (context) + otr_abort_smp(context); + break; } case WM_INITDIALOG: { if (!lParam) { DestroyWindow(hwndDlg); return FALSE; } - TranslateDialogDefault( hwndDlg ); + TranslateDialogDefault(hwndDlg); SmpData *data = (SmpData*)lParam; ConnContext *context = data->context; - MCONTACT hContact = (MCONTACT)context->app_data; + MCONTACT hContact = (UINT_PTR)context->app_data; data->dialog = hwndDlg; //smp_for_contact.insert(SmpForContactMap::value_type(context->app_data, *data)); if (smp_for_contact[context->app_data].dialog) SendMessage(smp_for_contact[context->app_data].dialog, WMU_REFRESHSMP, 0, 0); @@ -40,7 +41,7 @@ INT_PTR CALLBACK DlgSMPUpdateProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM mir_free(data); TCHAR title[512], *proto = mir_a2t(GetContactProto(hContact)); - const TCHAR *name =contact_get_nameT(hContact); + const TCHAR *name = contact_get_nameT(hContact); mir_sntprintf(title, _countof(title), TranslateT(LANG_SMP_PROGRESS_TITLE), name, proto); SetWindowText(hwndDlg, title); mir_sntprintf(title, _countof(title), TranslateT(LANG_SMP_PROGRESS_DESC), name, proto); @@ -51,32 +52,31 @@ INT_PTR CALLBACK DlgSMPUpdateProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM // Move window to screen center // Get the owner window and dialog box rectangles. HWND hwndOwner; RECT rcOwner, rcDlg, rc; - if ((hwndOwner = GetParent(hwndDlg)) == NULL) - { - hwndOwner = GetDesktopWindow(); + if ((hwndOwner = GetParent(hwndDlg)) == NULL) { + hwndOwner = GetDesktopWindow(); } - GetWindowRect(hwndOwner, &rcOwner); - GetWindowRect(hwndDlg, &rcDlg); - CopyRect(&rc, &rcOwner); + GetWindowRect(hwndOwner, &rcOwner); + GetWindowRect(hwndDlg, &rcDlg); + CopyRect(&rc, &rcOwner); // Offset the owner and dialog box rectangles so that right and bottom // values represent the width and height, and then offset the owner again // to discard space taken up by the dialog box. - OffsetRect(&rcDlg, -rcDlg.left, -rcDlg.top); - OffsetRect(&rc, -rc.left, -rc.top); - OffsetRect(&rc, -rcDlg.right, -rcDlg.bottom); + OffsetRect(&rcDlg, -rcDlg.left, -rcDlg.top); + OffsetRect(&rc, -rc.left, -rc.top); + OffsetRect(&rc, -rcDlg.right, -rcDlg.bottom); // The new position is the sum of half the remaining space and the owner's // original position. - SetWindowPos(hwndDlg, - HWND_TOP, - rcOwner.left + (rc.right / 2), - rcOwner.top + (rc.bottom / 2), + SetWindowPos(hwndDlg, + HWND_TOP, + rcOwner.left + (rc.right / 2), + rcOwner.top + (rc.bottom / 2), 0, 0, // Ignores size arguments. - SWP_NOSIZE); + SWP_NOSIZE); // end center dialog @@ -94,50 +94,50 @@ INT_PTR CALLBACK DlgSMPUpdateProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM ConnContext *context = (ConnContext*)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); SendDlgItemMessage(hwndDlg, IDC_PGB_SMP, PBM_SETPOS, wParam, 0); switch (wParam) { - case 0: + case 0: + EnableWindow(GetDlgItem(hwndDlg, IDCANCEL), false); + EnableWindow(GetDlgItem(hwndDlg, IDOK), true); + SetDlgItemText(hwndDlg, IDC_STC_SMP_PROGRESS, TranslateT(LANG_SMP_ERROR)); + smp_for_contact.erase(context->app_data); + break; + case 100: + { EnableWindow(GetDlgItem(hwndDlg, IDCANCEL), false); EnableWindow(GetDlgItem(hwndDlg, IDOK), true); - SetDlgItemText(hwndDlg, IDC_STC_SMP_PROGRESS, TranslateT(LANG_SMP_ERROR)); smp_for_contact.erase(context->app_data); - break; - case 100: - { - EnableWindow(GetDlgItem(hwndDlg, IDCANCEL), false); - EnableWindow(GetDlgItem(hwndDlg, IDOK), true); - smp_for_contact.erase(context->app_data); - if (context->smstate->sm_prog_state == OTRL_SMP_PROG_SUCCEEDED) { - if (context->active_fingerprint->trust && context->active_fingerprint->trust[0]) { - SetDlgItemText(hwndDlg, IDC_STC_SMP_PROGRESS, TranslateT(LANG_SMP_SUCCESS)); - } - else { - SetDlgItemText(hwndDlg, IDC_STC_SMP_PROGRESS, TranslateT(LANG_SMP_SUCCESS_VERIFY)); - } + if (context->smstate->sm_prog_state == OTRL_SMP_PROG_SUCCEEDED) { + if (context->active_fingerprint->trust && context->active_fingerprint->trust[0]) { + SetDlgItemText(hwndDlg, IDC_STC_SMP_PROGRESS, TranslateT(LANG_SMP_SUCCESS)); } else { - SetDlgItemText(hwndDlg, IDC_STC_SMP_PROGRESS, TranslateT(LANG_SMP_FAILED)); + SetDlgItemText(hwndDlg, IDC_STC_SMP_PROGRESS, TranslateT(LANG_SMP_SUCCESS_VERIFY)); } } - break; - default: - SetDlgItemText(hwndDlg, IDC_STC_SMP_PROGRESS, _T("")); + else { + SetDlgItemText(hwndDlg, IDC_STC_SMP_PROGRESS, TranslateT(LANG_SMP_FAILED)); + } + } + break; + default: + SetDlgItemText(hwndDlg, IDC_STC_SMP_PROGRESS, _T("")); } } break; - case WM_COMMAND: - switch ( HIWORD( wParam )) { - case BN_CLICKED: - { - ConnContext *context = (ConnContext*)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); - switch ( LOWORD( wParam )) { - case IDOK: - smp_for_contact.erase(context->app_data); - SetWindowLongPtr(hwndDlg, GWLP_USERDATA, NULL); - case IDCANCEL: - DestroyWindow(hwndDlg); - break; - } - }break; + case WM_COMMAND: + switch (HIWORD(wParam)) { + case BN_CLICKED: + { + ConnContext *context = (ConnContext*)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); + switch (LOWORD(wParam)) { + case IDOK: + smp_for_contact.erase(context->app_data); + SetWindowLongPtr(hwndDlg, GWLP_USERDATA, NULL); + case IDCANCEL: + DestroyWindow(hwndDlg); + break; + } + }break; } } @@ -145,34 +145,35 @@ INT_PTR CALLBACK DlgSMPUpdateProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM return FALSE; } -void SMPInitUpdateDialog(ConnContext *context, bool responder) { +void SMPInitUpdateDialog(ConnContext *context, bool responder) +{ if (!context) return; SmpData *data = (SmpData*)mir_calloc(sizeof(SmpData)); data->context = context; data->oldlevel = otr_context_get_trust(context); data->responder = responder; - CreateDialogParam(hInst, MAKEINTRESOURCE(IDD_SMP_PROGRESS), 0, DlgSMPUpdateProc, (LPARAM) data); + CreateDialogParam(hInst, MAKEINTRESOURCE(IDD_SMP_PROGRESS), 0, DlgSMPUpdateProc, (LPARAM)data); } INT_PTR CALLBACK DlgSMPResponseProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { - switch ( msg ) { - case WM_DESTROY:{ - ConnContext *context = (ConnContext*)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); - if(context) - otr_abort_smp(context); - break;} - case WM_INITDIALOG: + switch (msg) { + case WM_DESTROY: { + ConnContext *context = (ConnContext*)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); + if (context) + otr_abort_smp(context); + break; } + case WM_INITDIALOG: { if (!lParam) { DestroyWindow(hwndDlg); return FALSE; } - TranslateDialogDefault( hwndDlg ); + TranslateDialogDefault(hwndDlg); SmpData *data = (SmpData*)lParam; ConnContext *context = data->context; - MCONTACT hContact = (MCONTACT)context->app_data; + MCONTACT hContact = (UINT_PTR)context->app_data; data->dialog = hwndDlg; //smp_for_contact.insert(SmpForContactMap::value_type(context->app_data, *data)); if (smp_for_contact[context->app_data].dialog) SendMessage(smp_for_contact[context->app_data].dialog, WMU_REFRESHSMP, 0, 0); @@ -207,7 +208,8 @@ INT_PTR CALLBACK DlgSMPResponseProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARA ShowWindow(GetDlgItem(hwndDlg, IDNO), SW_HIDE); mir_free(data->question); - } else { + } + else { mir_sntprintf(buff, TranslateT(LANG_OTR_SMPPASSWORD_RESPOND_DESC), contact_get_nameT(hContact)); SetDlgItemText(hwndDlg, IDC_STC_SMP_INFO, buff); @@ -230,51 +232,50 @@ INT_PTR CALLBACK DlgSMPResponseProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARA // Move window to screen center // Get the owner window and dialog box rectangles. HWND hwndOwner; RECT rcOwner, rcDlg, rc; - if ((hwndOwner = GetParent(hwndDlg)) == NULL) - { - hwndOwner = GetDesktopWindow(); + if ((hwndOwner = GetParent(hwndDlg)) == NULL) { + hwndOwner = GetDesktopWindow(); } - GetWindowRect(hwndOwner, &rcOwner); - GetWindowRect(hwndDlg, &rcDlg); - CopyRect(&rc, &rcOwner); + GetWindowRect(hwndOwner, &rcOwner); + GetWindowRect(hwndDlg, &rcDlg); + CopyRect(&rc, &rcOwner); // Offset the owner and dialog box rectangles so that right and bottom // values represent the width and height, and then offset the owner again // to discard space taken up by the dialog box. - OffsetRect(&rcDlg, -rcDlg.left, -rcDlg.top); - OffsetRect(&rc, -rc.left, -rc.top); - OffsetRect(&rc, -rcDlg.right, -rcDlg.bottom); + OffsetRect(&rcDlg, -rcDlg.left, -rcDlg.top); + OffsetRect(&rc, -rc.left, -rc.top); + OffsetRect(&rc, -rcDlg.right, -rcDlg.bottom); // The new position is the sum of half the remaining space and the owner's // original position. - SetWindowPos(hwndDlg, - HWND_TOP, - rcOwner.left + (rc.right / 2), - rcOwner.top + (rc.bottom / 2), + SetWindowPos(hwndDlg, + HWND_TOP, + rcOwner.left + (rc.right / 2), + rcOwner.top + (rc.bottom / 2), 0, 0, // Ignores size arguments. - SWP_NOSIZE); + SWP_NOSIZE); // end center dialog - - + + return TRUE; } - case WM_COMMAND: - switch ( HIWORD( wParam )) { - case BN_CLICKED: + case WM_COMMAND: + switch (HIWORD(wParam)) { + case BN_CLICKED: ConnContext *context = (ConnContext *)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); - switch ( LOWORD( wParam )) { + switch (LOWORD(wParam)) { case IDOK: SMPInitUpdateDialog(context, true); - { + { int len = SendDlgItemMessage(hwndDlg, IDC_EDT_SMP_FIELD2, WM_GETTEXTLENGTH, 0, 0); - TCHAR *answer = new TCHAR[len+1]; - GetDlgItemText(hwndDlg, IDC_EDT_SMP_FIELD2, answer, len+1); + TCHAR *answer = new TCHAR[len + 1]; + GetDlgItemText(hwndDlg, IDC_EDT_SMP_FIELD2, answer, len + 1); T2Utf ans(answer); otr_continue_smp(context, (const unsigned char *)ans, mir_strlen(ans)); @@ -311,14 +312,14 @@ void SMPInitResponseDialog(ConnContext *context, const TCHAR *question) { INT_PTR CALLBACK DlgProcSMPInitProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { - switch ( msg ) { - case WM_INITDIALOG: + switch (msg) { + case WM_INITDIALOG: { if (!lParam) { DestroyWindow(hwndDlg); return FALSE; } - TranslateDialogDefault( hwndDlg ); + TranslateDialogDefault(hwndDlg); ConnContext *context = (ConnContext*)lParam; if (smp_for_contact.find(context->app_data) != smp_for_contact.end()) { @@ -326,7 +327,7 @@ INT_PTR CALLBACK DlgProcSMPInitProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARA return FALSE; } - MCONTACT hContact = (MCONTACT)context->app_data; + MCONTACT hContact = (UINT_PTR)context->app_data; TCHAR title[512], *proto = mir_a2t(GetContactProto(hContact)); mir_sntprintf(title, _countof(title), TranslateT(LANG_SMP_VERIFY_TITLE), contact_get_nameT(hContact), proto); mir_free(proto); @@ -337,32 +338,31 @@ INT_PTR CALLBACK DlgProcSMPInitProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARA // Move window to screen center // Get the owner window and dialog box rectangles. HWND hwndOwner; RECT rcOwner, rcDlg, rc; - if ((hwndOwner = GetParent(hwndDlg)) == NULL) - { - hwndOwner = GetDesktopWindow(); + if ((hwndOwner = GetParent(hwndDlg)) == NULL) { + hwndOwner = GetDesktopWindow(); } - GetWindowRect(hwndOwner, &rcOwner); - GetWindowRect(hwndDlg, &rcDlg); - CopyRect(&rc, &rcOwner); + GetWindowRect(hwndOwner, &rcOwner); + GetWindowRect(hwndDlg, &rcDlg); + CopyRect(&rc, &rcOwner); // Offset the owner and dialog box rectangles so that right and bottom // values represent the width and height, and then offset the owner again // to discard space taken up by the dialog box. - OffsetRect(&rcDlg, -rcDlg.left, -rcDlg.top); - OffsetRect(&rc, -rc.left, -rc.top); - OffsetRect(&rc, -rcDlg.right, -rcDlg.bottom); + OffsetRect(&rcDlg, -rcDlg.left, -rcDlg.top); + OffsetRect(&rc, -rc.left, -rc.top); + OffsetRect(&rc, -rcDlg.right, -rcDlg.bottom); // The new position is the sum of half the remaining space and the owner's // original position. - SetWindowPos(hwndDlg, - HWND_TOP, - rcOwner.left + (rc.right / 2), - rcOwner.top + (rc.bottom / 2), + SetWindowPos(hwndDlg, + HWND_TOP, + rcOwner.left + (rc.right / 2), + rcOwner.top + (rc.bottom / 2), 0, 0, // Ignores size arguments. - SWP_NOSIZE); + SWP_NOSIZE); // end center dialog @@ -374,7 +374,7 @@ INT_PTR CALLBACK DlgProcSMPInitProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARA SendMessage(cmb, CB_SELECTSTRING, -1, (WPARAM)TranslateT(LANG_SMPTYPE_QUESTION)); EnableWindow(GetDlgItem(hwndDlg, IDC_CBO_SMP_CHOOSE), TRUE); - + Fingerprint *fp = context->active_fingerprint; if (!fp) { DestroyWindow(hwndDlg); @@ -391,172 +391,179 @@ INT_PTR CALLBACK DlgProcSMPInitProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARA SetDlgItemText(hwndDlg, IDC_EDT_SMP_FIELD1, _T("")); SendDlgItemMessage(hwndDlg, IDC_EDT_SMP_FIELD1, EM_SETREADONLY, FALSE, 0); SetDlgItemText(hwndDlg, IDC_STC_SMP_FIELD1, TranslateT(LANG_SMP_QUESTION)); - + SetDlgItemText(hwndDlg, IDC_EDT_SMP_FIELD2, _T("")); SendDlgItemMessage(hwndDlg, IDC_EDT_SMP_FIELD2, EM_SETREADONLY, FALSE, 0); SetDlgItemText(hwndDlg, IDC_STC_SMP_FIELD2, TranslateT(LANG_SMP_ANSWER)); - + ShowWindow(GetDlgItem(hwndDlg, IDOK), SW_SHOWNA); ShowWindow(GetDlgItem(hwndDlg, IDYES), SW_HIDE); ShowWindow(GetDlgItem(hwndDlg, IDNO), SW_HIDE); SetFocus(GetDlgItem(hwndDlg, IDC_CBO_SMP_CHOOSE)); - + return FALSE; } - case WM_COMMAND: - switch ( HIWORD( wParam )) { - case BN_CLICKED: - { - ConnContext *context = (ConnContext*)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); - MCONTACT hContact = (MCONTACT)context->app_data; - TCHAR msg[1024]; - switch ( LOWORD( wParam )) { - case IDCANCEL: - DestroyWindow(hwndDlg); - break; - case IDOK: - GetDlgItemText(hwndDlg, IDC_CBO_SMP_CHOOSE, msg, 255); - if (_tcsncmp(msg, TranslateT(LANG_SMPTYPE_QUESTION), 255)==0) { - if (smp_for_contact.find(context->app_data) != smp_for_contact.end()) { - TCHAR msg[512]; - mir_sntprintf(msg, _countof(msg), TranslateT(LANG_SMP_IN_PROGRESS), contact_get_nameT(hContact)); - ShowError(msg); - }else { - int len = SendDlgItemMessage(hwndDlg, IDC_EDT_SMP_FIELD1, WM_GETTEXTLENGTH, 0, 0); - TCHAR *question = new TCHAR[len+1]; - GetDlgItemText(hwndDlg, IDC_EDT_SMP_FIELD1, question, len+1); - T2Utf quest(question); - delete question; - - len = SendDlgItemMessage(hwndDlg, IDC_EDT_SMP_FIELD2, WM_GETTEXTLENGTH, 0, 0); - TCHAR *answer = new TCHAR[len+1]; - GetDlgItemText(hwndDlg, IDC_EDT_SMP_FIELD2, answer, len+1); - T2Utf ans(answer); - delete answer; - - SMPInitUpdateDialog(context, false); - otr_start_smp(context, quest, (const unsigned char*)ans, mir_strlen(ans)); - } - - }else if (_tcsncmp(msg, TranslateT(LANG_SMPTYPE_PASSWORD), 255)==0) { - if (smp_for_contact.find(context->app_data) != smp_for_contact.end()) { - TCHAR msg[512]; - mir_sntprintf(msg, _countof(msg), TranslateT(LANG_SMP_IN_PROGRESS), contact_get_nameT(hContact)); - ShowError(msg); - }else { - int len = SendDlgItemMessage(hwndDlg, IDC_EDT_SMP_FIELD2, WM_GETTEXTLENGTH, 0, 0); - TCHAR *answer = new TCHAR[len+1]; - GetDlgItemText(hwndDlg, IDC_EDT_SMP_FIELD2, answer, len+1); - T2Utf ans(answer); - delete[] answer; - - SMPInitUpdateDialog(context, false); - otr_start_smp(context, NULL, (const unsigned char*)ans, mir_strlen(ans)); - } - - }else break; - DestroyWindow(hwndDlg); - break; - case IDYES: - VerifyFingerprint(context, true); - DestroyWindow(hwndDlg); - break; - case IDNO: - VerifyFingerprint(context, false); - DestroyWindow(hwndDlg); - break; + case WM_COMMAND: + switch (HIWORD(wParam)) { + case BN_CLICKED: + { + ConnContext *context = (ConnContext*)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); + MCONTACT hContact = (UINT_PTR)context->app_data; + TCHAR msg[1024]; + switch (LOWORD(wParam)) { + case IDCANCEL: + DestroyWindow(hwndDlg); + break; + case IDOK: + GetDlgItemText(hwndDlg, IDC_CBO_SMP_CHOOSE, msg, 255); + if (_tcsncmp(msg, TranslateT(LANG_SMPTYPE_QUESTION), 255) == 0) { + if (smp_for_contact.find(context->app_data) != smp_for_contact.end()) { + TCHAR msg[512]; + mir_sntprintf(msg, _countof(msg), TranslateT(LANG_SMP_IN_PROGRESS), contact_get_nameT(hContact)); + ShowError(msg); } + else { + int len = SendDlgItemMessage(hwndDlg, IDC_EDT_SMP_FIELD1, WM_GETTEXTLENGTH, 0, 0); + TCHAR *question = new TCHAR[len + 1]; + GetDlgItemText(hwndDlg, IDC_EDT_SMP_FIELD1, question, len + 1); + T2Utf quest(question); + delete question; + + len = SendDlgItemMessage(hwndDlg, IDC_EDT_SMP_FIELD2, WM_GETTEXTLENGTH, 0, 0); + TCHAR *answer = new TCHAR[len + 1]; + GetDlgItemText(hwndDlg, IDC_EDT_SMP_FIELD2, answer, len + 1); + T2Utf ans(answer); + delete answer; + + SMPInitUpdateDialog(context, false); + otr_start_smp(context, quest, (const unsigned char*)ans, mir_strlen(ans)); } - break; - case CBN_SELCHANGE: - switch ( LOWORD( wParam )) { - case IDC_CBO_SMP_CHOOSE: - { - ConnContext *context = (ConnContext*)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); - MCONTACT hContact = (MCONTACT)context->app_data; - Fingerprint *fp = context->active_fingerprint; - if (!fp) { - DestroyWindow(hwndDlg); - return TRUE; - } - BOOL trusted = false; - if (fp->trust && fp->trust[0] != '\0') trusted = true; - - TCHAR buff[512]; - GetDlgItemText(hwndDlg, IDC_CBO_SMP_CHOOSE, buff, 255); - if (_tcsncmp(buff, TranslateT(LANG_SMPTYPE_QUESTION), 255)==0) { - if (trusted) - mir_sntprintf(buff, TranslateT(LANG_OTR_SMPQUESTION_VERIFIED_DESC), contact_get_nameT(hContact)); - else - mir_sntprintf(buff, TranslateT(LANG_OTR_SMPQUESTION_VERIFY_DESC), contact_get_nameT(hContact)); - - SetDlgItemText(hwndDlg, IDC_STC_SMP_INFO, buff); - - SetDlgItemText(hwndDlg, IDC_EDT_SMP_FIELD1, _T("")); - SendDlgItemMessage(hwndDlg, IDC_EDT_SMP_FIELD1, EM_SETREADONLY, FALSE, 0); - SetDlgItemText(hwndDlg, IDC_STC_SMP_FIELD1, TranslateT(LANG_SMP_QUESTION)); - - SetDlgItemText(hwndDlg, IDC_EDT_SMP_FIELD2, _T("")); - SendDlgItemMessage(hwndDlg, IDC_EDT_SMP_FIELD2, EM_SETREADONLY, FALSE, 0); - SetDlgItemText(hwndDlg, IDC_STC_SMP_FIELD2, TranslateT(LANG_SMP_ANSWER)); - - - ShowWindow(GetDlgItem(hwndDlg, IDOK), SW_SHOWNA); - ShowWindow(GetDlgItem(hwndDlg, IDYES), SW_HIDE); - ShowWindow(GetDlgItem(hwndDlg, IDNO), SW_HIDE); - } else if (_tcsncmp(buff, TranslateT(LANG_SMPTYPE_PASSWORD), 255)==0) { - if (trusted) - mir_sntprintf(buff, TranslateT(LANG_OTR_SMPPASSWORD_VERIFIED_DESC), contact_get_nameT(hContact)); - else - mir_sntprintf(buff, TranslateT(LANG_OTR_SMPPASSWORD_VERIFY_DESC), contact_get_nameT(hContact)); - - SetDlgItemText(hwndDlg, IDC_STC_SMP_INFO, buff); - - SetDlgItemText(hwndDlg, IDC_EDT_SMP_FIELD1, _T("")); - SendDlgItemMessage(hwndDlg, IDC_EDT_SMP_FIELD1, EM_SETREADONLY, TRUE, 0); - SetDlgItemText(hwndDlg, IDC_STC_SMP_FIELD1, _T("")); - - SetDlgItemText(hwndDlg, IDC_EDT_SMP_FIELD2, _T("")); - SendDlgItemMessage(hwndDlg, IDC_EDT_SMP_FIELD2, EM_SETREADONLY, FALSE, 0); - SetDlgItemText(hwndDlg, IDC_STC_SMP_FIELD2, TranslateT(LANG_SMP_PASSWORD)); - - - ShowWindow(GetDlgItem(hwndDlg, IDOK), SW_SHOWNA); - ShowWindow(GetDlgItem(hwndDlg, IDYES), SW_HIDE); - ShowWindow(GetDlgItem(hwndDlg, IDNO), SW_HIDE); - } else if (_tcsncmp(buff, TranslateT(LANG_SMPTYPE_FINGERPRINT), 255)==0) { - if (trusted) - mir_sntprintf(buff, TranslateT(LANG_OTR_FPVERIFIED_DESC), contact_get_nameT(hContact)); - else - mir_sntprintf(buff, TranslateT(LANG_OTR_FPVERIFY_DESC), contact_get_nameT(hContact)); - - SetDlgItemText(hwndDlg, IDC_STC_SMP_INFO, buff); - - unsigned char hash[20]; - lib_cs_lock(); - if (!otrl_privkey_fingerprint_raw(otr_user_state, hash, context->accountname, context->protocol)) { - DestroyWindow(hwndDlg); - return FALSE; - } - otrl_privkey_hash_to_humanT(buff, hash); - SetDlgItemText(hwndDlg, IDC_EDT_SMP_FIELD1, buff); - SendDlgItemMessage(hwndDlg, IDC_EDT_SMP_FIELD1, EM_SETREADONLY, TRUE, 0); - SetDlgItemText(hwndDlg, IDC_STC_SMP_FIELD1, TranslateT(LANG_YOUR_PRIVKEY)); - - otrl_privkey_hash_to_humanT(buff, fp->fingerprint); - SetDlgItemText(hwndDlg, IDC_EDT_SMP_FIELD2, buff); - SendDlgItemMessage(hwndDlg, IDC_EDT_SMP_FIELD2, EM_SETREADONLY, TRUE, 0); - SetDlgItemText(hwndDlg, IDC_STC_SMP_FIELD2, TranslateT(LANG_CONTACT_FINGERPRINT)); - - ShowWindow(GetDlgItem(hwndDlg, IDOK), SW_HIDE); - ShowWindow(GetDlgItem(hwndDlg, IDYES), SW_SHOWNA); - ShowWindow(GetDlgItem(hwndDlg, IDNO), SW_SHOWNA); - - } - }break; + + } + else if (_tcsncmp(msg, TranslateT(LANG_SMPTYPE_PASSWORD), 255) == 0) { + if (smp_for_contact.find(context->app_data) != smp_for_contact.end()) { + TCHAR msg[512]; + mir_sntprintf(msg, _countof(msg), TranslateT(LANG_SMP_IN_PROGRESS), contact_get_nameT(hContact)); + ShowError(msg); + } + else { + int len = SendDlgItemMessage(hwndDlg, IDC_EDT_SMP_FIELD2, WM_GETTEXTLENGTH, 0, 0); + TCHAR *answer = new TCHAR[len + 1]; + GetDlgItemText(hwndDlg, IDC_EDT_SMP_FIELD2, answer, len + 1); + T2Utf ans(answer); + delete[] answer; + + SMPInitUpdateDialog(context, false); + otr_start_smp(context, NULL, (const unsigned char*)ans, mir_strlen(ans)); + } + + } + else break; + DestroyWindow(hwndDlg); + break; + case IDYES: + VerifyFingerprint(context, true); + DestroyWindow(hwndDlg); + break; + case IDNO: + VerifyFingerprint(context, false); + DestroyWindow(hwndDlg); + break; } + } + break; + + case CBN_SELCHANGE: + switch (LOWORD(wParam)) { + case IDC_CBO_SMP_CHOOSE: + { + ConnContext *context = (ConnContext*)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); + MCONTACT hContact = (UINT_PTR)context->app_data; + Fingerprint *fp = context->active_fingerprint; + if (!fp) { + DestroyWindow(hwndDlg); + return TRUE; + } + BOOL trusted = false; + if (fp->trust && fp->trust[0] != '\0') trusted = true; + + TCHAR buff[512]; + GetDlgItemText(hwndDlg, IDC_CBO_SMP_CHOOSE, buff, 255); + if (_tcsncmp(buff, TranslateT(LANG_SMPTYPE_QUESTION), 255) == 0) { + if (trusted) + mir_sntprintf(buff, TranslateT(LANG_OTR_SMPQUESTION_VERIFIED_DESC), contact_get_nameT(hContact)); + else + mir_sntprintf(buff, TranslateT(LANG_OTR_SMPQUESTION_VERIFY_DESC), contact_get_nameT(hContact)); + + SetDlgItemText(hwndDlg, IDC_STC_SMP_INFO, buff); + + SetDlgItemText(hwndDlg, IDC_EDT_SMP_FIELD1, _T("")); + SendDlgItemMessage(hwndDlg, IDC_EDT_SMP_FIELD1, EM_SETREADONLY, FALSE, 0); + SetDlgItemText(hwndDlg, IDC_STC_SMP_FIELD1, TranslateT(LANG_SMP_QUESTION)); + + SetDlgItemText(hwndDlg, IDC_EDT_SMP_FIELD2, _T("")); + SendDlgItemMessage(hwndDlg, IDC_EDT_SMP_FIELD2, EM_SETREADONLY, FALSE, 0); + SetDlgItemText(hwndDlg, IDC_STC_SMP_FIELD2, TranslateT(LANG_SMP_ANSWER)); + + + ShowWindow(GetDlgItem(hwndDlg, IDOK), SW_SHOWNA); + ShowWindow(GetDlgItem(hwndDlg, IDYES), SW_HIDE); + ShowWindow(GetDlgItem(hwndDlg, IDNO), SW_HIDE); + } + else if (_tcsncmp(buff, TranslateT(LANG_SMPTYPE_PASSWORD), 255) == 0) { + if (trusted) + mir_sntprintf(buff, TranslateT(LANG_OTR_SMPPASSWORD_VERIFIED_DESC), contact_get_nameT(hContact)); + else + mir_sntprintf(buff, TranslateT(LANG_OTR_SMPPASSWORD_VERIFY_DESC), contact_get_nameT(hContact)); + + SetDlgItemText(hwndDlg, IDC_STC_SMP_INFO, buff); + + SetDlgItemText(hwndDlg, IDC_EDT_SMP_FIELD1, _T("")); + SendDlgItemMessage(hwndDlg, IDC_EDT_SMP_FIELD1, EM_SETREADONLY, TRUE, 0); + SetDlgItemText(hwndDlg, IDC_STC_SMP_FIELD1, _T("")); + + SetDlgItemText(hwndDlg, IDC_EDT_SMP_FIELD2, _T("")); + SendDlgItemMessage(hwndDlg, IDC_EDT_SMP_FIELD2, EM_SETREADONLY, FALSE, 0); + SetDlgItemText(hwndDlg, IDC_STC_SMP_FIELD2, TranslateT(LANG_SMP_PASSWORD)); + + + ShowWindow(GetDlgItem(hwndDlg, IDOK), SW_SHOWNA); + ShowWindow(GetDlgItem(hwndDlg, IDYES), SW_HIDE); + ShowWindow(GetDlgItem(hwndDlg, IDNO), SW_HIDE); + } + else if (_tcsncmp(buff, TranslateT(LANG_SMPTYPE_FINGERPRINT), 255) == 0) { + if (trusted) + mir_sntprintf(buff, TranslateT(LANG_OTR_FPVERIFIED_DESC), contact_get_nameT(hContact)); + else + mir_sntprintf(buff, TranslateT(LANG_OTR_FPVERIFY_DESC), contact_get_nameT(hContact)); + + SetDlgItemText(hwndDlg, IDC_STC_SMP_INFO, buff); + + unsigned char hash[20]; + lib_cs_lock(); + if (!otrl_privkey_fingerprint_raw(otr_user_state, hash, context->accountname, context->protocol)) { + DestroyWindow(hwndDlg); + return FALSE; + } + otrl_privkey_hash_to_humanT(buff, hash); + SetDlgItemText(hwndDlg, IDC_EDT_SMP_FIELD1, buff); + SendDlgItemMessage(hwndDlg, IDC_EDT_SMP_FIELD1, EM_SETREADONLY, TRUE, 0); + SetDlgItemText(hwndDlg, IDC_STC_SMP_FIELD1, TranslateT(LANG_YOUR_PRIVKEY)); + + otrl_privkey_hash_to_humanT(buff, fp->fingerprint); + SetDlgItemText(hwndDlg, IDC_EDT_SMP_FIELD2, buff); + SendDlgItemMessage(hwndDlg, IDC_EDT_SMP_FIELD2, EM_SETREADONLY, TRUE, 0); + SetDlgItemText(hwndDlg, IDC_STC_SMP_FIELD2, TranslateT(LANG_CONTACT_FINGERPRINT)); + + ShowWindow(GetDlgItem(hwndDlg, IDOK), SW_HIDE); + ShowWindow(GetDlgItem(hwndDlg, IDYES), SW_SHOWNA); + ShowWindow(GetDlgItem(hwndDlg, IDNO), SW_SHOWNA); + + } + }break; + } } break; @@ -564,19 +571,21 @@ INT_PTR CALLBACK DlgProcSMPInitProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARA return FALSE; } -void SMPInitDialog(ConnContext *context) { +void SMPInitDialog(ConnContext *context) +{ if (context) - CreateDialogParam(hInst, MAKEINTRESOURCE(IDD_SMP_INPUT), 0, DlgProcSMPInitProc, (LPARAM) context); + CreateDialogParam(hInst, MAKEINTRESOURCE(IDD_SMP_INPUT), 0, DlgProcSMPInitProc, (LPARAM)context); } -void SMPDialogUpdate(ConnContext *context, int percent) { +void SMPDialogUpdate(ConnContext *context, int percent) +{ if (!context) return; SmpForContactMap::iterator it = smp_for_contact.find(context->app_data); if (it == smp_for_contact.end()) return; if (it->second.dialog) PostMessage(it->second.dialog, WMU_REFRESHSMP, percent, 0); TrustLevel level = otr_context_get_trust(context); if (!it->second.responder && it->second.oldlevel != level) { - if (level == TRUST_PRIVATE) + if (level == TRUST_PRIVATE) VerifyFingerprintMessage(context, true); else if (level == TRUST_UNVERIFIED) VerifyFingerprintMessage(context, false); @@ -597,13 +606,14 @@ void SMPDialogUpdate(ConnContext *context, int percent) { } */ } -void SMPDialogReply(ConnContext *context, const char* question){ +void SMPDialogReply(ConnContext *context, const char* question) +{ SmpData *data = (SmpData*)mir_calloc(sizeof(SmpData)); data->context = context; data->oldlevel = TRUST_NOT_PRIVATE; data->responder = true; data->question = (question) ? mir_utf8decodeT(question) : NULL; - CreateDialogParam(hInst, MAKEINTRESOURCE(IDD_SMP_INPUT), 0, DlgSMPResponseProc, (LPARAM) data); + CreateDialogParam(hInst, MAKEINTRESOURCE(IDD_SMP_INPUT), 0, DlgSMPResponseProc, (LPARAM)data); /* ShowError(_T("SMP requires user password (NOT IMPL YET)")); otr_abort_smp(context); @@ -612,15 +622,16 @@ void SMPDialogReply(ConnContext *context, const char* question){ } unsigned int CALLBACK verify_context_thread(void *param); -void VerifyContextDialog(ConnContext* context) { +void VerifyContextDialog(ConnContext* context) +{ if (!context) return; CloseHandle((HANDLE)_beginthreadex(0, 0, verify_context_thread, context, 0, 0)); } INT_PTR CALLBACK DlgBoxProcVerifyContext(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { - switch ( msg ) { - case WM_INITDIALOG: + switch (msg) { + case WM_INITDIALOG: { if (!lParam) { EndDialog(hwndDlg, IDCANCEL); @@ -628,43 +639,42 @@ INT_PTR CALLBACK DlgBoxProcVerifyContext(HWND hwndDlg, UINT msg, WPARAM wParam, } SetWindowText(hwndDlg, _T(LANG_OTR_FPVERIFY_TITLE)); SetDlgItemText(hwndDlg, IDC_STC_SMP_HEAD, _T(LANG_OTR_FPVERIFY_TITLE)); - TranslateDialogDefault( hwndDlg ); + TranslateDialogDefault(hwndDlg); SetWindowLongPtr(hwndDlg, GWLP_USERDATA, lParam); // Move window to screen center // Get the owner window and dialog box rectangles. HWND hwndOwner; RECT rcOwner, rcDlg, rc; - if ((hwndOwner = GetParent(hwndDlg)) == NULL) - { - hwndOwner = GetDesktopWindow(); + if ((hwndOwner = GetParent(hwndDlg)) == NULL) { + hwndOwner = GetDesktopWindow(); } - GetWindowRect(hwndOwner, &rcOwner); - GetWindowRect(hwndDlg, &rcDlg); - CopyRect(&rc, &rcOwner); + GetWindowRect(hwndOwner, &rcOwner); + GetWindowRect(hwndDlg, &rcDlg); + CopyRect(&rc, &rcOwner); // Offset the owner and dialog box rectangles so that right and bottom // values represent the width and height, and then offset the owner again // to discard space taken up by the dialog box. - OffsetRect(&rcDlg, -rcDlg.left, -rcDlg.top); - OffsetRect(&rc, -rc.left, -rc.top); - OffsetRect(&rc, -rcDlg.right, -rcDlg.bottom); + OffsetRect(&rcDlg, -rcDlg.left, -rcDlg.top); + OffsetRect(&rc, -rc.left, -rc.top); + OffsetRect(&rc, -rcDlg.right, -rcDlg.bottom); // The new position is the sum of half the remaining space and the owner's // original position. - SetWindowPos(hwndDlg, - HWND_TOP, - rcOwner.left + (rc.right / 2), - rcOwner.top + (rc.bottom / 2), + SetWindowPos(hwndDlg, + HWND_TOP, + rcOwner.left + (rc.right / 2), + rcOwner.top + (rc.bottom / 2), 0, 0, // Ignores size arguments. - SWP_NOSIZE); + SWP_NOSIZE); // end center dialog ConnContext *context = (ConnContext*)lParam; - MCONTACT hContact = (MCONTACT) context->app_data; + MCONTACT hContact = (UINT_PTR)context->app_data; Fingerprint *fp = context->active_fingerprint; if (!fp) { EndDialog(hwndDlg, IDCANCEL); @@ -688,7 +698,7 @@ INT_PTR CALLBACK DlgBoxProcVerifyContext(HWND hwndDlg, UINT msg, WPARAM wParam, SetDlgItemText(hwndDlg, IDC_EDT_SMP_FIELD1, buff); SendDlgItemMessage(hwndDlg, IDC_EDT_SMP_FIELD1, EM_SETREADONLY, TRUE, 0); SetDlgItemText(hwndDlg, IDC_STC_SMP_FIELD1, TranslateT(LANG_YOUR_PRIVKEY)); - + otrl_privkey_hash_to_humanT(buff, fp->fingerprint); SetDlgItemText(hwndDlg, IDC_EDT_SMP_FIELD2, buff); SendDlgItemMessage(hwndDlg, IDC_EDT_SMP_FIELD2, EM_SETREADONLY, TRUE, 0); @@ -700,21 +710,20 @@ INT_PTR CALLBACK DlgBoxProcVerifyContext(HWND hwndDlg, UINT msg, WPARAM wParam, ShowWindow(GetDlgItem(hwndDlg, IDYES), SW_SHOWNA); ShowWindow(GetDlgItem(hwndDlg, IDNO), SW_SHOWNA); SetFocus(GetDlgItem(hwndDlg, IDCANCEL)); - - return FALSE; } + return FALSE; - case WM_COMMAND: - switch ( HIWORD( wParam )) { - case BN_CLICKED: - switch ( LOWORD( wParam )) { - case IDYES: - case IDNO: - case IDCANCEL: - case IDOK: - EndDialog(hwndDlg, LOWORD( wParam )); - break; - } + case WM_COMMAND: + switch (HIWORD(wParam)) { + case BN_CLICKED: + switch (LOWORD(wParam)) { + case IDYES: + case IDNO: + case IDCANCEL: + case IDOK: + EndDialog(hwndDlg, LOWORD(wParam)); + break; + } } break; @@ -725,33 +734,34 @@ INT_PTR CALLBACK DlgBoxProcVerifyContext(HWND hwndDlg, UINT msg, WPARAM wParam, unsigned int CALLBACK verify_context_thread(void *param) { - Thread_Push( 0 ); + Thread_Push(0); if (param) { ConnContext *context = (ConnContext *)param; - MCONTACT hContact = (MCONTACT)context->app_data; + MCONTACT hContact = (UINT_PTR)context->app_data; TCHAR msg[1024]; - switch ( DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_SMP_INPUT), 0, DlgBoxProcVerifyContext, (LPARAM)param) ) { - case IDOK: - case IDYES: - lib_cs_lock(); - otrl_context_set_trust(context->active_fingerprint, "verified"); - otrl_privkey_write_fingerprints(otr_user_state, _T2A(g_fingerprint_store_filename)); - mir_sntprintf(msg, _countof(msg), TranslateT(LANG_FINGERPRINT_VERIFIED), contact_get_nameT(hContact)); - ShowMessage(hContact, msg); - SetEncryptionStatus(hContact, otr_context_get_trust(context)); - break; - case IDNO: - lib_cs_lock(); - otrl_context_set_trust(context->active_fingerprint, NULL); - otrl_privkey_write_fingerprints(otr_user_state, _T2A(g_fingerprint_store_filename)); - mir_sntprintf(msg, _countof(msg), TranslateT(LANG_FINGERPRINT_NOT_VERIFIED), contact_get_nameT(hContact)); - ShowMessage(hContact, msg); - SetEncryptionStatus(hContact, otr_context_get_trust(context)); - break; + switch (DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_SMP_INPUT), 0, DlgBoxProcVerifyContext, (LPARAM)param)) { + case IDOK: + case IDYES: + lib_cs_lock(); + otrl_context_set_trust(context->active_fingerprint, "verified"); + otrl_privkey_write_fingerprints(otr_user_state, _T2A(g_fingerprint_store_filename)); + mir_sntprintf(msg, _countof(msg), TranslateT(LANG_FINGERPRINT_VERIFIED), contact_get_nameT(hContact)); + ShowMessage(hContact, msg); + SetEncryptionStatus(hContact, otr_context_get_trust(context)); + break; + + case IDNO: + lib_cs_lock(); + otrl_context_set_trust(context->active_fingerprint, NULL); + otrl_privkey_write_fingerprints(otr_user_state, _T2A(g_fingerprint_store_filename)); + mir_sntprintf(msg, _countof(msg), TranslateT(LANG_FINGERPRINT_NOT_VERIFIED), contact_get_nameT(hContact)); + ShowMessage(hContact, msg); + SetEncryptionStatus(hContact, otr_context_get_trust(context)); + break; } } Thread_Pop(); - return 0; + return 0; } |