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