static INT_PTR CALLBACK PersonalDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { const unsigned long iPageId = 0; CJabberProto *ppro = (CJabberProto*)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); switch (msg) { case WM_INITDIALOG: if (lParam) { ppro = (CJabberProto*)lParam; TranslateDialogDefault(hwndDlg); SendDlgItemMessage(hwndDlg, IDC_GENDER, CB_ADDSTRING, 0, (LPARAM)TranslateT("Male")); SendDlgItemMessage(hwndDlg, IDC_GENDER, CB_ADDSTRING, 0, (LPARAM)TranslateT("Female")); SetWindowLongPtr(hwndDlg, GWLP_USERDATA, lParam); SendMessage(hwndDlg, WM_JABBER_REFRESH_VCARD, 0, 0); ppro->WindowSubscribe(hwndDlg); } break; case WM_JABBER_REFRESH_VCARD: SetDialogField(ppro, hwndDlg, IDC_FULLNAME, "FullName"); SetDialogField(ppro, hwndDlg, IDC_NICKNAME, "Nick"); SetDialogField(ppro, hwndDlg, IDC_FIRSTNAME, "FirstName"); SetDialogField(ppro, hwndDlg, IDC_MIDDLE, "MiddleName"); SetDialogField(ppro, hwndDlg, IDC_LASTNAME, "LastName"); SetDialogField(ppro, hwndDlg, IDC_BIRTH, "BirthDate"); SetDialogField(ppro, hwndDlg, IDC_GENDER, "GenderString", true); SetDialogField(ppro, hwndDlg, IDC_OCCUPATION, "Role"); SetDialogField(ppro, hwndDlg, IDC_HOMEPAGE, "Homepage"); break; case WM_COMMAND: if (((HWND)lParam == GetFocus() && HIWORD(wParam) == EN_CHANGE) || ((HWND)lParam == GetDlgItem(hwndDlg, IDC_GENDER) && (HIWORD(wParam) == CBN_EDITCHANGE || HIWORD(wParam) == CBN_SELCHANGE))) { ppro->m_vCardUpdates |= (1UL << iPageId); SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); } break; case WM_NOTIFY: if (((LPNMHDR)lParam)->idFrom == 0) { switch (((LPNMHDR)lParam)->code) { case PSN_PARAMCHANGED: SendMessage(hwndDlg, WM_INITDIALOG, 0, ((PSHNOTIFY*)lParam)->lParam); break; case PSN_APPLY: ppro->m_vCardUpdates &= ~(1UL << iPageId); ppro->SaveVcardToDB(hwndDlg, iPageId); if (!ppro->m_vCardUpdates) ppro->SetServerVcard(ppro->m_bPhotoChanged, ppro->m_szPhotoFileName); break; } } break; case WM_DESTROY: ppro->WindowUnsubscribe(hwndDlg); break; } return FALSE; }
BOOL loadRecent(int iRecent) { DBVARIANT dbv; char setting[MAXMODULELABELLENGTH]; cleanup(); mir_snprintf(setting, sizeof(setting), "rcMuc_%d_server", iRecent); if ( !ppro->JGetStringT( NULL, setting, &dbv )) { server = mir_tstrdup( dbv.ptszVal ); JFreeVariant( &dbv ); } mir_snprintf(setting, sizeof(setting), "rcMuc_%d_room", iRecent); if ( !ppro->JGetStringT( NULL, setting, &dbv )) { room = mir_tstrdup(dbv.ptszVal); JFreeVariant( &dbv ); } mir_snprintf(setting, sizeof(setting), "rcMuc_%d_nick", iRecent); if ( !ppro->JGetStringT( NULL, setting, &dbv )) { nick = mir_tstrdup(dbv.ptszVal); JFreeVariant( &dbv ); } mir_snprintf(setting, sizeof(setting), "rcMuc_%d_passwordW", iRecent); password = ppro->JGetStringCrypt(NULL, setting); return room || server || nick || password; }
void saveRecent(int iRecent) { char setting[MAXMODULELABELLENGTH]; mir_snprintf(setting, "rcMuc_%d_server", iRecent); if (m_server) ppro->setTString(setting, m_server); else ppro->delSetting(setting); mir_snprintf(setting, "rcMuc_%d_room", iRecent); if (m_room) ppro->setTString(setting, m_room); else ppro->delSetting(setting); mir_snprintf(setting, "rcMuc_%d_nick", iRecent); if (m_nick) ppro->setTString(setting, m_nick); else ppro->delSetting(setting); mir_snprintf(setting, "password_rcMuc_%d", iRecent); if (m_password) ppro->setTString(setting, m_password); else ppro->delSetting(setting); }
void saveRecent(int iRecent) { char setting[MAXMODULELABELLENGTH]; mir_snprintf(setting, sizeof(setting), "rcMuc_%d_server", iRecent); if (server) ppro->JSetStringT(NULL, setting, server); else ppro->JDeleteSetting(NULL, setting); mir_snprintf(setting, sizeof(setting), "rcMuc_%d_room", iRecent); if (room) ppro->JSetStringT(NULL, setting, room); else ppro->JDeleteSetting(NULL, setting); mir_snprintf(setting, sizeof(setting), "rcMuc_%d_nick", iRecent); if (nick) ppro->JSetStringT(NULL, setting, nick); else ppro->JDeleteSetting(NULL, setting); mir_snprintf(setting, sizeof(setting), "rcMuc_%d_passwordW", iRecent); if (password) ppro->JSetStringCrypt(NULL, setting, password); else ppro->JDeleteSetting(NULL, setting); }
static INT_PTR CALLBACK NoteDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { const unsigned long iPageId = 4; CJabberProto *ppro = (CJabberProto*)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); switch (msg) { case WM_INITDIALOG: if (!lParam) break; // Launched from userinfo ppro = (CJabberProto*)lParam; TranslateDialogDefault(hwndDlg); SetWindowLongPtr(hwndDlg, GWLP_USERDATA, lParam); SendMessage(hwndDlg, WM_JABBER_REFRESH_VCARD, 0, 0); ppro->WindowSubscribe(hwndDlg); break; case WM_JABBER_REFRESH_VCARD: SetDialogField(ppro, hwndDlg, IDC_DESC, "About"); break; case WM_COMMAND: if ((HWND)lParam == GetFocus() && HIWORD(wParam) == EN_CHANGE) { ppro->m_vCardUpdates |= (1UL << iPageId); SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); } break; case WM_NOTIFY: if (((LPNMHDR)lParam)->idFrom == 0) { switch (((LPNMHDR)lParam)->code) { case PSN_PARAMCHANGED: SendMessage(hwndDlg, WM_INITDIALOG, 0, ((PSHNOTIFY*)lParam)->lParam); break; case PSN_APPLY: ppro->m_vCardUpdates &= ~(1UL<<iPageId); ppro->SaveVcardToDB(hwndDlg, iPageId); if (!ppro->m_vCardUpdates) ppro->SetServerVcard(ppro->m_bPhotoChanged, ppro->m_szPhotoFileName); break; } } break; case WM_DESTROY: ppro->WindowUnsubscribe(hwndDlg); break; } return FALSE; }
BOOL loadRecent(int iRecent) { char setting[MAXMODULELABELLENGTH]; mir_snprintf(setting, "rcMuc_%d_server", iRecent); m_server = ppro->getTStringA(setting); mir_snprintf(setting, "rcMuc_%d_room", iRecent); m_room = ppro->getTStringA(setting); mir_snprintf(setting, "rcMuc_%d_nick", iRecent); m_nick = ppro->getTStringA(setting); mir_snprintf(setting, "password_rcMuc_%d", iRecent); m_password = ppro->getTStringA(NULL, setting); return m_room || m_server || m_nick || m_password; }
static int JabberPrebuildContactMenu(WPARAM wParam, LPARAM lParam) { Menu_ShowItem(g_hMenuRequestAuth, FALSE); Menu_ShowItem(g_hMenuGrantAuth, FALSE); Menu_ShowItem(g_hMenuRevokeAuth, FALSE); Menu_ShowItem(g_hMenuCommands, FALSE); Menu_ShowItem(g_hMenuSendNote, FALSE); Menu_ShowItem(g_hMenuConvert, FALSE); Menu_ShowItem(g_hMenuRosterAdd, FALSE); Menu_ShowItem(g_hMenuLogin, FALSE); Menu_ShowItem(g_hMenuRefresh, FALSE); Menu_ShowItem(g_hMenuAddBookmark, FALSE); Menu_ShowItem(g_hMenuResourcesRoot, FALSE); Menu_ShowItem(g_hMenuDirectPresence[0], FALSE); CJabberProto *ppro = JabberGetInstanceByHContact(wParam); return(ppro) ? ppro->OnPrebuildContactMenu(wParam, lParam) : 0; }
void JabberByteSendConnection( HANDLE hConn, DWORD /*dwRemoteIP*/, void* extra ) { CJabberProto* ppro = ( CJabberProto* )extra; TCHAR szPort[8]; JABBER_BYTE_TRANSFER *jbt; int recvResult, bytesParsed; HANDLE hListen; JABBER_LIST_ITEM *item; char* buffer; int datalen; NETLIBCONNINFO connInfo = { sizeof(connInfo) }; CallService(MS_NETLIB_GETCONNECTIONINFO, (WPARAM)hConn, (LPARAM)&connInfo); mir_sntprintf( szPort, SIZEOF( szPort ), _T("%u"), connInfo.wPort ); ppro->Log( "bytestream_send_connection incoming connection accepted: %s", connInfo.szIpPort ); if (( item = ppro->ListGetItemPtr( LIST_BYTE, szPort )) == NULL ) { ppro->Log( "No bytestream session is currently active, connection closed." ); Netlib_CloseHandle( hConn ); return; } jbt = item->jbt; if (( buffer = ( char* )mir_alloc( JABBER_NETWORK_BUFFER_SIZE )) == NULL ) { ppro->Log( "bytestream_send cannot allocate network buffer, connection closed." ); jbt->state = JBT_ERROR; Netlib_CloseHandle( hConn ); if ( jbt->hEvent != NULL ) SetEvent( jbt->hEvent ); return; } hListen = jbt->hConn; jbt->hConn = hConn; jbt->state = JBT_INIT; datalen = 0; while ( jbt->state!=JBT_DONE && jbt->state!=JBT_ERROR ) { recvResult = Netlib_Recv( hConn, buffer+datalen, JABBER_NETWORK_BUFFER_SIZE-datalen, 0 ); if ( recvResult <= 0 ) break; datalen += recvResult; bytesParsed = ppro->ByteSendParse( hConn, jbt, buffer, datalen ); if ( bytesParsed < datalen ) memmove( buffer, buffer+bytesParsed, datalen-bytesParsed ); datalen -= bytesParsed; } if ( jbt->hConn ) Netlib_CloseHandle( jbt->hConn ); ppro->Log( "bytestream_send_connection closing connection" ); jbt->hConn = hListen; mir_free( buffer ); if ( jbt->hEvent != NULL ) SetEvent( jbt->hEvent ); }
static INT_PTR JabberMenuHandleGrantAuth(WPARAM wParam, LPARAM lParam) { CJabberProto *ppro = JabberGetInstanceByHContact(wParam); return(ppro) ? ppro->OnMenuHandleGrantAuth(wParam, lParam) : 0; }
void JabberByteSendConnection( HANDLE hConn, DWORD /*dwRemoteIP*/, void* extra ) { CJabberProto* ppro = ( CJabberProto* )extra; SOCKET s; SOCKADDR_IN saddr; int len; WORD localPort; TCHAR szPort[8]; JABBER_BYTE_TRANSFER *jbt; int recvResult, bytesParsed; HANDLE hListen; JABBER_LIST_ITEM *item; char* buffer; int datalen; localPort = 0; if (( s = JCallService( MS_NETLIB_GETSOCKET, ( WPARAM ) hConn, 0 )) != INVALID_SOCKET ) { len = sizeof( saddr ); if ( getsockname( s, ( SOCKADDR * ) &saddr, &len ) != SOCKET_ERROR ) localPort = ntohs( saddr.sin_port ); } if ( localPort == 0 ) { ppro->Log( "bytestream_send_connection unable to determine the local port, connection closed." ); Netlib_CloseHandle( hConn ); return; } mir_sntprintf( szPort, SIZEOF( szPort ), _T("%d"), localPort ); ppro->Log( "bytestream_send_connection incoming connection accepted: local_port=" TCHAR_STR_PARAM, szPort ); if (( item = ppro->ListGetItemPtr( LIST_BYTE, szPort )) == NULL ) { ppro->Log( "No bytestream session is currently active, connection closed." ); Netlib_CloseHandle( hConn ); return; } jbt = item->jbt; if (( buffer = ( char* )mir_alloc( JABBER_NETWORK_BUFFER_SIZE )) == NULL ) { ppro->Log( "bytestream_send cannot allocate network buffer, connection closed." ); jbt->state = JBT_ERROR; Netlib_CloseHandle( hConn ); if ( jbt->hEvent != NULL ) SetEvent( jbt->hEvent ); return; } hListen = jbt->hConn; jbt->hConn = hConn; jbt->state = JBT_INIT; datalen = 0; while ( jbt->state!=JBT_DONE && jbt->state!=JBT_ERROR ) { recvResult = Netlib_Recv( hConn, buffer+datalen, JABBER_NETWORK_BUFFER_SIZE-datalen, 0 ); if ( recvResult <= 0 ) break; datalen += recvResult; bytesParsed = ppro->ByteSendParse( hConn, jbt, buffer, datalen ); if ( bytesParsed < datalen ) memmove( buffer, buffer+bytesParsed, datalen-bytesParsed ); datalen -= bytesParsed; } if ( jbt->hConn ) Netlib_CloseHandle( jbt->hConn ); ppro->Log( "bytestream_send_connection closing connection" ); jbt->hConn = hListen; mir_free( buffer ); if ( jbt->hEvent != NULL ) SetEvent( jbt->hEvent ); }
static INT_PTR CALLBACK ContactDlgProc(HWND hwndDlg, UINT msg, WPARAM, LPARAM lParam) { const unsigned long iPageId = 5; CJabberProto *ppro = (CJabberProto*)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); switch (msg) { case WM_INITDIALOG: if (!lParam) break; // Launched from userinfo ppro = (CJabberProto*)lParam; { LVCOLUMN lvc; RECT rc; SetWindowLongPtr(hwndDlg, GWLP_USERDATA, lParam); TranslateDialogDefault(hwndDlg); GetClientRect(GetDlgItem(hwndDlg, IDC_EMAILS), &rc); rc.right -= GetSystemMetrics(SM_CXVSCROLL); lvc.mask = LVCF_WIDTH; lvc.cx = 30; ListView_InsertColumn(GetDlgItem(hwndDlg, IDC_EMAILS), 0, &lvc); ListView_InsertColumn(GetDlgItem(hwndDlg, IDC_PHONES), 0, &lvc); lvc.cx = rc.right - 30 - 40; ListView_InsertColumn(GetDlgItem(hwndDlg, IDC_EMAILS), 1, &lvc); ListView_InsertColumn(GetDlgItem(hwndDlg, IDC_PHONES), 1, &lvc); lvc.cx = 20; ListView_InsertColumn(GetDlgItem(hwndDlg, IDC_EMAILS), 2, &lvc); ListView_InsertColumn(GetDlgItem(hwndDlg, IDC_EMAILS), 3, &lvc); ListView_InsertColumn(GetDlgItem(hwndDlg, IDC_PHONES), 2, &lvc); ListView_InsertColumn(GetDlgItem(hwndDlg, IDC_PHONES), 3, &lvc); SendMessage(hwndDlg, M_REMAKELISTS, 0, 0); ppro->WindowSubscribe(hwndDlg); } break; case M_REMAKELISTS: { int i; char idstr[33]; TCHAR number[20]; //e-mails ListView_DeleteAllItems(GetDlgItem(hwndDlg, IDC_EMAILS)); LVITEM lvi; lvi.mask = LVIF_TEXT | LVIF_PARAM; lvi.iSubItem = 0; lvi.iItem = 0; for (i=0;;i++) { mir_snprintf(idstr, "e-mail%d", i); ptrT email( ppro->getTStringA(idstr)); if (email == NULL) break; mir_sntprintf(number, _T("%d"), i+1); lvi.pszText = number; lvi.lParam = (LPARAM)i; ListView_InsertItem(GetDlgItem(hwndDlg, IDC_EMAILS), &lvi); ListView_SetItemText(GetDlgItem(hwndDlg, IDC_EMAILS), lvi.iItem, 1, email); lvi.iItem++; } lvi.mask = LVIF_PARAM; lvi.lParam = -1; ListView_InsertItem(GetDlgItem(hwndDlg, IDC_EMAILS), &lvi); //phones ListView_DeleteAllItems(GetDlgItem(hwndDlg, IDC_PHONES)); lvi.mask = LVIF_TEXT | LVIF_PARAM; lvi.iSubItem = 0; lvi.iItem = 0; for (i=0;;i++) { mir_snprintf(idstr, "Phone%d", i); ptrT phone( ppro->getTStringA(idstr)); if (phone == NULL) break; mir_sntprintf(number, _T("%d"), i+1); lvi.pszText = number; lvi.lParam = (LPARAM)i; ListView_InsertItem(GetDlgItem(hwndDlg, IDC_PHONES), &lvi); ListView_SetItemText(GetDlgItem(hwndDlg, IDC_PHONES), lvi.iItem, 1, phone); lvi.iItem++; } lvi.mask = LVIF_PARAM; lvi.lParam = -1; ListView_InsertItem(GetDlgItem(hwndDlg, IDC_PHONES), &lvi); } break; case WM_NOTIFY: switch (((LPNMHDR)lParam)->idFrom) { case 0: switch (((LPNMHDR)lParam)->code) { case PSN_PARAMCHANGED: SendMessage(hwndDlg, WM_INITDIALOG, 0, ((PSHNOTIFY*)lParam)->lParam); break; case PSN_APPLY: ppro->m_vCardUpdates &= ~(1UL << iPageId); ppro->SaveVcardToDB(hwndDlg, iPageId); if (!ppro->m_vCardUpdates) ppro->SetServerVcard(ppro->m_bPhotoChanged, ppro->m_szPhotoFileName); break; } break; case IDC_EMAILS: case IDC_PHONES: switch (((LPNMHDR)lParam)->code) { case NM_CUSTOMDRAW: { NMLVCUSTOMDRAW *nm = (NMLVCUSTOMDRAW *)lParam; switch (nm->nmcd.dwDrawStage) { case CDDS_PREPAINT: case CDDS_ITEMPREPAINT: SetWindowLongPtr(hwndDlg, DWLP_MSGRESULT, CDRF_NOTIFYSUBITEMDRAW); return TRUE; case CDDS_SUBITEM | CDDS_ITEMPREPAINT: RECT rc; HICON hIcon; ListView_GetSubItemRect(nm->nmcd.hdr.hwndFrom, nm->nmcd.dwItemSpec, nm->iSubItem, LVIR_LABEL, &rc); if (nm->nmcd.lItemlParam == -1 && nm->iSubItem == 3) hIcon = (HICON)LoadImage(hInst, MAKEINTRESOURCE(IDI_ADDCONTACT), IMAGE_ICON, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), 0); else if (nm->iSubItem == 2 && nm->nmcd.lItemlParam != -1) hIcon = (HICON)LoadImage(hInst, MAKEINTRESOURCE(IDI_EDIT), IMAGE_ICON, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), 0); else if (nm->iSubItem == 3 && nm->nmcd.lItemlParam != -1) hIcon = (HICON)LoadImage(hInst, MAKEINTRESOURCE(IDI_DELETE), IMAGE_ICON, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), 0); else break; DrawIconEx(nm->nmcd.hdc, (rc.left + rc.right - GetSystemMetrics(SM_CXSMICON)) / 2, (rc.top + rc.bottom - GetSystemMetrics(SM_CYSMICON)) / 2, hIcon, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), 0, NULL, DI_NORMAL); DestroyIcon(hIcon); SetWindowLongPtr(hwndDlg, DWLP_MSGRESULT, CDRF_SKIPDEFAULT); return TRUE; } } break; case NM_CLICK: NMLISTVIEW *nm = (NMLISTVIEW *)lParam; if (nm->iSubItem < 2) break; const char* szIdTemplate = (nm->hdr.idFrom == IDC_PHONES) ? "Phone%d" : "e-mail%d"; const char* szFlagTemplate = (nm->hdr.idFrom == IDC_PHONES) ? "PhoneFlag%d" : "e-mailFlag%d"; LVHITTESTINFO hti; hti.pt.x = (short)LOWORD(GetMessagePos()); hti.pt.y = (short)HIWORD(GetMessagePos()); ScreenToClient(nm->hdr.hwndFrom, &hti.pt); if (ListView_SubItemHitTest(nm->hdr.hwndFrom, &hti) == -1) break; LVITEM lvi; lvi.mask = LVIF_PARAM; lvi.iItem = hti.iItem; lvi.iSubItem = 0; ListView_GetItem(nm->hdr.hwndFrom, &lvi); if (lvi.lParam == -1) { if (hti.iSubItem == 3) { //add EditDlgParam param = { -1, ppro }; int res; if (nm->hdr.idFrom == IDC_PHONES) res = DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_VCARD_ADDPHONE), hwndDlg, EditPhoneDlgProc, (LPARAM)¶m); else res = DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_VCARD_ADDEMAIL), hwndDlg, EditEmailDlgProc, (LPARAM)¶m); if (res != IDOK) break; SendMessage(hwndDlg, M_REMAKELISTS, 0, 0); ppro->m_vCardUpdates |= (1UL << iPageId); SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); } } else { if (hti.iSubItem == 3) { //delete char idstr[33]; int i; for (i = lvi.lParam;; i++) { mir_snprintf(idstr, szIdTemplate, i + 1); ptrA fieldVal(ppro->getStringA(idstr)); if (fieldVal == NULL) break; mir_snprintf(idstr, szIdTemplate, i); ppro->setString(idstr, fieldVal); mir_snprintf(idstr, szFlagTemplate, i + 1); WORD nFlag = ppro->getWord(idstr, 0); mir_snprintf(idstr, szFlagTemplate, i); ppro->setWord(idstr, nFlag); } mir_snprintf(idstr, szIdTemplate, i); ppro->delSetting(idstr); mir_snprintf(idstr, szFlagTemplate, i); ppro->delSetting(idstr); SendMessage(hwndDlg, M_REMAKELISTS, 0, 0); ppro->m_vCardUpdates |= (1UL << iPageId); SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); } else if (hti.iSubItem == 2) { EditDlgParam param = { (int)lvi.lParam, ppro }; int res; if (nm->hdr.idFrom == IDC_PHONES) res = DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_VCARD_ADDPHONE), hwndDlg, EditPhoneDlgProc, (LPARAM)¶m); else res = DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_VCARD_ADDEMAIL), hwndDlg, EditEmailDlgProc, (LPARAM)¶m); if (res != IDOK) break; SendMessage(hwndDlg, M_REMAKELISTS, 0, 0); ppro->m_vCardUpdates |= (1UL << iPageId); SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); } } } } break; case WM_SETCURSOR: if (LOWORD(lParam) != HTCLIENT) break; if (GetForegroundWindow() == GetParent(hwndDlg)) { POINT pt; GetCursorPos(&pt); ScreenToClient(hwndDlg, &pt); SetFocus(ChildWindowFromPoint(hwndDlg, pt)); //ugly hack because listviews ignore their first click } break; case WM_DESTROY: ppro->WindowUnsubscribe(hwndDlg); break; } return FALSE; }
static INT_PTR CALLBACK WorkDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { const unsigned long iPageId = 2; CJabberProto *ppro = (CJabberProto*)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); switch (msg) { case WM_INITDIALOG: if (lParam) { // proto info is available ppro = (CJabberProto*)lParam; TranslateDialogDefault(hwndDlg); for (int i = 0; i < g_cbCountries; i++) { if (g_countries[i].id != 0xFFFF && g_countries[i].id != 0) { TCHAR *country = mir_a2t(g_countries[i].szName); SendDlgItemMessage(hwndDlg, IDC_COUNTRY, CB_ADDSTRING, 0, (LPARAM)TranslateTS(country)); mir_free(country); } } SetWindowLongPtr(hwndDlg, GWLP_USERDATA, lParam); SendMessage(hwndDlg, WM_JABBER_REFRESH_VCARD, 0, 0); ppro->WindowSubscribe(hwndDlg); } break; case WM_JABBER_REFRESH_VCARD: SetDialogField(ppro, hwndDlg, IDC_COMPANY, "Company"); SetDialogField(ppro, hwndDlg, IDC_DEPARTMENT, "CompanyDepartment"); SetDialogField(ppro, hwndDlg, IDC_TITLE, "CompanyPosition"); SetDialogField(ppro, hwndDlg, IDC_ADDRESS1, "CompanyStreet"); SetDialogField(ppro, hwndDlg, IDC_ADDRESS2, "CompanyStreet2"); SetDialogField(ppro, hwndDlg, IDC_CITY, "CompanyCity"); SetDialogField(ppro, hwndDlg, IDC_STATE, "CompanyState"); SetDialogField(ppro, hwndDlg, IDC_ZIP, "CompanyZIP"); SetDialogField(ppro, hwndDlg, IDC_COUNTRY, "CompanyCountry", true); break; case WM_COMMAND: if (((HWND)lParam == GetFocus() && HIWORD(wParam) == EN_CHANGE) || ((HWND)lParam == GetDlgItem(hwndDlg, IDC_COUNTRY) && (HIWORD(wParam) == CBN_EDITCHANGE || HIWORD(wParam) == CBN_SELCHANGE))) { ppro->m_vCardUpdates |= (1UL << iPageId); SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); } break; case WM_NOTIFY: if (((LPNMHDR)lParam)->idFrom == 0) { switch (((LPNMHDR)lParam)->code) { case PSN_PARAMCHANGED: SendMessage(hwndDlg, WM_INITDIALOG, 0, ((PSHNOTIFY*)lParam)->lParam); break; case PSN_APPLY: ppro->m_vCardUpdates &= ~(1UL << iPageId); ppro->SaveVcardToDB(hwndDlg, iPageId); if (!ppro->m_vCardUpdates) ppro->SetServerVcard(ppro->m_bPhotoChanged, ppro->m_szPhotoFileName); break; } } break; case WM_DESTROY: ppro->WindowUnsubscribe(hwndDlg); break; } return FALSE; }
void JabberFileServerConnection(JABBER_SOCKET hConnection, DWORD /*dwRemoteIP*/, void* extra) { CJabberProto *ppro = (CJabberProto*)extra; NETLIBCONNINFO connInfo = { sizeof(connInfo) }; CallService(MS_NETLIB_GETCONNECTIONINFO, (WPARAM)hConnection, (LPARAM)&connInfo); TCHAR szPort[10]; mir_sntprintf(szPort, _countof(szPort), _T("%d"), connInfo.wPort); ppro->debugLogA("File server incoming connection accepted: %s", connInfo.szIpPort); JABBER_LIST_ITEM *item = ppro->ListGetItemPtr(LIST_FILE, szPort); if (item == NULL) { ppro->debugLogA("No file is currently served, file server connection closed."); Netlib_CloseHandle(hConnection); return; } filetransfer *ft = item->ft; JABBER_SOCKET slisten = ft->s; ft->s = hConnection; ppro->debugLogA("Set ft->s to %d (saving %d)", hConnection, slisten); char* buffer = (char*)mir_alloc(JABBER_NETWORK_BUFFER_SIZE + 1); if (buffer == NULL) { ppro->debugLogA("Cannot allocate network buffer, file server connection closed."); Netlib_CloseHandle(hConnection); ft->state = FT_ERROR; if (ft->hFileEvent != NULL) SetEvent(ft->hFileEvent); return; } ppro->debugLogA("Entering recv loop for this file connection... (ft->s is hConnection)"); int datalen = 0; while (ft->state != FT_DONE && ft->state != FT_ERROR) { int recvResult, bytesParsed; recvResult = Netlib_Recv(hConnection, buffer + datalen, JABBER_NETWORK_BUFFER_SIZE - datalen, 0); if (recvResult <= 0) break; datalen += recvResult; buffer[datalen] = '\0'; ppro->debugLogA("RECV:%s", buffer); bytesParsed = ppro->FileSendParse(hConnection, ft, buffer, datalen); if (bytesParsed < datalen) memmove(buffer, buffer + bytesParsed, datalen - bytesParsed); datalen -= bytesParsed; } ppro->debugLogA("Closing connection for this file transfer... (ft->s is now hBind)"); Netlib_CloseHandle(hConnection); ft->s = slisten; ppro->debugLogA("ft->s is restored to %d", ft->s); if (ft->hFileEvent != NULL) SetEvent(ft->hFileEvent); mir_free(buffer); }
static INT_PTR JabberMenuHandleDirectPresence(WPARAM wParam, LPARAM lParam, LPARAM lRes) { CJabberProto *ppro = JabberGetInstanceByHContact(wParam); return(ppro) ? ppro->OnMenuHandleDirectPresence(wParam, lParam, lRes) : 0; }
static INT_PTR JabberMenuSendNote(WPARAM wParam, LPARAM lParam) { CJabberProto *ppro = JabberGetInstanceByHContact(wParam); return(ppro) ? ppro->OnMenuSendNote(wParam, lParam) : 0; }
static INT_PTR JabberContactMenuRunCommands(WPARAM wParam, LPARAM lParam) { CJabberProto *ppro = JabberGetInstanceByHContact(wParam); return(ppro) ? ppro->ContactMenuRunCommands(wParam, lParam) : 0; }
static INT_PTR JabberMenuTransportLogin(WPARAM wParam, LPARAM lParam) { CJabberProto *ppro = JabberGetInstanceByHContact(wParam); return(ppro) ? ppro->OnMenuTransportLogin(wParam, lParam) : 0; }
static INT_PTR CALLBACK JabberChangePasswordDlgProc( HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam ) { CJabberProto* ppro = (CJabberProto*)GetWindowLongPtr( hwndDlg, GWLP_USERDATA ); switch ( msg ) { case WM_INITDIALOG: ppro = (CJabberProto*)lParam; SetWindowLongPtr( hwndDlg, GWLP_USERDATA, ( LONG_PTR )lParam ); WindowSetIcon( hwndDlg, ppro, "key" ); TranslateDialogDefault( hwndDlg ); if ( ppro->m_bJabberOnline && ppro->m_ThreadInfo!=NULL ) { TCHAR text[1024]; mir_sntprintf( text, SIZEOF( text ), _T("%s %s@") _T(TCHAR_STR_PARAM), TranslateT( "Set New Password for" ), ppro->m_ThreadInfo->username, ppro->m_ThreadInfo->server ); SetWindowText( hwndDlg, text ); } return TRUE; case WM_COMMAND: switch ( LOWORD( wParam )) { case IDOK: if ( ppro->m_bJabberOnline && ppro->m_ThreadInfo!=NULL ) { TCHAR newPasswd[512], text[512]; GetDlgItemText( hwndDlg, IDC_NEWPASSWD, newPasswd, SIZEOF( newPasswd )); GetDlgItemText( hwndDlg, IDC_NEWPASSWD2, text, SIZEOF( text )); if ( _tcscmp( newPasswd, text )) { MessageBox( hwndDlg, TranslateT( "New password does not match." ), TranslateT( "Change Password" ), MB_OK|MB_ICONSTOP|MB_SETFOREGROUND ); break; } GetDlgItemText( hwndDlg, IDC_OLDPASSWD, text, SIZEOF( text )); if ( _tcscmp( text, ppro->m_ThreadInfo->password )) { MessageBox( hwndDlg, TranslateT( "Current password is incorrect." ), TranslateT( "Change Password" ), MB_OK|MB_ICONSTOP|MB_SETFOREGROUND ); break; } _tcsncpy( ppro->m_ThreadInfo->newPassword, newPasswd, SIZEOF( ppro->m_ThreadInfo->newPassword )); int iqId = ppro->SerialNext(); ppro->IqAdd( iqId, IQ_PROC_NONE, &CJabberProto::OnIqResultSetPassword ); XmlNodeIq iq( _T("set"), iqId, _A2T(ppro->m_ThreadInfo->server)); HXML q = iq << XQUERY( _T(JABBER_FEAT_REGISTER)); q << XCHILD( _T("username"), ppro->m_ThreadInfo->username ); q << XCHILD( _T("password"), newPasswd ); ppro->m_ThreadInfo->send( iq ); } DestroyWindow( hwndDlg ); break; case IDCANCEL: DestroyWindow( hwndDlg ); break; } break; case WM_CLOSE: DestroyWindow( hwndDlg ); break; case WM_DESTROY: ppro->m_hwndJabberChangePassword = NULL; WindowFreeIcon( hwndDlg ); break; } return FALSE; }
void JabberFileServerConnection( JABBER_SOCKET hConnection, DWORD /*dwRemoteIP*/, void* extra ) { CJabberProto* ppro = ( CJabberProto* )extra; WORD localPort = 0; SOCKET s = JCallService( MS_NETLIB_GETSOCKET, ( WPARAM ) hConnection, 0 ); if ( s != INVALID_SOCKET ) { SOCKADDR_IN saddr; int len = sizeof( saddr ); if ( getsockname( s, ( SOCKADDR * ) &saddr, &len ) != SOCKET_ERROR ) { localPort = ntohs( saddr.sin_port ); } } if ( localPort == 0 ) { ppro->Log( "Unable to determine the local port, file server connection closed." ); Netlib_CloseHandle( hConnection ); return; } TCHAR szPort[20]; mir_sntprintf( szPort, SIZEOF( szPort ), _T("%d"), localPort ); ppro->Log( "File server incoming connection accepted: local_port=" TCHAR_STR_PARAM, szPort ); JABBER_LIST_ITEM *item = ppro->ListGetItemPtr( LIST_FILE, szPort ); if ( item == NULL ) { ppro->Log( "No file is currently served, file server connection closed." ); Netlib_CloseHandle( hConnection ); return; } filetransfer* ft = item->ft; JABBER_SOCKET slisten = ft->s; ft->s = hConnection; ppro->Log( "Set ft->s to %d ( saving %d )", hConnection, slisten ); char* buffer = ( char* )mir_alloc( JABBER_NETWORK_BUFFER_SIZE+1 ); if ( buffer == NULL ) { ppro->Log( "Cannot allocate network buffer, file server connection closed." ); Netlib_CloseHandle( hConnection ); ft->state = FT_ERROR; if ( ft->hFileEvent != NULL ) SetEvent( ft->hFileEvent ); return; } ppro->Log( "Entering recv loop for this file connection... ( ft->s is hConnection )" ); int datalen = 0; while ( ft->state!=FT_DONE && ft->state!=FT_ERROR ) { int recvResult, bytesParsed; recvResult = Netlib_Recv( hConnection, buffer+datalen, JABBER_NETWORK_BUFFER_SIZE-datalen, 0 ); if ( recvResult <= 0 ) break; datalen += recvResult; buffer[datalen] = '\0'; ppro->Log( "RECV:%s", buffer ); bytesParsed = ppro->FileSendParse( hConnection, ft, buffer, datalen ); if ( bytesParsed < datalen ) memmove( buffer, buffer+bytesParsed, datalen-bytesParsed ); datalen -= bytesParsed; } ppro->Log( "Closing connection for this file transfer... ( ft->s is now hBind )" ); Netlib_CloseHandle( hConnection ); ft->s = slisten; ppro->Log( "ft->s is restored to %d", ft->s ); if ( ft->hFileEvent != NULL ) SetEvent( ft->hFileEvent ); mir_free( buffer ); }