HANDLE CMsnProto::AddToListByEmail(const char *email, const char *nick, DWORD flags) { HANDLE hContact = MSN_HContactFromEmail(email, nick, true, flags & PALF_TEMPORARY); if (flags & PALF_TEMPORARY) { if (DBGetContactSettingByte(hContact, "CList", "NotOnList", 0) == 1) DBWriteContactSettingByte(hContact, "CList", "Hidden", 1); } else { DBDeleteContactSetting(hContact, "CList", "Hidden"); if (msnLoggedIn) { // int netId = Lists_GetNetId(email); // if (netId == NETID_UNKNOWN) int netId = strncmp(email, "tel:", 4) ? NETID_MSN : NETID_MOB; if (MSN_AddUser(hContact, email, netId, LIST_FL)) { MSN_AddUser(hContact, email, netId, LIST_PL + LIST_REMOVE); MSN_AddUser(hContact, email, netId, LIST_BL + LIST_REMOVE); MSN_AddUser(hContact, email, netId, LIST_AL); DBDeleteContactSetting(hContact, "CList", "Hidden"); } MSN_SetContactDb(hContact, email); if (MSN_IsMeByContact(hContact)) displayEmailCount(hContact); } else hContact = NULL; } return hContact; }
int __cdecl CMsnProto::AuthRequest(HANDLE hContact, const TCHAR* szMessage) { if (msnLoggedIn) { char email[MSN_MAX_EMAIL_LEN]; if (getStaticString(hContact, "e-mail", email, sizeof(email))) return 1; char* szMsg = mir_utf8encodeT(szMessage); // int netId = Lists_GetNetId(email); // if (netId == NETID_UNKNOWN) int netId = strncmp(email, "tel:", 4) == 0 ? NETID_MOB : NETID_MSN; if (MSN_AddUser(hContact, email, netId, LIST_FL, szMsg)) { MSN_AddUser(hContact, email, netId, LIST_PL + LIST_REMOVE); MSN_AddUser(hContact, email, netId, LIST_BL + LIST_REMOVE); MSN_AddUser(hContact, email, netId, LIST_AL); } MSN_SetContactDb(hContact, email); mir_free(szMsg); if (MSN_IsMeByContact(hContact)) displayEmailCount(hContact); return 0; } return 1; }
// MsnAuthAllow - called after successful authorization int CMsnProto::Authorize(MEVENT hDbEvent) { if (!msnLoggedIn) return 1; DBEVENTINFO dbei = { sizeof(dbei) }; if ((dbei.cbBlob = db_event_getBlobSize(hDbEvent)) == -1) return 1; dbei.pBlob = (PBYTE)alloca(dbei.cbBlob); if (db_event_get(hDbEvent, &dbei)) return 1; if (dbei.eventType != EVENTTYPE_AUTHREQUEST) return 1; if (mir_strcmp(dbei.szModule, m_szModuleName)) return 1; char *nick = (char*)(dbei.pBlob + sizeof(DWORD) * 2); char *firstName = nick + mir_strlen(nick) + 1; char *lastName = firstName + mir_strlen(firstName) + 1; char *email = lastName + mir_strlen(lastName) + 1; MCONTACT hContact = MSN_HContactFromEmail(email, nick, true, 0); int netId = Lists_GetNetId(email); MSN_AddUser(hContact, email, netId, LIST_AL); MSN_AddUser(hContact, email, netId, LIST_BL + LIST_REMOVE); MSN_AddUser(hContact, email, netId, LIST_PL + LIST_REMOVE); MSN_SetContactDb(hContact, email); return 0; }
// MsnAddToList - adds contact to the server list MCONTACT CMsnProto::AddToListByEmail(const char *email, const char *nick, DWORD flags) { MCONTACT hContact = MSN_HContactFromEmail(email, nick, true, flags & PALF_TEMPORARY); if (flags & PALF_TEMPORARY) { if (db_get_b(hContact, "CList", "NotOnList", 0) == 1) db_set_b(hContact, "CList", "Hidden", 1); } else { db_unset(hContact, "CList", "Hidden"); if (msnLoggedIn) { int netId = strncmp(email, "tel:", 4) ? NETID_MSN : NETID_MOB; if (MSN_AddUser(hContact, email, netId, LIST_FL)) { MSN_AddUser(hContact, email, netId, LIST_PL + LIST_REMOVE); MSN_AddUser(hContact, email, netId, LIST_BL + LIST_REMOVE); MSN_AddUser(hContact, email, netId, LIST_AL); db_unset(hContact, "CList", "Hidden"); } MSN_SetContactDb(hContact, email); if (MSN_IsMeByContact(hContact)) displayEmailCount(hContact); } else hContact = NULL; } return hContact; }
int CMsnProto::OnDbSettingChanged(WPARAM hContact, LPARAM lParam) { DBCONTACTWRITESETTING* cws = (DBCONTACTWRITESETTING*)lParam; if (!msnLoggedIn || MyOptions.netId != NETID_MSN) return 0; if (hContact == NULL) { if (MyOptions.SlowSend && strcmp(cws->szSetting, "MessageTimeout") == 0 && (strcmp(cws->szModule, "SRMM") == 0 || strcmp(cws->szModule, "SRMsg") == 0)) { if (cws->value.dVal < 60000) MessageBox(NULL, TranslateT("MSN requires message send timeout in your Message window plugin to be not less then 60 sec. Please correct the timeout value."), TranslateT("MSN Protocol"), MB_OK | MB_ICONINFORMATION); } return 0; } if (!strcmp(cws->szSetting, "ApparentMode")) { char tEmail[MSN_MAX_EMAIL_LEN]; if (!db_get_static(hContact, m_szModuleName, "wlid", tEmail, sizeof(tEmail)) || !db_get_static(hContact, m_szModuleName, "e-mail", tEmail, sizeof(tEmail))) { bool isBlocked = Lists_IsInList(LIST_BL, tEmail); if (isBlocked && (cws->value.type == DBVT_DELETED || cws->value.wVal == 0)) { MSN_AddUser(hContact, tEmail, 0, LIST_BL + LIST_REMOVE); MSN_AddUser(hContact, tEmail, 0, LIST_AL); } else if (!isBlocked && cws->value.wVal == ID_STATUS_OFFLINE) { MSN_AddUser(hContact, tEmail, 0, LIST_AL + LIST_REMOVE); MSN_AddUser(hContact, tEmail, 0, LIST_BL); } } } if (!strcmp(cws->szSetting, "MyHandle") && !strcmp(cws->szModule, "CList")) { bool isMe = MSN_IsMeByContact(hContact); if (!isMe || !nickChg) { char szContactID[100]; if (!db_get_static(hContact, m_szModuleName, "ID", szContactID, sizeof(szContactID))) { if (cws->value.type != DBVT_DELETED) { if (cws->value.type == DBVT_UTF8) MSN_ABUpdateNick(cws->value.pszVal, szContactID); else MSN_ABUpdateNick(UTF8(cws->value.pszVal), szContactID); } else MSN_ABUpdateNick(NULL, szContactID); } if (isMe) displayEmailCount(hContact); } } return 0; }
void CMsnProto::MSN_CleanupLists(void) { for (int i=contList.getCount(); i--;) { MsnContact& p = contList[i]; if (p.list & LIST_FL) MSN_SetContactDb(p.hContact, p.email); if (p.list & LIST_PL) { if (p.list & (LIST_AL | LIST_BL)) MSN_AddUser(NULL, p.email, p.netId, LIST_PL + LIST_REMOVE); else MSN_AddAuthRequest(p.email, p.nick, p.invite); } if (p.hContact && !(p.list & (LIST_LL | LIST_FL | LIST_PL)) && p.list != LIST_RL) { int count = db_event_count(p.hContact); if (count) { TCHAR text[256]; TCHAR *sze = mir_a2t(p.email); mir_sntprintf(text, SIZEOF(text), TranslateT("Contact %s has been removed from the server.\nWould you like to keep it as \"Local Only\" contact to preserve history?"), sze); mir_free(sze); TCHAR title[128]; mir_sntprintf(title, SIZEOF(title), TranslateT("%s protocol"), m_tszUserName); if (MessageBox(NULL, text, title, MB_YESNO | MB_ICONQUESTION | MB_SETFOREGROUND) == IDYES) { MSN_AddUser(p.hContact, p.email, 0, LIST_LL); setByte(p.hContact, "LocalList", 1); continue; } } if (!(p.list & (LIST_LL | LIST_FL))) { CallService(MS_DB_CONTACT_DELETE, (WPARAM)p.hContact, 0); p.hContact = NULL; } } if (p.list & (LIST_LL | LIST_FL) && p.hContact) { TCHAR path[MAX_PATH]; MSN_GetCustomSmileyFileName(p.hContact, path, SIZEOF(path), "", 0); if (path[0]) { SMADD_CONT cont; cont.cbSize = sizeof(SMADD_CONT); cont.hContact = p.hContact; cont.type = 0; cont.path = path; CallService(MS_SMILEYADD_LOADCONTACTSMILEYS, 0, (LPARAM)&cont); } } } }
int CMsnProto::AuthDeny(HANDLE hDbEvent, const TCHAR* szReason) { if (!msnLoggedIn) return 1; DBEVENTINFO dbei = { 0 }; dbei.cbSize = sizeof(dbei); if ((int)(dbei.cbBlob = MSN_CallService(MS_DB_EVENT_GETBLOBSIZE, (WPARAM)hDbEvent, 0)) == -1) return 1; dbei.pBlob = (PBYTE)_malloca(dbei.cbBlob); if (MSN_CallService(MS_DB_EVENT_GET, (WPARAM)hDbEvent, (LPARAM)&dbei)) return 1; if (dbei.eventType != EVENTTYPE_AUTHREQUEST) return 1; if (strcmp(dbei.szModule, m_szModuleName)) return 1; char* nick = (char*)(dbei.pBlob + sizeof(DWORD) + sizeof(HANDLE)); char* firstName = nick + strlen(nick) + 1; char* lastName = firstName + strlen(firstName) + 1; char* email = lastName + strlen(lastName) + 1; MsnContact* msc = Lists_Get(email); if (msc == NULL) return 0; MSN_AddUser(NULL, email, msc->netId, LIST_PL + LIST_REMOVE); MSN_AddUser(NULL, email, msc->netId, LIST_BL); MSN_AddUser(NULL, email, msc->netId, LIST_RL); if (!(msc->list & (LIST_FL | LIST_LL))) { if (msc->hContact) MSN_CallService(MS_DB_CONTACT_DELETE, (WPARAM)msc->hContact, 0); msc->hContact = NULL; HANDLE hContact = MSN_HContactFromEmail(email); if (hContact) MSN_CallService(MS_DB_CONTACT_DELETE, (WPARAM)hContact, 0); } return 0; }
// PSS_AUTHREQUEST int __cdecl CMsnProto::AuthRequest(MCONTACT hContact, const TCHAR* szMessage) { if (msnLoggedIn) { char email[MSN_MAX_EMAIL_LEN]; if (db_get_static(hContact, m_szModuleName, "wlid", email, sizeof(email)) && db_get_static(hContact, m_szModuleName, "e-mail", email, sizeof(email))) return 1; int netId = strncmp(email, "tel:", 4) == 0 ? NETID_MOB : (strncmp(email, "live:", 5) == 0 ? NETID_SKYPE : NETID_MSN); if (MSN_AddUser(hContact, email, netId, LIST_FL, T2Utf(szMessage))) { MSN_AddUser(hContact, email, netId, LIST_PL + LIST_REMOVE); MSN_AddUser(hContact, email, netId, LIST_BL + LIST_REMOVE); MSN_AddUser(hContact, email, netId, LIST_AL); } MSN_SetContactDb(hContact, email); if (MSN_IsMeByContact(hContact)) displayEmailCount(hContact); return 0; } return 1; }
// MsnAuthDeny - called after unsuccessful authorization int CMsnProto::AuthDeny(MEVENT hDbEvent, const TCHAR*) { if (!msnLoggedIn) return 1; DBEVENTINFO dbei = { sizeof(dbei) }; if ((dbei.cbBlob = db_event_getBlobSize(hDbEvent)) == -1) return 1; dbei.pBlob = (PBYTE)alloca(dbei.cbBlob); if (db_event_get(hDbEvent, &dbei)) return 1; if (dbei.eventType != EVENTTYPE_AUTHREQUEST) return 1; if (mir_strcmp(dbei.szModule, m_szModuleName)) return 1; char* nick = (char*)(dbei.pBlob + sizeof(DWORD) * 2); char* firstName = nick + mir_strlen(nick) + 1; char* lastName = firstName + mir_strlen(firstName) + 1; char* email = lastName + mir_strlen(lastName) + 1; MsnContact* msc = Lists_Get(email); if (msc == NULL) return 0; MSN_AddUser(NULL, email, msc->netId, LIST_PL + LIST_REMOVE); MSN_AddUser(NULL, email, msc->netId, LIST_BL); MSN_AddUser(NULL, email, msc->netId, LIST_RL); if (!(msc->list & (LIST_FL | LIST_LL))) { if (msc->hContact) CallService(MS_DB_CONTACT_DELETE, (WPARAM)msc->hContact, 0); msc->hContact = NULL; MCONTACT hContact = MSN_HContactFromEmail(email); if (hContact) CallService(MS_DB_CONTACT_DELETE, hContact, 0); } return 0; }
int CMsnProto::Authorize(HANDLE hDbEvent) { if (!msnLoggedIn) return 1; DBEVENTINFO dbei = { 0 }; dbei.cbSize = sizeof(dbei); if ((int)(dbei.cbBlob = MSN_CallService(MS_DB_EVENT_GETBLOBSIZE, (WPARAM)hDbEvent, 0)) == -1) return 1; dbei.pBlob = (PBYTE)_malloca(dbei.cbBlob); if (MSN_CallService(MS_DB_EVENT_GET, (WPARAM)hDbEvent, (LPARAM)&dbei)) return 1; if (dbei.eventType != EVENTTYPE_AUTHREQUEST) return 1; if (strcmp(dbei.szModule, m_szModuleName)) return 1; char* nick = (char*)(dbei.pBlob + sizeof(DWORD) + sizeof(HANDLE)); char* firstName = nick + strlen(nick) + 1; char* lastName = firstName + strlen(firstName) + 1; char* email = lastName + strlen(lastName) + 1; HANDLE hContact = MSN_HContactFromEmail(email, nick, true, 0); int netId = Lists_GetNetId(email); MSN_AddUser(hContact, email, netId, LIST_AL); MSN_AddUser(hContact, email, netId, LIST_BL + LIST_REMOVE); MSN_AddUser(hContact, email, netId, LIST_PL + LIST_REMOVE); MSN_SetContactDb(hContact, email); return 0; }
int CMsnProto::OnContactDeleted(WPARAM hContact, LPARAM) { if (!msnLoggedIn) //should never happen for MSN contacts return 0; if (isChatRoom(hContact)) { DBVARIANT dbv; if (!getTString(hContact, "ChatRoomID", &dbv)) { MSN_KillChatSession(dbv.ptszVal); db_free(&dbv); } } else { char szEmail[MSN_MAX_EMAIL_LEN]; if (MSN_IsMeByContact(hContact, szEmail)) pcli->pfnRemoveEvent(hContact, 1); if (szEmail[0]) { debugLogA("Deleted Handler Email"); if (Lists_IsInList(LIST_FL, szEmail)) { DeleteParam param = { this, hContact }; DialogBoxParam(g_hInst, MAKEINTRESOURCE(IDD_DELETECONTACT), NULL, DlgDeleteContactUI, (LPARAM)¶m); MsnContact *msc = Lists_Get(szEmail); if (msc) msc->hContact = NULL; } if (Lists_IsInList(LIST_LL, szEmail)) MSN_AddUser(hContact, szEmail, 0, LIST_LL | LIST_REMOVE); } } return 0; }