#include "Mra.h" #include "proto.h" INT_PTR MraXStatusMenu (WPARAM wParam,LPARAM lParam,LPARAM param); int MraContactDeleted (WPARAM wParam,LPARAM lParam); int MraDbSettingChanged (WPARAM wParam,LPARAM lParam); int MraRebuildContactMenu (WPARAM wParam,LPARAM lParam); int MraExtraIconsApply (WPARAM wParam,LPARAM lParam); int MraExtraIconsRebuild (WPARAM wParam,LPARAM lParam); int MraRebuildStatusMenu (WPARAM wParam,LPARAM lParam); int MraMusicChanged (WPARAM wParam,LPARAM lParam); DWORD MraSendNewStatus (DWORD dwStatusMir,DWORD dwXStatusMir,LPWSTR lpwszStatusTitle,SIZE_T dwStatusTitleSize,LPWSTR lpwszStatusDesc,SIZE_T dwStatusDescSize); HANDLE AddToListByEmail (MRA_LPS *plpsEMail,MRA_LPS *plpsNick,MRA_LPS *plpsFirstName,MRA_LPS *plpsLastName,DWORD dwFlags); INT_PTR LoadServices(void) { CHAR szServiceFunction[MAX_PATH],*pszServiceFunctionName; memmove(szServiceFunction,PROTOCOL_NAMEA,PROTOCOL_NAME_SIZE); pszServiceFunctionName=szServiceFunction+PROTOCOL_NAME_LEN; // Service creation for (SIZE_T i=0;i<SIZEOF(siPluginServices);i++) { memmove(pszServiceFunctionName,siPluginServices[i].lpszName,(lstrlenA(siPluginServices[i].lpszName)+1)); CreateServiceFunction(szServiceFunction,siPluginServices[i].lpFunc); } DebugPrintCRLFW(L"MRA/LoadServices - DONE"); return(0); } INT_PTR LoadModules(void) { CHAR szServiceFunction[MAX_PATH],*pszServiceFunctionName; memmove(szServiceFunction,PROTOCOL_NAMEA,PROTOCOL_NAME_SIZE); pszServiceFunctionName=szServiceFunction+PROTOCOL_NAME_LEN; IconsLoad(); masMraSettings.hExtraXstatusIcon=ExtraIcon_Register("MRAXstatus","Mail.ru Xstatus","MRA_xstatus25",MraExtraIconsRebuild,MraExtraIconsApply,NULL,NULL); masMraSettings.hExtraInfo=ExtraIcon_Register("MRAStatus","Mail.ru extra info","MRA_xstatus49",MraExtraIconsRebuild,MraExtraIconsApply,NULL,NULL); masMraSettings.hHookOptInitialize=HookEvent(ME_OPT_INITIALISE,OptInit); masMraSettings.hHookContactDeleted=HookEvent(ME_DB_CONTACT_DELETED,MraContactDeleted); masMraSettings.hHookSettingChanged=HookEvent(ME_DB_CONTACT_SETTINGCHANGED,MraDbSettingChanged); masMraSettings.hHookRebuildCMenu=HookEvent(ME_CLIST_PREBUILDCONTACTMENU,MraRebuildContactMenu); if (ServiceExists(MS_NUDGE_SEND)) { memmove(pszServiceFunctionName,MS_NUDGE,sizeof(MS_NUDGE)); masMraSettings.heNudgeReceived=CreateHookableEvent(szServiceFunction); } masMraSettings.hHookExtraIconsApply=HookEvent(ME_CLIST_EXTRA_IMAGE_APPLY,MraExtraIconsApply); masMraSettings.hHookExtraIconsRebuild=HookEvent(ME_CLIST_EXTRA_LIST_REBUILD,MraExtraIconsRebuild); // Main menu initialization HICON hMainIcon = (HICON)LoadImage(masMraSettings.hInstance,MAKEINTRESOURCE(IDI_MRA),IMAGE_ICON,0,0,LR_SHARED); CListCreateMenu(200001,500085000,hMainIcon,NULL,TRUE,gdiMenuItems,masMraSettings.hMainMenuIcons,SIZEOF(gdiMenuItems),masMraSettings.hMainMenuItems); // Contact menu initialization CListCreateMenu(2000060000,-500050000,NULL,NULL,FALSE,gdiContactMenuItems,masMraSettings.hContactMenuIcons,(SIZEOF(gdiContactMenuItems) - ((masMraSettings.heNudgeReceived==NULL)? 0:1)),masMraSettings.hContactMenuItems); // xstatus menu InitXStatusIcons(); for(SIZE_T i=0;i<MRA_XSTATUS_COUNT;i++) { mir_snprintf(pszServiceFunctionName,(SIZEOF(szServiceFunction)-PROTOCOL_NAME_LEN),"/menuXStatus%ld",i); CreateServiceFunctionParam(szServiceFunction,MraXStatusMenu,i); } masMraSettings.bHideXStatusUI=FALSE; masMraSettings.dwXStatusMode=DB_Mra_GetByte(NULL,DBSETTING_XSTATUSID,MRA_MIR_XSTATUS_NONE); if (IsXStatusValid(masMraSettings.dwXStatusMode)==FALSE) masMraSettings.dwXStatusMode=MRA_MIR_XSTATUS_NONE; masMraSettings.hHookRebuildStatusMenu=HookEvent(ME_CLIST_PREBUILDSTATUSMENU,MraRebuildStatusMenu); MraRebuildStatusMenu(0,0); MraExtraIconsRebuild(0,0); masMraSettings.hWATrack=HookEvent(ME_WAT_NEWSTATUS,MraMusicChanged); mir_snprintf(masMraSettings.szNewMailSound,SIZEOF(masMraSettings.szNewMailSound),"%s: %s",PROTOCOL_NAMEA,MRA_SOUND_NEW_EMAIL); SkinAddNewSoundEx(masMraSettings.szNewMailSound,PROTOCOL_NAMEA,MRA_SOUND_NEW_EMAIL); masMraSettings.bChatExist=MraChatRegister(); DebugPrintCRLFW(L"MRA/LoadModules - DONE"); return(0); } void UnloadModules() { CHAR szServiceFunction[MAX_PATH],*pszServiceFunctionName; memmove(szServiceFunction,PROTOCOL_NAMEA,PROTOCOL_NAME_SIZE); pszServiceFunctionName=szServiceFunction+PROTOCOL_NAME_LEN; if (masMraSettings.bChatExist) {// destroy all chat sessions MraChatSessionDestroy(NULL); } // xstatus menu destroy if (masMraSettings.hHookRebuildStatusMenu) { UnhookEvent(masMraSettings.hHookRebuildStatusMenu); masMraSettings.hHookRebuildStatusMenu=NULL; } bzero(masMraSettings.hXStatusMenuItems,sizeof(masMraSettings.hXStatusMenuItems)); // Service deletion for(SIZE_T i=0;i<MRA_XSTATUS_COUNT;i++) { mir_snprintf(pszServiceFunctionName,(SIZEOF(szServiceFunction)-PROTOCOL_NAME_LEN),"/menuXStatus%ld",i); DestroyServiceFunction(szServiceFunction); } DestroyXStatusIcons(); // Main menu destroy CListDestroyMenu(gdiMenuItems,SIZEOF(gdiMenuItems)); bzero(masMraSettings.hMainMenuItems,sizeof(masMraSettings.hMainMenuItems)); // Contact menu destroy CListDestroyMenu(gdiContactMenuItems,(SIZEOF(gdiContactMenuItems) - ((masMraSettings.heNudgeReceived==NULL)? 0:1))); bzero(masMraSettings.hContactMenuItems,sizeof(masMraSettings.hContactMenuItems)); if (masMraSettings.heNudgeReceived) {DestroyHookableEvent(masMraSettings.heNudgeReceived); masMraSettings.heNudgeReceived=NULL;} if (masMraSettings.hWATrack) {UnhookEvent(masMraSettings.hWATrack); masMraSettings.hWATrack=NULL;} if (masMraSettings.hHookIconsChanged) {UnhookEvent(masMraSettings.hHookIconsChanged); masMraSettings.hHookIconsChanged=NULL;} if (masMraSettings.hHookExtraIconsRebuild) {UnhookEvent(masMraSettings.hHookExtraIconsRebuild); masMraSettings.hHookExtraIconsRebuild=NULL;} if (masMraSettings.hHookExtraIconsApply) {UnhookEvent(masMraSettings.hHookExtraIconsApply); masMraSettings.hHookExtraIconsApply=NULL;} if (masMraSettings.hHookRebuildCMenu) {UnhookEvent(masMraSettings.hHookRebuildCMenu); masMraSettings.hHookRebuildCMenu=NULL;} if (masMraSettings.hHookSettingChanged) {UnhookEvent(masMraSettings.hHookSettingChanged); masMraSettings.hHookSettingChanged=NULL;} if (masMraSettings.hHookContactDeleted) {UnhookEvent(masMraSettings.hHookContactDeleted); masMraSettings.hHookContactDeleted=NULL;} if (masMraSettings.hHookOptInitialize) {UnhookEvent(masMraSettings.hHookOptInitialize); masMraSettings.hHookOptInitialize=NULL;} IconsUnLoad(); DebugPrintCRLFW(L"MRA/UnloadModules - DONE"); } void UnloadServices() { CHAR szServiceFunction[MAX_PATH],*pszServiceFunctionName; memmove(szServiceFunction,PROTOCOL_NAMEA,PROTOCOL_NAME_SIZE); pszServiceFunctionName=szServiceFunction+PROTOCOL_NAME_LEN; // destroy plugin services for (SIZE_T i=0;i<SIZEOF(siPluginServices);i++) { memmove(pszServiceFunctionName,siPluginServices[i].lpszName,(lstrlenA(siPluginServices[i].lpszName)+1)); DestroyServiceFunction(szServiceFunction); } DebugPrintCRLFW(L"MRA/UnloadServices - DONE"); } void SetExtraIcons(HANDLE hContact) { if(masMraSettings.hHookExtraIconsApply) { DWORD dwID,dwGroupID,dwContactSeverFlags; if (GetContactBasicInfoW(hContact,&dwID,&dwGroupID,NULL,&dwContactSeverFlags,NULL,NULL,0,NULL,NULL,0,NULL,NULL,0,NULL)==NO_ERROR) { DWORD dwIconID=-1; DWORD dwXStatus=MRA_MIR_XSTATUS_NONE; if(masMraSettings.bLoggedIn) { dwXStatus=DB_Mra_GetByte(hContact,DBSETTING_XSTATUSID,MRA_MIR_XSTATUS_NONE); if(dwID==-1) { if(dwContactSeverFlags==-1) { dwIconID=ADV_ICON_DELETED; }else{ dwIconID=ADV_ICON_NOT_ON_SERVER; } }else{ if (dwGroupID==103) {//***deb dwIconID=ADV_ICON_PHONE; }else{ if(dwContactSeverFlags) if(dwContactSeverFlags==-1) { dwIconID=ADV_ICON_DELETED; }else{ dwIconID=ADV_ICON_NOT_AUTHORIZED; } } } } if (dwIconID==-1) { SIZE_T dwBlogStatusMsgSize=0; DB_Mra_GetStaticStringW(hContact,DBSETTING_BLOGSTATUS,NULL,0,&dwBlogStatusMsgSize); if (dwBlogStatusMsgSize) dwIconID=ADV_ICON_BLOGSTATUS; } ExtraSetIcon(masMraSettings.hExtraXstatusIcon,hContact,((IsXStatusValid(dwXStatus) || dwXStatus==MRA_MIR_XSTATUS_UNKNOWN)? masMraSettings.hXStatusAdvancedStatusItems[dwXStatus]:NULL),EXTRA_ICON_ADV1); ExtraSetIcon(masMraSettings.hExtraInfo,hContact,((dwIconID!=-1)? masMraSettings.hAdvancedStatusItems[dwIconID]:NULL),EXTRA_ICON_ADV2); } } } INT_PTR MraXStatusMenu(WPARAM wParam,LPARAM lParam,LPARAM param) { if (MraRequestXStatusDetails(param)==FALSE) MraSetXStatusInternal(param); return(0); } INT_PTR MraGotoInbox(WPARAM wParam,LPARAM lParam) { MraMPopSessionQueueAddUrl(masMraSettings.hMPopSessionQueue,MRA_WIN_INBOX_URL,sizeof(MRA_WIN_INBOX_URL)); return(0); } INT_PTR MraShowInboxStatus(WPARAM wParam,LPARAM lParam) { MraUpdateEmailStatus(NULL,0,NULL,0,0,0); return(0); } INT_PTR MraSendSMS(WPARAM wParam,LPARAM lParam) { INT_PTR iRet=0; if (masMraSettings.bLoggedIn && wParam && lParam) { LPSTR lpszMessageUTF; LPWSTR lpwszMessageXMLEncoded,lpwszMessageXMLDecoded; SIZE_T dwMessageUTFSize,dwBuffLen,dwMessageXMLEncodedSize,dwMessageXMLDecodedSize; lpszMessageUTF=(LPSTR)lParam; dwMessageUTFSize=lstrlenA(lpszMessageUTF); dwBuffLen=(dwMessageUTFSize+MAX_PATH); lpwszMessageXMLEncoded=(LPWSTR)MEMALLOC((dwBuffLen*sizeof(WCHAR))); lpwszMessageXMLDecoded=(LPWSTR)MEMALLOC((dwBuffLen*sizeof(WCHAR))); if (lpwszMessageXMLEncoded && lpwszMessageXMLDecoded) { dwMessageXMLEncodedSize=MultiByteToWideChar(CP_UTF8,0,lpszMessageUTF,dwMessageUTFSize,lpwszMessageXMLEncoded,dwBuffLen); DecodeXML(lpwszMessageXMLEncoded,dwMessageXMLEncodedSize,lpwszMessageXMLDecoded,dwBuffLen,&dwMessageXMLDecodedSize); if (dwMessageXMLDecodedSize) { iRet=MraSendCommand_SMSW(NULL,(LPSTR)wParam,lstrlenA((LPSTR)wParam),lpwszMessageXMLDecoded,dwMessageXMLDecodedSize); /*{// ��������� ��������� ��� char szBuff[16384]; DWORD dwFlags; MRA_LPS lpsEMail,lpsText,lpsRTFText={0}; dwFlags=(MESSAGE_FLAG_SMS|MESSAGE_FLAG_CP1251); lpsEMail.lpszData=(LPSTR)wParam; lpsEMail.dwSize=lstrlenA(lpsEMail.lpszData); lpsText.lpszData=szBuff;//LPS ## message ## ��������� ������ ��������� lpsText.dwSize=WideCharToMultiByte(MRA_CODE_PAGE,0,lpwszMessageXMLDecoded,dwMessageXMLDecodedSize,szBuff,sizeof(szBuff),NULL,NULL); MraRecvCommand_Message((DWORD)_time32(NULL),dwFlags,&lpsEMail,&lpsText,&lpsRTFText,NULL); }//*/ }else{// conversion failed? DebugBreak(); } } MEMFREE(lpwszMessageXMLDecoded); MEMFREE(lpwszMessageXMLEncoded); } return(iRet); } INT_PTR MraEditProfile(WPARAM wParam,LPARAM lParam) { MraMPopSessionQueueAddUrl(masMraSettings.hMPopSessionQueue,MRA_EDIT_PROFILE_URL,sizeof(MRA_EDIT_PROFILE_URL)); return(0); } INT_PTR MyAlbum(WPARAM wParam,LPARAM lParam) { return(MraViewAlbum(0,0)); } INT_PTR MyBlog(WPARAM wParam,LPARAM lParam) { return(MraReadBlog(0,0)); } INT_PTR MyBlogStatus(WPARAM wParam,LPARAM lParam) { return(MraReplyBlogStatus(0,0)); } INT_PTR MyVideo(WPARAM wParam,LPARAM lParam) { return(MraViewVideo(0,0)); } INT_PTR MyAnswers(WPARAM wParam,LPARAM lParam) { return(MraAnswers(0,0)); } INT_PTR MyWorld(WPARAM wParam,LPARAM lParam) { return(MraWorld(0,0)); } INT_PTR MraZhuki(WPARAM wParam,LPARAM lParam) { MraMPopSessionQueueAddUrl(masMraSettings.hMPopSessionQueue,MRA_ZHUKI_URL,sizeof(MRA_ZHUKI_URL)); return(0); } INT_PTR MraChat(WPARAM wParam,LPARAM lParam) { MraMPopSessionQueueAddUrl(masMraSettings.hMPopSessionQueue,MRA_CHAT_URL,sizeof(MRA_CHAT_URL)); return(0); } INT_PTR MraWebSearch(WPARAM wParam,LPARAM lParam) { CallService(MS_UTILS_OPENURL,TRUE,(LPARAM)MRA_SEARCH_URL); return(0); } INT_PTR MraUpdateAllUsersInfo(WPARAM wParam,LPARAM lParam) { if (MessageBox(NULL,TranslateW(L"Are you sure?"),TranslateW(MRA_UPD_ALL_USERS_INFO_STR),(MB_YESNO|MB_ICONQUESTION))==IDYES) { CHAR szEMail[MAX_EMAIL_LEN]; SIZE_T dwEMailSize; HANDLE hContact; for(hContact=(HANDLE)CallService(MS_DB_CONTACT_FINDFIRST,0,0);hContact!=NULL;hContact=(HANDLE)CallService(MS_DB_CONTACT_FINDNEXT,(WPARAM)hContact,0)) { if (IsContactMra(hContact)) if (DB_Mra_GetStaticStringA(hContact,"e-mail",szEMail,SIZEOF(szEMail),&dwEMailSize)) { MraSendCommand_WPRequestByEMail(hContact,ACKTYPE_GETINFO,szEMail,dwEMailSize); } } } return(0); } INT_PTR MraCheckUpdatesUsersAvt(WPARAM wParam,LPARAM lParam) { if (MessageBox(NULL,TranslateW(L"Are you sure?"),TranslateW(MRA_CHK_UPDATES_USERS_AVATARS_STR),(MB_YESNO|MB_ICONQUESTION))==IDYES) { CHAR szEMail[MAX_EMAIL_LEN]; SIZE_T dwEMailSize; HANDLE hContact; for(hContact=(HANDLE)CallService(MS_DB_CONTACT_FINDFIRST,0,0);hContact!=NULL;hContact=(HANDLE)CallService(MS_DB_CONTACT_FINDNEXT,(WPARAM)hContact,0)) { if (IsContactMra(hContact)) if (DB_Mra_GetStaticStringA(hContact,"e-mail",szEMail,SIZEOF(szEMail),&dwEMailSize)) if (IsEMailChatAgent(szEMail,dwEMailSize)==FALSE)// ������ ��� �����������, MraAvatarsQueueGetAvatarSimple ���� ����� ����������� ����������� MraAvatarsQueueGetAvatarSimple(masMraSettings.hAvatarsQueueHandle,0/*GAIF_FORCE*/,hContact,0); } } return(0); } INT_PTR MraRequestAuthForAll(WPARAM wParam,LPARAM lParam) { if (MessageBox(NULL,TranslateW(L"Are you sure?"),TranslateW(MRA_REQ_AUTH_FOR_ALL_STR),(MB_YESNO|MB_ICONQUESTION))==IDYES) { DWORD dwContactSeverFlags; HANDLE hContact; for(hContact=(HANDLE)CallService(MS_DB_CONTACT_FINDFIRST,0,0);hContact!=NULL;hContact=(HANDLE)CallService(MS_DB_CONTACT_FINDNEXT,(WPARAM)hContact,0)) { if (GetContactBasicInfoW(hContact,NULL,NULL,NULL,&dwContactSeverFlags,NULL,NULL,0,NULL,NULL,0,NULL,NULL,0,NULL)==NO_ERROR) if (dwContactSeverFlags&CONTACT_INTFLAG_NOT_AUTHORIZED && dwContactSeverFlags!=-1) { MraRequestAuthorization((WPARAM)hContact,0); } /*if (IsContactMra(hContact))// inviz check //if ((MraContactCapabilitiesGet(hContact)&MRACCF_INVIS_ALLOWED)==0) if (MraGetContactStatus(hContact)==ID_STATUS_OFFLINE || MraGetContactStatus(hContact)==ID_STATUS_INVISIBLE) { CHAR szEMail[MAX_EMAIL_LEN]; SIZE_T dwEMailSize; if (DB_Mra_GetStaticStringA(hContact,"e-mail",szEMail,SIZEOF(szEMail),&dwEMailSize)) { MraSetContactStatus(hContact,ID_STATUS_OFFLINE); MraSendCommand_Game(szEMail,dwEMailSize,111,GAME_CONNECTION_INVITE,222,NULL,0); } }*/ } } return(0); } INT_PTR MraRequestAuthorization(WPARAM wParam,LPARAM lParam) {//**deb add dialog? INT_PTR iRet=0; if (wParam) { WCHAR wszAuthMessage[MAX_PATH]; CCSDATA cs={0}; if (DB_Mra_GetStaticStringW(NULL,"AuthMessage",wszAuthMessage,SIZEOF(wszAuthMessage),NULL)==FALSE) {// def auth message lstrcpynW(wszAuthMessage,TranslateW(MRA_DEFAULT_AUTH_MESSAGE),SIZEOF(wszAuthMessage)); } cs.hContact=(HANDLE)wParam; cs.szProtoService=PSS_AUTHREQUESTW; cs.wParam=PREF_UNICODE; cs.lParam=(LPARAM)wszAuthMessage; iRet=MraSendAuthRequest(0,(LPARAM)&cs); } return(iRet); } INT_PTR MraGrantAuthorization(WPARAM wParam,LPARAM lParam) { if (masMraSettings.bLoggedIn && wParam) { CHAR szEMail[MAX_EMAIL_LEN]; SIZE_T dwEMailSize; if (DB_Mra_GetStaticStringA((HANDLE)wParam,"e-mail",szEMail,SIZEOF(szEMail),&dwEMailSize)) {// send without reason, do we need any ? MraSendCommand_Authorize(szEMail,dwEMailSize); //MraChatSessionJoinUser((HANDLE)wParam,"123",3,(DWORD)_time32(NULL)); /*//if ((MraContactCapabilitiesGet((HANDLE)wParam)&MRACCF_INVIS_ALLOWED)==0) if (MraGetContactStatus((HANDLE)wParam)==ID_STATUS_OFFLINE || MraGetContactStatus((HANDLE)wParam)==ID_STATUS_INVISIBLE) {// inviz check MraSetContactStatus((HANDLE)wParam,ID_STATUS_OFFLINE); MraSendCommand_Game(szEMail,dwEMailSize,111,GAME_CONNECTION_INVITE,222,NULL,0); }*/ /*MRA_GUID mguidSessionID={0}; for(DWORD i=0;i<8;i++) { MraSendCommand_Proxy(szEMail,dwEMailSize,211+i,MRIM_PROXY_TYPE_FILES,"1.txt;111;",10,"172.0.0.1:111;",15,mguidSessionID); MraSendCommand_ProxyAck(j,szEMail,dwEMailSize,111+i,MRIM_PROXY_TYPE_FILES,"1.txt;111;",10,"127.0.0.1:111;",15,mguidSessionID); }//*/ } } return(0); } INT_PTR MraSendPostcard(WPARAM wParam,LPARAM lParam) { if (masMraSettings.bLoggedIn) { DWORD dwContactEMailCount=GetContactEMailCount((HANDLE)wParam,FALSE); if (dwContactEMailCount) if (dwContactEMailCount==1) { SIZE_T dwUrlSize,dwEMailSize; CHAR szUrl[BUFF_SIZE_URL],szEMail[MAX_EMAIL_LEN]; if (GetContactFirstEMail((HANDLE)wParam,FALSE,szEMail,SIZEOF(szEMail),&dwEMailSize)) { BuffToLowerCase(szEMail,szEMail,dwEMailSize); dwUrlSize=mir_snprintf(szUrl,SIZEOF(szUrl),"http://cards.mail.ru/event.html?rcptname=%s&rcptemail=%s",GetContactNameA((HANDLE)wParam),szEMail); MraMPopSessionQueueAddUrl(masMraSettings.hMPopSessionQueue,szUrl,dwUrlSize); } }else{// show dialog box MraSelectEMailDlgShow((HANDLE)wParam,MRA_SELECT_EMAIL_TYPE_SEND_POSTCARD); } } return(0); } INT_PTR MraViewAlbum(WPARAM wParam,LPARAM lParam) { if (masMraSettings.bLoggedIn) { DWORD dwContactEMailMRCount=GetContactEMailCount((HANDLE)wParam,TRUE); if (dwContactEMailMRCount) if (dwContactEMailMRCount==1) { SIZE_T dwEMailSize; CHAR szEMail[MAX_EMAIL_LEN]; if (GetContactFirstEMail((HANDLE)wParam,TRUE,szEMail,SIZEOF(szEMail),&dwEMailSize)) { MraMPopSessionQueueAddUrlAndEMail(masMraSettings.hMPopSessionQueue,MRA_FOTO_URL,sizeof(MRA_FOTO_URL),szEMail,dwEMailSize); } }else{// show dialog box MraSelectEMailDlgShow((HANDLE)wParam,MRA_SELECT_EMAIL_TYPE_VIEW_ALBUM); } } return(0); } INT_PTR MraReadBlog(WPARAM wParam,LPARAM lParam) { if (masMraSettings.bLoggedIn) { DWORD dwContactEMailMRCount=GetContactEMailCount((HANDLE)wParam,TRUE); if (dwContactEMailMRCount) if (dwContactEMailMRCount==1) { CHAR szEMail[MAX_EMAIL_LEN]; SIZE_T dwEMailSize; if (GetContactFirstEMail((HANDLE)wParam,TRUE,szEMail,SIZEOF(szEMail),&dwEMailSize)) { MraMPopSessionQueueAddUrlAndEMail(masMraSettings.hMPopSessionQueue,MRA_BLOGS_URL,sizeof(MRA_BLOGS_URL),szEMail,dwEMailSize); } }else{// show dialog box MraSelectEMailDlgShow((HANDLE)wParam,MRA_SELECT_EMAIL_TYPE_READ_BLOG); } } return(0); } INT_PTR MraReplyBlogStatus(WPARAM wParam,LPARAM lParam) { if (masMraSettings.bLoggedIn) { SIZE_T dwBlogStatusMsgSize=0; DB_Mra_GetStaticStringW((HANDLE)wParam,DBSETTING_BLOGSTATUS,NULL,0,&dwBlogStatusMsgSize); if (dwBlogStatusMsgSize || wParam==0) { MraSendReplyBlogStatus((HANDLE)wParam); } } return(0); } INT_PTR MraViewVideo(WPARAM wParam,LPARAM lParam) { if (masMraSettings.bLoggedIn) { DWORD dwContactEMailMRCount=GetContactEMailCount((HANDLE)wParam,TRUE); if (dwContactEMailMRCount) if (dwContactEMailMRCount==1) { CHAR szEMail[MAX_EMAIL_LEN]; SIZE_T dwEMailSize; if (GetContactFirstEMail((HANDLE)wParam,TRUE,szEMail,SIZEOF(szEMail),&dwEMailSize)) { MraMPopSessionQueueAddUrlAndEMail(masMraSettings.hMPopSessionQueue,MRA_VIDEO_URL,sizeof(MRA_VIDEO_URL),szEMail,dwEMailSize); } }else{// show dialog box MraSelectEMailDlgShow((HANDLE)wParam,MRA_SELECT_EMAIL_TYPE_VIEW_VIDEO); } } return(0); } INT_PTR MraAnswers(WPARAM wParam,LPARAM lParam) { if (masMraSettings.bLoggedIn) { DWORD dwContactEMailMRCount=GetContactEMailCount((HANDLE)wParam,TRUE); if (dwContactEMailMRCount) if (dwContactEMailMRCount==1) { CHAR szEMail[MAX_EMAIL_LEN]; SIZE_T dwEMailSize; if (GetContactFirstEMail((HANDLE)wParam,TRUE,szEMail,SIZEOF(szEMail),&dwEMailSize)) { MraMPopSessionQueueAddUrlAndEMail(masMraSettings.hMPopSessionQueue,MRA_ANSWERS_URL,sizeof(MRA_ANSWERS_URL),szEMail,dwEMailSize); } }else{// show dialog box MraSelectEMailDlgShow((HANDLE)wParam,MRA_SELECT_EMAIL_TYPE_ANSWERS); } } return(0); } INT_PTR MraWorld(WPARAM wParam,LPARAM lParam) { if (masMraSettings.bLoggedIn) { DWORD dwContactEMailMRCount=GetContactEMailCount((HANDLE)wParam,TRUE); if (dwContactEMailMRCount) if (dwContactEMailMRCount==1) { CHAR szEMail[MAX_EMAIL_LEN]; SIZE_T dwEMailSize; if (GetContactFirstEMail((HANDLE)wParam,TRUE,szEMail,SIZEOF(szEMail),&dwEMailSize)) { MraMPopSessionQueueAddUrlAndEMail(masMraSettings.hMPopSessionQueue,MRA_WORLD_URL,sizeof(MRA_WORLD_URL),szEMail,dwEMailSize); } }else{// show dialog box MraSelectEMailDlgShow((HANDLE)wParam,MRA_SELECT_EMAIL_TYPE_WORLD); } } return(0); } int MraContactDeleted(WPARAM wParam,LPARAM lParam) { if (masMraSettings.bLoggedIn && wParam) { HANDLE hContact=(HANDLE)wParam; if (IsContactMra(hContact)) { CHAR szEMail[MAX_EMAIL_LEN]; DWORD dwID,dwGroupID; SIZE_T dwEMailSize; GetContactBasicInfoW(hContact,&dwID,&dwGroupID,NULL,NULL,NULL,szEMail,SIZEOF(szEMail),&dwEMailSize,NULL,0,NULL,NULL,0,NULL); MraSetContactStatus(hContact,ID_STATUS_OFFLINE); if (DBGetContactSettingByte(hContact,"CList","NotOnList",0)==0 || dwID!=-1) MraSendCommand_ModifyContactW(hContact,dwID,CONTACT_FLAG_REMOVED,dwGroupID,szEMail,dwEMailSize,NULL,0,NULL,0); MraAvatarsDeleteContactAvatarFile(masMraSettings.hAvatarsQueueHandle,hContact); } } return(0); } int MraDbSettingChanged(WPARAM wParam,LPARAM lParam) { if (masMraSettings.bLoggedIn && lParam) { HANDLE hContact=(HANDLE)wParam; DBCONTACTWRITESETTING *cws=(DBCONTACTWRITESETTING*)lParam; if (hContact) { if (IsContactMra(hContact) && DBGetContactSettingByte(hContact,"CList","NotOnList",0)==0 && DB_Mra_GetDword(hContact,"HooksLocked",FALSE)==FALSE) {// ��� ��� �������, �� �� ��������� (���� � ������ �� �������) � ��� ���������� ��������� CHAR szEMail[MAX_EMAIL_LEN],szPhones[MAX_EMAIL_LEN]; WCHAR wszNick[MAX_EMAIL_LEN]; DWORD dwID,dwGroupID,dwContactFlag; SIZE_T dwEMailSize,dwNickSize,dwPhonesSize; if (CompareStringA(MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),NORM_IGNORECASE,cws->szModule,-1,"CList",5)==CSTR_EQUAL) {// CList section if (CompareStringA(MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),NORM_IGNORECASE,cws->szSetting,-1,"MyHandle",8)==CSTR_EQUAL) {// MyHandle setting LPWSTR lpwszNewNick; if (cws->value.type==DBVT_DELETED) {// allways store custom nick lstrcpynW(wszNick,GetContactNameW(hContact),SIZEOF(wszNick)); lpwszNewNick=wszNick; dwNickSize=lstrlenW(lpwszNewNick); DB_SetStringExW(hContact,"CList","MyHandle",lpwszNewNick,dwNickSize); }else{ if (cws->value.pszVal) { switch(cws->value.type){ case DBVT_WCHAR: lpwszNewNick=cws->value.pwszVal; dwNickSize=lstrlenW(lpwszNewNick); break; case DBVT_UTF8: lpwszNewNick=wszNick; dwNickSize=MultiByteToWideChar(CP_UTF8,0,cws->value.pszVal,-1,wszNick,SIZEOF(wszNick)); break; case DBVT_ASCIIZ: lpwszNewNick=wszNick; dwNickSize=MultiByteToWideChar(MRA_CODE_PAGE,0,cws->value.pszVal,-1,wszNick,SIZEOF(wszNick)); break; default: lpwszNewNick=NULL; dwNickSize=0; break; } if (lpwszNewNick) if (GetContactBasicInfoW(hContact,&dwID,&dwGroupID,&dwContactFlag,NULL,NULL,szEMail,SIZEOF(szEMail),&dwEMailSize,NULL,0,NULL,szPhones,SIZEOF(szPhones),&dwPhonesSize)==NO_ERROR) { MraSendCommand_ModifyContactW(hContact,dwID,dwContactFlag,dwGroupID,szEMail,dwEMailSize,lpwszNewNick,dwNickSize,szPhones,dwPhonesSize); } } } }else if (CompareStringA(MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),NORM_IGNORECASE,cws->szSetting,-1,"Group",5)==CSTR_EQUAL) {// Group setting //***deb if (TRUE) {// manage group on server switch(cws->value.type){ case DBVT_ASCIIZ: break; case DBVT_DELETED: break; } } }else if (CompareStringA(MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),NORM_IGNORECASE,cws->szSetting,-1,"NotOnList",9)==CSTR_EQUAL) {// NotOnList setting // Has a temporary contact just been added permanently? if (cws->value.type==DBVT_DELETED || (cws->value.type==DBVT_BYTE && cws->value.bVal==0)) { WCHAR wszAuthMessage[MAX_PATH]; SIZE_T dwAuthMessageSize; if (DB_Mra_GetStaticStringW(NULL,"AuthMessage",wszAuthMessage,SIZEOF(wszAuthMessage),&dwAuthMessageSize)==FALSE) {// def auth message lstrcpynW(wszAuthMessage,TranslateW(MRA_DEFAULT_AUTH_MESSAGE),SIZEOF(wszAuthMessage)); dwAuthMessageSize=lstrlenW(wszAuthMessage); } DBDeleteContactSetting(hContact,"CList","Hidden"); GetContactBasicInfoW(hContact,NULL,&dwGroupID,&dwContactFlag,NULL,NULL,szEMail,SIZEOF(szEMail),&dwEMailSize,wszNick,SIZEOF(wszNick),&dwNickSize,szPhones,SIZEOF(szPhones),&dwPhonesSize); MraSendCommand_AddContactW(hContact,dwContactFlag,dwGroupID,szEMail,dwEMailSize,wszNick,dwNickSize,szPhones,dwPhonesSize,wszAuthMessage,dwAuthMessageSize,0); } }else if (CompareStringA(MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),NORM_IGNORECASE,cws->szSetting,-1,"Hidden",6)==CSTR_EQUAL) {// Hidden setting GetContactBasicInfoW(hContact,&dwID,&dwGroupID,&dwContactFlag,NULL,NULL,szEMail,SIZEOF(szEMail),&dwEMailSize,wszNick,SIZEOF(wszNick),&dwNickSize,szPhones,SIZEOF(szPhones),&dwPhonesSize); if(cws->value.type==DBVT_DELETED || (cws->value.type==DBVT_BYTE && cws->value.bVal==0)) { dwContactFlag&=~CONTACT_FLAG_SHADOW; }else{ dwContactFlag|=CONTACT_FLAG_SHADOW; } MraSendCommand_ModifyContactW(hContact,dwID,dwContactFlag,dwGroupID,szEMail,dwEMailSize,wszNick,dwNickSize,szPhones,dwPhonesSize); } }else if (CompareStringA(MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),NORM_IGNORECASE,cws->szModule,-1,"Ignore",6)==CSTR_EQUAL) {// Ignore section if (CompareStringA(MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),NORM_IGNORECASE,cws->szSetting,-1,"Mask1",5)==CSTR_EQUAL) { GetContactBasicInfoW(hContact,&dwID,&dwGroupID,&dwContactFlag,NULL,NULL,szEMail,SIZEOF(szEMail),&dwEMailSize,wszNick,SIZEOF(wszNick),&dwNickSize,szPhones,SIZEOF(szPhones),&dwPhonesSize); if(cws->value.type==DBVT_DELETED || (cws->value.type==DBVT_DWORD && cws->value.dVal&IGNOREEVENT_MESSAGE)==0) { dwContactFlag&=~CONTACT_FLAG_IGNORE; }else{ dwContactFlag|=CONTACT_FLAG_IGNORE; } MraSendCommand_ModifyContactW(hContact,dwID,dwContactFlag,dwGroupID,szEMail,dwEMailSize,wszNick,dwNickSize,szPhones,dwPhonesSize); } }else if (CompareStringA(MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),NORM_IGNORECASE,cws->szModule,-1,"UserInfo",8)==CSTR_EQUAL) {// User info section if (CompareStringA(MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),NORM_IGNORECASE,cws->szSetting,-1,"MyPhone0",8)==CSTR_EQUAL || CompareStringA(MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),NORM_IGNORECASE,cws->szSetting,-1,"MyPhone1",8)==CSTR_EQUAL || CompareStringA(MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),NORM_IGNORECASE,cws->szSetting,-1,"MyPhone2",8)==CSTR_EQUAL) { //if(cws->value.type!=DBVT_DELETED) { GetContactBasicInfoW(hContact,&dwID,&dwGroupID,&dwContactFlag,NULL,NULL,szEMail,SIZEOF(szEMail),&dwEMailSize,wszNick,SIZEOF(wszNick),&dwNickSize,szPhones,SIZEOF(szPhones),&dwPhonesSize); MraSendCommand_ModifyContactW(hContact,dwID,dwContactFlag,dwGroupID,szEMail,dwEMailSize,wszNick,dwNickSize,szPhones,dwPhonesSize); } } } } }else{// not contact if (CompareStringA(MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),NORM_IGNORECASE,cws->szModule,-1,"CListGroups",11)==CSTR_EQUAL) {// CList section //***deb if (TRUE) {// manage group on server switch(cws->value.type){ case DBVT_ASCIIZ: break; case DBVT_DELETED: break; } } } } /*if ( hContact == NULL && MyOptions.ManageServer && !strcmp( cws->szModule, "CListGroups" )) { int iNumber = atol( cws->szSetting ); LPCSTR szId = MSN_GetGroupByNumber( iNumber ); if ( szId != NULL ) { if ( cws->value.type == DBVT_DELETED ) { msnNsThread->sendPacket( "RMG", szId ); } else if ( cws->value.type == DBVT_ASCIIZ ) { LPCSTR oldId = MSN_GetGroupByName( cws->value.pszVal+1 ); if ( oldId == NULL ) { CHAR* p = Utf8Encode( cws->value.pszVal+1 ), szNewName[ 200 ]; UrlEncode( p, szNewName, sizeof szNewName ); msnNsThread->sendPacket( "REG", "%s %s", szId, szNewName ); free( p ); } else MSN_SetGroupNumber( oldId, iNumber ); } } else if ( cws->value.type == DBVT_ASCIIZ ) MSN_AddServerGroup( cws->value.pszVal+1 ); return 0; } if ( !strcmp( cws->szModule, "CList" ) && MyOptions.ManageServer ) { CHAR* szProto = ( CHAR* )MSN_CallService( MS_PROTO_GETCONTACTBASEPROTO, ( WPARAM ) hContact, 0 ); if ( szProto == NULL || strcmp( szProto, msnProtocolName )) return 0; if ( !strcmp( cws->szSetting, "Group" )) { if ( cws->value.type == DBVT_DELETED ) MSN_MoveContactToGroup( hContact, NULL ); else if ( cws->value.type == DBVT_ASCIIZ ) { LPCSTR p = MSN_GetGroupByName( cws->value.pszVal ); if ( p == NULL ) MSN_AddServerGroup( cws->value.pszVal ); MSN_MoveContactToGroup( hContact, cws->value.pszVal ); } return 0; } } }*/ } return(0); } int MraRebuildContactMenu(WPARAM wParam,LPARAM lParam) { BOOL bIsContactMRA,bHasEMail,bHasEMailMR,bChatAgent; DWORD dwContactSeverFlags=0; SIZE_T dwBlogStatusMsgSize=0; HANDLE hContact=(HANDLE)wParam; bIsContactMRA=IsContactMra(hContact); if (bIsContactMRA)//**deb ���������� ��������! {// proto own contact bHasEMail=TRUE; bHasEMailMR=TRUE; bChatAgent=IsContactChatAgent(hContact); GetContactBasicInfoW(hContact,NULL,NULL,NULL,&dwContactSeverFlags,NULL,NULL,0,NULL,NULL,0,NULL,NULL,0,NULL); DB_Mra_GetStaticStringW(hContact,DBSETTING_BLOGSTATUS,NULL,0,&dwBlogStatusMsgSize); }else{// non proto contact bHasEMail=FALSE; bHasEMailMR=FALSE; bChatAgent=FALSE; if (DB_Mra_GetByte(NULL,"HideMenuItemsForNonMRAContacts",MRA_DEFAULT_HIDE_MENU_ITEMS_FOR_NON_MRA)==FALSE) if (IsContactMraProto(hContact)==FALSE)// �������� ���������� ������� � �������� ������ ����� MRA if (GetContactEMailCount(hContact,FALSE)) { bHasEMail=TRUE; if (GetContactEMailCount(hContact,TRUE)) bHasEMailMR=TRUE; } } //"Request authorization" CListShowMenuItem(masMraSettings.hContactMenuItems[0],(masMraSettings.bLoggedIn && bIsContactMRA));// && (dwContactSeverFlags&CONTACT_INTFLAG_NOT_AUTHORIZED) //"Grant authorization" CListShowMenuItem(masMraSettings.hContactMenuItems[1],(masMraSettings.bLoggedIn && bIsContactMRA && bChatAgent==FALSE)); //"&Send postcard" CListShowMenuItem(masMraSettings.hContactMenuItems[2],(masMraSettings.bLoggedIn && bHasEMail && bChatAgent==FALSE)); //"&View Album" CListShowMenuItem(masMraSettings.hContactMenuItems[3],(masMraSettings.bLoggedIn && bHasEMailMR && bChatAgent==FALSE)); //"&Read Blog" CListShowMenuItem(masMraSettings.hContactMenuItems[4],(masMraSettings.bLoggedIn && bHasEMailMR && bChatAgent==FALSE)); //"Reply Blog Status" CListShowMenuItem(masMraSettings.hContactMenuItems[5],(masMraSettings.bLoggedIn && dwBlogStatusMsgSize && bChatAgent==FALSE)); //"View Video" CListShowMenuItem(masMraSettings.hContactMenuItems[6],(masMraSettings.bLoggedIn && bHasEMailMR && bChatAgent==FALSE)); //"Answers" CListShowMenuItem(masMraSettings.hContactMenuItems[7],(masMraSettings.bLoggedIn && bHasEMailMR && bChatAgent==FALSE)); //"World" CListShowMenuItem(masMraSettings.hContactMenuItems[8],(masMraSettings.bLoggedIn && bHasEMailMR && bChatAgent==FALSE)); //"Send &Nudge" if (masMraSettings.heNudgeReceived==NULL) { CListShowMenuItem(masMraSettings.hContactMenuItems[9],(masMraSettings.bLoggedIn && bIsContactMRA)); } return(0); } int MraExtraIconsApply(WPARAM wParam,LPARAM lParam) { SetExtraIcons((HANDLE)wParam); return(0); } int MraExtraIconsRebuild(WPARAM wParam,LPARAM lParam) { for(SIZE_T i=0;i<ADV_ICON_MAX;i++) masMraSettings.hAdvancedStatusItems[i]=(HANDLE)CallService(MS_CLIST_EXTRA_ADD_ICON,(WPARAM)IconLibGetIcon(masMraSettings.hAdvancedStatusIcons[i]),0); for(SIZE_T i=0;i<(MRA_XSTATUS_COUNT+1);i++) masMraSettings.hXStatusAdvancedStatusItems[i]=(HANDLE)CallService(MS_CLIST_EXTRA_ADD_ICON,(WPARAM)IconLibGetIcon(masMraSettings.hXStatusAdvancedStatusIcons[i]),0); return(0); } int MraRebuildStatusMenu(WPARAM wParam,LPARAM lParam) { CHAR szServiceFunction[MAX_PATH*2],*pszServiceFunctionName,szValueName[MAX_PATH]; WCHAR szItem[MAX_PATH+64],szStatusTitle[STATUS_TITLE_MAX+4]; CLISTMENUITEM mi={0}; memmove(szServiceFunction,PROTOCOL_NAMEA,PROTOCOL_NAME_SIZE); pszServiceFunctionName=szServiceFunction+PROTOCOL_NAME_LEN; //memmove(pszServiceFunctionName,MRA_XSTATUS_MENU,sizeof(MRA_XSTATUS_MENU)); mir_sntprintf(szItem,SIZEOF(szItem),L"%s Custom Status",PROTOCOL_NAMEW); mi.cbSize=sizeof(mi); mi.position=2000060000; mi.popupPosition=500085000; mi.ptszPopupName=szItem; //mi.ptszName=szStatusTitle; mi.flags=(CMIF_UNICODE|CMIF_ICONFROMICOLIB); mi.pszService=szServiceFunction; mi.pszContactOwner=PROTOCOL_NAMEA; for(SIZE_T i=0;i<MRA_XSTATUS_COUNT;i++) { mir_snprintf(pszServiceFunctionName,(SIZEOF(szServiceFunction)-PROTOCOL_NAME_LEN),"/menuXStatus%ld",i); mi.position++; if (i) { mir_snprintf(szValueName,SIZEOF(szValueName),"XStatus%ldName",i); if (DB_Mra_GetStaticStringW(NULL,szValueName,szStatusTitle,(STATUS_TITLE_MAX+1),NULL)) { szStatusTitle[STATUS_TITLE_MAX]=0; mi.ptszName=szStatusTitle; }else{// default xstatus name mi.ptszName=lpcszXStatusNameDef[i]; } mi.icolibItem=masMraSettings.hXStatusAdvancedStatusIcons[i]; }else{ mi.ptszName=lpcszXStatusNameDef[i]; mi.hIcon=NULL; } masMraSettings.hXStatusMenuItems[i] = Menu_AddStatusMenuItem(&mi); } return(0); } INT_PTR MraSetListeningTo(WPARAM wParam,LPARAM lParam) { LISTENINGTOINFO *pliInfo=(LISTENINGTOINFO*)lParam; if ( pliInfo == NULL || pliInfo->cbSize != sizeof(LISTENINGTOINFO)) { MraSendCommand_ChangeUserBlogStatus(MRIM_BLOG_STATUS_MUSIC,NULL,0,0); DB_Mra_DeleteValue(NULL,DBSETTING_BLOGSTATUSMUSIC); }else if (pliInfo->dwFlags & LTI_UNICODE) { LPWSTR pwszListeningTo; WCHAR wszListeningTo[MICBLOG_STATUS_MAX+4]; SIZE_T dwListeningToSize; if (ServiceExists(MS_LISTENINGTO_GETPARSEDTEXT)) { pwszListeningTo=(LPWSTR)CallService(MS_LISTENINGTO_GETPARSEDTEXT,(WPARAM)L"%track%. %title% - %artist% - %player%",(LPARAM)pliInfo); dwListeningToSize=lstrlenW(pwszListeningTo); }else{ pwszListeningTo=wszListeningTo; dwListeningToSize=mir_sntprintf(pwszListeningTo,SIZEOF(wszListeningTo),L"%s. %s - %s - %s", pliInfo->ptszTrack?pliInfo->ptszTrack:L"", pliInfo->ptszTitle?pliInfo->ptszTitle:L"", pliInfo->ptszArtist?pliInfo->ptszArtist:L"", pliInfo->ptszPlayer?pliInfo->ptszPlayer:L""); } DB_Mra_SetStringExW(NULL,DBSETTING_BLOGSTATUSMUSIC,pwszListeningTo,dwListeningToSize); MraSendCommand_ChangeUserBlogStatus(MRIM_BLOG_STATUS_MUSIC,pwszListeningTo,dwListeningToSize,0); if (pwszListeningTo!=wszListeningTo) mir_free(pwszListeningTo); } return(0); } int MraMusicChanged(WPARAM wParam,LPARAM lParam) { switch (wParam){ case WAT_EVENT_PLAYERSTATUS: if (1==lParam) {// stopped DB_Mra_DeleteValue(NULL,DBSETTING_BLOGSTATUSMUSIC); MraSendCommand_ChangeUserBlogStatus(MRIM_BLOG_STATUS_MUSIC,NULL,0,0); } break; case WAT_EVENT_NEWTRACK: { SONGINFO *psiSongInfo; if (WAT_RES_OK==CallService(MS_WAT_GETMUSICINFO,WAT_INF_UNICODE,(LPARAM)&psiSongInfo)) { WCHAR wszMusic[MICBLOG_STATUS_MAX+4]; SIZE_T dwMusicSize; dwMusicSize=mir_sntprintf(wszMusic,SIZEOF(wszMusic),L"%ld. %s - %s - %s",psiSongInfo->track,psiSongInfo->artist,psiSongInfo->title,psiSongInfo->player); DB_Mra_SetStringExW(NULL,DBSETTING_BLOGSTATUSMUSIC,wszMusic,dwMusicSize); MraSendCommand_ChangeUserBlogStatus(MRIM_BLOG_STATUS_MUSIC,wszMusic,dwMusicSize,0); } } break; default: break; } return(0); } INT_PTR MraGetCaps(WPARAM wParam,LPARAM lParam) { INT_PTR iRet; switch(wParam){ case PFLAGNUM_1: iRet=PF1_IM|PF1_FILE|PF1_MODEMSG|PF1_SERVERCLIST|PF1_AUTHREQ|PF1_ADDED|PF1_VISLIST|PF1_INVISLIST|PF1_INDIVSTATUS|PF1_PEER2PEER|/*PF1_NEWUSER|*/PF1_CHAT|PF1_BASICSEARCH|PF1_EXTSEARCH|PF1_CANRENAMEFILE|PF1_FILERESUME|PF1_ADDSEARCHRES|PF1_CONTACT|PF1_SEARCHBYEMAIL|PF1_USERIDISEMAIL|PF1_SEARCHBYNAME|PF1_EXTSEARCHUI; break; case PFLAGNUM_2: iRet=PF2_ONLINE|PF2_INVISIBLE|PF2_SHORTAWAY|PF2_HEAVYDND|PF2_FREECHAT; break; case PFLAGNUM_3: iRet=PF2_ONLINE|PF2_INVISIBLE|PF2_SHORTAWAY|PF2_HEAVYDND|PF2_FREECHAT; break; case PFLAGNUM_4: iRet=PF4_FORCEAUTH|PF4_FORCEADDED|/*PF4_NOCUSTOMAUTH|*/PF4_SUPPORTTYPING|PF4_AVATARS|PF4_IMSENDUTF; break; case PFLAG_UNIQUEIDTEXT: iRet=(INT_PTR)Translate("E-mail address"); break; case PFLAG_MAXCONTACTSPERPACKET: iRet=MRA_MAXCONTACTSPERPACKET; break; case PFLAG_UNIQUEIDSETTING: iRet=(INT_PTR)"e-mail"; break; case PFLAG_MAXLENOFMESSAGE: iRet=MRA_MAXLENOFMESSAGE; break; default: iRet=0; break; } return(iRet); } INT_PTR MraGetName(WPARAM wParam,LPARAM lParam) { lstrcpynA((LPSTR)lParam,PROTOCOL_DISPLAY_NAMEA,wParam); return(0); } INT_PTR MraLoadIcon(WPARAM wParam,LPARAM lParam) { UINT id; switch(wParam&0xFFFF){ case PLI_PROTOCOL:id=IDI_MRA;break;// IDI_TM is the main icon for the protocol default:return(0); } return((INT_PTR)LoadImage(masMraSettings.hInstance,MAKEINTRESOURCE(id),IMAGE_ICON,GetSystemMetrics((wParam&PLIF_SMALL)?SM_CXSMICON:SM_CXICON),GetSystemMetrics((wParam&PLIF_SMALL)?SM_CYSMICON:SM_CYICON),0)); } INT_PTR MraSetStatus(WPARAM wParam,LPARAM lParam) { // remap global statuses to local supported switch(wParam){ case ID_STATUS_OFFLINE: wParam=ID_STATUS_OFFLINE; break; case ID_STATUS_ONLINE: wParam=ID_STATUS_ONLINE; break; case ID_STATUS_AWAY: wParam=ID_STATUS_AWAY; break; case ID_STATUS_DND: case ID_STATUS_OCCUPIED: wParam=ID_STATUS_DND; break; case ID_STATUS_FREECHAT: wParam=ID_STATUS_FREECHAT; break; case ID_STATUS_INVISIBLE: wParam=ID_STATUS_INVISIBLE; break; case ID_STATUS_NA: case ID_STATUS_ONTHEPHONE: case ID_STATUS_OUTTOLUNCH: wParam=ID_STATUS_AWAY; break; default: wParam=ID_STATUS_OFFLINE; break; } if (InterlockedExchangeAdd((volatile LONG*)&masMraSettings.dwStatusMode,0)==wParam && wParam!=lParam) {// nothink to change ProtoBroadcastAckAsynchEx(PROTOCOL_NAMEA,NULL,ACKTYPE_STATUS,ACKRESULT_SUCCESS,(HANDLE)wParam,wParam,0); }else{ DWORD dwOldStatusMode; if ((masMraSettings.dwDesiredStatusMode=wParam)==ID_STATUS_OFFLINE) {//set all contacts to offline masMraSettings.bLoggedIn=FALSE; dwOldStatusMode=InterlockedExchange((volatile LONG*)&masMraSettings.dwStatusMode,masMraSettings.dwDesiredStatusMode); if (dwOldStatusMode>ID_STATUS_OFFLINE) {// ���� � offline, ������ ���� �� ������ ���������� for(HANDLE hContact=(HANDLE)CallService(MS_DB_CONTACT_FINDFIRST,0,0);hContact!=NULL;hContact=(HANDLE)CallService(MS_DB_CONTACT_FINDNEXT,(WPARAM)hContact,0)) {// ������� ���� ��������� �������������� �������� � MRA SetContactBasicInfoW(hContact,SCBIFSI_LOCK_CHANGES_EVENTS,(SCBIF_ID|SCBIF_GROUP_ID|SCBIF_SERVER_FLAG|SCBIF_STATUS),-1,-1,0,0,ID_STATUS_OFFLINE,NULL,0,NULL,0,NULL,0); } } Netlib_CloseHandle(masMraSettings.hConnection); }else{ // ���� offline �� ����� ������ connecting, �� ��������� ��� offline dwOldStatusMode=InterlockedCompareExchange((volatile LONG*)&masMraSettings.dwStatusMode,ID_STATUS_CONNECTING,ID_STATUS_OFFLINE); switch(dwOldStatusMode){ case ID_STATUS_OFFLINE:// offline, connecting if (StartConnect()!=NO_ERROR) {//err masMraSettings.bLoggedIn=FALSE; masMraSettings.dwDesiredStatusMode=ID_STATUS_OFFLINE; dwOldStatusMode=InterlockedExchange((volatile LONG*)&masMraSettings.dwStatusMode,masMraSettings.dwDesiredStatusMode); } break; case ID_STATUS_ONLINE:// connected, change status case ID_STATUS_AWAY: case ID_STATUS_DND: case ID_STATUS_FREECHAT: case ID_STATUS_INVISIBLE: MraSendNewStatus(masMraSettings.dwDesiredStatusMode,MraGetXStatusInternal(),NULL,0,NULL,0); case ID_STATUS_CONNECTING: if (dwOldStatusMode==ID_STATUS_CONNECTING && wParam!=lParam) {// ������������� ������� � ����� ������ (����� offline) �� ������� connecting, ���� �� �� ������ ����� �������� break; } default: dwOldStatusMode=InterlockedExchange((volatile LONG*)&masMraSettings.dwStatusMode,masMraSettings.dwDesiredStatusMode); //MraSendNewStatus(masMraSettings.dwDesiredStatusMode,MraGetXStatusInternal(),NULL,0,NULL,0); break; } } MraSetContactStatus(NULL,masMraSettings.dwStatusMode); ProtoBroadcastAckAsynchEx(PROTOCOL_NAMEA,NULL,ACKTYPE_STATUS,ACKRESULT_SUCCESS,(HANDLE)dwOldStatusMode,masMraSettings.dwStatusMode,0); } return(0); } INT_PTR MraGetStatus(WPARAM wParam,LPARAM lParam) { return(InterlockedExchangeAdd((volatile LONG*)&masMraSettings.dwStatusMode,0)); } DWORD MraSetXStatusInternal(DWORD dwXStatus) { DWORD dwOldStatusMode; if (IsXStatusValid(dwXStatus)) { CHAR szValueName[MAX_PATH]; WCHAR szBuff[4096]; SIZE_T dwBuffSize; // obsolete (TODO: remove in next version) mir_snprintf(szValueName,SIZEOF(szValueName),"XStatus%ldName",dwXStatus); if (DB_Mra_GetStaticStringW(NULL,szValueName,szBuff,SIZEOF(szBuff),&dwBuffSize)==FALSE) {// default xstatus name lstrcpynW(szBuff,lpcszXStatusNameDef[dwXStatus],SIZEOF(szBuff)); dwBuffSize=lstrlenW(szBuff); } if (dwBuffSize>STATUS_TITLE_MAX) dwBuffSize=STATUS_TITLE_MAX; DB_Mra_SetStringExW(NULL,DBSETTING_XSTATUSNAME,szBuff,dwBuffSize); // obsolete (TODO: remove in next version) mir_snprintf(szValueName,SIZEOF(szValueName),"XStatus%ldMsg",dwXStatus); if (DB_Mra_GetStaticStringW(NULL,szValueName,szBuff,SIZEOF(szBuff),&dwBuffSize)) {// custom xstatus description if (dwBuffSize>STATUS_DESC_MAX) dwBuffSize=STATUS_DESC_MAX; DB_Mra_SetStringExW(NULL,DBSETTING_XSTATUSMSG,szBuff,dwBuffSize); }else{// default xstatus description DB_Mra_DeleteValue(NULL,DBSETTING_XSTATUSMSG); } }else{ DB_Mra_DeleteValue(NULL,DBSETTING_XSTATUSNAME); DB_Mra_DeleteValue(NULL,DBSETTING_XSTATUSMSG); dwXStatus=MRA_MIR_XSTATUS_NONE; } dwOldStatusMode=InterlockedExchange((volatile LONG*)&masMraSettings.dwXStatusMode,dwXStatus); DB_Mra_SetByte(NULL,DBSETTING_XSTATUSID,(BYTE)dwXStatus); MraSendNewStatus(MraGetStatus(0,0),dwXStatus,NULL,0,NULL,0); return(dwOldStatusMode); } DWORD MraGetXStatusInternal() { return(InterlockedExchangeAdd((volatile LONG*)&masMraSettings.dwXStatusMode,0)); } INT_PTR MraSetXStatus(WPARAM wParam,LPARAM lParam) {// obsolete (TODO: remove in next version) INT_PTR iRet=0; if (IsXStatusValid(wParam) || wParam==MRA_MIR_XSTATUS_NONE) { MraSetXStatusInternal(wParam); iRet=wParam; } return(iRet); } INT_PTR MraSetXStatusEx(WPARAM wParam,LPARAM lParam) { INT_PTR iRet=1; DWORD dwXStatus; ICQ_CUSTOM_STATUS *pData=(ICQ_CUSTOM_STATUS*)lParam; if (pData->cbSize>=sizeof(ICQ_CUSTOM_STATUS)) { iRet=0; if (pData->flags&CSSF_MASK_STATUS) {// fill status member dwXStatus=(*pData->status); if (IsXStatusValid(dwXStatus)==FALSE && dwXStatus!=MRA_MIR_XSTATUS_NONE) iRet=1; }else{ dwXStatus=MraGetXStatusInternal(); } if (pData->flags&(CSSF_MASK_NAME|CSSF_MASK_MESSAGE) && iRet==0) {// if (IsXStatusValid(dwXStatus) || dwXStatus==MRA_MIR_XSTATUS_NONE) { CHAR szValueName[MAX_PATH]; SIZE_T dwBuffSize; if (pData->flags&CSSF_MASK_NAME) {// set custom status name mir_snprintf(szValueName,SIZEOF(szValueName),"XStatus%ldName",dwXStatus); if (pData->flags&CSSF_UNICODE) { dwBuffSize=lstrlenW(pData->pwszName); if (dwBuffSize>STATUS_TITLE_MAX) dwBuffSize=STATUS_TITLE_MAX; DB_Mra_SetStringExW(NULL,szValueName,pData->pwszName,dwBuffSize); DB_Mra_SetStringExW(NULL,DBSETTING_XSTATUSNAME,pData->pwszName,dwBuffSize); }else{ dwBuffSize=lstrlenA(pData->pszName); if (dwBuffSize>STATUS_TITLE_MAX) dwBuffSize=STATUS_TITLE_MAX; DB_Mra_SetStringExA(NULL,szValueName,pData->pszName,dwBuffSize); DB_Mra_SetStringExA(NULL,DBSETTING_XSTATUSNAME,pData->pszName,dwBuffSize); } } if (pData->flags&CSSF_MASK_MESSAGE) {// set custom status message mir_snprintf(szValueName,SIZEOF(szValueName),"XStatus%ldMsg",dwXStatus); if (pData->flags&CSSF_UNICODE) { dwBuffSize=lstrlenW(pData->pwszMessage); if (dwBuffSize>STATUS_TITLE_MAX) dwBuffSize=STATUS_DESC_MAX; DB_Mra_SetStringExW(NULL,szValueName,pData->pwszMessage,dwBuffSize); DB_Mra_SetStringExW(NULL,DBSETTING_XSTATUSMSG,pData->pwszMessage,dwBuffSize); }else{ dwBuffSize=lstrlenA(pData->pszMessage); if (dwBuffSize>STATUS_TITLE_MAX) dwBuffSize=STATUS_DESC_MAX; DB_Mra_SetStringExA(NULL,szValueName,pData->pszMessage,dwBuffSize); DB_Mra_SetStringExA(NULL,DBSETTING_XSTATUSMSG,pData->pszMessage,dwBuffSize); } } }else{// ������� ������ ���� �� �� ������� ������� � ���������� �������� ��������� ��� "���" ������� if ((pData->flags&CSSF_MASK_STATUS)==0) iRet=1; } } if (pData->flags&(CSSF_MASK_STATUS|CSSF_MASK_NAME|CSSF_MASK_MESSAGE) && iRet==0) {// set/update xstatus code and/or message MraSetXStatusInternal(dwXStatus); } if (pData->flags&CSSF_DISABLE_UI) {// hide menu items masMraSettings.bHideXStatusUI=(*pData->wParam)? FALSE:TRUE; for (DWORD i=0;i<MRA_XSTATUS_COUNT;i++) CListShowMenuItem(masMraSettings.hXStatusMenuItems[i],!masMraSettings.bHideXStatusUI); } } return(iRet); } INT_PTR MraGetXStatus(WPARAM wParam,LPARAM lParam) { INT_PTR iRet; if (masMraSettings.bLoggedIn) { if (wParam) *((CHAR**)wParam)=DBSETTING_XSTATUSNAME; if (lParam) *((CHAR**)lParam)=DBSETTING_XSTATUSMSG; iRet=MraGetXStatusInternal(); }else{ iRet=0; } return(iRet); } INT_PTR MraGetXStatusEx(WPARAM wParam,LPARAM lParam) { INT_PTR iRet=1; HANDLE hContact=(HANDLE)wParam; ICQ_CUSTOM_STATUS *pData=(ICQ_CUSTOM_STATUS*)lParam; if (pData->cbSize>=sizeof(ICQ_CUSTOM_STATUS)) { DWORD dwXStatus; iRet=0; if (pData->flags&CSSF_MASK_STATUS) {// fill status member *pData->status=MraGetXStatusInternal(); } if (pData->flags&CSSF_MASK_NAME) {// fill status name member if (pData->flags&CSSF_DEFAULT_NAME) { dwXStatus=(*pData->wParam); if (IsXStatusValid(dwXStatus)) { if (pData->flags&CSSF_UNICODE) { lstrcpynW(pData->pwszName,lpcszXStatusNameDef[dwXStatus],(STATUS_TITLE_MAX+1)); }else{ SIZE_T dwStatusTitleSize; dwStatusTitleSize=lstrlenW(lpcszXStatusNameDef[dwXStatus]); if (dwStatusTitleSize>STATUS_TITLE_MAX) dwStatusTitleSize=STATUS_TITLE_MAX; WideCharToMultiByte(MRA_CODE_PAGE,0,lpcszXStatusNameDef[dwXStatus],dwStatusTitleSize,pData->pszName,MAX_PATH,NULL,NULL ); (*((CHAR*)(pData->pszName+dwStatusTitleSize)))=0; } }else{// failure iRet=1; } }else{ if (pData->flags&CSSF_UNICODE) { DB_Mra_GetStaticStringW(hContact,DBSETTING_XSTATUSNAME,pData->pwszName,(STATUS_TITLE_MAX+1),NULL); }else{ DB_Mra_GetStaticStringA(hContact,DBSETTING_XSTATUSNAME,pData->pszName,(STATUS_TITLE_MAX+1),NULL); } } } if (pData->flags&CSSF_MASK_MESSAGE) {// fill status message member if (pData->flags&CSSF_UNICODE) { DB_Mra_GetStaticStringW(hContact,DBSETTING_XSTATUSMSG,pData->pwszMessage,(STATUS_DESC_MAX+1),NULL); }else{ DB_Mra_GetStaticStringA(hContact,DBSETTING_XSTATUSMSG,pData->pszMessage,(STATUS_DESC_MAX+1),NULL); } } if (pData->flags&CSSF_DISABLE_UI) { if (pData->wParam) (*pData->wParam)=masMraSettings.bHideXStatusUI; } if (pData->flags&CSSF_STATUSES_COUNT) { if (pData->wParam) (*pData->wParam)=(MRA_XSTATUS_COUNT-1); } if (pData->flags&CSSF_STR_SIZES) {//**deb ����� ��������������, ������ �������� �������� ��� ��� �������� ��� ��������� ����� ������� if (pData->wParam) DB_Mra_GetStaticStringW(hContact,DBSETTING_XSTATUSNAME,NULL,0,(SIZE_T*)pData->wParam); if (pData->lParam) DB_Mra_GetStaticStringW(hContact,DBSETTING_XSTATUSMSG,NULL,0,(SIZE_T*)pData->lParam); } } return(iRet); } INT_PTR MraGetXStatusIcon(WPARAM wParam,LPARAM lParam) { INT_PTR iRet; if (wParam==0) wParam=MraGetXStatusInternal(); iRet=(INT_PTR)IconLibGetIconEx(masMraSettings.hXStatusAdvancedStatusIcons[wParam],lParam); return(iRet); } DWORD MraSendNewStatus(DWORD dwStatusMir,DWORD dwXStatusMir,LPWSTR lpwszStatusTitle,SIZE_T dwStatusTitleSize,LPWSTR lpwszStatusDesc,SIZE_T dwStatusDescSize) { if (masMraSettings.bLoggedIn) { CHAR szValueName[MAX_PATH]; WCHAR wszStatusTitle[STATUS_TITLE_MAX+4],wszStatusDesc[STATUS_DESC_MAX+4]; DWORD dwStatus,dwXStatus; dwStatus=GetMraStatusFromMiradaStatus(dwStatusMir,dwXStatusMir,&dwXStatus); if (IsXStatusValid(dwXStatusMir)) {// xstatuses if (lpwszStatusTitle==NULL || dwStatusTitleSize==0) { mir_snprintf(szValueName,SIZEOF(szValueName),"XStatus%ldName",dwXStatusMir); if (DB_Mra_GetStaticStringW(NULL,szValueName,wszStatusTitle,(STATUS_TITLE_MAX+1),&dwStatusTitleSize)) {// custom xstatus name lpwszStatusTitle=wszStatusTitle; }else{// default xstatus name lpwszStatusTitle=TranslateW(lpcszXStatusNameDef[dwXStatusMir]); dwStatusTitleSize=lstrlenW(lpwszStatusTitle); } } if (lpwszStatusDesc==NULL || dwStatusDescSize==0) { mir_snprintf(szValueName,SIZEOF(szValueName),"XStatus%ldMsg",dwXStatusMir); if (DB_Mra_GetStaticStringW(NULL,szValueName,wszStatusDesc,(STATUS_DESC_MAX+1),&dwStatusDescSize)) {// custom xstatus description lpwszStatusDesc=wszStatusDesc; }else{// default xstatus description lpwszStatusDesc=NULL; dwStatusDescSize=0; } } }else{// not xstatuses if (lpwszStatusTitle==NULL || dwStatusTitleSize==0) { lpwszStatusTitle=GetStatusModeDescriptionW(dwStatusMir); dwStatusTitleSize=lstrlenW(lpwszStatusTitle); } } MraSendCommand_ChangeStatusW(dwStatus,lpcszStatusUri[dwXStatus],lstrlenA(lpcszStatusUri[dwXStatus]),lpwszStatusTitle,dwStatusTitleSize,lpwszStatusDesc,dwStatusDescSize,((DB_Mra_GetByte(NULL,"RTFReceiveEnable",MRA_DEFAULT_RTF_RECEIVE_ENABLE)? FEATURE_FLAG_RTF_MESSAGE:0)|MRA_FEATURE_FLAGS)); } return(0); } INT_PTR MraSetAwayMsgA(WPARAM wParam,LPARAM lParam) { INT_PTR iRet=1; if (masMraSettings.bLoggedIn) { WCHAR wszStatusDesc[STATUS_DESC_MAX+1]; SIZE_T dwStatusDescSize; if (lParam) { dwStatusDescSize=MultiByteToWideChar(MRA_CODE_PAGE,0,(LPSTR)lParam,-1,wszStatusDesc,(SIZEOF(wszStatusDesc)-1)); }else{ dwStatusDescSize=0; } wszStatusDesc[dwStatusDescSize]=0; iRet=MraSetAwayMsg(wParam,(LPARAM)wszStatusDesc); } return(iRet); } INT_PTR MraSetAwayMsg(WPARAM wParam,LPARAM lParam) { INT_PTR iRet=1; if (masMraSettings.bLoggedIn) { LPWSTR lpwszStatusDesc; DWORD dwStatus,dwXStatus; SIZE_T dwStatusDescSize; lpwszStatusDesc=(LPWSTR)lParam; dwStatusDescSize=lstrlenW(lpwszStatusDesc); dwStatus=MraGetStatus(0,0); dwXStatus=MraGetXStatusInternal(); if (dwStatus!=ID_STATUS_ONLINE || IsXStatusValid(dwXStatus)==FALSE) {// �� ���������� ����� ��������� ����� ��� ���������, ��� ��������� ������ ���� ��������� dwStatusDescSize=min(dwStatusDescSize,STATUS_DESC_MAX); MraSendNewStatus(dwStatus,dwXStatus,NULL,0,lpwszStatusDesc,dwStatusDescSize); } iRet=0; } return(iRet); } INT_PTR MraGetAwayMsg(WPARAM wParam,LPARAM lParam) { INT_PTR iRet=0; if (masMraSettings.bLoggedIn && lParam) { CHAR szStatusDesc[MICBLOG_STATUS_MAX+MICBLOG_STATUS_MAX+MAX_PATH],szBlogStatus[MICBLOG_STATUS_MAX+4],szTime[64]; DWORD dwTime; SIZE_T dwStatusDescSize; CCSDATA* ccs=(CCSDATA*)lParam; SYSTEMTIME stBlogStatusTime={0}; if (DB_Mra_GetStaticStringA(ccs->hContact,DBSETTING_BLOGSTATUS,szBlogStatus,SIZEOF(szBlogStatus),NULL)) { dwTime=DB_Mra_GetDword(ccs->hContact,DBSETTING_BLOGSTATUSTIME,0); if (dwTime && MakeLocalSystemTimeFromTime32(dwTime,&stBlogStatusTime)) { mir_snprintf(szTime,SIZEOF(szTime),"%04ld.%02ld.%02ld %02ld:%02ld: ",stBlogStatusTime.wYear,stBlogStatusTime.wMonth,stBlogStatusTime.wDay,stBlogStatusTime.wHour,stBlogStatusTime.wMinute); }else{ szTime[0]=0; } dwStatusDescSize=mir_snprintf(szStatusDesc,SIZEOF(szStatusDesc),"%s%s",szTime,szBlogStatus); iRet=GetTickCount(); ProtoBroadcastAckAsynchEx(PROTOCOL_NAMEA,ccs->hContact,ACKTYPE_AWAYMSG,ACKRESULT_SUCCESS,(HANDLE)iRet,(LPARAM)szStatusDesc,dwStatusDescSize); } } return(iRet); } INT_PTR MraAuthAllow(WPARAM wParam,LPARAM lParam) { INT_PTR iRet=1; if (masMraSettings.bLoggedIn) { DBEVENTINFO dbei={0}; dbei.cbSize=sizeof(dbei); if ((dbei.cbBlob=CallService(MS_DB_EVENT_GETBLOBSIZE,wParam,0))!=-1) { dbei.pBlob=(PBYTE)MEMALLOC(dbei.cbBlob); if (dbei.pBlob) { if (CallService(MS_DB_EVENT_GET,wParam,(LPARAM)&dbei)==0) if (dbei.eventType==EVENTTYPE_AUTHREQUEST) if (CompareStringA(MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),NORM_IGNORECASE,dbei.szModule,-1,PROTOCOL_NAMEA,PROTOCOL_NAME_LEN)==CSTR_EQUAL) { LPSTR lpszNick,lpszFirstName,lpszLastName,lpszEMail,lpszRequestReason; lpszNick=(LPSTR)(dbei.pBlob+sizeof(DWORD)*2); lpszFirstName=lpszNick+lstrlenA(lpszNick)+1; lpszLastName=lpszFirstName+lstrlenA(lpszFirstName)+1; lpszEMail=lpszLastName+lstrlenA(lpszLastName)+1; lpszRequestReason=lpszEMail+lstrlenA(lpszEMail)+1; MraSendCommand_Authorize(lpszEMail,lstrlenA(lpszEMail)); iRet=0; } MEMFREE(dbei.pBlob); } } } return(iRet); } INT_PTR MraAuthDeny(WPARAM wParam,LPARAM lParam) { INT_PTR iRet=1; if (lParam && masMraSettings.bLoggedIn) { DBEVENTINFO dbei={0}; dbei.cbSize=sizeof(dbei); if ((dbei.cbBlob=CallService(MS_DB_EVENT_GETBLOBSIZE,wParam,0))!=-1) { dbei.pBlob=(PBYTE)MEMALLOC(dbei.cbBlob); if (dbei.pBlob) { if (CallService(MS_DB_EVENT_GET,wParam,(LPARAM)&dbei)==0) if (dbei.eventType==EVENTTYPE_AUTHREQUEST) if (CompareStringA(MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),NORM_IGNORECASE,dbei.szModule,-1,PROTOCOL_NAMEA,PROTOCOL_NAME_LEN)==CSTR_EQUAL) { LPSTR lpszNick,lpszFirstName,lpszLastName,lpszEMail,lpszRequestReason; SIZE_T dwEMailSize,dwRequestReasonSize; //HANDLE hContact; lpszNick=(LPSTR)(dbei.pBlob+sizeof(DWORD)*2); lpszFirstName=lpszNick+lstrlenA(lpszNick)+1; lpszLastName=lpszFirstName+lstrlenA(lpszFirstName)+1; lpszEMail=lpszLastName+lstrlenA(lpszLastName)+1; dwEMailSize=lstrlenA(lpszEMail); lpszRequestReason=(LPSTR)lParam; dwRequestReasonSize=lstrlenA(lpszRequestReason); if (dwRequestReasonSize) MraSendCommand_MessageW(FALSE,NULL,0,0,lpszEMail,dwEMailSize,(LPWSTR)lpszRequestReason,dwRequestReasonSize,NULL,0); //hContact=MraHContactFromEmail(lpszEMail,dwEMailSize,FALSE,TRUE,NULL); //if (DBGetContactSettingByte(hContact,"CList","NotOnList",0)) CallService(MS_DB_CONTACT_DELETE,(WPARAM)hContact,0); iRet=0; } MEMFREE(dbei.pBlob); } } } return(iRet); } HANDLE AddToListByEmail(MRA_LPS *plpsEMail,MRA_LPS *plpsNick,MRA_LPS *plpsFirstName,MRA_LPS *plpsLastName,DWORD dwFlags) { HANDLE hContact=NULL; if (plpsEMail) if (plpsEMail->dwSize) { BOOL bAdded; hContact=MraHContactFromEmail(plpsEMail->lpszData,plpsEMail->dwSize,TRUE,TRUE,&bAdded); if (hContact) { if (plpsNick) if (plpsNick->dwSize) { DB_Mra_SetLPSStringA(hContact,"Nick",plpsNick); if (bAdded) {// ������� ����������� ������� � ����///***deb //SetContactBasicInfoW(hContact,SCBIFSI_LOCK_CHANGES_EVENTS,SCBIF_NICK,0,0,0,0,0,NULL,0,plpsNick->lpszData,plpsNick->dwSize,NULL,0); } } if (plpsFirstName) if (plpsFirstName->dwSize) DB_Mra_SetLPSStringA(hContact,"FirstName",plpsFirstName); if (plpsLastName) if (plpsLastName->dwSize) DB_Mra_SetLPSStringA(hContact,"LastName",plpsLastName); if (dwFlags&PALF_TEMPORARY) { DBWriteContactSettingByte(hContact,"CList","Hidden",1); }else{ DBDeleteContactSetting(hContact,"CList","NotOnList"); } if (bAdded) MraUpdateContactInfo(hContact); } } return(hContact); } INT_PTR MraAddToList(WPARAM wParam,LPARAM lParam) { INT_PTR iRet; PROTOSEARCHRESULT *psr=(PROTOSEARCHRESULT*)lParam; if (psr->cbSize==sizeof(PROTOSEARCHRESULT)) { MRA_LPS lpsEMail,lpsNick,lpsFirstName,lpsLastName; lpsEMail.dwSize=lstrlenA((LPSTR)psr->email); lpsEMail.lpwszData=psr->email; lpsNick.dwSize=lstrlenA((LPSTR)psr->nick); lpsNick.lpwszData=psr->nick; lpsFirstName.dwSize=lstrlenA((LPSTR)psr->firstName); lpsFirstName.lpwszData=psr->firstName; lpsLastName.dwSize=lstrlenA((LPSTR)psr->lastName); lpsLastName.lpwszData=psr->lastName; iRet=(INT_PTR)AddToListByEmail(&lpsEMail,&lpsNick,&lpsFirstName,&lpsLastName,wParam); }else{ iRet=0; } return(iRet); } INT_PTR MraAddToListByEvent(WPARAM wParam,LPARAM lParam) { INT_PTR iRet=0; DBEVENTINFO dbei={0}; dbei.cbSize=sizeof(dbei); if ((dbei.cbBlob=CallService(MS_DB_EVENT_GETBLOBSIZE,lParam,0))!=-1) { dbei.pBlob=(PBYTE)MEMALLOC(dbei.cbBlob); if (dbei.pBlob) { if (CallService(MS_DB_EVENT_GET,lParam,(LPARAM)&dbei)==0) if (CompareStringA(MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),NORM_IGNORECASE,dbei.szModule,-1,PROTOCOL_NAMEA,PROTOCOL_NAME_LEN)==CSTR_EQUAL) if (dbei.eventType==EVENTTYPE_AUTHREQUEST || dbei.eventType==EVENTTYPE_CONTACTS) { LPSTR lpszRequestReason; MRA_LPS lpsEMail,lpsNick,lpsFirstName,lpsLastName; lpsNick.lpszData=(LPSTR)(dbei.pBlob+ ((dbei.eventType==EVENTTYPE_AUTHREQUEST)?(sizeof(DWORD)*2):0)); lpsNick.dwSize=lstrlenA(lpsNick.lpszData); lpsFirstName.lpszData=lpsNick.lpszData+lpsNick.dwSize+1; lpsFirstName.dwSize=lstrlenA(lpsFirstName.lpszData); lpsLastName.lpszData=lpsFirstName.lpszData+lpsFirstName.dwSize+1; lpsLastName.dwSize=lstrlenA(lpsLastName.lpszData); lpsEMail.lpszData=lpsLastName.lpszData+lpsLastName.dwSize+1; lpsEMail.dwSize=lstrlenA(lpsEMail.lpszData); lpszRequestReason=lpsEMail.lpszData+lpsEMail.dwSize+1; iRet=(INT_PTR)AddToListByEmail(&lpsEMail,&lpsNick,&lpsFirstName,&lpsLastName,0); }else{ dbei.eventType=dbei.eventType; DebugBreak(); } MEMFREE(dbei.pBlob); } } return(iRet); } /* --------------------------------- | Receiving | --------------------------------- */ INT_PTR MraRecvMessage(WPARAM wParam,LPARAM lParam) { CallService(MS_PROTO_RECVMSG,0,(LPARAM)lParam); return(0); } INT_PTR MraRecvContacts(WPARAM wParam,LPARAM lParam) { CCSDATA* ccs=(CCSDATA*)lParam; DBEVENTINFO dbei={0}; PROTORECVEVENT* pre=(PROTORECVEVENT*)ccs->lParam; dbei.cbSize=sizeof(dbei); dbei.szModule=PROTOCOL_NAMEA; dbei.timestamp=pre->timestamp; dbei.flags=(pre->flags&PREF_CREATEREAD)?DBEF_READ:0; dbei.eventType=EVENTTYPE_CONTACTS; dbei.cbBlob=pre->lParam; dbei.pBlob=(PBYTE)pre->szMessage; CallService(MS_DB_EVENT_ADD,(WPARAM)ccs->hContact,(LPARAM)&dbei); return(0); } INT_PTR MraRecvFile(WPARAM wParam,LPARAM lParam) { CCSDATA* ccs=(CCSDATA*)lParam; PROTORECVFILET* pre=(PROTORECVFILET*)ccs->lParam; CallService(MS_PROTO_RECVFILET,0,(LPARAM)lParam); return(0); } INT_PTR MraRecvAuth(WPARAM wParam,LPARAM lParam) { CCSDATA* ccs=(CCSDATA*)lParam; DBEVENTINFO dbei={0}; PROTORECVEVENT* pre=(PROTORECVEVENT*)ccs->lParam; dbei.cbSize=sizeof(dbei); dbei.szModule=PROTOCOL_NAMEA; dbei.timestamp=pre->timestamp; dbei.flags=(pre->flags&PREF_CREATEREAD)?DBEF_READ:0; dbei.eventType=EVENTTYPE_AUTHREQUEST; dbei.cbBlob=pre->lParam; dbei.pBlob=(PBYTE)pre->szMessage; CallService(MS_DB_EVENT_ADD,(WPARAM)NULL,(LPARAM)&dbei); return(0); } /* --------------------------------- | Sending | --------------------------------- */ INT_PTR MraSendAuthRequest(WPARAM wParam,LPARAM lParam) {// internal only INT_PTR iRet=1; if (masMraSettings.bLoggedIn && lParam) { BOOL bSlowSend; CHAR szEMail[MAX_EMAIL_LEN]; LPWSTR lpwszMessage; SIZE_T dwEMailSize,dwMessageSize; CCSDATA* ccs=(CCSDATA*)lParam; if (ccs->wParam&PREF_UNICODE)//flags { lpwszMessage=(LPWSTR)ccs->lParam; dwMessageSize=lstrlenW(lpwszMessage); }else{ dwEMailSize=lstrlenA((LPSTR)ccs->lParam); lpwszMessage=(LPWSTR)MEMALLOC(((dwEMailSize+MAX_PATH)*sizeof(WCHAR))); if (lpwszMessage) { dwMessageSize=MultiByteToWideChar(MRA_CODE_PAGE,0,(LPSTR)ccs->lParam,dwEMailSize,lpwszMessage,(dwEMailSize+MAX_PATH)); } } if (lpwszMessage) { if (DB_Mra_GetStaticStringA(ccs->hContact,"e-mail",szEMail,SIZEOF(szEMail),&dwEMailSize)) { bSlowSend=DB_Mra_GetByte(NULL,"SlowSend",MRA_DEFAULT_SLOW_SEND); iRet=MraSendCommand_MessageW(bSlowSend,ccs->hContact,ACKTYPE_AUTHREQ,MESSAGE_FLAG_AUTHORIZE,szEMail,dwEMailSize,lpwszMessage,dwMessageSize,NULL,0); if (bSlowSend==FALSE) { ProtoBroadcastAckAsynchEx(PROTOCOL_NAMEA,ccs->hContact,ACKTYPE_AUTHREQ,ACKRESULT_SUCCESS,(HANDLE)iRet,(LPARAM)NULL,0); } iRet=0; } if (lpwszMessage!=(LPWSTR)ccs->lParam) MEMFREE(lpwszMessage); } } return(iRet); } INT_PTR MraSendMessage(WPARAM wParam,LPARAM lParam) { INT_PTR iRet=0; CCSDATA* ccs=(CCSDATA*)lParam; if (masMraSettings.bLoggedIn) { BOOL bSlowSend,bMemAllocated=FALSE; CHAR szEMail[MAX_EMAIL_LEN]; DWORD dwFlags=0; LPSTR lpszMessage; LPWSTR lpwszMessage=NULL; SIZE_T dwEMailSize,dwMessageSize=0; lpszMessage=(LPSTR)ccs->lParam; dwMessageSize=lstrlenA(lpszMessage); if (ccs->wParam&PREF_UNICODE)//flags { lpwszMessage=(LPWSTR)(lpszMessage+dwMessageSize+1); }else if (ccs->wParam&PREF_UTF){// convert to unicode from utf8 lpwszMessage=(LPWSTR)MEMALLOC(((dwMessageSize+MAX_PATH)*sizeof(WCHAR))); if (lpwszMessage) { dwMessageSize=MultiByteToWideChar(CP_UTF8,0,lpszMessage,dwMessageSize,lpwszMessage,(dwMessageSize+MAX_PATH)); bMemAllocated=TRUE; } }else{// convert to unicode from ansi MraPopupShowFromAgentW(MRA_POPUP_TYPE_DEBUG,0,TranslateW(L"Send ANSI")); lpwszMessage=(LPWSTR)MEMALLOC(((dwMessageSize+MAX_PATH)*sizeof(WCHAR))); if (lpwszMessage) { dwMessageSize=MultiByteToWideChar(MRA_CODE_PAGE,0,lpszMessage,dwMessageSize,lpwszMessage,(dwMessageSize+MAX_PATH)); bMemAllocated=TRUE; } } if (lpwszMessage) { if (DB_Mra_GetStaticStringA(ccs->hContact,"e-mail",szEMail,SIZEOF(szEMail),&dwEMailSize)) { bSlowSend=DB_Mra_GetByte(NULL,"SlowSend",MRA_DEFAULT_SLOW_SEND); if (DB_Mra_GetByte(NULL,"RTFSendEnable",MRA_DEFAULT_RTF_SEND_ENABLE) && (MraContactCapabilitiesGet(ccs->hContact)&FEATURE_FLAG_RTF_MESSAGE)) { dwFlags|=MESSAGE_FLAG_RTF; } iRet=MraSendCommand_MessageW(bSlowSend,ccs->hContact,ACKTYPE_MESSAGE,dwFlags,szEMail,dwEMailSize,lpwszMessage,dwMessageSize,NULL,0); if (bSlowSend==FALSE) { ProtoBroadcastAckAsynchEx(PROTOCOL_NAMEA,ccs->hContact,ACKTYPE_MESSAGE,ACKRESULT_SUCCESS,(HANDLE)iRet,(LPARAM)NULL,0); } } if (bMemAllocated) MEMFREE(lpwszMessage); }else{ ProtoBroadcastAckAsynchEx(PROTOCOL_NAMEA,ccs->hContact,ACKTYPE_MESSAGE,ACKRESULT_FAILED,NULL,(LPARAM)"Cant allocate buffer for convert to unicode.",-1); } }else{ ProtoBroadcastAckAsynchEx(PROTOCOL_NAMEA,ccs->hContact,ACKTYPE_MESSAGE,ACKRESULT_FAILED,NULL,(LPARAM)"You cannot send when you are offline.",-1); } return(iRet); } INT_PTR MraSendContacts(WPARAM wParam,LPARAM lParam) { INT_PTR iRet=0; CCSDATA* ccs=(CCSDATA*)lParam; if (masMraSettings.bLoggedIn && lParam) { BOOL bSlowSend; CHAR szEMail[MAX_EMAIL_LEN]; LPWSTR lpwszData,lpwszDataCurrent,lpwszNick; SIZE_T i,dwContacts,dwDataBuffSize,dwEMailSize,dwStringSize,dwNickSize; HANDLE *hContactsList=(HANDLE*)ccs->lParam; dwContacts=HIWORD(ccs->wParam); dwDataBuffSize=(dwContacts*(MAX_EMAIL_LEN*2)); lpwszData=(LPWSTR)MEMALLOC((dwDataBuffSize*sizeof(WCHAR))); if (lpwszData) { lpwszDataCurrent=lpwszData; if (DB_Mra_GetStaticStringA(ccs->hContact,"e-mail",szEMail,SIZEOF(szEMail),&dwEMailSize)) { for(i=0;i<dwContacts;i++) { if (IsContactMra(hContactsList[i])) if (DB_Mra_GetStaticStringW(hContactsList[i],"e-mail",lpwszDataCurrent,(dwDataBuffSize-(lpwszDataCurrent-lpwszData)),&dwStringSize)) { lpwszDataCurrent+=dwStringSize; (*lpwszDataCurrent)=';'; lpwszDataCurrent++; lpwszNick=GetContactNameW(hContactsList[i]); dwNickSize=lstrlenW(lpwszNick); memmove(lpwszDataCurrent,lpwszNick,(dwNickSize*sizeof(WCHAR))); lpwszDataCurrent+=dwNickSize; (*lpwszDataCurrent)=';'; lpwszDataCurrent++; } } bSlowSend=DB_Mra_GetByte(NULL,"SlowSend",MRA_DEFAULT_SLOW_SEND); iRet=MraSendCommand_MessageW(bSlowSend,ccs->hContact,ACKTYPE_CONTACTS,MESSAGE_FLAG_CONTACT,szEMail,dwEMailSize,lpwszData,(lpwszDataCurrent-lpwszData),NULL,0); if (bSlowSend==FALSE) { ProtoBroadcastAckAsynchEx(PROTOCOL_NAMEA,ccs->hContact,ACKTYPE_CONTACTS,ACKRESULT_SUCCESS,(HANDLE)iRet,(LPARAM)NULL,0); } } MEMFREE(lpwszData); } }else{ ProtoBroadcastAckAsynchEx(PROTOCOL_NAMEA,ccs->hContact,ACKTYPE_CONTACTS,ACKRESULT_FAILED,NULL,(LPARAM)"You cannot send when you are offline.",-1); } return(iRet); } INT_PTR MraSendUserIsTyping(WPARAM wParam,LPARAM lParam) { INT_PTR iRet=1; if (masMraSettings.bLoggedIn && wParam && lParam!=PROTOTYPE_SELFTYPING_OFF) { CHAR szEMail[MAX_EMAIL_LEN]; SIZE_T dwEMailSize; HANDLE hContact=(HANDLE)wParam; if (MraGetContactStatus(hContact)!=ID_STATUS_OFFLINE && MraGetStatus(0,0)!=ID_STATUS_INVISIBLE) if (DB_Mra_GetStaticStringA(hContact,"e-mail",szEMail,SIZEOF(szEMail),&dwEMailSize)) { if (MraSendCommand_MessageW(FALSE,hContact,0,MESSAGE_FLAG_NOTIFY,szEMail,dwEMailSize,L" ",1,NULL,0)) iRet=0; } } return(iRet); } INT_PTR MraSendNudge(WPARAM wParam,LPARAM lParam) { INT_PTR iRet=1; if (masMraSettings.bLoggedIn && wParam) { CHAR szEMail[MAX_EMAIL_LEN]; LPWSTR lpwszAlarmMessage=TranslateW(MRA_ALARM_MESSAGE); SIZE_T dwEMailSize; HANDLE hContact=(HANDLE)wParam; if (DB_Mra_GetStaticStringA(hContact,"e-mail",szEMail,SIZEOF(szEMail),&dwEMailSize)) { if (MraSendCommand_MessageW(FALSE,hContact,0,(MESSAGE_FLAG_RTF|MESSAGE_FLAG_ALARM),szEMail,dwEMailSize,lpwszAlarmMessage,lstrlenW(lpwszAlarmMessage),NULL,0)) iRet=0; } } return(iRet); } INT_PTR MraSetApparentMode(WPARAM wParam,LPARAM lParam) { INT_PTR iRet=1; if (masMraSettings.bLoggedIn && lParam) { CCSDATA *ccs=(CCSDATA*)lParam; if (ccs->hContact && ccs->wParam==0 || ccs->wParam==ID_STATUS_ONLINE || ccs->wParam==ID_STATUS_OFFLINE) {// Only 3 modes are supported DWORD dwOldMode=DB_Mra_GetWord(ccs->hContact,"ApparentMode",0); // Dont send redundant updates if (ccs->wParam!=dwOldMode) { CHAR szEMail[MAX_EMAIL_LEN],szPhones[MAX_EMAIL_LEN]; WCHAR wszNick[MAX_EMAIL_LEN]; DWORD dwID,dwGroupID,dwContactFlag=0; SIZE_T dwEMailSize,dwNickSize,dwPhonesSize; GetContactBasicInfoW(ccs->hContact,&dwID,&dwGroupID,&dwContactFlag,NULL,NULL,szEMail,SIZEOF(szEMail),&dwEMailSize,wszNick,SIZEOF(wszNick),&dwNickSize,szPhones,SIZEOF(szPhones),&dwPhonesSize); dwContactFlag&=~(CONTACT_FLAG_INVISIBLE|CONTACT_FLAG_VISIBLE); switch(ccs->wParam){ case ID_STATUS_OFFLINE: dwContactFlag|=CONTACT_FLAG_INVISIBLE; break; case ID_STATUS_ONLINE: dwContactFlag|=CONTACT_FLAG_VISIBLE; break; } if (MraSendCommand_ModifyContactW(ccs->hContact,dwID,dwContactFlag,dwGroupID,szEMail,dwEMailSize,wszNick,dwNickSize,szPhones,dwPhonesSize)) { SetContactBasicInfoW(ccs->hContact,0,SCBIF_FLAG,0,0,dwContactFlag,0,0,NULL,0,NULL,0,NULL,0); iRet=0;// Success } } } } return(iRet); } INT_PTR MraGetInfo(WPARAM wParam,LPARAM lParam) { INT_PTR iRet=1; if (MraUpdateContactInfo(((CCSDATA*)lParam)->hContact)) { iRet=0; } return(iRet); } INT_PTR MraGetAvatarCaps(WPARAM wParam,LPARAM lParam) { INT_PTR iRet=0; switch(wParam){ case AF_MAXSIZE: iRet=-1; break; case AF_PROPORTION: iRet=PIP_NONE; break; case AF_FORMATSUPPORTED: iRet=0;// no formats to set break; case AF_ENABLED: iRet=1;// allways on break; case AF_DONTNEEDDELAYS: iRet=0;// need delay break; case AF_MAXFILESIZE: iRet=0;// break; case AF_DELAYAFTERFAIL: iRet=5000; break; } return iRet; } INT_PTR MraGetAvatarInfo(WPARAM wParam,LPARAM lParam) { if (lParam) { PROTO_AVATAR_INFORMATIONT *ppai = (PROTO_AVATAR_INFORMATIONT*)lParam; return (INT_PTR)MraAvatarsQueueGetAvatar(masMraSettings.hAvatarsQueueHandle,(DWORD)wParam,ppai->hContact,NULL,(DWORD*)&ppai->format,ppai->filename); } return GAIR_NOAVATAR; } INT_PTR MraGetMyAvatar(WPARAM wParam,LPARAM lParam) { if ( MraAvatarsGetFileName(masMraSettings.hAvatarsQueueHandle, NULL, GetContactAvatarFormat(NULL, PA_FORMAT_DEFAULT), (LPTSTR)wParam, (SIZE_T)lParam, NULL) == NO_ERROR) { LPSTR lpsz = (LPSTR)wParam; return 0; } return 1; } INT_PTR MraBasicSearch(WPARAM wParam,LPARAM lParam) { return(MraSearchByEmail(wParam,lParam)); } INT_PTR MraSearchByEmail(WPARAM wParam,LPARAM lParam) { INT_PTR iRet=0; if (masMraSettings.bLoggedIn && lParam) { CHAR szEMail[MAX_EMAIL_LEN]={0}; SIZE_T dwEMailSize; dwEMailSize=(WideCharToMultiByte(MRA_CODE_PAGE,0,(LPWSTR)lParam,-1,szEMail,SIZEOF(szEMail),NULL,NULL)-1); iRet=MraSendCommand_WPRequestByEMail(NULL,ACKTYPE_SEARCH,szEMail,dwEMailSize); } return(iRet); } INT_PTR MraSearchByName(WPARAM wParam,LPARAM lParam) { INT_PTR iRet=0; if (masMraSettings.bLoggedIn && lParam) { PROTOSEARCHBYNAME *psbn=(PROTOSEARCHBYNAME*)lParam; if (psbn->pszNick || psbn->pszFirstName || psbn->pszLastName) { DWORD dwRequestFlags=0; SIZE_T dwNickSize=0,dwFirstNameSize=0,dwLastNameSize=0; if (psbn->pszNick) dwNickSize=lstrlenW(psbn->pszNick); if (psbn->pszFirstName) dwFirstNameSize=lstrlenW(psbn->pszFirstName); if (psbn->pszLastName) dwLastNameSize=lstrlenW(psbn->pszLastName); if (dwNickSize) SetBit(dwRequestFlags,MRIM_CS_WP_REQUEST_PARAM_NICKNAME); if (dwFirstNameSize) SetBit(dwRequestFlags,MRIM_CS_WP_REQUEST_PARAM_FIRSTNAME); if (dwLastNameSize) SetBit(dwRequestFlags,MRIM_CS_WP_REQUEST_PARAM_LASTNAME); iRet=MraSendCommand_WPRequestW(NULL,ACKTYPE_SEARCH,dwRequestFlags,NULL,0,NULL,0,psbn->pszNick,dwNickSize,psbn->pszFirstName,dwFirstNameSize,psbn->pszLastName,dwLastNameSize,0,0,0,0,0,0,0,0,0); } } return(iRet); } INT_PTR MraCreateAdvSearchUI(WPARAM wParam,LPARAM lParam) { INT_PTR iRet=0; if (masMraSettings.hInstance && lParam) { iRet=(INT_PTR)CreateDialogParam(masMraSettings.hInstance,MAKEINTRESOURCE(IDD_MRAADVANCEDSEARCH),(HWND)lParam,AdvancedSearchDlgProc,0); } return(iRet); } INT_PTR MraSearchByAdvanced(WPARAM wParam,LPARAM lParam) { INT_PTR iRet=0; if (masMraSettings.bLoggedIn && lParam) { iRet=(INT_PTR)AdvancedSearchFromDlg((HWND)lParam); } return(iRet); } INT_PTR MraFileResume(WPARAM wParam,LPARAM lParam) { INT_PTR iRet=1; if (wParam && lParam) { PROTOFILERESUME *pfr=(PROTOFILERESUME*)lParam; //icq_sendFileResume((filetransfer*)wParam,pfr->action,pfr->szFilename); iRet=0;// Success } return(iRet); } INT_PTR MraFileAllow(WPARAM wParam,LPARAM lParam) { INT_PTR iRet=0; if (lParam) if (((CCSDATA*)lParam)->wParam) { LPWSTR lpwszPath; SIZE_T dwPathSize; CCSDATA *pcds=(CCSDATA*)lParam; PROTORECVEVENT *prce=(PROTORECVEVENT*)pcds->lParam; PROTORECVFILET *prcf=(PROTORECVFILET*)pcds->lParam; lpwszPath=(LPWSTR)((CCSDATA*)lParam)->lParam; dwPathSize=lstrlenW(lpwszPath); if (MraFilesQueueAccept(masMraSettings.hFilesQueueHandle,((CCSDATA*)lParam)->wParam,lpwszPath,dwPathSize)==NO_ERROR) { iRet=((CCSDATA*)lParam)->wParam; // Success } } return(iRet); } INT_PTR MraFileDenyCancel(WPARAM wParam,LPARAM lParam) { INT_PTR iRet=1; if (lParam) if (((CCSDATA*)lParam)->wParam) {// description: (LPSTR)((CCSDATA*)lParam)->lParam MraFilesQueueCancel(masMraSettings.hFilesQueueHandle,((CCSDATA*)lParam)->wParam,TRUE); iRet=0; // Success } return(iRet); } INT_PTR MraFileSend(WPARAM wParam,LPARAM lParam) { INT_PTR iRet=0; if (masMraSettings.bLoggedIn && wParam && lParam) if (((CCSDATA*)lParam)->hContact && ((CCSDATA*)lParam)->lParam) {// (LPSTR)((CCSDATA*)lParam)->wParam,lstrlenA((LPSTR)((CCSDATA*)lParam)->wParam) - description LPWSTR *plpwszFiles=(LPWSTR*)((CCSDATA*)lParam)->lParam; SIZE_T dwFilesCount; for(dwFilesCount=0;plpwszFiles[dwFilesCount];dwFilesCount++); MraFilesQueueAddSend(masMraSettings.hFilesQueueHandle,0,((CCSDATA*)lParam)->hContact,plpwszFiles,dwFilesCount,(DWORD*)&iRet); } return(iRet); }