Index: src/vk_proto.cpp =================================================================== --- src/vk_proto.cpp (revision 10277) +++ src/vk_proto.cpp (working copy) @@ -171,15 +171,22 @@ if (flags & PREF_UTF) szMsg = mir_strdup(msg); else if (flags & PREF_UNICODE) - msg = mir_utf8encodeW((wchar_t*)&msg[strlen(msg)+1]); + szMsg = mir_utf8encodeW((wchar_t*)&msg[strlen(msg)+1]); else - msg = mir_utf8encode(msg); + szMsg = mir_utf8encode(msg); ULONG msgId = ::InterlockedIncrement(&m_msgId); - AsyncHttpRequest *pReq = new AsyncHttpRequest(this, REQUEST_GET, "/method/messages.send.json", true, &CVkProto::OnSendMessage) - << INT_PARAM("type", 0) << INT_PARAM("uid", userID) << CHAR_PARAM("message", msg); - pReq->pData = (char*)hContact; - pReq->pUserInfo = (void*)msgId; + AsyncHttpRequest *pReq = new AsyncHttpRequest(this, REQUEST_POST, "/method/messages.send.json", true, &CVkProto::OnSendMessage); + pReq->AddHeader("Content-Type", "application/x-www-form-urlencoded"); + + CMStringA szBody = "type=0&uid="; + + szBody.AppendFormat("%i&message=%s",userID,ptrA(mir_urlEncode(szMsg))); + pReq->pData = mir_strdup(szBody); + pReq->dataLength = szBody.GetLength(); + pReq->pUserInfo = (void*)msgId; + pReq->hContact = hContact; + Push(pReq); if (!m_bServerDelivery) @@ -200,9 +207,9 @@ iResult = ACKRESULT_SUCCESS; } } - + if (m_bServerDelivery) - ProtoBroadcastAck((MCONTACT)pReq->pData, ACKTYPE_MESSAGE, iResult, pReq->pUserInfo, 0); + ProtoBroadcastAck((MCONTACT)pReq->hContact, ACKTYPE_MESSAGE, iResult, pReq->pUserInfo, 0); pReq->pData = NULL; } Index: src/vk_proto.h =================================================================== --- src/vk_proto.h (revision 10277) +++ src/vk_proto.h (working copy) @@ -33,6 +33,7 @@ bool bNeedsRestart, bIsMainConn, m_bHasParams; VK_REQUEST_HANDLER m_pFunc; void *pUserInfo; + MCONTACT hContact; }; struct PARAM Index: src/vk_thread.cpp =================================================================== --- src/vk_thread.cpp (revision 10277) +++ src/vk_thread.cpp (working copy) @@ -477,7 +477,11 @@ if (isOut) recv.flags |= PREF_SENT; recv.timestamp = datetime; - recv.tszMessage = ptszBody; + + CMStringW szBody = ptszBody; + szBody.Replace(_T("
"),_T("\n")); + recv.tszMessage = (TCHAR *) szBody.c_str(); + recv.lParam = isOut; recv.pCustomData = szMid; recv.cbCustomDataSize = (int)strlen(szMid);