Mercurial > pidgin.yaz
view libfaim/aim_snac.c @ 133:e277d5f0c1dd
[gaim-migrate @ 143]
Let's see if I can remember everything I did:
- Fixed a bug I let slip. If you choose the new option to not play
login sounds when you log in, and then quit before the timeout is
up, it would save that you didn't want login sounds at all.
- Added two new plugin events: event_away and event_buddy_away.
- Made GtkWidget *imaway in away.c and void play(uchar *, int) in
sound.c not static any more (though not referenced in gaim.h).
This is so plugins can use those (and not have to worry about
writing their own sound code).
- Wrote a quick plugin to auto-iconify windows when you go away. I
had just been locally patching my own copy, since I figured it wasn't
worth including as an option. It also demonstrates some of the issues
of deciding between USE_APPLET and not. Perhaps plugins are the way
to go with some things that would otherwise have been options (for
example, the Lag-O-Meter is one of those things that could possibly
have been a plugin instead of hard-coded in).
I think that's everything.
committer: Tailor Script <tailor@pidgin.im>
author | Eric Warmenhoven <eric@warmenhoven.org> |
---|---|
date | Wed, 19 Apr 2000 02:04:30 +0000 |
parents | 68b230f8da5f |
children | 6ced2f1c8b24 |
line wrap: on
line source
/* * * Various SNAC-related dodads... * * outstanding_snacs is a list of aim_snac_t structs. A SNAC should be added * whenever a new SNAC is sent and it should remain in the list until the * response for it has been receieved. * * First edition badly written by Adam Fritzler (afritz@delphid.ml.org) * Current edition nicely rewritten (it even works) by n (n@ml.org) * */ #include <aim.h> #include <assert.h> struct aim_snac_t *aim_outstanding_snacs = NULL; u_long aim_snac_nextid = 0x00000001; u_long aim_newsnac(struct aim_snac_t *newsnac) { struct aim_snac_t *snac = NULL, *cur = aim_outstanding_snacs; assert(newsnac != NULL); snac = calloc(1, sizeof(struct aim_snac_t)); assert(snac != NULL); memcpy(snac, newsnac, sizeof(struct aim_snac_t)); snac->issuetime = time(&snac->issuetime); snac->next = NULL; if (cur == NULL) { aim_outstanding_snacs = snac; return(snac->id); } while (cur->next != NULL) cur = cur->next; cur->next = snac; return(snac->id); } struct aim_snac_t *aim_remsnac(u_long id) { struct aim_snac_t *cur = aim_outstanding_snacs; if (cur == NULL) return(NULL); if (cur->id == id) { aim_outstanding_snacs = cur->next; return(cur); } while (cur->next != NULL) { if (cur->next->id == id) { struct aim_snac_t *tmp = NULL; tmp = cur->next; cur->next = cur->next->next; return(tmp); } cur = cur->next; } return(NULL); } /* * This is for cleaning up old SNACs that either don't get replies or * a reply was never received for. Garabage collection. Plain and simple. * * maxage is the _minimum_ age in seconds to keep SNACs (though I don't know * why its called _max_age). * */ int aim_cleansnacs(int maxage) { struct aim_snac_t *cur = aim_outstanding_snacs; struct aim_snac_t *remed = NULL; time_t curtime; curtime = time(&curtime); while (cur) { if ( (cur) && (((cur->issuetime) + maxage) < curtime)) { #if DEBUG > 1 printf("aimsnac: WARNING purged obsolete snac %ul\n", cur->id); #endif remed = aim_remsnac(cur->id); if (remed) { if (remed->data) free(remed->data); free(remed); } } cur = cur->next; } return 0; } int aim_putsnac(u_char *buf, int family, int subtype, int flags, u_long snacid) { int curbyte = 0; curbyte += aimutil_put16(buf+curbyte,family&0xffff); curbyte += aimutil_put16(buf+curbyte,subtype&0xffff); curbyte += aimutil_put16(buf+curbyte,flags&0xffff); curbyte += aimutil_put32(buf+curbyte,snacid); return curbyte; }