From 9e78e93aefc5c8e9e0e96d9602da0a53ce506ade Mon Sep 17 00:00:00 2001 From: George Hazan Date: Thu, 7 Feb 2019 12:21:16 +0300 Subject: MSN: - fix for a bug in HtmlDecode; - massive code cleaning --- protocols/MSN/src/msn_commands.cpp | 1 - protocols/MSN/src/msn_libstr.cpp | 8 +++ protocols/MSN/src/msn_misc.cpp | 20 +----- protocols/MSN/src/stdafx.h | 124 ++----------------------------------- 4 files changed, 14 insertions(+), 139 deletions(-) (limited to 'protocols') diff --git a/protocols/MSN/src/msn_commands.cpp b/protocols/MSN/src/msn_commands.cpp index b3829d1d1f..2eb7a6cad3 100644 --- a/protocols/MSN/src/msn_commands.cpp +++ b/protocols/MSN/src/msn_commands.cpp @@ -428,7 +428,6 @@ void CMsnProto::MSN_ProcessURIObject(MCONTACT hContact, ezxml_t xmli) ft->std.hContact = hContact; ft->tType = SERVER_HTTP; - ft->p2p_appID = MSN_APPID_FILE; mir_free(ft->std.szCurrentFile.w); if (!((originalName = ezxml_child(xmli, "OriginalName")) && (pszFile = (char*)ezxml_attr(originalName, "v")))) if ((originalName = ezxml_child(xmli, "meta"))) diff --git a/protocols/MSN/src/msn_libstr.cpp b/protocols/MSN/src/msn_libstr.cpp index e2ff878241..77890a1075 100644 --- a/protocols/MSN/src/msn_libstr.cpp +++ b/protocols/MSN/src/msn_libstr.cpp @@ -156,6 +156,14 @@ void HtmlDecode(char *str) else if (!strncmp(p, ">", 4)) { *q = '>'; p += 3; } else if (!strncmp(p, "<", 4)) { *q = '<'; p += 3; } else if (!strncmp(p, """, 6)) { *q = '"'; p += 5; } + else if (p[1] == '#') { + int c; + if (sscanf(p, "&#%d;", &c) == 1) { + *q = c; + p = strchr(p, ';'); + } + else *q = *p; + } else { *q = *p; } } else *q = *p; diff --git a/protocols/MSN/src/msn_misc.cpp b/protocols/MSN/src/msn_misc.cpp index 2946b53418..3f22ea4e3d 100644 --- a/protocols/MSN/src/msn_misc.cpp +++ b/protocols/MSN/src/msn_misc.cpp @@ -900,9 +900,6 @@ filetransfer::filetransfer(CMsnProto* prt) filetransfer::~filetransfer(void) { - if (p2p_sessionid) - proto->debugLogA("Destroying file transfer session %08X", p2p_sessionid); - WaitForSingleObject(hLockHandle, 2000); CloseHandle(hLockHandle); CloseHandle(hResumeEvt); @@ -910,17 +907,12 @@ filetransfer::~filetransfer(void) if (fileId != -1) _close(fileId); - if (!bCompleted && p2p_appID == MSN_APPID_FILE) { + if (!bCompleted) { std.pszFiles.w = nullptr; std.totalFiles = 0; proto->ProtoBroadcastAck(std.hContact, ACKTYPE_FILE, ACKRESULT_FAILED, this); } - mir_free(p2p_branch); - mir_free(p2p_callID); - mir_free(p2p_dest); - mir_free(p2p_object); - mir_free(std.szCurrentFile.w); mir_free(std.szWorkingDir.w); if (std.pszFiles.w != nullptr) { @@ -984,17 +976,9 @@ int filetransfer::openNext(void) if (fileId != -1) { std.currentFileSize = _filelengthi64(fileId); std.currentFileProgress = 0; - - p2p_sendmsgid = 0; - p2p_byemsgid = 0; tType = SERVER_NOTIFICATION; - bAccepted = false; - - mir_free(p2p_branch); p2p_branch = nullptr; - mir_free(p2p_callID); p2p_callID = nullptr; } - else - proto->MSN_ShowError("Unable to open file '%s' for the file transfer, error %d", std.szCurrentFile.w, errno); + else proto->MSN_ShowError("Unable to open file '%s' for the file transfer, error %d", std.szCurrentFile.w, errno); } return fileId; diff --git a/protocols/MSN/src/stdafx.h b/protocols/MSN/src/stdafx.h index ab5303e074..0155d6e8e8 100644 --- a/protocols/MSN/src/stdafx.h +++ b/protocols/MSN/src/stdafx.h @@ -326,7 +326,7 @@ public: void addString(const char* name, const char* szValue, unsigned flags = 0); void addLong(const char* name, long lValue, unsigned flags = 0); void addULong(const char* name, unsigned lValue); - void addBool(const char* name, bool lValue); + void addBool(const char* name, bool lValue); const char* operator[](const char* fieldName) { return find(fieldName); } @@ -379,7 +379,7 @@ struct filetransfer void close(void); void complete(void); int create(void); - int openNext(void); + int openNext(void); CMsnProto* proto; @@ -387,7 +387,6 @@ struct filetransfer bool bCanceled; // flag to interrupt a transfer bool bCompleted; // was a FT ever completed? - bool bAccepted; // was a FT ever completed? int fileId; // handle of file being transferring (r/w) @@ -396,125 +395,12 @@ struct filetransfer ThreadData *info; TInfoType tType; - TInfoType tTypeReq; - time_t ts; - clock_t nNotify; - unsigned cf; - - bool p2p_waitack; // wait for ack - bool p2p_isV2; // P2P V2 - - unsigned p2p_sessionid; // session id - unsigned p2p_acksessid; // acknowledged session id - unsigned p2p_sendmsgid; // send message id - unsigned p2p_byemsgid; // bye message id - unsigned p2p_ackID; // number of ack's state - unsigned p2p_appID; // application id: 1 = avatar, 2 = file transfer - unsigned p2p_type; // application id: 1 = avatar, 2 = file transfer, 3 = custom emoticon - char* p2p_branch; // header Branch: field - char* p2p_callID; // header Call-ID: field - char* p2p_dest; // destination e-mail address - char* p2p_object; // MSN object for a transfer + unsigned cf; //---- receiving a file char* szInvcookie; // cookie for receiving - - unsigned __int64 lstFilePtr; }; -struct directconnection -{ - directconnection(const char* CallID, const char* Wlid); - ~directconnection(); - - char* calcHashedNonce(UUID* nonce); - char* mNonceToText(void); - char* mNonceToHash(void) { return calcHashedNonce(mNonce); } - void xNonceToBin(UUID* nonce); - - UUID* mNonce; - char* xNonce; - - char* callId; - char* wlid; - - time_t ts; - - bool useHashedNonce; - bool bAccepted; - - CMsnProto* proto; -}; - - -#pragma pack(1) - -typedef struct _tag_HFileContext -{ - unsigned len; - unsigned ver; - unsigned __int64 dwSize; - unsigned type; - wchar_t wszFileName[MAX_PATH]; - char unknown[30]; - unsigned id; - char unknown2[64]; -} HFileContext; - -struct P2PB_Header -{ - virtual char* parseMsg(char *buf) = 0; - virtual char* createMsg(char *buf, const char* wlid, CMsnProto *ppro) = 0; - virtual bool isV2Hdr(void) = 0; - virtual void logHeader(CMsnProto *ppro) = 0; -}; - -struct P2P_Header : P2PB_Header -{ - unsigned mSessionID; - unsigned mID; - unsigned __int64 mOffset; - unsigned __int64 mTotalSize; - unsigned mPacketLen; - unsigned mFlags; - unsigned mAckSessionID; - unsigned mAckUniqueID; - unsigned __int64 mAckDataSize; - - P2P_Header() { memset(&mSessionID, 0, 48); } - P2P_Header(char *buf) { parseMsg(buf); } - - char* parseMsg(char *buf) { memcpy(&mSessionID, buf, 48); return buf + 48; } - char* createMsg(char *buf, const char* wlid, CMsnProto *ppro); - bool isV2Hdr(void) { return false; } - void logHeader(CMsnProto *ppro); -} ; - -struct P2PV2_Header : P2PB_Header -{ - unsigned mSessionID; - unsigned mID; - const char* mCap; - unsigned __int64 mRemSize; - unsigned mPacketLen; - unsigned mPacketNum; - unsigned mAckUniqueID; - unsigned char mOpCode; - unsigned char mTFCode; - - P2PV2_Header() { memset(&mSessionID, 0, ((char*)&mTFCode - (char*)&mSessionID) + sizeof(mTFCode)); } - P2PV2_Header(char *buf) { parseMsg(buf); } - - char* parseMsg(char *buf); - char* createMsg(char *buf, const char* wlid, CMsnProto *ppro); - bool isV2Hdr(void) { return true; } - void logHeader(CMsnProto *ppro); -}; - -#pragma pack() - -bool p2p_IsDlFileOk(filetransfer* ft); - ///////////////////////////////////////////////////////////////////////////////////////// // Thread handling functions and datatypes @@ -986,8 +872,6 @@ typedef struct _tag_MyConnectionType const IN_ADDR GetMyExtIP(void) { return *((PIN_ADDR)&extIP); } const char* GetMyExtIPStr(void) { return inet_ntoa(GetMyExtIP()); } const char* GetMyUdpConStr(void) { return conStr[udpConType]; } - void SetUdpCon(const char* str); - void CalculateWeight(void); } MyConnectionType; struct chunkedmsg @@ -1027,4 +911,4 @@ struct InviteChatParam } }; -INT_PTR CALLBACK DlgInviteToChat(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam); \ No newline at end of file +INT_PTR CALLBACK DlgInviteToChat(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam); -- cgit v1.2.3