Mercurial > pidgin
annotate src/protocols/oscar/admin.c @ 3912:e73c48cf1645
[gaim-migrate @ 4071]
Little touchups in the "admin" family. Not much has changed, but I
moved some functions around because I'm weird. (This is the stuff in
"protocol actions" for oscar accounts.)
Some of the dialogs should look a little more, I dunno, uniform or
something.
Change password, format screenname, and change current registered screen
name should give you some slightly userfriendly error messages now.
Also "confirm account" will pop up that little message that says you
should be expecting an email... I think that was one of those brain
mistakes, where something was backwards, or something.
Uh, so let me know if you see any problems with any of that.
Why did I work on this instead of ssi? I don't know. This is funner, I
guess. I'll get to ssi eventually...
Meow.
committer: Tailor Script <tailor@pidgin.im>
author | Mark Doliner <mark@kingant.net> |
---|---|
date | Thu, 07 Nov 2002 02:25:12 +0000 |
parents | 8e924e4aa256 |
children | 07283934dedd |
rev | line source |
---|---|
3912 | 1 /* |
2 * Family 0x0007 - Account Administration. | |
3 * | |
4 * Used for stuff like changing the formating of your screen name, changing your | |
5 * email address, requesting an account confirmation email, getting account info, | |
6 * | |
7 */ | |
2086 | 8 |
9 #define FAIM_INTERNAL | |
10 #include <aim.h> | |
11 | |
3912 | 12 /* |
13 * Subtype 0x0002 - Request a bit of account info. | |
14 * | |
15 * Info should be one of the following: | |
16 * 0x0001 - Screen name formatting | |
17 * 0x0011 - Email address | |
18 * 0x0013 - Unknown | |
19 * | |
20 */ | |
21 faim_export int aim_admin_getinfo(aim_session_t *sess, aim_conn_t *conn, fu16_t info) | |
22 { | |
23 aim_frame_t *tx; | |
24 aim_snacid_t snacid; | |
25 | |
26 if (!(tx = aim_tx_new(sess, conn, AIM_FRAMETYPE_FLAP, 0x02, 14))) | |
27 return -ENOMEM; | |
28 | |
29 snacid = aim_cachesnac(sess, 0x0007, 0x0002, 0x0000, NULL, 0); | |
30 aim_putsnac(&tx->data, 0x0007, 0x0002, 0x0000, snacid); | |
31 | |
32 aimbs_put16(&tx->data, info); | |
33 aimbs_put16(&tx->data, 0x0000); | |
34 | |
35 aim_tx_enqueue(sess, tx); | |
36 | |
37 return 0; | |
38 } | |
39 | |
40 /* | |
41 * Subtypes 0x0003 and 0x0005 - Parse account info. | |
42 * | |
43 * Called in reply to both an information request (subtype 0x0002) and | |
44 * an information change (subtype 0x0004). | |
45 * | |
46 */ | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
47 static int infochange(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, aim_bstream_t *bs) |
2086 | 48 { |
3912 | 49 aim_rxcallback_t userfunc; |
50 char *url=NULL, *sn=NULL, *email=NULL; | |
51 fu16_t perms, tlvcount, err=0; | |
2086 | 52 |
3912 | 53 perms = aimbs_get16(bs); |
54 tlvcount = aimbs_get16(bs); | |
55 | |
56 while (tlvcount && aim_bstream_empty(bs)) { | |
57 fu16_t type, length; | |
58 | |
59 type = aimbs_get16(bs); | |
60 length = aimbs_get16(bs); | |
2086 | 61 |
3912 | 62 switch (type) { |
63 case 0x0001: { | |
64 sn = aimbs_getstr(bs, length); | |
65 } break; | |
2086 | 66 |
3912 | 67 case 0x0004: { |
68 url = aimbs_getstr(bs, length); | |
69 } break; | |
2086 | 70 |
3912 | 71 case 0x0008: { |
72 err = aimbs_get16(bs); | |
73 } break; | |
2086 | 74 |
3912 | 75 case 0x0011: { |
76 if (length == 0) { | |
77 email = (char*)malloc(13*sizeof(char)); | |
78 strcpy(email, "*suppressed*"); | |
79 } else | |
80 email = aimbs_getstr(bs, length); | |
81 } break; | |
82 } | |
2086 | 83 |
3912 | 84 tlvcount--; |
85 } | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
86 |
3912 | 87 if ((userfunc = aim_callhandler(sess, rx->conn, snac->family, snac->subtype))) |
88 userfunc(sess, rx, (snac->subtype == 0x0005) ? 1 : 0, perms, err, url, sn, email); | |
2086 | 89 |
3912 | 90 if (sn) free(sn); |
91 if (url) free(url); | |
92 if (email) free(email); | |
2086 | 93 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
94 return 1; |
2086 | 95 } |
96 | |
3912 | 97 /* |
98 * Subtype 0x0004 - Set screenname formatting. | |
99 * | |
100 */ | |
101 faim_export int aim_admin_setnick(aim_session_t *sess, aim_conn_t *conn, const char *newnick) | |
102 { | |
103 aim_frame_t *tx; | |
104 aim_snacid_t snacid; | |
105 aim_tlvlist_t *tl = NULL; | |
106 | |
107 if (!(tx = aim_tx_new(sess, conn, AIM_FRAMETYPE_FLAP, 0x02, 10+2+2+strlen(newnick)))) | |
108 return -ENOMEM; | |
109 | |
110 snacid = aim_cachesnac(sess, 0x0007, 0x0004, 0x0000, NULL, 0); | |
111 aim_putsnac(&tx->data, 0x0007, 0x0004, 0x0000, snacid); | |
112 | |
113 aim_addtlvtochain_raw(&tl, 0x0001, strlen(newnick), newnick); | |
114 | |
115 aim_writetlvchain(&tx->data, &tl); | |
116 aim_freetlvchain(&tl); | |
117 | |
118 aim_tx_enqueue(sess, tx); | |
119 | |
120 | |
121 return 0; | |
122 } | |
123 | |
124 /* | |
125 * Subtype 0x0004 - Change password. | |
126 * | |
127 */ | |
128 faim_export int aim_admin_changepasswd(aim_session_t *sess, aim_conn_t *conn, const char *newpw, const char *curpw) | |
129 { | |
130 aim_frame_t *tx; | |
131 aim_tlvlist_t *tl = NULL; | |
132 aim_snacid_t snacid; | |
133 | |
134 if (!(tx = aim_tx_new(sess, conn, AIM_FRAMETYPE_FLAP, 0x02, 10+4+strlen(curpw)+4+strlen(newpw)))) | |
135 return -ENOMEM; | |
136 | |
137 snacid = aim_cachesnac(sess, 0x0007, 0x0004, 0x0000, NULL, 0); | |
138 aim_putsnac(&tx->data, 0x0007, 0x0004, 0x0000, snacid); | |
139 | |
140 /* new password TLV t(0002) */ | |
141 aim_addtlvtochain_raw(&tl, 0x0002, strlen(newpw), newpw); | |
142 | |
143 /* current password TLV t(0012) */ | |
144 aim_addtlvtochain_raw(&tl, 0x0012, strlen(curpw), curpw); | |
145 | |
146 aim_writetlvchain(&tx->data, &tl); | |
147 aim_freetlvchain(&tl); | |
148 | |
149 aim_tx_enqueue(sess, tx); | |
150 | |
151 return 0; | |
152 } | |
153 | |
154 /* | |
155 * Subtype 0x0004 - Change email address. | |
156 * | |
157 */ | |
158 faim_export int aim_admin_setemail(aim_session_t *sess, aim_conn_t *conn, const char *newemail) | |
159 { | |
160 aim_frame_t *tx; | |
161 aim_snacid_t snacid; | |
162 aim_tlvlist_t *tl = NULL; | |
163 | |
164 if (!(tx = aim_tx_new(sess, conn, AIM_FRAMETYPE_FLAP, 0x02, 10+2+2+strlen(newemail)))) | |
165 return -ENOMEM; | |
166 | |
167 snacid = aim_cachesnac(sess, 0x0007, 0x0004, 0x0000, NULL, 0); | |
168 aim_putsnac(&tx->data, 0x0007, 0x0004, 0x0000, snacid); | |
169 | |
170 aim_addtlvtochain_raw(&tl, 0x0011, strlen(newemail), newemail); | |
171 | |
172 aim_writetlvchain(&tx->data, &tl); | |
173 aim_freetlvchain(&tl); | |
174 | |
175 aim_tx_enqueue(sess, tx); | |
176 | |
177 return 0; | |
178 } | |
179 | |
180 /* | |
181 * Subtype 0x0006 - Request account confirmation. | |
182 * | |
183 * This will cause an email to be sent to the address associated with | |
184 * the account. By following the instructions in the mail, you can | |
185 * get the TRIAL flag removed from your account. | |
186 * | |
187 */ | |
188 faim_export int aim_admin_reqconfirm(aim_session_t *sess, aim_conn_t *conn) | |
189 { | |
190 return aim_genericreq_n(sess, conn, 0x0007, 0x0006); | |
191 } | |
192 | |
193 /* | |
194 * Subtype 0x0007 - Account confirmation request acknowledgement. | |
195 * | |
196 */ | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
197 static int accountconfirm(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, aim_bstream_t *bs) |
2086 | 198 { |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
199 aim_rxcallback_t userfunc; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
200 fu16_t status; |
3912 | 201 aim_tlvlist_t *tl; |
2086 | 202 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
203 status = aimbs_get16(bs); |
3912 | 204 /* This is 0x0013 if unable to confirm at this time */ |
205 | |
206 tl = aim_readtlvchain(bs); | |
2086 | 207 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
208 if ((userfunc = aim_callhandler(sess, rx->conn, snac->family, snac->subtype))) |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
209 return userfunc(sess, rx, status); |
2086 | 210 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
211 return 0; |
2086 | 212 } |
213 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
214 static int snachandler(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, aim_bstream_t *bs) |
2086 | 215 { |
216 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
217 if ((snac->subtype == 0x0003) || (snac->subtype == 0x0005)) |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
218 return infochange(sess, mod, rx, snac, bs); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
219 else if (snac->subtype == 0x0007) |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
220 return accountconfirm(sess, mod, rx, snac, bs); |
2086 | 221 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
222 return 0; |
2086 | 223 } |
224 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
225 faim_internal int admin_modfirst(aim_session_t *sess, aim_module_t *mod) |
2086 | 226 { |
227 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
228 mod->family = 0x0007; |
2672 | 229 mod->version = 0x0001; |
230 mod->toolid = AIM_TOOL_NEWWIN; | |
231 mod->toolversion = 0x0361; /* XXX this and above aren't right */ | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
232 mod->flags = 0; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
233 strncpy(mod->name, "admin", sizeof(mod->name)); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
234 mod->snachandler = snachandler; |
2086 | 235 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
236 return 0; |
2086 | 237 } |