annotate src/protocols/oscar/email.c @ 4151:1a5dcfa1823e

[gaim-migrate @ 4377] Why do I make these things so long? I'm defective, that's why. Mr. Walp pointed out a problem with "allow only peeps in my buddy list" for ICQ, so I fixed that. One important problem: If you set your permdeny to "allow only peeps in my buddy list," and then add or remove someone from your buddy list, it will not update the allow/deny list on the server. And that's a bad thing. I changed an error message string or 4 in oscar.c for various reasons. 1) I feel that "he/she" is much better than "it." If you disagree, please let me know, because I'm not sure of the correct phrasing. 2) There is only 1 unknown reason, it just applies to multiple messages. I shuffled some of the clientauto functions around in oscar.c to make it more uniform. I intend to look into why status messages aren't working well soon. I added some semblance of more advanced ICQ info support to libfaim. There's also a bit of support in oscar.c for it, but making it display itself nicely will take a little work, so I'll do it later. A patch from the good Mr. Blanton taking out a non-ascii character from oscar.c (my bad). A patch from the good Mr. Blanton adding support for i18n to away messages and aim profile info. Questions for the good Mr. Blanton: 1) Line 59 of info.c, in the first half of that if statement, should profile_len also be &&'ed in with the other 2? 2) I changed a gaim_parse_user_info so that it works for non-unicode away messages and profiles. Or so I think. 3) I changed little bits of your patch to appease my annoyingness, so it might not cvs update cleanly for you. Sorry. I organized the ChangeLog entries for 0.60. I tried to put stuff that I thought was more important near the top of each category. Please change stuff around, because I'm pretty sure it could be better. Breathe in, breathe out, breathe in, breathe out... Tied to a wheel... committer: Tailor Script <tailor@pidgin.im>
author Mark Doliner <mark@kingant.net>
date Sun, 29 Dec 2002 17:12:05 +0000
parents 07283934dedd
children 9810ce8e7a96
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3694
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1 /*
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
2 * Family 0x0018 - Email notification
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
3 *
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
4 * Used for being alerted when the email address(es) associated with
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
5 * your screen name get new electronic-m. For normal AIM accounts, you
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
6 * get the email address screenname@netscape.net. AOL accounts have
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
7 * screenname@aol.com, and can also activate a netscape.net account.
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
8 *
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
9 */
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
10
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
11 #define FAIM_INTERNAL
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
12 #include <aim.h>
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
13
3725
dd48b1ac5bd8 [gaim-migrate @ 3861]
Mark Doliner <mark@kingant.net>
parents: 3694
diff changeset
14 /**
3694
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
15 * Subtype 0x0006 - Request information about your email account
3725
dd48b1ac5bd8 [gaim-migrate @ 3861]
Mark Doliner <mark@kingant.net>
parents: 3694
diff changeset
16 *
dd48b1ac5bd8 [gaim-migrate @ 3861]
Mark Doliner <mark@kingant.net>
parents: 3694
diff changeset
17 * @param sess The oscar session.
dd48b1ac5bd8 [gaim-migrate @ 3861]
Mark Doliner <mark@kingant.net>
parents: 3694
diff changeset
18 * @param conn The email connection for this session.
dd48b1ac5bd8 [gaim-migrate @ 3861]
Mark Doliner <mark@kingant.net>
parents: 3694
diff changeset
19 * @return Return 0 if no errors, otherwise return the error number.
3694
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
20 */
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
21 faim_export int aim_email_sendcookies(aim_session_t *sess, aim_conn_t *conn)
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
22 {
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
23 aim_frame_t *fr;
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
24 aim_snacid_t snacid;
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
25
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
26 if (!sess || !conn)
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
27 return -EINVAL;
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
28
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
29 if (!(fr = aim_tx_new(sess, conn, AIM_FRAMETYPE_FLAP, 0x02, 10+2+16+16)))
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
30 return -ENOMEM;
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
31 snacid = aim_cachesnac(sess, 0x0018, 0x0006, 0x0000, NULL, 0);
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
32 aim_putsnac(&fr->data, 0x0018, 0x0006, 0x0000, snacid);
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
33
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
34 /* Number of cookies to follow */
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
35 aimbs_put16(&fr->data, 0x0002);
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
36
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
37 /* Cookie */
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
38 aimbs_put16(&fr->data, 0x5d5e);
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
39 aimbs_put16(&fr->data, 0x1708);
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
40 aimbs_put16(&fr->data, 0x55aa);
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
41 aimbs_put16(&fr->data, 0x11d3);
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
42 aimbs_put16(&fr->data, 0xb143);
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
43 aimbs_put16(&fr->data, 0x0060);
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
44 aimbs_put16(&fr->data, 0xb0fb);
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
45 aimbs_put16(&fr->data, 0x1ecb);
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
46
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
47 /* Cookie */
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
48 aimbs_put16(&fr->data, 0xb380);
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
49 aimbs_put16(&fr->data, 0x9ad8);
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
50 aimbs_put16(&fr->data, 0x0dba);
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
51 aimbs_put16(&fr->data, 0x11d5);
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
52 aimbs_put16(&fr->data, 0x9f8a);
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
53 aimbs_put16(&fr->data, 0x0060);
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
54 aimbs_put16(&fr->data, 0xb0ee);
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
55 aimbs_put16(&fr->data, 0x0631);
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
56
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
57 aim_tx_enqueue(sess, fr);
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
58
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
59 return 0;
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
60 }
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
61
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
62
3725
dd48b1ac5bd8 [gaim-migrate @ 3861]
Mark Doliner <mark@kingant.net>
parents: 3694
diff changeset
63 /**
3694
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
64 * Subtype 0x0007 - Receive information about your email account
3725
dd48b1ac5bd8 [gaim-migrate @ 3861]
Mark Doliner <mark@kingant.net>
parents: 3694
diff changeset
65 * So I don't even know if you can have multiple 16 byte keys,
3694
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
66 * but this is coded so it will handle that, and handle it well.
3725
dd48b1ac5bd8 [gaim-migrate @ 3861]
Mark Doliner <mark@kingant.net>
parents: 3694
diff changeset
67 * This tells you if you have unread mail or not, the URL you
dd48b1ac5bd8 [gaim-migrate @ 3861]
Mark Doliner <mark@kingant.net>
parents: 3694
diff changeset
68 * should use to access that mail, and the domain name for the
dd48b1ac5bd8 [gaim-migrate @ 3861]
Mark Doliner <mark@kingant.net>
parents: 3694
diff changeset
69 * email account (screenname@domainname.com). If this is the
dd48b1ac5bd8 [gaim-migrate @ 3861]
Mark Doliner <mark@kingant.net>
parents: 3694
diff changeset
70 * first 0x0007 SNAC you've received since you signed on, or if
dd48b1ac5bd8 [gaim-migrate @ 3861]
Mark Doliner <mark@kingant.net>
parents: 3694
diff changeset
71 * this is just a periodic status update, this will also contain
dd48b1ac5bd8 [gaim-migrate @ 3861]
Mark Doliner <mark@kingant.net>
parents: 3694
diff changeset
72 * the number of unread emails that you have.
3694
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
73 */
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
74 static int parseinfo(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, aim_bstream_t *bs)
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
75 {
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
76 aim_rxcallback_t userfunc;
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
77 struct aim_emailinfo *new;
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
78 aim_tlvlist_t *tlvlist;
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
79 fu8_t *cookie8, *cookie16;
3725
dd48b1ac5bd8 [gaim-migrate @ 3861]
Mark Doliner <mark@kingant.net>
parents: 3694
diff changeset
80 int tmp, havenewmail = 0; /* Used to tell the client we have _new_ mail */
3694
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
81
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
82 cookie8 = aimbs_getraw(bs, 8); /* Possibly the code used to log you in to mail? */
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
83 cookie16 = aimbs_getraw(bs, 16); /* Mail cookie sent above */
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
84
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
85 /* See if we already have some info associated with this cookie */
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
86 for (new=sess->emailinfo; (new && strncmp(cookie16, new->cookie16, 16)); new=new->next);
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
87 if (new) {
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
88 /* Free some of the old info, if existant */
3952
07283934dedd [gaim-migrate @ 4133]
Mark Doliner <mark@kingant.net>
parents: 3725
diff changeset
89 free(new->cookie8);
07283934dedd [gaim-migrate @ 4133]
Mark Doliner <mark@kingant.net>
parents: 3725
diff changeset
90 free(new->cookie16);
07283934dedd [gaim-migrate @ 4133]
Mark Doliner <mark@kingant.net>
parents: 3725
diff changeset
91 free(new->url);
07283934dedd [gaim-migrate @ 4133]
Mark Doliner <mark@kingant.net>
parents: 3725
diff changeset
92 free(new->domain);
3694
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
93 } else {
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
94 /* We don't already have info, so create a new struct for it */
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
95 if (!(new = malloc(sizeof(struct aim_emailinfo))))
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
96 return -ENOMEM;
3725
dd48b1ac5bd8 [gaim-migrate @ 3861]
Mark Doliner <mark@kingant.net>
parents: 3694
diff changeset
97 memset(new, 0, sizeof(struct aim_emailinfo));
3694
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
98 new->next = sess->emailinfo;
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
99 sess->emailinfo = new;
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
100 }
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
101
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
102 new->cookie8 = cookie8;
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
103 new->cookie16 = cookie16;
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
104
3952
07283934dedd [gaim-migrate @ 4133]
Mark Doliner <mark@kingant.net>
parents: 3725
diff changeset
105 tlvlist = aim_readtlvchain_num(bs, aimbs_get16(bs));
3694
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
106
3725
dd48b1ac5bd8 [gaim-migrate @ 3861]
Mark Doliner <mark@kingant.net>
parents: 3694
diff changeset
107 tmp = aim_gettlv16(tlvlist, 0x0080, 1);
dd48b1ac5bd8 [gaim-migrate @ 3861]
Mark Doliner <mark@kingant.net>
parents: 3694
diff changeset
108 if (tmp) {
dd48b1ac5bd8 [gaim-migrate @ 3861]
Mark Doliner <mark@kingant.net>
parents: 3694
diff changeset
109 if (new->nummsgs < tmp)
dd48b1ac5bd8 [gaim-migrate @ 3861]
Mark Doliner <mark@kingant.net>
parents: 3694
diff changeset
110 havenewmail = 1;
dd48b1ac5bd8 [gaim-migrate @ 3861]
Mark Doliner <mark@kingant.net>
parents: 3694
diff changeset
111 new->nummsgs = tmp;
dd48b1ac5bd8 [gaim-migrate @ 3861]
Mark Doliner <mark@kingant.net>
parents: 3694
diff changeset
112 } else {
dd48b1ac5bd8 [gaim-migrate @ 3861]
Mark Doliner <mark@kingant.net>
parents: 3694
diff changeset
113 /* If they don't send a 0x0080 TLV, it means we definately have new mail */
dd48b1ac5bd8 [gaim-migrate @ 3861]
Mark Doliner <mark@kingant.net>
parents: 3694
diff changeset
114 /* (ie. this is not just another status update) */
dd48b1ac5bd8 [gaim-migrate @ 3861]
Mark Doliner <mark@kingant.net>
parents: 3694
diff changeset
115 havenewmail = 1;
dd48b1ac5bd8 [gaim-migrate @ 3861]
Mark Doliner <mark@kingant.net>
parents: 3694
diff changeset
116 new->nummsgs++; /* We know we have at least 1 new email */
dd48b1ac5bd8 [gaim-migrate @ 3861]
Mark Doliner <mark@kingant.net>
parents: 3694
diff changeset
117 }
3694
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
118 new->url = aim_gettlv_str(tlvlist, 0x0007, 1);
3725
dd48b1ac5bd8 [gaim-migrate @ 3861]
Mark Doliner <mark@kingant.net>
parents: 3694
diff changeset
119 if (!(new->unread = aim_gettlv8(tlvlist, 0x0081, 1))) {
dd48b1ac5bd8 [gaim-migrate @ 3861]
Mark Doliner <mark@kingant.net>
parents: 3694
diff changeset
120 havenewmail = 0;
dd48b1ac5bd8 [gaim-migrate @ 3861]
Mark Doliner <mark@kingant.net>
parents: 3694
diff changeset
121 new->nummsgs = 0;
dd48b1ac5bd8 [gaim-migrate @ 3861]
Mark Doliner <mark@kingant.net>
parents: 3694
diff changeset
122 }
3694
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
123 new->domain = aim_gettlv_str(tlvlist, 0x0082, 1);
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
124 new->flag = aim_gettlv16(tlvlist, 0x0084, 1);
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
125
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
126 if ((userfunc = aim_callhandler(sess, rx->conn, snac->family, snac->subtype)))
3725
dd48b1ac5bd8 [gaim-migrate @ 3861]
Mark Doliner <mark@kingant.net>
parents: 3694
diff changeset
127 return userfunc(sess, rx, new, havenewmail);
3694
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
128
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
129 return 0;
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
130 }
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
131
3725
dd48b1ac5bd8 [gaim-migrate @ 3861]
Mark Doliner <mark@kingant.net>
parents: 3694
diff changeset
132 /**
3694
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
133 * Subtype 0x0016 - Send something or other
3725
dd48b1ac5bd8 [gaim-migrate @ 3861]
Mark Doliner <mark@kingant.net>
parents: 3694
diff changeset
134 *
dd48b1ac5bd8 [gaim-migrate @ 3861]
Mark Doliner <mark@kingant.net>
parents: 3694
diff changeset
135 * @param sess The oscar session.
dd48b1ac5bd8 [gaim-migrate @ 3861]
Mark Doliner <mark@kingant.net>
parents: 3694
diff changeset
136 * @param conn The email connection for this session.
dd48b1ac5bd8 [gaim-migrate @ 3861]
Mark Doliner <mark@kingant.net>
parents: 3694
diff changeset
137 * @return Return 0 if no errors, otherwise return the error number.
3694
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
138 */
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
139 faim_export int aim_email_activate(aim_session_t *sess, aim_conn_t *conn)
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
140 {
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
141 aim_frame_t *fr;
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
142 aim_snacid_t snacid;
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
143
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
144 if (!sess || !conn)
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
145 return -EINVAL;
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
146
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
147 if (!(fr = aim_tx_new(sess, conn, AIM_FRAMETYPE_FLAP, 0x02, 10+1+16)))
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
148 return -ENOMEM;
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
149 snacid = aim_cachesnac(sess, 0x0018, 0x0016, 0x0000, NULL, 0);
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
150 aim_putsnac(&fr->data, 0x0018, 0x0016, 0x0000, snacid);
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
151
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
152 /* I would guess this tells AIM that you want updates for your mail accounts */
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
153 /* ...but I really have no idea */
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
154 aimbs_put8(&fr->data, 0x02);
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
155 aimbs_put32(&fr->data, 0x04000000);
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
156 aimbs_put32(&fr->data, 0x04000000);
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
157 aimbs_put32(&fr->data, 0x04000000);
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
158 aimbs_put32(&fr->data, 0x00000000);
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
159
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
160 aim_tx_enqueue(sess, fr);
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
161
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
162 return 0;
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
163 }
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
164
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
165 static int snachandler(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, aim_bstream_t *bs)
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
166 {
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
167
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
168 if (snac->subtype == 0x0007)
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
169 return parseinfo(sess, mod, rx, snac, bs);
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
170
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
171 return 0;
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
172 }
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
173
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
174 static void email_shutdown(aim_session_t *sess, aim_module_t *mod)
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
175 {
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
176 while (sess->emailinfo) {
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
177 struct aim_emailinfo *tmp = sess->emailinfo;
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
178 sess->emailinfo = sess->emailinfo->next;
3952
07283934dedd [gaim-migrate @ 4133]
Mark Doliner <mark@kingant.net>
parents: 3725
diff changeset
179 free(tmp->cookie16);
07283934dedd [gaim-migrate @ 4133]
Mark Doliner <mark@kingant.net>
parents: 3725
diff changeset
180 free(tmp->cookie8);
07283934dedd [gaim-migrate @ 4133]
Mark Doliner <mark@kingant.net>
parents: 3725
diff changeset
181 free(tmp->url);
07283934dedd [gaim-migrate @ 4133]
Mark Doliner <mark@kingant.net>
parents: 3725
diff changeset
182 free(tmp->domain);
3694
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
183 free(tmp);
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
184 }
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
185
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
186 return;
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
187 }
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
188
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
189 faim_internal int email_modfirst(aim_session_t *sess, aim_module_t *mod)
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
190 {
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
191
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
192 mod->family = 0x0018;
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
193 mod->version = 0x0001;
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
194 mod->toolid = 0x0010;
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
195 mod->toolversion = 0x0629;
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
196 mod->flags = 0;
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
197 strncpy(mod->name, "email", sizeof(mod->name));
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
198 mod->snachandler = snachandler;
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
199 mod->shutdown = email_shutdown;
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
200
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
201 return 0;
e941bfbacf7c [gaim-migrate @ 3824]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
202 }