From cb4a46e7fbe62d788e66ed6121c717a2d22a4d7c Mon Sep 17 00:00:00 2001 From: watcherhd Date: Thu, 21 Apr 2011 14:14:52 +0000 Subject: svn.miranda.im is moving to a new home! git-svn-id: http://miranda-plugins.googlecode.com/svn/trunk@7 e753b5eb-9565-29b2-b5c5-2cc6f99dfbcb --- icqj_mod/chan_05ping.c | 105 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 icqj_mod/chan_05ping.c (limited to 'icqj_mod/chan_05ping.c') diff --git a/icqj_mod/chan_05ping.c b/icqj_mod/chan_05ping.c new file mode 100644 index 0000000..a84b0e7 --- /dev/null +++ b/icqj_mod/chan_05ping.c @@ -0,0 +1,105 @@ +// ---------------------------------------------------------------------------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,2003,2004 Martin Öberg, Sam Kothari, Robert Rainwater +// Copyright © 2004,2005 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// ----------------------------------------------------------------------------- +// +// File name : $Source: /cvsroot/miranda/miranda/protocols/IcqOscarJ/chan_05ping.c,v $ +// Revision : $Revision: 2874 $ +// Last change on : $Date: 2006-05-16 23:38:00 +0200 (Tue, 16 May 2006) $ +// Last change by : $Author: ghazan $ +// +// DESCRIPTION: +// +// Describe me here please... +// +// ----------------------------------------------------------------------------- + +#include "icqoscar.h" + + + +extern HANDLE hServerConn; +static HANDLE hKeepAliveEvent = NULL; + + +void handlePingChannel(unsigned char* buf, WORD datalen) +{ + NetLog_Server("Warning: Ignoring server packet on PING channel"); +} + + + +static void __cdecl icq_keepAliveThread(void* fa) +{ + icq_packet packet; + + NetLog_Server("Keep alive thread starting."); + + hKeepAliveEvent = CreateEvent(NULL, FALSE, FALSE, NULL); + + for(;;) + { + DWORD dwWait = WaitForSingleObjectEx(hKeepAliveEvent, 57000, TRUE); + + if (dwWait == WAIT_OBJECT_0) break; // we should end + else if (dwWait == WAIT_TIMEOUT) + { + // Send a keep alive packet to server + packet.wLen = 0; + write_flap(&packet, ICQ_PING_CHAN); + if (hServerConn) // connection lost, end + sendServPacket(&packet); + else + break; + } + else if (dwWait == WAIT_IO_COMPLETION) + // Possible shutdown in progress + if (Miranda_Terminated()) break; + } + + NetLog_Server("Keep alive thread shutting down."); + + CloseHandle(hKeepAliveEvent); + hKeepAliveEvent = NULL; + + return; +} + + + +void StartKeepAlive() +{ + if (hKeepAliveEvent) // start only once + return; + + if (ICQGetContactSettingByte(NULL, "KeepAlive", 0)) + forkthread(icq_keepAliveThread, 0, NULL); +} + + + +void StopKeepAlive() +{ // finish keep alive thread + if (hKeepAliveEvent) + SetEvent(hKeepAliveEvent); +} -- cgit v1.2.3