int __cdecl onContactSettingChanged(WPARAM wParam,LPARAM lParam) { HANDLE hContact = (HANDLE)wParam; DBCONTACTWRITESETTING *cws=(DBCONTACTWRITESETTING*)lParam; if (!hContact || strcmp(cws->szSetting,"Status")) return 0; pUinKey ptr = getUinKey(hContact); int stat = getContactStatus(hContact); if (!ptr || stat == -1) return 0; if (stat == ID_STATUS_OFFLINE) { // go offline if (ptr->mode == MODE_NATIVE && cpp_keyx(ptr->cntx)) { // have active context cpp_delete_context(ptr->cntx); ptr->cntx=0; // reset context showPopupDC(hContact); // show popup "Disabled" ShowStatusIconNotify(hContact); // change icon in CL } else if (ptr->mode == MODE_RSAAES && exp->rsa_get_state(ptr->cntx) == 7) { deleteRSAcntx(ptr); showPopupDC(hContact); // show popup "Disabled" ShowStatusIconNotify(hContact); // change icon in CL } } else { // go not offline if (ptr->offlineKey) { cpp_reset_context(ptr->cntx); ptr->offlineKey = false; } ShowStatusIconNotify(hContact); // change icon in CL } return 0; }
void __cdecl rsa_notify(HANDLE context, int state) { pUinKey ptr = getUinCtx(context); if (!ptr) return; LPCSTR msg = NULL; Sent_NetLog("rsa_notify: 0x%x", state); switch (state) { case 1: showPopupEC(ptr->hContact); ShowStatusIconNotify(ptr->hContact); waitForExchange(ptr, 2); // досылаем сообщения из очереди return; case -1: // сессия разорвана по ошибке, неверный тип сообщения msg = sim501; break; case -2: // сессия разорвана по ошибке другой стороной msg = sim502; break; case -5: // ошибка декодирования AES сообщения msg = sim505; break; case -6: // ошибка декодирования RSA сообщения msg = sim506; break; case -7: // таймаут установки соединения (10 секунд) msg = sim507; break; case -8: // сессия разорвана по причине "disabled" msg = sim508; break; case -0x10: // сессия разорвана по ошибке case -0x21: case -0x22: case -0x23: case -0x24: case -0x32: case -0x33: case -0x34: case -0x40: case -0x50: case -0x60: { char buf[1024]; mir_snprintf(buf, sim510, -state); showPopupDCmsg(ptr->hContact, buf); ShowStatusIconNotify(ptr->hContact); if (ptr->cntx) deleteRSAcntx(ptr); waitForExchange(ptr, 3); // досылаем нешифровано } return; case -3: // соединение разорвано вручную case -4: // соединение разорвано вручную другой стороной showPopupDC(ptr->hContact); ShowStatusIconNotify(ptr->hContact); if (ptr->cntx) deleteRSAcntx(ptr); waitForExchange(ptr, 3); // досылаем нешифровано return; default: return; } showPopupDCmsg(ptr->hContact, msg); ShowStatusIconNotify(ptr->hContact); if (ptr->cntx) deleteRSAcntx(ptr); waitForExchange(ptr, 3); // досылаем нешифровано }