summaryrefslogtreecommitdiff
path: root/protocols/MRA/MraSendCommand.cpp
diff options
context:
space:
mode:
authorKirill Volinsky <mataes2007@gmail.com>2012-10-13 08:54:34 +0000
committerKirill Volinsky <mataes2007@gmail.com>2012-10-13 08:54:34 +0000
commitde6eb3e4bc30eff928dc932c03812ede3077926a (patch)
tree966a57948af890b1c47699e5ec0db23a26a7add9 /protocols/MRA/MraSendCommand.cpp
parent870d3d99c22c77a94a352ad292ed67e8eb81edf0 (diff)
MRA: folders restructurization
git-svn-id: http://svn.miranda-ng.org/main/trunk@1900 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
Diffstat (limited to 'protocols/MRA/MraSendCommand.cpp')
-rw-r--r--protocols/MRA/MraSendCommand.cpp688
1 files changed, 0 insertions, 688 deletions
diff --git a/protocols/MRA/MraSendCommand.cpp b/protocols/MRA/MraSendCommand.cpp
deleted file mode 100644
index 158427cbe4..0000000000
--- a/protocols/MRA/MraSendCommand.cpp
+++ /dev/null
@@ -1,688 +0,0 @@
-#include "Mra.h"
-#include "MraSendCommand.h"
-#include "MraRTFMsg.h"
-#include "proto.h"
-
-static void SetUL(LPBYTE *plpBuff, DWORD dwData)
-{
- (*(DWORD*)(*plpBuff)) = dwData;
- (*plpBuff) += sizeof(DWORD);
-}
-
-static void SetUIDL(LPBYTE *plpBuff, DWORDLONG dwData)
-{
- (*(DWORDLONG*)(*plpBuff)) = dwData;
- (*plpBuff) += sizeof(DWORDLONG);
-}
-
-static void SetGUID(LPBYTE *plpBuff, MRA_GUID guidData)
-{
- (*(MRA_GUID*)(*plpBuff)) = guidData;
- (*plpBuff) += sizeof(MRA_GUID);
-}
-
-static void SetLPS(LPBYTE *plpBuff, LPCSTR lpszData, DWORD dwSize)
-{
- (*(DWORD*)(*plpBuff)) = dwSize;
- (*plpBuff) += sizeof(DWORD);
- memmove((*plpBuff), lpszData, dwSize);
- (*plpBuff) += dwSize;
-}
-
-static void SetLPSW(LPBYTE *plpBuff, LPCWSTR lpwszData, DWORD dwSize)
-{
- dwSize *= sizeof(WCHAR);
- (*(DWORD*)(*plpBuff)) = dwSize;
- (*plpBuff) += sizeof(DWORD);
- memmove((*plpBuff), lpwszData, dwSize);
- (*plpBuff) += dwSize;
-}
-
-static void SetLPSWtoA(LPBYTE *plpBuff, LPCWSTR lpwszData, DWORD dwSize)
-{
- dwSize = WideCharToMultiByte(MRA_CODE_PAGE, 0, lpwszData, dwSize, (LPSTR)((*plpBuff)+sizeof(DWORD)), (dwSize*sizeof(WCHAR)), NULL, NULL);
- (*(DWORD*)(*plpBuff)) = dwSize;
- (*plpBuff) += (sizeof(DWORD)+dwSize);
-}
-
-static void SetLPSLowerCase(LPBYTE *plpBuff, LPCSTR lpszData, DWORD dwSize)
-{
- (*(DWORD*)(*plpBuff)) = dwSize;
- (*plpBuff) += sizeof(DWORD);
- BuffToLowerCase((*plpBuff), lpszData, dwSize);
- (*plpBuff) += dwSize;
-}
-
-static void SetLPSLowerCaseW(LPBYTE *plpBuff, LPCWSTR lpwszData, DWORD dwSize)
-{
- dwSize *= sizeof(WCHAR);
- (*(DWORD*)(*plpBuff)) = dwSize;
- (*plpBuff) += sizeof(DWORD);
- memmove((*plpBuff), lpwszData, dwSize);
- CharLowerBuff((LPWSTR)(*plpBuff), (dwSize/sizeof(WCHAR)));
- (*plpBuff) += dwSize;
-}
-
-/////////////////////////////////////////////////////////////////////////////////////////
-
-DWORD CMraProto::MraMessageW(BOOL bAddToQueue, HANDLE hContact, DWORD dwAckType, DWORD dwFlags, LPSTR lpszEMail, size_t dwEMailSize, LPCWSTR lpwszMessage, size_t dwMessageSize, LPBYTE lpbMultiChatData, size_t dwMultiChatDataSize)
-{
- Netlib_Logf(hNetlibUser, "Sending message: flags %08x, to '%S', message '%S'\n", dwFlags, lpszEMail, lpwszMessage);
-
- DWORD dwRet = 0;
- LPBYTE lpbData, lpbDataCurrent;
- LPSTR lpszMessageConverted = (LPSTR)lpwszMessage;
- LPSTR lpszMessageRTF = NULL;
- size_t dwMessageConvertedSize = (dwMessageSize*sizeof(WCHAR)), dwMessageRTFSize = 0;
-
- if ( MraIsMessageFlashAnimation(lpwszMessage, dwMessageSize))
- dwFlags |= MESSAGE_FLAG_FLASH;
-
- // pack auth message
- if (dwFlags & MESSAGE_FLAG_AUTHORIZE) {
- LPBYTE lpbAuthMsgBuff;
- size_t dwMessageConvertedBuffSize = (((((dwMessageSize*sizeof(WCHAR))+1024)+2)/3)*4);
-
- lpszMessageConverted = (LPSTR)mir_calloc(dwMessageConvertedBuffSize);
- lpbAuthMsgBuff = (LPBYTE)mir_calloc(((dwMessageSize*sizeof(WCHAR))+1024));
- if (lpszMessageConverted && lpbAuthMsgBuff) {
- lpbDataCurrent = lpbAuthMsgBuff;
- SetUL(&lpbDataCurrent, 2);
- SetLPSW(&lpbDataCurrent, NULL, 0);//***deb possible nick here
- SetLPSW(&lpbDataCurrent, lpwszMessage, dwMessageSize);
-
- BASE64EncodeUnSafe(lpbAuthMsgBuff, (lpbDataCurrent-lpbAuthMsgBuff), lpszMessageConverted, dwMessageConvertedBuffSize, &dwMessageConvertedSize);
- }
- else {
- mir_free(lpszMessageConverted);
- lpszMessageConverted = (LPSTR)lpwszMessage;
- }
- mir_free(lpbAuthMsgBuff);
- }
- // messages with Flash
- else if (dwFlags & MESSAGE_FLAG_FLASH) {
- size_t dwRFTBuffSize = (((dwMessageSize*sizeof(WCHAR))*4)+8192), dwRTFDataSize;
-
- dwFlags |= MESSAGE_FLAG_RTF;
- lpszMessageRTF = (LPSTR)mir_calloc(dwRFTBuffSize);
- mir_ptr<char> lpbRTFData((char*)mir_calloc(dwRFTBuffSize));
- if (lpszMessageRTF && lpbRTFData) {
- DWORD dwBackColour = mraGetDword(NULL, "RTFBackgroundColour", MRA_DEFAULT_RTF_BACKGROUND_COLOUR);
- lpbDataCurrent = (LPBYTE)lpszMessageRTF;
-
- WideCharToMultiByte(MRA_CODE_PAGE, 0, lpwszMessage, dwMessageSize, (LPSTR)lpbRTFData, dwRFTBuffSize, NULL, NULL);
-
- SetUL(&lpbDataCurrent, 4);
- SetLPS(&lpbDataCurrent, (LPSTR)lpbRTFData, dwMessageSize);// сообщение что у собеседника плохая версия :)
- SetLPS(&lpbDataCurrent, (LPSTR)&dwBackColour, sizeof(DWORD));// цвет фона
- SetLPS(&lpbDataCurrent, (LPSTR)lpbRTFData, dwMessageSize);// сам мульт ANSI
- SetLPSW(&lpbDataCurrent, lpwszMessage, dwMessageSize);// сам мульт UNICODE
-
- dwRTFDataSize = dwRFTBuffSize;
- if ( compress2((LPBYTE)(LPSTR)lpbRTFData, (DWORD*)&dwRTFDataSize, (LPBYTE)lpszMessageRTF, (lpbDataCurrent-(LPBYTE)lpszMessageRTF), Z_BEST_COMPRESSION) == Z_OK)
- BASE64EncodeUnSafe(lpbRTFData, dwRTFDataSize, lpszMessageRTF, dwRFTBuffSize, &dwMessageRTFSize);
- }
- }
- // standart message
- else if ((dwFlags & (MESSAGE_FLAG_CONTACT | MESSAGE_FLAG_NOTIFY | MESSAGE_FLAG_SMS)) == 0) {
- // Only if message is simple text message or RTF or ALARM
- if (dwFlags & MESSAGE_FLAG_RTF) { // add RFT part
- size_t dwRFTBuffSize = (((dwMessageSize*sizeof(WCHAR))*16)+8192), dwRTFDataSize;
-
- lpszMessageRTF = (LPSTR)mir_calloc(dwRFTBuffSize);
- mir_ptr<char> lpbRTFData((char*)mir_calloc(dwRFTBuffSize));
- if (lpszMessageRTF && lpbRTFData) {
- if ( !MraConvertToRTFW(lpwszMessage, dwMessageSize, (LPSTR)lpbRTFData, dwRFTBuffSize, &dwRTFDataSize)) {
- DWORD dwBackColour = mraGetDword(NULL, "RTFBackgroundColour", MRA_DEFAULT_RTF_BACKGROUND_COLOUR);
- lpbDataCurrent = (LPBYTE)lpszMessageRTF;
-
- SetUL(&lpbDataCurrent, 2);
- SetLPS(&lpbDataCurrent, (LPSTR)lpbRTFData, dwRTFDataSize);
- SetLPS(&lpbDataCurrent, (LPSTR)&dwBackColour, sizeof(DWORD));
-
- dwRTFDataSize = dwRFTBuffSize;
- if ( compress2((LPBYTE)(LPSTR)lpbRTFData, (DWORD*)&dwRTFDataSize, (LPBYTE)lpszMessageRTF, (lpbDataCurrent-(LPBYTE)lpszMessageRTF), Z_BEST_COMPRESSION) == Z_OK)
- BASE64EncodeUnSafe(lpbRTFData, dwRTFDataSize, lpszMessageRTF, dwRFTBuffSize, &dwMessageRTFSize);
- }
- }
- }
- }
-
- if (lpszMessageRTF == NULL || dwMessageRTFSize == 0) dwFlags &= ~(MESSAGE_FLAG_RTF|MESSAGE_FLAG_FLASH);
- if (lpbMultiChatData == NULL || dwMultiChatDataSize == 0) dwFlags &= ~MESSAGE_FLAG_MULTICHAT;
-
- lpbData = (LPBYTE)mir_calloc((sizeof(DWORD)+dwEMailSize+dwMessageConvertedSize+dwMessageRTFSize+dwMultiChatDataSize+128));
- if (lpbData) {
- lpbDataCurrent = lpbData;
- SetUL(&lpbDataCurrent, dwFlags);
- SetLPSLowerCase(&lpbDataCurrent, lpszEMail, dwEMailSize);
- SetLPS(&lpbDataCurrent, lpszMessageConverted, dwMessageConvertedSize);
- SetLPS(&lpbDataCurrent, lpszMessageRTF, dwMessageRTFSize);
- if (dwFlags&MESSAGE_FLAG_MULTICHAT) SetLPS(&lpbDataCurrent, (LPSTR)lpbMultiChatData, dwMultiChatDataSize);
-
- if (bAddToQueue)
- dwRet = MraSendQueueCMD(hSendQueueHandle, 0, hContact, dwAckType, (LPBYTE)lpwszMessage, (dwMessageSize*sizeof(WCHAR)), MRIM_CS_MESSAGE, lpbData, (lpbDataCurrent-lpbData));
- else
- dwRet = MraSendCMD(MRIM_CS_MESSAGE, lpbData, (lpbDataCurrent-lpbData));
- mir_free(lpbData);
- }
-
- if (lpszMessageConverted != (LPSTR)lpwszMessage)
- mir_free(lpszMessageConverted);
- mir_free(lpszMessageRTF);
-
- return dwRet;
-}
-
-// Send confirmation
-DWORD CMraProto::MraMessageAskW(DWORD dwMsgID, DWORD dwFlags, LPSTR lpszEMail, size_t dwEMailSize, LPWSTR lpwszMessage, size_t dwMessageSize, LPSTR lpwszMessageRTF, size_t dwMessageRTFSize)
-{
- DWORD dwRet = 0;
-
- if (lpszEMail && dwEMailSize>4 && lpwszMessage && dwMessageSize) {
- LPBYTE lpbData, lpbDataCurrent;
- lpbData = (LPBYTE)mir_calloc((sizeof(DWORD)+sizeof(DWORD)+dwEMailSize+dwMessageSize+dwMessageRTFSize+32));
- if (lpbData) {
- lpbDataCurrent = lpbData;
- SetUL(&lpbDataCurrent, dwMsgID);//UL msg_id
- SetUL(&lpbDataCurrent, dwFlags);//UL flags
- SetLPSLowerCase(&lpbDataCurrent, lpszEMail, dwEMailSize);// LPS from e-mail ANSI
- SetLPS(&lpbDataCurrent, (LPSTR)lpwszMessage, dwMessageSize);// LPS message UNICODE
- if (dwFlags&MESSAGE_FLAG_RTF)
- SetLPS(&lpbDataCurrent, (LPSTR)lpwszMessageRTF, dwMessageRTFSize);// LPS //rtf-formatted message ( >= 1.1) - MESSAGE_FLAG_RTF
-
- dwRet = MraSendCMD(MRIM_CS_MESSAGE_ACK, lpbData, (lpbDataCurrent-lpbData));
- mir_free(lpbData);
- }
- }
-
- return dwRet;
-}
-
-DWORD CMraProto::MraMessageRecv(LPSTR lpszFrom, size_t dwFromSize, DWORD dwMsgID)
-{
- DWORD dwRet = 0;
-
- if (lpszFrom && dwFromSize>4) {
- LPBYTE lpbData, lpbDataCurrent;
- lpbData = (LPBYTE)mir_calloc((dwFromSize+sizeof(DWORD)+32));
- if (lpbData) {
- lpbDataCurrent = lpbData;
- SetLPSLowerCase(&lpbDataCurrent, lpszFrom, dwFromSize);
- SetUL(&lpbDataCurrent, dwMsgID);
-
- dwRet = MraSendCMD(MRIM_CS_MESSAGE_RECV, lpbData, (lpbDataCurrent-lpbData));
- mir_free(lpbData);
- }
- }
- return dwRet;
-}
-
-// Adds new contact
-DWORD CMraProto::MraAddContactW(HANDLE hContact, DWORD dwContactFlag, DWORD dwGroupID, LPSTR lpszEMail, size_t dwEMailSize, LPWSTR lpwszCustomName, size_t dwCustomNameSize, LPSTR lpszPhones, size_t dwPhonesSize, LPWSTR lpwszAuthMessage, size_t dwAuthMessageSize, DWORD dwActions)
-{
- DWORD dwRet = 0;
-
- if (lpszEMail && dwEMailSize>4) {
- LPBYTE lpbData = (LPBYTE)mir_calloc((sizeof(DWORD)+sizeof(DWORD)+dwEMailSize+(dwCustomNameSize*sizeof(WCHAR))+dwPhonesSize+(((((dwAuthMessageSize*sizeof(WCHAR))+1024)+2)/3)*4)+32)+sizeof(DWORD));
- if (lpbData) {
- dwContactFlag |= CONTACT_FLAG_UNICODE_NAME;
-
- LPBYTE lpbDataCurrent = lpbData;
- SetUL(&lpbDataCurrent, dwContactFlag);
- SetUL(&lpbDataCurrent, dwGroupID);
- SetLPSLowerCase(&lpbDataCurrent, lpszEMail, dwEMailSize);
- SetLPSW(&lpbDataCurrent, lpwszCustomName, dwCustomNameSize);
- SetLPS(&lpbDataCurrent, lpszPhones, dwPhonesSize);
-
- // pack auth message
- LPBYTE lpbAuthMsgBuff, lpbAuthMessageConverted, lpbAuthDataCurrent;
- size_t dwAuthMessageConvertedBuffSize = (((((dwAuthMessageSize*sizeof(WCHAR))+1024)+2)/3)*4), dwAuthMessageConvertedSize = 0;
-
- lpbAuthMessageConverted = (LPBYTE)mir_calloc(dwAuthMessageConvertedBuffSize);
- lpbAuthMsgBuff = (LPBYTE)mir_calloc(((dwAuthMessageSize*sizeof(WCHAR))+1024));
- if (lpbAuthMessageConverted && lpbAuthMsgBuff) {
- lpbAuthDataCurrent = lpbAuthMsgBuff;
- SetUL(&lpbAuthDataCurrent, 2);
- SetLPSW(&lpbAuthDataCurrent, NULL, 0);//***deb possible nick here
- SetLPSW(&lpbAuthDataCurrent, lpwszAuthMessage, dwAuthMessageSize);
-
- BASE64EncodeUnSafe(lpbAuthMsgBuff, (lpbAuthDataCurrent-lpbAuthMsgBuff), lpbAuthMessageConverted, dwAuthMessageConvertedBuffSize, &dwAuthMessageConvertedSize);
- }
- SetLPS(&lpbDataCurrent, (LPSTR)lpbAuthMessageConverted, dwAuthMessageConvertedSize);
- mir_free(lpbAuthMsgBuff);
- mir_free(lpbAuthMessageConverted);
-
- SetUL(&lpbDataCurrent, dwActions);
-
- dwRet = MraSendQueueCMD(hSendQueueHandle, 0, hContact, ACKTYPE_ADDED, NULL, 0, MRIM_CS_ADD_CONTACT, lpbData, (lpbDataCurrent-lpbData));
- mir_free(lpbData);
- }
- }
- return dwRet;
-}
-
-// change contact
-DWORD CMraProto::MraModifyContactW(HANDLE hContact, DWORD dwID, DWORD dwContactFlag, DWORD dwGroupID, LPSTR lpszEMail, size_t dwEMailSize, LPWSTR lpwszCustomName, size_t dwCustomNameSize, LPSTR lpszPhones, size_t dwPhonesSize)
-{
- DWORD dwRet = 0;
- if (dwID != -1) {
- LPBYTE lpbData = (LPBYTE)mir_calloc((sizeof(DWORD)+sizeof(DWORD)+sizeof(DWORD)+dwEMailSize+(dwCustomNameSize*sizeof(WCHAR))+dwPhonesSize+32));
- if (lpbData)
- {
- dwContactFlag |= CONTACT_FLAG_UNICODE_NAME;
-
- LPBYTE lpbDataCurrent = lpbData;
- SetUL(&lpbDataCurrent, dwID);
- SetUL(&lpbDataCurrent, dwContactFlag);
- SetUL(&lpbDataCurrent, dwGroupID);
- SetLPSLowerCase(&lpbDataCurrent, lpszEMail, dwEMailSize);
- SetLPSW(&lpbDataCurrent, lpwszCustomName, dwCustomNameSize);
- SetLPS(&lpbDataCurrent, lpszPhones, dwPhonesSize);
-
- dwRet = MraSendQueueCMD(hSendQueueHandle, 0, hContact, ACKTYPE_ADDED, NULL, 0, MRIM_CS_MODIFY_CONTACT, lpbData, (lpbDataCurrent-lpbData));
- mir_free(lpbData);
- }
- }
- return dwRet;
-}
-
-// remove stored message
-DWORD CMraProto::MraOfflineMessageDel(DWORDLONG dwMsgUIDL)
-{
- return MraSendCMD(MRIM_CS_DELETE_OFFLINE_MESSAGE, &dwMsgUIDL, sizeof(DWORDLONG));
-}
-
-// autorize a user & add him to a roster
-DWORD CMraProto::MraAuthorize(LPSTR lpszEMail, size_t dwEMailSize)
-{
- DWORD dwRet = 0;
-
- if (lpszEMail && dwEMailSize>4) {
- LPBYTE lpbData;
- lpbData = (LPBYTE)mir_calloc((dwEMailSize+32));
- if (lpbData) {
- LPBYTE lpbDataCurrent = lpbData;
- SetLPSLowerCase(&lpbDataCurrent, lpszEMail, dwEMailSize);
- dwRet = MraSendCMD(MRIM_CS_AUTHORIZE, lpbData, (lpbDataCurrent-lpbData));
- mir_free(lpbData);
- }
- }
- return dwRet;
-}
-
-// change status
-DWORD CMraProto::MraChangeStatusW(DWORD dwStatus, LPSTR lpszStatusUri, size_t dwStatusUriSize, LPCWSTR lpwszStatusTitle, size_t dwStatusTitleSize, LPCWSTR lpwszStatusDesc, size_t dwStatusDescSize, DWORD dwFutureFlags)
-{
- DWORD dwRet = 0;
-
- if (dwStatusUriSize > SPEC_STATUS_URI_MAX) dwStatusUriSize = SPEC_STATUS_URI_MAX;
- if (dwStatusTitleSize > STATUS_TITLE_MAX) dwStatusTitleSize = STATUS_TITLE_MAX;
- if (dwStatusDescSize > STATUS_DESC_MAX) dwStatusDescSize = STATUS_DESC_MAX;
-
- LPBYTE lpbData = (LPBYTE)mir_calloc((sizeof(DWORD)+dwStatusUriSize+(dwStatusTitleSize*sizeof(WCHAR))+(dwStatusDescSize*sizeof(WCHAR))+sizeof(DWORD)+32));
- if (lpbData) {
- LPBYTE lpbDataCurrent = lpbData;
- SetUL(&lpbDataCurrent, dwStatus);
- SetLPS(&lpbDataCurrent, lpszStatusUri, dwStatusUriSize);
- SetLPSW(&lpbDataCurrent, lpwszStatusTitle, dwStatusTitleSize);
- SetLPSW(&lpbDataCurrent, lpwszStatusDesc, dwStatusDescSize);
- SetUL(&lpbDataCurrent, dwFutureFlags);
-
- dwRet = MraSendCMD(MRIM_CS_CHANGE_STATUS, lpbData, (lpbDataCurrent-lpbData));
- mir_free(lpbData);
- }
- return dwRet;
-}
-
-// Отправка файлов
-DWORD CMraProto::MraFileTransfer(LPSTR lpszEMail, size_t dwEMailSize, DWORD dwIDRequest, DWORD dwFilesTotalSize, LPWSTR lpwszFiles, size_t dwFilesSize, LPSTR lpszAddreses, size_t dwAddressesSize)
-{
- DWORD dwRet = 0;
-
- if (lpszEMail && dwEMailSize>4) {
- int dwFilesSizeA = WideCharToMultiByte(MRA_CODE_PAGE, 0, lpwszFiles, dwFilesSize, NULL, 0, NULL, NULL);
- LPBYTE lpbData = (LPBYTE)mir_calloc((dwEMailSize+dwFilesSizeA+(dwFilesSize*sizeof(WCHAR))+dwAddressesSize+MAX_PATH));
- if (lpbData) {
- LPBYTE lpbDataCurrent = lpbData;
- SetLPSLowerCase(&lpbDataCurrent, lpszEMail, dwEMailSize);
- SetUL(&lpbDataCurrent, dwIDRequest);
- SetUL(&lpbDataCurrent, dwFilesTotalSize);
- SetUL(&lpbDataCurrent, sizeof(DWORD)*5 + dwFilesSizeA + dwFilesSize*sizeof(WCHAR) + DWORD(dwAddressesSize));
-
- SetLPSWtoA(&lpbDataCurrent, lpwszFiles, dwFilesSize);
- SetUL(&lpbDataCurrent, sizeof(DWORD)*2 + dwFilesSize*sizeof(WCHAR));
-
- SetUL(&lpbDataCurrent, 1);
- SetLPSW(&lpbDataCurrent, lpwszFiles, dwFilesSize);
-
- SetLPS(&lpbDataCurrent, lpszAddreses, dwAddressesSize);
-
- dwRet = MraSendCMD(MRIM_CS_FILE_TRANSFER, lpbData, lpbDataCurrent-lpbData);
- mir_free(lpbData);
- }
- }
- return dwRet;
-}
-
-// Ответ на отправку файлов
-DWORD CMraProto::MraFileTransferAck(DWORD dwStatus, LPSTR lpszEMail, size_t dwEMailSize, DWORD dwIDRequest, LPBYTE lpbDescription, size_t dwDescriptionSize)
-{
- DWORD dwRet = 0;
-
- if (lpszEMail && dwEMailSize>4) {
- LPBYTE lpbData = (LPBYTE)mir_calloc((dwEMailSize+dwDescriptionSize+32));
- if (lpbData) {
- LPBYTE lpbDataCurrent = lpbData;
- SetUL(&lpbDataCurrent, dwStatus);
- SetLPSLowerCase(&lpbDataCurrent, lpszEMail, dwEMailSize);
- SetUL(&lpbDataCurrent, dwIDRequest);
- SetLPS(&lpbDataCurrent, (LPSTR)lpbDescription, dwDescriptionSize);
-
- dwRet = MraSendCMD(MRIM_CS_FILE_TRANSFER_ACK, lpbData, (lpbDataCurrent-lpbData));
- mir_free(lpbData);
- }
- }
- return dwRet;
-}
-
-// Поиск контакта
-HANDLE CMraProto::MraWPRequestW(HANDLE hContact, DWORD dwAckType, DWORD dwRequestFlags, LPSTR lpszUser, size_t dwUserSize, LPSTR lpszDomain, size_t dwDomainSize, LPCWSTR lpwszNickName, size_t dwNickNameSize, LPCWSTR lpwszFirstName, size_t dwFirstNameSize, LPCWSTR lpwszLastName, size_t dwLastNameSize, DWORD dwSex, DWORD dwDate1, DWORD dwDate2, DWORD dwCityID, DWORD dwZodiak, DWORD dwBirthdayMonth, DWORD dwBirthdayDay, DWORD dwCountryID, DWORD dwOnline)
-{
- DWORD dwRet = 0;
- LPBYTE lpbData = (LPBYTE)mir_calloc(((dwUserSize+dwDomainSize+dwNickNameSize+dwFirstNameSize+dwLastNameSize)*sizeof(WCHAR))+4096);
- if (lpbData) {
- CHAR szBuff[MAX_PATH];
- size_t dwBuffSize;
-
- LPBYTE lpbDataCurrent = lpbData;
-
- if (GetBit(dwRequestFlags, MRIM_CS_WP_REQUEST_PARAM_USER)) { SetUL(&lpbDataCurrent, MRIM_CS_WP_REQUEST_PARAM_USER);SetLPSLowerCase(&lpbDataCurrent, lpszUser, dwUserSize); }
- if (GetBit(dwRequestFlags, MRIM_CS_WP_REQUEST_PARAM_DOMAIN)) { SetUL(&lpbDataCurrent, MRIM_CS_WP_REQUEST_PARAM_DOMAIN);SetLPSLowerCase(&lpbDataCurrent, lpszDomain, dwDomainSize); }
- if (GetBit(dwRequestFlags, MRIM_CS_WP_REQUEST_PARAM_NICKNAME)) { SetUL(&lpbDataCurrent, MRIM_CS_WP_REQUEST_PARAM_NICKNAME);SetLPSW(&lpbDataCurrent, lpwszNickName, dwNickNameSize); }
- if (GetBit(dwRequestFlags, MRIM_CS_WP_REQUEST_PARAM_FIRSTNAME)) { SetUL(&lpbDataCurrent, MRIM_CS_WP_REQUEST_PARAM_FIRSTNAME);SetLPSW(&lpbDataCurrent, lpwszFirstName, dwFirstNameSize); }
- if (GetBit(dwRequestFlags, MRIM_CS_WP_REQUEST_PARAM_LASTNAME)) { SetUL(&lpbDataCurrent, MRIM_CS_WP_REQUEST_PARAM_LASTNAME);SetLPSW(&lpbDataCurrent, lpwszLastName, dwLastNameSize); }
-
- if (GetBit(dwRequestFlags, MRIM_CS_WP_REQUEST_PARAM_SEX)) {
- dwBuffSize = mir_snprintf(szBuff, SIZEOF(szBuff), "%lu", dwSex);
- SetUL(&lpbDataCurrent, MRIM_CS_WP_REQUEST_PARAM_SEX);
- SetLPS(&lpbDataCurrent, szBuff, dwBuffSize);
- }
-
- if (GetBit(dwRequestFlags, MRIM_CS_WP_REQUEST_PARAM_DATE1)) {
- dwBuffSize = mir_snprintf(szBuff, SIZEOF(szBuff), "%lu", dwDate1);
- SetUL(&lpbDataCurrent, MRIM_CS_WP_REQUEST_PARAM_DATE1);
- SetLPS(&lpbDataCurrent, szBuff, dwBuffSize);
- }
-
- if (GetBit(dwRequestFlags, MRIM_CS_WP_REQUEST_PARAM_DATE2)) {
- dwBuffSize = mir_snprintf(szBuff, SIZEOF(szBuff), "%lu", dwDate2);
- SetUL(&lpbDataCurrent, MRIM_CS_WP_REQUEST_PARAM_DATE2);
- SetLPS(&lpbDataCurrent, szBuff, dwBuffSize);
- }
-
- if (GetBit(dwRequestFlags, MRIM_CS_WP_REQUEST_PARAM_CITY_ID)) {
- dwBuffSize = mir_snprintf(szBuff, SIZEOF(szBuff), "%lu", dwCityID);
- SetUL(&lpbDataCurrent, MRIM_CS_WP_REQUEST_PARAM_CITY_ID);
- SetLPS(&lpbDataCurrent, szBuff, dwBuffSize);
- }
-
- if (GetBit(dwRequestFlags, MRIM_CS_WP_REQUEST_PARAM_ZODIAC)) {
- dwBuffSize = mir_snprintf(szBuff, SIZEOF(szBuff), "%lu", dwZodiak);
- SetUL(&lpbDataCurrent, MRIM_CS_WP_REQUEST_PARAM_ZODIAC);
- SetLPS(&lpbDataCurrent, szBuff, dwBuffSize);
- }
-
- if (GetBit(dwRequestFlags, MRIM_CS_WP_REQUEST_PARAM_BIRTHDAY_MONTH)) {
- dwBuffSize = mir_snprintf(szBuff, SIZEOF(szBuff), "%lu", dwBirthdayMonth);
- SetUL(&lpbDataCurrent, MRIM_CS_WP_REQUEST_PARAM_BIRTHDAY_MONTH);
- SetLPS(&lpbDataCurrent, szBuff, dwBuffSize);
- }
-
- if (GetBit(dwRequestFlags, MRIM_CS_WP_REQUEST_PARAM_BIRTHDAY_DAY)) {
- dwBuffSize = mir_snprintf(szBuff, SIZEOF(szBuff), "%lu", dwBirthdayDay);
- SetUL(&lpbDataCurrent, MRIM_CS_WP_REQUEST_PARAM_BIRTHDAY_DAY);
- SetLPS(&lpbDataCurrent, szBuff, dwBuffSize);
- }
-
- if (GetBit(dwRequestFlags, MRIM_CS_WP_REQUEST_PARAM_COUNTRY_ID)) {
- dwBuffSize = mir_snprintf(szBuff, SIZEOF(szBuff), "%lu", dwCountryID);
- SetUL(&lpbDataCurrent, MRIM_CS_WP_REQUEST_PARAM_COUNTRY_ID);
- SetLPS(&lpbDataCurrent, szBuff, dwBuffSize);
- }
-
- if (GetBit(dwRequestFlags, MRIM_CS_WP_REQUEST_PARAM_ONLINE)) {
- dwBuffSize = mir_snprintf(szBuff, SIZEOF(szBuff), "%lu", dwOnline);
- SetUL(&lpbDataCurrent, MRIM_CS_WP_REQUEST_PARAM_ONLINE);
- SetLPS(&lpbDataCurrent, szBuff, dwBuffSize);
- }
-
- dwRet = MraSendQueueCMD(hSendQueueHandle, 0, hContact, dwAckType, NULL, 0, MRIM_CS_WP_REQUEST, lpbData, (lpbDataCurrent-lpbData));
- mir_free(lpbData);
- }
- return (HANDLE)dwRet;
-}
-
-// Поиск контакта по EMail
-HANDLE CMraProto::MraWPRequestByEMail(HANDLE hContact, DWORD dwAckType, LPCSTR lpszEMail, size_t dwEMailSize)
-{
- HANDLE dwRet = 0;
-
- if (lpszEMail && dwEMailSize>4) {
- size_t dwUserSize, dwDomainSize;
- LPSTR lpszDomain = (LPSTR)MemoryFindByte(0, lpszEMail, dwEMailSize, '@');
- if (lpszDomain) {
- LPSTR lpszUser = (LPSTR)lpszEMail;
- dwUserSize = (lpszDomain-lpszEMail);
- lpszDomain++;
- dwDomainSize = (dwEMailSize-(dwUserSize+1));
-
- DWORD dwRequestFlags = 0;
- SetBit(dwRequestFlags, MRIM_CS_WP_REQUEST_PARAM_USER);
- SetBit(dwRequestFlags, MRIM_CS_WP_REQUEST_PARAM_DOMAIN);
-
- dwRet = MraWPRequestW(hContact, dwAckType, dwRequestFlags, lpszUser, dwUserSize, lpszDomain, dwDomainSize, NULL, 0, NULL, 0, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
- }
- }
- return dwRet;
-}
-
-// Отправка файлов
-DWORD CMraProto::MraGame(LPSTR lpszEMail, size_t dwEMailSize, DWORD dwGameSessionID, DWORD dwGameMsg, DWORD dwGameMsgID, LPSTR lpszData, size_t dwDataSize)
-{
- DWORD dwRet = 0;
-
- if (lpszEMail && dwEMailSize>4) {
- LPBYTE lpbData = (LPBYTE)mir_calloc((dwEMailSize+(sizeof(DWORD)*4)+dwDataSize+32));
- if (lpbData) {
- LPBYTE lpbDataCurrent = lpbData;
- SetLPSLowerCase(&lpbDataCurrent, lpszEMail, dwEMailSize);
- SetUL(&lpbDataCurrent, dwGameSessionID);
- SetUL(&lpbDataCurrent, dwGameMsg);
- SetUL(&lpbDataCurrent, dwGameMsgID);
- SetUL(&lpbDataCurrent, _time32(NULL));
- SetLPS(&lpbDataCurrent, lpszData, dwDataSize);
-
- dwRet = MraSendCMD(MRIM_CS_GAME, lpbData, (lpbDataCurrent-lpbData));
- mir_free(lpbData);
- }
- }
- return dwRet;
-}
-
-// Авторизация
-DWORD CMraProto::MraLogin2W(LPSTR lpszLogin, size_t dwLoginSize, LPSTR lpszPassword, size_t dwPasswordSize, DWORD dwStatus, LPSTR lpszStatusUri, size_t dwStatusUriSize, LPWSTR lpwszStatusTitle, size_t dwStatusTitleSize, LPWSTR lpwszStatusDesc, size_t dwStatusDescSize, DWORD dwFutureFlags, LPSTR dwUserAgentFormatted, size_t dwUserAgentFormattedSize, LPSTR lpszUserAgent, size_t dwUserAgentSize)
-{
- DWORD dwRet = 0;
-
- if (dwStatusUriSize>SPEC_STATUS_URI_MAX) dwStatusUriSize = SPEC_STATUS_URI_MAX;
- if (dwStatusTitleSize>STATUS_TITLE_MAX) dwStatusTitleSize = STATUS_TITLE_MAX;
- if (dwStatusDescSize>STATUS_DESC_MAX) dwStatusDescSize = STATUS_DESC_MAX;
- if (dwUserAgentFormattedSize>USER_AGENT_MAX) dwUserAgentFormattedSize = USER_AGENT_MAX;
- if (dwUserAgentSize>MAX_CLIENT_DESCRIPTION) dwUserAgentSize = MAX_CLIENT_DESCRIPTION;
-
- LPBYTE lpbData = (LPBYTE)mir_calloc((dwLoginSize+dwPasswordSize+sizeof(DWORD)+dwStatusUriSize+(dwStatusTitleSize*sizeof(WCHAR))+(dwStatusDescSize*sizeof(WCHAR))+2+sizeof(DWORD)+(sizeof(DWORD)*2)+dwUserAgentFormattedSize+dwUserAgentSize+32));
- if (lpbData) {
- LPBYTE lpbDataCurrent = lpbData;
- SetLPS(&lpbDataCurrent, lpszLogin, dwLoginSize);
- SetLPS(&lpbDataCurrent, lpszPassword, dwPasswordSize);
- SetUL(&lpbDataCurrent, dwStatus);
- SetLPS(&lpbDataCurrent, lpszStatusUri, dwStatusUriSize);
- SetLPSW(&lpbDataCurrent, lpwszStatusTitle, dwStatusTitleSize);
- SetLPSW(&lpbDataCurrent, lpwszStatusDesc, dwStatusDescSize);
- SetUL(&lpbDataCurrent, dwFutureFlags);
- SetLPS(&lpbDataCurrent, dwUserAgentFormatted, dwUserAgentFormattedSize);
- SetLPS(&lpbDataCurrent, "ru", 2);
- SetLPS(&lpbDataCurrent, NULL, 0);
- SetLPS(&lpbDataCurrent, NULL, 0);
- SetLPS(&lpbDataCurrent, lpszUserAgent, dwUserAgentSize);// LPS client description /max 256
-
- dwRet = MraSendCMD(MRIM_CS_LOGIN2, lpbData, (lpbDataCurrent-lpbData));
- mir_free(lpbData);
- }
- return dwRet;
-}
-
-// Отправка SMS
-DWORD CMraProto::MraSMSW(HANDLE hContact, LPSTR lpszPhone, size_t dwPhoneSize, LPWSTR lpwszMessage, size_t dwMessageSize)
-{
- DWORD dwRet = 0;
- LPBYTE lpbData = (LPBYTE)mir_calloc((dwPhoneSize+(dwMessageSize*sizeof(WCHAR))+32));
- LPBYTE lpbDataQueue = (LPBYTE)mir_calloc((dwPhoneSize+(dwMessageSize*sizeof(WCHAR))+32));
- LPSTR lpszPhoneLocal = (LPSTR)mir_calloc((dwPhoneSize+32));
- if (lpbData && lpbDataQueue && lpszPhoneLocal) {
- lpszPhoneLocal[0] = '+';
- dwPhoneSize = 1+CopyNumber((lpszPhoneLocal+1), lpszPhone, dwPhoneSize);
-
- LPBYTE lpbDataCurrent = lpbData;
- SetUL(&lpbDataCurrent, 0);
- SetLPS(&lpbDataCurrent, lpszPhoneLocal, dwPhoneSize);
- SetLPSW(&lpbDataCurrent, lpwszMessage, dwMessageSize);
-
- (*(DWORD*)lpbDataQueue) = dwPhoneSize;
- memmove((lpbDataQueue+sizeof(DWORD)), lpszPhoneLocal, (dwPhoneSize+1));
- memmove((lpbDataQueue+sizeof(DWORD)+dwPhoneSize+1), lpwszMessage, ((dwMessageSize*sizeof(WCHAR))+1));
-
- dwRet = MraSendQueueCMD(hSendQueueHandle, 0, hContact, ICQACKTYPE_SMS, lpbDataQueue, (dwPhoneSize+(dwMessageSize*sizeof(WCHAR))+sizeof(DWORD)+2), MRIM_CS_SMS, lpbData, (lpbDataCurrent-lpbData));
- mir_free(lpbData);
- mir_free(lpszPhoneLocal);
- }
- else {
- mir_free(lpbData);
- mir_free(lpbDataQueue);
- mir_free(lpszPhoneLocal);
- }
- return dwRet;
-}
-
-// Соединение с прокси
-DWORD CMraProto::MraProxy(LPSTR lpszEMail, size_t dwEMailSize, DWORD dwIDRequest, DWORD dwDataType, LPSTR lpszData, size_t dwDataSize, LPSTR lpszAddreses, size_t dwAddressesSize, MRA_GUID mguidSessionID)
-{
- DWORD dwRet = 0;
-
- if (lpszEMail && dwEMailSize>4) {
- LPBYTE lpbData = (LPBYTE)mir_calloc((dwEMailSize+(sizeof(DWORD)*2)+dwDataSize+dwAddressesSize+sizeof(MRA_GUID)+32));
- if (lpbData) {
- LPBYTE lpbDataCurrent = lpbData;
- SetLPSLowerCase(&lpbDataCurrent, lpszEMail, dwEMailSize);
- SetUL(&lpbDataCurrent, dwIDRequest);
- SetUL(&lpbDataCurrent, dwDataType);
- SetLPS(&lpbDataCurrent, lpszData, dwDataSize);
- SetLPS(&lpbDataCurrent, lpszAddreses, dwAddressesSize);
- SetGUID(&lpbDataCurrent, mguidSessionID);
-
- dwRet = MraSendCMD(MRIM_CS_PROXY, lpbData, (lpbDataCurrent-lpbData));
- mir_free(lpbData);
- }
- }
- return dwRet;
-}
-
-// Ответ на соединение с прокси
-DWORD CMraProto::MraProxyAck(DWORD dwStatus, LPSTR lpszEMail, size_t dwEMailSize, DWORD dwIDRequest, DWORD dwDataType, LPSTR lpszData, size_t dwDataSize, LPSTR lpszAddreses, size_t dwAddressesSize, MRA_GUID mguidSessionID)
-{
- DWORD dwRet = 0;
-
- if (lpszEMail && dwEMailSize>4) {
- LPBYTE lpbData = (LPBYTE)mir_calloc((dwEMailSize+(sizeof(DWORD)*3)+dwDataSize+dwAddressesSize+sizeof(MRA_GUID)+32));
- if (lpbData) {
- LPBYTE lpbDataCurrent = lpbData;
- SetUL(&lpbDataCurrent, dwStatus);
- SetLPSLowerCase(&lpbDataCurrent, lpszEMail, dwEMailSize);
- SetUL(&lpbDataCurrent, dwIDRequest);
- SetUL(&lpbDataCurrent, dwDataType);
- SetLPS(&lpbDataCurrent, lpszData, dwDataSize);
- SetLPS(&lpbDataCurrent, lpszAddreses, dwAddressesSize);
- SetGUID(&lpbDataCurrent, mguidSessionID);
-
- dwRet = MraSendCMD(MRIM_CS_PROXY_ACK, lpbData, (lpbDataCurrent-lpbData));
- mir_free(lpbData);
- }
- }
- return dwRet;
-}
-
-// Отправка сообщения в микроблог
-DWORD CMraProto::MraChangeUserBlogStatus(DWORD dwFlags, LPWSTR lpwszText, size_t dwTextSize, DWORDLONG dwBlogStatusID)
-{
- DWORD dwRet = 0;
- if (dwTextSize > MICBLOG_STATUS_MAX)
- dwTextSize = MICBLOG_STATUS_MAX;
-
- LPBYTE lpbData = (LPBYTE)mir_calloc((sizeof(DWORD)+(dwTextSize*sizeof(WCHAR))+sizeof(DWORDLONG)+32));
- if (lpbData) {
- LPBYTE lpbDataCurrent = lpbData;
- SetUL(&lpbDataCurrent, dwFlags);
- SetLPSW(&lpbDataCurrent, lpwszText, dwTextSize);
- SetUIDL(&lpbDataCurrent, dwBlogStatusID);
-
- dwRet = MraSendCMD(MRIM_CS_CHANGE_USER_BLOG_STATUS, lpbData, (lpbDataCurrent-lpbData));
- mir_free(lpbData);
- }
-
- return dwRet;
-}
-
-DWORD CMraProto::MraSendPacket(HANDLE hConnection, DWORD dwCMDNum, DWORD dwType, LPVOID lpData, size_t dwDataSize)
-{
- DWORD dwRet;
-
- LPBYTE lpbData = (LPBYTE)mir_calloc((dwDataSize+sizeof(mrim_packet_header_t)));
- if (lpbData) {
- mrim_packet_header_t *pmaHeader = (mrim_packet_header_t*)lpbData;
- pmaHeader->magic = CS_MAGIC;
- pmaHeader->proto = (PROTO_VERSION_MAJOR<<16) + PROTO_VERSION_MINOR; // Версия протокола
- pmaHeader->seq = dwCMDNum;// Sequence
- pmaHeader->msg = dwType;// Тип пакета
- pmaHeader->dlen = dwDataSize;// Длина данных
-
- Netlib_Logf(hNetlibUser, "Sending packet %08x\n", dwType);
-
- memmove((lpbData+sizeof(mrim_packet_header_t)), lpData, dwDataSize);
- dwRet = Netlib_Send(hConnection, (LPSTR)lpbData, (dwDataSize+sizeof(mrim_packet_header_t)), 0);
- mir_free(lpbData);
- }
- return dwRet;
-}
-
-DWORD CMraProto::MraSendCMD(DWORD dwType, LPVOID lpData, size_t dwDataSize)
-{
- DWORD dwRet = InterlockedIncrement((LONG volatile*)&dwCMDNum);
-
- mir_cslock l(csCriticalSectionSend); // guarding winsock internal buffers
- return !MraSendPacket(hConnection, dwRet, dwType, lpData, dwDataSize) ? 0 : dwRet;
-}
-
-
-DWORD CMraProto::MraSendQueueCMD(HANDLE hSendQueueHandle, DWORD dwFlags, HANDLE hContact, DWORD dwAckType, LPBYTE lpbDataQueue, size_t dwDataQueueSize, DWORD dwType, LPVOID lpData, size_t dwDataSize)
-{
- DWORD dwRet = InterlockedIncrement((LONG volatile*)&dwCMDNum);
- if ( !MraSendQueueAdd(hSendQueueHandle, dwRet, dwFlags, hContact, dwAckType, lpbDataQueue, dwDataQueueSize)) {
- mir_cslock l(csCriticalSectionSend); // guarding winsock internal buffers
- if ( !MraSendPacket(hConnection, dwRet, dwType, lpData, dwDataSize)) {
- MraSendQueueFree(hSendQueueHandle, dwRet);
- dwRet = 0;
- }
- }
- return dwRet;
-}