From c015ec458520935c407aa1b2ce1d004c5c5c8a61 Mon Sep 17 00:00:00 2001 From: Vadim Dashevskiy Date: Tue, 15 Apr 2014 08:46:04 +0000 Subject: ICQCorp adopted - needs Unicode fixes git-svn-id: http://svn.miranda-ng.org/main/trunk@8980 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- protocols/ICQCorp/src/event.cpp | 111 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 protocols/ICQCorp/src/event.cpp (limited to 'protocols/ICQCorp/src/event.cpp') diff --git a/protocols/ICQCorp/src/event.cpp b/protocols/ICQCorp/src/event.cpp new file mode 100644 index 0000000000..69f2ac85db --- /dev/null +++ b/protocols/ICQCorp/src/event.cpp @@ -0,0 +1,111 @@ +/* + ICQ Corporate protocol plugin for Miranda IM. + Copyright (C) 2003-2005 Eugene Tarasenko + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +*/ + +#include "corp.h" + +std::vector icqEvents; + +/////////////////////////////////////////////////////////////////////////////// + +void WINAPI eventTimerProc(HWND hWnd, UINT Msg, UINT_PTR hTimer, DWORD Time) +{ + unsigned int i; + + KillTimer(NULL, hTimer); + for (i=0; ihTimer) icqEvents[i]->noAck(); +} + +/////////////////////////////////////////////////////////////////////////////// + +ICQEvent *getEvent(SOCKET hSocket, unsigned int sequence) +{ + unsigned int i; + + for (i=0; iisEvent(hSocket, sequence)) return icqEvents[i]; + return NULL; +} + +/////////////////////////////////////////////////////////////////////////////// + +ICQEvent::ICQEvent(unsigned short theCmd, unsigned short theSubCmd, unsigned int theSequence, + unsigned int theUin, Socket *theSocket, Packet *thePacket, int theReply) +{ + cmd = theCmd; + subCmd = theSubCmd; + sequence = theSequence; + uin = theUin; + socket = theSocket; + packet = new Packet(thePacket); + reply = theReply; + + hTimer = NULL; + retries = 0; +} + +/////////////////////////////////////////////////////////////////////////////// + +ICQEvent::~ICQEvent() +{ + stop(); + delete packet; +} + +/////////////////////////////////////////////////////////////////////////////// + +bool ICQEvent::start() +{ + // send the packet + if (!socket->sendPacket(*packet)) return false; + + if (cmd != ICQ_CMDxTCP_START) hTimer = SetTimer(NULL, 0, MAX_WAIT_ACK, (TIMERPROC)eventTimerProc); + return true; +} + +/////////////////////////////////////////////////////////////////////////////// + +void ICQEvent::stop() +{ + if (hTimer) + { + KillTimer(NULL, hTimer); + hTimer = NULL; + } +} + +/////////////////////////////////////////////////////////////////////////////// + +bool ICQEvent::isEvent(SOCKET hSocket, unsigned long theSequence) +{ + return socket->handleVal == hSocket && sequence == theSequence; +} + +/////////////////////////////////////////////////////////////////////////////// + +void ICQEvent::noAck() +{ + hTimer = NULL; + if (socket->connected() && retries < MAX_SERVER_RETRIES && cmd != ICQ_CMDxTCP_START) + { + retries++; + start(); + } + else icq.doneEvent(false, socket->handleVal, sequence); +} + +/////////////////////////////////////////////////////////////////////////////// -- cgit v1.2.3