annotate src/protocols/oscar/ssi.c @ 11005:bb7fd9359f9e

[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. committer: Tailor Script <tailor@pidgin.im>
author Mark Doliner <mark@kingant.net>
date Tue, 14 Jun 2005 00:24:27 +0000
parents b6ca6d3c5332
children fe1a1d73f42c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2672
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1 /*
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
2 * Family 0x0013 - Server-Side/Stored Information.
2672
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
3 *
6871
714fc8f45cf2 [gaim-migrate @ 7417]
Mark Doliner <mark@kingant.net>
parents: 6350
diff changeset
4 * Relatively new facility that allows certain types of information, such as
714fc8f45cf2 [gaim-migrate @ 7417]
Mark Doliner <mark@kingant.net>
parents: 6350
diff changeset
5 * a user's buddy list, permit/deny list, and permit/deny preferences, to be
714fc8f45cf2 [gaim-migrate @ 7417]
Mark Doliner <mark@kingant.net>
parents: 6350
diff changeset
6 * stored on the server, so that they can be accessed from any client.
2672
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
7 *
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
8 * We keep 2 copies of SSI data:
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
9 * 1) An exact copy of what is stored on the AIM servers.
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
10 * 2) A local copy that we make changes to, and then send diffs
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
11 * between this and the exact copy to keep them in sync.
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
12 *
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
13 * All the "aim_ssi_itemlist_bleh" functions near the top just modify the list
6871
714fc8f45cf2 [gaim-migrate @ 7417]
Mark Doliner <mark@kingant.net>
parents: 6350
diff changeset
14 * that is given to them (i.e. they don't send SNACs).
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
15 *
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
16 * The SNAC sending and receiving functions are lower down in the file, and
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
17 * they're simpler. They are in the order of the subtypes they deal with,
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
18 * starting with the request rights function (subtype 0x0002), then parse
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
19 * rights (subtype 0x0003), then--well, you get the idea.
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
20 *
2672
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
21 * This is entirely too complicated.
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
22 * You don't know the half of it.
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
23 *
2672
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
24 */
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
25
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
26 #define FAIM_INTERNAL
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
27 #include <aim.h>
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
28
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
29 /**
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
30 * Locally rebuild the 0x00c8 TLV in the additional data of the given group.
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
31 *
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
32 * @param list A pointer to a pointer to the current list of items.
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
33 * @param name A null terminated string containing the group name, or NULL
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
34 * if you want to modify the master group.
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
35 * @return Return a pointer to the modified item.
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
36 */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
37 static struct aim_ssi_item *aim_ssi_itemlist_rebuildgroup(struct aim_ssi_item *list, const char *name)
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
38 {
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
39 int newlen;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
40 struct aim_ssi_item *cur, *group;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
41
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
42 if (!list)
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
43 return NULL;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
44
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
45 /* Find the group */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
46 if (!(group = aim_ssi_itemlist_finditem(list, name, NULL, AIM_SSI_TYPE_GROUP)))
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
47 return NULL;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
48
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
49 /* Find the length for the new additional data */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
50 newlen = 0;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
51 if (group->gid == 0x0000) {
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
52 for (cur=list; cur; cur=cur->next)
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
53 if ((cur->type == AIM_SSI_TYPE_GROUP) && (cur->gid != 0x0000))
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
54 newlen += 2;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
55 } else {
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
56 for (cur=list; cur; cur=cur->next)
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
57 if ((cur->gid == group->gid) && (cur->type == AIM_SSI_TYPE_BUDDY))
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
58 newlen += 2;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
59 }
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
60
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
61 /* Build the new TLV list */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
62 if (newlen > 0) {
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
63 fu8_t *newdata;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
64
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
65 if (!(newdata = (fu8_t *)malloc((newlen)*sizeof(fu8_t))))
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
66 return NULL;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
67 newlen = 0;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
68 if (group->gid == 0x0000) {
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
69 for (cur=list; cur; cur=cur->next)
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
70 if ((cur->type == AIM_SSI_TYPE_GROUP) && (cur->gid != 0x0000))
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
71 newlen += aimutil_put16(newdata+newlen, cur->gid);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
72 } else {
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
73 for (cur=list; cur; cur=cur->next)
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
74 if ((cur->gid == group->gid) && (cur->type == AIM_SSI_TYPE_BUDDY))
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
75 newlen += aimutil_put16(newdata+newlen, cur->bid);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
76 }
7166
e6b01bd8d6cd [gaim-migrate @ 7733]
Mark Doliner <mark@kingant.net>
parents: 7158
diff changeset
77 aim_tlvlist_replace_raw(&group->data, 0x00c8, newlen, newdata);
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
78
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
79 free(newdata);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
80 }
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
81
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
82 return group;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
83 }
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
84
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
85 /**
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
86 * Locally add a new item to the given item list.
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
87 *
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
88 * @param list A pointer to a pointer to the current list of items.
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
89 * @param name A null terminated string of the name of the new item, or NULL if the
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
90 * item should have no name.
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
91 * @param gid The group ID# you want the new item to have, or 0xFFFF if we should pick something.
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
92 * @param bid The buddy ID# you want the new item to have, or 0xFFFF if we should pick something.
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
93 * @param type The type of the item, 0x0000 for a contact, 0x0001 for a group, etc.
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
94 * @param data The additional data for the new item.
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
95 * @return A pointer to the newly created item.
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
96 */
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
97 static struct aim_ssi_item *aim_ssi_itemlist_add(struct aim_ssi_item **list, const char *name, fu16_t gid, fu16_t bid, fu16_t type, aim_tlvlist_t *data)
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
98 {
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
99 int i;
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
100 struct aim_ssi_item *cur, *new;
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
101
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
102 if (!list)
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
103 return NULL;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
104
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
105 if (!(new = (struct aim_ssi_item *)malloc(sizeof(struct aim_ssi_item))))
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
106 return NULL;
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
107
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
108 /* Set the name */
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
109 if (name) {
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
110 new->name = (char *)malloc((strlen(name)+1)*sizeof(char));
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
111 strcpy(new->name, name);
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
112 } else
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
113 new->name = NULL;
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
114
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
115 /* Set the group ID# and buddy ID# */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
116 new->gid = gid;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
117 new->bid = bid;
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
118 if (type == AIM_SSI_TYPE_GROUP) {
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
119 if ((new->gid == 0xFFFF) && name) {
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
120 do {
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
121 new->gid += 0x0001;
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
122 for (cur=*list, i=0; ((cur) && (!i)); cur=cur->next)
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
123 if ((cur->type == AIM_SSI_TYPE_GROUP) && (cur->gid == new->gid))
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
124 i=1;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
125 } while (i);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
126 }
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
127 } else {
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
128 if (new->bid == 0xFFFF) {
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
129 do {
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
130 new->bid += 0x0001;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
131 for (cur=*list, i=0; ((cur) && (!i)); cur=cur->next)
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
132 if ((cur->bid == new->bid) && (cur->gid == new->gid))
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
133 i=1;
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
134 } while (i);
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
135 }
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
136 }
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
137
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
138 /* Set the type */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
139 new->type = type;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
140
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
141 /* Set the TLV list */
4236
9641bd9c79f5 [gaim-migrate @ 4482]
Mark Doliner <mark@kingant.net>
parents: 4235
diff changeset
142 new->data = aim_tlvlist_copy(data);
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
143
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
144 /* Add the item to the list in the correct numerical position. Fancy, eh? */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
145 if (*list) {
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
146 if ((new->gid < (*list)->gid) || ((new->gid == (*list)->gid) && (new->bid < (*list)->bid))) {
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
147 new->next = *list;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
148 *list = new;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
149 } else {
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
150 struct aim_ssi_item *prev;
4308
b3a14484fc2f [gaim-migrate @ 4562]
Mark Doliner <mark@kingant.net>
parents: 4303
diff changeset
151 for ((prev=*list, cur=(*list)->next); (cur && ((new->gid > cur->gid) || ((new->gid == cur->gid) && (new->bid > cur->bid)))); prev=cur, cur=cur->next);
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
152 new->next = prev->next;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
153 prev->next = new;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
154 }
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
155 } else {
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
156 new->next = *list;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
157 *list = new;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
158 }
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
159
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
160 return new;
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
161 }
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
162
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
163 /**
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
164 * Locally delete an item from the given item list.
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
165 *
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
166 * @param list A pointer to a pointer to the current list of items.
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
167 * @param del A pointer to the item you want to remove from the list.
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
168 * @return Return 0 if no errors, otherwise return the error number.
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
169 */
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
170 static int aim_ssi_itemlist_del(struct aim_ssi_item **list, struct aim_ssi_item *del)
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
171 {
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
172 if (!list || !(*list) || !del)
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
173 return -EINVAL;
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
174
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
175 /* Remove the item from the list */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
176 if (*list == del) {
4308
b3a14484fc2f [gaim-migrate @ 4562]
Mark Doliner <mark@kingant.net>
parents: 4303
diff changeset
177 *list = (*list)->next;
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
178 } else {
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
179 struct aim_ssi_item *cur;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
180 for (cur=*list; (cur->next && (cur->next!=del)); cur=cur->next);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
181 if (cur->next)
7166
e6b01bd8d6cd [gaim-migrate @ 7733]
Mark Doliner <mark@kingant.net>
parents: 7158
diff changeset
182 cur->next = del->next;
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
183 }
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
184
7166
e6b01bd8d6cd [gaim-migrate @ 7733]
Mark Doliner <mark@kingant.net>
parents: 7158
diff changeset
185 /* Free the removed item */
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
186 free(del->name);
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
187 aim_tlvlist_free(&del->data);
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
188 free(del);
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
189
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
190 return 0;
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
191 }
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
192
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
193 /**
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
194 * Compare two items to see if they have the same data.
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
195 *
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
196 * @param cur1 A pointer to a pointer to the first item.
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
197 * @param cur2 A pointer to a pointer to the second item.
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
198 * @return Return 0 if no differences, or a number if there are differences.
3017
f0e8770d786d [gaim-migrate @ 3030]
Rob Flynn <gaim@robflynn.com>
parents: 3000
diff changeset
199 */
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
200 static int aim_ssi_itemlist_cmp(struct aim_ssi_item *cur1, struct aim_ssi_item *cur2)
3017
f0e8770d786d [gaim-migrate @ 3030]
Rob Flynn <gaim@robflynn.com>
parents: 3000
diff changeset
201 {
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
202 if (!cur1 || !cur2)
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
203 return 1;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
204
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
205 if (cur1->data && !cur2->data)
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
206 return 2;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
207
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
208 if (!cur1->data && cur2->data)
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
209 return 3;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
210
6101
e4a5085fb870 [gaim-migrate @ 6560]
Mark Doliner <mark@kingant.net>
parents: 5892
diff changeset
211 if ((cur1->data && cur2->data) && (aim_tlvlist_cmp(cur1->data, cur2->data)))
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
212 return 4;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
213
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
214 if (cur1->name && !cur2->name)
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
215 return 5;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
216
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
217 if (!cur1->name && cur2->name)
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
218 return 6;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
219
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
220 if (cur1->name && cur2->name && aim_sncmp(cur1->name, cur2->name))
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
221 return 7;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
222
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
223 if (cur1->gid != cur2->gid)
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
224 return 8;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
225
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
226 if (cur1->bid != cur2->bid)
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
227 return 9;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
228
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
229 if (cur1->type != cur2->type)
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
230 return 10;
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
231
3017
f0e8770d786d [gaim-migrate @ 3030]
Rob Flynn <gaim@robflynn.com>
parents: 3000
diff changeset
232 return 0;
f0e8770d786d [gaim-migrate @ 3030]
Rob Flynn <gaim@robflynn.com>
parents: 3000
diff changeset
233 }
f0e8770d786d [gaim-migrate @ 3030]
Rob Flynn <gaim@robflynn.com>
parents: 3000
diff changeset
234
4789
f1fde07ed951 [gaim-migrate @ 5109]
Mark Doliner <mark@kingant.net>
parents: 4642
diff changeset
235 faim_export int aim_ssi_itemlist_valid(struct aim_ssi_item *list, struct aim_ssi_item *item)
f1fde07ed951 [gaim-migrate @ 5109]
Mark Doliner <mark@kingant.net>
parents: 4642
diff changeset
236 {
f1fde07ed951 [gaim-migrate @ 5109]
Mark Doliner <mark@kingant.net>
parents: 4642
diff changeset
237 struct aim_ssi_item *cur;
f1fde07ed951 [gaim-migrate @ 5109]
Mark Doliner <mark@kingant.net>
parents: 4642
diff changeset
238 for (cur=list; cur; cur=cur->next)
f1fde07ed951 [gaim-migrate @ 5109]
Mark Doliner <mark@kingant.net>
parents: 4642
diff changeset
239 if (cur == item)
f1fde07ed951 [gaim-migrate @ 5109]
Mark Doliner <mark@kingant.net>
parents: 4642
diff changeset
240 return 1;
f1fde07ed951 [gaim-migrate @ 5109]
Mark Doliner <mark@kingant.net>
parents: 4642
diff changeset
241 return 0;
f1fde07ed951 [gaim-migrate @ 5109]
Mark Doliner <mark@kingant.net>
parents: 4642
diff changeset
242 }
f1fde07ed951 [gaim-migrate @ 5109]
Mark Doliner <mark@kingant.net>
parents: 4642
diff changeset
243
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
244 /**
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
245 * Locally find an item given a group ID# and a buddy ID#.
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
246 *
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
247 * @param list A pointer to the current list of items.
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
248 * @param gid The group ID# of the desired item.
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
249 * @param bid The buddy ID# of the desired item.
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
250 * @return Return a pointer to the item if found, else return NULL;
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
251 */
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
252 faim_export struct aim_ssi_item *aim_ssi_itemlist_find(struct aim_ssi_item *list, fu16_t gid, fu16_t bid)
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
253 {
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
254 struct aim_ssi_item *cur;
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
255 for (cur=list; cur; cur=cur->next)
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
256 if ((cur->gid == gid) && (cur->bid == bid))
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
257 return cur;
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
258 return NULL;
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
259 }
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
260
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
261 /**
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
262 * Locally find an item given a group name, screen name, and type. If group name
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
263 * and screen name are null, then just return the first item of the given type.
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
264 *
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
265 * @param list A pointer to the current list of items.
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
266 * @param gn The group name of the desired item.
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
267 * @param bn The buddy name of the desired item.
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
268 * @param type The type of the desired item.
9285
7a8aa87164ae [gaim-migrate @ 10088]
Mark Doliner <mark@kingant.net>
parents: 8233
diff changeset
269 * @return Return a pointer to the item if found, else return NULL.
3109
51f49dcbd14b [gaim-migrate @ 3123]
Sean Egan <seanegan@gmail.com>
parents: 3090
diff changeset
270 */
3466
7a3f16a375a5 [gaim-migrate @ 3516]
Sean Egan <seanegan@gmail.com>
parents: 3348
diff changeset
271 faim_export struct aim_ssi_item *aim_ssi_itemlist_finditem(struct aim_ssi_item *list, const char *gn, const char *sn, fu16_t type)
3109
51f49dcbd14b [gaim-migrate @ 3123]
Sean Egan <seanegan@gmail.com>
parents: 3090
diff changeset
272 {
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
273 struct aim_ssi_item *cur;
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
274 if (!list)
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
275 return NULL;
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
276
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
277 if (gn && sn) { /* For finding buddies in groups */
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
278 for (cur=list; cur; cur=cur->next)
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
279 if ((cur->type == type) && (cur->name) && !(aim_sncmp(cur->name, sn))) {
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
280 struct aim_ssi_item *curg;
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
281 for (curg=list; curg; curg=curg->next)
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
282 if ((curg->type == AIM_SSI_TYPE_GROUP) && (curg->gid == cur->gid) && (curg->name) && !(aim_sncmp(curg->name, gn)))
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
283 return cur;
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
284 }
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
285
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
286 } else if (gn) { /* For finding groups */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
287 for (cur=list; cur; cur=cur->next) {
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
288 if ((cur->type == type) && (cur->bid == 0x0000) && (cur->name) && !(aim_sncmp(cur->name, gn))) {
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
289 return cur;
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
290 }
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
291 }
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
292
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
293 } else if (sn) { /* For finding permits, denies, and ignores */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
294 for (cur=list; cur; cur=cur->next) {
4347
9fcc9eb94cae [gaim-migrate @ 4612]
Mark Doliner <mark@kingant.net>
parents: 4346
diff changeset
295 if ((cur->type == type) && (cur->name) && !(aim_sncmp(cur->name, sn))) {
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
296 return cur;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
297 }
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
298 }
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
299
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
300 /* For stuff without names--permit deny setting, visibility mask, etc. */
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
301 } else for (cur=list; cur; cur=cur->next) {
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
302 if ((cur->type == type) && (!cur->name))
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
303 return cur;
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
304 }
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
305
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
306 return NULL;
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
307 }
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
308
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
309 /**
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
310 * Check if the given buddy exists in any group in the buddy list.
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
311 *
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
312 * @param list A pointer to the current list of items.
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
313 * @param sn The group name of the desired item.
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
314 * @return Return a pointer to the name of the item if found, else return NULL;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
315 */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
316 faim_export struct aim_ssi_item *aim_ssi_itemlist_exists(struct aim_ssi_item *list, const char *sn)
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
317 {
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
318 struct aim_ssi_item *cur;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
319 if (!list || !sn)
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
320 return NULL;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
321 for (cur=list; cur; cur=cur->next)
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
322 if ((cur->type == AIM_SSI_TYPE_BUDDY) && (cur->name) && (!aim_sncmp(cur->name, sn)))
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
323 return cur;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
324 return NULL;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
325 }
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
326
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
327 /**
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
328 * Locally find the parent item of the given buddy name.
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
329 *
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
330 * @param list A pointer to the current list of items.
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
331 * @param bn The buddy name of the desired item.
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
332 * @return Return a pointer to the name of the item if found, else return NULL;
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
333 */
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
334 faim_export char *aim_ssi_itemlist_findparentname(struct aim_ssi_item *list, const char *sn)
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
335 {
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
336 struct aim_ssi_item *cur, *curg;
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
337 if (!list || !sn)
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
338 return NULL;
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
339 if (!(cur = aim_ssi_itemlist_exists(list, sn)))
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
340 return NULL;
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
341 if (!(curg = aim_ssi_itemlist_find(list, cur->gid, 0x0000)))
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
342 return NULL;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
343 return curg->name;
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
344 }
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
345
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
346 /**
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
347 * Locally find the permit/deny setting item, and return the setting.
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
348 *
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
349 * @param list A pointer to the current list of items.
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
350 * @return Return the current SSI permit deny setting, or 0 if no setting was found.
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
351 */
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
352 faim_export int aim_ssi_getpermdeny(struct aim_ssi_item *list)
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
353 {
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
354 struct aim_ssi_item *cur = aim_ssi_itemlist_finditem(list, NULL, NULL, AIM_SSI_TYPE_PDINFO);
3109
51f49dcbd14b [gaim-migrate @ 3123]
Sean Egan <seanegan@gmail.com>
parents: 3090
diff changeset
355 if (cur) {
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
356 aim_tlv_t *tlv = aim_tlv_gettlv(cur->data, 0x00ca, 1);
7166
e6b01bd8d6cd [gaim-migrate @ 7733]
Mark Doliner <mark@kingant.net>
parents: 7158
diff changeset
357 if (tlv && tlv->value)
e6b01bd8d6cd [gaim-migrate @ 7733]
Mark Doliner <mark@kingant.net>
parents: 7158
diff changeset
358 return aimutil_get8(tlv->value);
3109
51f49dcbd14b [gaim-migrate @ 3123]
Sean Egan <seanegan@gmail.com>
parents: 3090
diff changeset
359 }
51f49dcbd14b [gaim-migrate @ 3123]
Sean Egan <seanegan@gmail.com>
parents: 3090
diff changeset
360 return 0;
51f49dcbd14b [gaim-migrate @ 3123]
Sean Egan <seanegan@gmail.com>
parents: 3090
diff changeset
361 }
51f49dcbd14b [gaim-migrate @ 3123]
Sean Egan <seanegan@gmail.com>
parents: 3090
diff changeset
362
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
363 /**
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
364 * Locally find the presence flag item, and return the setting. The returned setting is a
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
365 * bitmask of the user flags that you are visible to. See the AIM_FLAG_* #defines
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
366 * in aim.h
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
367 *
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
368 * @param list A pointer to the current list of items.
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
369 * @return Return the current visibility mask.
3109
51f49dcbd14b [gaim-migrate @ 3123]
Sean Egan <seanegan@gmail.com>
parents: 3090
diff changeset
370 */
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
371 faim_export fu32_t aim_ssi_getpresence(struct aim_ssi_item *list)
3109
51f49dcbd14b [gaim-migrate @ 3123]
Sean Egan <seanegan@gmail.com>
parents: 3090
diff changeset
372 {
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
373 struct aim_ssi_item *cur = aim_ssi_itemlist_finditem(list, NULL, NULL, AIM_SSI_TYPE_PRESENCEPREFS);
3109
51f49dcbd14b [gaim-migrate @ 3123]
Sean Egan <seanegan@gmail.com>
parents: 3090
diff changeset
374 if (cur) {
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
375 aim_tlv_t *tlv = aim_tlv_gettlv(cur->data, 0x00c9, 1);
7166
e6b01bd8d6cd [gaim-migrate @ 7733]
Mark Doliner <mark@kingant.net>
parents: 7158
diff changeset
376 if (tlv && tlv->length)
e6b01bd8d6cd [gaim-migrate @ 7733]
Mark Doliner <mark@kingant.net>
parents: 7158
diff changeset
377 return aimutil_get32(tlv->value);
3109
51f49dcbd14b [gaim-migrate @ 3123]
Sean Egan <seanegan@gmail.com>
parents: 3090
diff changeset
378 }
51f49dcbd14b [gaim-migrate @ 3123]
Sean Egan <seanegan@gmail.com>
parents: 3090
diff changeset
379 return 0xFFFFFFFF;
51f49dcbd14b [gaim-migrate @ 3123]
Sean Egan <seanegan@gmail.com>
parents: 3090
diff changeset
380 }
51f49dcbd14b [gaim-migrate @ 3123]
Sean Egan <seanegan@gmail.com>
parents: 3090
diff changeset
381
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
382 /**
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
383 * Locally find the alias of the given buddy.
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
384 *
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
385 * @param list A pointer to the current list of items.
4342
051265d35a36 [gaim-migrate @ 4607]
Mark Doliner <mark@kingant.net>
parents: 4333
diff changeset
386 * @param gn The group of the buddy.
051265d35a36 [gaim-migrate @ 4607]
Mark Doliner <mark@kingant.net>
parents: 4333
diff changeset
387 * @param sn The name of the buddy.
7172
895cd1d03efb [gaim-migrate @ 7740]
Mark Doliner <mark@kingant.net>
parents: 7167
diff changeset
388 * @return A pointer to a NULL terminated string that is the buddy's
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
389 * alias, or NULL if the buddy has no alias. You should free
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
390 * this returned value!
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
391 */
4238
0e4be672f516 [gaim-migrate @ 4484]
Mark Doliner <mark@kingant.net>
parents: 4236
diff changeset
392 faim_export char *aim_ssi_getalias(struct aim_ssi_item *list, const char *gn, const char *sn)
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
393 {
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
394 struct aim_ssi_item *cur = aim_ssi_itemlist_finditem(list, gn, sn, AIM_SSI_TYPE_BUDDY);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
395 if (cur) {
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
396 aim_tlv_t *tlv = aim_tlv_gettlv(cur->data, 0x0131, 1);
7166
e6b01bd8d6cd [gaim-migrate @ 7733]
Mark Doliner <mark@kingant.net>
parents: 7158
diff changeset
397 if (tlv && tlv->length) {
e6b01bd8d6cd [gaim-migrate @ 7733]
Mark Doliner <mark@kingant.net>
parents: 7158
diff changeset
398 char *alias = (char *)malloc((tlv->length+1)*sizeof(char));
10993
b6ca6d3c5332 [gaim-migrate @ 12831]
Mark Doliner <mark@kingant.net>
parents: 10991
diff changeset
399 strncpy(alias, (char *)tlv->value, tlv->length);
7166
e6b01bd8d6cd [gaim-migrate @ 7733]
Mark Doliner <mark@kingant.net>
parents: 7158
diff changeset
400 alias[tlv->length] = 0;
e6b01bd8d6cd [gaim-migrate @ 7733]
Mark Doliner <mark@kingant.net>
parents: 7158
diff changeset
401 return alias;
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
402 }
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
403 }
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
404 return NULL;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
405 }
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
406
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
407 /**
7172
895cd1d03efb [gaim-migrate @ 7740]
Mark Doliner <mark@kingant.net>
parents: 7167
diff changeset
408 * Locally find the comment of the given buddy.
895cd1d03efb [gaim-migrate @ 7740]
Mark Doliner <mark@kingant.net>
parents: 7167
diff changeset
409 *
895cd1d03efb [gaim-migrate @ 7740]
Mark Doliner <mark@kingant.net>
parents: 7167
diff changeset
410 * @param list A pointer to the current list of items.
895cd1d03efb [gaim-migrate @ 7740]
Mark Doliner <mark@kingant.net>
parents: 7167
diff changeset
411 * @param gn The group of the buddy.
895cd1d03efb [gaim-migrate @ 7740]
Mark Doliner <mark@kingant.net>
parents: 7167
diff changeset
412 * @param sn The name of the buddy.
895cd1d03efb [gaim-migrate @ 7740]
Mark Doliner <mark@kingant.net>
parents: 7167
diff changeset
413 * @return A pointer to a NULL terminated string that is the buddy's
895cd1d03efb [gaim-migrate @ 7740]
Mark Doliner <mark@kingant.net>
parents: 7167
diff changeset
414 * comment, or NULL if the buddy has no comment. You should free
895cd1d03efb [gaim-migrate @ 7740]
Mark Doliner <mark@kingant.net>
parents: 7167
diff changeset
415 * this returned value!
895cd1d03efb [gaim-migrate @ 7740]
Mark Doliner <mark@kingant.net>
parents: 7167
diff changeset
416 */
895cd1d03efb [gaim-migrate @ 7740]
Mark Doliner <mark@kingant.net>
parents: 7167
diff changeset
417 faim_export char *aim_ssi_getcomment(struct aim_ssi_item *list, const char *gn, const char *sn)
895cd1d03efb [gaim-migrate @ 7740]
Mark Doliner <mark@kingant.net>
parents: 7167
diff changeset
418 {
895cd1d03efb [gaim-migrate @ 7740]
Mark Doliner <mark@kingant.net>
parents: 7167
diff changeset
419 struct aim_ssi_item *cur = aim_ssi_itemlist_finditem(list, gn, sn, AIM_SSI_TYPE_BUDDY);
895cd1d03efb [gaim-migrate @ 7740]
Mark Doliner <mark@kingant.net>
parents: 7167
diff changeset
420 if (cur) {
895cd1d03efb [gaim-migrate @ 7740]
Mark Doliner <mark@kingant.net>
parents: 7167
diff changeset
421 aim_tlv_t *tlv = aim_tlv_gettlv(cur->data, 0x013c, 1);
895cd1d03efb [gaim-migrate @ 7740]
Mark Doliner <mark@kingant.net>
parents: 7167
diff changeset
422 if (tlv && tlv->length) {
895cd1d03efb [gaim-migrate @ 7740]
Mark Doliner <mark@kingant.net>
parents: 7167
diff changeset
423 char *alias = (char *)malloc((tlv->length+1)*sizeof(char));
10993
b6ca6d3c5332 [gaim-migrate @ 12831]
Mark Doliner <mark@kingant.net>
parents: 10991
diff changeset
424 strncpy(alias, (char *)tlv->value, tlv->length);
7172
895cd1d03efb [gaim-migrate @ 7740]
Mark Doliner <mark@kingant.net>
parents: 7167
diff changeset
425 alias[tlv->length] = 0;
895cd1d03efb [gaim-migrate @ 7740]
Mark Doliner <mark@kingant.net>
parents: 7167
diff changeset
426 return alias;
895cd1d03efb [gaim-migrate @ 7740]
Mark Doliner <mark@kingant.net>
parents: 7167
diff changeset
427 }
895cd1d03efb [gaim-migrate @ 7740]
Mark Doliner <mark@kingant.net>
parents: 7167
diff changeset
428 }
895cd1d03efb [gaim-migrate @ 7740]
Mark Doliner <mark@kingant.net>
parents: 7167
diff changeset
429 return NULL;
895cd1d03efb [gaim-migrate @ 7740]
Mark Doliner <mark@kingant.net>
parents: 7167
diff changeset
430 }
895cd1d03efb [gaim-migrate @ 7740]
Mark Doliner <mark@kingant.net>
parents: 7167
diff changeset
431
895cd1d03efb [gaim-migrate @ 7740]
Mark Doliner <mark@kingant.net>
parents: 7167
diff changeset
432 /**
4243
eae97ca4bbea [gaim-migrate @ 4493]
Mark Doliner <mark@kingant.net>
parents: 4238
diff changeset
433 * Locally find if you are waiting for authorization for a buddy.
eae97ca4bbea [gaim-migrate @ 4493]
Mark Doliner <mark@kingant.net>
parents: 4238
diff changeset
434 *
eae97ca4bbea [gaim-migrate @ 4493]
Mark Doliner <mark@kingant.net>
parents: 4238
diff changeset
435 * @param list A pointer to the current list of items.
4342
051265d35a36 [gaim-migrate @ 4607]
Mark Doliner <mark@kingant.net>
parents: 4333
diff changeset
436 * @param gn The group of the buddy.
051265d35a36 [gaim-migrate @ 4607]
Mark Doliner <mark@kingant.net>
parents: 4333
diff changeset
437 * @param sn The name of the buddy.
4243
eae97ca4bbea [gaim-migrate @ 4493]
Mark Doliner <mark@kingant.net>
parents: 4238
diff changeset
438 * @return A pointer to a NULL terminated string that is the buddies
eae97ca4bbea [gaim-migrate @ 4493]
Mark Doliner <mark@kingant.net>
parents: 4238
diff changeset
439 * alias, or NULL if the buddy has no alias. You should free
eae97ca4bbea [gaim-migrate @ 4493]
Mark Doliner <mark@kingant.net>
parents: 4238
diff changeset
440 * this returned value!
eae97ca4bbea [gaim-migrate @ 4493]
Mark Doliner <mark@kingant.net>
parents: 4238
diff changeset
441 */
eae97ca4bbea [gaim-migrate @ 4493]
Mark Doliner <mark@kingant.net>
parents: 4238
diff changeset
442 faim_export int aim_ssi_waitingforauth(struct aim_ssi_item *list, const char *gn, const char *sn)
eae97ca4bbea [gaim-migrate @ 4493]
Mark Doliner <mark@kingant.net>
parents: 4238
diff changeset
443 {
eae97ca4bbea [gaim-migrate @ 4493]
Mark Doliner <mark@kingant.net>
parents: 4238
diff changeset
444 struct aim_ssi_item *cur = aim_ssi_itemlist_finditem(list, gn, sn, AIM_SSI_TYPE_BUDDY);
eae97ca4bbea [gaim-migrate @ 4493]
Mark Doliner <mark@kingant.net>
parents: 4238
diff changeset
445 if (cur) {
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
446 if (aim_tlv_gettlv(cur->data, 0x0066, 1))
7166
e6b01bd8d6cd [gaim-migrate @ 7733]
Mark Doliner <mark@kingant.net>
parents: 7158
diff changeset
447 return 1;
4243
eae97ca4bbea [gaim-migrate @ 4493]
Mark Doliner <mark@kingant.net>
parents: 4238
diff changeset
448 }
eae97ca4bbea [gaim-migrate @ 4493]
Mark Doliner <mark@kingant.net>
parents: 4238
diff changeset
449 return 0;
eae97ca4bbea [gaim-migrate @ 4493]
Mark Doliner <mark@kingant.net>
parents: 4238
diff changeset
450 }
eae97ca4bbea [gaim-migrate @ 4493]
Mark Doliner <mark@kingant.net>
parents: 4238
diff changeset
451
eae97ca4bbea [gaim-migrate @ 4493]
Mark Doliner <mark@kingant.net>
parents: 4238
diff changeset
452 /**
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
453 * If there are changes, then create temporary items and
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
454 * call addmoddel.
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
455 *
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
456 * @param sess The oscar session.
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
457 * @return Return 0 if no errors, otherwise return the error number.
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
458 */
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
459 static int aim_ssi_sync(aim_session_t *sess)
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
460 {
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
461 struct aim_ssi_item *cur1, *cur2;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
462 struct aim_ssi_tmp *cur, *new;
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
463
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
464 if (!sess)
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
465 return -EINVAL;
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
466
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
467 /* If we're waiting for an ack, we shouldn't do anything else */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
468 if (sess->ssi.waiting_for_ack)
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
469 return 0;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
470
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
471 /*
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
472 * Compare the 2 lists and create an aim_ssi_tmp for each difference.
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
473 * We should only send either additions, modifications, or deletions
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
474 * before waiting for an acknowledgement. So first do deletions, then
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
475 * additions, then modifications. Also, both the official and the local
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
476 * list should be in ascending numerical order for the group ID#s and the
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
477 * buddy ID#s, which makes things more efficient. I think.
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
478 */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
479
4238
0e4be672f516 [gaim-migrate @ 4484]
Mark Doliner <mark@kingant.net>
parents: 4236
diff changeset
480 /* Additions */
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
481 if (!sess->ssi.pending) {
4238
0e4be672f516 [gaim-migrate @ 4484]
Mark Doliner <mark@kingant.net>
parents: 4236
diff changeset
482 for (cur1=sess->ssi.local; cur1; cur1=cur1->next) {
0e4be672f516 [gaim-migrate @ 4484]
Mark Doliner <mark@kingant.net>
parents: 4236
diff changeset
483 if (!aim_ssi_itemlist_find(sess->ssi.official, cur1->gid, cur1->bid)) {
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
484 new = (struct aim_ssi_tmp *)malloc(sizeof(struct aim_ssi_tmp));
4238
0e4be672f516 [gaim-migrate @ 4484]
Mark Doliner <mark@kingant.net>
parents: 4236
diff changeset
485 new->action = AIM_CB_SSI_ADD;
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
486 new->ack = 0xffff;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
487 new->name = NULL;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
488 new->item = cur1;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
489 new->next = NULL;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
490 if (sess->ssi.pending) {
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
491 for (cur=sess->ssi.pending; cur->next; cur=cur->next);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
492 cur->next = new;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
493 } else
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
494 sess->ssi.pending = new;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
495 }
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
496 }
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
497 }
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
498
4238
0e4be672f516 [gaim-migrate @ 4484]
Mark Doliner <mark@kingant.net>
parents: 4236
diff changeset
499 /* Deletions */
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
500 if (!sess->ssi.pending) {
4238
0e4be672f516 [gaim-migrate @ 4484]
Mark Doliner <mark@kingant.net>
parents: 4236
diff changeset
501 for (cur1=sess->ssi.official; cur1; cur1=cur1->next) {
0e4be672f516 [gaim-migrate @ 4484]
Mark Doliner <mark@kingant.net>
parents: 4236
diff changeset
502 if (!aim_ssi_itemlist_find(sess->ssi.local, cur1->gid, cur1->bid)) {
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
503 new = (struct aim_ssi_tmp *)malloc(sizeof(struct aim_ssi_tmp));
4238
0e4be672f516 [gaim-migrate @ 4484]
Mark Doliner <mark@kingant.net>
parents: 4236
diff changeset
504 new->action = AIM_CB_SSI_DEL;
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
505 new->ack = 0xffff;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
506 new->name = NULL;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
507 new->item = cur1;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
508 new->next = NULL;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
509 if (sess->ssi.pending) {
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
510 for (cur=sess->ssi.pending; cur->next; cur=cur->next);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
511 cur->next = new;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
512 } else
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
513 sess->ssi.pending = new;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
514 }
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
515 }
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
516 }
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
517
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
518 /* Modifications */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
519 if (!sess->ssi.pending) {
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
520 for (cur1=sess->ssi.local; cur1; cur1=cur1->next) {
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
521 cur2 = aim_ssi_itemlist_find(sess->ssi.official, cur1->gid, cur1->bid);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
522 if (cur2 && (aim_ssi_itemlist_cmp(cur1, cur2))) {
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
523 new = (struct aim_ssi_tmp *)malloc(sizeof(struct aim_ssi_tmp));
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
524 new->action = AIM_CB_SSI_MOD;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
525 new->ack = 0xffff;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
526 new->name = NULL;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
527 new->item = cur1;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
528 new->next = NULL;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
529 if (sess->ssi.pending) {
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
530 for (cur=sess->ssi.pending; cur->next; cur=cur->next);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
531 cur->next = new;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
532 } else
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
533 sess->ssi.pending = new;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
534 }
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
535 }
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
536 }
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
537
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
538 /* We're out of stuff to do, so tell the AIM servers we're done and exit */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
539 if (!sess->ssi.pending) {
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
540 aim_ssi_modend(sess);
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
541 return 0;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
542 }
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
543
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
544 /* Make sure we don't send anything else between now
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
545 * and when we receive the ack for the following operation */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
546 sess->ssi.waiting_for_ack = 1;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
547
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
548 /* Now go mail off our data and wait 4 to 6 weeks */
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
549 aim_ssi_addmoddel(sess);
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
550
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
551 return 0;
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
552 }
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
553
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
554 /**
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
555 * Free all SSI data.
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
556 *
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
557 * This doesn't remove it from the server, that's different.
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
558 *
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
559 * @param sess The oscar session.
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
560 * @return Return 0 if no errors, otherwise return the error number.
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
561 */
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
562 static int aim_ssi_freelist(aim_session_t *sess)
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
563 {
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
564 struct aim_ssi_item *cur, *del;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
565 struct aim_ssi_tmp *curtmp, *deltmp;
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
566
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
567 cur = sess->ssi.official;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
568 while (cur) {
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
569 del = cur;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
570 cur = cur->next;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
571 free(del->name);
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
572 aim_tlvlist_free(&del->data);
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
573 free(del);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
574 }
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
575
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
576 cur = sess->ssi.local;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
577 while (cur) {
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
578 del = cur;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
579 cur = cur->next;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
580 free(del->name);
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
581 aim_tlvlist_free(&del->data);
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
582 free(del);
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
583 }
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
584
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
585 curtmp = sess->ssi.pending;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
586 while (curtmp) {
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
587 deltmp = curtmp;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
588 curtmp = curtmp->next;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
589 free(deltmp);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
590 }
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
591
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
592 sess->ssi.numitems = 0;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
593 sess->ssi.official = NULL;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
594 sess->ssi.local = NULL;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
595 sess->ssi.pending = NULL;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
596 sess->ssi.timestamp = (time_t)0;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
597
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
598 return 0;
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
599 }
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
600
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
601 /**
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
602 * Delete all SSI data.
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
603 *
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
604 * @param sess The oscar session.
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
605 * @return Return 0 if no errors, otherwise return the error number.
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
606 */
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
607 faim_export int aim_ssi_deletelist(aim_session_t *sess)
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
608 {
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
609 struct aim_ssi_item *cur, *del;
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
610
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
611 if (!sess)
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
612 return -EINVAL;
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
613
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
614 /* Free the local list */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
615 cur = sess->ssi.local;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
616 while (cur) {
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
617 del = cur;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
618 cur = cur->next;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
619 free(del->name);
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
620 aim_tlvlist_free(&del->data);
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
621 free(del);
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
622 }
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
623 sess->ssi.local = NULL;
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
624
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
625 /* Sync our local list with the server list */
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
626 aim_ssi_sync(sess);
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
627
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
628 return 0;
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
629 }
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
630
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
631 /**
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
632 * This "cleans" the ssi list. It does the following:
4347
9fcc9eb94cae [gaim-migrate @ 4612]
Mark Doliner <mark@kingant.net>
parents: 4346
diff changeset
633 * 1) Makes sure all buddies, permits, and denies have names.
9fcc9eb94cae [gaim-migrate @ 4612]
Mark Doliner <mark@kingant.net>
parents: 4346
diff changeset
634 * 2) Makes sure that all buddies are in a group that exist.
9fcc9eb94cae [gaim-migrate @ 4612]
Mark Doliner <mark@kingant.net>
parents: 4346
diff changeset
635 * 3) Deletes any empty groups
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
636 *
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
637 * @param sess The oscar session.
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
638 * @return Return 0 if no errors, otherwise return the error number.
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
639 */
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
640 faim_export int aim_ssi_cleanlist(aim_session_t *sess)
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
641 {
4333
cc2f780c0505 [gaim-migrate @ 4597]
Mark Doliner <mark@kingant.net>
parents: 4317
diff changeset
642 struct aim_ssi_item *cur, *next;
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
643
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
644 if (!sess)
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
645 return -EINVAL;
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
646
4346
2903c656875a [gaim-migrate @ 4611]
Mark Doliner <mark@kingant.net>
parents: 4344
diff changeset
647 /* Delete any buddies, permits, or denies with empty names. */
2903c656875a [gaim-migrate @ 4611]
Mark Doliner <mark@kingant.net>
parents: 4344
diff changeset
648 /* If there are any buddies directly in the master group, add them to a real group. */
2903c656875a [gaim-migrate @ 4611]
Mark Doliner <mark@kingant.net>
parents: 4344
diff changeset
649 /* DESTROY any buddies that are directly in the master group. */
2903c656875a [gaim-migrate @ 4611]
Mark Doliner <mark@kingant.net>
parents: 4344
diff changeset
650 /* Do the same for buddies that are in a non-existant group. */
2903c656875a [gaim-migrate @ 4611]
Mark Doliner <mark@kingant.net>
parents: 4344
diff changeset
651 /* This will kind of mess up if you hit the item limit, but this function isn't too critical */
4344
d6f1086d52a6 [gaim-migrate @ 4609]
Mark Doliner <mark@kingant.net>
parents: 4342
diff changeset
652 cur = sess->ssi.local;
d6f1086d52a6 [gaim-migrate @ 4609]
Mark Doliner <mark@kingant.net>
parents: 4342
diff changeset
653 while (cur) {
d6f1086d52a6 [gaim-migrate @ 4609]
Mark Doliner <mark@kingant.net>
parents: 4342
diff changeset
654 next = cur->next;
d6f1086d52a6 [gaim-migrate @ 4609]
Mark Doliner <mark@kingant.net>
parents: 4342
diff changeset
655 if (!cur->name) {
d6f1086d52a6 [gaim-migrate @ 4609]
Mark Doliner <mark@kingant.net>
parents: 4342
diff changeset
656 if (cur->type == AIM_SSI_TYPE_BUDDY)
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
657 aim_ssi_delbuddy(sess, NULL, NULL);
4344
d6f1086d52a6 [gaim-migrate @ 4609]
Mark Doliner <mark@kingant.net>
parents: 4342
diff changeset
658 else if (cur->type == AIM_SSI_TYPE_PERMIT)
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
659 aim_ssi_delpermit(sess, NULL);
4344
d6f1086d52a6 [gaim-migrate @ 4609]
Mark Doliner <mark@kingant.net>
parents: 4342
diff changeset
660 else if (cur->type == AIM_SSI_TYPE_DENY)
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
661 aim_ssi_deldeny(sess, NULL);
4346
2903c656875a [gaim-migrate @ 4611]
Mark Doliner <mark@kingant.net>
parents: 4344
diff changeset
662 } else if ((cur->type == AIM_SSI_TYPE_BUDDY) && ((cur->gid == 0x0000) || (!aim_ssi_itemlist_find(sess->ssi.local, cur->gid, 0x0000)))) {
11005
bb7fd9359f9e [gaim-migrate @ 12864]
Mark Doliner <mark@kingant.net>
parents: 10993
diff changeset
663 char *alias = aim_ssi_getalias(sess->ssi.local, NULL, cur->name);
bb7fd9359f9e [gaim-migrate @ 12864]
Mark Doliner <mark@kingant.net>
parents: 10993
diff changeset
664 aim_ssi_addbuddy(sess, cur->name, "orphans", alias, NULL, NULL, 0);
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
665 aim_ssi_delbuddy(sess, cur->name, NULL);
11005
bb7fd9359f9e [gaim-migrate @ 12864]
Mark Doliner <mark@kingant.net>
parents: 10993
diff changeset
666 free(alias);
bb7fd9359f9e [gaim-migrate @ 12864]
Mark Doliner <mark@kingant.net>
parents: 10993
diff changeset
667 }
bb7fd9359f9e [gaim-migrate @ 12864]
Mark Doliner <mark@kingant.net>
parents: 10993
diff changeset
668 cur = next;
bb7fd9359f9e [gaim-migrate @ 12864]
Mark Doliner <mark@kingant.net>
parents: 10993
diff changeset
669 }
bb7fd9359f9e [gaim-migrate @ 12864]
Mark Doliner <mark@kingant.net>
parents: 10993
diff changeset
670
bb7fd9359f9e [gaim-migrate @ 12864]
Mark Doliner <mark@kingant.net>
parents: 10993
diff changeset
671 /* Make sure there aren't any duplicate buddies in a group, or duplicate permits or denies */
bb7fd9359f9e [gaim-migrate @ 12864]
Mark Doliner <mark@kingant.net>
parents: 10993
diff changeset
672 cur = sess->ssi.local;
bb7fd9359f9e [gaim-migrate @ 12864]
Mark Doliner <mark@kingant.net>
parents: 10993
diff changeset
673 while (cur) {
bb7fd9359f9e [gaim-migrate @ 12864]
Mark Doliner <mark@kingant.net>
parents: 10993
diff changeset
674 next = cur->next;
bb7fd9359f9e [gaim-migrate @ 12864]
Mark Doliner <mark@kingant.net>
parents: 10993
diff changeset
675 if ((cur->type == AIM_SSI_TYPE_BUDDY) || (cur->type == AIM_SSI_TYPE_PERMIT) || (cur->type == AIM_SSI_TYPE_DENY))
bb7fd9359f9e [gaim-migrate @ 12864]
Mark Doliner <mark@kingant.net>
parents: 10993
diff changeset
676 {
bb7fd9359f9e [gaim-migrate @ 12864]
Mark Doliner <mark@kingant.net>
parents: 10993
diff changeset
677 struct aim_ssi_item *cur2, *next2;
bb7fd9359f9e [gaim-migrate @ 12864]
Mark Doliner <mark@kingant.net>
parents: 10993
diff changeset
678 cur2 = next;
bb7fd9359f9e [gaim-migrate @ 12864]
Mark Doliner <mark@kingant.net>
parents: 10993
diff changeset
679 while (cur2) {
bb7fd9359f9e [gaim-migrate @ 12864]
Mark Doliner <mark@kingant.net>
parents: 10993
diff changeset
680 next2 = cur2->next;
bb7fd9359f9e [gaim-migrate @ 12864]
Mark Doliner <mark@kingant.net>
parents: 10993
diff changeset
681 if ((cur->type == cur2->type) && (cur->gid == cur2->gid) && (!strcmp(cur->name, cur2->name))) {
bb7fd9359f9e [gaim-migrate @ 12864]
Mark Doliner <mark@kingant.net>
parents: 10993
diff changeset
682 aim_ssi_itemlist_del(&sess->ssi.local, cur2);
bb7fd9359f9e [gaim-migrate @ 12864]
Mark Doliner <mark@kingant.net>
parents: 10993
diff changeset
683 }
bb7fd9359f9e [gaim-migrate @ 12864]
Mark Doliner <mark@kingant.net>
parents: 10993
diff changeset
684 cur2 = next2;
bb7fd9359f9e [gaim-migrate @ 12864]
Mark Doliner <mark@kingant.net>
parents: 10993
diff changeset
685 }
4344
d6f1086d52a6 [gaim-migrate @ 4609]
Mark Doliner <mark@kingant.net>
parents: 4342
diff changeset
686 }
d6f1086d52a6 [gaim-migrate @ 4609]
Mark Doliner <mark@kingant.net>
parents: 4342
diff changeset
687 cur = next;
d6f1086d52a6 [gaim-migrate @ 4609]
Mark Doliner <mark@kingant.net>
parents: 4342
diff changeset
688 }
d6f1086d52a6 [gaim-migrate @ 4609]
Mark Doliner <mark@kingant.net>
parents: 4342
diff changeset
689
5504
e1e6b2fda105 [gaim-migrate @ 5903]
Mark Doliner <mark@kingant.net>
parents: 5503
diff changeset
690 /* Check if there are empty groups and delete them */
4333
cc2f780c0505 [gaim-migrate @ 4597]
Mark Doliner <mark@kingant.net>
parents: 4317
diff changeset
691 cur = sess->ssi.local;
cc2f780c0505 [gaim-migrate @ 4597]
Mark Doliner <mark@kingant.net>
parents: 4317
diff changeset
692 while (cur) {
cc2f780c0505 [gaim-migrate @ 4597]
Mark Doliner <mark@kingant.net>
parents: 4317
diff changeset
693 next = cur->next;
5504
e1e6b2fda105 [gaim-migrate @ 5903]
Mark Doliner <mark@kingant.net>
parents: 5503
diff changeset
694 if (cur->type == AIM_SSI_TYPE_GROUP) {
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
695 aim_tlv_t *tlv = aim_tlv_gettlv(cur->data, 0x00c8, 1);
5503
38ae6c7b4387 [gaim-migrate @ 5902]
Mark Doliner <mark@kingant.net>
parents: 4889
diff changeset
696 if (!tlv || !tlv->length)
4243
eae97ca4bbea [gaim-migrate @ 4493]
Mark Doliner <mark@kingant.net>
parents: 4238
diff changeset
697 aim_ssi_itemlist_del(&sess->ssi.local, cur);
eae97ca4bbea [gaim-migrate @ 4493]
Mark Doliner <mark@kingant.net>
parents: 4238
diff changeset
698 }
4333
cc2f780c0505 [gaim-migrate @ 4597]
Mark Doliner <mark@kingant.net>
parents: 4317
diff changeset
699 cur = next;
cc2f780c0505 [gaim-migrate @ 4597]
Mark Doliner <mark@kingant.net>
parents: 4317
diff changeset
700 }
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
701
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
702 /* Check if the master group is empty */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
703 if ((cur = aim_ssi_itemlist_find(sess->ssi.local, 0x0000, 0x0000)) && (!cur->data))
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
704 aim_ssi_itemlist_del(&sess->ssi.local, cur);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
705
11005
bb7fd9359f9e [gaim-migrate @ 12864]
Mark Doliner <mark@kingant.net>
parents: 10993
diff changeset
706 /* If we've made any changes then sync our list with the server's */
bb7fd9359f9e [gaim-migrate @ 12864]
Mark Doliner <mark@kingant.net>
parents: 10993
diff changeset
707 aim_ssi_sync(sess);
bb7fd9359f9e [gaim-migrate @ 12864]
Mark Doliner <mark@kingant.net>
parents: 10993
diff changeset
708
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
709 return 0;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
710 }
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
711
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
712 /**
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
713 * Add a buddy to the list.
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
714 *
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
715 * @param sess The oscar session.
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
716 * @param name The name of the item.
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
717 * @param group The group of the item.
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
718 * @param alias The alias/nickname of the item, or NULL.
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
719 * @param comment The buddy comment for the item, or NULL.
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
720 * @param smsnum The locally assigned SMS number, or NULL.
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
721 * @return Return 0 if no errors, otherwise return the error number.
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
722 */
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
723 faim_export int aim_ssi_addbuddy(aim_session_t *sess, const char *name, const char *group, const char *alias, const char *comment, const char *smsnum, int needauth)
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
724 {
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
725 struct aim_ssi_item *parent;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
726 aim_tlvlist_t *data = NULL;
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
727
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
728 if (!sess || !name || !group)
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
729 return -EINVAL;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
730
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
731 /* Find the parent */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
732 if (!(parent = aim_ssi_itemlist_finditem(sess->ssi.local, group, NULL, AIM_SSI_TYPE_GROUP))) {
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
733 /* Find the parent's parent (the master group) */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
734 if (!(parent = aim_ssi_itemlist_find(sess->ssi.local, 0x0000, 0x0000)))
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
735 if (!(parent = aim_ssi_itemlist_add(&sess->ssi.local, NULL, 0x0000, 0x0000, AIM_SSI_TYPE_GROUP, NULL)))
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
736 return -ENOMEM;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
737 /* Add the parent */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
738 if (!(parent = aim_ssi_itemlist_add(&sess->ssi.local, group, 0xFFFF, 0x0000, AIM_SSI_TYPE_GROUP, NULL)))
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
739 return -ENOMEM;
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
740
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
741 /* Modify the parent's parent (the master group) */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
742 aim_ssi_itemlist_rebuildgroup(sess->ssi.local, NULL);
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
743 }
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
744
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
745 /* Create a TLV list for the new buddy */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
746 if (needauth)
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
747 aim_tlvlist_add_noval(&data, 0x0066);
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
748 if (alias)
10991
1798ad0be460 [gaim-migrate @ 12829]
Mark Doliner <mark@kingant.net>
parents: 10990
diff changeset
749 aim_tlvlist_add_str(&data, 0x0131, alias);
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
750 if (smsnum)
10991
1798ad0be460 [gaim-migrate @ 12829]
Mark Doliner <mark@kingant.net>
parents: 10990
diff changeset
751 aim_tlvlist_add_str(&data, 0x013a, smsnum);
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
752 if (comment)
10991
1798ad0be460 [gaim-migrate @ 12829]
Mark Doliner <mark@kingant.net>
parents: 10990
diff changeset
753 aim_tlvlist_add_str(&data, 0x013c, comment);
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
754
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
755 /* Add that bad boy */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
756 aim_ssi_itemlist_add(&sess->ssi.local, name, parent->gid, 0xFFFF, AIM_SSI_TYPE_BUDDY, data);
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
757 aim_tlvlist_free(&data);
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
758
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
759 /* Modify the parent group */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
760 aim_ssi_itemlist_rebuildgroup(sess->ssi.local, group);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
761
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
762 /* Sync our local list with the server list */
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
763 aim_ssi_sync(sess);
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
764
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
765 return 0;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
766 }
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
767
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
768 /**
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
769 * Add a permit buddy to the list.
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
770 *
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
771 * @param sess The oscar session.
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
772 * @param name The name of the item..
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
773 * @return Return 0 if no errors, otherwise return the error number.
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
774 */
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
775 faim_export int aim_ssi_addpermit(aim_session_t *sess, const char *name)
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
776 {
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
777
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
778 if (!sess || !name)
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
779 return -EINVAL;
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
780
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
781 /* Add that bad boy */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
782 aim_ssi_itemlist_add(&sess->ssi.local, name, 0x0000, 0xFFFF, AIM_SSI_TYPE_PERMIT, NULL);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
783
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
784 /* Sync our local list with the server list */
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
785 aim_ssi_sync(sess);
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
786
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
787 return 0;
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
788 }
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
789
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
790 /**
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
791 * Add a deny buddy to the list.
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
792 *
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
793 * @param sess The oscar session.
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
794 * @param name The name of the item..
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
795 * @return Return 0 if no errors, otherwise return the error number.
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
796 */
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
797 faim_export int aim_ssi_adddeny(aim_session_t *sess, const char *name)
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
798 {
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
799
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
800 if (!sess || !name)
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
801 return -EINVAL;
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
802
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
803 /* Add that bad boy */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
804 aim_ssi_itemlist_add(&sess->ssi.local, name, 0x0000, 0xFFFF, AIM_SSI_TYPE_DENY, NULL);
3017
f0e8770d786d [gaim-migrate @ 3030]
Rob Flynn <gaim@robflynn.com>
parents: 3000
diff changeset
805
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
806 /* Sync our local list with the server list */
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
807 aim_ssi_sync(sess);
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
808
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
809 return 0;
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
810 }
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
811
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
812 /**
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
813 * Deletes a buddy from the list.
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
814 *
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
815 * @param sess The oscar session.
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
816 * @param name The name of the item, or NULL.
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
817 * @param group The group of the item, or NULL.
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
818 * @return Return 0 if no errors, otherwise return the error number.
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
819 */
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
820 faim_export int aim_ssi_delbuddy(aim_session_t *sess, const char *name, const char *group)
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
821 {
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
822 struct aim_ssi_item *del;
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
823
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
824 if (!sess)
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
825 return -EINVAL;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
826
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
827 /* Find the buddy */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
828 if (!(del = aim_ssi_itemlist_finditem(sess->ssi.local, group, name, AIM_SSI_TYPE_BUDDY)))
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
829 return -EINVAL;
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
830
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
831 /* Remove the item from the list */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
832 aim_ssi_itemlist_del(&sess->ssi.local, del);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
833
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
834 /* Modify the parent group */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
835 aim_ssi_itemlist_rebuildgroup(sess->ssi.local, group);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
836
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
837 /* Check if we should delete the parent group */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
838 if ((del = aim_ssi_itemlist_finditem(sess->ssi.local, group, NULL, AIM_SSI_TYPE_GROUP)) && (!del->data)) {
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
839 aim_ssi_itemlist_del(&sess->ssi.local, del);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
840
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
841 /* Modify the parent group */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
842 aim_ssi_itemlist_rebuildgroup(sess->ssi.local, NULL);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
843
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
844 /* Check if we should delete the parent's parent (the master group) */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
845 if ((del = aim_ssi_itemlist_find(sess->ssi.local, 0x0000, 0x0000)) && (!del->data)) {
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
846 aim_ssi_itemlist_del(&sess->ssi.local, del);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
847 }
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
848 }
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
849
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
850 /* Sync our local list with the server list */
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
851 aim_ssi_sync(sess);
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
852
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
853 return 0;
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
854 }
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
855
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
856 /**
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
857 * Deletes a permit buddy from the list.
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
858 *
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
859 * @param sess The oscar session.
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
860 * @param name The name of the item, or NULL.
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
861 * @return Return 0 if no errors, otherwise return the error number.
3017
f0e8770d786d [gaim-migrate @ 3030]
Rob Flynn <gaim@robflynn.com>
parents: 3000
diff changeset
862 */
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
863 faim_export int aim_ssi_delpermit(aim_session_t *sess, const char *name)
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
864 {
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
865 struct aim_ssi_item *del;
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
866
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
867 if (!sess)
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
868 return -EINVAL;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
869
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
870 /* Find the item */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
871 if (!(del = aim_ssi_itemlist_finditem(sess->ssi.local, NULL, name, AIM_SSI_TYPE_PERMIT)))
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
872 return -EINVAL;
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
873
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
874 /* Remove the item from the list */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
875 aim_ssi_itemlist_del(&sess->ssi.local, del);
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
876
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
877 /* Sync our local list with the server list */
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
878 aim_ssi_sync(sess);
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
879
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
880 return 0;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
881 }
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
882
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
883 /**
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
884 * Deletes a deny buddy from the list.
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
885 *
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
886 * @param sess The oscar session.
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
887 * @param name The name of the item, or NULL.
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
888 * @return Return 0 if no errors, otherwise return the error number.
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
889 */
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
890 faim_export int aim_ssi_deldeny(aim_session_t *sess, const char *name)
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
891 {
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
892 struct aim_ssi_item *del;
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
893
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
894 if (!sess)
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
895 return -EINVAL;
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
896
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
897 /* Find the item */
4248
ea8fb193f5a0 [gaim-migrate @ 4498]
Mark Doliner <mark@kingant.net>
parents: 4243
diff changeset
898 if (!(del = aim_ssi_itemlist_finditem(sess->ssi.local, NULL, name, AIM_SSI_TYPE_DENY)))
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
899 return -EINVAL;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
900
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
901 /* Remove the item from the list */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
902 aim_ssi_itemlist_del(&sess->ssi.local, del);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
903
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
904 /* Sync our local list with the server list */
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
905 aim_ssi_sync(sess);
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
906
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
907 return 0;
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
908 }
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
909
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
910 /**
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
911 * Move a buddy from one group to another group. This basically just deletes the
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
912 * buddy and re-adds it.
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
913 *
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
914 * @param sess The oscar session.
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
915 * @param oldgn The group that the buddy is currently in.
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
916 * @param newgn The group that the buddy should be moved in to.
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
917 * @param sn The name of the buddy to be moved.
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
918 * @return Return 0 if no errors, otherwise return the error number.
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
919 */
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
920 faim_export int aim_ssi_movebuddy(aim_session_t *sess, const char *oldgn, const char *newgn, const char *sn)
3140
aa18e79365b7 [gaim-migrate @ 3155]
Rob Flynn <gaim@robflynn.com>
parents: 3109
diff changeset
921 {
11005
bb7fd9359f9e [gaim-migrate @ 12864]
Mark Doliner <mark@kingant.net>
parents: 10993
diff changeset
922 char *alias = aim_ssi_getalias(sess->ssi.local, oldgn, sn);
bb7fd9359f9e [gaim-migrate @ 12864]
Mark Doliner <mark@kingant.net>
parents: 10993
diff changeset
923 aim_ssi_addbuddy(sess, sn, newgn, alias, NULL, NULL, aim_ssi_waitingforauth(sess->ssi.local, oldgn, sn));
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
924 aim_ssi_delbuddy(sess, sn, oldgn);
11005
bb7fd9359f9e [gaim-migrate @ 12864]
Mark Doliner <mark@kingant.net>
parents: 10993
diff changeset
925 free(alias);
3140
aa18e79365b7 [gaim-migrate @ 3155]
Rob Flynn <gaim@robflynn.com>
parents: 3109
diff changeset
926 return 0;
aa18e79365b7 [gaim-migrate @ 3155]
Rob Flynn <gaim@robflynn.com>
parents: 3109
diff changeset
927 }
aa18e79365b7 [gaim-migrate @ 3155]
Rob Flynn <gaim@robflynn.com>
parents: 3109
diff changeset
928
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
929 /**
4269
ff0642fab1d5 [gaim-migrate @ 4520]
Mark Doliner <mark@kingant.net>
parents: 4248
diff changeset
930 * Change the alias stored on the server for a given buddy.
ff0642fab1d5 [gaim-migrate @ 4520]
Mark Doliner <mark@kingant.net>
parents: 4248
diff changeset
931 *
ff0642fab1d5 [gaim-migrate @ 4520]
Mark Doliner <mark@kingant.net>
parents: 4248
diff changeset
932 * @param sess The oscar session.
ff0642fab1d5 [gaim-migrate @ 4520]
Mark Doliner <mark@kingant.net>
parents: 4248
diff changeset
933 * @param gn The group that the buddy is currently in.
ff0642fab1d5 [gaim-migrate @ 4520]
Mark Doliner <mark@kingant.net>
parents: 4248
diff changeset
934 * @param sn The screen name of the buddy.
7166
e6b01bd8d6cd [gaim-migrate @ 7733]
Mark Doliner <mark@kingant.net>
parents: 7158
diff changeset
935 * @param alias The new alias for the buddy, or NULL if you want to remove
7172
895cd1d03efb [gaim-migrate @ 7740]
Mark Doliner <mark@kingant.net>
parents: 7167
diff changeset
936 * a buddy's comment.
4269
ff0642fab1d5 [gaim-migrate @ 4520]
Mark Doliner <mark@kingant.net>
parents: 4248
diff changeset
937 * @return Return 0 if no errors, otherwise return the error number.
ff0642fab1d5 [gaim-migrate @ 4520]
Mark Doliner <mark@kingant.net>
parents: 4248
diff changeset
938 */
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
939 faim_export int aim_ssi_aliasbuddy(aim_session_t *sess, const char *gn, const char *sn, const char *alias)
4269
ff0642fab1d5 [gaim-migrate @ 4520]
Mark Doliner <mark@kingant.net>
parents: 4248
diff changeset
940 {
ff0642fab1d5 [gaim-migrate @ 4520]
Mark Doliner <mark@kingant.net>
parents: 4248
diff changeset
941 struct aim_ssi_item *tmp;
ff0642fab1d5 [gaim-migrate @ 4520]
Mark Doliner <mark@kingant.net>
parents: 4248
diff changeset
942
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
943 if (!sess || !gn || !sn)
4269
ff0642fab1d5 [gaim-migrate @ 4520]
Mark Doliner <mark@kingant.net>
parents: 4248
diff changeset
944 return -EINVAL;
ff0642fab1d5 [gaim-migrate @ 4520]
Mark Doliner <mark@kingant.net>
parents: 4248
diff changeset
945
ff0642fab1d5 [gaim-migrate @ 4520]
Mark Doliner <mark@kingant.net>
parents: 4248
diff changeset
946 if (!(tmp = aim_ssi_itemlist_finditem(sess->ssi.local, gn, sn, AIM_SSI_TYPE_BUDDY)))
ff0642fab1d5 [gaim-migrate @ 4520]
Mark Doliner <mark@kingant.net>
parents: 4248
diff changeset
947 return -EINVAL;
ff0642fab1d5 [gaim-migrate @ 4520]
Mark Doliner <mark@kingant.net>
parents: 4248
diff changeset
948
7166
e6b01bd8d6cd [gaim-migrate @ 7733]
Mark Doliner <mark@kingant.net>
parents: 7158
diff changeset
949 /* Either add or remove the 0x0131 TLV from the TLV chain */
e6b01bd8d6cd [gaim-migrate @ 7733]
Mark Doliner <mark@kingant.net>
parents: 7158
diff changeset
950 if ((alias != NULL) && (strlen(alias) > 0))
10993
b6ca6d3c5332 [gaim-migrate @ 12831]
Mark Doliner <mark@kingant.net>
parents: 10991
diff changeset
951 aim_tlvlist_replace_str(&tmp->data, 0x0131, alias);
7166
e6b01bd8d6cd [gaim-migrate @ 7733]
Mark Doliner <mark@kingant.net>
parents: 7158
diff changeset
952 else
e6b01bd8d6cd [gaim-migrate @ 7733]
Mark Doliner <mark@kingant.net>
parents: 7158
diff changeset
953 aim_tlvlist_remove(&tmp->data, 0x0131);
4269
ff0642fab1d5 [gaim-migrate @ 4520]
Mark Doliner <mark@kingant.net>
parents: 4248
diff changeset
954
ff0642fab1d5 [gaim-migrate @ 4520]
Mark Doliner <mark@kingant.net>
parents: 4248
diff changeset
955 /* Sync our local list with the server list */
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
956 aim_ssi_sync(sess);
4269
ff0642fab1d5 [gaim-migrate @ 4520]
Mark Doliner <mark@kingant.net>
parents: 4248
diff changeset
957
ff0642fab1d5 [gaim-migrate @ 4520]
Mark Doliner <mark@kingant.net>
parents: 4248
diff changeset
958 return 0;
ff0642fab1d5 [gaim-migrate @ 4520]
Mark Doliner <mark@kingant.net>
parents: 4248
diff changeset
959 }
ff0642fab1d5 [gaim-migrate @ 4520]
Mark Doliner <mark@kingant.net>
parents: 4248
diff changeset
960
ff0642fab1d5 [gaim-migrate @ 4520]
Mark Doliner <mark@kingant.net>
parents: 4248
diff changeset
961 /**
7172
895cd1d03efb [gaim-migrate @ 7740]
Mark Doliner <mark@kingant.net>
parents: 7167
diff changeset
962 * Change the comment stored on the server for a given buddy.
895cd1d03efb [gaim-migrate @ 7740]
Mark Doliner <mark@kingant.net>
parents: 7167
diff changeset
963 *
895cd1d03efb [gaim-migrate @ 7740]
Mark Doliner <mark@kingant.net>
parents: 7167
diff changeset
964 * @param sess The oscar session.
895cd1d03efb [gaim-migrate @ 7740]
Mark Doliner <mark@kingant.net>
parents: 7167
diff changeset
965 * @param gn The group that the buddy is currently in.
895cd1d03efb [gaim-migrate @ 7740]
Mark Doliner <mark@kingant.net>
parents: 7167
diff changeset
966 * @param sn The screen name of the buddy.
895cd1d03efb [gaim-migrate @ 7740]
Mark Doliner <mark@kingant.net>
parents: 7167
diff changeset
967 * @param alias The new comment for the buddy, or NULL if you want to remove
895cd1d03efb [gaim-migrate @ 7740]
Mark Doliner <mark@kingant.net>
parents: 7167
diff changeset
968 * a buddy's comment.
895cd1d03efb [gaim-migrate @ 7740]
Mark Doliner <mark@kingant.net>
parents: 7167
diff changeset
969 * @return Return 0 if no errors, otherwise return the error number.
895cd1d03efb [gaim-migrate @ 7740]
Mark Doliner <mark@kingant.net>
parents: 7167
diff changeset
970 */
895cd1d03efb [gaim-migrate @ 7740]
Mark Doliner <mark@kingant.net>
parents: 7167
diff changeset
971 faim_export int aim_ssi_editcomment(aim_session_t *sess, const char *gn, const char *sn, const char *comment)
895cd1d03efb [gaim-migrate @ 7740]
Mark Doliner <mark@kingant.net>
parents: 7167
diff changeset
972 {
895cd1d03efb [gaim-migrate @ 7740]
Mark Doliner <mark@kingant.net>
parents: 7167
diff changeset
973 struct aim_ssi_item *tmp;
895cd1d03efb [gaim-migrate @ 7740]
Mark Doliner <mark@kingant.net>
parents: 7167
diff changeset
974
895cd1d03efb [gaim-migrate @ 7740]
Mark Doliner <mark@kingant.net>
parents: 7167
diff changeset
975 if (!sess || !gn || !sn)
895cd1d03efb [gaim-migrate @ 7740]
Mark Doliner <mark@kingant.net>
parents: 7167
diff changeset
976 return -EINVAL;
895cd1d03efb [gaim-migrate @ 7740]
Mark Doliner <mark@kingant.net>
parents: 7167
diff changeset
977
895cd1d03efb [gaim-migrate @ 7740]
Mark Doliner <mark@kingant.net>
parents: 7167
diff changeset
978 if (!(tmp = aim_ssi_itemlist_finditem(sess->ssi.local, gn, sn, AIM_SSI_TYPE_BUDDY)))
895cd1d03efb [gaim-migrate @ 7740]
Mark Doliner <mark@kingant.net>
parents: 7167
diff changeset
979 return -EINVAL;
895cd1d03efb [gaim-migrate @ 7740]
Mark Doliner <mark@kingant.net>
parents: 7167
diff changeset
980
895cd1d03efb [gaim-migrate @ 7740]
Mark Doliner <mark@kingant.net>
parents: 7167
diff changeset
981 /* Either add or remove the 0x0131 TLV from the TLV chain */
895cd1d03efb [gaim-migrate @ 7740]
Mark Doliner <mark@kingant.net>
parents: 7167
diff changeset
982 if ((comment != NULL) && (strlen(comment) > 0))
10993
b6ca6d3c5332 [gaim-migrate @ 12831]
Mark Doliner <mark@kingant.net>
parents: 10991
diff changeset
983 aim_tlvlist_replace_str(&tmp->data, 0x013c, comment);
7172
895cd1d03efb [gaim-migrate @ 7740]
Mark Doliner <mark@kingant.net>
parents: 7167
diff changeset
984 else
895cd1d03efb [gaim-migrate @ 7740]
Mark Doliner <mark@kingant.net>
parents: 7167
diff changeset
985 aim_tlvlist_remove(&tmp->data, 0x013c);
895cd1d03efb [gaim-migrate @ 7740]
Mark Doliner <mark@kingant.net>
parents: 7167
diff changeset
986
895cd1d03efb [gaim-migrate @ 7740]
Mark Doliner <mark@kingant.net>
parents: 7167
diff changeset
987 /* Sync our local list with the server list */
895cd1d03efb [gaim-migrate @ 7740]
Mark Doliner <mark@kingant.net>
parents: 7167
diff changeset
988 aim_ssi_sync(sess);
895cd1d03efb [gaim-migrate @ 7740]
Mark Doliner <mark@kingant.net>
parents: 7167
diff changeset
989
895cd1d03efb [gaim-migrate @ 7740]
Mark Doliner <mark@kingant.net>
parents: 7167
diff changeset
990 return 0;
895cd1d03efb [gaim-migrate @ 7740]
Mark Doliner <mark@kingant.net>
parents: 7167
diff changeset
991 }
895cd1d03efb [gaim-migrate @ 7740]
Mark Doliner <mark@kingant.net>
parents: 7167
diff changeset
992
895cd1d03efb [gaim-migrate @ 7740]
Mark Doliner <mark@kingant.net>
parents: 7167
diff changeset
993 /**
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
994 * Rename a group.
3348
dd34e0b40fed [gaim-migrate @ 3367]
Jim Seymour <jseymour>
parents: 3332
diff changeset
995 *
dd34e0b40fed [gaim-migrate @ 3367]
Jim Seymour <jseymour>
parents: 3332
diff changeset
996 * @param sess The oscar session.
dd34e0b40fed [gaim-migrate @ 3367]
Jim Seymour <jseymour>
parents: 3332
diff changeset
997 * @param oldgn The old group name.
dd34e0b40fed [gaim-migrate @ 3367]
Jim Seymour <jseymour>
parents: 3332
diff changeset
998 * @param newgn The new group name.
dd34e0b40fed [gaim-migrate @ 3367]
Jim Seymour <jseymour>
parents: 3332
diff changeset
999 * @return Return 0 if no errors, otherwise return the error number.
dd34e0b40fed [gaim-migrate @ 3367]
Jim Seymour <jseymour>
parents: 3332
diff changeset
1000 */
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1001 faim_export int aim_ssi_rename_group(aim_session_t *sess, const char *oldgn, const char *newgn)
3348
dd34e0b40fed [gaim-migrate @ 3367]
Jim Seymour <jseymour>
parents: 3332
diff changeset
1002 {
dd34e0b40fed [gaim-migrate @ 3367]
Jim Seymour <jseymour>
parents: 3332
diff changeset
1003 struct aim_ssi_item *group;
dd34e0b40fed [gaim-migrate @ 3367]
Jim Seymour <jseymour>
parents: 3332
diff changeset
1004
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1005 if (!sess || !oldgn || !newgn)
3348
dd34e0b40fed [gaim-migrate @ 3367]
Jim Seymour <jseymour>
parents: 3332
diff changeset
1006 return -EINVAL;
dd34e0b40fed [gaim-migrate @ 3367]
Jim Seymour <jseymour>
parents: 3332
diff changeset
1007
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1008 if (!(group = aim_ssi_itemlist_finditem(sess->ssi.local, oldgn, NULL, AIM_SSI_TYPE_GROUP)))
3017
f0e8770d786d [gaim-migrate @ 3030]
Rob Flynn <gaim@robflynn.com>
parents: 3000
diff changeset
1009 return -EINVAL;
f0e8770d786d [gaim-migrate @ 3030]
Rob Flynn <gaim@robflynn.com>
parents: 3000
diff changeset
1010
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1011 free(group->name);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1012 group->name = (char *)malloc((strlen(newgn)+1)*sizeof(char));
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1013 strcpy(group->name, newgn);
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
1014
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1015 /* Sync our local list with the server list */
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1016 aim_ssi_sync(sess);
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
1017
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
1018 return 0;
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
1019 }
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
1020
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
1021 /**
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
1022 * Stores your permit/deny setting on the server, and starts using it.
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
1023 *
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
1024 * @param sess The oscar session.
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
1025 * @param permdeny Your permit/deny setting. Can be one of the following:
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
1026 * 1 - Allow all users
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
1027 * 2 - Block all users
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
1028 * 3 - Allow only the users below
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
1029 * 4 - Block only the users below
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
1030 * 5 - Allow only users on my buddy list
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
1031 * @param vismask A bitmask of the class of users to whom you want to be
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
1032 * visible. See the AIM_FLAG_BLEH #defines in aim.h
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
1033 * @return Return 0 if no errors, otherwise return the error number.
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
1034 */
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1035 faim_export int aim_ssi_setpermdeny(aim_session_t *sess, fu8_t permdeny, fu32_t vismask)
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1036 {
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1037 struct aim_ssi_item *tmp;
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
1038
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1039 if (!sess)
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
1040 return -EINVAL;
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
1041
7166
e6b01bd8d6cd [gaim-migrate @ 7733]
Mark Doliner <mark@kingant.net>
parents: 7158
diff changeset
1042 /* Find the PDINFO item, or add it if it does not exist */
e6b01bd8d6cd [gaim-migrate @ 7733]
Mark Doliner <mark@kingant.net>
parents: 7158
diff changeset
1043 if (!(tmp = aim_ssi_itemlist_finditem(sess->ssi.local, NULL, NULL, AIM_SSI_TYPE_PDINFO)))
e6b01bd8d6cd [gaim-migrate @ 7733]
Mark Doliner <mark@kingant.net>
parents: 7158
diff changeset
1044 tmp = aim_ssi_itemlist_add(&sess->ssi.local, NULL, 0x0000, 0xFFFF, AIM_SSI_TYPE_PDINFO, NULL);
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
1045
7166
e6b01bd8d6cd [gaim-migrate @ 7733]
Mark Doliner <mark@kingant.net>
parents: 7158
diff changeset
1046 /* Need to add the 0x00ca TLV to the TLV chain */
e6b01bd8d6cd [gaim-migrate @ 7733]
Mark Doliner <mark@kingant.net>
parents: 7158
diff changeset
1047 aim_tlvlist_replace_8(&tmp->data, 0x00ca, permdeny);
e6b01bd8d6cd [gaim-migrate @ 7733]
Mark Doliner <mark@kingant.net>
parents: 7158
diff changeset
1048
e6b01bd8d6cd [gaim-migrate @ 7733]
Mark Doliner <mark@kingant.net>
parents: 7158
diff changeset
1049 /* Need to add the 0x00cb TLV to the TLV chain */
e6b01bd8d6cd [gaim-migrate @ 7733]
Mark Doliner <mark@kingant.net>
parents: 7158
diff changeset
1050 aim_tlvlist_replace_32(&tmp->data, 0x00cb, vismask);
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
1051
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1052 /* Sync our local list with the server list */
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1053 aim_ssi_sync(sess);
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1054
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1055 return 0;
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1056 }
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1057
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1058 /**
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1059 * Set buddy icon information
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1060 *
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1061 * @param sess The oscar session.
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1062 * @param iconcsum The MD5 checksum of the icon you are using.
5842
dbed8c87f750 [gaim-migrate @ 6273]
Sean Egan <seanegan@gmail.com>
parents: 5504
diff changeset
1063 * @param iconcsumlen Length of the MD5 checksum given above. Should be 0x10 bytes.
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1064 * @return Return 0 if no errors, otherwise return the error number.
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1065 */
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1066 faim_export int aim_ssi_seticon(aim_session_t *sess, fu8_t *iconsum, fu16_t iconsumlen)
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1067 {
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1068 struct aim_ssi_item *tmp;
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1069 fu8_t *csumdata;
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1070
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1071 if (!sess || !iconsum || !iconsumlen)
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1072 return -EINVAL;
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1073
7166
e6b01bd8d6cd [gaim-migrate @ 7733]
Mark Doliner <mark@kingant.net>
parents: 7158
diff changeset
1074 /* Find the ICONINFO item, or add it if it does not exist */
e6b01bd8d6cd [gaim-migrate @ 7733]
Mark Doliner <mark@kingant.net>
parents: 7158
diff changeset
1075 if (!(tmp = aim_ssi_itemlist_finditem(sess->ssi.local, NULL, "1", AIM_SSI_TYPE_ICONINFO))) {
e6b01bd8d6cd [gaim-migrate @ 7733]
Mark Doliner <mark@kingant.net>
parents: 7158
diff changeset
1076 tmp = aim_ssi_itemlist_add(&sess->ssi.local, "1", 0x0000, 0x51F4, AIM_SSI_TYPE_ICONINFO, NULL);
e6b01bd8d6cd [gaim-migrate @ 7733]
Mark Doliner <mark@kingant.net>
parents: 7158
diff changeset
1077 }
e6b01bd8d6cd [gaim-migrate @ 7733]
Mark Doliner <mark@kingant.net>
parents: 7158
diff changeset
1078
e6b01bd8d6cd [gaim-migrate @ 7733]
Mark Doliner <mark@kingant.net>
parents: 7158
diff changeset
1079 /* Need to add the 0x00d5 TLV to the TLV chain */
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1080 if (!(csumdata = (fu8_t *)malloc((iconsumlen+2)*sizeof(fu8_t))))
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1081 return -ENOMEM;
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1082 csumdata[0] = 0x00;
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1083 csumdata[1] = 0x10;
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1084 memcpy(&csumdata[2], iconsum, iconsumlen);
7166
e6b01bd8d6cd [gaim-migrate @ 7733]
Mark Doliner <mark@kingant.net>
parents: 7158
diff changeset
1085 aim_tlvlist_replace_raw(&tmp->data, 0x00d5, (iconsumlen+2) * sizeof(fu8_t), csumdata);
e6b01bd8d6cd [gaim-migrate @ 7733]
Mark Doliner <mark@kingant.net>
parents: 7158
diff changeset
1086 free(csumdata);
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1087
7166
e6b01bd8d6cd [gaim-migrate @ 7733]
Mark Doliner <mark@kingant.net>
parents: 7158
diff changeset
1088 /* Need to add the 0x0131 TLV to the TLV chain, used to cache the icon */
e6b01bd8d6cd [gaim-migrate @ 7733]
Mark Doliner <mark@kingant.net>
parents: 7158
diff changeset
1089 aim_tlvlist_replace_noval(&tmp->data, 0x0131);
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1090
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1091 /* Sync our local list with the server list */
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1092 aim_ssi_sync(sess);
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
1093 return 0;
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
1094 }
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
1095
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
1096 /**
7313
be7c1468c6a7 [gaim-migrate @ 7897]
Mark Doliner <mark@kingant.net>
parents: 7282
diff changeset
1097 * Remove a reference to a server stored buddy icon. This will make your
be7c1468c6a7 [gaim-migrate @ 7897]
Mark Doliner <mark@kingant.net>
parents: 7282
diff changeset
1098 * icon stop showing up to other people.
be7c1468c6a7 [gaim-migrate @ 7897]
Mark Doliner <mark@kingant.net>
parents: 7282
diff changeset
1099 *
be7c1468c6a7 [gaim-migrate @ 7897]
Mark Doliner <mark@kingant.net>
parents: 7282
diff changeset
1100 * @param sess The oscar session.
be7c1468c6a7 [gaim-migrate @ 7897]
Mark Doliner <mark@kingant.net>
parents: 7282
diff changeset
1101 * @return Return 0 if no errors, otherwise return the error number.
be7c1468c6a7 [gaim-migrate @ 7897]
Mark Doliner <mark@kingant.net>
parents: 7282
diff changeset
1102 */
be7c1468c6a7 [gaim-migrate @ 7897]
Mark Doliner <mark@kingant.net>
parents: 7282
diff changeset
1103 faim_export int aim_ssi_delicon(aim_session_t *sess)
be7c1468c6a7 [gaim-migrate @ 7897]
Mark Doliner <mark@kingant.net>
parents: 7282
diff changeset
1104 {
be7c1468c6a7 [gaim-migrate @ 7897]
Mark Doliner <mark@kingant.net>
parents: 7282
diff changeset
1105 struct aim_ssi_item *tmp;
be7c1468c6a7 [gaim-migrate @ 7897]
Mark Doliner <mark@kingant.net>
parents: 7282
diff changeset
1106
be7c1468c6a7 [gaim-migrate @ 7897]
Mark Doliner <mark@kingant.net>
parents: 7282
diff changeset
1107 if (!sess)
be7c1468c6a7 [gaim-migrate @ 7897]
Mark Doliner <mark@kingant.net>
parents: 7282
diff changeset
1108 return -EINVAL;
be7c1468c6a7 [gaim-migrate @ 7897]
Mark Doliner <mark@kingant.net>
parents: 7282
diff changeset
1109
be7c1468c6a7 [gaim-migrate @ 7897]
Mark Doliner <mark@kingant.net>
parents: 7282
diff changeset
1110 /* Find the ICONINFO item and delete it if it exists*/
be7c1468c6a7 [gaim-migrate @ 7897]
Mark Doliner <mark@kingant.net>
parents: 7282
diff changeset
1111 if ((tmp = aim_ssi_itemlist_finditem(sess->ssi.local, NULL, "1", AIM_SSI_TYPE_ICONINFO)))
be7c1468c6a7 [gaim-migrate @ 7897]
Mark Doliner <mark@kingant.net>
parents: 7282
diff changeset
1112 aim_ssi_itemlist_del(&sess->ssi.local, tmp);
be7c1468c6a7 [gaim-migrate @ 7897]
Mark Doliner <mark@kingant.net>
parents: 7282
diff changeset
1113
be7c1468c6a7 [gaim-migrate @ 7897]
Mark Doliner <mark@kingant.net>
parents: 7282
diff changeset
1114 /* Sync our local list with the server list */
be7c1468c6a7 [gaim-migrate @ 7897]
Mark Doliner <mark@kingant.net>
parents: 7282
diff changeset
1115 aim_ssi_sync(sess);
be7c1468c6a7 [gaim-migrate @ 7897]
Mark Doliner <mark@kingant.net>
parents: 7282
diff changeset
1116 return 0;
be7c1468c6a7 [gaim-migrate @ 7897]
Mark Doliner <mark@kingant.net>
parents: 7282
diff changeset
1117 }
be7c1468c6a7 [gaim-migrate @ 7897]
Mark Doliner <mark@kingant.net>
parents: 7282
diff changeset
1118
be7c1468c6a7 [gaim-migrate @ 7897]
Mark Doliner <mark@kingant.net>
parents: 7282
diff changeset
1119 /**
8233
4f70e8b3e05e [gaim-migrate @ 8956]
Mark Doliner <mark@kingant.net>
parents: 8227
diff changeset
1120 * Stores your setting for various SSI settings. Whether you
4f70e8b3e05e [gaim-migrate @ 8956]
Mark Doliner <mark@kingant.net>
parents: 8227
diff changeset
1121 * should show up as idle or not, etc.
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
1122 *
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
1123 * @param sess The oscar session.
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
1124 * @param presence I think it's a bitmask, but I only know what one of the bits is:
7218
5f4bccd8e3fd [gaim-migrate @ 7787]
Mark Doliner <mark@kingant.net>
parents: 7172
diff changeset
1125 * 0x00000002 - Hide wireless?
3210
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
1126 * 0x00000400 - Allow others to see your idle time
5e90ecb578c5 [gaim-migrate @ 3227]
Sean Egan <seanegan@gmail.com>
parents: 3140
diff changeset
1127 * @return Return 0 if no errors, otherwise return the error number.
3109
51f49dcbd14b [gaim-migrate @ 3123]
Sean Egan <seanegan@gmail.com>
parents: 3090
diff changeset
1128 */
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1129 faim_export int aim_ssi_setpresence(aim_session_t *sess, fu32_t presence) {
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1130 struct aim_ssi_item *tmp;
3109
51f49dcbd14b [gaim-migrate @ 3123]
Sean Egan <seanegan@gmail.com>
parents: 3090
diff changeset
1131
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1132 if (!sess)
3109
51f49dcbd14b [gaim-migrate @ 3123]
Sean Egan <seanegan@gmail.com>
parents: 3090
diff changeset
1133 return -EINVAL;
51f49dcbd14b [gaim-migrate @ 3123]
Sean Egan <seanegan@gmail.com>
parents: 3090
diff changeset
1134
7166
e6b01bd8d6cd [gaim-migrate @ 7733]
Mark Doliner <mark@kingant.net>
parents: 7158
diff changeset
1135 /* Find the PRESENCEPREFS item, or add it if it does not exist */
e6b01bd8d6cd [gaim-migrate @ 7733]
Mark Doliner <mark@kingant.net>
parents: 7158
diff changeset
1136 if (!(tmp = aim_ssi_itemlist_finditem(sess->ssi.local, NULL, NULL, AIM_SSI_TYPE_PRESENCEPREFS)))
e6b01bd8d6cd [gaim-migrate @ 7733]
Mark Doliner <mark@kingant.net>
parents: 7158
diff changeset
1137 tmp = aim_ssi_itemlist_add(&sess->ssi.local, NULL, 0x0000, 0xFFFF, AIM_SSI_TYPE_PRESENCEPREFS, NULL);
3109
51f49dcbd14b [gaim-migrate @ 3123]
Sean Egan <seanegan@gmail.com>
parents: 3090
diff changeset
1138
7166
e6b01bd8d6cd [gaim-migrate @ 7733]
Mark Doliner <mark@kingant.net>
parents: 7158
diff changeset
1139 /* Need to add the x00c9 TLV to the TLV chain */
e6b01bd8d6cd [gaim-migrate @ 7733]
Mark Doliner <mark@kingant.net>
parents: 7158
diff changeset
1140 aim_tlvlist_replace_32(&tmp->data, 0x00c9, presence);
3109
51f49dcbd14b [gaim-migrate @ 3123]
Sean Egan <seanegan@gmail.com>
parents: 3090
diff changeset
1141
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1142 /* Sync our local list with the server list */
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1143 aim_ssi_sync(sess);
3109
51f49dcbd14b [gaim-migrate @ 3123]
Sean Egan <seanegan@gmail.com>
parents: 3090
diff changeset
1144
51f49dcbd14b [gaim-migrate @ 3123]
Sean Egan <seanegan@gmail.com>
parents: 3090
diff changeset
1145 return 0;
51f49dcbd14b [gaim-migrate @ 3123]
Sean Egan <seanegan@gmail.com>
parents: 3090
diff changeset
1146 }
51f49dcbd14b [gaim-migrate @ 3123]
Sean Egan <seanegan@gmail.com>
parents: 3090
diff changeset
1147
51f49dcbd14b [gaim-migrate @ 3123]
Sean Egan <seanegan@gmail.com>
parents: 3090
diff changeset
1148 /*
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1149 * Subtype 0x0002 - Request SSI Rights.
2672
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1150 */
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1151 faim_export int aim_ssi_reqrights(aim_session_t *sess)
2672
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1152 {
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1153 aim_conn_t *conn;
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1154
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1155 if (!sess || !(conn = aim_conn_findbygroup(sess, AIM_CB_FAM_SSI)))
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1156 return -EINVAL;
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1157
7282
ad243bc63184 [gaim-migrate @ 7861]
Mark Doliner <mark@kingant.net>
parents: 7218
diff changeset
1158 return aim_genericreq_n_snacid(sess, conn, AIM_CB_FAM_SSI, AIM_CB_SSI_REQRIGHTS);
2672
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1159 }
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1160
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1161 /*
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1162 * Subtype 0x0003 - SSI Rights Information.
2672
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1163 */
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1164 static int parserights(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, aim_bstream_t *bs)
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1165 {
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1166 int ret = 0, i;
2672
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1167 aim_rxcallback_t userfunc;
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1168 aim_tlvlist_t *tlvlist;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1169 aim_tlv_t *tlv;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1170 aim_bstream_t bstream;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1171 fu16_t *maxitems;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1172
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1173 /* This SNAC is made up of a bunch of TLVs */
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1174 tlvlist = aim_tlvlist_read(bs);
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1175
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1176 /* TLV 0x0004 contains the maximum number of each item */
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1177 if (!(tlv = aim_tlv_gettlv(tlvlist, 0x0004, 1))) {
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1178 aim_tlvlist_free(&tlvlist);
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1179 return 0;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1180 }
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1181
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1182 aim_bstream_init(&bstream, tlv->value, tlv->length);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1183
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1184 if (!(maxitems = (fu16_t *)malloc((tlv->length/2)*sizeof(fu16_t)))) {
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1185 aim_tlvlist_free(&tlvlist);
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1186 return 0;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1187 }
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1188
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1189 for (i=0; i<(tlv->length/2); i++)
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1190 maxitems[i] = aimbs_get16(&bstream);
2672
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1191
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1192 if ((userfunc = aim_callhandler(sess, rx->conn, snac->family, snac->subtype)))
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1193 ret = userfunc(sess, rx, tlv->length/2, maxitems);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1194
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1195 aim_tlvlist_free(&tlvlist);
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1196 free(maxitems);
2672
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1197
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1198 return ret;
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1199 }
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1200
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1201 /*
6350
34c07f5f34a0 [gaim-migrate @ 6849]
Mark Doliner <mark@kingant.net>
parents: 6101
diff changeset
1202 * Subtype 0x0004 - Request SSI Data when you don't have a timestamp and
34c07f5f34a0 [gaim-migrate @ 6849]
Mark Doliner <mark@kingant.net>
parents: 6101
diff changeset
1203 * revision number.
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1204 *
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1205 */
6350
34c07f5f34a0 [gaim-migrate @ 6849]
Mark Doliner <mark@kingant.net>
parents: 6101
diff changeset
1206 faim_export int aim_ssi_reqdata(aim_session_t *sess)
34c07f5f34a0 [gaim-migrate @ 6849]
Mark Doliner <mark@kingant.net>
parents: 6101
diff changeset
1207 {
34c07f5f34a0 [gaim-migrate @ 6849]
Mark Doliner <mark@kingant.net>
parents: 6101
diff changeset
1208 aim_conn_t *conn;
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1209
6350
34c07f5f34a0 [gaim-migrate @ 6849]
Mark Doliner <mark@kingant.net>
parents: 6101
diff changeset
1210 if (!sess || !(conn = aim_conn_findbygroup(sess, AIM_CB_FAM_SSI)))
34c07f5f34a0 [gaim-migrate @ 6849]
Mark Doliner <mark@kingant.net>
parents: 6101
diff changeset
1211 return -EINVAL;
34c07f5f34a0 [gaim-migrate @ 6849]
Mark Doliner <mark@kingant.net>
parents: 6101
diff changeset
1212
34c07f5f34a0 [gaim-migrate @ 6849]
Mark Doliner <mark@kingant.net>
parents: 6101
diff changeset
1213 /* Free any current data, just in case */
34c07f5f34a0 [gaim-migrate @ 6849]
Mark Doliner <mark@kingant.net>
parents: 6101
diff changeset
1214 aim_ssi_freelist(sess);
34c07f5f34a0 [gaim-migrate @ 6849]
Mark Doliner <mark@kingant.net>
parents: 6101
diff changeset
1215
34c07f5f34a0 [gaim-migrate @ 6849]
Mark Doliner <mark@kingant.net>
parents: 6101
diff changeset
1216 return aim_genericreq_n_snacid(sess, conn, AIM_CB_FAM_SSI, AIM_CB_SSI_REQDATA);
34c07f5f34a0 [gaim-migrate @ 6849]
Mark Doliner <mark@kingant.net>
parents: 6101
diff changeset
1217 }
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1218
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1219 /*
6350
34c07f5f34a0 [gaim-migrate @ 6849]
Mark Doliner <mark@kingant.net>
parents: 6101
diff changeset
1220 * Subtype 0x0005 - Request SSI Data when you have a timestamp and revision
34c07f5f34a0 [gaim-migrate @ 6849]
Mark Doliner <mark@kingant.net>
parents: 6101
diff changeset
1221 * number.
2672
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1222 *
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1223 * The data will only be sent if it is newer than the posted local
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1224 * timestamp and revision.
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1225 *
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1226 * Note that the client should never increment the revision, only the server.
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1227 *
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1228 */
6350
34c07f5f34a0 [gaim-migrate @ 6849]
Mark Doliner <mark@kingant.net>
parents: 6101
diff changeset
1229 faim_export int aim_ssi_reqifchanged(aim_session_t *sess, time_t timestamp, fu16_t numitems)
2672
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1230 {
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1231 aim_conn_t *conn;
2672
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1232 aim_frame_t *fr;
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1233 aim_snacid_t snacid;
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1234
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1235 if (!sess || !(conn = aim_conn_findbygroup(sess, AIM_CB_FAM_SSI)))
2672
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1236 return -EINVAL;
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1237
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1238 if (!(fr = aim_tx_new(sess, conn, AIM_FRAMETYPE_FLAP, 0x02, 10+4+2)))
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1239 return -ENOMEM;
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1240
6350
34c07f5f34a0 [gaim-migrate @ 6849]
Mark Doliner <mark@kingant.net>
parents: 6101
diff changeset
1241 snacid = aim_cachesnac(sess, AIM_CB_FAM_SSI, AIM_CB_SSI_REQIFCHANGED, 0x0000, NULL, 0);
2672
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1242
6350
34c07f5f34a0 [gaim-migrate @ 6849]
Mark Doliner <mark@kingant.net>
parents: 6101
diff changeset
1243 aim_putsnac(&fr->data, AIM_CB_FAM_SSI, AIM_CB_SSI_REQIFCHANGED, 0x0000, snacid);
4282
aa20cc16dc08 [gaim-migrate @ 4533]
Mark Doliner <mark@kingant.net>
parents: 4269
diff changeset
1244 aimbs_put32(&fr->data, timestamp);
aa20cc16dc08 [gaim-migrate @ 4533]
Mark Doliner <mark@kingant.net>
parents: 4269
diff changeset
1245 aimbs_put16(&fr->data, numitems);
2672
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1246
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1247 aim_tx_enqueue(sess, fr);
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1248
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1249 /* Free any current data, just in case */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1250 aim_ssi_freelist(sess);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1251
2672
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1252 return 0;
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1253 }
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1254
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1255 /*
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1256 * Subtype 0x0006 - SSI Data.
2672
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1257 */
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1258 static int parsedata(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, aim_bstream_t *bs)
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1259 {
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1260 int ret = 0;
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1261 aim_rxcallback_t userfunc;
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1262 fu8_t fmtver; /* guess */
4282
aa20cc16dc08 [gaim-migrate @ 4533]
Mark Doliner <mark@kingant.net>
parents: 4269
diff changeset
1263 fu16_t namelen, gid, bid, type;
4236
9641bd9c79f5 [gaim-migrate @ 4482]
Mark Doliner <mark@kingant.net>
parents: 4235
diff changeset
1264 char *name;
9641bd9c79f5 [gaim-migrate @ 4482]
Mark Doliner <mark@kingant.net>
parents: 4235
diff changeset
1265 aim_tlvlist_t *data;
2672
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1266
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
1267 fmtver = aimbs_get8(bs); /* Version of ssi data. Should be 0x00 */
4282
aa20cc16dc08 [gaim-migrate @ 4533]
Mark Doliner <mark@kingant.net>
parents: 4269
diff changeset
1268 sess->ssi.numitems += aimbs_get16(bs); /* # of items in this SSI SNAC */
2672
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1269
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1270 /* Read in the list */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1271 while (aim_bstream_empty(bs) > 4) { /* last four bytes are timestamp */
2672
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1272 if ((namelen = aimbs_get16(bs)))
4236
9641bd9c79f5 [gaim-migrate @ 4482]
Mark Doliner <mark@kingant.net>
parents: 4235
diff changeset
1273 name = aimbs_getstr(bs, namelen);
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1274 else
4236
9641bd9c79f5 [gaim-migrate @ 4482]
Mark Doliner <mark@kingant.net>
parents: 4235
diff changeset
1275 name = NULL;
9641bd9c79f5 [gaim-migrate @ 4482]
Mark Doliner <mark@kingant.net>
parents: 4235
diff changeset
1276 gid = aimbs_get16(bs);
9641bd9c79f5 [gaim-migrate @ 4482]
Mark Doliner <mark@kingant.net>
parents: 4235
diff changeset
1277 bid = aimbs_get16(bs);
9641bd9c79f5 [gaim-migrate @ 4482]
Mark Doliner <mark@kingant.net>
parents: 4235
diff changeset
1278 type = aimbs_get16(bs);
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1279 data = aim_tlvlist_readlen(bs, aimbs_get16(bs));
4236
9641bd9c79f5 [gaim-migrate @ 4482]
Mark Doliner <mark@kingant.net>
parents: 4235
diff changeset
1280 aim_ssi_itemlist_add(&sess->ssi.official, name, gid, bid, type, data);
9641bd9c79f5 [gaim-migrate @ 4482]
Mark Doliner <mark@kingant.net>
parents: 4235
diff changeset
1281 free(name);
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1282 aim_tlvlist_free(&data);
2672
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1283 }
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1284
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1285 /* Read in the timestamp */
4282
aa20cc16dc08 [gaim-migrate @ 4533]
Mark Doliner <mark@kingant.net>
parents: 4269
diff changeset
1286 sess->ssi.timestamp = aimbs_get32(bs);
2672
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1287
4317
7c9f3d0fe8b2 [gaim-migrate @ 4571]
Mark Doliner <mark@kingant.net>
parents: 4308
diff changeset
1288 if (!(snac->flags & 0x0001)) {
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1289 /* Make a copy of the list */
4236
9641bd9c79f5 [gaim-migrate @ 4482]
Mark Doliner <mark@kingant.net>
parents: 4235
diff changeset
1290 struct aim_ssi_item *cur;
9641bd9c79f5 [gaim-migrate @ 4482]
Mark Doliner <mark@kingant.net>
parents: 4235
diff changeset
1291 for (cur=sess->ssi.official; cur; cur=cur->next)
9641bd9c79f5 [gaim-migrate @ 4482]
Mark Doliner <mark@kingant.net>
parents: 4235
diff changeset
1292 aim_ssi_itemlist_add(&sess->ssi.local, cur->name, cur->gid, cur->bid, cur->type, cur->data);
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1293
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1294 sess->ssi.received_data = 1;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1295
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1296 if ((userfunc = aim_callhandler(sess, rx->conn, snac->family, snac->subtype)))
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1297 ret = userfunc(sess, rx, fmtver, sess->ssi.numitems, sess->ssi.official, sess->ssi.timestamp);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1298 }
2672
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1299
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1300 return ret;
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1301 }
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1302
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1303 /*
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1304 * Subtype 0x0007 - SSI Activate Data.
2672
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1305 *
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1306 * Should be sent after receiving 13/6 or 13/f to tell the server you
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1307 * are ready to begin using the list. It will promptly give you the
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1308 * presence information for everyone in your list and put your permit/deny
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1309 * settings into effect.
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1310 *
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1311 */
4642
c0abcd675ca6 [gaim-migrate @ 4952]
Mark Doliner <mark@kingant.net>
parents: 4423
diff changeset
1312 faim_export int aim_ssi_enable(aim_session_t *sess)
2672
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1313 {
4642
c0abcd675ca6 [gaim-migrate @ 4952]
Mark Doliner <mark@kingant.net>
parents: 4423
diff changeset
1314 aim_conn_t *conn;
c0abcd675ca6 [gaim-migrate @ 4952]
Mark Doliner <mark@kingant.net>
parents: 4423
diff changeset
1315
c0abcd675ca6 [gaim-migrate @ 4952]
Mark Doliner <mark@kingant.net>
parents: 4423
diff changeset
1316 if (!sess || !(conn = aim_conn_findbygroup(sess, AIM_CB_FAM_SSI)))
c0abcd675ca6 [gaim-migrate @ 4952]
Mark Doliner <mark@kingant.net>
parents: 4423
diff changeset
1317 return -EINVAL;
c0abcd675ca6 [gaim-migrate @ 4952]
Mark Doliner <mark@kingant.net>
parents: 4423
diff changeset
1318
3017
f0e8770d786d [gaim-migrate @ 3030]
Rob Flynn <gaim@robflynn.com>
parents: 3000
diff changeset
1319 return aim_genericreq_n(sess, conn, AIM_CB_FAM_SSI, 0x0007);
2672
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1320 }
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1321
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1322 /*
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1323 * Subtype 0x0008/0x0009/0x000a - SSI Add/Mod/Del Item(s).
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
1324 *
3017
f0e8770d786d [gaim-migrate @ 3030]
Rob Flynn <gaim@robflynn.com>
parents: 3000
diff changeset
1325 * Sends the SNAC to add, modify, or delete an item from the server-stored
f0e8770d786d [gaim-migrate @ 3030]
Rob Flynn <gaim@robflynn.com>
parents: 3000
diff changeset
1326 * information. These 3 SNACs all have an identical structure. The only
f0e8770d786d [gaim-migrate @ 3030]
Rob Flynn <gaim@robflynn.com>
parents: 3000
diff changeset
1327 * difference is the subtype that is set for the SNAC.
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
1328 *
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
1329 */
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1330 faim_export int aim_ssi_addmoddel(aim_session_t *sess)
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
1331 {
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1332 aim_conn_t *conn;
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
1333 aim_frame_t *fr;
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
1334 aim_snacid_t snacid;
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1335 int snaclen;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1336 struct aim_ssi_tmp *cur;
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
1337
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1338 if (!sess || !(conn = aim_conn_findbygroup(sess, AIM_CB_FAM_SSI)) || !sess->ssi.pending || !sess->ssi.pending->item)
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
1339 return -EINVAL;
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
1340
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1341 /* Calculate total SNAC size */
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
1342 snaclen = 10; /* For family, subtype, flags, and SNAC ID */
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1343 for (cur=sess->ssi.pending; cur; cur=cur->next) {
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
1344 snaclen += 10; /* For length, GID, BID, type, and length */
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1345 if (cur->item->name)
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1346 snaclen += strlen(cur->item->name);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1347 if (cur->item->data)
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1348 snaclen += aim_tlvlist_size(&cur->item->data);
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
1349 }
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
1350
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
1351 if (!(fr = aim_tx_new(sess, conn, AIM_FRAMETYPE_FLAP, 0x02, snaclen)))
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
1352 return -ENOMEM;
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
1353
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1354 snacid = aim_cachesnac(sess, AIM_CB_FAM_SSI, sess->ssi.pending->action, 0x0000, NULL, 0);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1355 aim_putsnac(&fr->data, AIM_CB_FAM_SSI, sess->ssi.pending->action, 0x0000, snacid);
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
1356
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1357 for (cur=sess->ssi.pending; cur; cur=cur->next) {
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1358 aimbs_put16(&fr->data, cur->item->name ? strlen(cur->item->name) : 0);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1359 if (cur->item->name)
10990
8d74ae785a46 [gaim-migrate @ 12828]
Mark Doliner <mark@kingant.net>
parents: 10986
diff changeset
1360 aimbs_putstr(&fr->data, cur->item->name);
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1361 aimbs_put16(&fr->data, cur->item->gid);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1362 aimbs_put16(&fr->data, cur->item->bid);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1363 aimbs_put16(&fr->data, cur->item->type);
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1364 aimbs_put16(&fr->data, cur->item->data ? aim_tlvlist_size(&cur->item->data) : 0);
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1365 if (cur->item->data)
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1366 aim_tlvlist_write(&fr->data, &cur->item->data);
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
1367 }
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
1368
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1369 aim_tx_enqueue(sess, fr);
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
1370
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
1371 return 0;
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
1372 }
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
1373
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
1374 /*
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1375 * Subtype 0x0008 - Incoming SSI add.
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1376 *
8226
c5e3797e7dbb [gaim-migrate @ 8949]
Mark Doliner <mark@kingant.net>
parents: 7313
diff changeset
1377 * Sent by the server, for example, when someone is added to
c5e3797e7dbb [gaim-migrate @ 8949]
Mark Doliner <mark@kingant.net>
parents: 7313
diff changeset
1378 * your "Recent Buddies" group.
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1379 */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1380 static int parseadd(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, aim_bstream_t *bs)
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1381 {
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1382 int ret = 0;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1383 aim_rxcallback_t userfunc;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1384 char *name;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1385 fu16_t len, gid, bid, type;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1386 aim_tlvlist_t *data;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1387
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1388 while (aim_bstream_empty(bs)) {
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1389 if ((len = aimbs_get16(bs)))
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1390 name = aimbs_getstr(bs, len);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1391 else
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1392 name = NULL;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1393 gid = aimbs_get16(bs);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1394 bid = aimbs_get16(bs);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1395 type = aimbs_get16(bs);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1396 if ((len = aimbs_get16(bs)))
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1397 data = aim_tlvlist_readlen(bs, len);
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1398 else
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1399 data = NULL;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1400
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1401 aim_ssi_itemlist_add(&sess->ssi.local, name, gid, bid, type, data);
4236
9641bd9c79f5 [gaim-migrate @ 4482]
Mark Doliner <mark@kingant.net>
parents: 4235
diff changeset
1402 aim_ssi_itemlist_add(&sess->ssi.official, name, gid, bid, type, data);
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1403 aim_tlvlist_free(&data);
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1404
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1405 if ((userfunc = aim_callhandler(sess, rx->conn, snac->family, snac->subtype)))
8227
b01822d23da3 [gaim-migrate @ 8950]
Mark Doliner <mark@kingant.net>
parents: 8226
diff changeset
1406 ret = userfunc(sess, rx, type, name);
b01822d23da3 [gaim-migrate @ 8950]
Mark Doliner <mark@kingant.net>
parents: 8226
diff changeset
1407
b01822d23da3 [gaim-migrate @ 8950]
Mark Doliner <mark@kingant.net>
parents: 8226
diff changeset
1408 free(name);
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1409 }
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1410
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1411 return ret;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1412 }
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1413
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1414 /*
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1415 * Subtype 0x0009 - Incoming SSI mod.
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1416 *
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1417 * XXX - It would probably be good for the client to actually do something when it gets this.
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1418 */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1419 static int parsemod(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, aim_bstream_t *bs)
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1420 {
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1421 int ret = 0;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1422 aim_rxcallback_t userfunc;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1423 char *name;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1424 fu16_t len, gid, bid, type;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1425 aim_tlvlist_t *data;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1426 struct aim_ssi_item *item;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1427
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1428 while (aim_bstream_empty(bs)) {
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1429 if ((len = aimbs_get16(bs)))
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1430 name = aimbs_getstr(bs, len);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1431 else
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1432 name = NULL;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1433 gid = aimbs_get16(bs);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1434 bid = aimbs_get16(bs);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1435 type = aimbs_get16(bs);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1436 if ((len = aimbs_get16(bs)))
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1437 data = aim_tlvlist_readlen(bs, len);
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1438 else
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1439 data = NULL;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1440
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1441 /* Replace the 2 local items with the given one */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1442 if ((item = aim_ssi_itemlist_find(sess->ssi.local, gid, bid))) {
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1443 item->type = type;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1444 free(item->name);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1445 if (name) {
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1446 item->name = (char *)malloc((strlen(name)+1)*sizeof(char));
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1447 strcpy(item->name, name);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1448 } else
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1449 item->name = NULL;
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1450 aim_tlvlist_free(&item->data);
4234
64d834b6caf2 [gaim-migrate @ 4480]
Mark Doliner <mark@kingant.net>
parents: 4230
diff changeset
1451 item->data = aim_tlvlist_copy(data);
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1452 }
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1453
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1454 if ((item = aim_ssi_itemlist_find(sess->ssi.official, gid, bid))) {
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1455 item->type = type;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1456 free(item->name);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1457 if (name) {
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1458 item->name = (char *)malloc((strlen(name)+1)*sizeof(char));
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1459 strcpy(item->name, name);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1460 } else
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1461 item->name = NULL;
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1462 aim_tlvlist_free(&item->data);
4234
64d834b6caf2 [gaim-migrate @ 4480]
Mark Doliner <mark@kingant.net>
parents: 4230
diff changeset
1463 item->data = aim_tlvlist_copy(data);
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1464 }
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1465
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1466 if ((userfunc = aim_callhandler(sess, rx->conn, snac->family, snac->subtype)))
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1467 ret = userfunc(sess, rx);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1468
4236
9641bd9c79f5 [gaim-migrate @ 4482]
Mark Doliner <mark@kingant.net>
parents: 4235
diff changeset
1469 free(name);
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1470 aim_tlvlist_free(&data);
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1471 }
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1472
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1473 return ret;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1474 }
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1475
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1476 /*
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1477 * Subtype 0x000a - Incoming SSI del.
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1478 *
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1479 * XXX - It would probably be good for the client to actually do something when it gets this.
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1480 */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1481 static int parsedel(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, aim_bstream_t *bs)
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1482 {
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1483 int ret = 0;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1484 aim_rxcallback_t userfunc;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1485 fu16_t gid, bid;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1486 struct aim_ssi_item *del;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1487
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1488 while (aim_bstream_empty(bs)) {
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1489 aim_bstream_advance(bs, aimbs_get16(bs));
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1490 gid = aimbs_get16(bs);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1491 bid = aimbs_get16(bs);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1492 aimbs_get16(bs);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1493 aim_bstream_advance(bs, aimbs_get16(bs));
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1494
4358
2b8abf7f9cc1 [gaim-migrate @ 4624]
Mark Doliner <mark@kingant.net>
parents: 4347
diff changeset
1495 if ((del = aim_ssi_itemlist_find(sess->ssi.local, gid, bid)))
2b8abf7f9cc1 [gaim-migrate @ 4624]
Mark Doliner <mark@kingant.net>
parents: 4347
diff changeset
1496 aim_ssi_itemlist_del(&sess->ssi.local, del);
2b8abf7f9cc1 [gaim-migrate @ 4624]
Mark Doliner <mark@kingant.net>
parents: 4347
diff changeset
1497 if ((del = aim_ssi_itemlist_find(sess->ssi.official, gid, bid)))
2b8abf7f9cc1 [gaim-migrate @ 4624]
Mark Doliner <mark@kingant.net>
parents: 4347
diff changeset
1498 aim_ssi_itemlist_del(&sess->ssi.official, del);
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1499
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1500 if ((userfunc = aim_callhandler(sess, rx->conn, snac->family, snac->subtype)))
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1501 ret = userfunc(sess, rx);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1502 }
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1503
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1504 return ret;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1505 }
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1506
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1507 /*
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1508 * Subtype 0x000e - SSI Add/Mod/Del Ack.
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
1509 *
3017
f0e8770d786d [gaim-migrate @ 3030]
Rob Flynn <gaim@robflynn.com>
parents: 3000
diff changeset
1510 * Response to add, modify, or delete SNAC (sent with aim_ssi_addmoddel).
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
1511 *
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
1512 */
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
1513 static int parseack(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, aim_bstream_t *bs)
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
1514 {
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
1515 int ret = 0;
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
1516 aim_rxcallback_t userfunc;
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1517 struct aim_ssi_tmp *cur, *del;
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
1518
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1519 /* Read in the success/failure flags from the ack SNAC */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1520 cur = sess->ssi.pending;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1521 while (cur && (aim_bstream_empty(bs)>0)) {
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1522 cur->ack = aimbs_get16(bs);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1523 cur = cur->next;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1524 }
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1525
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1526 /*
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1527 * If outcome is 0, then add the item to the item list, or replace the other item,
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1528 * or remove the old item. If outcome is non-zero, then remove the item from the
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1529 * local list, or unmodify it, or add it.
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1530 */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1531 for (cur=sess->ssi.pending; (cur && (cur->ack != 0xffff)); cur=cur->next) {
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1532 if (cur->item) {
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1533 if (cur->ack) {
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1534 /* Our action was unsuccessful, so change the local list back to how it was */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1535 if (cur->action == AIM_CB_SSI_ADD) {
4791
e737e3e08b4a [gaim-migrate @ 5111]
Mark Doliner <mark@kingant.net>
parents: 4789
diff changeset
1536 /* Remove the item from the local list */
e737e3e08b4a [gaim-migrate @ 5111]
Mark Doliner <mark@kingant.net>
parents: 4789
diff changeset
1537 /* Make sure cur->item is still valid memory */
4789
f1fde07ed951 [gaim-migrate @ 5109]
Mark Doliner <mark@kingant.net>
parents: 4642
diff changeset
1538 if (aim_ssi_itemlist_valid(sess->ssi.local, cur->item)) {
f1fde07ed951 [gaim-migrate @ 5109]
Mark Doliner <mark@kingant.net>
parents: 4642
diff changeset
1539 if (cur->item->name) {
f1fde07ed951 [gaim-migrate @ 5109]
Mark Doliner <mark@kingant.net>
parents: 4642
diff changeset
1540 cur->name = (char *)malloc((strlen(cur->item->name)+1)*sizeof(char));
f1fde07ed951 [gaim-migrate @ 5109]
Mark Doliner <mark@kingant.net>
parents: 4642
diff changeset
1541 strcpy(cur->name, cur->item->name);
f1fde07ed951 [gaim-migrate @ 5109]
Mark Doliner <mark@kingant.net>
parents: 4642
diff changeset
1542 }
f1fde07ed951 [gaim-migrate @ 5109]
Mark Doliner <mark@kingant.net>
parents: 4642
diff changeset
1543 aim_ssi_itemlist_del(&sess->ssi.local, cur->item);
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1544 }
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1545 cur->item = NULL;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1546
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1547 } else if (cur->action == AIM_CB_SSI_MOD) {
4292
78a3d2caf84c [gaim-migrate @ 4545]
Mark Doliner <mark@kingant.net>
parents: 4282
diff changeset
1548 /* Replace the local item with the item from the official list */
4789
f1fde07ed951 [gaim-migrate @ 5109]
Mark Doliner <mark@kingant.net>
parents: 4642
diff changeset
1549 if (aim_ssi_itemlist_valid(sess->ssi.local, cur->item)) {
f1fde07ed951 [gaim-migrate @ 5109]
Mark Doliner <mark@kingant.net>
parents: 4642
diff changeset
1550 struct aim_ssi_item *cur1;
f1fde07ed951 [gaim-migrate @ 5109]
Mark Doliner <mark@kingant.net>
parents: 4642
diff changeset
1551 if ((cur1 = aim_ssi_itemlist_find(sess->ssi.official, cur->item->gid, cur->item->bid))) {
f1fde07ed951 [gaim-migrate @ 5109]
Mark Doliner <mark@kingant.net>
parents: 4642
diff changeset
1552 free(cur->item->name);
f1fde07ed951 [gaim-migrate @ 5109]
Mark Doliner <mark@kingant.net>
parents: 4642
diff changeset
1553 if (cur1->name) {
f1fde07ed951 [gaim-migrate @ 5109]
Mark Doliner <mark@kingant.net>
parents: 4642
diff changeset
1554 cur->item->name = (char *)malloc((strlen(cur1->name)+1)*sizeof(char));
f1fde07ed951 [gaim-migrate @ 5109]
Mark Doliner <mark@kingant.net>
parents: 4642
diff changeset
1555 strcpy(cur->item->name, cur1->name);
f1fde07ed951 [gaim-migrate @ 5109]
Mark Doliner <mark@kingant.net>
parents: 4642
diff changeset
1556 } else
f1fde07ed951 [gaim-migrate @ 5109]
Mark Doliner <mark@kingant.net>
parents: 4642
diff changeset
1557 cur->item->name = NULL;
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1558 aim_tlvlist_free(&cur->item->data);
4789
f1fde07ed951 [gaim-migrate @ 5109]
Mark Doliner <mark@kingant.net>
parents: 4642
diff changeset
1559 cur->item->data = aim_tlvlist_copy(cur1->data);
f1fde07ed951 [gaim-migrate @ 5109]
Mark Doliner <mark@kingant.net>
parents: 4642
diff changeset
1560 }
f1fde07ed951 [gaim-migrate @ 5109]
Mark Doliner <mark@kingant.net>
parents: 4642
diff changeset
1561 } else
f1fde07ed951 [gaim-migrate @ 5109]
Mark Doliner <mark@kingant.net>
parents: 4642
diff changeset
1562 cur->item = NULL;
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1563
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1564 } else if (cur->action == AIM_CB_SSI_DEL) {
4236
9641bd9c79f5 [gaim-migrate @ 4482]
Mark Doliner <mark@kingant.net>
parents: 4235
diff changeset
1565 /* Add the item back into the local list */
4791
e737e3e08b4a [gaim-migrate @ 5111]
Mark Doliner <mark@kingant.net>
parents: 4789
diff changeset
1566 if (aim_ssi_itemlist_valid(sess->ssi.official, cur->item)) {
4789
f1fde07ed951 [gaim-migrate @ 5109]
Mark Doliner <mark@kingant.net>
parents: 4642
diff changeset
1567 aim_ssi_itemlist_add(&sess->ssi.local, cur->item->name, cur->item->gid, cur->item->bid, cur->item->type, cur->item->data);
f1fde07ed951 [gaim-migrate @ 5109]
Mark Doliner <mark@kingant.net>
parents: 4642
diff changeset
1568 } else
f1fde07ed951 [gaim-migrate @ 5109]
Mark Doliner <mark@kingant.net>
parents: 4642
diff changeset
1569 cur->item = NULL;
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1570 }
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1571
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1572 } else {
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1573 /* Do the exact opposite */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1574 if (cur->action == AIM_CB_SSI_ADD) {
4791
e737e3e08b4a [gaim-migrate @ 5111]
Mark Doliner <mark@kingant.net>
parents: 4789
diff changeset
1575 /* Add the local item to the official list */
e737e3e08b4a [gaim-migrate @ 5111]
Mark Doliner <mark@kingant.net>
parents: 4789
diff changeset
1576 if (aim_ssi_itemlist_valid(sess->ssi.local, cur->item)) {
e737e3e08b4a [gaim-migrate @ 5111]
Mark Doliner <mark@kingant.net>
parents: 4789
diff changeset
1577 aim_ssi_itemlist_add(&sess->ssi.official, cur->item->name, cur->item->gid, cur->item->bid, cur->item->type, cur->item->data);
e737e3e08b4a [gaim-migrate @ 5111]
Mark Doliner <mark@kingant.net>
parents: 4789
diff changeset
1578 } else
e737e3e08b4a [gaim-migrate @ 5111]
Mark Doliner <mark@kingant.net>
parents: 4789
diff changeset
1579 cur->item = NULL;
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1580
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1581 } else if (cur->action == AIM_CB_SSI_MOD) {
4292
78a3d2caf84c [gaim-migrate @ 4545]
Mark Doliner <mark@kingant.net>
parents: 4282
diff changeset
1582 /* Replace the official item with the item from the local list */
4791
e737e3e08b4a [gaim-migrate @ 5111]
Mark Doliner <mark@kingant.net>
parents: 4789
diff changeset
1583 if (aim_ssi_itemlist_valid(sess->ssi.local, cur->item)) {
e737e3e08b4a [gaim-migrate @ 5111]
Mark Doliner <mark@kingant.net>
parents: 4789
diff changeset
1584 struct aim_ssi_item *cur1;
e737e3e08b4a [gaim-migrate @ 5111]
Mark Doliner <mark@kingant.net>
parents: 4789
diff changeset
1585 if ((cur1 = aim_ssi_itemlist_find(sess->ssi.official, cur->item->gid, cur->item->bid))) {
e737e3e08b4a [gaim-migrate @ 5111]
Mark Doliner <mark@kingant.net>
parents: 4789
diff changeset
1586 free(cur1->name);
e737e3e08b4a [gaim-migrate @ 5111]
Mark Doliner <mark@kingant.net>
parents: 4789
diff changeset
1587 if (cur->item->name) {
e737e3e08b4a [gaim-migrate @ 5111]
Mark Doliner <mark@kingant.net>
parents: 4789
diff changeset
1588 cur1->name = (char *)malloc((strlen(cur->item->name)+1)*sizeof(char));
e737e3e08b4a [gaim-migrate @ 5111]
Mark Doliner <mark@kingant.net>
parents: 4789
diff changeset
1589 strcpy(cur1->name, cur->item->name);
e737e3e08b4a [gaim-migrate @ 5111]
Mark Doliner <mark@kingant.net>
parents: 4789
diff changeset
1590 } else
e737e3e08b4a [gaim-migrate @ 5111]
Mark Doliner <mark@kingant.net>
parents: 4789
diff changeset
1591 cur1->name = NULL;
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1592 aim_tlvlist_free(&cur1->data);
4791
e737e3e08b4a [gaim-migrate @ 5111]
Mark Doliner <mark@kingant.net>
parents: 4789
diff changeset
1593 cur1->data = aim_tlvlist_copy(cur->item->data);
e737e3e08b4a [gaim-migrate @ 5111]
Mark Doliner <mark@kingant.net>
parents: 4789
diff changeset
1594 }
e737e3e08b4a [gaim-migrate @ 5111]
Mark Doliner <mark@kingant.net>
parents: 4789
diff changeset
1595 } else
e737e3e08b4a [gaim-migrate @ 5111]
Mark Doliner <mark@kingant.net>
parents: 4789
diff changeset
1596 cur->item = NULL;
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1597
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1598 } else if (cur->action == AIM_CB_SSI_DEL) {
4292
78a3d2caf84c [gaim-migrate @ 4545]
Mark Doliner <mark@kingant.net>
parents: 4282
diff changeset
1599 /* Remove the item from the official list */
4791
e737e3e08b4a [gaim-migrate @ 5111]
Mark Doliner <mark@kingant.net>
parents: 4789
diff changeset
1600 if (aim_ssi_itemlist_valid(sess->ssi.official, cur->item))
e737e3e08b4a [gaim-migrate @ 5111]
Mark Doliner <mark@kingant.net>
parents: 4789
diff changeset
1601 aim_ssi_itemlist_del(&sess->ssi.official, cur->item);
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1602 cur->item = NULL;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1603 }
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1604
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1605 }
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1606 } /* End if (cur->item) */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1607 } /* End for loop */
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
1608
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
1609 if ((userfunc = aim_callhandler(sess, rx->conn, snac->family, snac->subtype)))
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1610 ret = userfunc(sess, rx, sess->ssi.pending);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1611
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1612 /* Free all aim_ssi_tmp's with an outcome */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1613 cur = sess->ssi.pending;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1614 while (cur && (cur->ack != 0xffff)) {
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1615 del = cur;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1616 cur = cur->next;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1617 free(del->name);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1618 free(del);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1619 }
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1620 sess->ssi.pending = cur;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1621
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1622 /* If we're not waiting for any more acks, then send more SNACs */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1623 if (!sess->ssi.pending) {
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1624 sess->ssi.pending = NULL;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1625 sess->ssi.waiting_for_ack = 0;
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1626 aim_ssi_sync(sess);
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1627 }
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
1628
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
1629 return ret;
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
1630 }
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
1631
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
1632 /*
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1633 * Subtype 0x000f - SSI Data Unchanged.
2672
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1634 *
6350
34c07f5f34a0 [gaim-migrate @ 6849]
Mark Doliner <mark@kingant.net>
parents: 6101
diff changeset
1635 * Response to aim_ssi_reqifchanged() if the server-side data is not newer than
2672
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1636 * posted local stamp/revision.
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1637 *
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1638 */
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1639 static int parsedataunchanged(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, aim_bstream_t *bs)
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1640 {
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1641 int ret = 0;
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1642 aim_rxcallback_t userfunc;
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1643
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
1644 sess->ssi.received_data = 1;
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
1645
2672
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1646 if ((userfunc = aim_callhandler(sess, rx->conn, snac->family, snac->subtype)))
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1647 ret = userfunc(sess, rx);
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1648
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1649 return ret;
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1650 }
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1651
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1652 /*
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1653 * Subtype 0x0011 - SSI Begin Data Modification.
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1654 *
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1655 * Tells the server you're going to start modifying data.
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1656 *
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1657 */
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1658 faim_export int aim_ssi_modbegin(aim_session_t *sess)
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1659 {
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1660 aim_conn_t *conn;
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1661
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1662 if (!sess || !(conn = aim_conn_findbygroup(sess, AIM_CB_FAM_SSI)))
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1663 return -EINVAL;
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1664
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1665 return aim_genericreq_n(sess, conn, AIM_CB_FAM_SSI, AIM_CB_SSI_EDITSTART);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1666 }
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1667
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1668 /*
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1669 * Subtype 0x0012 - SSI End Data Modification.
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1670 *
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1671 * Tells the server you're finished modifying data.
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1672 *
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1673 */
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1674 faim_export int aim_ssi_modend(aim_session_t *sess)
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1675 {
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1676 aim_conn_t *conn;
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1677
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1678 if (!sess || !(conn = aim_conn_findbygroup(sess, AIM_CB_FAM_SSI)))
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1679 return -EINVAL;
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1680
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1681 return aim_genericreq_n(sess, conn, AIM_CB_FAM_SSI, AIM_CB_SSI_EDITSTOP);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1682 }
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1683
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1684 /*
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1685 * Subtype 0x0014 - Grant authorization
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1686 *
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1687 * Authorizes a contact so they can add you to their contact list.
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1688 *
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1689 */
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1690 faim_export int aim_ssi_sendauth(aim_session_t *sess, char *sn, char *msg)
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1691 {
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1692 aim_conn_t *conn;
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1693 aim_frame_t *fr;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1694 aim_snacid_t snacid;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1695
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1696 if (!sess || !(conn = aim_conn_findbygroup(sess, AIM_CB_FAM_SSI)) || !sn)
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1697 return -EINVAL;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1698
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1699 if (!(fr = aim_tx_new(sess, conn, AIM_FRAMETYPE_FLAP, 0x02, 10+1+strlen(sn)+2+(msg ? strlen(msg)+1 : 0)+2)))
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1700 return -ENOMEM;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1701
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1702 snacid = aim_cachesnac(sess, AIM_CB_FAM_SSI, AIM_CB_SSI_SENDAUTH, 0x0000, NULL, 0);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1703 aim_putsnac(&fr->data, AIM_CB_FAM_SSI, AIM_CB_SSI_SENDAUTH, 0x0000, snacid);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1704
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1705 /* Screen name */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1706 aimbs_put8(&fr->data, strlen(sn));
10990
8d74ae785a46 [gaim-migrate @ 12828]
Mark Doliner <mark@kingant.net>
parents: 10986
diff changeset
1707 aimbs_putstr(&fr->data, sn);
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1708
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1709 /* Message (null terminated) */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1710 aimbs_put16(&fr->data, msg ? strlen(msg) : 0);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1711 if (msg) {
10990
8d74ae785a46 [gaim-migrate @ 12828]
Mark Doliner <mark@kingant.net>
parents: 10986
diff changeset
1712 aimbs_putstr(&fr->data, msg);
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1713 aimbs_put8(&fr->data, 0x00);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1714 }
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1715
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1716 /* Unknown */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1717 aimbs_put16(&fr->data, 0x0000);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1718
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1719 aim_tx_enqueue(sess, fr);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1720
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1721 return 0;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1722 }
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1723
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1724 /*
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1725 * Subtype 0x0015 - Receive an authorization grant
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1726 */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1727 static int receiveauthgrant(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, aim_bstream_t *bs)
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1728 {
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1729 int ret = 0;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1730 aim_rxcallback_t userfunc;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1731 fu16_t tmp;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1732 char *sn, *msg;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1733
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1734 /* Read screen name */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1735 if ((tmp = aimbs_get8(bs)))
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1736 sn = aimbs_getstr(bs, tmp);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1737 else
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1738 sn = NULL;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1739
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1740 /* Read message (null terminated) */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1741 if ((tmp = aimbs_get16(bs)))
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1742 msg = aimbs_getstr(bs, tmp);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1743 else
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1744 msg = NULL;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1745
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1746 /* Unknown */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1747 tmp = aimbs_get16(bs);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1748
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1749 if ((userfunc = aim_callhandler(sess, rx->conn, snac->family, snac->subtype)))
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1750 ret = userfunc(sess, rx, sn, msg);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1751
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1752 free(sn);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1753 free(msg);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1754
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1755 return ret;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1756 }
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1757
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1758 /*
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1759 * Subtype 0x0018 - Send authorization request
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1760 *
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1761 * Sends a request for authorization to the given contact. The request will either be
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1762 * granted, denied, or dropped.
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1763 *
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1764 */
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1765 faim_export int aim_ssi_sendauthrequest(aim_session_t *sess, char *sn, char *msg)
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1766 {
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1767 aim_conn_t *conn;
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1768 aim_frame_t *fr;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1769 aim_snacid_t snacid;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1770
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1771 if (!sess || !(conn = aim_conn_findbygroup(sess, AIM_CB_FAM_SSI)) || !sn)
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1772 return -EINVAL;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1773
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1774 if (!(fr = aim_tx_new(sess, conn, AIM_FRAMETYPE_FLAP, 0x02, 10+1+strlen(sn)+2+(msg ? strlen(msg)+1 : 0)+2)))
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1775 return -ENOMEM;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1776
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1777 snacid = aim_cachesnac(sess, AIM_CB_FAM_SSI, AIM_CB_SSI_SENDAUTHREQ, 0x0000, NULL, 0);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1778 aim_putsnac(&fr->data, AIM_CB_FAM_SSI, AIM_CB_SSI_SENDAUTHREQ, 0x0000, snacid);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1779
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1780 /* Screen name */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1781 aimbs_put8(&fr->data, strlen(sn));
10990
8d74ae785a46 [gaim-migrate @ 12828]
Mark Doliner <mark@kingant.net>
parents: 10986
diff changeset
1782 aimbs_putstr(&fr->data, sn);
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1783
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1784 /* Message (null terminated) */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1785 aimbs_put16(&fr->data, msg ? strlen(msg) : 0);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1786 if (msg) {
10990
8d74ae785a46 [gaim-migrate @ 12828]
Mark Doliner <mark@kingant.net>
parents: 10986
diff changeset
1787 aimbs_putstr(&fr->data, msg);
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1788 aimbs_put8(&fr->data, 0x00);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1789 }
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1790
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1791 /* Unknown */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1792 aimbs_put16(&fr->data, 0x0000);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1793
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1794 aim_tx_enqueue(sess, fr);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1795
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1796 return 0;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1797 }
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1798
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1799 /*
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1800 * Subtype 0x0019 - Receive an authorization request
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1801 */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1802 static int receiveauthrequest(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, aim_bstream_t *bs)
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1803 {
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1804 int ret = 0;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1805 aim_rxcallback_t userfunc;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1806 fu16_t tmp;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1807 char *sn, *msg;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1808
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1809 /* Read screen name */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1810 if ((tmp = aimbs_get8(bs)))
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1811 sn = aimbs_getstr(bs, tmp);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1812 else
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1813 sn = NULL;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1814
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1815 /* Read message (null terminated) */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1816 if ((tmp = aimbs_get16(bs)))
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1817 msg = aimbs_getstr(bs, tmp);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1818 else
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1819 msg = NULL;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1820
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1821 /* Unknown */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1822 tmp = aimbs_get16(bs);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1823
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1824 if ((userfunc = aim_callhandler(sess, rx->conn, snac->family, snac->subtype)))
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1825 ret = userfunc(sess, rx, sn, msg);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1826
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1827 free(sn);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1828 free(msg);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1829
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1830 return ret;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1831 }
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1832
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1833 /*
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1834 * Subtype 0x001a - Send authorization reply
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1835 *
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1836 * Sends a reply to a request for authorization. The reply can either
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1837 * grant authorization or deny authorization.
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1838 *
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1839 * if reply=0x00 then deny
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1840 * if reply=0x01 then grant
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1841 *
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1842 */
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1843 faim_export int aim_ssi_sendauthreply(aim_session_t *sess, char *sn, fu8_t reply, char *msg)
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1844 {
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1845 aim_conn_t *conn;
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1846 aim_frame_t *fr;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1847 aim_snacid_t snacid;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1848
4889
f7150929332b [gaim-migrate @ 5219]
Mark Doliner <mark@kingant.net>
parents: 4791
diff changeset
1849 if (!sess || !(conn = aim_conn_findbygroup(sess, AIM_CB_FAM_SSI)) || !sn)
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1850 return -EINVAL;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1851
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1852 if (!(fr = aim_tx_new(sess, conn, AIM_FRAMETYPE_FLAP, 0x02, 10 + 1+strlen(sn) + 1 + 2+(msg ? strlen(msg)+1 : 0) + 2)))
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1853 return -ENOMEM;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1854
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1855 snacid = aim_cachesnac(sess, AIM_CB_FAM_SSI, AIM_CB_SSI_SENDAUTHREP, 0x0000, NULL, 0);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1856 aim_putsnac(&fr->data, AIM_CB_FAM_SSI, AIM_CB_SSI_SENDAUTHREP, 0x0000, snacid);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1857
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1858 /* Screen name */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1859 aimbs_put8(&fr->data, strlen(sn));
10990
8d74ae785a46 [gaim-migrate @ 12828]
Mark Doliner <mark@kingant.net>
parents: 10986
diff changeset
1860 aimbs_putstr(&fr->data, sn);
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1861
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1862 /* Grant or deny */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1863 aimbs_put8(&fr->data, reply);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1864
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1865 /* Message (null terminated) */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1866 aimbs_put16(&fr->data, msg ? (strlen(msg)+1) : 0);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1867 if (msg) {
10990
8d74ae785a46 [gaim-migrate @ 12828]
Mark Doliner <mark@kingant.net>
parents: 10986
diff changeset
1868 aimbs_putstr(&fr->data, msg);
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1869 aimbs_put8(&fr->data, 0x00);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1870 }
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1871
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1872 /* Unknown */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1873 aimbs_put16(&fr->data, 0x0000);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1874
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1875 aim_tx_enqueue(sess, fr);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1876
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1877 return 0;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1878 }
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1879
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1880 /*
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1881 * Subtype 0x001b - Receive an authorization reply
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1882 * You get this bad boy when other people respond to the authorization
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1883 * request that you have previously sent them.
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1884 */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1885 static int receiveauthreply(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, aim_bstream_t *bs)
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1886 {
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1887 int ret = 0;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1888 aim_rxcallback_t userfunc;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1889 fu16_t tmp;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1890 fu8_t reply;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1891 char *sn, *msg;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1892
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1893 /* Read screen name */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1894 if ((tmp = aimbs_get8(bs)))
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1895 sn = aimbs_getstr(bs, tmp);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1896 else
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1897 sn = NULL;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1898
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1899 /* Read reply */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1900 reply = aimbs_get8(bs);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1901
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1902 /* Read message (null terminated) */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1903 if ((tmp = aimbs_get16(bs)))
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1904 msg = aimbs_getstr(bs, tmp);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1905 else
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1906 msg = NULL;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1907
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1908 /* Unknown */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1909 tmp = aimbs_get16(bs);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1910
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1911 if ((userfunc = aim_callhandler(sess, rx->conn, snac->family, snac->subtype)))
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1912 ret = userfunc(sess, rx, sn, reply, msg);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1913
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1914 free(sn);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1915 free(msg);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1916
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1917 return ret;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1918 }
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1919
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1920 /*
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1921 * Subtype 0x001c - Receive a message telling you someone added you to their list.
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1922 */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1923 static int receiveadded(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, aim_bstream_t *bs)
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1924 {
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1925 int ret = 0;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1926 aim_rxcallback_t userfunc;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1927 fu16_t tmp;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1928 char *sn;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1929
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1930 /* Read screen name */
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1931 if ((tmp = aimbs_get8(bs)))
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1932 sn = aimbs_getstr(bs, tmp);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1933 else
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1934 sn = NULL;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1935
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1936 if ((userfunc = aim_callhandler(sess, rx->conn, snac->family, snac->subtype)))
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1937 ret = userfunc(sess, rx, sn);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1938
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1939 free(sn);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1940
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1941 return ret;
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1942 }
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1943
2672
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1944 static int snachandler(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, aim_bstream_t *bs)
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1945 {
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1946
3017
f0e8770d786d [gaim-migrate @ 3030]
Rob Flynn <gaim@robflynn.com>
parents: 3000
diff changeset
1947 if (snac->subtype == AIM_CB_SSI_RIGHTSINFO)
2672
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1948 return parserights(sess, mod, rx, snac, bs);
3017
f0e8770d786d [gaim-migrate @ 3030]
Rob Flynn <gaim@robflynn.com>
parents: 3000
diff changeset
1949 else if (snac->subtype == AIM_CB_SSI_LIST)
2672
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1950 return parsedata(sess, mod, rx, snac, bs);
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1951 else if (snac->subtype == AIM_CB_SSI_ADD)
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1952 return parseadd(sess, mod, rx, snac, bs);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1953 else if (snac->subtype == AIM_CB_SSI_MOD)
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1954 return parsemod(sess, mod, rx, snac, bs);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1955 else if (snac->subtype == AIM_CB_SSI_DEL)
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1956 return parsedel(sess, mod, rx, snac, bs);
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
1957 else if (snac->subtype == AIM_CB_SSI_SRVACK)
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
1958 return parseack(sess, mod, rx, snac, bs);
3017
f0e8770d786d [gaim-migrate @ 3030]
Rob Flynn <gaim@robflynn.com>
parents: 3000
diff changeset
1959 else if (snac->subtype == AIM_CB_SSI_NOLIST)
2672
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1960 return parsedataunchanged(sess, mod, rx, snac, bs);
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1961 else if (snac->subtype == AIM_CB_SSI_RECVAUTH)
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1962 return receiveauthgrant(sess, mod, rx, snac, bs);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1963 else if (snac->subtype == AIM_CB_SSI_RECVAUTHREQ)
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1964 return receiveauthrequest(sess, mod, rx, snac, bs);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1965 else if (snac->subtype == AIM_CB_SSI_RECVAUTHREP)
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1966 return receiveauthreply(sess, mod, rx, snac, bs);
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1967 else if (snac->subtype == AIM_CB_SSI_ADDED)
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1968 return receiveadded(sess, mod, rx, snac, bs);
2672
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1969
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1970 return 0;
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1971 }
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1972
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
1973 static void ssi_shutdown(aim_session_t *sess, aim_module_t *mod)
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
1974 {
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
1975 aim_ssi_freelist(sess);
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
1976 }
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
1977
2672
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1978 faim_internal int ssi_modfirst(aim_session_t *sess, aim_module_t *mod)
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1979 {
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1980
3017
f0e8770d786d [gaim-migrate @ 3030]
Rob Flynn <gaim@robflynn.com>
parents: 3000
diff changeset
1981 mod->family = AIM_CB_FAM_SSI;
4230
9f729d6d88a6 [gaim-migrate @ 4475]
Mark Doliner <mark@kingant.net>
parents: 4071
diff changeset
1982 mod->version = 0x0004;
2672
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1983 mod->toolid = 0x0110;
4071
2532f1192da3 [gaim-migrate @ 4283]
Mark Doliner <mark@kingant.net>
parents: 3867
diff changeset
1984 mod->toolversion = 0x0629;
2672
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1985 mod->flags = 0;
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1986 strncpy(mod->name, "ssi", sizeof(mod->name));
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1987 mod->snachandler = snachandler;
2991
9d11dbb33b6f [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2672
diff changeset
1988 mod->shutdown = ssi_shutdown;
2672
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1989
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1990 return 0;
c41030cfed76 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents:
diff changeset
1991 }