diff options
| author | Rozhuk Ivan <rozhuk.im@gmail.com> | 2014-03-07 21:50:21 +0000 | 
|---|---|---|
| committer | Rozhuk Ivan <rozhuk.im@gmail.com> | 2014-03-07 21:50:21 +0000 | 
| commit | 4b00a811ae7e3678578b04e6811265076f9404d9 (patch) | |
| tree | aec31fae331b9e4c4543433ed4bdd3fc2300fd0e | |
| parent | 5e54cbba072d17eb0f3d0fea9a14f048a3f2ab84 (diff) | |
MRA
+ Add: Send E-Mail to contact
- Del: mail.ru blog service
* Change: web authorization via https
* Fix: contact services: auth request, auth grang, send post card
* Fix: net error handle (after prev commit)
git-svn-id: http://svn.miranda-ng.org/main/trunk@8466 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
| -rw-r--r-- | protocols/MRA/res/resource.rc | 1 | ||||
| -rw-r--r-- | protocols/MRA/src/MraConstans.h | 17 | ||||
| -rw-r--r-- | protocols/MRA/src/MraIcons.cpp | 3 | ||||
| -rw-r--r-- | protocols/MRA/src/MraProto.h | 14 | ||||
| -rw-r--r-- | protocols/MRA/src/Mra_functions.cpp | 26 | ||||
| -rw-r--r-- | protocols/MRA/src/Mra_menus.cpp | 46 | ||||
| -rw-r--r-- | protocols/MRA/src/Mra_proto.cpp | 97 | ||||
| -rw-r--r-- | protocols/MRA/src/resource.h | 1 | 
8 files changed, 94 insertions, 111 deletions
| diff --git a/protocols/MRA/res/resource.rc b/protocols/MRA/res/resource.rc index dec2c6899d..73e6b06061 100644 --- a/protocols/MRA/res/resource.rc +++ b/protocols/MRA/res/resource.rc @@ -36,7 +36,6 @@ IDI_AUTHRUGUEST         ICON                    "AuthReguest.ico"  IDI_AUTHGRANT           ICON                    "AuthGrant.ico"
  IDI_MAIL_NOTIFY         ICON                    "MailNotify.ico"
  IDI_MRA_WEB_SEARCH      ICON                    "WebSearch.ico"
 -IDI_MRA_BLOGS           ICON                    "Blogs.ico"
  IDI_MRA_POSTCARD        ICON                    "PostCards.ico"
  IDI_MRA_PHOTO           ICON                    "Photo.ico"
  IDI_MRA_CHAT            ICON                    "Chat.ico"
 diff --git a/protocols/MRA/src/MraConstans.h b/protocols/MRA/src/MraConstans.h index e68f4dcfc5..e7dcc166c6 100644 --- a/protocols/MRA/src/MraConstans.h +++ b/protocols/MRA/src/MraConstans.h @@ -50,7 +50,6 @@ static const LPSTR lpcszMailRuDomains[] =  #define MRA_EDIT_PROFILE                     "/EditProfile"
  #define MRA_EDIT_PROFILE_STR                 LPGEN("Edit &Profile")
  #define MRA_MY_ALBUM_STR                     LPGEN("My Album")
 -#define MRA_MY_BLOG_STR                      LPGEN("My Blog")
  #define MRA_MY_BLOGSTATUS_STR                LPGEN("My Blog Status")
  #define MRA_MY_VIDEO_STR                     LPGEN("My Video")
  #define MRA_MY_ANSWERS_STR                   LPGEN("My Answers")
 @@ -64,12 +63,12 @@ static const LPSTR lpcszMailRuDomains[] =  #define MRA_REQ_AUTH_FOR_ALL                 "/ReqAuthForAll"
  #define MRA_REQ_AUTH_FOR_ALL_STR             LPGEN("Request authorization for all")
 -#define MRA_MPOP_AUTH_URL                    "http://swa.mail.ru/cgi-bin/auth?Login=%s&agent=%s&page=%s"
 +//#define MRA_MPOP_AUTH_URL                    "http://swa.mail.ru/cgi-bin/auth?Login=%s&agent=%s&page=%s"
 +#define MRA_MPOP_AUTH_URL                    "https://auth.mail.ru/cgi-bin/auth?Login=%s&agent=%s&noredirecttologin=1&page=%s"
 -#define MRA_WIN_INBOX_URL                    "http://win.mail.ru/cgi-bin/start"
 +#define MRA_WIN_INBOX_URL                    "https://win.mail.ru/cgi-bin/start"
  #define MRA_PDA_INBOX_URL                    "http://pda.mail.ru/cgi-bin/start"
 -#define MRA_EDIT_PROFILE_URL                 "http://win.mail.ru/cgi-bin/userinfo?mra=1"
 -#define MRA_CHAT_URL                         "http://chat.mail.ru"
 +#define MRA_EDIT_PROFILE_URL                 "https://win.mail.ru/cgi-bin/userinfo?mra=1"
  #define MRA_SEARCH_URL                       _T("http://go.mail.ru")
  // used spesialy! added: /domain/user
 @@ -80,8 +79,8 @@ static const LPSTR lpcszMailRuDomains[] =  #define MRA_WORLD_URL                        "http://my.mail.ru"
  // without auth
 -#define MRA_REGISTER_URL                     _T("http://win.mail.ru/cgi-bin/signup")
 -#define MRA_FORGOT_PASSWORD_URL              _T("http://win.mail.ru/cgi-bin/passremind")
 +#define MRA_REGISTER_URL                     _T("https://win.mail.ru/cgi-bin/signup")
 +#define MRA_FORGOT_PASSWORD_URL              _T("https://win.mail.ru/cgi-bin/passremind")
  // wParam = hContact
 @@ -89,12 +88,12 @@ static const LPSTR lpcszMailRuDomains[] =  #define MRA_REQ_AUTH_STR                     LPGEN("Request authorization")
  #define MRA_GRANT_AUTH                       "/GrantAuth"
  #define MRA_GRANT_AUTH_STR                   LPGEN("Grant authorization")
 +#define MRA_SEND_EMAIL                       "/SendEMail"
 +#define MRA_SEND_EMAIL_STR                   LPGEN("&Send E-Mail")
  #define MRA_SEND_POSTCARD                    "/SendPostcard"
  #define MRA_SEND_POSTCARD_STR                LPGEN("&Send postcard")
  #define MRA_VIEW_ALBUM                       "/ViewAlbum"
  #define MRA_VIEW_ALBUM_STR                   LPGEN("&View Album")
 -#define MRA_READ_BLOG                        "/ReadBlog"
 -#define MRA_READ_BLOG_STR                    LPGEN("&Read Blog")
  #define MRA_REPLY_BLOG_STATUS                "/ReplyBlogStatus"
  #define MRA_REPLY_BLOG_STATUS_STR            LPGEN("Reply Blog Status")
  #define MRA_VIEW_VIDEO                       "/ViewVideo"
 diff --git a/protocols/MRA/src/MraIcons.cpp b/protocols/MRA/src/MraIcons.cpp index 89f957f69d..a36c6f9d35 100644 --- a/protocols/MRA/src/MraIcons.cpp +++ b/protocols/MRA/src/MraIcons.cpp @@ -9,7 +9,6 @@ IconItem gdiMenuItems[MAIN_MENU_ITEMS_COUNT] =  	{ MRA_SHOW_INBOX_STATUS_STR,  MRA_SHOW_INBOX_STATUS,  IDI_MAIL_NOTIFY       },
  	{ MRA_EDIT_PROFILE_STR,       MRA_EDIT_PROFILE,       IDI_PROFILE           },
  	{ MRA_MY_ALBUM_STR,           MRA_VIEW_ALBUM,         IDI_MRA_PHOTO         },
 -	{ MRA_MY_BLOG_STR,            MRA_READ_BLOG,          IDI_MRA_BLOGS         },
  	{ MRA_MY_BLOGSTATUS_STR,      MRA_REPLY_BLOG_STATUS,  IDI_BLOGSTATUS        },
  	{ MRA_MY_VIDEO_STR,           MRA_VIEW_VIDEO,         IDI_MRA_VIDEO         },
  	{ MRA_MY_ANSWERS_STR,         MRA_ANSWERS,            IDI_MRA_ANSWERS       },
 @@ -24,9 +23,9 @@ IconItem gdiContactMenuItems[CONTACT_MENU_ITEMS_COUNT] =  {
  	{ MRA_REQ_AUTH_STR,           MRA_REQ_AUTH,           IDI_AUTHRUGUEST       },
  	{ MRA_GRANT_AUTH_STR,         MRA_GRANT_AUTH,         IDI_AUTHGRANT         },
 +	{ MRA_SEND_EMAIL_STR,         MRA_SEND_EMAIL,         IDI_INBOX             },
  	{ MRA_SEND_POSTCARD_STR,      MRA_SEND_POSTCARD,      IDI_MRA_POSTCARD      },
  	{ MRA_VIEW_ALBUM_STR,         MRA_VIEW_ALBUM,         IDI_MRA_PHOTO         },
 -	{ MRA_READ_BLOG_STR,          MRA_READ_BLOG,          IDI_MRA_BLOGS         },
  	{ MRA_REPLY_BLOG_STATUS_STR,  MRA_REPLY_BLOG_STATUS,  IDI_BLOGSTATUS        },
  	{ MRA_VIEW_VIDEO_STR,         MRA_VIEW_VIDEO,         IDI_MRA_VIDEO         },
  	{ MRA_ANSWERS_STR,            MRA_ANSWERS,            IDI_MRA_ANSWERS       },
 diff --git a/protocols/MRA/src/MraProto.h b/protocols/MRA/src/MraProto.h index cc732bc19d..55edc11ece 100644 --- a/protocols/MRA/src/MraProto.h +++ b/protocols/MRA/src/MraProto.h @@ -2,17 +2,17 @@  #define SCBIFSI_LOCK_CHANGES_EVENTS	1
  #define SCBIF_ID			1
 -#define SCBIF_GROUP_ID		2
 +#define SCBIF_GROUP_ID			2
  #define SCBIF_FLAG			4
 -#define SCBIF_SERVER_FLAG	8
 -#define SCBIF_STATUS		16
 +#define SCBIF_SERVER_FLAG		8
 +#define SCBIF_STATUS			16
  #define SCBIF_EMAIL			32
  #define SCBIF_NICK			64
 -#define SCBIF_PHONES		128
 +#define SCBIF_PHONES			128
 -#define MAIN_MENU_ITEMS_COUNT		13
 +#define MAIN_MENU_ITEMS_COUNT		12
  #define CONTACT_MENU_ITEMS_COUNT	10
 -#define ADV_ICON_MAX             5
 +#define ADV_ICON_MAX			5
  struct MRA_FILES_QUEUE_ITEM;
 @@ -138,9 +138,9 @@ struct CMraProto : public PROTO<CMraProto>  	INT_PTR __cdecl MraRequestAuthorization(WPARAM, LPARAM);
  	INT_PTR __cdecl MraGrantAuthorization(WPARAM, LPARAM);
 +	INT_PTR __cdecl MraSendEmail(WPARAM, LPARAM);
  	INT_PTR __cdecl MraSendPostcard(WPARAM, LPARAM);
  	INT_PTR __cdecl MraViewAlbum(WPARAM, LPARAM);
 -	INT_PTR __cdecl MraReadBlog(WPARAM, LPARAM);
  	INT_PTR __cdecl MraReplyBlogStatus(WPARAM, LPARAM);
  	INT_PTR __cdecl MraViewVideo(WPARAM, LPARAM);
  	INT_PTR __cdecl MraAnswers(WPARAM, LPARAM);
 diff --git a/protocols/MRA/src/Mra_functions.cpp b/protocols/MRA/src/Mra_functions.cpp index 56d22b66a5..427ddfe46d 100644 --- a/protocols/MRA/src/Mra_functions.cpp +++ b/protocols/MRA/src/Mra_functions.cpp @@ -1038,18 +1038,8 @@ INT_PTR CALLBACK SetXStatusDlgProc(HWND hWndDlg, UINT message, WPARAM wParam, LP  		break;
  	case WM_DESTROY:
 +		SetWindowLongPtr(hWndDlg, GWLP_USERDATA, 0);
  		if (dat) { // set our xStatus
 -			SetWindowLongPtr(hWndDlg, GWLP_USERDATA, 0);
 -
 -			HWND hWndEdit = GetDlgItem(hWndDlg, IDC_XTITLE);
 -			WNDPROC OldMessageEditProc = (WNDPROC)GetWindowLongPtr(hWndEdit, GWLP_USERDATA);
 -			SetWindowLongPtr(hWndEdit, GWLP_WNDPROC, (LONG_PTR)OldMessageEditProc);
 -			SetWindowLongPtr(hWndEdit, GWLP_USERDATA, 0);
 -
 -			hWndEdit = GetDlgItem(hWndDlg, IDC_XMSG);
 -			OldMessageEditProc = (WNDPROC)GetWindowLongPtr(hWndEdit, GWLP_USERDATA);
 -			SetWindowLongPtr(hWndEdit, GWLP_WNDPROC, (LONG_PTR)OldMessageEditProc);
 -			SetWindowLongPtr(hWndEdit, GWLP_USERDATA, 0);
  			TCHAR szBuff[STATUS_TITLE_MAX + STATUS_DESC_MAX];
  			DWORD dwBuffSize = GetDlgItemText(hWndDlg, IDC_XMSG, szBuff, STATUS_DESC_MAX + 1);
 @@ -1113,8 +1103,7 @@ INT_PTR CALLBACK SendReplyBlogStatusDlgProc(HWND hWndDlg, UINT message, WPARAM w  			SetWindowLongPtr(hWndDlg, GWLP_USERDATA, (LONG_PTR)dat);
  			HWND hWndEdit = GetDlgItem(hWndDlg, IDC_MSG_TO_SEND);
 -			WNDPROC OldMessageEditProc = (WNDPROC)SetWindowLongPtr(hWndEdit, GWLP_WNDPROC, (LONG_PTR)MessageEditSubclassProc);
 -			SetWindowLongPtr(hWndEdit, GWLP_USERDATA, (LONG_PTR)OldMessageEditProc);
 +			mir_subclassWindow(GetDlgItem(hWndDlg, IDC_MSG_TO_SEND), MessageEditSubclassProc);
  			SendMessage(hWndEdit, EM_LIMITTEXT, MICBLOG_STATUS_MAX, 0);
  			SendMessage(hWndDlg, WM_SETICON, ICON_BIG, (LPARAM)IconLibGetIcon(gdiMenuItems[5].hIcolib));
 @@ -1191,15 +1180,8 @@ INT_PTR CALLBACK SendReplyBlogStatusDlgProc(HWND hWndDlg, UINT message, WPARAM w  		break;
  	case WM_DESTROY:
 -		if (dat) {
 -			SetWindowLongPtr(hWndDlg, GWLP_USERDATA, (LONG_PTR)0);
 -
 -			HWND hWndEdit = GetDlgItem(hWndDlg, IDC_MSG_TO_SEND);
 -			WNDPROC OldMessageEditProc = (WNDPROC)GetWindowLongPtr(hWndEdit, GWLP_USERDATA);
 -			SetWindowLongPtr(hWndEdit, GWLP_WNDPROC, (LONG_PTR)OldMessageEditProc);
 -			SetWindowLongPtr(hWndEdit, GWLP_USERDATA, (LONG_PTR)0);
 -			mir_free(dat);
 -		}
 +		SetWindowLongPtr(hWndDlg, GWLP_USERDATA, (LONG_PTR)0);
 +		mir_free(dat);
  		EndDialog(hWndDlg, NO_ERROR);
  		break;
  	}
 diff --git a/protocols/MRA/src/Mra_menus.cpp b/protocols/MRA/src/Mra_menus.cpp index d4fa5a7c16..3d429ca4ee 100644 --- a/protocols/MRA/src/Mra_menus.cpp +++ b/protocols/MRA/src/Mra_menus.cpp @@ -106,6 +106,23 @@ INT_PTR CMraProto::MraGrantAuthorization(WPARAM wParam, LPARAM lParam)  	return 0;
  }
 +INT_PTR CMraProto::MraSendEmail(WPARAM wParam, LPARAM lParam)
 +{
 +	DWORD dwContactEMailCount = GetContactEMailCount(wParam, FALSE);
 +	if (dwContactEMailCount) {
 +		if (dwContactEMailCount == 1) {
 +			CMStringA szUrl, szEmail;
 +			if (GetContactFirstEMail(wParam, FALSE, szEmail)) {
 +				szEmail.MakeLower();
 +				szUrl.Format("https://e.mail.ru/cgi-bin/sentmsg?To=%s", szEmail);
 +				MraMPopSessionQueueAddUrl(hMPopSessionQueue, szUrl);
 +			}
 +		}
 +		else MraSelectEMailDlgShow(wParam, MRA_SELECT_EMAIL_TYPE_SEND_POSTCARD);
 +	}
 +	return 0;
 +}
 +
  INT_PTR CMraProto::MraSendPostcard(WPARAM wParam, LPARAM lParam)
  {
  	DWORD dwContactEMailCount = GetContactEMailCount(wParam, FALSE);
 @@ -137,20 +154,6 @@ INT_PTR CMraProto::MraViewAlbum(WPARAM wParam, LPARAM lParam)  	return 0;
  }
 -INT_PTR CMraProto::MraReadBlog(WPARAM wParam, LPARAM lParam)
 -{
 -	DWORD dwContactEMailMRCount = GetContactEMailCount(wParam, TRUE);
 -	if (dwContactEMailMRCount)
 -	if (dwContactEMailMRCount == 1) {
 -		CMStringA szEmail;
 -		if (GetContactFirstEMail(wParam, TRUE, szEmail))
 -			MraMPopSessionQueueAddUrlAndEMail(hMPopSessionQueue, MRA_BLOGS_URL, szEmail);
 -	}
 -	else MraSelectEMailDlgShow(wParam, MRA_SELECT_EMAIL_TYPE_READ_BLOG);
 -
 -	return 0;
 -}
 -
  INT_PTR CMraProto::MraReplyBlogStatus(WPARAM wParam, LPARAM lParam)
  {
  	if (!m_bLoggedIn)
 @@ -244,13 +247,13 @@ int CMraProto::MraRebuildContactMenu(WPARAM hContact, LPARAM lParam)  	//"Grant authorization"
  	Menu_ShowItem(hContactMenuItems[1], (m_bLoggedIn && bIsContactMRA && !bChatAgent));
 -	//"&Send postcard"
 +	//"&Send E-Mail"
  	Menu_ShowItem(hContactMenuItems[2], (bHasEMail && !bChatAgent));
 -	//"&View Album"
 -	Menu_ShowItem(hContactMenuItems[3], (bHasEMailMR && !bChatAgent));
 +	//"&Send postcard"
 +	Menu_ShowItem(hContactMenuItems[3], (bHasEMail && !bChatAgent));
 -	//"&Read Blog"
 +	//"&View Album"
  	Menu_ShowItem(hContactMenuItems[4], (bHasEMailMR && !bChatAgent));
  	//"Reply Blog Status"
 @@ -373,11 +376,11 @@ HGENMENU CMraProto::CListCreateMenu(LONG lPosition, LONG lPopupPosition, BOOL bI  void CMraProto::InitMenus()
  {
 +	/* Main menu and contacts services. */
  	CreateProtoService(MRA_GOTO_INBOX, &CMraProto::MraGotoInbox);
  	CreateProtoService(MRA_SHOW_INBOX_STATUS, &CMraProto::MraShowInboxStatus);
  	CreateProtoService(MRA_EDIT_PROFILE, &CMraProto::MraEditProfile);
  	CreateProtoService(MRA_VIEW_ALBUM, &CMraProto::MraViewAlbum);
 -	CreateProtoService(MRA_READ_BLOG, &CMraProto::MraReadBlog);
  	CreateProtoService(MRA_REPLY_BLOG_STATUS, &CMraProto::MraReplyBlogStatus);
  	CreateProtoService(MRA_VIEW_VIDEO, &CMraProto::MraViewVideo);
  	CreateProtoService(MRA_ANSWERS, &CMraProto::MraAnswers);
 @@ -386,6 +389,11 @@ void CMraProto::InitMenus()  	CreateProtoService(MRA_UPD_ALL_USERS_INFO, &CMraProto::MraUpdateAllUsersInfo);
  	CreateProtoService(MRA_CHK_USERS_AVATARS, &CMraProto::MraCheckUpdatesUsersAvt);
  	CreateProtoService(MRA_REQ_AUTH_FOR_ALL, &CMraProto::MraRequestAuthForAll);
 +	/* Contacts only services. */
 +	CreateProtoService(MRA_REQ_AUTH, &CMraProto::MraRequestAuthorization);
 +	CreateProtoService(MRA_GRANT_AUTH, &CMraProto::MraGrantAuthorization);
 +	CreateProtoService(MRA_SEND_EMAIL, &CMraProto::MraSendEmail);
 +	CreateProtoService(MRA_SEND_POSTCARD, &CMraProto::MraSendPostcard);
  	hContactMenuRoot = CListCreateMenu(-2000001001, -500050000, FALSE, gdiContactMenuItems, CONTACT_MENU_ITEMS_COUNT, hContactMenuItems);
 diff --git a/protocols/MRA/src/Mra_proto.cpp b/protocols/MRA/src/Mra_proto.cpp index 76d576dd8d..1399a0f1bf 100644 --- a/protocols/MRA/src/Mra_proto.cpp +++ b/protocols/MRA/src/Mra_proto.cpp @@ -271,7 +271,7 @@ DWORD CMraProto::MraNetworkDispatcher()  		}
  		DWORD dwBytesReceived = Netlib_Recv(nls.hReadConns[0], (LPSTR)(lpbBufferRcv + dwRcvBuffSizeUsed), (dwRcvBuffSize - dwRcvBuffSizeUsed), 0);
 -		if ( !dwBytesReceived && dwBytesReceived == SOCKET_ERROR) { // disconnected
 +		if ( !dwBytesReceived || dwBytesReceived == SOCKET_ERROR) { // disconnected
  			if (m_iStatus != ID_STATUS_OFFLINE) {
  				dwRetErrorCode = GetLastError();
  				ShowFormattedErrorMessage(L"Disconnected, socket read error", dwRetErrorCode);
 @@ -286,54 +286,44 @@ DWORD CMraProto::MraNetworkDispatcher()  			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
 -				else {
 -					debugLogW(L"Bad packet\n");
 +			if (dwDataCurrentBuffSizeUsed < sizeof(mrim_packet_header_t)) { // packet to small, continue receiving
 +				debugLogW(L"Packet to small, continue receiving\n");
 +				memmove(lpbBufferRcv, (lpbBufferRcv + dwDataCurrentBuffOffset), dwDataCurrentBuffSizeUsed);
 +				dwRcvBuffSizeUsed = dwDataCurrentBuffSizeUsed;
 +				dwDataCurrentBuffOffset = 0;
 +				break;
 +			}
 +			if (pmaHeader->magic != CS_MAGIC) { // bad packet
 +				debugLogW(L"Bad packet\n");
 +				dwDataCurrentBuffOffset = 0;
 +				dwRcvBuffSizeUsed = 0;
 +				break;
 +			}
 +			// packet OK
 +			if ((dwDataCurrentBuffSizeUsed - sizeof(mrim_packet_header_t)) < pmaHeader->dlen) { // not all packet received, continue receiving
 +				if (dwDataCurrentBuffOffset) {
 +					memmove(lpbBufferRcv, (lpbBufferRcv + dwDataCurrentBuffOffset), dwDataCurrentBuffSizeUsed);
 +					dwRcvBuffSizeUsed = dwDataCurrentBuffSizeUsed;
  					dwDataCurrentBuffOffset = 0;
 -					dwRcvBuffSizeUsed = 0;
 -					break;
  				}
 +				debugLogW(L"Not all packet received, continue receiving\n");
 +				break;
  			}
 -			// packet to small, continue receiving
 +			// full packet received, may be more than one
 +			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"Packet to small, continue receiving\n");
 -				memmove(lpbBufferRcv, (lpbBufferRcv + dwDataCurrentBuffOffset), dwDataCurrentBuffSizeUsed);
 -				dwRcvBuffSizeUsed = dwDataCurrentBuffSizeUsed;
 +				// динамическое уменьшение буффера приёма
 +				if (dwRcvBuffSize > BUFF_SIZE_RCV) {
 +					dwRcvBuffSize = BUFF_SIZE_RCV;
 +					lpbBufferRcv = (LPBYTE)mir_realloc(lpbBufferRcv, dwRcvBuffSize);
 +				}
  				dwDataCurrentBuffOffset = 0;
 +				dwRcvBuffSizeUsed = 0;
  				break;
  			}
  		}
 @@ -496,17 +486,22 @@ bool CMraProto::CmdUserInfo(BinBuffer &buf)  		}
  		else if (szString == "micblog.show_title") {
  			debugLogA(szString);
 -			buf >> szStringW;
 +			buf >> szString;
  			debugLogW(szStringW);
  		}
 -		else if (szString == "micblog.status.id") {
 +		else if (szString == "micblog.status.xml") {
 +			debugLogA(szString);
  			buf >> szString;
 -			DWORDLONG dwBlogStatusID = _atoi64(szString);
 +			debugLogA(szString);
 +		}
 +		else if (szString == "micblog.status.id") {
 +			buf >> szStringW;
 +			DWORDLONG dwBlogStatusID = _ttoi64(szStringW);
  			mraWriteContactSettingBlob(NULL, DBSETTING_BLOGSTATUSID, &dwBlogStatusID, sizeof(DWORDLONG));
  		}
  		else if (szString == "micblog.status.time") {
 -			buf >> szString;
 -			setDword(DBSETTING_BLOGSTATUSTIME, atoi(szString));
 +			buf >> szStringW;
 +			setDword(DBSETTING_BLOGSTATUSTIME, _ttoi(szStringW));
  		}
  		else if (szString == "micblog.status.text") {
  			buf >> szStringW;
 @@ -515,7 +510,9 @@ bool CMraProto::CmdUserInfo(BinBuffer &buf)  		else if (szString == "HAS_MYMAIL" || szString == "mrim.status.open_search" || szString == "rb.target.cookie" ||
  			szString == "show_web_history_link" || szString == "friends_suggest" || szString == "timestamp" ||
  			szString == "trusted_update" || szString == "mrim.wp.dating") {
 -			buf >> szString;
 +			debugLogA(szString);
 +			buf >> szStringW;
 +			debugLogW(szStringW);
  		}
  		else _CrtDbgBreak();
  	}
 diff --git a/protocols/MRA/src/resource.h b/protocols/MRA/src/resource.h index eb89c48c19..081d1d43b5 100644 --- a/protocols/MRA/src/resource.h +++ b/protocols/MRA/src/resource.h @@ -15,7 +15,6 @@  #define IDD_OPT_AVATRS                  109
  #define IDI_MAIL_NOTIFY                 111
  #define IDI_MRA_WEB_SEARCH              112
 -#define IDI_MRA_BLOGS                   113
  #define IDI_MRA_POSTCARD                114
  #define IDI_MRA_PHOTO                   117
  #define IDI_DELETED                     118
 | 
