Mercurial > pidgin.yaz
view plugins/icq/queue.c @ 1401:bf041349b11e
[gaim-migrate @ 1411]
abliity to set accounts away independent of each other. also allows for all the other states (like in yahoo and icq). probably breaks MSN, so don't use it until rob fixes it.
committer: Tailor Script <tailor@pidgin.im>
author | Eric Warmenhoven <eric@warmenhoven.org> |
---|---|
date | Wed, 10 Jan 2001 22:15:24 +0000 |
parents | 0a766047b4fd |
children | 4c510ca3563f |
line wrap: on
line source
/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* $Id: queue.c 1319 2000-12-19 10:08:29Z warmenhoven $ $Log$ Revision 1.3 2000/12/19 10:08:29 warmenhoven Yay, new icqlib Revision 1.12 2000/12/19 06:00:07 bills moved members from ICQLINK to ICQLINK_private struct Revision 1.11 2000/12/06 05:15:45 denis Handling for mass TCP messages has been added based on patch by Konstantin Klyagin <konst@konst.org.ua> Revision 1.10 2000/12/03 21:56:38 bills fixed compilation with gcc-2.96 Revision 1.9 2000/07/10 01:31:17 bills oops - removed #define LIST_TRACE and #define QUEUE_DEBUG Revision 1.8 2000/07/10 01:26:56 bills added more trace messages, reworked packet delete handling: now happens during _icq_UDEQueueItemFree rather than during icq_UDPQueueDelSeq - fixes memory leak Revision 1.7 2000/07/09 22:07:37 bills use new list_free Revision 1.6 2000/06/25 16:30:05 denis Some sanity checks were added to icq_UDPQueueDelete() and icq_UDPQueueFree() Revision 1.5 2000/05/10 19:06:59 denis UDP outgoing packet queue was implemented. Revision 1.4 2000/03/30 14:15:28 denis Fixed FreeBSD warning about obsolete malloc.h header. Revision 1.3 2000/01/16 03:59:10 bills reworked list code so list_nodes don't need to be inside item structures, removed strlist code and replaced with generic list calls Revision 1.2 1999/09/29 17:06:47 denis ICQLINK compatibility added. Revision 1.1 1999/07/16 12:12:13 denis Initial support for outgoing packet queue added. */ #include <stdlib.h> #include <time.h> #include "icqlib.h" #include "queue.h" #include "list.h" void icq_UDPQueueNew(ICQLINK *link) { link->d->icq_UDPQueue = list_new(); link->icq_UDPExpireInterval = 15; /* expire interval = 15 sec */ } void icq_UDPQueuePut(ICQLINK *link, icq_Packet *p, int attempt) { icq_UDPQueueItem *ptr = (icq_UDPQueueItem*)malloc(sizeof(icq_UDPQueueItem)); #ifdef QUEUE_DEBUG printf("icq_UDPQueuePut(seq=0x%04X, cmd=0x%04X)\n", icq_PacketReadUDPOutSeq1(p), icq_PacketReadUDPOutCmd(p)); #endif ptr->attempts = attempt; ptr->expire = time(0L)+link->icq_UDPExpireInterval; ptr->pack = p; #ifdef QUEUE_DEBUG printf("enqueuing queueitem %p\n", ptr); #endif list_enqueue(link->d->icq_UDPQueue, ptr); } icq_Packet *icq_UDPQueueGet(ICQLINK *link) { icq_UDPQueueItem *ptr = (icq_UDPQueueItem*)list_first(link->d->icq_UDPQueue); icq_Packet *pack = 0L; if(ptr) { pack = ptr->pack; list_remove(link->d->icq_UDPQueue, (list_node*)ptr); } #ifdef QUEUE_DEBUG if(pack) printf("icq_UDPQueueGet(cmd=0x%04X)\n", icq_PacketReadUDPOutCmd(pack)); #endif return pack; } icq_Packet *icq_UDPQueuePeek(ICQLINK *link) { icq_UDPQueueItem *ptr = (icq_UDPQueueItem*)list_first(link->d->icq_UDPQueue); if(ptr) return ptr->pack; else return 0L; } void _icq_UDPQueueItemFree(void *p) { icq_UDPQueueItem *pitem=(icq_UDPQueueItem *)p; #ifdef QUEUE_DEBUG printf("_icq_UDPQueueItemFree(%p)\n", p); #endif if (pitem->pack) icq_PacketDelete(pitem->pack); free(p); } /* Frees the queue and dispose it */ void icq_UDPQueueDelete(ICQLINK *link) { #ifdef QUEUE_DEBUG printf("icq_UDPQueueDelete\n"); #endif if(link->d->icq_UDPQueue) { list_delete(link->d->icq_UDPQueue, _icq_UDPQueueItemFree); link->d->icq_UDPQueue = 0; } } /* Only frees the queue */ void icq_UDPQueueFree(ICQLINK *link) { #ifdef QUEUE_DEBUG printf("icq_UDPQueueFree\n"); #endif if(link->d->icq_UDPQueue) list_free(link->d->icq_UDPQueue, _icq_UDPQueueItemFree); } int icq_UDPQueueFindSeq(void *p, va_list data) { WORD seq=va_arg(data, int); return icq_PacketReadUDPOutSeq1(((icq_UDPQueueItem *)p)->pack) == seq; } void icq_UDPQueueDelSeq(ICQLINK *link, WORD seq) { icq_UDPQueueItem *ptr; #ifdef QUEUE_DEBUG printf("icq_UDPQueueDelSeq(seq=0x%04X", seq); #endif ptr = list_traverse(link->d->icq_UDPQueue, icq_UDPQueueFindSeq, seq); if(ptr) { #ifdef QUEUE_DEBUG printf(", cmd=0x%04X",icq_PacketReadUDPOutCmd(ptr->pack)); #endif list_remove(link->d->icq_UDPQueue, ptr); _icq_UDPQueueItemFree(ptr); } #ifdef QUEUE_DEBUG printf(")\n"); #endif } long icq_UDPQueueInterval(ICQLINK *link) { long interval; icq_UDPQueueItem *ptr = (icq_UDPQueueItem*)list_first(link->d->icq_UDPQueue); if(ptr) { interval = ptr->expire - time(0L); return interval>=0?interval:0; } return -1; }