From b078dfb78c89aea87cd422eae52694738e473cf3 Mon Sep 17 00:00:00 2001 From: dartraiden Date: Sun, 21 Jul 2019 19:59:18 +0300 Subject: Restore "Free for chat" status support (fixes #1963) --- protocols/ICQCorp/src/protocol.cpp | 10 ++++++++++ protocols/ICQCorp/src/protocol.h | 2 ++ protocols/ICQCorp/src/services.cpp | 4 ++-- 3 files changed, 14 insertions(+), 2 deletions(-) (limited to 'protocols/ICQCorp/src') diff --git a/protocols/ICQCorp/src/protocol.cpp b/protocols/ICQCorp/src/protocol.cpp index bdf3686354..c43c3b6fad 100644 --- a/protocols/ICQCorp/src/protocol.cpp +++ b/protocols/ICQCorp/src/protocol.cpp @@ -32,6 +32,7 @@ unsigned short toIcqStatus(unsigned short status) case ID_STATUS_DND: return ICQ_STATUS_DND; case ID_STATUS_NA: return ICQ_STATUS_NA; case ID_STATUS_OCCUPIED: return ICQ_STATUS_OCCUPIED; + case ID_STATUS_FREECHAT: return ICQ_STATUS_FREECHAT; case ID_STATUS_INVISIBLE: return ICQ_STATUS_PRIVATE; } return ICQ_STATUS_ONLINE; @@ -48,6 +49,7 @@ unsigned short toIdStatus(unsigned short status) case ICQ_STATUS_DND: return ID_STATUS_DND; case ICQ_STATUS_NA: return ID_STATUS_NA; case ICQ_STATUS_OCCUPIED: return ID_STATUS_OCCUPIED; + case ICQ_STATUS_FREECHAT: return ID_STATUS_FREECHAT; case ICQ_STATUS_PRIVATE: return ID_STATUS_INVISIBLE; } return ID_STATUS_ONLINE; @@ -1401,6 +1403,7 @@ ICQEvent *ICQ::sendTCP(ICQUser *u, unsigned short cmd, char *cmdStr, char *m) unsigned int status; switch (statusVal) { case ID_STATUS_ONLINE: status = 0x00100000; break; + case ID_STATUS_FREECHAT: status = 0x00000000; break; // ?? case ID_STATUS_AWAY: status = 0x01100000; break; case ID_STATUS_NA: status = 0x00100000; break; case ID_STATUS_DND: status = 0x00100000; break; @@ -1526,6 +1529,7 @@ ICQEvent *ICQ::sendReadAwayMsg(ICQUser *u) case ID_STATUS_DND: cmd = ICQ_CMDxTCP_READxDNDxMSG; break; case ID_STATUS_NA: cmd = ICQ_CMDxTCP_READxNAxMSG; break; case ID_STATUS_OCCUPIED: cmd = ICQ_CMDxTCP_READxOCCUPIEDxMSG; break; + case ID_STATUS_FREECHAT: cmd = ICQ_CMDxTCP_READxFREECHATxMSG; break; default: return nullptr; } @@ -1566,6 +1570,7 @@ ICQTransfer *ICQ::sendFile(ICQUser *u, char *description, char *filename, unsign unsigned int status; switch (statusVal) { case ID_STATUS_ONLINE: status = 0x00100000; break; + case ID_STATUS_FREECHAT: status = 0x00000000; break; // ?? case ID_STATUS_AWAY: status = 0x01100000; break; case ID_STATUS_NA: status = 0x00100000; break; case ID_STATUS_DND: status = 0x00100000; break; @@ -1612,6 +1617,7 @@ void ICQ::acceptFile(ICQUser *u, unsigned long hTransfer, char*) unsigned long status; switch (statusVal) { case ID_STATUS_ONLINE: status = 0x00100000; break; + case ID_STATUS_FREECHAT: status = 0x00000000; break; // ?? case ID_STATUS_AWAY: status = 0x01100000; break; case ID_STATUS_NA: status = 0x00100000; break; case ID_STATUS_DND: status = 0x00100000; break; @@ -1656,6 +1662,7 @@ void ICQ::refuseFile(ICQUser *u, unsigned long hTransfer, char *reason) unsigned int status; switch (statusVal) { case ID_STATUS_ONLINE: status = 0x00100000; break; + case ID_STATUS_FREECHAT: status = 0x00000000; break; // ?? case ID_STATUS_AWAY: status = 0x01100000; break; case ID_STATUS_NA: status = 0x00100000; break; case ID_STATUS_DND: status = 0x00100000; break; @@ -1798,6 +1805,7 @@ void ICQ::processTcpPacket(Packet &packet, unsigned int hSocket) case ICQ_CMDxTCP_READxOCCUPIEDxMSG: case ICQ_CMDxTCP_READxNAxMSG: case ICQ_CMDxTCP_READxDNDxMSG: + case ICQ_CMDxTCP_READxFREECHATxMSG: Netlib_Logf(hNetlibUser, "[tcp] %d requested read of away message.\n", checkUin); packet >> theTCPSequence; @@ -1871,6 +1879,7 @@ void ICQ::processTcpPacket(Packet &packet, unsigned int hSocket) case ICQ_CMDxTCP_READxOCCUPIEDxMSG: case ICQ_CMDxTCP_READxNAxMSG: case ICQ_CMDxTCP_READxDNDxMSG: + case ICQ_CMDxTCP_READxFREECHATxMSG: packet >> theTCPSequence; addAwayMsg(u, message, theTCPSequence, time(0)); break; @@ -1919,6 +1928,7 @@ void ICQ::ackTCP(Packet &packet, ICQUser *u, unsigned short newCommand, unsigned switch (statusVal) { case ID_STATUS_ONLINE: status = 0x00100000; break; + case ID_STATUS_FREECHAT: status = 0x00000000; break; // ?? case ID_STATUS_AWAY: status = 0x01100000; break; case ID_STATUS_NA: status = 0x00100000; break; case ID_STATUS_DND: status = 0x00100000; break; diff --git a/protocols/ICQCorp/src/protocol.h b/protocols/ICQCorp/src/protocol.h index b3b3e875dd..ba75de163b 100644 --- a/protocols/ICQCorp/src/protocol.h +++ b/protocols/ICQCorp/src/protocol.h @@ -98,6 +98,7 @@ const unsigned short ICQ_CMDxTCP_READxAWAYxMSG = 0x03E8; const unsigned short ICQ_CMDxTCP_READxOCCUPIEDxMSG = 0x03E9; const unsigned short ICQ_CMDxTCP_READxNAxMSG = 0x03EA; const unsigned short ICQ_CMDxTCP_READxDNDxMSG = 0x03EB; +const unsigned short ICQ_CMDxTCP_READxFREECHATxMSG = 0x03EC; const unsigned short ICQ_CMDxTCP_HANDSHAKE = 0x03FF; const unsigned short ICQ_CMDxTCP_HANDSHAKE2 = 0x04FF; const unsigned short ICQ_CMDxTCP_HANDSHAKE3 = 0x02FF; @@ -109,6 +110,7 @@ const unsigned short int ICQ_STATUS_AWAY = 0x0001; const unsigned short int ICQ_STATUS_NA = 0x0005; const unsigned short int ICQ_STATUS_OCCUPIED = 0x0011; const unsigned short int ICQ_STATUS_DND = 0x0013; +const unsigned short int ICQ_STATUS_FREECHAT = 0x0020; const unsigned short int ICQ_STATUS_PRIVATE = 0x0100; // miscellaneous constants diff --git a/protocols/ICQCorp/src/services.cpp b/protocols/ICQCorp/src/services.cpp index f632f67c64..0781c67d5c 100644 --- a/protocols/ICQCorp/src/services.cpp +++ b/protocols/ICQCorp/src/services.cpp @@ -28,10 +28,10 @@ static INT_PTR icqGetCaps(WPARAM wParam, LPARAM) return PF1_IM | PF1_FILE | PF1_MODEMSG | PF1_AUTHREQ | PF1_PEER2PEER | PF1_BASICSEARCH | PF1_EXTSEARCH | PF1_CANRENAMEFILE | PF1_FILERESUME | PF1_ADDSEARCHRES | PF1_SEARCHBYEMAIL | PF1_SEARCHBYNAME | PF1_NUMERICUSERID; case PFLAGNUM_2: - return PF2_ONLINE | PF2_INVISIBLE | PF2_SHORTAWAY | PF2_LONGAWAY | PF2_LIGHTDND | PF2_HEAVYDND; + return PF2_ONLINE | PF2_INVISIBLE | PF2_SHORTAWAY | PF2_LONGAWAY | PF2_LIGHTDND | PF2_HEAVYDND | PF2_FREECHAT; case PFLAGNUM_3: - return PF2_SHORTAWAY | PF2_LONGAWAY | PF2_LIGHTDND | PF2_HEAVYDND; + return PF2_SHORTAWAY | PF2_LONGAWAY | PF2_LIGHTDND | PF2_HEAVYDND | PF2_FREECHAT; case PFLAG_UNIQUEIDTEXT: return (INT_PTR)Translate("ICQ number"); -- cgit v1.2.3