From 4036e52a03cba9c3bd345796407a851153377279 Mon Sep 17 00:00:00 2001 From: Rozhuk Ivan <rozhuk.im@gmail.com> Date: Fri, 7 Mar 2014 13:43:51 +0000 Subject: MRA + Add: hidden option "xStatusShowAll" to allow select x-status Dating * Fix: Blog status icon does not display * Fix: SetContactStatus for contacts without authorization on user info update* code cleanup git-svn-id: http://svn.miranda-ng.org/main/trunk@8445 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- protocols/MRA/res/resource.rc | 1 + protocols/MRA/src/Mra.h | 9 +- protocols/MRA/src/MraAvatars.cpp | 2 +- protocols/MRA/src/MraConstans.h | 18 +- protocols/MRA/src/MraIcons.cpp | 16 +- protocols/MRA/src/MraProto.cpp | 2 +- protocols/MRA/src/Mra_menus.cpp | 10 +- protocols/MRA/src/Mra_proto.cpp | 266 ++++++++++++------------- protocols/MRA/src/Mra_svcs.cpp | 23 ++- protocols/MRA/src/proto.h | 280 +++++++++++++-------------- protocols/MRA/xstatus_MRA/res/xstatus_MRA.rc | 1 + protocols/MRA/xstatus_MRA/src/resource.h | 3 +- 12 files changed, 313 insertions(+), 318 deletions(-) (limited to 'protocols') diff --git a/protocols/MRA/res/resource.rc b/protocols/MRA/res/resource.rc index 0a8cf2a10c..dec2c6899d 100644 --- a/protocols/MRA/res/resource.rc +++ b/protocols/MRA/res/resource.rc @@ -41,6 +41,7 @@ IDI_MRA_POSTCARD ICON "PostCards.ico" IDI_MRA_PHOTO ICON "Photo.ico" IDI_MRA_CHAT ICON "Chat.ico" IDI_MRA_PHONE ICON "Phone.ico" +IDI_BLOGSTATUS ICON "BlogStatus.ico" IDI_MRA_ALARM ICON "Alarm.ico" IDI_MRA_VIDEO ICON "video.ico" IDI_MRA_ANSWERS ICON "answers.ico" diff --git a/protocols/MRA/src/Mra.h b/protocols/MRA/src/Mra.h index b2276778f4..457d421ed7 100644 --- a/protocols/MRA/src/Mra.h +++ b/protocols/MRA/src/Mra.h @@ -33,8 +33,6 @@ #include <time.h> #include <commctrl.h> -#define bzero(pvDst, count) memset(pvDst, 0, count) - #include "../../plugins/zlib/src/zlib.h" #include <newpluginapi.h> @@ -204,14 +202,12 @@ CMStringA MraGetSelfVersionString(); #define SetBit(bytes, bitpos) bytes |= (1<<bitpos) #define GetBit(bytes, bitpos) ((bytes&(1<<bitpos))? TRUE:FALSE) -#define IsXStatusValid(XStatus) (((XStatus) && (XStatus)<MRA_XSTATUS_COUNT)) +#define IsXStatusValid(XStatus) (((XStatus) && (XStatus) < MRA_XSTATUS_COUNT)) -#define GET_CURRENT_COMBO_DATA(hWndDlg, ControlID) SendDlgItemMessage(hWndDlg, ControlID, CB_GETITEMDATA, SendDlgItemMessage(hWndDlg, ControlID, CB_GETCURSEL, 0, 0), 0) +#define GET_CURRENT_COMBO_DATA(hWndDlg, ControlID) SendDlgItemMessage(hWndDlg, ControlID, CB_GETITEMDATA, SendDlgItemMessage(hWndDlg, ControlID, CB_GETCURSEL, 0, 0), 0) #define IsFileExist(FileName) (GetFileAttributes(FileName) != INVALID_FILE_ATTRIBUTES) -#define IsThreadAlive(hThread) (GetThreadPriority(hThread) != THREAD_PRIORITY_ERROR_RETURN) - void MraAddrListFree(MRA_ADDR_LIST *pmalAddrList); DWORD MraAddrListGetFromBuff(const CMStringA &szAddresses, MRA_ADDR_LIST *pmalAddrList); CMStringA MraAddrListGetToBuff(MRA_ADDR_LIST *pmalAddrList); @@ -238,7 +234,6 @@ bool MraRequestXStatusDetails(DWORD dwXStatus); bool MraSendReplyBlogStatus(MCONTACT hContact); DWORD GetYears(CONST PSYSTEMTIME pcstSystemTime); DWORD FindFile(LPWSTR lpszFolder, DWORD dwFolderLen, LPWSTR lpszFileName, DWORD dwFileNameLen, LPWSTR lpszRetFilePathName, DWORD dwRetFilePathLen, DWORD *pdwRetFilePathLen); -DWORD MemFillRandom(LPVOID lpBuff, size_t dwBuffSize); DWORD GetMraStatusFromMiradaStatus(DWORD dwMirandaStatus, DWORD dwXStatusMir, DWORD *pdwXStatusMra); DWORD GetMirandaStatusFromMraStatus(DWORD dwMraStatus, DWORD dwXStatusMra, DWORD *pdwXStatusMir); diff --git a/protocols/MRA/src/MraAvatars.cpp b/protocols/MRA/src/MraAvatars.cpp index ad70e838cc..0743fda45f 100644 --- a/protocols/MRA/src/MraAvatars.cpp +++ b/protocols/MRA/src/MraAvatars.cpp @@ -381,7 +381,7 @@ DWORD MraAvatarsHttpTransaction(HANDLE m_hConnection, DWORD dwRequestType, LPCST if (pbKeepAlive) *pbKeepAlive = FALSE; if (pdwFormat) *pdwFormat = PA_FORMAT_UNKNOWN; if (pdwAvatarSize) *pdwAvatarSize = 0; - if (pitLastModifiedTime) bzero(pitLastModifiedTime, sizeof(INTERNET_TIME)); + if (pitLastModifiedTime) memset(pitLastModifiedTime, 0, sizeof(INTERNET_TIME)); if (!m_hConnection) return ERROR_INVALID_HANDLE; diff --git a/protocols/MRA/src/MraConstans.h b/protocols/MRA/src/MraConstans.h index 493206d0a2..e68f4dcfc5 100644 --- a/protocols/MRA/src/MraConstans.h +++ b/protocols/MRA/src/MraConstans.h @@ -27,8 +27,8 @@ static const LPSTR lpcszMailRuDomains[] = #define MAX_EMAIL_LEN 1024 #define MAX_FILEPATH 32768 //internal -#define BUFF_SIZE_RCV 65535 //internal -#define BUFF_SIZE_RCV_MIN_FREE 16384 //internal +#define BUFF_SIZE_RCV (64 * 1024) //internal +#define BUFF_SIZE_RCV_MIN_FREE (16 * 1024) //internal #define BUFF_SIZE_BLOB 16384 //internal #define BUFF_SIZE_URL 4096 //internal #define NETLIB_SELECT_TIMEOUT 250 //internal // ����� �������� ������� �� ������ @@ -182,6 +182,8 @@ static const LPSTR lpcszMailRuDomains[] = #define MRA_DEFAULT_TRAYICON_NEW_MAIL_NOTIFY FALSE #define MRA_DEFAULT_TRAYICON_NEW_MAIL_CLK_TO_INBOX FALSE +#define MRA_DEFAULT_SHOW_ALL_XSTATUSES FALSE /* Do not display some x statuses (like dating) in menu. */ + #define MRA_AVT_DEFAULT_ENABLE TRUE #define MRA_AVT_DEFAULT_WRK_THREAD_COUNTS 4 // hidden #define MRA_AVT_DEFAULT_SERVER "obraz.foto.mail.ru" @@ -229,20 +231,22 @@ static const LPSTR lpcszMailRuDomains[] = extern const LPSTR lpcszStatusUri[]; extern const LPWSTR lpcszXStatusNameDef[]; -#define MRA_XSTATUS_MENU "/menuXStatus" -#define MRA_XSTATUS_COUNT 49 +#define MRA_XSTATUS_COUNT 50 /* index = 0 - virtual status "none" */ +#define MRA_XSTATUS_OFF_CLI_COUNT 49 /* MRA_XSTATUS_COUNT - dating */ #define MRA_MIR_XSTATUS_NONE 0 #define MRA_MIR_XSTATUS_UNKNOWN MRA_XSTATUS_COUNT +/* Indexes in lpcszStatusUrip[]. */ #define MRA_XSTATUS_OFFLINE 0 #define MRA_XSTATUS_ONLINE 1 #define MRA_XSTATUS_AWAY 2 #define MRA_XSTATUS_INVISIBLE 3 #define MRA_XSTATUS_DND 4 #define MRA_XSTATUS_CHAT 5 -#define MRA_XSTATUS_MOBILE 54 -#define MRA_XSTATUS_UNKNOWN 100 +#define MRA_XSTATUS_MOBILE 6 +#define MRA_XSTATUS_UNKNOWN 255 +#define MRA_XSTATUS_UNKNOWN_STR "mra_xstatus50" // For icon name, keep sync with MRA_XSTATUS_COUNT -#define MRA_XSTATUS_INDEX_OFFSET 6 +#define MRA_XSTATUS_INDEX_OFFSET 7 #endif // !defined(AFX_MRA_CONSTANS_H__F58D13FF_F6F2_476C_B8F0_7B9E9357CF48__INCLUDED_) diff --git a/protocols/MRA/src/MraIcons.cpp b/protocols/MRA/src/MraIcons.cpp index 693ebadd3d..89f957f69d 100644 --- a/protocols/MRA/src/MraIcons.cpp +++ b/protocols/MRA/src/MraIcons.cpp @@ -36,11 +36,11 @@ IconItem gdiContactMenuItems[CONTACT_MENU_ITEMS_COUNT] = IconItem gdiExtraStatusIconsItems[ADV_ICON_MAX] = { - { ADV_ICON_DELETED_STR, ADV_ICON_DELETED_ID, IDI_DELETED }, - { ADV_ICON_NOT_ON_SERVER_STR, ADV_ICON_NOT_ON_SERVER_ID, IDI_AUTHGRANT }, - { ADV_ICON_NOT_AUTHORIZED_STR, ADV_ICON_NOT_AUTHORIZED_ID, IDI_AUTHRUGUEST }, - { ADV_ICON_PHONE_STR, ADV_ICON_PHONE_ID, IDI_MRA_PHONE }, - { ADV_ICON_BLOGSTATUS_STR, ADV_ICON_BLOGSTATUS_ID, IDI_BLOGSTATUS } + { ADV_ICON_DELETED_STR, ADV_ICON_DELETED_ID, IDI_DELETED }, + { ADV_ICON_NOT_ON_SERVER_STR, ADV_ICON_NOT_ON_SERVER_ID, IDI_AUTHGRANT }, + { ADV_ICON_NOT_AUTHORIZED_STR, ADV_ICON_NOT_AUTHORIZED_ID, IDI_AUTHRUGUEST }, + { ADV_ICON_PHONE_STR, ADV_ICON_PHONE_ID, IDI_MRA_PHONE }, + { ADV_ICON_BLOGSTATUS_STR, ADV_ICON_BLOGSTATUS_ID, IDI_BLOGSTATUS } }; ////////////////////////////////////////////////////////////////////////////////////// @@ -108,7 +108,7 @@ void InitXStatusIcons() sid.flags = SIDF_ALL_TCHAR; hXStatusAdvancedStatusIcons[0] = NULL; - for (int i = 1; i < MRA_XSTATUS_COUNT+1; i++) { + for (DWORD i = 1; i < MRA_XSTATUS_COUNT+1; i++) { char szBuff[MAX_PATH]; mir_snprintf(szBuff, SIZEOF(szBuff), "mra_xstatus%ld", i); sid.pszName = szBuff; @@ -125,10 +125,10 @@ void DestroyXStatusIcons() { char szBuff[MAX_PATH]; - for (size_t i = 1; i < MRA_XSTATUS_COUNT+1; i++) { + for (DWORD i = 1; i < MRA_XSTATUS_COUNT+1; i++) { mir_snprintf(szBuff, SIZEOF(szBuff), "mra_xstatus%ld", i); Skin_RemoveIcon(szBuff); } - bzero(hXStatusAdvancedStatusIcons, sizeof(hXStatusAdvancedStatusIcons)); + memset(hXStatusAdvancedStatusIcons, 0, sizeof(hXStatusAdvancedStatusIcons)); } diff --git a/protocols/MRA/src/MraProto.cpp b/protocols/MRA/src/MraProto.cpp index 54f9c5efe7..c7c36cb1ba 100644 --- a/protocols/MRA/src/MraProto.cpp +++ b/protocols/MRA/src/MraProto.cpp @@ -54,7 +54,7 @@ CMraProto::CMraProto(const char* _module, const TCHAR* _displayName) : HookProtoEvent(ME_CLIST_PREBUILDSTATUSMENU, &CMraProto::MraRebuildStatusMenu); hExtraXstatusIcon = ExtraIcon_Register("MRAXstatus", LPGEN("Mail.ru Xstatus"), "mra_xstatus25"); - hExtraInfo = ExtraIcon_Register("MRAStatus", LPGEN("Mail.ru extra info"), "mra_xstatus49"); + hExtraInfo = ExtraIcon_Register("MRAStatus", LPGEN("Mail.ru extra info"), MRA_XSTATUS_UNKNOWN_STR); bHideXStatusUI = FALSE; m_iXStatus = getByte(DBSETTING_XSTATUSID, MRA_MIR_XSTATUS_NONE); diff --git a/protocols/MRA/src/Mra_menus.cpp b/protocols/MRA/src/Mra_menus.cpp index 1171f147bd..d4fa5a7c16 100644 --- a/protocols/MRA/src/Mra_menus.cpp +++ b/protocols/MRA/src/Mra_menus.cpp @@ -290,9 +290,13 @@ int CMraProto::MraRebuildStatusMenu(WPARAM wParam, LPARAM lParam) mi.pszContactOwner = m_szModuleName; CMStringW szStatusTitle; - for (size_t i = 0; i < MRA_XSTATUS_COUNT; i++) { + + DWORD dwCount = MRA_XSTATUS_OFF_CLI_COUNT; + if (getByte(NULL, "xStatusShowAll", MRA_DEFAULT_SHOW_ALL_XSTATUSES)) + dwCount = MRA_XSTATUS_COUNT; + for (DWORD i = 0; i < dwCount; i ++) { mir_snprintf(pszServiceFunctionName, 100, "/menuXStatus%ld", i); - mi.position++; + mi.position ++; if (i) { mir_snprintf(szValueName, SIZEOF(szValueName), "XStatus%ldName", i); if (mraGetStringW(NULL, szValueName, szStatusTitle)) @@ -386,7 +390,7 @@ void CMraProto::InitMenus() hContactMenuRoot = CListCreateMenu(-2000001001, -500050000, FALSE, gdiContactMenuItems, CONTACT_MENU_ITEMS_COUNT, hContactMenuItems); // xstatus menu - for (int i = 0; i < MRA_XSTATUS_COUNT; i++) { + for (DWORD i = 0; i < MRA_XSTATUS_COUNT; i++) { char szServiceName[100]; mir_snprintf(szServiceName, SIZEOF(szServiceName), "/menuXStatus%d", i); CreateProtoServiceParam(szServiceName, &CMraProto::MraXStatusMenu, i); diff --git a/protocols/MRA/src/Mra_proto.cpp b/protocols/MRA/src/Mra_proto.cpp index 704bec82a9..76d576dd8d 100644 --- a/protocols/MRA/src/Mra_proto.cpp +++ b/protocols/MRA/src/Mra_proto.cpp @@ -217,133 +217,125 @@ DWORD CMraProto::MraNetworkDispatcher() m_dwThreadWorkerLastPingTime = GetTickCount(); while (m_iStatus != ID_STATUS_OFFLINE && bContinue) { DWORD dwSelectRet = CallService(MS_NETLIB_SELECT, 0, (LPARAM)&nls); - switch (dwSelectRet) { - case SOCKET_ERROR: + if (SOCKET_ERROR == dwSelectRet) { if (m_iStatus != ID_STATUS_OFFLINE) { dwRetErrorCode = GetLastError(); ShowFormattedErrorMessage(L"Disconnected, socket error", dwRetErrorCode); } - bContinue = FALSE; break; - - case 0:// Time out - case 1: - m_dwThreadWorkerLastPingTime = GetTickCount(); - // server ping - if (m_dwNextPingSendTickTime <= m_dwThreadWorkerLastPingTime) { - m_dwNextPingSendTickTime = (m_dwThreadWorkerLastPingTime + (m_dwPingPeriod * 1000)); - MraSendCMD(MRIM_CS_PING, NULL, 0); - } - { - DWORD dwCMDNum, dwFlags, dwAckType; - MCONTACT hContact; - LPBYTE lpbData; - size_t dwDataSize; - while (!MraSendQueueFindOlderThan(hSendQueueHandle, SEND_QUEUE_TIMEOUT, &dwCMDNum, &dwFlags, &hContact, &dwAckType, &lpbData, &dwDataSize)) { - switch (dwAckType) { - case ACKTYPE_ADDED: - case ACKTYPE_AUTHREQ: - case ACKTYPE_CONTACTS: - //nothing to do - break; - case ACKTYPE_MESSAGE: - ProtoBroadcastAck(hContact, dwAckType, ACKRESULT_FAILED, (HANDLE)dwCMDNum, (LPARAM)"Undefined message deliver error, time out"); - break; - case ACKTYPE_GETINFO: - ProtoBroadcastAck(hContact, dwAckType, ACKRESULT_FAILED, (HANDLE)1, 0); - break; - case ACKTYPE_SEARCH: - ProtoBroadcastAck(hContact, dwAckType, ACKRESULT_SUCCESS, (HANDLE)dwCMDNum, 0); - break; - case ICQACKTYPE_SMS: - ProtoBroadcastAck(NULL, dwAckType, ACKRESULT_FAILED, (HANDLE)dwCMDNum, 0); - mir_free(lpbData); - break; - } - MraSendQueueFree(hSendQueueHandle, dwCMDNum); + } + // Time out or normal + m_dwThreadWorkerLastPingTime = GetTickCount(); + /* Server ping. */ + if (m_dwNextPingSendTickTime <= m_dwThreadWorkerLastPingTime) { + m_dwNextPingSendTickTime = (m_dwThreadWorkerLastPingTime + (m_dwPingPeriod * 1000)); + MraSendCMD(MRIM_CS_PING, NULL, 0); + } + { /* Remove old items from send queue. */ + DWORD dwCMDNum, dwFlags, dwAckType; + MCONTACT hContact; + LPBYTE lpbData; + size_t dwDataSize; + while (!MraSendQueueFindOlderThan(hSendQueueHandle, SEND_QUEUE_TIMEOUT, &dwCMDNum, &dwFlags, &hContact, &dwAckType, &lpbData, &dwDataSize)) { + switch (dwAckType) { + case ACKTYPE_ADDED: + case ACKTYPE_AUTHREQ: + case ACKTYPE_CONTACTS: + //nothing to do + break; + case ACKTYPE_MESSAGE: + ProtoBroadcastAck(hContact, dwAckType, ACKRESULT_FAILED, (HANDLE)dwCMDNum, (LPARAM)"Undefined message deliver error, time out"); + break; + case ACKTYPE_GETINFO: + ProtoBroadcastAck(hContact, dwAckType, ACKRESULT_FAILED, (HANDLE)1, 0); + break; + case ACKTYPE_SEARCH: + ProtoBroadcastAck(hContact, dwAckType, ACKRESULT_SUCCESS, (HANDLE)dwCMDNum, 0); + break; + case ICQACKTYPE_SMS: + ProtoBroadcastAck(NULL, dwAckType, ACKRESULT_FAILED, (HANDLE)dwCMDNum, 0); + mir_free(lpbData); + break; } + MraSendQueueFree(hSendQueueHandle, dwCMDNum); } + } - if (dwSelectRet == 0) // Time out - break; + if (dwSelectRet == 0) // Time out + continue; - // expand receive buffer dynamically - if ((dwRcvBuffSize - dwRcvBuffSizeUsed) < BUFF_SIZE_RCV_MIN_FREE) { - dwRcvBuffSize += BUFF_SIZE_RCV; - lpbBufferRcv = (LPBYTE)mir_realloc(lpbBufferRcv, dwRcvBuffSize); + // expand receive buffer dynamically + if ((dwRcvBuffSize - dwRcvBuffSizeUsed) < BUFF_SIZE_RCV_MIN_FREE) { + dwRcvBuffSize += BUFF_SIZE_RCV; + lpbBufferRcv = (LPBYTE)mir_realloc(lpbBufferRcv, dwRcvBuffSize); + } + + DWORD dwBytesReceived = Netlib_Recv(nls.hReadConns[0], (LPSTR)(lpbBufferRcv + dwRcvBuffSizeUsed), (dwRcvBuffSize - dwRcvBuffSizeUsed), 0); + if ( !dwBytesReceived && dwBytesReceived == SOCKET_ERROR) { // disconnected + if (m_iStatus != ID_STATUS_OFFLINE) { + dwRetErrorCode = GetLastError(); + ShowFormattedErrorMessage(L"Disconnected, socket read error", dwRetErrorCode); } + break; + } - DWORD dwBytesReceived = Netlib_Recv(nls.hReadConns[0], (LPSTR)(lpbBufferRcv + dwRcvBuffSizeUsed), (dwRcvBuffSize - dwRcvBuffSizeUsed), 0); - if (dwBytesReceived && dwBytesReceived != SOCKET_ERROR) { - dwRcvBuffSizeUsed += dwBytesReceived; - - while (TRUE) { - dwDataCurrentBuffSize = (dwRcvBuffSize - dwDataCurrentBuffOffset); - dwDataCurrentBuffSizeUsed = (dwRcvBuffSizeUsed - dwDataCurrentBuffOffset); - pmaHeader = (mrim_packet_header_t*)(lpbBufferRcv + dwDataCurrentBuffOffset); - - // packet header received - if (dwDataCurrentBuffSizeUsed >= sizeof(mrim_packet_header_t)) { - // packet OK - if (pmaHeader->magic == CS_MAGIC) { - // full packet received, may be more than one - if ((dwDataCurrentBuffSizeUsed - sizeof(mrim_packet_header_t)) >= pmaHeader->dlen) { - - bContinue = MraCommandDispatcher(pmaHeader); - - // move pointer to next packet in buffer - if (dwDataCurrentBuffSizeUsed - sizeof(mrim_packet_header_t) > pmaHeader->dlen) - dwDataCurrentBuffOffset += sizeof(mrim_packet_header_t)+pmaHeader->dlen; - // move pointer to begin of buffer - else { - // ������������ ���������� ������� ����� - if (dwRcvBuffSize > BUFF_SIZE_RCV) { - dwRcvBuffSize = BUFF_SIZE_RCV; - lpbBufferRcv = (LPBYTE)mir_realloc(lpbBufferRcv, dwRcvBuffSize); - } - dwDataCurrentBuffOffset = 0; - dwRcvBuffSizeUsed = 0; - break; - } - } - // not all packet received, continue receiving - else { - if (dwDataCurrentBuffOffset) { - memmove(lpbBufferRcv, (lpbBufferRcv + dwDataCurrentBuffOffset), dwDataCurrentBuffSizeUsed); - dwRcvBuffSizeUsed = dwDataCurrentBuffSizeUsed; - dwDataCurrentBuffOffset = 0; - } - debugLogW(L"Not all packet received, continue receiving\n"); - break; - } - } - // bad packet + dwRcvBuffSizeUsed += dwBytesReceived; + while (TRUE) { + dwDataCurrentBuffSize = (dwRcvBuffSize - dwDataCurrentBuffOffset); + dwDataCurrentBuffSizeUsed = (dwRcvBuffSizeUsed - dwDataCurrentBuffOffset); + pmaHeader = (mrim_packet_header_t*)(lpbBufferRcv + dwDataCurrentBuffOffset); + + // packet header received + if (dwDataCurrentBuffSizeUsed >= sizeof(mrim_packet_header_t)) { + // packet OK + if (pmaHeader->magic == CS_MAGIC) { + // full packet received, may be more than one + if ((dwDataCurrentBuffSizeUsed - sizeof(mrim_packet_header_t)) >= pmaHeader->dlen) { + + bContinue = MraCommandDispatcher(pmaHeader); + + // move pointer to next packet in buffer + if (dwDataCurrentBuffSizeUsed - sizeof(mrim_packet_header_t) > pmaHeader->dlen) + dwDataCurrentBuffOffset += sizeof(mrim_packet_header_t)+pmaHeader->dlen; + // move pointer to begin of buffer else { - debugLogW(L"Bad packet\n"); + // ������������ ���������� ������� ����� + if (dwRcvBuffSize > BUFF_SIZE_RCV) { + dwRcvBuffSize = BUFF_SIZE_RCV; + lpbBufferRcv = (LPBYTE)mir_realloc(lpbBufferRcv, dwRcvBuffSize); + } dwDataCurrentBuffOffset = 0; dwRcvBuffSizeUsed = 0; break; } } - // packet to small, continue receiving + // not all packet received, continue receiving else { - debugLogW(L"Packet to small, continue receiving\n"); - memmove(lpbBufferRcv, (lpbBufferRcv + dwDataCurrentBuffOffset), dwDataCurrentBuffSizeUsed); - dwRcvBuffSizeUsed = dwDataCurrentBuffSizeUsed; - dwDataCurrentBuffOffset = 0; + if (dwDataCurrentBuffOffset) { + memmove(lpbBufferRcv, (lpbBufferRcv + dwDataCurrentBuffOffset), dwDataCurrentBuffSizeUsed); + dwRcvBuffSizeUsed = dwDataCurrentBuffSizeUsed; + dwDataCurrentBuffOffset = 0; + } + debugLogW(L"Not all packet received, continue receiving\n"); break; } } + // bad packet + else { + debugLogW(L"Bad packet\n"); + dwDataCurrentBuffOffset = 0; + dwRcvBuffSizeUsed = 0; + break; + } } - // disconnected + // packet to small, continue receiving else { - if (m_iStatus != ID_STATUS_OFFLINE) { - dwRetErrorCode = GetLastError(); - ShowFormattedErrorMessage(L"Disconnected, socket read error", dwRetErrorCode); - } - bContinue = FALSE; + debugLogW(L"Packet to small, continue receiving\n"); + memmove(lpbBufferRcv, (lpbBufferRcv + dwDataCurrentBuffOffset), dwDataCurrentBuffSizeUsed); + dwRcvBuffSizeUsed = dwDataCurrentBuffSizeUsed; + dwDataCurrentBuffOffset = 0; + break; } - break; } } mir_free(lpbBufferRcv); @@ -783,14 +775,19 @@ bool CMraProto::CmdAnketaInfo(int seq, BinBuffer &buf) case MRIM_ANKETA_INFO_STATUS_OK: // ����� ������� �������� DWORD dwFieldsNum, dwMaxRows, dwServerTime; + DWORD dwID, dwContactSeverFlags, dwStatus, dwXStatus; buf >> dwFieldsNum >> dwMaxRows >> dwServerTime; CMStringA *pmralpsFields = new CMStringA[dwFieldsNum]; CMStringA val; - CMStringW valW; + CMStringW valW, StatusNameW, StatusMsgW; + + /* Default contact statuses in mail.ru format. */ + dwStatus = STATUS_OFFLINE; + dwXStatus = MRA_XSTATUS_OFFLINE; // read headers name - for (unsigned i = 0; i < dwFieldsNum; i++) { + for (DWORD i = 0; i < dwFieldsNum; i++) { buf >> pmralpsFields[i]; debugLogA("%s ", pmralpsFields[i]); } @@ -800,7 +797,7 @@ bool CMraProto::CmdAnketaInfo(int seq, BinBuffer &buf) if (dwAckType == ACKTYPE_GETINFO && hContact) { setDword(hContact, "InfoTS", (DWORD)_time32(NULL)); //MRA_LPS mralpsUsernameValue; - for (unsigned i = 0; i < dwFieldsNum; i++) { + for (DWORD i = 0; i < dwFieldsNum; i++) { CMStringA &fld = pmralpsFields[i]; if (fld == "Nickname") { buf >> valW; @@ -900,49 +897,36 @@ bool CMraProto::CmdAnketaInfo(int seq, BinBuffer &buf) } else if (fld == "mrim_status") { buf >> val; - if (val.GetLength()) { - DWORD dwID, dwContactSeverFlags; - GetContactBasicInfoW(hContact, &dwID, NULL, NULL, &dwContactSeverFlags, NULL, NULL, NULL, NULL); - // ��� ��������������� ��� � ��� ��������� ���������� ������ - if (dwID == -1 || (dwContactSeverFlags & CONTACT_INTFLAG_NOT_AUTHORIZED)) { - MraSetContactStatus(hContact, GetMirandaStatusFromMraStatus(atoi(val), MRA_MIR_XSTATUS_NONE, NULL)); - setByte(hContact, DBSETTING_XSTATUSID, (BYTE)MRA_MIR_XSTATUS_NONE); - } - } + if (val.GetLength()) + dwStatus = atoi(val); } else if (fld == "status_uri") { buf >> val; - if (val.GetLength()) { - DWORD dwID, dwContactSeverFlags, dwXStatus; - GetContactBasicInfoW(hContact, &dwID, NULL, NULL, &dwContactSeverFlags, NULL, NULL, NULL, NULL); - if (dwID == -1 || (dwContactSeverFlags & CONTACT_INTFLAG_NOT_AUTHORIZED)) { - MraSetContactStatus(hContact, GetMirandaStatusFromMraStatus(atoi(val), GetMraXStatusIDFromMraUriStatus(val), &dwXStatus)); - setByte(hContact, DBSETTING_XSTATUSID, (BYTE)dwXStatus); - } - } + if (val.GetLength()) + dwXStatus = GetMraXStatusIDFromMraUriStatus(val); } else if (fld == "status_title") { - buf >> valW; - if (valW.GetLength()) { - DWORD dwID, dwContactSeverFlags; - GetContactBasicInfoW(hContact, &dwID, NULL, NULL, &dwContactSeverFlags, NULL, NULL, NULL, NULL); - if (dwID == -1 || (dwContactSeverFlags & CONTACT_INTFLAG_NOT_AUTHORIZED)) - mraSetStringW(hContact, DBSETTING_XSTATUSNAME, valW); - } + buf >> StatusNameW; } else if (fld == "status_desc") { - buf >> valW; - if (valW.GetLength()) { - DWORD dwID, dwContactSeverFlags; - GetContactBasicInfoW(hContact, &dwID, NULL, NULL, &dwContactSeverFlags, NULL, NULL, NULL, NULL); - if (dwID == -1 || dwContactSeverFlags&CONTACT_INTFLAG_NOT_AUTHORIZED) - mraSetStringW(hContact, DBSETTING_XSTATUSMSG, valW); - } + buf >> StatusMsgW; } else {// for DEBUG ONLY buf >> val; debugLogA("%s = %s\n", fld, val); } + } /* for */ + // ��� ��������������� ��� � ��� ��������� ���������� ������ + GetContactBasicInfoW(hContact, &dwID, NULL, NULL, &dwContactSeverFlags, NULL, NULL, NULL, NULL); + if (dwID == -1 || (dwContactSeverFlags & CONTACT_INTFLAG_NOT_AUTHORIZED)) { + /* Convert mail.ru statuses to miranda. */ + dwStatus = GetMirandaStatusFromMraStatus(dwStatus, dwXStatus, &dwXStatus); + MraSetContactStatus(hContact, dwStatus); + setByte(hContact, DBSETTING_XSTATUSID, (BYTE)dwXStatus); + if (StatusNameW.GetLength()) + mraSetStringW(hContact, DBSETTING_XSTATUSNAME, StatusNameW); + if (StatusMsgW.GetLength()) + mraSetStringW(hContact, DBSETTING_XSTATUSMSG, StatusMsgW); } } else if (dwAckType == ACKTYPE_SEARCH) { @@ -961,7 +945,7 @@ bool CMraProto::CmdAnketaInfo(int seq, BinBuffer &buf) psr.email = szEmail; psr.id = szEmail; - for (unsigned i = 0; i < dwFieldsNum; i++) { + for (DWORD i = 0; i < dwFieldsNum; i++) { CMStringA &fld = pmralpsFields[i]; if (fld == "Username") { buf >> val; @@ -1893,11 +1877,11 @@ DWORD GetMirandaStatusFromMraStatus(DWORD dwMraStatus, DWORD dwXStatusMra, DWORD } if (pdwXStatusMir) *pdwXStatusMir = dwXStatusMra - MRA_XSTATUS_INDEX_OFFSET + 1; return ID_STATUS_ONLINE; + default: + if (dwMraStatus & STATUS_FLAG_INVISIBLE) + return ID_STATUS_INVISIBLE; } - if (dwMraStatus & STATUS_FLAG_INVISIBLE) - return ID_STATUS_INVISIBLE; - return ID_STATUS_OFFLINE; } diff --git a/protocols/MRA/src/Mra_svcs.cpp b/protocols/MRA/src/Mra_svcs.cpp index 73b1401a55..fdfeb52429 100644 --- a/protocols/MRA/src/Mra_svcs.cpp +++ b/protocols/MRA/src/Mra_svcs.cpp @@ -9,10 +9,11 @@ const LPSTR lpcszStatusUri[] = "STATUS_INVISIBLE", // "status_3", "status_dnd", "status_chat", - "status_4", + "status_mobile", + "status_4", // first xstatus "status_5", "status_6", - "status_7", + "status_7", // 10 "status_8", "status_9", "status_10", @@ -22,7 +23,7 @@ const LPSTR lpcszStatusUri[] = "status_14", "status_15", "status_16", - "status_17", + "status_17", // 20 "status_18", "status_19", "status_20", @@ -33,7 +34,7 @@ const LPSTR lpcszStatusUri[] = //"status_25", // chat/dnd "status_26", "status_27", - "status_28", + "status_28", // 30 "status_29", "status_30", //"status_31", // chat/dnd @@ -44,7 +45,7 @@ const LPSTR lpcszStatusUri[] = "status_36", "status_37", "status_38", - "status_39", + "status_39", // 40 "status_40", "status_41", "status_42", @@ -54,12 +55,12 @@ const LPSTR lpcszStatusUri[] = "status_46", "status_47", "status_48", - "status_49", + "status_49", // 50 "status_50", "status_51", "status_52", "status_53", - "status_mobile", + "status_dating", NULL }; @@ -114,6 +115,7 @@ const LPWSTR lpcszXStatusNameDef[] = LPGENT("Squirrel"), LPGENT("Star"), LPGENT("Music"), + LPGENT("Dating"), NULL }; @@ -435,7 +437,10 @@ INT_PTR CMraProto::MraSetXStatusEx(WPARAM wParam, LPARAM lParam) // hide menu items if (pData->flags & CSSF_DISABLE_UI) { bHideXStatusUI = (*pData->wParam) ? FALSE : TRUE; - for (DWORD i = 0; i < MRA_XSTATUS_COUNT; i++) + DWORD dwCount = MRA_XSTATUS_OFF_CLI_COUNT; + if (getByte(NULL, "xStatusShowAll", MRA_DEFAULT_SHOW_ALL_XSTATUSES)) + dwCount = MRA_XSTATUS_COUNT; + for (DWORD i = 0; i < dwCount; i++) Menu_ShowItem(hXStatusMenuItems[i], !bHideXStatusUI); } } @@ -507,6 +512,8 @@ INT_PTR CMraProto::MraGetXStatusIcon(WPARAM wParam, LPARAM lParam) { if (wParam == 0) wParam = m_iXStatus; + if ( !IsXStatusValid(wParam)) + return 0; return (INT_PTR)IconLibGetIconEx(hXStatusAdvancedStatusIcons[wParam], lParam); } diff --git a/protocols/MRA/src/proto.h b/protocols/MRA/src/proto.h index 9bcce264ef..c089cabe08 100644 --- a/protocols/MRA/src/proto.h +++ b/protocols/MRA/src/proto.h @@ -16,11 +16,11 @@ typedef struct mrim_packet_header_t u_long seq; // Sequence u_long msg; // ��� ������ u_long dlen; // ����� ������ - u_char reserved[24]; // ��������������� + u_char reserved[24]; // ��������������� } mrim_packet_header_t; -#define CS_MAGIC 0xDEADBEEF // ���������� Magic ( C <-> S ) +#define CS_MAGIC 0xDEADBEEF // ���������� Magic ( C <-> S ) // UNICODE = (UTF-16LE) ( >= 1.17) @@ -31,115 +31,113 @@ mrim_packet_header_t; ***************************************************************************/ -#define MRIM_CS_HELLO 0x1001 // C -> S +#define MRIM_CS_HELLO 0x1001 // C->S // empty -#define MRIM_CS_HELLO_ACK 0x1002 // S -> C +#define MRIM_CS_HELLO_ACK 0x1002 // S->C // mrim_connection_params_t -#define MRIM_CS_LOGIN_ACK 0x1004 // S -> C +#define MRIM_CS_LOGIN_ACK 0x1004 // S->C // empty -#define MRIM_CS_LOGIN_REJ 0x1005 // S -> C +#define MRIM_CS_LOGIN_REJ 0x1005 // S->C // LPS reason ??? -#define MRIM_CS_PING 0x1006 // C -> S +#define MRIM_CS_PING 0x1006 // C->S // empty -#define MRIM_CS_MESSAGE 0x1008 // C -> S +#define MRIM_CS_MESSAGE 0x1008 // C->S // UL flags #define MESSAGE_FLAG_OFFLINE 0x00000001 - #define MESSAGE_FLAG_NORECV 0x00000004 - #define MESSAGE_FLAG_AUTHORIZE 0x00000008 // X-MRIM-Flags: 00000008 - #define MESSAGE_FLAG_SYSTEM 0x00000040 - #define MESSAGE_FLAG_RTF 0x00000080 + #define MESSAGE_FLAG_NORECV 0x00000004 + #define MESSAGE_FLAG_AUTHORIZE 0x00000008 // X-MRIM-Flags: 00000008 + #define MESSAGE_FLAG_SYSTEM 0x00000040 + #define MESSAGE_FLAG_RTF 0x00000080 #define MESSAGE_FLAG_CONTACT 0x00000200 - #define MESSAGE_FLAG_NOTIFY 0x00000400 - #define MESSAGE_FLAG_SMS 0x00000800 + #define MESSAGE_FLAG_NOTIFY 0x00000400 + #define MESSAGE_FLAG_SMS 0x00000800 #define MESSAGE_FLAG_MULTICAST 0x00001000 #define MESSAGE_SMS_DELIVERY_REPORT 0x00002000 - #define MESSAGE_FLAG_ALARM 0x00004000 - #define MESSAGE_FLAG_FLASH 0x00008000 - #define MESSAGE_FLAG_SPAMF_SPAM 0x00020000 // report spam back to the server - #define MESSAGE_FLAG_MULTICHAT 0x00400000 // - #define MULTICHAT_MESSAGE 0 // received message (s->c) + #define MESSAGE_FLAG_ALARM 0x00004000 + #define MESSAGE_FLAG_FLASH 0x00008000 + #define MESSAGE_FLAG_SPAMF_SPAM 0x00020000 // report spam back to the server + #define MESSAGE_FLAG_MULTICHAT 0x00400000 // + #define MULTICHAT_MESSAGE 0 // received message (s->c) #define MULTICHAT_GET_MEMBERS 1 // request members list from server (c->s) - #define MULTICHAT_MEMBERS 2 // members list from server (s->c) + #define MULTICHAT_MEMBERS 2 // members list from server (s->c) #define MULTICHAT_ADD_MEMBERS 3 // - #define MULTICHAT_ATTACHED 4 // user joined to chat (s->c) - #define MULTICHAT_DETACHED 5 // user leave chat (s->c) - #define MULTICHAT_DESTROYED 6 // - #define MULTICHAT_INVITE 7 // - #define MESSAGE_FLAG_v1p16 0x00100000 // ��� ������������� ������� - #define MESSAGE_FLAG_CP1251 0x00200000 + #define MULTICHAT_ATTACHED 4 // user joined to chat (s->c) + #define MULTICHAT_DETACHED 5 // user leave chat (s->c) + #define MULTICHAT_DESTROYED 6 // + #define MULTICHAT_INVITE 7 // + #define MESSAGE_FLAG_v1p16 0x00100000 // ��� ������������� ������� + #define MESSAGE_FLAG_CP1251 0x00200000 // LPS to e-mail ANSI // LPS message ANSI/UNICODE (see flags) // LPS rtf-formatted message ( >= 1.1) ??? // LPS multichat_data ( >= 1.20) ??? #define MAX_MULTICAST_RECIPIENTS 50 - #define MESSAGE_USERFLAGS_MASK 0x000036A8 // Flags that user is allowed to set himself + #define MESSAGE_USERFLAGS_MASK 0x000036A8 // Flags that user is allowed to set himself -#define MRIM_CS_MESSAGE_ACK 0x1009 // S -> C +#define MRIM_CS_MESSAGE_ACK 0x1009 // S->C // UL msg_id // UL flags // LPS from e-mail ANSI // LPS message UNICODE // LPS rtf-formatted message ( >= 1.1) - MESSAGE_FLAG_RTF -// //BASE64( - MESSAGE_FLAG_AUTHORIZE -// UL parts count = 2 -// LPS auth_sender_nick UNICODE -// LPS auth_request_text UNICODE -//[ LPS multichat_data ] ( >= 1.20) - MESSAGE_FLAG_MULTICHAT -// UL type -// LPS multichat_name -// switch (type) { -// MULTICHAT_MESSAGE { -// LPS sender ANSI -// } -// MULTICHAT_MEMBERS { -// CLPS members -// [ LPS owner ] -// } -// MULTICHAT_ADD_MEMBERS { -// LPS sender ANSI -// CLPS members -// } -// MULTICHAT_ATTACHED { -// LPS member ANSI -// } -// MULTICHAT_DETACHED { -// LPS member ANSI -// } -// MULTICHAT_INVITE { -// LPS sender ANSI -// } -// } +// BASE64( - MESSAGE_FLAG_AUTHORIZE +// UL parts count = 2 +// LPS auth_sender_nick UNICODE +// LPS auth_request_text UNICODE +//[ LPS multichat_data ] ( >= 1.20) - MESSAGE_FLAG_MULTICHAT +// UL type +// LPS multichat_name +// switch (type) { +// MULTICHAT_MESSAGE { +// LPS sender ANSI +// } +// MULTICHAT_MEMBERS { +// CLPS members +// [ LPS owner ] +// } +// MULTICHAT_ADD_MEMBERS { +// LPS sender ANSI +// CLPS members +// } +// MULTICHAT_ATTACHED { +// LPS member ANSI +// } +// MULTICHAT_DETACHED { +// LPS member ANSI +// } +// MULTICHAT_INVITE { +// LPS sender ANSI +// } +// } // ) -#define MRIM_CS_MESSAGE_RECV 0x1011 // C -> S +#define MRIM_CS_MESSAGE_RECV 0x1011 // C->S // LPS from e-mail ANSI // UL msg_id -#define MRIM_CS_MESSAGE_STATUS 0x1012 // S -> C +#define MRIM_CS_MESSAGE_STATUS 0x1012 // S->C // UL status - #define MESSAGE_DELIVERED 0x0000 // Message delivered directly to user - #define MESSAGE_REJECTED_NOUSER 0x8001 // Message rejected - no such user - #define MESSAGE_REJECTED_INTERR 0x8003 // Internal server error + #define MESSAGE_DELIVERED 0x0000 // Message delivered directly to user + #define MESSAGE_REJECTED_NOUSER 0x8001 // Message rejected - no such user + #define MESSAGE_REJECTED_INTERR 0x8003 // Internal server error #define MESSAGE_REJECTED_LIMIT_EXCEEDED 0x8004 // Offline messages limit exceeded - #define MESSAGE_REJECTED_TOO_LARGE 0x8005 // Message is too large + #define MESSAGE_REJECTED_TOO_LARGE 0x8005 // Message is too large #define MESSAGE_REJECTED_DENY_OFFMSG 0x8006 // User does not accept offline messages #define MESSAGE_REJECTED_DENY_OFFFLSH 0x8007 // User does not accept offline flash animation - //#define MESSAGE_REJECTED_DENY_OFFFLSH 0x8008 // User does not accept offline flash animation - //#define MESSAGE_REJECTED_DENY_OFFFLSH 0x8009 // User does not accept offline flash animation -#define MRIM_CS_USER_STATUS 0x100F // S -> C +#define MRIM_CS_USER_STATUS 0x100F // S->C // UL status #define STATUS_OFFLINE 0x00000000 #define STATUS_ONLINE 0x00000001 @@ -184,14 +182,14 @@ mrim_packet_header_t; // "protocol" - MMP protocol number by format "<major>.<minor>". -#define MRIM_CS_LOGOUT 0x1013 // S -> C +#define MRIM_CS_LOGOUT 0x1013 // S->C // UL reason - #define LOGOUT_NO_RELOGIN_FLAG 0x0010 // Logout due to double login + #define LOGOUT_NO_RELOGIN_FLAG 0x0010 // Logout due to double login -#define MRIM_CS_CONNECTION_PARAMS 0x1014 // S -> C (>1.16 depricated ?) +#define MRIM_CS_CONNECTION_PARAMS 0x1014 // S->C (>1.16 depricated ?) // mrim_connection_params_t -#define MRIM_CS_USER_INFO 0x1015 // S -> C +#define MRIM_CS_USER_INFO 0x1015 // S->C // (LPS key, LPS value)* X ??? // MESSAGES.TOTAL - num UNICODE // MESSAGES.UNREAD - num UNICODE @@ -199,53 +197,53 @@ mrim_packet_header_t; // client.endpoint - ip:port UNICODE -#define MRIM_CS_ADD_CONTACT 0x1019 // C -> S +#define MRIM_CS_ADD_CONTACT 0x1019 // C->S // UL flags (group(2) or usual(0) #define CONTACT_FLAG_REMOVED 0x00000001 - #define CONTACT_FLAG_GROUP 0x00000002 + #define CONTACT_FLAG_GROUP 0x00000002 #define CONTACT_FLAG_INVISIBLE 0x00000004 #define CONTACT_FLAG_VISIBLE 0x00000008 - #define CONTACT_FLAG_IGNORE 0x00000010 - #define CONTACT_FLAG_SHADOW 0x00000020 + #define CONTACT_FLAG_IGNORE 0x00000010 + #define CONTACT_FLAG_SHADOW 0x00000020 #define CONTACT_FLAG_AUTHORIZED 0x00000040 // ( >= 1.15) - #define CONTACT_FLAG_MULTICHAT 0x00000080 // ( >= 1.20) = 128 - #define CONTACT_FLAG_UNICODE_NAME 0x00000200 // = 512 - #define CONTACT_FLAG_PHONE 0x00100000 + #define CONTACT_FLAG_MULTICHAT 0x00000080 // ( >= 1.20) = 128 + #define CONTACT_FLAG_UNICODE_NAME 0x00000200 // = 512 + #define CONTACT_FLAG_PHONE 0x00100000 // UL group id (unused if contact is group) // LPS contact e-mail ANSI // LPS name UNICODE // LPS custom phones ANSI // LPS BASE64( -// UL parts count = 2 -// LPS auth_sender_nick ??? -// LPS auth_request_text ??? +// UL parts count = 2 +// LPS auth_sender_nick ??? +// LPS auth_request_text ??? // ) // UL actions ( >= 1.15) // [LPS multichat_data] // CLPS members ( >= 1.20) // [ LPS owner ] #define ADD_CONTACT_FLAG_MYMAIL_INVITE 0x00000001 - #define ADD_CONTACT_FLAG_MULTICHAT_ATTACHE 0x00000002 + #define ADD_CONTACT_FLAG_MULTICHAT_ATTACHE 0x00000002 //used internal in win32 agent #define CONTACT_AWAITING_AUTHORIZATION_USER 0x00000100 - #define CONTACT_FLAG_TEMPORARY 0x00010000 + #define CONTACT_FLAG_TEMPORARY 0x00010000 -#define MRIM_CS_ADD_CONTACT_ACK 0x101A // S -> C +#define MRIM_CS_ADD_CONTACT_ACK 0x101A // S->C // UL status #define CONTACT_OPER_SUCCESS 0x0000 - #define CONTACT_OPER_ERROR 0x0001 - #define CONTACT_OPER_INTERR 0x0002 + #define CONTACT_OPER_ERROR 0x0001 + #define CONTACT_OPER_INTERR 0x0002 #define CONTACT_OPER_NO_SUCH_USER 0x0003 #define CONTACT_OPER_INVALID_INFO 0x0004 #define CONTACT_OPER_USER_EXISTS 0x0005 - #define CONTACT_OPER_GROUP_LIMIT 0x6 + #define CONTACT_OPER_GROUP_LIMIT 0x0006 // UL contact_id or (u_long)-1 if status is not OK // [LPS multichat_contact ( >= 1.20)] -#define MRIM_CS_MODIFY_CONTACT 0x101B // C -> S +#define MRIM_CS_MODIFY_CONTACT 0x101B // C->S // UL id // UL flags - same as for MRIM_CS_ADD_CONTACT // UL group id (unused if contact is group) @@ -253,24 +251,24 @@ mrim_packet_header_t; // LPS name UNICODE // LPS custom phones ANSI -#define MRIM_CS_MODIFY_CONTACT_ACK 0x101C // S -> C +#define MRIM_CS_MODIFY_CONTACT_ACK 0x101C // S->C // UL status, same as for MRIM_CS_ADD_CONTACT_ACK -#define MRIM_CS_OFFLINE_MESSAGE_ACK 0x101D // S -> C +#define MRIM_CS_OFFLINE_MESSAGE_ACK 0x101D // S->C // UIDL // LPS offline message ??? -#define MRIM_CS_DELETE_OFFLINE_MESSAGE 0x101E // C -> S +#define MRIM_CS_DELETE_OFFLINE_MESSAGE 0x101E // C->S // UIDL -#define MRIM_CS_AUTHORIZE 0x1020 // C -> S +#define MRIM_CS_AUTHORIZE 0x1020 // C->S // LPS user e-mail ANSI -#define MRIM_CS_AUTHORIZE_ACK 0x1021 // S -> C +#define MRIM_CS_AUTHORIZE_ACK 0x1021 // S->C // LPS user e-mail ANSI -#define MRIM_CS_CHANGE_STATUS 0x1022 // C -> S +#define MRIM_CS_CHANGE_STATUS 0x1022 // C->S // UL new status // LPS spec_status_uri ANSI ( >= 1.14) // LPS status_title UNICODE ( >= 1.14) @@ -278,17 +276,17 @@ mrim_packet_header_t; // UL com_support ( >= 1.14) (see MRIM_CS_USER_STATUS) -#define MRIM_CS_GET_MPOP_SESSION 0x1024 // C -> S +#define MRIM_CS_GET_MPOP_SESSION 0x1024 // C->S -#define MRIM_CS_MPOP_SESSION 0x1025 // S -> C +#define MRIM_CS_MPOP_SESSION 0x1025 // S->C // UL status #define MRIM_GET_SESSION_FAIL 0 #define MRIM_GET_SESSION_SUCCESS 1 // LPS mpop session ??? -#define MRIM_CS_FILE_TRANSFER 0x1026 // C->S +#define MRIM_CS_FILE_TRANSFER 0x1026 // C->S // LPS TO/FROM e-mail ANSI // DWORD id_request - uniq per connect // DWORD FILESIZE @@ -298,7 +296,7 @@ mrim_packet_header_t; // Files (FileName;FileSize;FileName;FileSize;) UNICODE // LPS Conn (IP:Port;IP:Port;) ANSI -#define MRIM_CS_FILE_TRANSFER_ACK 0x1027 // S->C +#define MRIM_CS_FILE_TRANSFER_ACK 0x1027 // S->C // DWORD status #define FILE_TRANSFER_STATUS_OK 1 #define FILE_TRANSFER_STATUS_DECLINE 0 @@ -312,51 +310,51 @@ mrim_packet_header_t; //white pages! -#define MRIM_CS_WP_REQUEST 0x1029 //C->S +#define MRIM_CS_WP_REQUEST 0x1029 // C->S // DWORD field // LPS value ??? -#define PARAMS_NUMBER_LIMIT 50 +#define PARAMS_NUMBER_LIMIT 50 #define PARAM_VALUE_LENGTH_LIMIT 64 //if last symbol in value eq '*' it will be replaced by LIKE '%' // params define // must be in consecutive order (0..N) to quick check in check_anketa_info_request enum { - MRIM_CS_WP_REQUEST_PARAM_USER = 0, // ANSI + MRIM_CS_WP_REQUEST_PARAM_USER = 0, // ANSI MRIM_CS_WP_REQUEST_PARAM_DOMAIN, // ANSI MRIM_CS_WP_REQUEST_PARAM_NICKNAME, // UNICODE MRIM_CS_WP_REQUEST_PARAM_FIRSTNAME, // UNICODE MRIM_CS_WP_REQUEST_PARAM_LASTNAME, // UNICODE - MRIM_CS_WP_REQUEST_PARAM_SEX , // ANSI + MRIM_CS_WP_REQUEST_PARAM_SEX, // ANSI MRIM_CS_WP_REQUEST_PARAM_BIRTHDAY, // not used for search - MRIM_CS_WP_REQUEST_PARAM_DATE1 , // ANSI - MRIM_CS_WP_REQUEST_PARAM_DATE2 , // ANSI + MRIM_CS_WP_REQUEST_PARAM_DATE1, // ANSI + MRIM_CS_WP_REQUEST_PARAM_DATE2, // ANSI //!!!!!!!!!!!!!!!!!!!online request param must be at end of request!!!!!!!!!!!!!!! - MRIM_CS_WP_REQUEST_PARAM_ONLINE , // ANSI - MRIM_CS_WP_REQUEST_PARAM_STATUS , // we do not used it, yet + MRIM_CS_WP_REQUEST_PARAM_ONLINE, // ANSI + MRIM_CS_WP_REQUEST_PARAM_STATUS, // we do not used it, yet MRIM_CS_WP_REQUEST_PARAM_CITY_ID, // ANSI MRIM_CS_WP_REQUEST_PARAM_ZODIAC, // ANSI - MRIM_CS_WP_REQUEST_PARAM_BIRTHDAY_MONTH, // ANSI - MRIM_CS_WP_REQUEST_PARAM_BIRTHDAY_DAY, // ANSI - MRIM_CS_WP_REQUEST_PARAM_COUNTRY_ID, // ANSI + MRIM_CS_WP_REQUEST_PARAM_BIRTHDAY_MONTH, // ANSI + MRIM_CS_WP_REQUEST_PARAM_BIRTHDAY_DAY, // ANSI + MRIM_CS_WP_REQUEST_PARAM_COUNTRY_ID, // ANSI MRIM_CS_WP_REQUEST_PARAM_MAX }; -#define MRIM_CS_ANKETA_INFO 0x1028 //S->C +#define MRIM_CS_ANKETA_INFO 0x1028 // S->C // DWORD status - #define MRIM_ANKETA_INFO_STATUS_OK 1 + #define MRIM_ANKETA_INFO_STATUS_OK 1 #define MRIM_ANKETA_INFO_STATUS_NOUSER 0 #define MRIM_ANKETA_INFO_STATUS_DBERR 2 #define MRIM_ANKETA_INFO_STATUS_RATELIMERR 3 // DWORD fields_num // DWORD max_rows // DWORD server_time sec since 1970 (unixtime) - // fields set //%fields_num == 0 - // values set //%fields_num == 0 + // fields set //%fields_num == 0 + // values set //%fields_num == 0 // LPS value (numbers too) ??? -#define MRIM_CS_MAILBOX_STATUS 0x1033 +#define MRIM_CS_MAILBOX_STATUS 0x1033 // DWORD new messages in mailbox @@ -387,7 +385,7 @@ mrim_packet_header_t; -#define MRIM_CS_CONTACT_LIST2 0x1037 //S->C +#define MRIM_CS_CONTACT_LIST2 0x1037 // S->C // UL status #define GET_CONTACTS_OK 0x0000 #define GET_CONTACTS_ERROR 0x0001 @@ -409,7 +407,7 @@ mrim_packet_header_t; //old packet cs_login with cs_statistic -#define MRIM_CS_LOGIN2 0x1038 // C -> S +#define MRIM_CS_LOGIN2 0x1038 // C->S // LPS login e-mail ANSI // LPS password ANSI // DWORD status @@ -498,17 +496,17 @@ mrim_packet_header_t; */ -#define MRIM_CS_SMS 0x1039 // C -> S +#define MRIM_CS_SMS 0x1039 // C->S // UL flags // LPS to Phone ??? // LPS message ??? -#define MRIM_CS_SMS_ACK 0x1040 // S->C +#define MRIM_CS_SMS_ACK 0x1040 // S->C // UL status -#define MRIM_CS_PROXY 0x1044 +#define MRIM_CS_PROXY 0x1044 // LPS to e-mail ANSI // DWORD id_request // DWORD data_type @@ -519,15 +517,15 @@ mrim_packet_header_t; // LPS lps_ip_port ??? // DWORD session_id[4] -#define MRIM_CS_PROXY_ACK 0x1045 +#define MRIM_CS_PROXY_ACK 0x1045 //DWORD status - #define PROXY_STATUS_OK 1 - #define PROXY_STATUS_DECLINE 0 - #define PROXY_STATUS_ERROR 2 + #define PROXY_STATUS_OK 1 + #define PROXY_STATUS_DECLINE 0 + #define PROXY_STATUS_ERROR 2 #define PROXY_STATUS_INCOMPATIBLE_VERS 3 - #define PROXY_STATUS_NOHARDWARE 4 - #define PROXY_STATUS_MIRROR 5 - #define PROXY_STATUS_CLOSED 6 + #define PROXY_STATUS_NOHARDWARE 4 + #define PROXY_STATUS_MIRROR 5 + #define PROXY_STATUS_CLOSED 6 // LPS to e-mail ANSI // DWORD id_request // DWORD data_type @@ -535,14 +533,14 @@ mrim_packet_header_t; // LPS: lps_ip_port ??? // DWORD[4] Session_id -#define MRIM_CS_PROXY_HELLO 0x1046 +#define MRIM_CS_PROXY_HELLO 0x1046 // DWORD[4] Session_id #define MRIM_CS_PROXY_HELLO_ACK 0x1047 -#define MRIM_CS_NEW_MAIL 0x1048 // S->C +#define MRIM_CS_NEW_MAIL 0x1048 // S->C // UL unread count // LPS from e-mail ANSI // LPS subject ??? @@ -574,26 +572,26 @@ mrim_packet_header_t; // } -#define MRIM_CS_UNKNOWN 0x1073 +#define MRIM_CS_UNKNOWN 0x1073 // DWORD ??? // DWORD ??? -#define MRIM_CS_USER_GEO 0x1077 +#define MRIM_CS_USER_GEO 0x1077 // LPS user // LPS: // DWORD flags? - // LPS: "geo-point": - // LPS dolgota - // LPS shirota - // LPS "MAPOBJECT" - // LPS some data? - // LPS/DWORD - // LPS/DWORD - // LPS some data? - // LPS some data? - - -#define MRIM_CS_SERVER_SETTINGS 0x1079 +// LPS: "geo-point": + // LPS dolgota + // LPS shirota + // LPS "MAPOBJECT" + // LPS some data? + // LPS/DWORD + // LPS/DWORD + // LPS some data? + // LPS some data? + + +#define MRIM_CS_SERVER_SETTINGS 0x1079 diff --git a/protocols/MRA/xstatus_MRA/res/xstatus_MRA.rc b/protocols/MRA/xstatus_MRA/res/xstatus_MRA.rc index bff87382ba..f7bdc005dc 100644 --- a/protocols/MRA/xstatus_MRA/res/xstatus_MRA.rc +++ b/protocols/MRA/xstatus_MRA/res/xstatus_MRA.rc @@ -76,6 +76,7 @@ IDI_XSTATUS45 ICON "50.ico" IDI_XSTATUS46 ICON "51.ico" IDI_XSTATUS47 ICON "52.ico" IDI_XSTATUS48 ICON "53.ico" +IDI_XSTATUS49 ICON "54.ico" IDI_XSTATUS_UNKNOWN ICON "unknown.ico" ///////////////////////////////////////////////////////////////////////////// diff --git a/protocols/MRA/xstatus_MRA/src/resource.h b/protocols/MRA/xstatus_MRA/src/resource.h index efe5d6f369..9b8624eac7 100644 --- a/protocols/MRA/xstatus_MRA/src/resource.h +++ b/protocols/MRA/xstatus_MRA/src/resource.h @@ -51,7 +51,8 @@ #define IDI_XSTATUS46 246 #define IDI_XSTATUS47 247 #define IDI_XSTATUS48 248 -#define IDI_XSTATUS_UNKNOWN 249 +#define IDI_XSTATUS49 249 +#define IDI_XSTATUS_UNKNOWN 250 // Next default values for new objects -- cgit v1.2.3