From 3b55a62fdcb1f8222de3c2c8fbed530792c419a0 Mon Sep 17 00:00:00 2001 From: Vadim Dashevskiy Date: Fri, 12 Oct 2012 14:53:57 +0000 Subject: GTalkExt, ICQ, IRC, Jabber: folders restructurization git-svn-id: http://svn.miranda-ng.org/main/trunk@1890 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- protocols/IcqOscarJ/src/icq_rates.h | 146 ++++++++++++++++++++++++++++++++++++ 1 file changed, 146 insertions(+) create mode 100644 protocols/IcqOscarJ/src/icq_rates.h (limited to 'protocols/IcqOscarJ/src/icq_rates.h') diff --git a/protocols/IcqOscarJ/src/icq_rates.h b/protocols/IcqOscarJ/src/icq_rates.h new file mode 100644 index 0000000000..ab16e74007 --- /dev/null +++ b/protocols/IcqOscarJ/src/icq_rates.h @@ -0,0 +1,146 @@ +// ---------------------------------------------------------------------------80 +// ICQ plugin for Miranda Instant Messenger +// ________________________________________ +// +// Copyright © 2000-2001 Richard Hughes, Roland Rabien, Tristan Van de Vreede +// Copyright © 2001-2002 Jon Keating, Richard Hughes +// Copyright © 2002-2004 Martin Öberg, Sam Kothari, Robert Rainwater +// Copyright © 2004-2010 Joe Kucera +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +// +// ----------------------------------------------------------------------------- +// DESCRIPTION: +// +// Rate management +// +// ----------------------------------------------------------------------------- +#ifndef __ICQ_RATES_H +#define __ICQ_RATES_H + +#define MAX_RATES_GROUP_COUNT 5 + +struct rates_group +{ + DWORD dwWindowSize; + DWORD dwClearLevel; + DWORD dwAlertLevel; + DWORD dwLimitLevel; + DWORD dwMaxLevel; + // current level + int rCurrentLevel; + int tCurrentLevel; + // links + WORD *pPairs; + int nPairs; +}; + +struct rates : public MZeroedObject +{ +private: + CIcqProto *ppro; + int nGroups; + rates_group groups[MAX_RATES_GROUP_COUNT]; + + rates_group *getGroup(WORD wGroup); +public: + rates(CIcqProto *ppro, BYTE *pBuffer, WORD wLen); + ~rates(); + + WORD getGroupFromSNAC(WORD wFamily, WORD wCommand); + WORD getGroupFromPacket(icq_packet *pPacket); + + int getLimitLevel(WORD wGroup, int nLevel); + int getDelayToLimitLevel(WORD wGroup, int nLevel); + int getNextRateLevel(WORD wGroup); + + void packetSent(icq_packet *pPacket); + void updateLevel(WORD wGroup, int nLevel); + + void initAckPacket(icq_packet *pPacket); +}; + +#define RML_CLEAR 0x01 +#define RML_ALERT 0x02 +#define RML_LIMIT 0x03 +#define RML_IDLE_10 0x10 +#define RML_IDLE_30 0x11 +#define RML_IDLE_50 0x12 +#define RML_IDLE_70 0x13 + +// Rates - Level 2 + +// queue types +#define RQT_DEFAULT 0 // standard - pushes all items without much delay +#define RQT_REQUEST 1 // request - pushes only first item on duplicity +#define RQT_RESPONSE 2 // response - pushes only last item on duplicity + +// +// generic queue item +// +struct rates_queue_item : public MZeroedObject +{ + friend struct rates_queue; +protected: + CIcqProto *ppro; + BOOL bCreated; + WORD wGroup; + + virtual BOOL isEqual(rates_queue_item *pItem); + virtual rates_queue_item* copyItem(rates_queue_item *pDest = NULL); +public: + rates_queue_item(CIcqProto *ppro, WORD wGroup); + virtual ~rates_queue_item(); + + BOOL isOverRate(int nLevel); + + virtual void execute(); + + HANDLE hContact; + DWORD dwUin; + char *szUid; +}; + +struct rates_queue; +typedef void (rates_queue::*IcqRateFunc)(void); + +// +// generic item queue (FIFO) +// +struct rates_queue : public MZeroedObject +{ +private: + CIcqProto *ppro; + const char *szDescr; + icq_critical_section *listsMutex; // we need to be thread safe + int pendingListSize; + rates_queue_item **pendingList; + int duplicates; +protected: + void cleanup(); + void processQueue(); + void initDelay(int nDelay, IcqRateFunc delaycode); +public: + rates_queue(CIcqProto *ppro, const char *szDescr, int nLimitLevel, int nWaitLevel, int nDuplicates = 0); + ~rates_queue(); + + void putItem(rates_queue_item *pItem, int nMinDelay); + + int limitLevel; // RML_* + int waitLevel; +}; + + +#endif /* __ICQ_RATES_H */ -- cgit v1.2.3