src/protocols/oscar/email.c

Tue, 14 Oct 2003 04:35:46 +0000

author
Mark Doliner <markdoliner@pidgin.im>
date
Tue, 14 Oct 2003 04:35:46 +0000
changeset 7259
9d12688cee90
parent 7167
9cfb68a44e17
child 7282
73b94979f76b
permissions
-rw-r--r--

[gaim-migrate @ 7836]
Correctly handle failed get info requests.

This should fix that bug that's assigned to me, and also the
problem SimGuy (and other people) have had where you need to
Get Info twice before it works.

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 */
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
21 faim_export int aim_email_sendcookies(aim_session_t *sess, aim_conn_t *conn)
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
22 {
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
23 aim_frame_t *fr;
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
24 aim_snacid_t snacid;
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
25
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
26 if (!sess || !conn)
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
27 return -EINVAL;
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
28
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
29 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
30 return -ENOMEM;
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
31 snacid = aim_cachesnac(sess, 0x0018, 0x0006, 0x0000, NULL, 0);
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
32 aim_putsnac(&fr->data, 0x0018, 0x0006, 0x0000, snacid);
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
33
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
34 /* Number of cookies to follow */
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
35 aimbs_put16(&fr->data, 0x0002);
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
36
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
37 /* Cookie */
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
38 aimbs_put16(&fr->data, 0x5d5e);
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
39 aimbs_put16(&fr->data, 0x1708);
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
40 aimbs_put16(&fr->data, 0x55aa);
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
41 aimbs_put16(&fr->data, 0x11d3);
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
42 aimbs_put16(&fr->data, 0xb143);
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
43 aimbs_put16(&fr->data, 0x0060);
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
44 aimbs_put16(&fr->data, 0xb0fb);
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
45 aimbs_put16(&fr->data, 0x1ecb);
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
46
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
47 /* Cookie */
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
48 aimbs_put16(&fr->data, 0xb380);
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
49 aimbs_put16(&fr->data, 0x9ad8);
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
50 aimbs_put16(&fr->data, 0x0dba);
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
51 aimbs_put16(&fr->data, 0x11d5);
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
52 aimbs_put16(&fr->data, 0x9f8a);
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
53 aimbs_put16(&fr->data, 0x0060);
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
54 aimbs_put16(&fr->data, 0xb0ee);
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
55 aimbs_put16(&fr->data, 0x0631);
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
56
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
57 aim_tx_enqueue(sess, fr);
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
58
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
59 return 0;
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
60 }
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
3725
40fe9bcc8c9e [gaim-migrate @ 3861]
Duffman
parents: 3694
diff changeset
63 /**
3694
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
64 * Subtype 0x0007 - Receive information about your email account
4804
e6e0e6d50d39 [gaim-migrate @ 5124]
Mark Doliner <markdoliner@pidgin.im>
parents: 3952
diff changeset
65 *
3725
40fe9bcc8c9e [gaim-migrate @ 3861]
Duffman
parents: 3694
diff changeset
66 * 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
67 * but this is coded so it will handle that, and handle it well.
3725
40fe9bcc8c9e [gaim-migrate @ 3861]
Duffman
parents: 3694
diff changeset
68 * This tells you if you have unread mail or not, the URL you
40fe9bcc8c9e [gaim-migrate @ 3861]
Duffman
parents: 3694
diff changeset
69 * should use to access that mail, and the domain name for the
40fe9bcc8c9e [gaim-migrate @ 3861]
Duffman
parents: 3694
diff changeset
70 * email account (screenname@domainname.com). If this is the
40fe9bcc8c9e [gaim-migrate @ 3861]
Duffman
parents: 3694
diff changeset
71 * first 0x0007 SNAC you've received since you signed on, or if
40fe9bcc8c9e [gaim-migrate @ 3861]
Duffman
parents: 3694
diff changeset
72 * this is just a periodic status update, this will also contain
40fe9bcc8c9e [gaim-migrate @ 3861]
Duffman
parents: 3694
diff changeset
73 * the number of unread emails that you have.
3694
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
74 */
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
75 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
76 {
4871
962860053dcd [gaim-migrate @ 5201]
Mark Doliner <markdoliner@pidgin.im>
parents: 4804
diff changeset
77 int ret = 0;
3694
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
78 aim_rxcallback_t userfunc;
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
79 struct aim_emailinfo *new;
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
80 aim_tlvlist_t *tlvlist;
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
81 fu8_t *cookie8, *cookie16;
3725
40fe9bcc8c9e [gaim-migrate @ 3861]
Duffman
parents: 3694
diff changeset
82 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
83
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
84 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
85 cookie16 = aimbs_getraw(bs, 16); /* Mail cookie sent above */
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
86
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
87 /* See if we already have some info associated with this cookie */
7045
458b55091f8b [gaim-migrate @ 7608]
Mark Doliner <markdoliner@pidgin.im>
parents: 7011
diff changeset
88 for (new=sess->emailinfo; (new && strncmp(cookie16, new->cookie16, 16)); new=new->next);
3694
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
89 if (new) {
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
90 /* Free some of the old info, if existant */
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3725
diff changeset
91 free(new->cookie8);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3725
diff changeset
92 free(new->cookie16);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3725
diff changeset
93 free(new->url);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3725
diff changeset
94 free(new->domain);
3694
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
95 } else {
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
96 /* 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
97 if (!(new = malloc(sizeof(struct aim_emailinfo))))
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
98 return -ENOMEM;
3725
40fe9bcc8c9e [gaim-migrate @ 3861]
Duffman
parents: 3694
diff changeset
99 memset(new, 0, sizeof(struct aim_emailinfo));
7045
458b55091f8b [gaim-migrate @ 7608]
Mark Doliner <markdoliner@pidgin.im>
parents: 7011
diff changeset
100 new->next = sess->emailinfo;
458b55091f8b [gaim-migrate @ 7608]
Mark Doliner <markdoliner@pidgin.im>
parents: 7011
diff changeset
101 sess->emailinfo = new;
3694
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
102 }
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
103
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
104 new->cookie8 = cookie8;
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
105 new->cookie16 = cookie16;
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
106
7167
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 7045
diff changeset
107 tlvlist = aim_tlvlist_readnum(bs, aimbs_get16(bs));
3694
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
108
7167
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 7045
diff changeset
109 tmp = aim_tlv_get16(tlvlist, 0x0080, 1);
3725
40fe9bcc8c9e [gaim-migrate @ 3861]
Duffman
parents: 3694
diff changeset
110 if (tmp) {
40fe9bcc8c9e [gaim-migrate @ 3861]
Duffman
parents: 3694
diff changeset
111 if (new->nummsgs < tmp)
40fe9bcc8c9e [gaim-migrate @ 3861]
Duffman
parents: 3694
diff changeset
112 havenewmail = 1;
40fe9bcc8c9e [gaim-migrate @ 3861]
Duffman
parents: 3694
diff changeset
113 new->nummsgs = tmp;
40fe9bcc8c9e [gaim-migrate @ 3861]
Duffman
parents: 3694
diff changeset
114 } else {
40fe9bcc8c9e [gaim-migrate @ 3861]
Duffman
parents: 3694
diff changeset
115 /* If they don't send a 0x0080 TLV, it means we definately have new mail */
40fe9bcc8c9e [gaim-migrate @ 3861]
Duffman
parents: 3694
diff changeset
116 /* (ie. this is not just another status update) */
40fe9bcc8c9e [gaim-migrate @ 3861]
Duffman
parents: 3694
diff changeset
117 havenewmail = 1;
40fe9bcc8c9e [gaim-migrate @ 3861]
Duffman
parents: 3694
diff changeset
118 new->nummsgs++; /* We know we have at least 1 new email */
40fe9bcc8c9e [gaim-migrate @ 3861]
Duffman
parents: 3694
diff changeset
119 }
7167
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 7045
diff changeset
120 new->url = aim_tlv_getstr(tlvlist, 0x0007, 1);
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 7045
diff changeset
121 if (!(new->unread = aim_tlv_get8(tlvlist, 0x0081, 1))) {
3725
40fe9bcc8c9e [gaim-migrate @ 3861]
Duffman
parents: 3694
diff changeset
122 havenewmail = 0;
40fe9bcc8c9e [gaim-migrate @ 3861]
Duffman
parents: 3694
diff changeset
123 new->nummsgs = 0;
40fe9bcc8c9e [gaim-migrate @ 3861]
Duffman
parents: 3694
diff changeset
124 }
7167
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 7045
diff changeset
125 new->domain = aim_tlv_getstr(tlvlist, 0x0082, 1);
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 7045
diff changeset
126 new->flag = aim_tlv_get16(tlvlist, 0x0084, 1);
3694
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
127
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
128 if ((userfunc = aim_callhandler(sess, rx->conn, snac->family, snac->subtype)))
4871
962860053dcd [gaim-migrate @ 5201]
Mark Doliner <markdoliner@pidgin.im>
parents: 4804
diff changeset
129 ret = userfunc(sess, rx, new, havenewmail);
3694
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
130
7167
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 7045
diff changeset
131 aim_tlvlist_free(&tlvlist);
4875
3aefead7212b [gaim-migrate @ 5205]
Mark Doliner <markdoliner@pidgin.im>
parents: 4871
diff changeset
132
4871
962860053dcd [gaim-migrate @ 5201]
Mark Doliner <markdoliner@pidgin.im>
parents: 4804
diff changeset
133 return ret;
3694
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
134 }
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
135
3725
40fe9bcc8c9e [gaim-migrate @ 3861]
Duffman
parents: 3694
diff changeset
136 /**
3694
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
137 * Subtype 0x0016 - Send something or other
3725
40fe9bcc8c9e [gaim-migrate @ 3861]
Duffman
parents: 3694
diff changeset
138 *
40fe9bcc8c9e [gaim-migrate @ 3861]
Duffman
parents: 3694
diff changeset
139 * @param sess The oscar session.
40fe9bcc8c9e [gaim-migrate @ 3861]
Duffman
parents: 3694
diff changeset
140 * @param conn The email connection for this session.
40fe9bcc8c9e [gaim-migrate @ 3861]
Duffman
parents: 3694
diff changeset
141 * @return Return 0 if no errors, otherwise return the error number.
3694
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
142 */
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
143 faim_export int aim_email_activate(aim_session_t *sess, aim_conn_t *conn)
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
144 {
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
145 aim_frame_t *fr;
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
146 aim_snacid_t snacid;
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
147
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
148 if (!sess || !conn)
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
149 return -EINVAL;
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
150
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
151 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
152 return -ENOMEM;
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
153 snacid = aim_cachesnac(sess, 0x0018, 0x0016, 0x0000, NULL, 0);
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
154 aim_putsnac(&fr->data, 0x0018, 0x0016, 0x0000, snacid);
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
155
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
156 /* 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
157 /* ...but I really have no idea */
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
158 aimbs_put8(&fr->data, 0x02);
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
159 aimbs_put32(&fr->data, 0x04000000);
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
160 aimbs_put32(&fr->data, 0x04000000);
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
161 aimbs_put32(&fr->data, 0x04000000);
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
162 aimbs_put32(&fr->data, 0x00000000);
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
163
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
164 aim_tx_enqueue(sess, fr);
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 return 0;
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
167 }
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
168
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
169 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
170 {
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
171
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
172 if (snac->subtype == 0x0007)
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
173 return parseinfo(sess, mod, rx, snac, bs);
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
174
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
175 return 0;
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
176 }
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 static void email_shutdown(aim_session_t *sess, aim_module_t *mod)
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
179 {
7045
458b55091f8b [gaim-migrate @ 7608]
Mark Doliner <markdoliner@pidgin.im>
parents: 7011
diff changeset
180 while (sess->emailinfo) {
458b55091f8b [gaim-migrate @ 7608]
Mark Doliner <markdoliner@pidgin.im>
parents: 7011
diff changeset
181 struct aim_emailinfo *tmp = sess->emailinfo;
458b55091f8b [gaim-migrate @ 7608]
Mark Doliner <markdoliner@pidgin.im>
parents: 7011
diff changeset
182 sess->emailinfo = sess->emailinfo->next;
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3725
diff changeset
183 free(tmp->cookie16);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3725
diff changeset
184 free(tmp->cookie8);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3725
diff changeset
185 free(tmp->url);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3725
diff changeset
186 free(tmp->domain);
3694
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
187 free(tmp);
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
188 }
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
189
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
190 return;
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
191 }
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
192
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
193 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
194 {
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
195
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
196 mod->family = 0x0018;
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
197 mod->version = 0x0001;
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
198 mod->toolid = 0x0010;
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
199 mod->toolversion = 0x0629;
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
200 mod->flags = 0;
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
201 strncpy(mod->name, "email", sizeof(mod->name));
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
202 mod->snachandler = snachandler;
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
203 mod->shutdown = email_shutdown;
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 return 0;
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
206 }

mercurial