4 * Various SNAC-related dodads...
6 * outstanding_snacs is a list of aim_snac_t structs. A SNAC should be added
7 * whenever a new SNAC is sent and it should remain in the list until the
8 * response for it has been receieved.
10 * First edition badly written by Adam Fritzler (afritz@delphid.ml.org)
11 * Current edition nicely rewritten (it even works) by n (n@ml.org)
17 u_long aim_newsnac(struct aim_session_t *sess,
18 struct aim_snac_t *newsnac)
20 struct aim_snac_t *snac = NULL, *cur = NULL;
25 cur = sess->outstanding_snacs;
27 snac = calloc(1, sizeof(struct aim_snac_t));
30 memcpy(snac, newsnac, sizeof(struct aim_snac_t));
31 snac->issuetime = time(&snac->issuetime);
35 sess->outstanding_snacs = snac;
38 while (cur->next != NULL)
41 printf("faim: snac: added %08lx\n", snac->id);
45 struct aim_snac_t *aim_remsnac(struct aim_session_t *sess,
48 struct aim_snac_t *cur;
53 printf("faim: snac: searching for %08lx to remove\n", id);
55 cur = sess->outstanding_snacs;
58 sess->outstanding_snacs = cur->next;
61 while (cur->next != NULL) {
62 if (cur->next->id == id) {
63 struct aim_snac_t *tmp = NULL;
66 cur->next = cur->next->next;
75 * This is for cleaning up old SNACs that either don't get replies or
76 * a reply was never received for. Garabage collection. Plain and simple.
78 * maxage is the _minimum_ age in seconds to keep SNACs (though I don't know
79 * why its called _max_age).
82 int aim_cleansnacs(struct aim_session_t *sess,
85 struct aim_snac_t *cur;
86 struct aim_snac_t *remed = NULL;
89 cur = sess->outstanding_snacs;
91 curtime = time(&curtime);
95 if ( (cur) && (((cur->issuetime) + maxage) < curtime))
98 printf("aimsnac: WARNING purged obsolete snac %08lx\n", cur->id);
100 remed = aim_remsnac(sess, cur->id);
114 int aim_putsnac(u_char *buf, int family, int subtype, int flags, u_long snacid)
117 curbyte += aimutil_put16(buf+curbyte, (u_short)(family&0xffff));
118 curbyte += aimutil_put16(buf+curbyte, (u_short)(subtype&0xffff));
119 curbyte += aimutil_put16(buf+curbyte, (u_short)(flags&0xffff));
120 curbyte += aimutil_put32(buf+curbyte, snacid);