annotate mcabber/libjabber/pproxy.c @ 430:d03663d2e7d9

Display error messages as specified in RFC3920 (9.3) If possible, we display the child element corresponding to the stanza error conditions defined in RFC3920. Error code and error text will be displayed if available.
author Mikael Berthe <mikael@lilotux.net>
date Sun, 11 Sep 2005 22:01:57 +0200
parents c3ae9251c197
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
1 /*
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
2 * This program is free software; you can redistribute it and/or modify
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
3 * it under the terms of the GNU General Public License as published by
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
4 * the Free Software Foundation; either version 2 of the License, or
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
5 * (at your option) any later version.
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
6 *
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
7 * This program is distributed in the hope that it will be useful,
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
10 * GNU General Public License for more details.
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
11 *
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
12 * You should have received a copy of the GNU General Public License
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
13 * along with this program; if not, write to the Free Software
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
14 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
15 *
417
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
16 * Copyrights
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
17 *
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
18 * Portions created by or assigned to Jabber.com, Inc. are
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
19 * Copyright (c) 1999-2002 Jabber.com, Inc. All Rights Reserved. Contact
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
20 * information for Jabber.com, Inc. is available at http://www.jabber.com/.
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
21 *
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
22 * Portions Copyright (c) 1998-1999 Jeremie Miller.
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
23 *
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
24 * Acknowledgements
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
25 *
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
26 * Special thanks to the Jabber Open Source Contributors for their
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
27 * suggestions and support of Jabber.
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
28 *
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
29 *
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
30 */
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
31
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
32 /**
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
33 * @file pproxy.c
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
34 * @brief presence proxy database - DEPRECATED
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
35 *
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
36 * @deprecated these functions are not used by jabberd itself (but aim-t uses them), they will be removed from jabberd
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
37 *
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
38 * The presence proxy database is used to store presences for different resources of a JID.
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
39 *
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
40 * these aren't the most efficient things in the world, a hash optimized for tiny spaces would be far better
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
41 */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
42
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
43 #include "jabber.h"
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
44
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
45 /* these aren't the most efficient things in the world, a hash optimized for tiny spaces would be far better */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
46
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
47 ppdb _ppdb_new(pool p, jid id)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
48 {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
49 ppdb ret;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
50 ret = pmalloc(p,sizeof(_ppdb));
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
51 ret->p = p;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
52 ret->pri = -1;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
53 ret->next = NULL;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
54 ret->user = NULL;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
55 ret->x = NULL;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
56 ret->id = jid_new(p,jid_full(id));
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
57
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
58 return ret;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
59 }
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
60
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
61 ppdb _ppdb_get(ppdb db, jid id)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
62 {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
63 ppdb cur;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
64
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
65 if(db == NULL || id == NULL) return NULL;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
66
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
67 for(cur = db->next; cur != NULL; cur = cur->next)
417
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
68 if(jid_cmp(cur->id,id) == 0) return cur;
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
69
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
70 return NULL;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
71 }
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
72
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
73 ppdb ppdb_insert(ppdb db, jid id, xmlnode x)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
74 {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
75 ppdb cur, curu;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
76 pool p;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
77
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
78 if(id == NULL || id->server == NULL || x == NULL)
417
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
79 return db;
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
80
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
81 /* new ppdb list dummy holder */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
82 if(db == NULL)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
83 {
417
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
84 p = pool_heap(1024);
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
85 db = _ppdb_new(p,NULL);
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
86 }
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
87
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
88 cur = _ppdb_get(db,id);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
89
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
90 /* just update it */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
91 if(cur != NULL)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
92 {
417
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
93 xmlnode_free(cur->x);
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
94 cur->x = xmlnode_dup(x);
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
95 cur->pri = jutil_priority(x);
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
96 return db;
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
97 }
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
98
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
99 /* make an entry for it */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
100 cur = _ppdb_new(db->p,id);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
101 cur->x = xmlnode_dup(x);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
102 cur->pri = jutil_priority(x);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
103 cur->next = db->next;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
104 db->next = cur;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
105
417
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
106 /* if this is a user's resource presence, get the the user entry */
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
107 if(id->user != NULL && (curu = _ppdb_get(db,jid_user(id))) != cur)
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
108 {
417
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
109 /* no user entry, make one */
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
110 if(curu == NULL)
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
111 {
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
112 curu = _ppdb_new(db->p,jid_user(id));
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
113 curu->next = db->next;
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
114 db->next = curu;
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
115 }
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
116
417
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
117 /* insert this resource into the user list */
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
118 cur->user = curu->user;
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
119 curu->user = cur;
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
120 }
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
121
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
122 return db;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
123 }
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
124
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
125 xmlnode ppdb_primary(ppdb db, jid id)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
126 {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
127 ppdb cur, top;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
128
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
129 if(db == NULL || id == NULL) return NULL;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
130
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
131 cur = _ppdb_get(db,id);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
132
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
133 if(cur == NULL) return NULL;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
134
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
135 /* not user@host check, just return */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
136 if(id->user == NULL || id->resource != NULL) return cur->x;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
137
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
138 top = cur;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
139 for(cur = cur->user; cur != NULL; cur = cur->user)
417
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
140 if(cur->pri >= top->pri) top = cur;
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
141
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
142 if(top != NULL && top->pri >= 0) return top->x;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
143
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
144 return NULL;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
145 }
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
146
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
147 /* return the presence for the id, successive calls return all of the known resources for a user@host address */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
148 xmlnode ppdb_get(ppdb db, jid id)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
149 {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
150 static ppdb last = NULL;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
151 ppdb cur;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
152
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
153 if(db == NULL || id == NULL) return NULL;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
154
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
155 /* MODE: if this is NOT just user@host addy, return just the single entry */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
156 if(id->user == NULL || id->resource != NULL)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
157 {
417
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
158 /* we were just here, return now */
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
159 if(last != NULL)
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
160 {
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
161 last = NULL;
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
162 return NULL;
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
163 }
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
164
417
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
165 last = _ppdb_get(db,id);
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
166 if(last != NULL)
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
167 return last->x;
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
168 else
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
169 return NULL;
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
170 }
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
171
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
172 /* handle looping for user@host */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
173
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
174 /* we're already in the loop */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
175 if(last != NULL)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
176 {
417
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
177 /* this is the last entry in the list */
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
178 if(last->user == NULL)
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
179 {
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
180 last = NULL;
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
181 return NULL;
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
182 }
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
183
417
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
184 last = last->user;
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
185 return last->x;
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
186 }
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
187
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
188 /* start a new loop */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
189 cur = _ppdb_get(db,id);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
190
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
191 if(cur == NULL) return NULL;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
192
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
193 last = cur->user;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
194 if(last != NULL)
417
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
195 return last->x;
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
196 else
417
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
197 return NULL;
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
198 }
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
199
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
200
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
201 void ppdb_free(ppdb db)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
202 {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
203 ppdb cur;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
204
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
205 if(db == NULL) return;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
206
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
207 for(cur = db; cur != NULL; cur = cur->next)
417
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
208 xmlnode_free(cur->x);
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
209
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
210 pool_free(db->p);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
211 }
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
212