annotate mcabber/libjabber/libxode.h @ 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 9054697b1a06
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
417
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
1 /*
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
2 * jabberd - Jabber Open Source Server
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
3 * Copyright (c) 2002 Jeremie Miller, Thomas Muldowney,
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
4 * Ryan Eatmon, Robert Norris
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
5 *
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
6 * This program is free software; you can redistribute it and/or modify
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
7 * it under the terms of the GNU General Public License as published by
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
8 * the Free Software Foundation; either version 2 of the License, or
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
9 * (at your option) any later version.
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
10 *
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
11 * This program is distributed in the hope that it will be useful,
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
14 * GNU General Public License for more details.
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
15 *
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
16 * You should have received a copy of the GNU General Public License
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
17 * along with this program; if not, write to the Free Software
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA02111-1307USA
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
19 */
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
20
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
21 #ifdef HAVE_CONFIG_H
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
22 # include <config.h>
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
23 #endif
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
24
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
25 #include <string.h>
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
26 #include <stdlib.h>
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
27 #include <sys/types.h>
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
28 #include <stdio.h>
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
29 #include <setjmp.h>
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
30 #include <sys/stat.h>
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
31 #include <fcntl.h>
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
32 #include <errno.h>
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
33 #include <signal.h>
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
34 #include <strings.h>
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
35 #include <unistd.h>
417
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
36 #include <sys/time.h>
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
37 #include <syslog.h>
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
38 #include <netinet/in.h>
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
39 #include <netdb.h>
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
40 #include <arpa/inet.h>
417
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
41 #include <sys/socket.h>
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
42
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
43 #include "xmlparse.h"
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
44
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
45 /*
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
46 ** Arrange to use either varargs or stdargs
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
47 */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
48
417
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
49 #define MAXSHORTSTR 203 /* max short string length */
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
50 #define QUAD_T unsigned long long
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
51
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
52 #ifdef __STDC__
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
53
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
54 #include <stdarg.h>
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
55
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
56 # define VA_LOCAL_DECL va_list ap;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
57 # define VA_START(f) va_start(ap, f)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
58 # define VA_END va_end(ap)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
59
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
60 #else /* __STDC__ */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
61
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
62 # include <varargs.h>
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
63
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
64 # define VA_LOCAL_DECL va_list ap;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
65 # define VA_START(f) va_start(ap)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
66 # define VA_END va_end(ap)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
67
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
68 #endif /* __STDC__ */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
69
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
70
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
71 #ifndef INCL_LIBXODE_H
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
72 #define INCL_LIBXODE_H
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
73
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
74 #ifdef __cplusplus
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
75 extern "C" {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
76 #endif
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
77
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
78
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
79 #ifndef HAVE_SNPRINTF
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
80 extern int ap_snprintf(char *, size_t, const char *, ...);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
81 #define snprintf ap_snprintf
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
82 #endif
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
83
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
84 #ifndef HAVE_VSNPRINTF
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
85 extern int ap_vsnprintf(char *, size_t, const char *, va_list ap);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
86 #define vsnprintf ap_vsnprintf
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
87 #endif
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
88
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
89 #define ZONE zonestr(__FILE__,__LINE__)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
90 char *zonestr(char *file, int line);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
91
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
92 /* --------------------------------------------------------- */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
93 /* */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
94 /* Pool-based memory management routines */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
95 /* */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
96 /* --------------------------------------------------------- */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
97
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
98 #undef POOL_DEBUG
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
99 /*
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
100 flip these, this should be a prime number for top # of pools debugging
417
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
101 #define POOL_DEBUG 40009
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
102 */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
103
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
104 /* pheap - singular allocation of memory */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
105 struct pheap
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
106 {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
107 void *block;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
108 int size, used;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
109 };
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
110
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
111 /* pool_cleaner - callback type which is associated
417
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
112 with a pool entry; invoked when the pool entry is
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
113 free'd */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
114 typedef void (*pool_cleaner)(void *arg);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
115
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
116 /* pfree - a linked list node which stores an
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
117 allocation chunk, plus a callback */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
118 struct pfree
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
119 {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
120 pool_cleaner f;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
121 void *arg;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
122 struct pheap *heap;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
123 struct pfree *next;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
124 };
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
125
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
126 /* pool - base node for a pool. Maintains a linked list
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
127 of pool entries (pfree) */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
128 typedef struct pool_struct
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
129 {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
130 int size;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
131 struct pfree *cleanup;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
132 struct pheap *heap;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
133 #ifdef POOL_DEBUG
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
134 char name[8], zone[32];
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
135 int lsize;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
136 } _pool, *pool;
417
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
137 #define pool_new() _pool_new(__FILE__,__LINE__)
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
138 #define pool_heap(i) _pool_new_heap(i,__FILE__,__LINE__)
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
139 #else
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
140 } _pool, *pool;
417
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
141 #define pool_heap(i) _pool_new_heap(i, NULL, 0)
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
142 #define pool_new() _pool_new(NULL, 0)
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
143 #endif
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
144
417
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
145 pool _pool_new(char *zone, int line); /* new pool :) */
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
146 pool _pool_new_heap(int size, char *zone, int line); /* creates a new memory pool with an initial heap size */
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
147 void *pmalloc(pool p, int size); /* wrapper around malloc, takes from the pool, cleaned up automatically */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
148 void *pmalloc_x(pool p, int size, char c); /* Wrapper around pmalloc which prefils buffer with c */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
149 void *pmalloco(pool p, int size); /* YAPW for zeroing the block */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
150 char *pstrdup(pool p, const char *src); /* wrapper around strdup, gains mem from pool */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
151 void pool_stat(int full); /* print to stderr the changed pools and reset */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
152 char *pstrdupx(pool p, const char *src); /* temp stub */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
153 void pool_cleanup(pool p, pool_cleaner f, void *arg); /* calls f(arg) before the pool is freed during cleanup */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
154 void pool_free(pool p); /* calls the cleanup functions, frees all the data on the pool, and deletes the pool itself */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
155 int pool_size(pool p); /* returns total bytes allocated in this pool */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
156
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
157
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
158
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
159
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
160 /* --------------------------------------------------------- */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
161 /* */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
162 /* Socket helper stuff */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
163 /* */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
164 /* --------------------------------------------------------- */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
165 #ifndef MAXHOSTNAMELEN
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
166 #define MAXHOSTNAMELEN 64
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
167 #endif
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
168
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
169 #define NETSOCKET_SERVER 0
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
170 #define NETSOCKET_CLIENT 1
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
171 #define NETSOCKET_UDP 2
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
172
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
173 #ifndef WIN32
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
174 int make_netsocket(u_short port, char *host, int type, int ssl);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
175 int make_nb_netsocket(u_short port, char *host, int type, int ssl, int * state);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
176 void change_socket_to_blocking(int socket);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
177 struct in_addr *make_addr(char *host);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
178 int set_fd_close_on_exec(int fd, int flag);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
179 #endif
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
180
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
181
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
182 /* --------------------------------------------------------- */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
183 /* */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
184 /* String management routines */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
185 /* */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
186 /* --------------------------------------------------------- */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
187 char *j_strdup(const char *str); /* provides NULL safe strdup wrapper */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
188 char *j_strcat(char *dest, char *txt); /* strcpy() clone */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
189 int j_strcmp(const char *a, const char *b); /* provides NULL safe strcmp wrapper */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
190 int j_strcasecmp(const char *a, const char *b); /* provides NULL safe strcasecmp wrapper */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
191 int j_strncmp(const char *a, const char *b, int i); /* provides NULL safe strncmp wrapper */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
192 int j_strncasecmp(const char *a, const char *b, int i); /* provides NULL safe strncasecmp wrapper */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
193 int j_strlen(const char *a); /* provides NULL safe strlen wrapper */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
194 int j_atoi(const char *a, int def); /* checks for NULL and uses default instead, convienence */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
195 void str_b64decode(char *str); /* what it says */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
196
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
197
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 /* SHA calculations */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
201 /* */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
202 /* --------------------------------------------------------- */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
203 #if (SIZEOF_INT == 4)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
204 typedef unsigned int uint32;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
205 #elif (SIZEOF_SHORT == 4)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
206 typedef unsigned short uint32;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
207 #else
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
208 typedef unsigned int uint32;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
209 #endif /* HAVEUINT32 */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
210
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
211 int sha_hash(int *data, int *hash);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
212 int sha_init(int *hash);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
213 char *shahash(char *str); /* NOT THREAD SAFE */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
214 void shahash_r(const char* str, char hashbuf[40]); /* USE ME */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
215
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
216 int strprintsha(char *dest, int *hashval);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
217
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
218
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
219 /* --------------------------------------------------------- */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
220 /* */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
221 /* Hashtable functions */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
222 /* */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
223 /* --------------------------------------------------------- */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
224 typedef int (*KEYHASHFUNC)(const void *key);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
225 typedef int (*KEYCOMPAREFUNC)(const void *key1, const void *key2);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
226 typedef int (*TABLEWALKFUNC)(void *user_data, const void *key, void *data);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
227
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
228 typedef void *HASHTABLE;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
229
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
230 HASHTABLE ghash_create(int buckets, KEYHASHFUNC hash, KEYCOMPAREFUNC cmp);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
231 void ghash_destroy(HASHTABLE tbl);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
232 void *ghash_get(HASHTABLE tbl, const void *key);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
233 int ghash_put(HASHTABLE tbl, const void *key, void *value);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
234 int ghash_remove(HASHTABLE tbl, const void *key);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
235 int ghash_walk(HASHTABLE tbl, TABLEWALKFUNC func, void *user_data);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
236 int str_hash_code(const char *s);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
237
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
238
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
239 /* --------------------------------------------------------- */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
240 /* */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
241 /* XML escaping utils */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
242 /* */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
243 /* --------------------------------------------------------- */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
244 char *strescape(pool p, char *buf); /* Escape <>&'" chars */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
245 char *strunescape(pool p, char *buf);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
246
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
247
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
248 /* --------------------------------------------------------- */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
249 /* */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
250 /* String pools (spool) functions */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
251 /* */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
252 /* --------------------------------------------------------- */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
253 struct spool_node
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
254 {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
255 char *c;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
256 struct spool_node *next;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
257 };
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
258
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
259 typedef struct spool_struct
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
260 {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
261 pool p;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
262 int len;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
263 struct spool_node *last;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
264 struct spool_node *first;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
265 } *spool;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
266
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
267 spool spool_new(pool p); /* create a string pool */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
268 void spooler(spool s, ...); /* append all the char * args to the pool, terminate args with s again */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
269 char *spool_print(spool s); /* return a big string */
417
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
270 void spool_add(spool s, char *str); /* add a single string to the pool */
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
271 char *spools(pool p, ...); /* wrap all the spooler stuff in one function, the happy fun ball! */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
272
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
273
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
274 /* --------------------------------------------------------- */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
275 /* */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
276 /* xmlnodes - Document Object Model */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
277 /* */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
278 /* --------------------------------------------------------- */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
279 #define NTYPE_TAG 0
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
280 #define NTYPE_ATTRIB 1
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
281 #define NTYPE_CDATA 2
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
282
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
283 #define NTYPE_LAST 2
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
284 #define NTYPE_UNDEF -1
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
285
417
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
286 /* --------------------------------------------------------------------------
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
287 Node structure. Do not use directly! Always use accessor macros
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
288 and methods!
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
289 -------------------------------------------------------------------------- */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
290 typedef struct xmlnode_t
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
291 {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
292 char* name;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
293 unsigned short type;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
294 char* data;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
295 int data_sz;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
296 int complete;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
297 pool p;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
298 struct xmlnode_t* parent;
417
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
299 struct xmlnode_t* firstchild;
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
300 struct xmlnode_t* lastchild;
417
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
301 struct xmlnode_t* prev;
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
302 struct xmlnode_t* next;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
303 struct xmlnode_t* firstattrib;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
304 struct xmlnode_t* lastattrib;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
305 } _xmlnode, *xmlnode;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
306
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
307 /* Node creation routines */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
308 xmlnode xmlnode_wrap(xmlnode x,const char* wrapper);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
309 xmlnode xmlnode_new_tag(const char* name);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
310 xmlnode xmlnode_new_tag_pool(pool p, const char* name);
417
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
311 xmlnode xmlnode_insert_tag(xmlnode parent, const char* name);
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
312 xmlnode xmlnode_insert_cdata(xmlnode parent, const char* CDATA, unsigned int size);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
313 xmlnode xmlnode_insert_tag_node(xmlnode parent, xmlnode node);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
314 void xmlnode_insert_node(xmlnode parent, xmlnode node);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
315 xmlnode xmlnode_str(char *str, int len);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
316 xmlnode xmlnode_file(char *file);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
317 xmlnode xmlnode_dup(xmlnode x); /* duplicate x */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
318 xmlnode xmlnode_dup_pool(pool p, xmlnode x);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
319
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
320 /* Node Memory Pool */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
321 pool xmlnode_pool(xmlnode node);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
322 xmlnode _xmlnode_new(pool p, const char *name, unsigned int type);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
323
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
324 /* Node editing */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
325 void xmlnode_hide(xmlnode child);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
326 void xmlnode_hide_attrib(xmlnode parent, const char *name);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
327
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
328 /* Node deletion routine, also frees the node pool! */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
329 void xmlnode_free(xmlnode node);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
330
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
331 /* Locates a child tag by name and returns it */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
332 xmlnode xmlnode_get_tag(xmlnode parent, const char* name);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
333 char* xmlnode_get_tag_data(xmlnode parent, const char* name);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
334
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
335 /* Attribute accessors */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
336 void xmlnode_put_attrib(xmlnode owner, const char* name, const char* value);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
337 char* xmlnode_get_attrib(xmlnode owner, const char* name);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
338 void xmlnode_put_expat_attribs(xmlnode owner, const char** atts);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
339
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
340 /* Bastard am I, but these are fun for internal use ;-) */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
341 void xmlnode_put_vattrib(xmlnode owner, const char* name, void *value);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
342 void* xmlnode_get_vattrib(xmlnode owner, const char* name);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
343
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
344 /* Node traversal routines */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
345 xmlnode xmlnode_get_firstattrib(xmlnode parent);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
346 xmlnode xmlnode_get_firstchild(xmlnode parent);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
347 xmlnode xmlnode_get_lastchild(xmlnode parent);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
348 xmlnode xmlnode_get_nextsibling(xmlnode sibling);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
349 xmlnode xmlnode_get_prevsibling(xmlnode sibling);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
350 xmlnode xmlnode_get_parent(xmlnode node);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
351
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
352 /* Node information routines */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
353 char* xmlnode_get_name(xmlnode node);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
354 char* xmlnode_get_data(xmlnode node);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
355 int xmlnode_get_datasz(xmlnode node);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
356 int xmlnode_get_type(xmlnode node);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
357
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
358 int xmlnode_has_children(xmlnode node);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
359 int xmlnode_has_attribs(xmlnode node);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
360
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
361 /* Node-to-string translation */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
362 char* xmlnode2str(xmlnode node);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
363
417
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
364 /* Node-to-terminated-string translation
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
365 -- useful for interfacing w/ scripting langs */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
366 char* xmlnode2tstr(xmlnode node);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
367
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
368 int xmlnode_cmp(xmlnode a, xmlnode b); /* compares a and b for equality */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
369
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
370 int xmlnode2file(char *file, xmlnode node); /* writes node to file */
417
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
371 int xmlnode2file_limited(char *file, xmlnode node, size_t sizelimit);
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
372
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
373 /* Expat callbacks */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
374 void expat_startElement(void* userdata, const char* name, const char** atts);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
375 void expat_endElement(void* userdata, const char* name);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
376 void expat_charData(void* userdata, const char* s, int len);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
377
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
378 /***********************
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
379 * XSTREAM Section
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
380 ***********************/
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
381
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
382 #define XSTREAM_MAXNODE 1000000
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
383 #define XSTREAM_MAXDEPTH 100
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
384
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
385 #define XSTREAM_ROOT 0 /* root element */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
386 #define XSTREAM_NODE 1 /* normal node */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
387 #define XSTREAM_CLOSE 2 /* closed </stream:stream> */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
388 #define XSTREAM_ERR 4 /* parser error */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
389
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
390 typedef void (*xstream_onNode)(int type, xmlnode x, void *arg); /* xstream event handler */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
391
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
392 typedef struct xstream_struct
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
393 {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
394 XML_Parser parser;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
395 xmlnode node;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
396 char *cdata;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
397 int cdata_len;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
398 pool p;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
399 xstream_onNode f;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
400 void *arg;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
401 int status;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
402 int depth;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
403 } *xstream, _xstream;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
404
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
405 xstream xstream_new(pool p, xstream_onNode f, void *arg); /* create a new xstream */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
406 int xstream_eat(xstream xs, char *buff, int len); /* parse new data for this xstream, returns last XSTREAM_* status */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
407
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
408 /* convience functions */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
409 xmlnode xstream_header(char *nspace, char *to, char *from);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
410 char *xstream_header_char(xmlnode x);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
411
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
412 /* SHA.H */
417
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
413 /*
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
414 * The contents of this file are subject to the Mozilla Public
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
415 * License Version 1.1 (the "License"); you may not use this file
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
416 * except in compliance with the License. You may obtain a copy of
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
417 * the License at http://www.mozilla.org/MPL/
417
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
418 *
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
419 * Software distributed under the License is distributed on an "AS
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
420 * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
421 * implied. See the License for the specific language governing
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
422 * rights and limitations under the License.
417
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
423 *
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
424 * The Original Code is SHA 180-1 Header File
417
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
425 *
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
426 * The Initial Developer of the Original Code is Paul Kocher of
417
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
427 * Cryptography Research. Portions created by Paul Kocher are
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
428 * Copyright (C) 1995-9 by Cryptography Research, Inc. All
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
429 * Rights Reserved.
417
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
430 *
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
431 * Contributor(s):
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
432 *
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
433 * Paul Kocher
417
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
434 *
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
435 * Alternatively, the contents of this file may be used under the
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
436 * terms of the GNU General Public License Version 2 or later (the
417
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
437 * "GPL"), in which case the provisions of the GPL are applicable
c3ae9251c197 Sync libjabber with upstream
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
438 * instead of those above. If you wish to allow use of your
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
439 * version of this file only under the terms of the GPL and not to
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
440 * allow others to use your version of this file under the MPL,
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
441 * indicate your decision by deleting the provisions above and
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
442 * replace them with the notice and other provisions required by
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
443 * the GPL. If you do not delete the provisions above, a recipient
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
444 * may use your version of this file under either the MPL or the
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
445 * GPL.
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
446 */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
447
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
448 typedef struct {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
449 unsigned long H[5];
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
450 unsigned long W[80];
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
451 int lenW;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
452 unsigned long sizeHi,sizeLo;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
453 } SHA_CTX;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
454
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
455
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
456 void shaInit(SHA_CTX *ctx);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
457 void shaUpdate(SHA_CTX *ctx, unsigned char *dataIn, int len);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
458 void shaFinal(SHA_CTX *ctx, unsigned char hashout[20]);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
459 void shaBlock(unsigned char *dataIn, int len, unsigned char hashout[20]);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
460
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
461
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
462 /* END SHA.H */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
463
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
464 #ifdef __cplusplus
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
465 }
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
466 #endif
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
467
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
468 #endif /* INCL_LIBXODE_H */