src/protocols/oscar/email.c

Tue, 14 Jun 2005 00:24:27 +0000

author
Mark Doliner <markdoliner@pidgin.im>
date
Tue, 14 Jun 2005 00:24:27 +0000
changeset 11005
06c22b605323
parent 10996
145cffed9c3e
permissions
-rw-r--r--

[gaim-migrate @ 12864]
Small changes to the oscar PRPL. Someone in #gaim was attempting to
debug a problem he's seen with permit/deny settings not sticking,
and noticed that there were multiple copies of people in his permit
or deny list. He didn't think the copies were still being added.

In any case, now Gaim will remove duplicate copies of people in your
permit and deny list, and multiple copies of a single buddy in the
same group.

3694
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1 /*
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
2 * Family 0x0018 - Email notification
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
3 *
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
4 * Used for being alerted when the email address(es) associated with
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
5 * your screen name get new electronic-m. For normal AIM accounts, you
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
6 * get the email address screenname@netscape.net. AOL accounts have
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
7 * screenname@aol.com, and can also activate a netscape.net account.
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
8 *
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
9 */
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
10
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
11 #define FAIM_INTERNAL
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
12 #include <aim.h>
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
13
3725
40fe9bcc8c9e [gaim-migrate @ 3861]
Duffman
parents: 3694
diff changeset
14 /**
3694
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
15 * Subtype 0x0006 - Request information about your email account
3725
40fe9bcc8c9e [gaim-migrate @ 3861]
Duffman
parents: 3694
diff changeset
16 *
40fe9bcc8c9e [gaim-migrate @ 3861]
Duffman
parents: 3694
diff changeset
17 * @param sess The oscar session.
40fe9bcc8c9e [gaim-migrate @ 3861]
Duffman
parents: 3694
diff changeset
18 * @param conn The email connection for this session.
40fe9bcc8c9e [gaim-migrate @ 3861]
Duffman
parents: 3694
diff changeset
19 * @return Return 0 if no errors, otherwise return the error number.
3694
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
20 */
7282
73b94979f76b [gaim-migrate @ 7861]
Mark Doliner <markdoliner@pidgin.im>
parents: 7167
diff changeset
21 faim_export int aim_email_sendcookies(aim_session_t *sess)
3694
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
22 {
7282
73b94979f76b [gaim-migrate @ 7861]
Mark Doliner <markdoliner@pidgin.im>
parents: 7167
diff changeset
23 aim_conn_t *conn;
3694
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
24 aim_frame_t *fr;
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
25 aim_snacid_t snacid;
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
26
7282
73b94979f76b [gaim-migrate @ 7861]
Mark Doliner <markdoliner@pidgin.im>
parents: 7167
diff changeset
27 if (!sess || !(conn = aim_conn_findbygroup(sess, AIM_CB_FAM_EML)))
3694
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
28 return -EINVAL;
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
29
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
30 if (!(fr = aim_tx_new(sess, conn, AIM_FRAMETYPE_FLAP, 0x02, 10+2+16+16)))
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
31 return -ENOMEM;
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
32 snacid = aim_cachesnac(sess, 0x0018, 0x0006, 0x0000, NULL, 0);
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
33 aim_putsnac(&fr->data, 0x0018, 0x0006, 0x0000, snacid);
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
34
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
35 /* Number of cookies to follow */
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
36 aimbs_put16(&fr->data, 0x0002);
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
37
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
38 /* Cookie */
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
39 aimbs_put16(&fr->data, 0x5d5e);
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
40 aimbs_put16(&fr->data, 0x1708);
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
41 aimbs_put16(&fr->data, 0x55aa);
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
42 aimbs_put16(&fr->data, 0x11d3);
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
43 aimbs_put16(&fr->data, 0xb143);
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
44 aimbs_put16(&fr->data, 0x0060);
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
45 aimbs_put16(&fr->data, 0xb0fb);
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
46 aimbs_put16(&fr->data, 0x1ecb);
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
47
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
48 /* Cookie */
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
49 aimbs_put16(&fr->data, 0xb380);
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
50 aimbs_put16(&fr->data, 0x9ad8);
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
51 aimbs_put16(&fr->data, 0x0dba);
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
52 aimbs_put16(&fr->data, 0x11d5);
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
53 aimbs_put16(&fr->data, 0x9f8a);
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
54 aimbs_put16(&fr->data, 0x0060);
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
55 aimbs_put16(&fr->data, 0xb0ee);
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
56 aimbs_put16(&fr->data, 0x0631);
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
57
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
58 aim_tx_enqueue(sess, fr);
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
59
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
60 return 0;
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
61 }
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
62
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
63
3725
40fe9bcc8c9e [gaim-migrate @ 3861]
Duffman
parents: 3694
diff changeset
64 /**
3694
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
65 * Subtype 0x0007 - Receive information about your email account
4804
e6e0e6d50d39 [gaim-migrate @ 5124]
Mark Doliner <markdoliner@pidgin.im>
parents: 3952
diff changeset
66 *
3725
40fe9bcc8c9e [gaim-migrate @ 3861]
Duffman
parents: 3694
diff changeset
67 * So I don't even know if you can have multiple 16 byte keys,
3694
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
68 * but this is coded so it will handle that, and handle it well.
3725
40fe9bcc8c9e [gaim-migrate @ 3861]
Duffman
parents: 3694
diff changeset
69 * This tells you if you have unread mail or not, the URL you
40fe9bcc8c9e [gaim-migrate @ 3861]
Duffman
parents: 3694
diff changeset
70 * should use to access that mail, and the domain name for the
40fe9bcc8c9e [gaim-migrate @ 3861]
Duffman
parents: 3694
diff changeset
71 * email account (screenname@domainname.com). If this is the
40fe9bcc8c9e [gaim-migrate @ 3861]
Duffman
parents: 3694
diff changeset
72 * first 0x0007 SNAC you've received since you signed on, or if
40fe9bcc8c9e [gaim-migrate @ 3861]
Duffman
parents: 3694
diff changeset
73 * this is just a periodic status update, this will also contain
40fe9bcc8c9e [gaim-migrate @ 3861]
Duffman
parents: 3694
diff changeset
74 * the number of unread emails that you have.
3694
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
75 */
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
76 static int parseinfo(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, aim_bstream_t *bs)
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
77 {
4871
962860053dcd [gaim-migrate @ 5201]
Mark Doliner <markdoliner@pidgin.im>
parents: 4804
diff changeset
78 int ret = 0;
3694
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
79 aim_rxcallback_t userfunc;
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
80 struct aim_emailinfo *new;
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
81 aim_tlvlist_t *tlvlist;
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
82 fu8_t *cookie8, *cookie16;
3725
40fe9bcc8c9e [gaim-migrate @ 3861]
Duffman
parents: 3694
diff changeset
83 int tmp, havenewmail = 0; /* Used to tell the client we have _new_ mail */
3694
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
84
7297
5cdfc7212651 [gaim-migrate @ 7881]
Sean Egan <seanegan@pidgin.im>
parents: 7282
diff changeset
85 char *alertitle = NULL, *alerturl = NULL;
5cdfc7212651 [gaim-migrate @ 7881]
Sean Egan <seanegan@pidgin.im>
parents: 7282
diff changeset
86
3694
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
87 cookie8 = aimbs_getraw(bs, 8); /* Possibly the code used to log you in to mail? */
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
88 cookie16 = aimbs_getraw(bs, 16); /* Mail cookie sent above */
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
89
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
90 /* See if we already have some info associated with this cookie */
10996
145cffed9c3e [gaim-migrate @ 12837]
Mark Doliner <markdoliner@pidgin.im>
parents: 8735
diff changeset
91 for (new = sess->emailinfo; (new && memcmp(cookie16, new->cookie16, 16)); new = new->next);
3694
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
92 if (new) {
8735
01248ea222d3 [gaim-migrate @ 9490]
Jonathan Champ <royanee@users.sourceforge.net>
parents: 7313
diff changeset
93 /* Free some of the old info, if it exists */
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3725
diff changeset
94 free(new->cookie8);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3725
diff changeset
95 free(new->cookie16);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3725
diff changeset
96 free(new->url);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3725
diff changeset
97 free(new->domain);
3694
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
98 } else {
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
99 /* We don't already have info, so create a new struct for it */
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
100 if (!(new = malloc(sizeof(struct aim_emailinfo))))
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
101 return -ENOMEM;
3725
40fe9bcc8c9e [gaim-migrate @ 3861]
Duffman
parents: 3694
diff changeset
102 memset(new, 0, sizeof(struct aim_emailinfo));
7045
458b55091f8b [gaim-migrate @ 7608]
Mark Doliner <markdoliner@pidgin.im>
parents: 7011
diff changeset
103 new->next = sess->emailinfo;
458b55091f8b [gaim-migrate @ 7608]
Mark Doliner <markdoliner@pidgin.im>
parents: 7011
diff changeset
104 sess->emailinfo = new;
3694
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
105 }
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
106
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
107 new->cookie8 = cookie8;
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
108 new->cookie16 = cookie16;
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
109
7167
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 7045
diff changeset
110 tlvlist = aim_tlvlist_readnum(bs, aimbs_get16(bs));
3694
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
111
7167
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 7045
diff changeset
112 tmp = aim_tlv_get16(tlvlist, 0x0080, 1);
3725
40fe9bcc8c9e [gaim-migrate @ 3861]
Duffman
parents: 3694
diff changeset
113 if (tmp) {
40fe9bcc8c9e [gaim-migrate @ 3861]
Duffman
parents: 3694
diff changeset
114 if (new->nummsgs < tmp)
40fe9bcc8c9e [gaim-migrate @ 3861]
Duffman
parents: 3694
diff changeset
115 havenewmail = 1;
40fe9bcc8c9e [gaim-migrate @ 3861]
Duffman
parents: 3694
diff changeset
116 new->nummsgs = tmp;
40fe9bcc8c9e [gaim-migrate @ 3861]
Duffman
parents: 3694
diff changeset
117 } else {
8735
01248ea222d3 [gaim-migrate @ 9490]
Jonathan Champ <royanee@users.sourceforge.net>
parents: 7313
diff changeset
118 /* If they don't send a 0x0080 TLV, it means we definitely have new mail */
3725
40fe9bcc8c9e [gaim-migrate @ 3861]
Duffman
parents: 3694
diff changeset
119 /* (ie. this is not just another status update) */
40fe9bcc8c9e [gaim-migrate @ 3861]
Duffman
parents: 3694
diff changeset
120 havenewmail = 1;
40fe9bcc8c9e [gaim-migrate @ 3861]
Duffman
parents: 3694
diff changeset
121 new->nummsgs++; /* We know we have at least 1 new email */
40fe9bcc8c9e [gaim-migrate @ 3861]
Duffman
parents: 3694
diff changeset
122 }
7167
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 7045
diff changeset
123 new->url = aim_tlv_getstr(tlvlist, 0x0007, 1);
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 7045
diff changeset
124 if (!(new->unread = aim_tlv_get8(tlvlist, 0x0081, 1))) {
3725
40fe9bcc8c9e [gaim-migrate @ 3861]
Duffman
parents: 3694
diff changeset
125 havenewmail = 0;
40fe9bcc8c9e [gaim-migrate @ 3861]
Duffman
parents: 3694
diff changeset
126 new->nummsgs = 0;
40fe9bcc8c9e [gaim-migrate @ 3861]
Duffman
parents: 3694
diff changeset
127 }
7167
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 7045
diff changeset
128 new->domain = aim_tlv_getstr(tlvlist, 0x0082, 1);
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 7045
diff changeset
129 new->flag = aim_tlv_get16(tlvlist, 0x0084, 1);
3694
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
130
7297
5cdfc7212651 [gaim-migrate @ 7881]
Sean Egan <seanegan@pidgin.im>
parents: 7282
diff changeset
131 alertitle = aim_tlv_getstr(tlvlist, 0x0005, 1);
5cdfc7212651 [gaim-migrate @ 7881]
Sean Egan <seanegan@pidgin.im>
parents: 7282
diff changeset
132 alerturl = aim_tlv_getstr(tlvlist, 0x000d, 1);
5cdfc7212651 [gaim-migrate @ 7881]
Sean Egan <seanegan@pidgin.im>
parents: 7282
diff changeset
133
3694
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
134 if ((userfunc = aim_callhandler(sess, rx->conn, snac->family, snac->subtype)))
7313
557d9e2b5dea [gaim-migrate @ 7897]
Mark Doliner <markdoliner@pidgin.im>
parents: 7297
diff changeset
135 ret = userfunc(sess, rx, new, havenewmail, alertitle, (alerturl ? alerturl + 2 : NULL));
3694
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
136
7167
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 7045
diff changeset
137 aim_tlvlist_free(&tlvlist);
4875
3aefead7212b [gaim-migrate @ 5205]
Mark Doliner <markdoliner@pidgin.im>
parents: 4871
diff changeset
138
7313
557d9e2b5dea [gaim-migrate @ 7897]
Mark Doliner <markdoliner@pidgin.im>
parents: 7297
diff changeset
139 free(alertitle);
557d9e2b5dea [gaim-migrate @ 7897]
Mark Doliner <markdoliner@pidgin.im>
parents: 7297
diff changeset
140 free(alerturl);
557d9e2b5dea [gaim-migrate @ 7897]
Mark Doliner <markdoliner@pidgin.im>
parents: 7297
diff changeset
141
4871
962860053dcd [gaim-migrate @ 5201]
Mark Doliner <markdoliner@pidgin.im>
parents: 4804
diff changeset
142 return ret;
3694
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
143 }
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
144
3725
40fe9bcc8c9e [gaim-migrate @ 3861]
Duffman
parents: 3694
diff changeset
145 /**
3694
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
146 * Subtype 0x0016 - Send something or other
3725
40fe9bcc8c9e [gaim-migrate @ 3861]
Duffman
parents: 3694
diff changeset
147 *
40fe9bcc8c9e [gaim-migrate @ 3861]
Duffman
parents: 3694
diff changeset
148 * @param sess The oscar session.
40fe9bcc8c9e [gaim-migrate @ 3861]
Duffman
parents: 3694
diff changeset
149 * @param conn The email connection for this session.
40fe9bcc8c9e [gaim-migrate @ 3861]
Duffman
parents: 3694
diff changeset
150 * @return Return 0 if no errors, otherwise return the error number.
3694
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
151 */
7282
73b94979f76b [gaim-migrate @ 7861]
Mark Doliner <markdoliner@pidgin.im>
parents: 7167
diff changeset
152 faim_export int aim_email_activate(aim_session_t *sess)
3694
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
153 {
7282
73b94979f76b [gaim-migrate @ 7861]
Mark Doliner <markdoliner@pidgin.im>
parents: 7167
diff changeset
154 aim_conn_t *conn;
3694
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
155 aim_frame_t *fr;
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
156 aim_snacid_t snacid;
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
157
7282
73b94979f76b [gaim-migrate @ 7861]
Mark Doliner <markdoliner@pidgin.im>
parents: 7167
diff changeset
158 if (!sess || !(conn = aim_conn_findbygroup(sess, AIM_CB_FAM_EML)))
3694
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
159 return -EINVAL;
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
160
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
161 if (!(fr = aim_tx_new(sess, conn, AIM_FRAMETYPE_FLAP, 0x02, 10+1+16)))
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
162 return -ENOMEM;
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
163 snacid = aim_cachesnac(sess, 0x0018, 0x0016, 0x0000, NULL, 0);
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
164 aim_putsnac(&fr->data, 0x0018, 0x0016, 0x0000, snacid);
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
165
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
166 /* I would guess this tells AIM that you want updates for your mail accounts */
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
167 /* ...but I really have no idea */
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
168 aimbs_put8(&fr->data, 0x02);
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
169 aimbs_put32(&fr->data, 0x04000000);
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
170 aimbs_put32(&fr->data, 0x04000000);
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
171 aimbs_put32(&fr->data, 0x04000000);
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
172 aimbs_put32(&fr->data, 0x00000000);
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
173
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
174 aim_tx_enqueue(sess, fr);
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
175
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
176 return 0;
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
177 }
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
178
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
179 static int snachandler(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, aim_bstream_t *bs)
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
180 {
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
181
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
182 if (snac->subtype == 0x0007)
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
183 return parseinfo(sess, mod, rx, snac, bs);
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
184
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
185 return 0;
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
186 }
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
187
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
188 static void email_shutdown(aim_session_t *sess, aim_module_t *mod)
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
189 {
7045
458b55091f8b [gaim-migrate @ 7608]
Mark Doliner <markdoliner@pidgin.im>
parents: 7011
diff changeset
190 while (sess->emailinfo) {
458b55091f8b [gaim-migrate @ 7608]
Mark Doliner <markdoliner@pidgin.im>
parents: 7011
diff changeset
191 struct aim_emailinfo *tmp = sess->emailinfo;
458b55091f8b [gaim-migrate @ 7608]
Mark Doliner <markdoliner@pidgin.im>
parents: 7011
diff changeset
192 sess->emailinfo = sess->emailinfo->next;
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3725
diff changeset
193 free(tmp->cookie16);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3725
diff changeset
194 free(tmp->cookie8);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3725
diff changeset
195 free(tmp->url);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3725
diff changeset
196 free(tmp->domain);
3694
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
197 free(tmp);
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
198 }
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
199
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
200 return;
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
201 }
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
202
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
203 faim_internal int email_modfirst(aim_session_t *sess, aim_module_t *mod)
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
204 {
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
205
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
206 mod->family = 0x0018;
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
207 mod->version = 0x0001;
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
208 mod->toolid = 0x0010;
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
209 mod->toolversion = 0x0629;
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
210 mod->flags = 0;
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
211 strncpy(mod->name, "email", sizeof(mod->name));
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
212 mod->snachandler = snachandler;
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
213 mod->shutdown = email_shutdown;
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
214
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
215 return 0;
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
216 }

mercurial