diff options
author | dartraiden <wowemuh@gmail.com> | 2019-07-21 19:59:18 +0300 |
---|---|---|
committer | dartraiden <wowemuh@gmail.com> | 2019-07-21 19:59:18 +0300 |
commit | b078dfb78c89aea87cd422eae52694738e473cf3 (patch) | |
tree | ca896e82a8a5ce81f80d041f4aee7fdeeb007162 /protocols/ICQCorp/src | |
parent | ee7e29d02e94e969c1154515cd0c408c591a2414 (diff) |
Restore "Free for chat" status support (fixes #1963)
Diffstat (limited to 'protocols/ICQCorp/src')
-rw-r--r-- | protocols/ICQCorp/src/protocol.cpp | 10 | ||||
-rw-r--r-- | protocols/ICQCorp/src/protocol.h | 2 | ||||
-rw-r--r-- | protocols/ICQCorp/src/services.cpp | 4 |
3 files changed, 14 insertions, 2 deletions
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");
|